Files
ISTU_TEST_LR1/LR1/AppTesting/Program.cs
2026-03-22 17:34:34 +04:00

107 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Globalization;
public class Program
{
// Тип double[] выбран вместо float[] для предотвращения переполнения при умножении,
// так как его диапазон значений значительно больше (до ±1.7e+308 против ±3.4e+38 у float).
private static void Main()
{
double[] inputArray = ReadData(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestData", "input_data.txt"));
Console.WriteLine($"Input data: [{string.Join("; ", inputArray)}]");
var outputData = ArrayProc(inputArray);
WriteToFile(outputData!, "output_data_csharp.txt");
var minValue = SearchMinValue(outputData!);
Console.WriteLine($"Output data: [{(outputData != null ? string.Join(" ; ", outputData) : "null")}]");
WriteToFile(minValue!, "min_value_csharp.txt");
Console.WriteLine($"Min value: {minValue.ToString()}");
}
private static void WriteToFile(double[] data, string filename)
{
if (data == null) return;
using (StreamWriter sw = new StreamWriter(filename))
{
foreach (var value in data) sw.WriteLine(value.ToString(CultureInfo.InvariantCulture));
}
}
private static void WriteToFile(double? data, string filename)
{
if (data == null) return;
File.WriteAllText(filename, data.Value.ToString(CultureInfo.InvariantCulture) + Environment.NewLine);
}
public static double[] ReadData(string txtFile)
{
string[] lines = File.ReadAllLines(txtFile);
if (lines.Length == 0 || lines[0] == "None")
return Array.Empty<double>();
double[] data = new double[lines.Length];
for (int i = 0; i < lines.Length; i++)
{
data[i] = double.Parse(lines[i], CultureInfo.InvariantCulture);
}
return data;
}
public static double? SearchMinValue(double[] inputData)
{
if (inputData == null) return null;
if (inputData.Length == 0) return null;
var minValue = inputData[0];
int i = 1;
while (i < inputData.Length)
{
if (inputData[i] < minValue)
minValue = inputData[i];
i++;
}
return minValue;
}
public static double[]? ArrayProc(double[] inputData)
{
double[] outputArray;
int pairs = 0;
int n = inputData.Length - 1;
int i = 0;
while (i <= n / 2)
{
if (i + 8 <= n)
pairs++;
i++;
}
if (pairs == 0)
return new double[0];
outputArray = new double[pairs];
int j = 0;
i = 8;
while (j < outputArray.Length)
{
outputArray[j] = inputData[i] * inputData[i - 8];
j++;
i++;
}
if (outputArray.Length % 2 != 0)
{
int centralIdx = outputArray.Length / 2;
double centralItem = outputArray[centralIdx];
outputArray[centralIdx] = centralItem * centralItem;
}
return outputArray;
}
}