Picproje Elektronik Sitesi

DERLEYİCİLER => Hi-Tech => Konuyu başlatan: BenC - 24 Ekim 2009, 08:45:08

Başlık: İki Değişkeni Nasıl Saydırabiliriz
Gönderen: BenC - 24 Ekim 2009, 08:45:08
Merhaba arkadaşlar.

a ,  b   ve  c   değişkenlerim var.

a unsigned char türünden olup alabileceği degerler min 00 ila max 7F arası. Normalde FF e kadar olması gerekiyor ama ben sınırlandırmak istiyorum.
b unsigned char türünden olup alabileceği değerler min 00 ila max 7F arası. Normalde FF e kadar olması gerekiyor ama ben sınırlandırmak istiyorum.

c signed char türünden olup alabileceği değerler -128 ila +127 arası

c değişkeni değişik değerlerle bu a ve b değişkenini saydırmakta.

Arttırma yönünde;


b değişkeni c vasıtasıyla (c değeri  "-15 de olabilir +120 de") arttırılıyor.  b = 7F olunca a değişkeni de 1 artıyor ama kalanıda b değişkenine ekliyor.


 

Eksiltme yönünde;

b değişkeni c vasıtasıyla (c değeri ile "-15 de olabilir +120 de") eksiliyor.  b = 00 olunca a değişkeni de 1 azalıyor ama kalanıda b değişkeninden çıkarıyor.  


Şöyle bişey yazdım.


void Hesapla()

{

// -128 ila +127 arası değer verebilen bir sensör

c = SensorOku(0x03);



// Arttırma yönünde
if (c > 0 )

{

b = b + c;

if (b > 127 )

{
b = (b %127)-1;

a = a + 1;

if (a > 127 )

{
a = (a %127)-1;
}
}

}


//Eksiltme yönünde
if (c < 0 )

{
b = b + (-127);

if (b > 127)

{
b = 0x80 -((b %127)) ;
a = a - 1;


if (a > 127)

{
a = 0x80- ((a %127)) ;
}


}

}


}





Bu kod bir yere kadar düzgün çalışıyor. Arttırma yönünde sıkıntım yok lakin eksiltirken sorun çıkarıyor.

Bana bu konuda yardımcı olabilirmisiniz sayın üstadlar.
Başlık: İki Değişkeni Nasıl Saydırabiliriz
Gönderen: BenC - 24 Ekim 2009, 15:55:52
Uzun uğraşlar sonucunda sorunu çözdüm.

Eksiltme yönündeki sorun çözüldü. Yukarıda ki  kodda mod işlemi uyguluyordum burda ise sadece 127 çıkartarak sağlıklı bir eksiltme sağlamış oldum.


void Hesapla()

{

// -128 ila +127 arası değer verebilen bir sensör

c = SensorOku(0x03);



// Arttırma yönünde
if (c > 0 )

{

b = b + c;

if (b > 127 )

{
b = (b %127)-1;

a = a + 1;

if (a > 127 )

{
a = (a %127)-1;
}
}

}


//Eksiltme yönünde
if (c < 0 )

{
b = b + (-127);

if (b > 127)

{
b = b-127 ;
a = a - 1;


if (a > 127)

{
a = a -127 ;
}


}

}


}