Şimdi Ara

C'de sonsuz döngüde ne hata var bulamadım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
16
Cevap
0
Favori
1.032
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • #include<stdio.h> 
    #include<conio.h>

    int main(){

    int toplam=1;

    while (true){

    toplam=toplam*2;
    printf("%d\n", toplam);
    }
    getch();
    return 0;

    }


    2,4,8,16,32,64... diye alt alta sürmesini istiyoprum ama sonuç 0,0,0,0,0,0,0..... diye gidiyo.



  • int toplam=1; satırını buraya doğru yazdıysan dediğin gibi olması için bir neden göremedim ben
  • quote:

    Orijinalden alıntı: ibrahim_sancakli43

    #include<stdio.h> 
    #include<conio.h>

    int main(){

    int toplam=1;

    while (true){

    toplam=toplam*2;
    printf("%d\n", toplam);
    }
    getch();
    return 0;

    }


    2,4,8,16,32,64... diye alt alta sürmesini istiyoprum ama sonuç 0,0,0,0,0,0,0..... diye gidiyo.

    slm bence int değişkeninin boyutu yetmiyo,senin kodlarını kopyaladım ilk önce işlem yapıp 0 ile devam ediyo long olarakta fazla uzun sürmez 0 a dönmesi
  • Anladım sanırım nedenini, sonsuz olduğu için döngün sınırı aşıyor anladığım kadarıyla, ilk başlarda yazıyo 2 4 8 16 diye daha sonra 0 oluyor.
  • Şöyle çözdüm;

    #include <stdio.h> 
    #include <conio.h>

    using namespace System;


    int main(){

    int toplam=1;

    while (toplam<(2147483647-1)/2){

    toplam=toplam*2;
    printf("%d\n", toplam);
    }
    getch();
    return 0;

    }
  • c++ bilmiyorum daha :) sadece C. Döngü sınırı derken anlamadım pek?
  • quote:

    Orijinalden alıntı: ibrahim_sancakli43

    c++ bilmiyorum daha :) sadece C. Döngü sınırı derken anlamadım pek?

    her veri tipinin bir max değeri vardır,int 2 milyar küsür den fazla değer aldığında döngü sınırını aşmış olur :D
  • quote:

    Orijinalden alıntı: ibrahim_sancakli43

    c++ bilmiyorum daha :) sadece C. Döngü sınırı derken anlamadım pek?

    Senin programın sonu yok, yani sonsuza kadar çalışmasını istemişsin, problem orada. getch() koymuşsun ama o getch hiçbir zaman çalışmayacak.

    Çözüm ise döngüne kaç kere çalışması gerektiğini söylemen. Dur ben pratik bir çözüm vereyim.

    int toplam = 1;
    while(toplam != 0) {
    ...
  • Evet bilerek sonsuz döngü yaptım. 5-10sn sonra kapatıyorum. Benim anlamadığım neden 0 oluyor. İşlemcimi yetmiyo ram mi yetmiyo İstediğim mantık bu
    Bir cevabı okumamışım. Peki bu max değerleri artarmı? Ama ben açar açmaz 0 dan başlıyo



    < Bu mesaj bu kişi tarafından değiştirildi ibrahim_sancakli43 -- 17 Şubat 2012; 23:48:18 >
  • quote:

    Orijinalden alıntı: ibrahim_sancakli43

    Evet bilerek sonsuz döngü yaptım. 5-10sn sonra kapatıyorum. Benim anlamadığım neden 0 oluyor. İşlemcimi yetmiyo ram mi yetmiyo İstediğim mantık bu
    Bir cevabı okumamışım. Peki bu max değerleri artarmı? Ama ben açar açmaz 0 dan başlıyo

    işlemcide ram de yetiyo sen "int toplam=1" dediğinde ram de "toplam" adında "int" cinsinde bir veri tanımlıyosun ve bu verinin içine 1 atıyosun başlangıçta int toplam=1
    1,2,4,8,16... diye gidiyor en son 2.147.483.647 ye geldiğinde "int" değişkeninin gücü yetmiyo ve döngü sınırı aşıyo 0 basmaya başlıyo printf




  • int tipi şu aralıktaki sayıları kapsar: -2147483648 ve 2147483647

    Bu aralıklar aşıldığı zaman tekrar başa döner. toplam = toplam * 2; ifadesi bir süre sonra toplamı 2147483648 yapar, ama yapamaz.
    En büyük pozitif tam sayıdan sonra 0 olur. O yüzden de toplam = 0 * 2; devamlı 0 eder.
  • max değerleri arttıramazsın diye biliyorum
  • quote:

    Orijinalden alıntı: elektro_gadget

    quote:

    Orijinalden alıntı: ibrahim_sancakli43

    c++ bilmiyorum daha :) sadece C. Döngü sınırı derken anlamadım pek?

    Senin programın sonu yok, yani sonsuza kadar çalışmasını istemişsin, problem orada. getch() koymuşsun ama o getch hiçbir zaman çalışmayacak.

    Çözüm ise döngüne kaç kere çalışması gerektiğini söylemen. Dur ben pratik bir çözüm vereyim.

    int toplam = 1;
    while(toplam != 0) {
    ...

    Bana ilginç geldi ikiside sonsuz döngü aslında. while döngüsüne şart olarak senin önerdiğini (toplam != 0) uyguladım ve sonlandı2,4,8,16,32,64,....,-2147483648,0 olarak dizdi alt alta. Anlamadım ne fark olduğunu




  • Şimdi anladım 0 a döndüğü için sonlanıyo teşekkürler arkadaşlar
  • while(toplam!=0) ile sonlu döngü oldu :D
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.