Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Collections.Generic;
- namespace Lab1
- {
- class NumbersOfFile
- {
- public List<Int32> numbers = new List<Int32>();
- public long posProduction = 1;
- public long sum = 0;
- public bool fProduction = false;
- /*!!!!!!!!!!!!!!!!!!!!!!!!!!!
- * !!!!!!!!!!!!!!!!!!!!!!!!!
- * ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ
- * НУЖЕН ТЕСТ
- * НЕПРАВИЬНО СЧИТАЕТ ПРОИЗВЕДЕНИЕ
- * ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ
- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- */
- public NumbersOfFile(string nameFile)
- {
- using (StreamReader file = new StreamReader(nameFile))
- {
- int temp = 0; //для временного хранения считываемого числа
- int read_num; //считываемая цифра
- bool flag = false; //флаг, определяющий идет ли сейчас считывание числа
- bool flag_min = false; //флаг для определения минимального числа
- int minus = 1; //переменная для знаковых чисел
- int min = 2147483647;
- long sum_t = 0;
- while (!file.EndOfStream)
- {
- if (file.Peek() == 45) minus = -1; // если следующий символ минус, то ...
- if (int.TryParse(char.ConvertFromUtf32(file.Read()), out read_num))
- {
- temp = temp * 10 + read_num;
- flag = true;
- }
- else if (flag)
- {
- temp *= minus;
- //добавляем и сортируем список
- addSort(temp);
- if (temp > 0) fProduction = true;
- //Считаем произведение положительных элементов
- if (minus == 1 && temp != 0) posProduction *= temp;
- //Считаем сумму элементов до минимального
- if (!flag_min) { min = temp; sum_t = temp; flag_min = true; }
- else if (min <= temp) { sum_t += temp; }
- if (min > temp) { min = temp; sum += sum_t; sum_t = min; }
- temp = 0;
- minus = 1;
- flag = false;
- }
- }
- //обрабатываем последний элемент
- temp *= minus;
- addSort(temp);
- if (min > temp) { sum += sum_t; }
- if (temp > 0) fProduction = true;
- if (minus == 1 && temp != 0) posProduction *= temp;
- file.Close();
- }
- }
- private void addSort(int num)
- {
- int i = numbers.Count;
- numbers.Add(num);
- while (i > 1)
- {
- if (num >= numbers[i - 2]) { break; }
- numbers[i] = numbers[i - 2];
- numbers[i - 2] = num;
- i -= 2;
- }
- }
- }
- class MyProgram
- {
- private static NumbersOfFile tryam;
- static void Main()
- {
- Console.WriteLine("-------------------------------------------------");
- Console.WriteLine("--------------------Lab1_mod3--------------------");
- Console.WriteLine("-------------------------------------------------");
- Console.WriteLine();
- initializationTryam();
- Menu();
- }
- static void initializationTryam()
- {
- string pathFile;
- Console.Write("Введите путь к файлу: ");
- try
- {
- pathFile = Console.ReadLine();
- tryam = new NumbersOfFile(pathFile);
- }
- catch (FileNotFoundException)
- {
- Console.WriteLine("Файл не найден. Повторите ввод!");
- initializationTryam();
- }
- catch (DirectoryNotFoundException)
- {
- Console.WriteLine("Неправильный путь. Повторите ввод!");
- initializationTryam();
- }
- catch (ArgumentException)
- {
- Console.WriteLine("Неправильный путь. Повторите ввод!");
- initializationTryam();
- }
- }
- static void Menu()
- {
- try
- {
- Console.WriteLine("-------------------------------------------------");
- Console.WriteLine("----------------------Menu-----------------------");
- Console.WriteLine("-------------------------------------------------");
- Console.WriteLine("1.Вывести произведение положительных элементов списка");
- Console.WriteLine("2.Вывести сумму элементов списка, расположенных до минимального элемента");
- Console.WriteLine("3.Вывести отсортированный список");
- Console.WriteLine("4.Выход");
- switch (Convert.ToInt32(Console.ReadLine()))
- {
- case 1:
- if (tryam.fProduction) Console.WriteLine("Произведение положительных элементов списка: {0}", tryam.posProduction);
- else Console.WriteLine("Положительных элементов нет.");
- Menu();
- break;
- case 2:
- Console.WriteLine("Cумма элементов списка, расположенных до минимального элемента: {0}", tryam.sum);
- Menu();
- break;
- case 3:
- Console.WriteLine();
- for (int i = 0; i < tryam.numbers.Count; i++)
- {
- if (i % 2 == 0)
- {
- Console.ForegroundColor = ConsoleColor.Blue;
- Console.WriteLine("[{0}] = {1}", i, tryam.numbers[i]);
- Console.ResetColor();
- }
- else
- {
- Console.ForegroundColor = ConsoleColor.DarkRed;
- Console.WriteLine("[{0}] = {1}", i, tryam.numbers[i]);
- Console.ResetColor();
- }
- }
- Menu();
- break;
- case 4:
- Environment.Exit(0);
- break;
- default:
- Console.WriteLine("Ошибка ввода, повторите попытку!");
- Menu();
- break;
- }
- }
- catch (System.IO.FileNotFoundException)
- {
- Console.WriteLine("Файл не найден. Повторите ввод!");
- Console.WriteLine();
- Menu();
- }
- catch (FormatException)
- {
- Console.WriteLine("Ошибка ввода. Повторите ввод!");
- Console.WriteLine();
- Menu();
- }
- catch (OverflowException)
- {
- Console.WriteLine("Ошибка ввода. Повторите ввод!");
- Console.WriteLine();
- Menu();
- }
- catch
- {
- Console.WriteLine("Ошибка! Попробуйте еще раз");
- Console.WriteLine();
- Menu();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement