Çok teşekkür ederim cevabınız için şans eseride olsa görünce baya bir kafamı karıştırmıştı sağolsun ama şimdi anladım gibi :) . Bu diziler ne zor işmiş arkadaş ![]() |
@source aslında çözmüştü fakat henüz array işlemediğimiz için array kullanılmadan yapılması gerekiyormuş. ben de array'siz yapmaya çalıştım fakat yine tıkandım. 1-2 sorum olacak size < Resime gitmek için tıklayın > 1- 1.maddede not getirtemiyorum, 2.maddeyi hiç yapamadım, 1 olursa 2 olmuyor 2 olursa 1 olmuyor. En önemli sorunum bu. fonksiyonlarda sıkıntım var sınıftan çağırmaları yapamadım hiç 2- biraz önce not'u yazdırırken sorun yoktu ama şimdi çalıştırınca 1,2,3.maddelerdeki not ortalaması ya da diğer maddelerdeki not ortalamalarını yazmıyor. yarın teslim etmem lazım yardımcı olacak olursa çok çok çok sevinirim. #include <iostream> |
A++, B++ yazmışsın ama sen bu değişkenleri tanımlarken ilklendirmemişsin. int A, B, C, D, F, G; A = B = C = D = F = G = 0; demen gerekiyor. Yoksa içlerinde çöp değer olur. ogrenci sınıfındaki maxbul fonksiyonun bir işe yaramaz. Sadece isim olarak max ama yaptığı bir işlem yok. f (orta1>maks){ maks=orta1; Demişsin ama maks'ı yine ilklendirmeden kullanmışsın. İçinde çöp değer var. Ayrıca bu maks, ogrenci sınıfında ki maks'dan farklı bir değişken. Bu yüzden 1. ve 2. şıkkın doğru çalışmıyor. Şıkkalara gelirsek 1. şıkkının cevabında p.maxbul() demişsin ama sana ogrenci sınıfında ki içinde çöp değer olan maks değişkenini dönderecek. Doğal olarak sonuç yanlış olacak. Maxisim maxno yu yazdırmaa çalışmıssın ama yukarda bahsettigim sebepten dolayı( if(orta1 > maks) da ki maks değişkenin içi çöp olduğundan değerinin ne olacağı belli değil. Bazen if'in içine girecek bazen de girmeyecek.) hatalı. 4,5,6,7,8,9,10. şıkklarında ki cevaplarında ilk başta bahsettiğim yanlışdan dolayı hatalı. |
değerleri ilklendirdim fakat fonksiyonları yine de beceremedim, ilk 3'ü çalışmıyor :/ |
system("cls"); if (orta1>maks){ maks=orta1; maxisim=isim; maxno=numara; maxharf=harf; } bu kısımı hemen bunun üstünde ki } içine yaz yani while'ın içinde olacak ama en altında. Bu şekilde yazdırabilirsin. En yüksek notu olan öğrencinin ismini notunu felan. 2. şık içinde yine while'ın içine maks'ı buldugun yerin hemen altına min kodunu yazcan. (min değişkeni ilklendirilmiş olacak üst tarafta.) if(orta1 < min) { min=orta1; minisim=isim; minno=numara; minharf=harf; } Özetlersem söyle görünecek kodun while() { // ... system("cls"); if (orta1>maks){ maks=orta1; maxisim=isim; maxno=numara; maxharf=harf; } if(orta1 < min) { min=orta1; minisim=isim; minno=numara; minharf=harf; } } // Devamında da do ..while içinde switch |
hallettim, çalışıyor program teşekkür ederim yardımcı olanlara :) |
getchar ve putchar ne işe yarıyor biri lütfen anlatsın. |
http://en.cppreference.com/w/c/io/getchar Standart giriş akımından(stdin) bir karakter okur. http://en.cppreference.com/w/c/io/putchar Standart çıkış akımına(stdout) bir karakter yazar. Aldığı parametre yazılacak karakter. Küçük bir örnek. Eğer kelime girilirse sadece ilk harfini alır.
|
Şuan döngüler, array, pointerlar, classlar,operatorler(clsslardaki operatörler falan) hakkında biraz bilgim var, yani sınırlarını bilmediğim için biliyorum diyemiyorum :) bundan sonra nasıl devam etmeliyim? ilerisi için napcğaımla ilgili hiç bi fikrim yok. ayrıca birde sorum var; this pointerı ne işe yarıyor alamadım tam olarak? küçük bi örnek kod falan göstereiblirseniz çok sevinirim |
Aslında ben de senin gibiyim biraz biliyorum ama daha fazlasını öğrenmek için yaptığım yöntemi söyleyeyim. C++ forumlarını takip ediyorum. Buralarda sorulan sorulara cevap vermeye çalışıyorum. Yanlış cevap vermemek için bildiğim bir şeyi tekrar araştırıyorum. Böylece onun hakkında daha fazla şey öğrenebiliyorum. Ayrıca bol bol alıştırma yapmak, kod yazmak lazım bildiklermizin iyice oturması için. Bunun için projecteuler.net gibi sitelere bakabilirsin. Analitik düşünme yeteneği kazandırır sana ilerde karşına çıkacak sorunlarla daha kolay başa çıkmanı sağlar. Ayrıca internette gezerken C++'da bildiğin bir konuda makale karşına çıktı diyelim. Ben bunu biliyorum diyerek okumamazlık etme, gördüğün her bir şeyi oku. Ayrıca bu kouların yanında STL'e bak. C++11'i incele kullanmayı dene. Ne gibi değişiklikler olduğunu kendin gör. Şimdilik aklıma gelenler bunlar. Sorun için küçük bir örnek yazdım. Burada setX fonksiyonundan gelen parametre ile sınıfın private üyesi olan x aynı isimli. Bununla herhangi bir çakışma, karmaşıklık olmaması için, sınıfında ki x'e ulaşmak için this->x diyoruz. Kısaca burada ki this senin o sınıfını ifade ediyor.
Daha geniş bilgi için: MSDN, IBM |
#include <iostream> #include <conio.h> using namespace std; main(){ int a,b; char c[][80]={"Pazartesi","Sali","Carsamba"}; for (a=0;a<=c[a][0];a++){ cout << "\n"; for(b=0;b<=c[a];b++){ cout << c [a] << "\n"; } } getch(); return 0; } Arkadaşlar bu dizideki a[][80]: Bunun anlamı nedir neden böyle yaptık birde ilk for döngsünde c[a][0] yazdık .Bunları açıklayabilicek varmı şimdiden teşekkür ederim.Genel olarak kısa özet geçseniz yeterli 1-2 cümle |
char c[3][80]={"Pazartesi","Sali","Carsamba"}; esittir char c[][80]={"Pazartesi","Sali","Carsamba"}; diyebiliriz. char d[3] = "ab"; esittir char d[] = "ab"; demek gibi. Matris yapisi kullaniliyor burada.Sadece sen tanimlarken belirtmiyorsun, compiler otomatik olarak islemi gerceklestiriyor diyebiliriz. c[a][0] yontemini biraz karisik olmus ama soyle diyim ASCII tablosundan yararlanmis(Cok kullanisli bir yontem degil matris boyu 65 ustune dayanirsa hatalar ortaya cikma ihtimali var diye tahmin ediyorum.). P 80(Dec) demektir.ASCII tablosunda [a-zA-Z] 65 -122 arasinda degerlerdedir. c[a][0] matris pozisyonu a=0 iken P karakterini gosterir. 0 <= 80 oldugundan dongu devam edecektir. c[a][0] a=3 iken matris boundry disina cikar ve for dongusu sonlanir. |
Her iki sorumada sayenizde cevap buldum teşekkürler :) O verdiğiniz kodu compile ettikten sonra bide this olmadan compile ettim. O zaman memoryde eski bir uygulamadan kalan bi değer geldi. Anladığım kadarıyla değişken isimlerini ayrı koyarsak sorun yok. yani #include <iostream> yapsak. Açıkçası bu tip bi kullanım bana daha düzgün geldi. değişken ismi mi kalmadı da aynı ismi kullanıyoruz :P |
Çok teşekkür ederim cevabınız için gayet anlaşılır olmuş. -Şimdi benim anlamadım bir olay var 1- c[a][0] a=3 iken matris boundry disina cikar ve for dongusu sonlanir.--> Bunu anlamadım eğer zahmet olmassa anlatırmınız. 2-Hocam birde 2. forda c[a] yaptık.burda neden c[0] yapmadık. Cahilliğime verin başlayalı çok olmadı daha bazı şeyleri anlamakta güçlük çekiyorum . |
Çöp değerin gelmesinin sebebi her değişken kendi bloğunda aktif olduğu için this'i kaldırırsan yani x = x olursa, fonksiyona parametre ile gelen x'e yine parametreyi atıyor. Yani sınıfın üyesi olan x'e atama yapmıyor. getX() ile de içinde çöp değer olan sınıfın üyesi olan x'i çağırıyor. Dediğin gibi başka bir değişken ismi vermek daha iyi. Aşağıda ki gibi kullananlarda var. #include <iostream> |
Yalnız garip bişey farkettim; dev c++'ta aynı kodu iki farklı bilgisayarda derledim. Daha sonra x'in pointerını return eden bi function yazıp cout la yazdırdım. Ama tüm bilgisayarlarda aynı address çıktı. Hatta tüm bilgisayarlarda this'i kaldırınca x değeri aynı geldi. (yani tüm dediğim 2:P) Ama visual studio'da programı her çalıştırışımda address değişti ve değerde değişik geliyordu. Çok saçma ve gereksiz bulabilirsniz ama kodun her kısmını böyle deneyince bunları bulup şaşırıyorum :D |
Denemek güzeldir, böyle böyle öğreniliyor. Aynı değer çıkmalarına tesadüf diyeceğim ama bu kadarı da fazla :D. Dev-C++'ı tavsiye etmiyorum onun bir eksikliğinden, hatasından dolayı da aynı değerler çıkabilir. |
compile ederken o x değerini programın içine kaydedip aynı zamanda pointerını kaydedip hep aslıdna bi bakıma cacheden yazdırıyo gibi geldi. |
Teşekkkürler. |
Hocam orda 2'nin yazması şans eseri denk gelmiş sanırım çünkü sen bellekteki t, (t+1) ve (t+2) adreslerine değer atıyosun döngünde x=3 olduğu zaman program (t+3) adresindeki değeri veriyo sana bu değer de çok düşük bi olasılık olmasına rağmen 2'ymiş.
Bu mesaja 1 cevap geldi. Cevapları Gizle