Advertisement
Guest User

pirka

a guest
May 26th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.19 KB | None | 0 0
  1. // ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <fstream>
  6. #include <iostream>
  7. #include <string>
  8. using namespace std;
  9. int CalculateLeftSide(int tempArray[], int index, int arrayLength); // счет суммы ячеек слева от индекса
  10. int CalculateRightSide(int tempArray[], int index, int arrayLength); // счет суммы ячеек справа от индекса
  11. int FindMediana(int tempArray[], int arrayLength); // поиск медианы
  12. int* input(string fname, int length); //функция для заполнения массива
  13. int arrayLength(string fname); //функция для подсчета количества чисел в файле
  14. bool testFile(string fname); // проверка на наличие файла. если файла нет, возвращает false
  15.  
  16. int main() {
  17.     setlocale(LC_ALL, "Russian");
  18.     int* myArray; // указатель для массива
  19.     int length; // длинна массива
  20.     string filename = "Input.txt"; // имя файла
  21.     if (!testFile(filename)) {  // если функция вернет false, то файла нет
  22.         getchar();
  23.         return 0;  // программа завершается, если файла нет
  24.     }
  25.        
  26.    
  27.     length = arrayLength(filename); // вызов функции, которая просчитает файл и вернет значение длины массива
  28.     getchar(); //  ожидание ввода
  29.     myArray = input(filename, length); //присвоение указателю значение массива
  30.     int mediana = FindMediana(myArray, length); //поиск медианы
  31.     cout << "Медиана под индексом: " << mediana;
  32.    
  33.     getchar();
  34.     return 0;
  35. }
  36. bool testFile(string fname) {
  37.     ifstream test(fname);
  38.     string temp;
  39.     if (!test.is_open()) {
  40.         cout << "Файл не может быть открыт" << endl;
  41.         return false; //возврат false при отсутствии файла
  42.     }
  43.     while (!test.eof()) { //начало проверки ввода в файл
  44.         test >> temp;
  45.         for (int i = 0; i < temp.length(); i++) {
  46.            
  47.             if (!(temp[i] >= '0' && temp[i] <= '9')) { //если символ не является цифрой
  48.  
  49.                 if (!(i == 0 && temp[i] == '-')) { //если не является минусом в начале числа
  50.                     cout << "В файле недопустимые символы: " << temp[i] << endl;
  51.                     return false;
  52.                 }
  53.             }
  54.         }
  55.     }
  56.    
  57.     test.close(); // закрытие файла
  58.     cout << "Файл в норме" << endl;
  59.     return true;
  60. }
  61. int arrayLength(string fname) {
  62.     ifstream fileInt(fname); //переменная для получения потока из файла
  63.     int length = 0; //здесь хранится количество слов в файле
  64.     int temp; // переменная для работы с потоком
  65.     while (!fileInt.eof()) { // цикл до тех пор, пока поток не дойдет до конца файла
  66.         fileInt >> temp; //занесение значение, продвижение в файле
  67.         length++; // счетчиков слов
  68.     }
  69.     fileInt.close(); // закрытие файла
  70.     cout << "Длинна массива в файле: " << length << endl;
  71.     return length;
  72. }
  73. int* input(string fname, int length) { //функция для заполнения массива
  74.     ifstream fileInput(fname); //переменная для ввода из яайла
  75.     int* arra; // указатель int
  76.    
  77.     arra = new int[length]; // создание массива
  78.     int i = 0; //счетчик для работы с массивом
  79.     while (!fileInput.eof()) { // цикл до тех пор, пока поток не дойдет до конца файла
  80.         fileInput >> arra[i]; //ввод потока в массив
  81.         cout << '\n' << "array[" << i << "]: " << arra[i];
  82.         i++;
  83.     }
  84.     getchar();
  85.     return arra;
  86. }
  87.  
  88. int FindMediana(int tempArray[], int arrayLength){
  89.     int mediana = 0, leftSide, rightSide;
  90.     int dif, min = INT_MAX;
  91.  
  92.     for (int i = 1; i < arrayLength - 1; i++) {
  93.        
  94.         leftSide = CalculateLeftSide(tempArray, i, arrayLength);
  95.         rightSide = CalculateRightSide(tempArray, i, arrayLength);
  96.         dif = leftSide - rightSide;
  97.         if (dif < 0) // чтобы разница была всегда положительной
  98.             dif *= -1;
  99.         cout << "Медиана " << i << " :" << dif << endl;
  100.         if (dif < min) {
  101.             min = dif;
  102.             mediana = i;
  103.         }
  104.    
  105.  
  106.     }
  107.    
  108.     return mediana;
  109. }
  110.  
  111. int CalculateLeftSide(int tempArray[], int index, int arrayLength) {
  112.     int sum = 0;
  113.     for (int i = 0; i < index; i++) {//подсчет идет до ячейки, что слева от индекса
  114.         sum += tempArray[i];
  115.     }
  116.     cout << "Слева от индекса: " << sum << endl;
  117.     return sum;
  118. }
  119.  
  120. int CalculateRightSide(int tempArray[], int index, int arrayLength) {
  121.     int sum = 0;
  122.     for (int i = index + 1; i < arrayLength; i++) { //подсчет идет с ячейки, что справа от индекса
  123.         sum += tempArray[i];
  124.     }
  125.     cout << "Справа от индекса: " << sum << endl;
  126.     return sum;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement