3 basamaklı sayıyı basamaklara ayırma işlemi

Başlatan tayyar, 24 Eylül 2010, 16:16:44

tayyar

int16 tipindeki 3 basamaklı bir sayıyı (0-600 arası) basamaklarına ayırıp "char dizi
  • " tipinde bir diziye eklemem, sonrasındada dizi elemanlarını seriden tek tek göndermem gerekiyor.

    sayıyı basamaklara ayırabilmek için aşağıdaki gibi bir mantık izlemeyi düşünüyorum:
    int a,b,c=0;
    int16 sayi;  //sayi=563 olduğunu varsayalım
    int araeleman=0;
    char dizi[3];
    
    
    a=sayi/100; //a=5 olur bu yüzler basamağımız
    dizi[0]=a;
    
    araeleman=(sayi)-(a*100); //araeleman=563-500=63 olur
    
    b=araeleman/10; //b=6 olur
    dizi[1]=b;
    
    c=(araeleman)-(b*10); //c=3 olur
    dizi[2]=c;
    
    */
    dizi[0]=a
    dizi[1]=b
    dizi[2]=c 
    oldu/*
    


    Bu kod parçasının basamaklara ayırma işlemini yapabileceğini düşünüyorum.

    Daha farklı yöntem aklına gelen varmıdır acaba? (daha hızlı çalışabilecek olması makbuldür)
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

mufitsozen

int ndx=0;
int16 sayi=563;  //sayi=563 olduğunu varsayalım
int16 tsayi;
char dizi[3];


tsayi = sayi;
for(ndx=2;ndx>0;ndx--){
   dizi[ndx] = tsayi % 10;
   tsayi = tsayi /10;
}


daha derli toplu, muhtemelen daha hizli olacaktir (extra carpma, cikartma filan yok) vede daha az yer kaplayacaktir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

tayyar

dizi[ndx] = tsayi % 10;

   
bu % işlemi 10 a bölümden kalanımı veriyor ?   
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

mufitsozen

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

JKramer

http://www.ccsinfo.com/forum/viewtopic.php?p=66506

Alıntı yapılan: ckielstraAnd because there is always another way to do it...
The optimised version below is more source code but actually compiles about 130 bytes shorter and is much faster to execute.
void GetDigits(int16 Val, int8 &thous, int8 &huns, int8 &tens, int8 &units) 
{ 
  tens = 0; 
  huns = 0; 
  thous = 0; 
  
  while (Val >= 1000) 
  { 
    Val -= 1000; 
    thous++; 
  } 
  
  while (Val >= 100) 
  { 
    Val -= 100; 
    huns++; 
  } 
  
  while (Val >= 10) 
  { 
    Val -= 10; 
    tens++; 
  } 

  units = Val; 
} 

//=============================== 
void main () 
{ 
  int16 adcvalue; 
  int8 thous,huns,tens,units; 

  adcvalue = 1015; 

  GetDigits(adcValue, thous, huns, tens, units); 
  
  while (1); 
}
Hollandalı arkadaşın yalancısıyım :), bir deneyip karşılaştırırsınız.