Файл: Контрольная работа по дисциплине Программирование и алгоритмизация.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.10.2024
Просмотров: 26
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Таблица 1 – Спецификация структур и переменных
Иденти-фикатор | Тип | Описание |
1 | 2 | 3 |
Главный файл | ||
Tab | double X,Y | Структура для элемента таблицы значений функции |
F | vector | Таблица значений функции |
M | vector | Массив состоящий из квадратов ненулевых элементов таблицы значений функции |
N | vector | Массив состоящий из элементов массива M стоящих до максимального элемента |
С | vector | Массив состоящий из элементов массива M стоящих после максимального элемента |
K | vector | Двумерный массив получаемый из массивов M, N и C |
K1 | vector | Двумерный массив получаемый из массива K путем перестановки строк |
5 Спецификация функций
Таблица 2 – Спецификация функций
Название | Описание |
1 | 2 |
Главный файл | |
main | главная функция программы |
func_y | заданная математическая функция |
tabulation | функция табулирования |
select | функция возвращает массив из квадратов всех положительных значений функции |
find_max | функция ищет максимальный элемент в массиве и возвращает его индекс |
before_max | функция возвращает массив из элементов, стоящих до максимального в исходном массиве |
after_max | функция возвращает массив из элементов, стоящих после максимального в исходном массиве |
makek | функция возвращает двумерный массив, созданный из трех исходных по заданному правилу |
print_mass | функция выводит в консоль заголовок и одномерный массив |
print_mass2 | функция выводит в консоль заголовок и двумерный массив |
print_table | функция выводит в консоль таблицу значений функции |
swap | функция возвращает двумерный массив с переставленными по заданному правилу строками: последняя строка со строкой в которой меньше всего положительных элементов |
menu | консольное меню для реализации интерфейса между программой и пользователем |
|
6 Руководство оператора
6.1 Назначение и условия применения программы
Программа предназначена для решения математических операций связанных с построением матриц и взаимодействий с ними.
Для нормального функционирования прототипа необходимо следующее минимальное аппаратное обеспечение:
-
микропроцессор – 3 ГГц; -
оперативная память – 2 Гб; -
свободное место на диске для программы 5 Мб и около 30 Мб свободного места для возможности наполнения базы данными; -
тип монитора не ниже VGA; -
клавиатура; -
мышь; -
принтер.
Минимальные требования к программному обеспечению:
-
операционная система – не ниже Windows XP; -
среда программирования Microsoft Visual Studio, язык C++.
6.2 Характеристика программы
Программа работает в консольном режиме. Для эксплуатации необходимо не менее 2 Гб оперативной памяти. Для проверки работоспособности программы необходимо провести ее запуск, после чего провести проверку работы функций. Если программа выдает конечный результат, который не противоречит области определения заданной функции, то все работает корректно.
6.3 Выполнение программы
10
Программа использует для хранения информации динамическую память компьютера. При запуске программа производит необходимые расчеты, после чего на экране появляется меню.
Рисунок 1 – Пользовательское меню программы
Таблицу значений функции в программе можно вывести в консоль выбрав 1 в меню пользователя. После просмотра результата для продолжения работы необходимо нажать любую клавишу.
Рисунок 2 – Таблица значений функции
Изменить функцию можно отредактировав функцию func_y в исходном коде программы.
Рисунок 3 – Математическая функция в программе
Для просмотра содержимого массивов M, N и C необходимо выбрать пункт 2 в меню.
Рисунок 4 – Содержимое массивов M, N и C
В программе сохраняется исходный массив K и его преобразованная путем перестановки строк копия. Посмотреть содержимое этих массивов можно выбрав пункт 3 меню пользователя.
Рисунок 5 – Содержимое массива K и его преобразованной копии
Для того чтобы завершить работу с программой, необходимо при выборе меню ввести 0, после чего программа завершит свою работу.
Список использованных источников
1 Павловская, Т.А. С/С++. Программирование на языке высокого уровня / Т. А. Павловская. - СПб.: Питер, 2004. - 461 с.: ил. [1]
2 Павловская, Т.А. С/С ++. Структурное программирование: Прак-тикум / Т.А. Павловская, Ю.А. Щупак. СПб.: Питер, 2007. - 239 с.: ил. [2]
3 Кольцов, Д.М. 100 примеров на Си / Д.М. Кольцов. - СПб.: “Наука и техника”, 2017 - 256 с.
4 Доусон, М. Изучаем С++ через программирование игр /М. Доун-сон. - СПб.: “Питер”, 2016. - 352.
5 Седжвик, Р. Фундаментальные алгоритмы на С++. Ана-лиз/Структуры данных/Сортировка/Поиск / Роберт Седжвик.: Пер. с англ. - К.: Издательство “Диасофт”, 2001. - 688с.
6 Сиддкхартха, Р. Освой самостоятельно С++ за 21 день /Р. Сиддк-харта. - М.: SAMS, 2013. - 651 с.
7 Стивен, П. Язык программирования С++. Лекции и упражнения /П. Стивен, 6-е изд. Пер. с англ. - М.: ООО «И.Д. Вильямс», 2012. - 1248 с.
8 Черносвитов, А. Visual C++: руководство по практическому изуче-нию / А. Черносвитов . - CПб. : Питер, 2002. - 528 с. : ил.
9 Страуструп Б. Дизайн и эволюция языка С++ /Б. Страуструп. - М.: ДМК, 2000. - 448 с.
10 Мейерс, С. Эффективное использование С++ /С. Мейерс. - М.: ДМК, 2000. - 240 с.
11 Страуструп, Б. Язык программирования С++ /Б. Страуструп. Ре-жим доступа: http://8361.ru/6sem/books/Straustrup-Yazyk_programmirovaniya_c.pdf.
12 Богуславский, А.А. Основы программирования на языке Си++. / А.А. Богуславский, С.М. Соколов Режим доступа: http://www.ict.edu.ru/ft/004246/cpp_p1.pdf.
Приложение А
Схемы алгоритмов
Рисунок A.1 – Функция main
Рисунок A.2 – Функция func_y Рисунок A.3 – Функция tabulation | Рисунок A.4 – Функция select |
Рисунок A.5 – Функция before_max | Рисунок A.6 – Функция after_max |
Рисунок A.7 – Функция makek | Рисунок A.8 – Функция print_mass |
Рисунок A.9 – Функция print_mass2 | Рисунок A.10 – Функция print_table |
| |
Рисунок A.10 – Функция swap
Рисунок A.11 – Функция menu
Приложение Б
Текст программы
#include
#include
#include
#include
#include
using namespace std;
// элемент таблицы значений функции
struct Tab {
double X, Y;
};
// описание массивов
vector
vector
vector
// заданная функция y
double func_y(double x) {
return 3 * cos(5 * x) + 2 * sin(x);
}
// вывод массива с заголовком
void print_mass(string title, vector
cout << endl << title << endl;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
unsigned int i = 0;
while (i < v.size()) {
cout << setw(6) << v[i];
i++;
}
cout << endl;
}
// вывод двумерного массива с заголовком
void print_mass2(string title, vector
cout << endl << title << endl;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
int i = 0;
while (i < 4) {
unsigned int j = 0;
while (j < m[i].size()) {
cout << setw(6) << m[i][j];
j++;
}
cout << endl;
i++;
}
cout << endl;
}
// вывод таблицы значений функции
void print_table(vector
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout << setw(6) << "X" << setw(6) << "Y" << endl;
unsigned int i = 0;
while (i < t.size()){
cout << setw(6) << t[i].X << setw(6) << t[i].Y << endl;
i++;
}
}
vector
{
// среди строк кроме последней находим строку
// с минимальным количеством положительных элементов
int n = 0; // пусть пока будет нулевая
int min = m[0].size(); // и такой минимум
int i = 0;
while (i < 3) {
int cnt = 0; // количество положительных в текущей строке
unsigned int j = 0;
while (j < m[i].size()) {
if (m[i][j] > 0) cnt++;
j++;
}
if (cnt < min) {
n = i;
min = cnt;
}
i++;
}
// меняем строки местами
double val;
unsigned int j = 0;
while (j < m[0].size()) {
val = m[3][j];
m[3][j] = m[n][j];
m[n][j] = val;
j++;
}
return m;
}
// табуляция функции
vector
{
vector
Tab f; // элемент таблицы значений функции
// табулируем функцию func_y() на отрезке [-pi, pi]
// и выбираем ненулевые значения
f.X = -M_PI;
while(f.X <= M_PI) {
f.Y = func_y(f.X); // находим значение функции
result.push_back(f); // записываем значение в таблицу
f.X += M_PI / 10;
}
return result;
}
// создание массива M из ненулевых в квадрате
vector
{
vector
unsigned int i = 0;
while (i < t.size()){
if (t[i].Y)
result.push_back(t[i].Y * t[i].Y);
i++;
}
return result;
}
// возвращает индекс максимального элемента в массиве
int find_max(vector
auto it = max_element(v.begin(), v.end());
return it - v.begin(); // индекс максимального элемента
}
// создание массива из элементов стоящих до максимального
vector
{
vector
unsigned int maxi = find_max(v);
unsigned int i = 0;
while (i < v.size()) {
if (i < maxi) // если стоит до максимального
result.push_back(v[i]);
i++;
}
return result;
}
// создание массива из элементов стоящих после максимального
vector
{
vector
unsigned int maxi = find_max(v);
unsigned int i = 0;
while (i < v.size()) {
if (i > maxi) // если стоит после максимального
result.push_back(v[i]);
i++;
}
return result;
}
// создание двумерного массива
vector
vector
{
// находим минимальный размер из размеров массивов N и C
int min_size = min(N.size(), C.size());
// объявление вектора K на 4 строки по min_size элементов
vector
// заполняем K значениями
int j = 0;
while (j < min_size) {
result[0][j] = M[j];
result[1][j] = N[j];
result[2][j] = C[j];
result[3][j] = M[j] + N[j] + C[j];
j++;
}
return result;
}
// меню
void Menu()
{
int sel = 0;
while (sel != 4) {
while (true) {
system("cls");
cout << "Выберите действие:" << endl;
cout << "1. вывести таблицу значений функции" << endl;
cout << "2. вывести массивы N, M и C" << endl;
cout << "3. вывести двумерный массив K" << endl;
cout << "4. выйти из программы" << endl;
cout << "> ";
cin >> sel;
if (sel >= 1 && sel <= 4) break;
cout << endl << "Вы выбрали неверный вариант!" << endl;
system("pause");
}
switch (sel) {
case 1:
print_table(F);
break;
case 2:
print_mass("Массив M:", M);
print_mass("Массив N:", N);
print_mass("Массив C:", C);
break;
case 3:
print_mass2("Двумерный массив K:", K);
print_mass2("Двумерный массив K\nпосле перестановки строк:", K1);
break;
}
system("pause");
}
}
int main()
{
setlocale(LC_ALL, "ru");
F = tabulation(); // табулирование функции
M = select(F); // создание массива M
N = before_max(M); // создание массива N
C = after_max(M); // создание массива С
K = makek(M,N,C); // создание двумерного массива K
K1 = swap(K); // создание массива с переставленными строками
Menu();
}