D Programlama Dili - Çözümler

Parametre Serbestliği

hesapla işlevinin belirsiz sayıda Hesap nesnesi alabilmesi için parametre listesinin bir Hesap dilimini ve ... karakterlerini içermesi gerekir:

double[] hesapla(Hesap[] hesaplar...) {
    double[] sonuçlar;

    foreach (hesap; hesaplar) {
        final switch (hesap.işlem) {

        case İşlem.toplama:
            sonuçlar ~= hesap.birinci + hesap.ikinci;
            break;

        case İşlem.çıkarma:
            sonuçlar ~= hesap.birinci - hesap.ikinci;
            break;

        case İşlem.çarpma:
            sonuçlar ~= hesap.birinci * hesap.ikinci;
            break;

        case İşlem.bölme:
            sonuçlar ~= hesap.birinci / hesap.ikinci;
            break;
        }
    }

    return sonuçlar;
}

İşleve gönderilen bütün parametre değerleri hesaplar dizisinde bulunur. Bütün hesap nesnelerini bir döngüde teker teker kullanarak sonuçları da bir double dizisine yerleştiriyoruz ve işlevin sonucu olarak döndürüyoruz.

Bütün program:

import std.stdio;

enum İşlem { toplama, çıkarma, çarpma, bölme }

struct Hesap {
    İşlem işlem;
    double birinci;
    double ikinci;
}

double[] hesapla(Hesap[] hesaplar...) {
    double[] sonuçlar;

    foreach (hesap; hesaplar) {
        final switch (hesap.işlem) {

        case İşlem.toplama:
            sonuçlar ~= hesap.birinci + hesap.ikinci;
            break;

        case İşlem.çıkarma:
            sonuçlar ~= hesap.birinci - hesap.ikinci;
            break;

        case İşlem.çarpma:
            sonuçlar ~= hesap.birinci * hesap.ikinci;
            break;

        case İşlem.bölme:
            sonuçlar ~= hesap.birinci / hesap.ikinci;
            break;
        }
    }

    return sonuçlar;
}

void main() {
    writeln(hesapla(Hesap(İşlem.toplama, 1.1, 2.2),
                    Hesap(İşlem.çıkarma, 3.3, 4.4),
                    Hesap(İşlem.çarpma, 5.5, 6.6),
                    Hesap(İşlem.bölme, 7.7, 8.8)));
}

Çıktısı:

[3.3, -1.1, 36.3, 0.875]