Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <fstream>
- #include <iostream>
- #include <string>
- using namespace std;
- int CalculateLeftSide(int tempArray[], int index, int arrayLength); // счет суммы ячеек слева от индекса
- int CalculateRightSide(int tempArray[], int index, int arrayLength); // счет суммы ячеек справа от индекса
- int FindMediana(int tempArray[], int arrayLength); // поиск медианы
- int* input(string fname, int length); //функция для заполнения массива
- int arrayLength(string fname); //функция для подсчета количества чисел в файле
- bool testFile(string fname); // проверка на наличие файла. если файла нет, возвращает false
- int main() {
- setlocale(LC_ALL, "Russian");
- int* myArray; // указатель для массива
- int length; // длинна массива
- string filename = "Input.txt"; // имя файла
- if (!testFile(filename)) { // если функция вернет false, то файла нет
- getchar();
- return 0; // программа завершается, если файла нет
- }
- length = arrayLength(filename); // вызов функции, которая просчитает файл и вернет значение длины массива
- getchar(); // ожидание ввода
- myArray = input(filename, length); //присвоение указателю значение массива
- int mediana = FindMediana(myArray, length); //поиск медианы
- cout << "Медиана под индексом: " << mediana;
- getchar();
- return 0;
- }
- bool testFile(string fname) {
- ifstream test(fname);
- string temp;
- if (!test.is_open()) {
- cout << "Файл не может быть открыт" << endl;
- return false; //возврат false при отсутствии файла
- }
- while (!test.eof()) { //начало проверки ввода в файл
- test >> temp;
- for (int i = 0; i < temp.length(); i++) {
- if (!(temp[i] >= '0' && temp[i] <= '9')) { //если символ не является цифрой
- if (!(i == 0 && temp[i] == '-')) { //если не является минусом в начале числа
- cout << "В файле недопустимые символы: " << temp[i] << endl;
- return false;
- }
- }
- }
- }
- test.close(); // закрытие файла
- cout << "Файл в норме" << endl;
- return true;
- }
- int arrayLength(string fname) {
- ifstream fileInt(fname); //переменная для получения потока из файла
- int length = 0; //здесь хранится количество слов в файле
- int temp; // переменная для работы с потоком
- while (!fileInt.eof()) { // цикл до тех пор, пока поток не дойдет до конца файла
- fileInt >> temp; //занесение значение, продвижение в файле
- length++; // счетчиков слов
- }
- fileInt.close(); // закрытие файла
- cout << "Длинна массива в файле: " << length << endl;
- return length;
- }
- int* input(string fname, int length) { //функция для заполнения массива
- ifstream fileInput(fname); //переменная для ввода из яайла
- int* arra; // указатель int
- arra = new int[length]; // создание массива
- int i = 0; //счетчик для работы с массивом
- while (!fileInput.eof()) { // цикл до тех пор, пока поток не дойдет до конца файла
- fileInput >> arra[i]; //ввод потока в массив
- cout << '\n' << "array[" << i << "]: " << arra[i];
- i++;
- }
- getchar();
- return arra;
- }
- int FindMediana(int tempArray[], int arrayLength){
- int mediana = 0, leftSide, rightSide;
- int dif, min = INT_MAX;
- for (int i = 1; i < arrayLength - 1; i++) {
- leftSide = CalculateLeftSide(tempArray, i, arrayLength);
- rightSide = CalculateRightSide(tempArray, i, arrayLength);
- dif = leftSide - rightSide;
- if (dif < 0) // чтобы разница была всегда положительной
- dif *= -1;
- cout << "Медиана " << i << " :" << dif << endl;
- if (dif < min) {
- min = dif;
- mediana = i;
- }
- }
- return mediana;
- }
- int CalculateLeftSide(int tempArray[], int index, int arrayLength) {
- int sum = 0;
- for (int i = 0; i < index; i++) {//подсчет идет до ячейки, что слева от индекса
- sum += tempArray[i];
- }
- cout << "Слева от индекса: " << sum << endl;
- return sum;
- }
- int CalculateRightSide(int tempArray[], int index, int arrayLength) {
- int sum = 0;
- for (int i = index + 1; i < arrayLength; i++) { //подсчет идет с ячейки, что справа от индекса
- sum += tempArray[i];
- }
- cout << "Справа от индекса: " << sum << endl;
- return sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement