Advertisement
Slapoguzov

Untitled

Apr 14th, 2014
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.86 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. namespace Lab1
  5. {
  6.     class NumbersOfFile
  7.     {
  8.         public List<Int32> numbers = new List<Int32>();
  9.         public long posProduction = 1;
  10.         public long sum = 0;
  11.         public bool fProduction = false;
  12.        
  13.         /*!!!!!!!!!!!!!!!!!!!!!!!!!!!
  14.          * !!!!!!!!!!!!!!!!!!!!!!!!!
  15.          * ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ
  16.          * НУЖЕН ТЕСТ
  17.          * НЕПРАВИЬНО СЧИТАЕТ ПРОИЗВЕДЕНИЕ
  18.          * ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ ТЕСТ
  19.          * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  20.          * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  21.          */
  22.  
  23.         public NumbersOfFile(string nameFile)
  24.         {
  25.             using (StreamReader file = new StreamReader(nameFile))
  26.             {
  27.  
  28.                 int temp = 0;                                                       //для временного хранения считываемого числа
  29.                 int read_num;                                                       //считываемая цифра
  30.                 bool flag = false;                                                  //флаг, определяющий идет ли сейчас считывание числа
  31.                 bool flag_min = false;                                              //флаг для определения минимального числа
  32.                 int minus = 1;                                                      //переменная для знаковых чисел
  33.                 int min = 2147483647;
  34.                 long sum_t = 0;
  35.  
  36.  
  37.                 while (!file.EndOfStream)
  38.                 {
  39.                     if (file.Peek() == 45) minus = -1;                              // если следующий символ минус, то ...
  40.                     if (int.TryParse(char.ConvertFromUtf32(file.Read()), out read_num))
  41.                     {
  42.                         temp = temp * 10 + read_num;
  43.                         flag = true;
  44.                     }
  45.                     else if (flag)
  46.                     {
  47.                         temp *= minus;
  48.  
  49.                         //добавляем и сортируем список
  50.                         addSort(temp);
  51.  
  52.                         if (temp > 0) fProduction = true;
  53.  
  54.  
  55.                         //Считаем произведение положительных элементов
  56.                         if (minus == 1 && temp != 0) posProduction *= temp;
  57.  
  58.                         //Считаем сумму элементов до минимального
  59.                         if (!flag_min) { min = temp; sum_t = temp; flag_min = true; }
  60.                         else if (min <= temp) { sum_t += temp; }
  61.                         if (min > temp) { min = temp; sum += sum_t; sum_t = min; }
  62.  
  63.                         temp = 0;
  64.                         minus = 1;
  65.                         flag = false;
  66.  
  67.  
  68.                     }
  69.                 }
  70.  
  71.                 //обрабатываем последний элемент
  72.                 temp *= minus;
  73.                 addSort(temp);
  74.                 if (min > temp) { sum += sum_t; }
  75.                 if (temp > 0) fProduction = true;
  76.                 if (minus == 1 && temp != 0) posProduction *= temp;
  77.  
  78.  
  79.                 file.Close();
  80.             }
  81.         }
  82.  
  83.         private void addSort(int num)
  84.         {
  85.             int i = numbers.Count;
  86.  
  87.             numbers.Add(num);
  88.  
  89.                 while (i > 1)
  90.                 {
  91.                     if (num >= numbers[i - 2]) { break; }
  92.                     numbers[i] = numbers[i - 2];
  93.                     numbers[i - 2] = num;
  94.                     i -= 2;
  95.                 }
  96.  
  97.         }
  98.  
  99.     }
  100.     class MyProgram
  101.     {
  102.         private static NumbersOfFile tryam;
  103.  
  104.         static void Main()
  105.         {
  106.             Console.WriteLine("-------------------------------------------------");
  107.             Console.WriteLine("--------------------Lab1_mod3--------------------");
  108.             Console.WriteLine("-------------------------------------------------");
  109.             Console.WriteLine();
  110.  
  111.  
  112.             initializationTryam();
  113.             Menu();
  114.         }
  115.  
  116.         static void initializationTryam()
  117.         {
  118.             string pathFile;
  119.             Console.Write("Введите путь к файлу: ");
  120.             try
  121.             {
  122.  
  123.                 pathFile = Console.ReadLine();
  124.                 tryam = new NumbersOfFile(pathFile);
  125.             }
  126.             catch (FileNotFoundException)
  127.             {
  128.                 Console.WriteLine("Файл не найден. Повторите ввод!");
  129.                 initializationTryam();
  130.             }
  131.             catch (DirectoryNotFoundException)
  132.             {
  133.                 Console.WriteLine("Неправильный путь. Повторите ввод!");
  134.                 initializationTryam();
  135.             }
  136.             catch (ArgumentException)
  137.             {
  138.                 Console.WriteLine("Неправильный путь. Повторите ввод!");
  139.                 initializationTryam();
  140.             }
  141.         }
  142.         static void Menu()
  143.         {
  144.  
  145.             try
  146.             {
  147.                 Console.WriteLine("-------------------------------------------------");
  148.                 Console.WriteLine("----------------------Menu-----------------------");
  149.                 Console.WriteLine("-------------------------------------------------");
  150.                 Console.WriteLine("1.Вывести произведение положительных элементов списка");
  151.                 Console.WriteLine("2.Вывести сумму элементов списка, расположенных до минимального элемента");
  152.                 Console.WriteLine("3.Вывести отсортированный список");
  153.                 Console.WriteLine("4.Выход");
  154.  
  155.                 switch (Convert.ToInt32(Console.ReadLine()))
  156.                 {
  157.                     case 1:
  158.                         if (tryam.fProduction) Console.WriteLine("Произведение положительных элементов списка: {0}", tryam.posProduction);
  159.                         else Console.WriteLine("Положительных элементов нет.");
  160.                         Menu();
  161.                         break;
  162.                     case 2:
  163.                         Console.WriteLine("Cумма элементов списка, расположенных до минимального элемента: {0}", tryam.sum);
  164.                         Menu();
  165.                         break;
  166.                     case 3:
  167.                         Console.WriteLine();
  168.                         for (int i = 0; i < tryam.numbers.Count; i++)
  169.                         {
  170.                             if (i % 2 == 0)
  171.                             {
  172.                                 Console.ForegroundColor = ConsoleColor.Blue;
  173.                                 Console.WriteLine("[{0}] = {1}", i, tryam.numbers[i]);
  174.                                 Console.ResetColor();
  175.                             }
  176.                             else
  177.                             {
  178.                                 Console.ForegroundColor = ConsoleColor.DarkRed;
  179.                                 Console.WriteLine("[{0}] = {1}", i, tryam.numbers[i]);
  180.                                 Console.ResetColor();
  181.                             }
  182.                         }
  183.                         Menu();
  184.                         break;
  185.                     case 4:
  186.                         Environment.Exit(0);
  187.                         break;
  188.                     default:
  189.                         Console.WriteLine("Ошибка ввода, повторите попытку!");
  190.                         Menu();
  191.                         break;
  192.                 }
  193.             }
  194.             catch (System.IO.FileNotFoundException)
  195.             {
  196.                 Console.WriteLine("Файл не найден. Повторите ввод!");
  197.                 Console.WriteLine();
  198.                 Menu();
  199.             }
  200.             catch (FormatException)
  201.             {
  202.                 Console.WriteLine("Ошибка ввода. Повторите ввод!");
  203.                 Console.WriteLine();
  204.                 Menu();
  205.             }
  206.             catch (OverflowException)
  207.             {
  208.                 Console.WriteLine("Ошибка ввода. Повторите ввод!");
  209.                 Console.WriteLine();
  210.                 Menu();
  211.             }
  212.             catch
  213.             {
  214.                 Console.WriteLine("Ошибка! Попробуйте еще раз");
  215.                                 Console.WriteLine();
  216.                 Menu();
  217.             }
  218.         }
  219.     }
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement