Şimdi Ara

C Kod Hakkında Yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
5
Cevap
0
Favori
432
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  •  
    #include <stdio.h>

    int main()
    {
    char dizi[100];
    void ters(const char * const);

    printf("Metin giriniz:\n");
    gets(dizi);

    printf("\nGirdiğiniz metnin tersten yazılışı:\n");
    ters(dizi);

    return 0;
    }

    void ters(const char * const sPtr)
    {
    if(sPtr[0]=='\0')
    return;

    else{
    ters(&sPtr[1]);
    putchar(sPtr[0]);
    }
    }





    Program girilen metni tersten yazdırıyor.Anlamadığım üç şey var:

    1)Prototipi neden main içine yazdık? Deitel den çalışıyorum diğer kodlarda prototip hep önlemcilerden sonra geliyor.

    2)Prototipteki ikinci const u anlayamadım.

    3)ters fonksiyonunda else kısmını anlamadım. Orda ters ve putchar ne iş yapar ?



    < Bu mesaj bu kişi tarafından değiştirildi Optimumo -- 1 Ağustos 2012; 13:56:39 >







  • yukarı
  • 1. tanımladığın fonksiyonu main fonksiyonunun üstünde tanımlasanda program hatasız çalışıyor Bunun nedeni; derleyici kodları yukardan aşağıya doğru okumaya başlar. Yani "ters(dizi);" satırına gelinceye kadar ters() fonksiyonunu tanımlamalısın. Çünkü main içinde ters() fonksiyonu çağrıldığında bilgisayarın o fonksiyonu tanıması lazım.

    2.void ters(const char * const); burdaki 2. constu yazmada ki neden ise şudur diyorsun ki: ben const tipinde sPtr adında bir değişken tanımlayacam.

    3.else deki ters(&sPtr[1]) girilen değeri diziye aktarıyor
    putchar(sPtr[0]) diziye aktarılan değeri ekrana yazdırıyor(main fonksiyonunda çağrılarak)


    not:yazdıklarımdan %100 emin değilim c++ a göre düşünerek cevaplamaya çalıştım




  • Program basit görünüyor ama bikaç karmaşık şey var.

    1- Prototipin nereye yazıldığının önemi yok. Fonksiyon tanımından yukarıda olması yeter. Fakat ben kodunu kopyalayıp prototipi sildim ve öyle denedim, yine de warning vererek derledi. Sanırım modern derleyiciler artık buna bakmıyor.

    2- char a; -> char tipinde değişken.
    const char a; -> char tipinde sabit.
    char *a; -> char tipinde işaretçi. İşaret ettiği nesneyi değiştirebilir ve başka bir nesneyi işaret edebilir.
    const char *a; -> Başka bir nesneyi gösterebilir ama gösterdiği nesneyi değiştiremez.
    char *const a; -> Gösterdiği nesneyi değiştirebilir ama başka bir nesneyi gösteremez.
    const char *const a; -> Gösterdiği nesneyi değiştiremez ve başka bir nesneyi de gösteremez.

    Tabi bunlar char olmak zorunda değil herhangi bir tip olabilir.

    3- Tersten yazdırma işini özyinelemeli (recursive) çağrılar ile halletmiş. Recursive olayını anlamadıysan o bölüm zor gelebilir ama çalışması şöyle. Fonksiyon dizinin başlangıç adresini yani ilk karakterin adresini alır ve bunun sonlandırma karakteri olup olmadığını kontrol eder.
    Değilse bir sonraki karakter ile kendisini tekrar çağırır. Sonlandırma (NULL) karakteri gelene kadar kontrol devam eder. Null ile karşılaştığı zaman her çağrı tek tek sonlanmaya başlar.
    Geriye dönüşte putchar(sPtr[0]); satırı ile kendisine geçirilen karakteri ekrana basar.

    Kafanda canlandırmakta zorlandıysan google da recursive animasyonları arayıp izlemeyi dene, çok yardımcı olur.




  • yupbiy ve elektro_gadget anladım soruyu çok saolun.
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.