Вычислить минимальное и максимальное отношение продуктов

Предмет: Программирование на языке C#
Раздел: Чтение и запись данных из файлов, работа с массивами, статические методы.
Пояснение задания:

Задача состоит в следующем:

  1. Входные данные — два массива (A и B), которые содержатся в файле input.txt. Данные в файле разделяются ровно одним пробелом, и элементы массива — вещественные числа с десятичным разделителем запятая.
  2. Цель —:
    • Прочитать массивы из файла, пропустив некорректные данные.
    • Вычислить сумму элементов для каждого массива (по формулам для \( S_A \) и \( S_B \) ).
    • Вычислить минимальное и максимальное отношение продуктов \( S_A \) и \( S_B \) .
    • В случае, если в файле не останется корректных данных, вывести сообщение «Корректных данных в файле нет».
  3. Вывод — сохранить результаты вычислений (суммы \( S_A \) и \( S_B \) , а также отношение \( \text{min}(S_A;S_B) / \text{max}(S_A;S_B) \) ) в файл `output.txt`. Числа должны быть разделены через запятую, с точностью два знака после запятой.
Статические методы

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

Решение:
  1. Открываем файл input.txt, читаем данные.
  2. Преобразуем данные в массивы; пропускаем некорректные данные.
  3. Вычисляем суммы \( S_A \) и \( S_B \) .
  4. Вычисляем минимальное и максимальное отношение.
  5. Записываем результат в файл `output.txt`.

Вот пример программы на языке C#:

using System;
using System.IO;
using System.Globalization;
using System.Linq;
class Program {
    static void Main(string[] args) {
        string inputFilePath = @"WorkingFiles/input.txt";
        string outputFilePath = @"WorkingFiles/output.txt";
        try {
            // Чтение данных из файла
            string[] lines = File.ReadAllLines(inputFilePath);
            if (lines.Length < 2) {
                Console.WriteLine("Корректных данных в файле нет");
                return;
            }
            // Обработка массива A
            double[] arrayA = ParseArray(lines[0]);
            // Обработка массива B
            double[] arrayB = ParseArray(lines[1]);
            if (arrayA.Length == 0 || arrayB.Length == 0) {
                Console.WriteLine("Корректных данных в файле нет");
                return;
            }
            // Вычисление сумм
            double sumA = arrayA.Sum();
            double sumB = arrayB.Sum();
            // Вычисление отношения
            double min = Math.Min(sumA, sumB);
            double max = Math.Max(sumA, sumB);
            double ratio = min / max;
            // Запись результата в файл
            string result = $"{sumA:F2},{sumB:F2},{ratio:F2}";
            File.WriteAllText(outputFilePath, result);
            Console.WriteLine("Результаты успешно записаны в файл.");
        } catch (Exception ex) {
            Console.WriteLine("Произошла ошибка: " + ex.Message);
        }
    }
    // Парсинг строки в массив вещественных чисел, игнорируя некорректные данные
    static double[] ParseArray(string line) {
        string[] parts = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
        return parts.Select(part => {
            if (double.TryParse(part.Replace(',', '.'), NumberStyles.Any, CultureInfo.InvariantCulture, out double number)) {
                return number;
            }
            return (double?)null;
        })
        .Where(x => x.HasValue)
        .Select(x => x.Value)
        .ToArray();
    }
}
Пояснение к коду:
  1. Чтение файла: Первый массив данных считывается как первая строка файла, второй массив — как вторая строка. Прочитываем две строки с данными из файла `input.txt`.
  2. Функция `ParseArray`: Обрабатывает строку данных и извлекает корректные вещественные числа.
  3. Вычисление сумм: Используем метод `.Sum()` для каждого массива.
  4. Запись результата: Результат записывается в виде строки с четырьмя значениями, разделенными запятыми, с точностью до двух знаков после запятой.
  5. Обработка ошибок: Вся программа обернута в блок `try-catch` для обработки возможных исключений при работе с файлами или данными.
Что нужно сделать дополнительно:
  1. Создание папок:
    • Убедитесь, что папка `WorkingFiles` существует на том уровне, где находится ваша программа.
    • Создайте файл `input.txt` с корректными данными.
Пример файла `input.txt`:
1,5 2,5 3,7 4,8 5,9 6,1
Пример данных в `output.txt`:
7.70,16.80,0.46

Программа выполнит необходимые действия, и результат будет записан в файл с точностью до двух знаков после запятой, как и требуется.

Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн