Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <math.h>
- #include <string>
- using namespace std;
- int main()
- {
- setlocale(LC_ALL, "RUSSIAN");
- string key, key1, N1, x;
- double const pi = 3.141592653589793238463;
- int N, k, u, flag;
- std::string::size_type sz;
- cout << "Программа для преобразования массива X[k] в массив H[u] по формуле дискретного преобразования Хартли и массива H[u] Xобр[k] по формуле обратного преобразования Хартли" << endl;
- while (1)
- {
- cout << "Выберите режим работы программы:\n1 - ввод элементов массива с клавиатуры.\n2 - создание массива на основе файла.\n0 - выход из программы." << endl << "Выбрано ";
- getline(cin, key);
- cout << endl;
- if (key == "1")
- while (1)
- {
- {
- cout << "Выберите режим заполнения массива X[k]:\n1 - заранее заполненный в программе массив (контрольное значение)\n2 - заполнение массива с клавиатуры\n0 - возврат в меню." << endl << "Выбран режим ";
- cin >> key1;// Ключ - выбор типа работы
- cout << endl;
- if (key1 == "1")// Массив создаётся из данных в самой программе
- {
- N = 10;
- double *X = new double[N];// Создание динамических массивов (эта и две след. строки)
- double *Xobr = new double[N];
- double *H = new double[N];
- for (k = 0; k < N; k++) // Заполнение массива X[k]
- {
- X[k] = k + 1;
- }
- for (k = 0; k < N; k++)
- cout << "X[" << k << "] = " << X[k] << "\n";
- for (u = 0; u < N; u++) // Заполнение массива H[u] по формуле дискретного преобразования Хартли
- {
- for (k = 0; k < N; k++)
- {
- H[u] = X[k] * (sin(2 * pi*k*u / N) + cos(2 * pi*k*u / N));
- }
- H[u] = H[u] / sqrt(N);
- cout << "H[" << u << "] = " << H[u] << "\n";
- }
- for (k = 0; k < N; k++) // Заполнение массива X обратный [k]
- {
- for (u = 0; u < N; u++)
- {
- Xobr[k] = H[u] * (sin(2 * pi*k*u / N) + cos(2 * pi*k*u / N));
- }
- Xobr[k] = Xobr[k] / sqrt(N);
- cout << "Xobr[" << k << "] = " << Xobr[k] << "\n";
- }
- delete[] X;//Очистка памяти от динамических массивов (эта и дву след. строки)
- delete[] H;
- delete[] Xobr;
- }
- else if (key1 == "2")
- {
- flag = 0;
- cout << "Введите размерность массива, который хотите заполнить" << endl << "N = ";
- cin >> N1;// Ввод размера массива
- size_t number1 = N1.find_first_not_of("0123456789");
- if (number1 != std::string::npos)// Если найдено что-то помимо цифр
- {
- cout << "Введённое значение не является числом целого типа. Возврат в последнее меню." << endl;
- N1 = "0";
- }
- N = stoi(N1.c_str());
- double *X = new double[N];//Создание динамических массивов (эта и две след. строки)
- double *Xobr = new double[N];
- double *H = new double[N];
- if (N!=0)
- cout << "Введите с клавиатуры значения элементов массива X[k]. После введения числа нажмите Enter.\n";
- for (k = 0; k < N; k++) // Заполнение массива X[k]
- {
- cin >> x;
- size_t number2 = x.find_first_not_of("-,.0123456789");
- size_t symbols = x.find_first_not_of("-,.");
- size_t point = x.find_first_not_of(".");
- size_t comma = x.find_first_not_of(",");
- if ((number2 != std::string::npos)||(symbols == std::string::npos)||((point == std::string::npos)&&(comma == std::string::npos)))
- {
- cout << "Ошибка. Наличие постороннего символа (написано не число). Возврат в меню." << endl;
- flag = 1;
- break;
- }
- while (x.find(".") != -1)
- {
- x.replace(x.find("."), 1, ",");
- }
- X[k] = stod(x.c_str());
- }
- if (flag == 0)
- {
- for (k = 0; k < N; k++)
- cout << "X[" << k << "] = " << X[k] << "\n";
- for (u = 0; u < N; u++) // Заполнение массива H[u] по формуле дискретного преобразования Хартли
- {
- for (k = 0; k < N; k++)
- {
- H[u] = X[k] * (sin(2 * pi*k*u / N) + cos(2 * pi*k*u / N));
- }
- H[u] = H[u] / sqrt(N);
- cout << "H[" << u << "] = " << H[u] << "\n";
- }
- for (k = 0; k < N; k++) // Заполнение массива X обратный [k]
- {
- for (u = 0; u < N; u++)
- {
- Xobr[k] = H[u] * (sin(2 * pi*k*u / N) + cos(2 * pi*k*u / N));
- }
- Xobr[k] = Xobr[k] / sqrt(N);
- cout << "Xobr[" << k << "] = " << Xobr[k] << "\n";
- }
- }
- delete[] X;//Очистка памяти от динамических массивов (эта и дву след. строки)
- delete[] H;
- delete[] Xobr;
- }
- else if (key1 == "0")// Выход в меню
- {
- cout << "Выход из данного режима работы программы." << endl;
- cin.ignore();
- break;
- }
- else// Введение любого другого числа
- {
- cout << "Данного типа заполнения массива не существует." << endl;
- continue;
- }
- }
- }
- else if (key == "2")
- {
- cout << "Такая функция пока недоступна" << endl;
- }
- else if (key == "0")
- {
- cout << "Завершение работы программы." << endl;
- return 0;
- }
- else
- {
- cout << "Такой команды не существует в данной программе. Возврат в меню." << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement