Gönderen Konu: C hakkında ufak bir soru.  (Okunma sayısı 14398 defa)

Çevrimdışı Arif İçke

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 354
C hakkında ufak bir soru.
« : Şubat 04, 2009, 11:44:38 ÖS »
C deryasına giriş yaptım çalışıyorum zaman buldukça.  :)

Bir maruzatım olacağıdı.  :) Bir programcık yaptık diyelim ki. En basitinden girilen sayının tek mi çift mi olduğunu buluyor. Ekranda çift ya da tek olduğuna dair sonucu gördükten sonra tekrar aynı pencerede yeni bir sayı girilmesini nasıl sağlayabiliriz. Bunun için bir kod ya da yöntem var mı?

Somut örnek vermek gerekirse:
-----
Bir sayı giriniz: 4
4 çift bir sayıdır.
Bir sayı giriniz:
----
Kısacası ben şu koyu kısmın ekranda görünüp yeni bir sayı istemesini istiyorum.

Teşekkürler. Saygılar.  :)

Çevrimdışı Ufuk Sevim

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 451
Ynt: C hakkında ufak bir soru.
« Yanıtla #1 : Şubat 04, 2009, 11:47:57 ÖS »
senin derdini döngüler (loop der ecnebiler) çözer... (do) - while, for döngüleridir bunlar. aman ha goto ' dan uzak durasın...
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.

Çevrimdışı batı

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 126
Ynt: C hakkında ufak bir soru.
« Yanıtla #2 : Şubat 04, 2009, 11:48:30 ÖS »
Döngünün içine sokabilirsin.

int x = 0;
while(1)
{
printf("Bir sayı giriniz: ");
scanf("%d",&x);
if(x%2 == 0) printf("%d bir çift sayıdır."x);
else printf("%d bir tek sayıdır.");
}

Yazılım yarışmasına bekleriz, kendini orada çok geliştirebilirsin. Ayrıntılı bilgi için bknz: Kulüp İçi Etkinlikler -> Yarışmalar
Kendimi durduracak değilim...

Çevrimdışı Onur Varol

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 3029
Ynt: C hakkında ufak bir soru.
« Yanıtla #3 : Şubat 04, 2009, 11:51:36 ÖS »
Hatta while içine bi aldıgın değerin 27 mi neydi tam hatırlamıyorum bakıp esc tusuna basıp basmadıgını kontrol edersin. Esc ise programın kapanır.

Bu arada Batınında belirttiği gibi yarısma cidden faydalı olucaktır.

Çevrimdışı Arda Altay Abaka

  • OTOKON Üyesi
  • *
  • İleti: 376
Ynt: C hakkında ufak bir soru.
« Yanıtla #4 : Şubat 05, 2009, 04:46:11 ÖÖ »
En sona "return main();" yazarak dongu olusturmus oluyorsun..
Bu saatte belki soruyu yanlış anlamış olabilirim ama ;D

Çevrimdışı Arif İçke

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 354
Ynt: C hakkında ufak bir soru.
« Yanıtla #5 : Şubat 06, 2009, 03:42:19 ÖS »
çok teşekkür ederim arkadaşlar. henüz daha döngülere hakim olmadığım için en basit çözüm arda'nın verdiği öneriyle oldu.  :)

daha fırsat buldukça sizleri rahatsız edeceğim burada.  :D şimdiden vereceğim rahatsızlıktan dolayı özür dilerim.  ;D

Çevrimdışı Arif İçke

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 354
Ynt: C hakkında ufak bir soru.
« Yanıtla #6 : Şubat 10, 2009, 12:00:47 ÖÖ »
C hakkına ufak bir soru v.2

arkadaşlar bir sınıftaki öğrenci sayısını alan, tek tek öğrencilerin notlarını soran ve de bu notların ortalamasını hesaplayan bir programcık yazmaya çalışıyorum. yazdım ama hata veriyor. uzun süredir kafa patlatıyorum bir türlü çözemedim. bi bakıverirseniz çok sevinirim. :) teşekkür ederim şimdiden.  :)


Kod: [Seç]
/* siniftaki "mevcud" kadar ogrencinin not ortalamasi */
#include<stdio.h>

int main()

{

int mevcud, sayici, not, toplam;

toplam = 0;
sayici = 1;   
                 
printf("ortalamasi hesaplanacak ogrenci sayisi?: ");
scanf("%d", &mevcud);

while(sayici <= mevcud){
       printf("%d. ogrencinin notu:", sayici);
       scanf("%d", &not);
       toplam = not + toplam;
       sayici = sayici + 1;
}

printf("ortalama: %d\n", toplam / sayici);
                 
while(1);
return 0;
}

Çevrimdışı Özen Özkaya

  • Özen
  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 826
  • sudo ./FuutonRasenShuriken
Ynt: C hakkında ufak bir soru.
« Yanıtla #7 : Şubat 10, 2009, 12:29:10 ÖÖ »
C hakkına ufak bir soru v.2

arkadaşlar bir sınıftaki öğrenci sayısını alan, tek tek öğrencilerin notlarını soran ve de bu notların ortalamasını hesaplayan bir programcık yazmaya çalışıyorum. yazdım ama hata veriyor. uzun süredir kafa patlatıyorum bir türlü çözemedim. bi bakıverirseniz çok sevinirim. :) teşekkür ederim şimdiden.  :)


Kod: [Seç]
/* siniftaki "mevcud" kadar ogrencinin not ortalamasi */
#include<stdio.h>

int main()

{

int mevcud, sayici, not, toplam;

toplam = 0;
sayici = 1;   
                 
printf("ortalamasi hesaplanacak ogrenci sayisi?: ");
scanf("%d", &mevcud);

while(sayici <= mevcud){
       printf("%d. ogrencinin notu:", sayici);
       scanf("%d", &not);
       toplam = not + toplam;
       sayici = sayici + 1;
}

printf("ortalama: %d\n", toplam / sayici);
                 
while(1);
return 0;
}

abi sanırsam not sözdüğü özel bir sözcük olduğundan dolayı değişken olarak tanımlayamıyorsun onu :) buyur bak ben sadece onun adını değiştirdim ve çalışıyor..


#include<stdio.h>

int main()
{
int mevcud,sayici;
int notum,toplam;

toplam = 0;
sayici = 1;   
               
printf("ortalamasi hesaplanacak ogrenci sayisi?: ");
scanf("%d", &mevcud);

while(sayici <= mevcud)
{
       printf("%d. ogrencinin notu:", sayici);
       scanf("%d",&notum);
       toplam = notum + toplam;
       sayici = sayici + 1;
}

printf("ortalama: %d\n", toplam / sayici);
         
while(1);
return 0;
}
EDIT: %100 emin değilim bulduğum çözüm budur, daha geniş bilgisi olanlar hepimizi net olarak aydınlatabilir :D
« Son Düzenleme: Şubat 10, 2009, 12:40:17 ÖÖ Gönderen: Özen Özkaya »
sudo ./FuutonRasenShuriken

Çevrimdışı batı

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 126
Ynt: C hakkında ufak bir soru.
« Yanıtla #8 : Şubat 10, 2009, 12:32:59 ÖÖ »
Valla ben yazımda bir hata göremedim. Tek hata şurda, sayıcıyı 1'den başlatıyorsan ve her not aldıktan sonra 1 arttırıyorsan, döngüden çıktığında toplam öğrenci sayısında 1 fazlan olacak demektir. Örnek vermek gerekirse, 3 öğrenci olduğunu düşünelim.

sayici = 3 , mevcud = 3 iken
while( sayici <= mevcud ) ifadesi kullandığın için döngünün içine girecektir ve sayiciyi 1 arttıracaktır.

yani sayici = 4 olacaktır. mevcud'u 3 girmiş olmamıza rağmen, kullanıcıdan 3 not aldık, ama 4 öğrencimiz varmış gibi gözüküyor.

Doğal olarak toplam 3 yerine 4'e bölünecek ve sonuç hatalı olacak.

Bu problemi düzeltmek için sayici'yi ilk başta 0'a eşitleyebilir ve döngüden çıkma koşulunu,

while( sayici < mevcud ) olarak düzeltebilirsin.

ya da sadece ortalama hesabında: "toplam / sayici" yerine "toplam / (sayici-1)" kullanabilirsin.

(Not: Derleme sonrasında 'warning' alman, hata olduğunu göstermez, error'lerden korkacaksın. Warning aldığında programın yinede çalışır.)
Kendimi durduracak değilim...

Çevrimdışı Arif İçke

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 354
Ynt: C hakkında ufak bir soru.
« Yanıtla #9 : Şubat 10, 2009, 01:12:30 ÖÖ »

abi sanırsam not sözdüğü özel bir sözcük olduğundan dolayı değişken olarak tanımlayamıyorsun onu :) buyur bak ben sadece onun adını değiştirdim ve çalışıyor..


evet şimdi sorun düzeldi ve kod çalıştı.  ;D acaba neden "not" değişkenini kabul etmedi onu bi araştırmak lazım çok enteresan.

ekleme: küçük bir araştırma yaptım ve şunu buldum:
"not:
c'de,
not(expr) veya !expr => expr'nin sayisal degeri 0 ise 1, 0'dan farkli ise 0 degerini verir.
0-expr veya -expr => expr'nin sayisal degerini sayisal negatifine cevirir, 0'sa dokunmaz.
~expr => expr'in bitwise not uygulanmis, yani her bitinin teker teker not'lanmis halini verir."


ve tabii ki de birşey anlamadım.  ;D

Valla ben yazımda bir hata göremedim. Tek hata şurda, sayıcıyı 1'den başlatıyorsan ve her not aldıktan sonra 1 arttırıyorsan, döngüden çıktığında toplam öğrenci sayısında 1 fazlan olacak demektir. Örnek vermek gerekirse, 3 öğrenci olduğunu düşünelim.

sayici = 3 , mevcud = 3 iken
while( sayici <= mevcud ) ifadesi kullandığın için döngünün içine girecektir ve sayiciyi 1 arttıracaktır.

yani sayici = 4 olacaktır. mevcud'u 3 girmiş olmamıza rağmen, kullanıcıdan 3 not aldık, ama 4 öğrencimiz varmış gibi gözüküyor.

Doğal olarak toplam 3 yerine 4'e bölünecek ve sonuç hatalı olacak.

Bu problemi düzeltmek için sayici'yi ilk başta 0'a eşitleyebilir ve döngüden çıkma koşulunu,

while( sayici < mevcud ) olarak düzeltebilirsin.

ya da sadece ortalama hesabında: "toplam / sayici" yerine "toplam / (sayici-1)" kullanabilirsin.

(Not: Derleme sonrasında 'warning' alman, hata olduğunu göstermez, error'lerden korkacaksın. Warning aldığında programın yinede çalışır.)

evet batı gerçekten de program bu haliyle yanlış sonuç veriyor. 1 kişilik bir sınıfta o bir kişinin notunu 100 olarak girdim; sonucu 50 buldu.  :)

ben aslında "x'inci öğrencinin notu:" ibaresinin yazılması için sayıcıyı 1'den başlattım ama dediğin gibi bu sefer de bölünecek sayıcıyı da otomatikman 1 fazla almış oluyorum. bu yüzden "toplam / (sayici-1)" ibaresini kullanınca, program tam istediğim şekle gelmiş oldu.
« Son Düzenleme: Şubat 10, 2009, 01:14:56 ÖÖ Gönderen: Arif İçke »

Çevrimdışı Onur Varol

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 3029
Ynt: C hakkında ufak bir soru.
« Yanıtla #10 : Şubat 10, 2009, 01:16:21 ÖÖ »
C hakkına ufak bir soru v.2

arkadaşlar bir sınıftaki öğrenci sayısını alan, tek tek öğrencilerin notlarını soran ve de bu notların ortalamasını hesaplayan bir programcık yazmaya çalışıyorum. yazdım ama hata veriyor. uzun süredir kafa patlatıyorum bir türlü çözemedim. bi bakıverirseniz çok sevinirim. :) teşekkür ederim şimdiden.  :)


Kod: [Seç]
/* siniftaki "mevcud" kadar ogrencinin not ortalamasi */
#include<stdio.h>

int main()

{

int mevcud, sayici, not, toplam;

toplam = 0;
sayici = 1;   
                 
printf("ortalamasi hesaplanacak ogrenci sayisi?: ");
scanf("%d", &mevcud);

while(sayici <= mevcud){
       printf("%d. ogrencinin notu:", sayici);
       scanf("%d", &not);
       toplam = not + toplam;
       sayici = sayici + 1;
}

printf("ortalama: %d\n", toplam / sayici);
                 
while(1);
return 0;
}

abi sanırsam not sözdüğü özel bir sözcük olduğundan dolayı değişken olarak tanımlayamıyorsun onu :) buyur bak ben sadece onun adını değiştirdim ve çalışıyor..


#include<stdio.h>

int main()
{
int mevcud,sayici;
int notum,toplam;

toplam = 0;
sayici = 1;   
               
printf("ortalamasi hesaplanacak ogrenci sayisi?: ");
scanf("%d", &mevcud);

while(sayici <= mevcud)
{
       printf("%d. ogrencinin notu:", sayici);
       scanf("%d",&notum);
       toplam = notum + toplam;
       sayici = sayici + 1;
}

printf("ortalama: %d\n", toplam / sayici);
         
while(1);
return 0;
}
EDIT: %100 emin değilim bulduğum çözüm budur, daha geniş bilgisi olanlar hepimizi net olarak aydınlatabilir :D

Derleyici ile alakalı bir sorun sanırım yoksa C dilinin değişken adlandırma standartları belli ve belli anahtar kelimeler 32 tane felan dıında isimlendrme mümkün. C++ 6 ile derlendi sorun olmadı. Dev C++ ile ama not için hata veriyor ilginç =D

Çevrimdışı Kübra Tural

  • Mezun olmuş OTOKON'cu
  • *
  • İleti: 587
  • >>キュブラ<<
Ynt: C hakkında ufak bir soru.
« Yanıtla #11 : Nisan 28, 2009, 04:36:14 ÖS »
demekki c++ 6 iyi hata tespiti yapamıyor.
strong and serious
matchless and marvelous
energetic and caurageous

Çevrimdışı Mustafa CANTÜRK

  • OTOKON Üyesi
  • *
  • İleti: 406
Ynt: C hakkında ufak bir soru.
« Yanıtla #12 : Nisan 28, 2009, 04:38:38 ÖS »
demekki c++ 6 iyi hata tespiti yapamıyor.

kübraya katılıyorum ;D