Sonsuz döngü ram'da görünmeden oluşur mu?

Başlatan 007, 05 Ekim 2018 - 08:51:01

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

007

goto'yu kullandım. Biraz anlayan bir abi goto'da sonsuz döngü yapmış olabilirsin dedi. 100'den büyük sayı girince goto devreye giriyor. Daha 4-5 gündür uğraşıyorum. Ram'da oluşan sonsuz döngü varsa buna birkaç örnek verebilir misiniz? O görülmeyebilir dedi.Öğrencinin ismi kısmına boşluk bırakamıyorum.

Çağatay Hoca'nın derslerine bakıyorum. 2. dersinde 4-5 tane soru sormuş. Soruların mantığını anlamadım. 2 tanesini yazıyorum. Bunlarla nedemek istediğini ve bir tanesini yapabilir misiniz. Arada başka sitelere de bakıyorum.

8-4*2+-12 => 8 - 8 + -12 => -12

15*4/2%4*7 => 60/2%4*7 => 30%4*7 => 2*7 => 14

#include<stdio.h>
int main( void )
{
    float a, b, c, d;
    char  o_i[50], o_s[50];
    u:
    printf("Ogrencinin Ismi Soyismi\n");
    printf("Ogrencinin ismi:");
    scanf("%s", o_i);
    //Hatırlatma %s uzun karakter girince hata vermez.
    //Fakat boşluk bırakamıyorum.
    //%c verir.
    printf("Ogrencinin soyismi:");
    scanf("%s", o_s);
    printf("%s %s ogrencimizin not ortalamasi icin notlari girin:\n", o_i, o_s);
    l:
    printf("1. sinav notunu giriniz:");
    scanf("%f", &a);
    if( a> 100 )goto y;
    k:
    printf(" 2. sinav notunu giriniz:");
    scanf("%f", &b);
    if( b> 100 ) goto s;
    m:
    printf("3. sinav notunu giriniz:");
    scanf("%f", &c);
    if( c > 100 )goto nn;
    d = (a + b + c) / 3;
    printf("%s %s Ogrencinin 1. donem ortalamasi = %2.4f\n\n",o_i, o_s, d);
    goto u;
    y:
    printf("Hata. Girdiginiz sayi 100'den buyuk.\n\n");
    goto l;
    s:
    printf("Hata. Girdiginiz sayi 100'den buyuk.\n\n");
    goto k;
    nn:
    printf("Hata. Girdiginiz sayi 100'den buyuk.\n\n");
    goto m;
   
    return 0; 
}
2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

freeman

Sorunu tam açıklayamamışsın ki. Yukarıdaki programda ne oluyor ve sen ne yapmak istiyorsun?
GOTO 'yu kimse kullanmaz artık. Öğrenmen bile gereksiz. Yanlış hatırlamıyorsam C++ 'ın son standartlarında goto tamamen kaldırıldı diye biliyorum. (ya da kaldıralım falan diye konuşuyorlardı)

Al sana sonsuz döngü
for (;;)
{
}

Tabi program çalıştığı süre içerisinde geçerli. Zombie thread kavramı var ki o çok başka bir konu. Senin sorunla alakası yok. 
Goto yu falan unut. Bir tane Modern C++ ı anlatan kitap ondan çalış.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

007

Çok teşekkür ederim. Onu kullanmamam gerektiğini anladım. Kitap öneriniz var mı?
2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

freeman

https://www.hepsiburada.com/c-ve-c-deitel-dietel-harvey-m-deitel-pm-ksistem169-yorumlari

Bu kitap başlangıç için çok iyidir. Tabi bulabilirseniz bir yerde hemen alın kaçırmayın. İkinci el kitapçılara olabiliyor bazen.
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

007

2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

programmer

#5
goto kullanmaya gerek yok bence de.
iki boyutlu dizi, for döngüsü ve fonksiyon kullarak yapısal programlamaya uygun hale getirtebilir.
Örneğin
notlar [50][3]; iki boyutlu bir dizi oluşabilirsiniz.


notlar[0][0] birinci öğrencinin 1. notu
notlar[0][1] "           "                2. "


gibi bunu bir for döngüsü içinde



int  notoku(int,int);


notlar [50][3];
int i=j=0;
for(int j=0;j<50;j;j++) {
    /*


    ad soyad okuma kaydetme burda yapılır.


*/


     for(i=0;i<3;i++){
          notoku(j,i);
    }
}


int notoku(int ogrenci_index, int not_index)
{
    printf("%d. öğrencinin, %d. notunu giriniz:", ogrenci_index+1, not_index+1)
    scanf("%d", &not);
    if(not<0 || not >100) {
       printf("Lütfen 0 ile 100 arasında bir not giriniz.");
       notoku(ogrenci_index,not_index);
   }
   notlar[ogrenci_index][not_index]=not;
  return 0; 
}





Dikkat ederseniz notoku fonksiyonu uygun not girilene kadar kendi kendini çağırmaktadır (bunlara c'de "recursive function" denir). Ancak uygun not girilmez ise sonsuz döngüye girer, aksi halde girmez.







Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : Ekim 06, 2018, 22:22:50


i ve j'nin for içinde deklara edilmesi gerekiyordu. fonkiyon ise örneğin tamam ise sıfır hata ise sıfırdan büyük değer döndürebilir. böylecek isterseniz hata kontrolü de yaparsınız, yoksa void yani değer döndürmeyen fonksiyon da olabilir.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 06 Ekim 2018 - 22:46:13

Düzetme: tek öğrenci için isteniyormuş soruda, pardon  :)  O zaman dıştaki for döngüsüne gerek yok. Ortama için ise round fonksiyonunu kullanabilirsiniz math.h'dai di yanılmıyorsam.int yerin unsigned char da yeterli olur.
unsigned char notlar[3];
unsigned char ortalama;
ortalama=round(((float) (notlar[0]+notlar[1]+notlar[2]))/3);

float type cast işlemi yaptım çünkü unsigned char/int=50,99 olsa bile virgülden sonrasını atardı yoksa. float çevrimi yaptıktan sonra yuvarlama işlemi ile uygun tam sayıya yuvarlanacaktır.

007

2 kuruşluk ben EMİR VEREN 4 kuruşlukların 5 kuruşluk işlerini yaparım.

Amenofis

Ram'de oluşan döngü diye bişey olmaz, program işlemci içinde çalışır. goto gereksiz bişey değildir, seyrek te olsa verimlilik için kullanmak gerekebilir. break ve continue da birer goto'dur.

Senin yapman gereken debugger nedir, kod nasıl debug edilir bunları öğrenmek.