Çözüldü C dilinde kod bloğunda belirtilen satırın anlamı nedir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

KralYolu

Kilopat
Katılım
21 Ocak 2014
Mesajlar
1.541
Makaleler
19
Çözümler
5
Yer
Karabük
Daha fazla  
Cinsiyet
Erkek
Selamlar, aşağıdaki kod bloğunda 13.satırın meali nedir? Ne yapıyor? Güzelce anlatabilirseniz çok mutlu olurum.

[CODE highlight="13"]#include <stdio.h>

int main(int argc, char *argv[])
{
int number=0, basamak=0, oncekiBasamak=0, sonuc=0;

printf("enter your student number:");
scanf("%d",&number);

while(number>0)
{
basamak=number%10;
sonuc==0?sonuc=basamak<oncekiBasamak?1:0:0;
oncekiBasamak = basamak;
number = number / 10;
}
printf(sonuc==0?"True":"False");
return 0;
}[/CODE]
 
Son düzenleyen: Moderatör:
Çözüm
13. satırda aşağıdaki formatla ifade edilen "ternary operator" denilen operatör kullanılıyor.
"Doğru veya yanlış bir ifade" ? "Doğruysa dönmesi gereken ifade" : "Yanlışsa dönmesi gereken ifade"
Burada iç içe 2 ternary operator kullanıldığı için okuması gerçekten zor olabilir. Bu yüzden geleneksel ıf else ifadeleri ile bu satırı aşağıdaki gibi ifade edebiliriz.

C:
if (sonuc==0){
 if ( sonuc = basamak < oncekiBasamak ){
 return 1;
 }
 else {
 return 0;
 }
}
else {
 return 0;
}

Burada sonuç = basamak < oncekibasamak kısmı hala kafanı karıştırıyor olabilir. Kısaca açıklayayım soru işareti kalmasın.

Sonuç değişkeni bir integer.
basamak < oncekiBasamak
Sorgusu true veya false gibi bir değer döndürür. C dilinde bunlar compiler düzeyinde ınteger'lar ile ifade edilir. Yani true 1, false 0 olacaktır. Bu sebeple basamak değişkeninin, onceki basamak değişkeninden küçük olması durumunda sonuç değişkeni 1 değerini alacaktır. Bu değer de doğru olarak görüldüğünden if bloğunun içine girilecektir.
Çünkü benim yazdığım kodun içindeki return 0 ve return 1'ler int main() fonksiyonundan çıkıyor. Ben orada sadece ternary işleminin ne döndürdüğünü ifade etmek istemiştim.

Bahsettiğimiz sorguda aslında yapılan tek işlem şu:

C:
if (result == 0 && digit < preDigit) {
    result = digit<predigit // If'in içinde zaten digit < preDigit'in dogrulugunu kontrol ettigimizden her zaman true dönecektir, yani eğer if'in koşulu doğruysa result her zaman 1(true)'ya eşitlenecektir.
}

Umarım biraz daha açıklayıcı olmuştur.
Evet şimdi taşlar yerine oturdu. Teşekkürler <3
 

Yeni konular

Geri
Yukarı