Çö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.
Tek satır if kullanılmış. koşul ? doğru ise : yanlış ise şeklinde bir kullanımı var. Yani bunu normal if şeklinde açarsak aşağıdaki şekilde oluyor.

[CODE lang="c" title="Örnek"]if (koşul)
{
// doğru ise
}
else
{
// yanlış ise
}[/CODE]
 
Tek satır if kullanılmış. koşul ? doğru ise : yanlış ise şeklinde bir kullanımı var. Yani bunu normal if şeklinde açarsak aşağıdaki şekilde oluyor.

[CODE lang="c" title="Örnek"]if (koşul)
{
// doğru ise
}
else
{
// yanlış ise
}[/CODE]
Ben benim kod bloğumdakini bu şekilde nasıl yazarım hala anlayamadım. Benimkini o şekilde yazabilir misiniz?
 
Ben benim kod bloğumdakini bu şekilde nasıl yazarım hala anlayamadım. Benimkini o şekilde yazabilir misiniz?
Bu koddaki tek sıkıntının orası olduğunu düşünmüyorum. Attığınız kodun genel olarak ne yapması gerektiğini anlayamadım. Attığınız kod düzgün çalışıyor mu? Ne yapması gerekiyor bu kodun?
 
Bu koddaki tek sıkıntının orası olduğunu düşünmüyorum. Attığınız kodun genel olarak ne yapması gerektiğini anlayamadım. Attığınız kod düzgün çalışıyor mu? Ne yapması gerekiyor bu kodun?
Sorunda o zaten ben de anlayamadım o satırda ne yaptığını anlasam anlayacağım aslında. 2010205074 girdiğimde output False oluyor. Kod bana ait olmadığı için bilmiyorum. :D
 
Paylaştığınız kod girdiğiniz sayının her basamağındaki rakamı tek tek kontrol ediyor. Eğer herhangi bir sonraki rakam öncekinden büyükse False döndürüyor. Eğer her bir sonraki rakam öncekinden küçük ise sonuc değeri 0 olarak kalıyor ve True dönüyor. Belirtilen satırda da bu kontrol ediliyor.

Tam anlatamadıysam örnek vereyim;

98756 -> False
98765 -> True
 
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.
 
Çözüm
@await Hocam sırf sorum için hesap açmış gibi duruyorsunuz valla Allah razı olsun. Çok da güzel anlatmışsınız. Sabahtan beri kafamda bunu çözmeye çalışıyorum. Bıraktım başka şeye geçtim ama hala kafamın kenarındaydı. Bir bakayım bir şey yazan olmuş mu dedim ve yanıtınızı gördüm çok teşekkürler.

Yalnız kodu bu şekilde yazdığımda bir output alamıyorum. Sorun nerede acaba?
Kod:
#include <stdio.h>


int main(int argc, char *argv[])
{
    int number=0, digit=0, preDigit=0, result=0;
    
    printf("enter your student number:");
    scanf("%d",&number);
    
    while(number>0)
    {
        
        digit=number%10;
        if (result==0)
        {
            if (result=digit<preDigit)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
        else
        {
            return 0;
        }
        preDigit = digit;
        number = number / 10;
    }
    printf(result==0?"True":"False");
}
 
Son düzenleme:
@await Hocam sırf sorum için hesap açmış gibi duruyorsunuz valla Allah razı olsun. Çok da güzel anlatmışsınız. Sabahtan beri kafamda bunu çözmeye çalışıyorum. Bıraktım başka şeye geçtim ama hala kafamın kenarındaydı. Bir bakayım bir şey yazan olmuş mu dedim ve yanıtınızı gördüm çok teşekkürler.

Yalnız kodu bu şekilde yazdığımda bir output alamıyorum. Sorun nerede acaba?
Kod:
#include <stdio.h>


int main(int argc, char *argv[])
{
    int number=0, digit=0, preDigit=0, result=0;
   
    printf("enter your student number:");
    scanf("%d",&number);
   
    while(number>0)
    {
       
        digit=number%10;
        if (result==0)
        {
            if (result=digit<preDigit)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
        else
        {
            return 0;
        }
        preDigit = digit;
        number = number / 10;
    }
    printf(result==0?"True":"False");
}

Çü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.
 
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.
İlk kez foruma yeni başlamış ve gerçekten anlatımı kuvvetli,bilgisi yüksek birine rastladım. Ağzınıza sağlık gerçekten.
 

Yeni konular

Geri
Yukarı