D.ershane Çözümleri Ddili.org

Diziler Çözümleri

  1.  
    import std.stdio;
    
    void main()
    {
        write("Kaç sayı var? ");
        int adet;
        readf(" %s", &adet);
    
        double[] sayılar;
        sayılar.length = adet;
    
        int sayaç;
        while (sayaç < adet) {
            write("Sayı ", sayaç, ": ");
            readf(" %s", &sayılar[sayaç]);
            ++sayaç;
        }
    
        writeln("Sıralı olarak:");
        sayılar.sort;
    
        sayaç = 0;
        while (sayaç < adet) {
            write(sayılar[sayaç], " ");
            ++sayaç;
        }
        writeln();
    
        writeln("Ters sırada:");
        sayılar.reverse;
    
        sayaç = 0;
        while (sayaç < adet) {
            write(sayılar[sayaç], " ");
            ++sayaç;
        }
        writeln();
    }
    
  2. Açıklamalar kodun içinde...
  3. import std.stdio;
    
    void main()
    {
        // Kaç tane sayı geleceğini baştan bilmediğimiz için
        // dinamik diziler kullanıyoruz
        int[] tekler;
        int[] çiftler;
    
        writeln("Lütfen tamsayılar girin (sonlandırmak için -1)");
    
        while (true) {
    
            // Sayıyı okuyoruz
            int sayı;
            readf(" %s", &sayı);
    
            // Sayı özellikle -1 olduğunda döngüden çıkıyoruz
            if (sayı == -1) {
                break;
            }
    
            // Tek veya çift olması durumuna göre farklı dizinin
            // sonuna yerleştiriyoruz; ikiye bölümünden kalan 0
            // ise çifttir, değilse tektir
            if ((sayı % 2) == 0) {
                çiftler ~= sayı;
    
            } else {
                tekler ~= sayı;
            }
        }
    
        // Önce tekleri ve çiftleri ayrı ayrı sıralıyoruz
        tekler.sort;
        çiftler.sort;
    
        // Ondan sonra birleştiriyoruz
        int[] sonuç;
        sonuç = tekler ~ çiftler;
    
        writeln("Önce tekler, sonra çiftler; sıralı olarak:");
    
        // Daha önce gördüğümüz gibi bir döngü kurarak dizinin
        // bütün elemanlarını çıkışa yazdırıyoruz
        int i;
        while (i < sonuç.length) {
            write(sonuç[i], " ");
            ++i;
        }
    
        writeln();
    }
    
  4. Bu programda üç hata var. İki hata while döngüleriyle ilgili: her ikisinde de < işleci yerine <= kullanılmış. O yüzden program yasal olmayan bir indeks kullanarak dizinin dışına taşıyor.

    Üçüncü hatayı kendiniz uğraşarak gidermeniz önemli olduğu için çözümü hemen vermek istemiyorum. Yukarıdaki iki hatayı giderdikten sonra programı tekrar derleyin ve neden sonucu yazdırmadığını kendiniz çözmeye çalışın. Eğer kendiniz bulamazsanız, çözümü görmek için aşağıdaki iki yatay çizgi arasındaki paragrafı fareyle seçin:


    i sayacı hâlâ bir önceki döngüden çıkıldığındaki değerinde olduğu için, ikinci while döngüsünün koşulu hiçbir zaman sağlanmıyor ve ikinci döngü bir kere bile tekrarlanmıyor. Çözüm olarak ikinci döngüden önce bir i = 0; ifadesi yazmanız gerekir.