Подсчет среднего арифметического в D

Задача: посчитать среднее арифметическое дробных чисел, получаемых из файла data.txt, записать результат в файл average.txt.

Решение на D:

import std.stdio, std.file, std.conv : to;

void main(){
    string input = "data.txt";
    string output = "average.txt";
    // Если файл с данными существует
    if(exists(input)){
        File file1, file2;
        file1.open(input, "r");
        // Инициализируем дин.массив типа float для считанных чисел
        float[] tmp;
        // Строка для накопления елементов строки файла
        string acc;
        // Считываем файл построчно
        foreach(str; file1.byLine){
            // Разбиваем строки по элементам
            foreach(elem; str){
                // Накопляем элемент во временную строку
                if(elem != ' ') acc ~= elem;
                else{
                    // Добавляем элемент в массив из временной строки
                    tmp ~= to!float(acc);
                    // Обнуляем временную строку
                    acc = "";
                }
            }
        }
        // Добавляем последний элемент в массив
        tmp ~= to!float(acc);
        file1.close;
        float avg;
        float s = 0;
        for(int i; i < tmp.length; i++){
            // Подсчет суммы всех элементов
            s = s + tmp[i];
            // Подсчет среднего
            avg = s / tmp.length;
        }
        file2.open(output, "w");
        // Запись рез-та в файл
        file2.writeln(avg);
        file2.close;
        // Вывод рез-та в консоль
        writeln(avg);
    }
    else{
        // Если нет файла с данными, пишем об этом 
        // в выходной файл и в консоль
        string avg = "The data file not found!";
        File file2;
        file2.open(output, "w");
        file2.writeln(avg);
        file2.close;
        writeln(avg);
    }
}

Добавить комментарий