şartli ikili sonsuz döngüye giremiyorum.

Başlatan omereliusuk, 13 Aralık 2011, 12:39:21

omereliusuk

bir(){
Lcd_komut(1);imlec(1,1);
printf(lcd_putc,"birdesin-1");
arksondur(2);

If (x==0) iki();
}


iki(void){
Lcd_komut(1);imlec(1,1);
printf(lcd_putc,"ikidesin-2");
arksondur(2);

If (x==1) bir();
}


koşul saglandıkça birden ikiye ve ikiden bire hareket etmem gerekiyor. bu şekliyle bu sorun nasıl çözülür. ∞ şeklinde bir döngü kurmam gerekiyor. basicte
goto bir             goto iki
yazıp bitiriyorduk.

Pir-O

bir(){
Lcd_komut(1);imlec(1,1);
printf(lcd_putc,"birdesin-1");
arksondur(2);
x=0;
If (x==0) iki();
}


iki(void){
Lcd_komut(1);imlec(1,1);
printf(lcd_putc,"ikidesin-2");
arksondur(2);
x=1;
If (x==1) bir();
}


bu şekilde mi bir defa sonsuz döngüye girecek bir daha çıkmayacak.Ama şunun bir sakıncası var iç içe en fazla 8 kez fonkisyon çağırabilirsin yoksa PIC ya reset alır ya da hiç çalışmaz.şöyle yapılabilir:

x=1;
while(x){
    Lcd_komut(1);imlec(1,1);
    printf(lcd_putc,"birdesin-1");
    arksondur(2);
    x=0;
    while(!x){
        Lcd_komut(1);imlec(1,1);
        printf(lcd_putc,"ikidesin-2");
        arksondur(2);
        x=1;
    }
}


Bu da bir kez döngüye girer bir daha çıkmaz.

omereliusuk

#2
diyorsunuz ki
ikili şart koyun. ikisi de ayrı ayrı olsun.
bir()
{ 
x=1;
while(x)                           //x yerine gerekli şart
           {
    Lcd_komut(1);imlec(1,1);
    printf(lcd_putc,"birdesin-1");
    arksondur(2);
  x=0;  
            }
                     

    while(!x){               //yine x yerine gerekli şart   ! işaretine gerek yok. 
        Lcd_komut(1);imlec(1,1);
        printf(lcd_putc,"ikidesin-2");
        arksondur(2);
        x=1;
                 }
}
   iki() bölümüne gerek yok. c yi hem sevmeye basladım.  } 1 tane daha eklenince daha güzel oldu.  teşekkürler.
eklendi::::
düşünce mantığını hala değiştiremediğimi farkediyorum ve bu beni ciddi anlamda sıkıntıya düşürüyor.

Pir-O

Alıntı yapılan: omereliusuk - 13 Aralık 2011, 13:24:38
diyorsunuz ki
ikili şart koyun. ikisi de ayrı ayrı olsun.
bir()
{ 
x=1;
while(x)                           //x yerine gerekli şart
           {
    Lcd_komut(1);imlec(1,1);
    printf(lcd_putc,"birdesin-1");
    arksondur(2);
  x=0;  
            }
                     

    while(!x){               //yine x yerine gerekli şart   ! işaretine gerek yok. 
        Lcd_komut(1);imlec(1,1);
        printf(lcd_putc,"ikidesin-2");
        arksondur(2);
        x=1;
                 }
}
   iki() bölümüne gerek yok. c yi hem sevmeye basladım.  } 1 tane daha eklenince daha güzel oldu.  teşekkürler.

Ama bu şekilde bir(); fonksiyonunu çağırırsanız kodlar 1 kez işletilir ve fonsiyondan çıkar eğer fonksiyonu çağırınca sonsuz dönmesini istiyorsanız önceki mesajımdaki kodlar gibi iç içe while() döngüsü kurmanız gerekir.

omereliusuk

#4
evet başına bir de sonsuz döngü gerekiyor.  o başta vardı zaten "sonraki kod" copy paste yapınca atlanmış.

bocek

şöyle de olur:
Lcd_komut(1);
arksondur(2);
while(1)
{
    switch(x) {
                  case(1):
                      bir();
                  break;
                  case(2):
                      iki();
                  break;
    }
}
void bir(void){
printf(lcd_putc,"birdesin-1");
x=0;
}

void iki(void){
printf(lcd_putc,"ikidesin-2");
x=1;
}
1 ya da 0. işte 'bit'ün mesele..