Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
eto_gotovyy_otschet_33.doc
Скачиваний:
2
Добавлен:
14.04.2019
Размер:
1.79 Mб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Вятский государственный университет»

Факультет прикладной математики и телекоммуникаций

Кафедра РЭС

Отчет по практической работе

«Двумерные массивы»

Дисциплина «Информатика»

Вариант 57

Выполнил:

студент группы ИНБ-11

Лобастов Е.В.

Проверил:

старший преподаватель

Кононова В.Ю.

кафедры РЭС

Работа защищена с оценкой «_____________» «__»_______ 2011 г.

Киров 2011

1 Текст задания

1) Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями.

2) Найти номер первой из строк, содержащих положительный элемент.

Входные данные:

Выходные данные:

1) Преобразованная матрица

2) Первый положительный элемент находится в 1 строке.

2 Спецификация программы

При запуске программы в консольном окне отображается интерактивное меню (рисунок 24). Меню состоит из четырёх пунктов: 1) ввод данных в программу; 2) решение; 3) о программе; 4) выход из программы. Для продолжения работы пользователю необходимо выбрать один из четырёх пунктов. В ответ на запрос: «Введите номер пункта меню:» - пользователь вводит номер выбранного пункта с клавиатуры (рисунки 24,25 ) и нажимает клавишу Enter.

При выборе первого пункта меню пользователь переходит в подпрограмму ввода данных. Входными данными является целочисленная матрица размером MN. В ответ на запрос «Введите количество M:» - пользователь вводит количество строк матрицы с клавиатуры (рисунок 26) и нажимает клавишу Enter. Затем аналогичным образом в программу вводится количество строк матрицы - N. После ввода размера матрицы необходимо заполнить её элементами. В программе предусмотрено два режима заполнения матрицы элементами: 1) пользователь последовательно вводит все элементы матрицы с клавиатуры (рисунок 26); 2) матрица заполняется автоматически случайными числами Для продолжения работы пользователю необходимо выбирать один из двух режимов. В ответ на запрос: «Ваш выбор:» - пользователь вводит номер выбранного режима с клавиатуры (рисунок 26) и нажимает клавишу Enter. При выборе первого режима пользователь последовательно вводит с клавиатуры элементы первой строки матрицы, затем второй, третьей и т.д. (рисунок 26). В случае выбора второго режима пользователю не нужно ничего вводить: программа заполнит двумерный массив автоматически. По завершению заполнения матрица выводится на экран (рисунок 26). Работа текущей подпрограммы окончена, для возврата в главное меню пользователю необходимо нажать клавишу Enter.

При выборе второго пункта меню пользователь переходит в подпрограмму решения задачи. Работа текущей подпрограммы возможна только в том случае, если имеются входные данные, иначе в консольное окно выводится предупреждающее сообщение «Введите исходные данные в пункте 1» (рисунок 25). Если пользователь получил такое предупреждение, то он должен перейти в главное меню и выбрать первый пункт. В случае наличия входных данных программа выводит на экран исходную матрицу, над которой будут произведены операции. Далее программа в соответствии с текстом задания уплотняет исходную матрицу, удаляя из нее строки и столбцы, заполненные нулями, затем находит номер первой из строк, содержащих положительный элемент. По завершении решения программа выдает ответ: 1) преобразованную (уплотнённую матрицу) и 2) номер первой из строк, содержащих положительный элемент (рисунок 27). Работа текущей подпрограммы окончена, для возврата в меню пользователю необходимо нажать клавишу Enter.

При выборе третьего пункта меню в консольное окно выводится информация о программе: 1) имя и фамилия автора программы; 2) номер варианта задания и 3) текст задания (рисунок 28). Работа текущей подпрограммы окончена, для возврата в меню пользователю необходимо нажать клавишу Enter.

При выборе четвёртого пункта консольное окно закрывается. Работа с программой «Двумерный массив» завершена.

В случае, если пользователь осуществил некорректный ввод, программа выдаёт предупреждающее сообщение «Такого пункта в меню нет» (рисунок 25). Для продолжения работы и возврата в меню пользователю необходимо нажать клавишу Enter.

Программа позволяет осуществить решения для любого количества матриц без перезапуска путём последовательного выполнения пунктов 1 и 2.

Конструктивно программа выполнена в виде основной функции _tmain(), которая осуществляет управление вызываемыми функциями и поддерживает диалог с пользователем. Вызываемые пользовательские функции и их назначение приведены в таблице 1.

Таблица 1 - Вызываемые пользовательские функции и их назначение

Тип_функции Имя_функции (список_параметров)

Назначение

void text(void)

функция вывода текста (ФИО автора, условия задачи)

int input(char c, int *a)

функция ввода количества строк (столбцов)

int **memory(int M, int N)

функция выделения памяти для матрицы

int rnd( int range_min, int range_max )

функция для генерации случайных элементов

void input_elements(int **A, int M, int N)

функция ввода элементов матрицы

void output(int **A, int M, int N)

функция вывода элементов матрицы

void task_1(int **A, int M, int N)

функция преобразования матрицы

void task_2(int **A, int M, int N)

функция поиска строки с положительным элементом

Схема алгоритма функции _tmain() представлена на рисунках 1-7. Входные данные для основной функции _tmain() приведены в таблице 2. Выходных данных для основной функции _tmain() нет. Вспомогательные переменные для основной функции _tmain() приведены в таблице 3.

Таблица 2 – Входные данные для основной функции _tmain()

Тип

Идентификатор

Диапазон

Назначение

int

N

–2 147 483 638 до 2 147 483 647

Количество строк матрицы

int

M

–2 147 483 638 до 2 147 483 647

Количество столбцов матрицы

int

**A

–2 147 483 638 до 2 147 483 647

Указатель на область памяти, в которой хранятся элементы двумерного массива

Таблица 3 – Вспомогательные переменные для основной функции _tmain()

Тип

Идентификатор

Диапазон

Назначение

int

m

–2 147 483 638

до 2 147 483 647

Переменная для управления меню

bool

flag

true

false

Сигнал наличия входных данных в программе для последующего решения задачи

Схема алгоритма функции void text(void) представлена на рисунке 8. У функции void text(void) нет входных/выходных данных и вспомогательных переменных.

Схема алгоритма функции int input(char c, int *a) представлена на рисунке 9. Входные данные для функции int input(char c, int *a) приведены в таблице 4. Выходные данные для функции int input(char c, int *a) приведены в таблице 5. Вспомогательных переменных для функции int input(char c, int *a) нет.

Таблица 4 – Входные данные для функции int input(char c, int *a)

Тип

Идентификатор

Диапазон

Назначение

int

*a

–2 147 483 638 до 2 147 483 647

Указатель на количество строк (столбцов)

char

c

0 до 255

Символ

Таблица 5 – Выходные данные для функции int input(char c, int *a)

Тип

Идентификатор

Диапазон

Назначение

int

*a

–2 147 483 638 до 2 147 483 647

Количество строк/столбцов в матрице

Схема алгоритма функции int **memory(int N, int M) представлена на рисунке 10. Входные данные для функции int **memory(int N, int M) приведены в таблице 6. Выходные данные для функции int **memory(int N, int M) приведены в таблице 7. Вспомогательные переменные для функции int **memory(int N, int M) приведены в таблице 8.

Таблица 6 – Входные данные для функции int **memory(int N, int M)

Тип

Идентификатор

Диапазон

Назначение

int

N

–2 147 483 638 до 2 147 483 647

Количество строк матрицы

int

M

–2 147 483 638 до 2 147 483 647

Количество столбцов матрицы

Таблица 7 – Выходные данные для функции int **memory(int N, int M)

Тип

Идентификатор

Диапазон

Назначение

int

**A

–2 147 483 638 до 2 147 483 647

Указатель на область памяти, в которой хранятся элементы двумерного массива

Таблица 8 – Вспомогательные переменные для функции int **memory(int N, int M)

Тип

Идентификатор

Диапазон

Назначение

int

i

–2 147 483 638 до 2 147 483 647

Счётчик цикла по строкам

Схема алгоритма int rnd( int range_min, int range_max )представлена на рисунке 16. Входные данные для функции int rnd( int range_min, int range_max ) приведены в таблице 9. Выходные данные для int rnd( int range_min, int range_max ) приведены в таблице 10. Вспомогательных переменных для функции int rnd( int range_min, int range_max ) нет.

Таблица 9 – Входные данные для функции int rnd( int range_min, int range_max )

Тип

Идентификатор

Диапазон

Назначение

int

range_min

–2 147 483 638 до 2 147 483 647

Нижняя граница диапазона значений

int

range_max

–2 147 483 638 до 2 147 483 647

Верхняя граница диапазона значений

Таблица 10 – Выходные данные для функции int rnd( int range_min, int range_max )

Тип

Идентификатор

Диапазон

Назначение

int

–2 147 483 638 до 2 147 483 647

Случайное число (RAND_MAX + 1) * (range_max - range_min) + range_min

Схема алгоритма функции void input_elements(int **A, int N, int M) представлена на рисунке 11-15. Входные данные для функции void input_elements(int **A, int N, int M) приведены в таблице 11. Выходных данных для функции void input_elements(int **A, int N, int M) нет. Вспомогательные переменные для функции void input_elements(int **A, int N, int M) приведены в таблице 12.

Таблица 11 – Входные данные для функции void input_elements(int **A, int N, int M)

Тип

Идентификатор

Диапазон

Назначение

int

N

–2 147 483 638 до 2 147 483 647

Количество строк матрицы

int

M

–2 147 483 638 до 2 147 483 647

Количество столбцов матрицы

int

**A

–2 147 483 638 до 2 147 483 647

Указатель на область памяти, в которой хранятся элементы двумерного массива

Таблица 12 – Вспомогательные переменные для функции void input_elements (int **A, int N, int M)

Тип

Идентификатор

Диапазон

Назначение

int

i

–2 147 483 638 до 2 147 483 647

Переменная цикла

int

j

–2 147 483 638 до 2 147 483 647

Переменная цикла

int

v

–2 147 483 638 до 2 147 483 647

Переменная выбора ручного или автоматического ввода матрицы

int

t

–2 147 483 638 до 2 147 483 647

Переменная для ввода совпадающих строки и столбца в случайно-заданной матрице

Схема алгоритма функции void output(int **A, int N, int M) представлена на рисунке 17. Входные данные для функции void output(int **A, int N, int M) приведены в таблице 13. Выходные данные для функции void output(int **A, int N, int M) приведены в таблице 14. Вспомогательные переменные для функции void output(int **A, int N, int M) приведены в таблице 15.

Таблица 13 – Входные данные для функции void output(int **A, int N, int M)

Тип

Идентификатор

Диапазон

Назначение

int

N

–2 147 483 638 до 2 147 483 647

Количество строк матрицы

int

M

–2 147 483 638 до 2 147 483 647

Количество столбцов матрицы

int

**A

–2 147 483 638 до 2 147 483 647

Указатель на область памяти, в которой хранятся элементы двумерного массива

Таблица 14 – Выходные данные для функции void output(int **A, int N, int M)

Тип

Идентификатор

Диапазон

Назначение

int

A[i][j]

–2 147 483 638 до 2 147 483 647

Элементы матрицы

Таблица 15 – Вспомогательные переменные для функции void output(int **A, int N, int M)

Тип

Идентификатор

Диапазон

Назначение

int

i

–2 147 483 638 до 2 147 483 647

Переменная цикла

int

j

–2 147 483 638 до 2 147 483 647

Переменная цикла

Схема алгоритма функции void task_1(int **A, int M, int N) представлена на рисунках 18-22. Входные данные для функции void task_1(int **A, int M, int N) приведены в таблице 16. Выходные данные для функции функции void task_1(int **A, int M, int N) приведены в таблице 17. Вспомогательные переменные для функции void task_1(int **A, int M, int N) приведены в таблице 18.

Таблица 16 – Входные данные для основной функции void task_1(int **A, int M, int N)

Тип

Идентификатор

Диапазон

Назначение

int

M

–2 147 483 638 до 2 147 483 647

Количеством строк матрицы

int

N

–2 147 483 638 до 2 147 483 647

Количеством столбцов матрицы

int

**A

–2 147 483 638 до 2 147 483 647

Указатель на область памяти, в которой хранятся элементы двумерного массива

Таблица 17 – Выходные данные для основной функции void task_1(int **A, int M, int N)

Тип

Идентификатор

Диапазон

Назначение

int

A[i][j]

–2 147 483 638 до 2 147 483 647

Вывод преобразованной матрицы

Таблица 18 – Вспомогательные переменные для основной функции void task_1(int **A, int M, int N)

Тип

Идентификатор

Диапазон

Назначение

int

i

–2 147 483 638 до 2 147 483 647

Количество строк

int

j

–2 147 483 638 до 2 147 483 647

Количество столбцов

int

flag

–2 147 483 638 до 2 147 483 647

Нахождение нулевых строк (столбцов)

int

k

–2 147 483 638 до 2 147 483 647

Преобразование массива

Схема алгоритма функции void task_2(int **A, int M, int N) представлена на рисунках 23. Входные данные для функции void task_2(int **A, int M, int N) приведены в таблице 19. Выходные данные для функции void task_2(int **A, int M, int N) приведены в таблице 20. Вспомогательные переменные для void task_2(int **A, int M, int N) приведены в таблице 21.

Таблица 19– Входные данные для основной функции void task_2(int **A, int M, int N)

Тип

Идентификатор

Диапазон

Назначение

int

M

–2 147 483 638 до 2 147 483 647

Количеством строк матрицы

int

N

–2 147 483 638 до 2 147 483 647

Количеством столбцов матрицы

int

**A

–2 147 483 638 до 2 147 483 647

Указатель на область памяти, в которой хранятся элементы двумерного массива

Таблица 20 – Выходные данные для основной функции void task_2(int **A, int M, int N)

Тип

Идентификатор

Диапазон

Назначение

int

tmp

–2 147 483 638 до 2 147 483 647

Номер строки с первым положительным элементом

Таблица 21 – Вспомогательные переменные для основной функции void task_2(int **A, int M, int N)

Тип

Идентификатор

Диапазон

Назначение

int

i

–2 147 483 638 до 2 147 483 647

Количество строк

int

j

–2 147 483 638 до 2 147 483 647

Количество столбцов

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]