Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <iomanip>
- #include <sstream>
- #include <Windows.h>
- #define outputWidth 8
- using namespace std;
- void menuOutput() {
- cout << "1. Создать файл с исходными данными" << endl
- << "2. Загрузить исходные данные" << endl
- << "3. Вывести исходные данные" << endl
- << "4. Обработать данные" << endl
- << "5. Завершить работу с программой" << endl;
- }
- double* createArray(unsigned int size) {
- double* newArray = new(std::nothrow) double[size];
- if (newArray == nullptr)
- return nullptr;
- return newArray;
- }
- double* createFile(unsigned int &n) {
- system("cls");
- string s;
- int q;
- bool failed = false;
- while (true) {
- cin.clear();
- cin.ignore(255, '\n');
- cout << "Введите количество элементов массива" << endl;
- cin >> s;
- try {
- n = stoi(s);
- if (to_string(n).length() == s.length())
- break;
- cout << "Неверное значение" << endl << endl;
- }
- catch (exception e) {
- cout << "Неверное значение" << endl << endl;
- }
- }
- double* arr = new(std::nothrow) double[n];
- if (arr == nullptr)
- return nullptr;
- cout << endl;
- int i = 0;
- while (i < n) {
- cin.clear();
- cin.ignore(255, '\n');
- cout << "Введите значение " << i + 1 << " элемента массива: ";
- while (true) {
- try {
- cin >> s;
- q = stoi(s);
- if (to_string(q).length() == s.length()) {
- arr[i] = q;
- break;
- }
- cout << "Введите правильное значение " << i + 1 << " элемента массива: ";
- }
- catch (exception e) {
- cout << "Введите правильное значение " << i + 1 << " элемента массива: ";
- }
- }
- i++;
- }
- char c;
- string FNAME;
- ofstream fout;
- while (!fout.is_open()) {
- cout << endl << "Введите имя файла : ";
- cin >> FNAME;
- fout.open(FNAME, ios::_Nocreate | ios::binary);
- if (fout.is_open()) {
- cout << "Обнаружен файл с таким именем, разрешить перезаписать? (y - да, n - нет)" << endl;
- cin >> c;
- while (c != 'y' && c != 'Y' && c != 'у' && c != 'У' && c != 'n' && c != 'N') {
- cout << "Введен неправильный ответ, попробуйте еще раз" << endl;
- cin >> c;
- }
- switch (c) {
- case 'y':
- case 'Y':
- case 'у':
- case 'У':
- fout.close();
- fout.open(FNAME, ios::trunc | ios::binary);
- break;
- case 'n':
- case 'N':
- fout.close();
- break;
- default:
- break;
- }
- }
- else {
- fout.close();
- fout.open(FNAME, ios::binary);
- }
- }
- fout.write((char*)arr, n * sizeof(double));
- fout.close();
- return arr;
- }
- double* loadFile(unsigned int &n) {
- system("cls");
- cout.clear();
- cin.ignore(255, '\n');
- n = 0;
- string FNAME;
- ifstream fin;
- int t;
- double a;
- bool failed = false;
- while (!fin.is_open()) {
- if (failed)
- cout << "Неудачная попытка открытия" << endl;
- cout << "Введите имя файла: ";
- getline(cin, FNAME);
- fin.open(FNAME, ios::binary);
- failed = true;
- }
- fin.seekg(0, ios::end);
- t = fin.tellg();
- n = t / sizeof(double);
- fin.seekg(0, ios::beg);
- double* arr = createArray(n);
- if (arr == nullptr) {
- fin.close();
- return nullptr;
- }
- fin.clear();
- fin.read((char*)arr, n * sizeof(arr[0]));
- fin.close();
- return arr;
- }
- void printArray(double* arr, unsigned int size) {
- cout << setw(10) << "Номера: ";
- for (unsigned int i = 0; i < size; i++) {
- cout << setw(outputWidth) << i << " ";
- }
- cout << endl;
- cout << setw(10) << "Элементы: ";
- for (unsigned int i = 0; i < size; i++) {
- cout << setw(outputWidth) << arr[i] << " ";
- }
- cout << endl;
- }
- double* createArray(double* y, unsigned int sizearr, unsigned int &sizealpha) {
- for (unsigned int i = 0; i < sizearr; i++)
- if (y[i] < 3)
- sizealpha++;
- double* alpha = new(std::nothrow) double[sizealpha];
- if (alpha == nullptr)
- cout << "Ошибка выделения памяти" << endl;
- else {
- int t = 0;
- if (sizealpha > 0) {
- for (unsigned int i = 0; i < sizearr; i++)
- if (y[i] < 3) {
- alpha[t] = y[i];
- t++;
- }
- }
- else {
- cout << "Не найдено элементов, удовлетворяющих условию" << endl;
- }
- }
- return alpha;
- }
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- double *arr, *alpha;
- unsigned int n = 0, n1 = 0;
- char c;
- while (true) {
- system("cls");
- menuOutput();
- cin >> c;
- switch (c) {
- case '1':
- arr = createFile(n);
- break;
- case '2':
- arr = loadFile(n);
- break;
- case '3':
- if (n > 0) {
- system("cls");
- cout << "Исходный массив" << endl;
- printArray(arr, n);
- }
- else {
- system("cls");
- cout << "Не введены данные" << endl;
- }
- break;
- case '4':
- system("cls");
- if (n > 0) {
- alpha = createArray(arr, n, n1);
- cout << endl << "Массив y" << endl;
- printArray(arr, n);
- cout << endl << "Массив alpha" << endl;
- printArray(alpha, n1);
- }
- else
- cout << "Не введены данные" << endl;
- break;
- case '5':
- return 0;
- break;
- default:
- system("cls");
- cout << "Неверный ввод" << endl;
- break;
- }
- if ((arr == nullptr && n > 0) || (alpha == nullptr && n1 > 0)) {
- cout << "Повреждены значения в файле или проблемы с памятью" << endl;
- n = 0;
- }
- if (c == '2') {
- cout << "Загруженный массив" << endl;
- printArray(arr, n);
- cout << endl;
- }
- system("pause");
- }
- delete[] arr;
- delete[] alpha;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement