Файл: Контрольная работа по дисциплине Программирование и алгоритмизация.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.10.2024

Просмотров: 21

Скачиваний: 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 F;

vector M, N, C;

vector> K, K1;
// заданная функция y

double func_y(double x) {

return 3 * cos(5 * x) + 2 * sin(x);

}
// вывод массива с заголовком

void print_mass(string title, vector v) {

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> m) {

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 t) {

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> swap(vector> m)

{

// среди строк кроме последней находим строку

// с минимальным количеством положительных элементов

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 tabulation()

{

vector result;

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 select(vector t)

{

vector result;

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 v) {

auto it = max_element(v.begin(), v.end());

return it - v.begin(); // индекс максимального элемента

}
// создание массива из элементов стоящих до максимального

vector before_max(vector v)

{

vector result;

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 after_max(vector v)

{

vector result;

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> makek(vector M,

vector N, vector C)

{

// находим минимальный размер из размеров массивов N и C

int min_size = min(N.size(), C.size());

// объявление вектора K на 4 строки по min_size элементов

vector> result(4, vector (min_size));

// заполняем 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();

}