C++ Dan Anlayan Müritler
-
abs ve fabs kendi başlarına saçm asapan sonuçlar veriyorlar arkadaşlar zaten double istiyor
siz int() fonksiyonunu ( tam değer , integer , kafadan ondalık kısmı atıyor) kullanın o düzgün sonuçlar veriyor
algoritma şöyle olur
sayıyı gir (sayi)
tam kısmı bul // tamsayi=int(sayi)
ondalık kısmı bul// ondalik=sayi-tamsayi
ondalık kısmın ilk iki hanesini tam sayıya çevir// sayimiz=int(100*ondalik)
böylelikle sayimizi elde etmiş olduk
en yakın kare sayıları arayacağımıza göre öncelikle kendinin kare olup olmadığını kontrol edeceğiz
bunu da virgülden sonraki kısmı 0 la karşılaştırarak yaparız
sayimiz in karekökünün tam değeri kareköküne eşit mi evetse "sayı zaten tam kare"
hayırsa ileriarama etiketine dallan
İLERİ ARAMA // bu bölümde sayimiz birerbirer artırılarak sayının tam kare olup olmadığı yine karekök,int karekök karşılaştırması ile saptanacak
burada sayimiz değişkenini ilk haliyle geri aramada da kullanacağımızdan başka bir değişkene yükleyeceğiz
ileri=sayimiz
ileri yi bir artır//
ileri tamsayıkare mi evet ise
buyukkare=ileri , geri arama etiketine dallan ( burada düzeltem yaptım!!! )
değilse döngüye devam et ( aslında bu bölüme bir sayaç koyup araştırma uzaklığını sınırlamak gerekir yoksa sonsuz döngüye girer)
GERİ ARAMA // ...
geri=sayimiz
sayimizi bir eksilt
geri tamsayı kare mi evet ise kucukkare=sayimiz, sonuçlar etiketine dallan
değilse döngüye devam et ( istenirse buraya da bir sayaç konup araştırma uzaklığı girilebilir ama eninde sonunda sıfıra gelinecektir )
SONUÇLAR
buyukkareyi yaz
kucukkareyi yaz
uzaklıkb= buyukkare-sayimiz
uzaklıkk= sayimiz - kucukkare
uzaklıkb?=uzaklıkk Evet ise "ikisi de aynı uzaklıkta "
uzaklıkb?
değilse "kucukkre daha yakın"
end
-
Etiket derken? goto mu kullancaksın bu algoritmada?
-
JPriest bunu yazdı:
-----------------------------Etiket derken? goto mu kullancaksın bu algoritmada?
-----------------------------
evet
operada yazdığım için paragraflar çıkmamıştı tagladım
yani sayıyı elde edeğiz
birer artırarak tam kare kontrolü yapacağız bu bittikten sonra
sayımızı birer eksilteceğiz tam kare kontrolü yapacağız
-
Abi ben şu bir önceki sayfada yazdığım koda bile dandik derken sen goto'dan bahsediyorsun, biraz eskide kaldı sanki o işler. Döngüler çıktı mertlik bozuldu :)
-
Döngü kullamadan nasıl yapmayı düşünüyorsunuz? :)))
-
Yok onu demiyorum, goto yerine döngü kullanılsın diyorum. Ne kadar goto, o kadar kötü kod.
-
Bir de bu fabs fonksiyonu çok zırva sonuçlar verdi
double girdiyi float a indiriyor virgülden sonra 4 basmak sonuç veriyor yani.. -
Itcelik hocam mesajlarında gördüğüm kadarı ile c ve c++'a fazla hakim değilsin, elemanların kafasını bulandırmamakta fayda var ;) Sanırım asm bilgin falan var biraz, önerilerin o mantıkla gidiyor çünkü :)
Öncelikle while,for gibi döngüler varken goto gibi ilkel bişi kullanmak programlama felsefesine ters.. Bizim bölümde ben böyle birşey yapsam hoca kafamı gözümü kırar :D
math.h include edildi ise fabs ve abs saçma sapan sonuç vermez, edilmedi ise zaten çalışmaz. int de bir veri tipi fonksiyon değil.
double fabs ( double x );
float fabs ( float x );
long double fabs ( long double x );
http://www.cplusplus.com/reference/clibrary/cmath/fabs/
3 farklı fabs var, her birisi tipine uygun sonuç döndürür..Ayrıca merak ettiğim bi durum var, math.h kullanmanıza izin veriyolarsa, ceil ve floor diye 2 fonksiyon var, birisi yukarı, diğeri aşağı yuvarlar sayınızı onları kullansanıza..
-
JPriest bunu yazdı:
-----------------------------Yok onu demiyorum, goto yerine döngü kullanılsın diyorum. Ne kadar goto, o kadar kötü kod.
-----------------------------
haa onu mu diyorsun
ordaki etiketlere bir defa gidilecek zaten... Altprogram gibi düşün
şimdi alt program desem kullanıcı tanımlı fonksiyon desem bünye kaldırmaz..
İLERİ ARAMA alt programı
GERİ ARAMA alt programı ya da bölgesi gibi...
program dört bülgeden oluşuyor
1. ilk iki sayıyı bulma, sayimiz
2. ileri arama bölümü ( burada sayimizdan büyük tam kareleri arıyoruz mecburen)
3. geri arama bölümü ( burada sayimizdan küçük tam kareleri arıyoruz mecburen)
4. değerlendirme ve sonuç bölümü
şimdi ileri arama bölümündeki sıkıntı şu, artan sayılar sonsuza kadar artar biliyorsun böylelikle program uzun ve sıkıntılı bir sürece girebilir ki bu yüzden ileri aramada bir "maksimum arama mesafesi" ile kesilip programın dallanması program tekniği için daha uygundur... sayının durumuna göre bu geri aram için de yapılabilir ama o eninde sonunda sıfır olacaktır ve orda döngü zaten hatasz biter.
-
NmC bunu yazdı:
-----------------------------Itcelik hocam mesajlarında gördüğüm kadarı ile c ve c++'a fazla hakim değilsin, elemanların kafasını bulandırmamakta fayda var ;) Sanırım asm bilgin falan var biraz, önerilerin o mantıkla gidiyor çünkü :)
Öncelikle while,for gibi döngüler varken goto gibi ilkel bişi kullanmak programlama felsefesine ters.. Bizim bölümde ben böyle birşey yapsam hoca kafamı gözümü kırar :D
math.h include edildi ise fabs ve abs saçma sapan sonuç vermez, edilmedi ise zaten çalışmaz. int de bir veri tipi fonksiyon değil.
double fabs ( double x );
float fabs ( float x );
long double fabs ( long double x );
http://www.cplusplus.com/reference/clibrary/cmath/fabs/
3 farklı fabs var, her birisi tipine uygun sonuç döndürür..Ayrıca merak ettiğim bi durum var, math.h kullanmanıza izin veriyolarsa, ceil ve floor diye 2 fonksiyon var, birisi yukarı, diğeri aşağı yuvarlar sayınızı onları kullansanıza..
-----------------------------
NMC kardeş benim gotolarım döngü gotosu değil dallanma için... program büyük tamkare sayıyı buldu ne yapacak? bekleyecek mi...
ayrıca benim yazdığım bir algoritma.. (yazması da zahmetli olduğu için gotolar kullandım...) KOD değil... Arakdaşlar daha algoritma ve problm analizi bilmiyorlarki... bu programı kullanıcı tanımlı fonksiyon yaparsın iki satır da kod yazarsın o da olurdu.. :))
