Uploaded by Danil Volkov

Rita sortirovka massiva

advertisement
Федеральное Агентство Железнодорожного Транспорта
Федеральное Государственное Бюджетное Образовательное Учреждение
Высшего Образования
«Московский Государственный Университет Путей Сообщения Императора
Николая II»
(МГУПС(МИИТ)
Кафедра: «Экономической информатики»
ОТЧЁТ
по лабораторной работе №1
по теме: «Сортировка массива методом обмена»
Дисциплина: «Основы алгоритмизации и программирования»
Выполнила студентка группы: ППИ-111
Принял: доц. Ханин В.И.
Москва 2016
Содержание
1. Постановка задачи ................................................................ 3
2. Требования к программе и ограничения............................. 4
3. Тестовый пример .................................................................. 5
4. Описание идентификаторов................................................. 8
5. Блок-схема данного алгоритма ............................................ 9
6. Листинг программы............................................................ 14
7. Результаты работы программы.......................................... 19
8. Список используемой литературы .................................... 21
2
1. Постановка задачи
Требуется разработать алгоритм и программу сортировки массива элементов
целого типа методом «обмена».
Суть метода «обмена».
Элементы массива последовательно сравниваются попарно: первый со вторым,
второй с третьим и т.д. по каждой паре определяются, как составляющие её
элементы соотносятся между собой. Если их соотношение не удовлетворяет
условиям сортировки, то выполняется перестановка элементов по отношению
друг к другу (обмен). В противном случае элементы остаются на своих местах.
Указанные операции на каждом шаге сортировки выполняются со всеми
элементами массива. Причем количество связанных с этим шагом операций
заранее не определимо. Массив считается упорядоченным, когда на последнем
шаге не окажется перестановок.
3
2. Требования к программе и ограничения
Требования к программе:
1) программа должна содержать проверку исходных данных;
2) программа должна содержать диалог с пользователем;
3) программа должна выполняться произвольное количество раз по желанию
пользователя;
4) программа должна быть комментированной.
Ограничения:
1) размерность массива должна лежать от 2 до 1000 элементов;
2) элементами в массиве могут быть целые числа в диапазоне от -10000 до
10000.
4
3. Тестовый пример
Исходный массив:
N = 10
i
1
2
3
4
5
6
7
8
9
10
A[i]
2
-1
3
7
8
11
10
8
13
14
Шаг 1
i
A[i]
F=0
1
2
-1
2
-1
2
3
3
4
7
5
8
6
11
7
10
8
8
9
13
10
14
2
3
3
7
7
8
8
11
10
11
8
11
11
13
13
14
F=1
5
Шаг 2
i
A[i]
F=0
1
-1
-1
2
2
2
3
3
4
7
5
8
6
10
7
8
8
11
9
13
10
14
2
3
3
7
7
8
8
10
8
10
10
11
11
13
13
14
F=1
Шаг 3
F=0
i
A[i]
1
-1
-1
2
2
2
3
3
4
7
5
8
6
8
7
10
8
11
9
13
10
14
2
3
3
7
7
8
8
8
8
10
10
11
11
13
13
14
F = 0 (сортировка закончена)
6
Отсортированный массив:
i
1
2
3
4
5
6
7
8
9
10
A[i]
-1
2
3
7
8
8
10
11
13
14
7
4. Описание идентификаторов
A – имя обрабатываемого массива;
A[i] – значение i–того элемента массива;
N – количество элементов в массиве;
i – индекс элемента массива;
e – переменная-счётчик;
Ch – переменная для хранения кода символа нажатой клавиши;
Error – переменная для хранения кода ошибки операции ввода/вывода;
F – флажок, который фиксирует операцию обмена;
Z – рабочая область для временного хранения значения элемента массива в ходе
операции обмена.
8
5. Блок-схема данного алгоритма
начало
начало
1
Объявление: A – имя обрабатываемого
массива; A[i] – значение i–того элемента
массива; N – количество элементов в
массиве; i – индекс элемента массива; e –
переменная счётчик; Ch – переменная для
хранения кода символа нажатой клавиши;
Error – переменная для хранения кода
ошибки операции ввода/вывода; F –
флажок, который фиксирует операцию
обмена; Z – рабочая область для
временного хранения значения элемента
массива в ходе операции обмена
2
Вывод: «Заставки»
3
Вывод: «Введите количество
элементов массива в интервале от
2 и до 100»
3
4
ввод N
7
5
2<=N<=1000?
нет
Вывод: «Неправильно
задано множество
элементов массива.
Пожалуйста повторите
ввод заново»
да
10
6
9
9
5
6
очистка экрана
8
i=1, N
9
Вывод: «Введите А[i]»
10
ввод А[i]
11
13
нет
-10000<=A[i]<=10000?
Вывод: «Ошибка в
значении элемента
массива. Пожалуйста
повторите ввод»
да
11
12
10
10
11
12
очистка экрана
14
Вывод: «Исходный массив»
15
i=1, N
12
17
16
Вывод: « А[i]»
11
13
11
21
15
17
F: =0
18
i=1, N-1
19
нет
20
13
21
A[i]>A[i+1]?
да
Z: =A[i];
A[i]:=A[i+1];
A[i+1]:=Z;
F:=1
12
12
18
21
нет
F=0?
12
17
22
да
Вывод: «Отсортированный
массив»
23
i=1, N
25
24
Вывод A[i]
25
Вывод: «Отсортировать ещё один
массив?»
26
Ввод: Y/y или N/n
нет
27
Введено N/n?
9
2
да
конец
13
6. Листинг программы
program sortirovka;
uses crt;
{модуль для работы с программой в текстовом режиме}
var А: array [1...100] of integer;
{массив, переменные целого типа}
{область для временного хранения значения элемента
массива в ходе операции обмена}
Z,
{индекс элемента массива}
i,
{количество элементов в массиве}
N,
{переменная для хранения кода ошибки}
Error,
F: integer;
Ch: char;
{переменные целого типа}
{переменная символ}
{описание меток}
label L1, L2;
{начало программы}
begin
{очистка экрана}
clrscr;
{цвет символов}
textattr:=yellow;
gotoxy (20,6);
{вывод текста в указанном месте экрана}
writeln (‘ Вашему вниманию представляется программа, ’);
{вывод информации на экран}
gotoxy (20,7);
writeln (‘ которая сортирует элементы задаваемого массива’);
gotoxy (20,8);
writeln (‘ в порядке возрастания методом «обмена»’);
textattr: =red;
gotoxy (35,10);
writeln (‘ Внимание!’);
gotoxy (20,12);
textattr: = green;
writeln (‘ 1) Размерность задаваемого массива должна быть ’);
14
gotoxy (20,13);
writeln (‘ в диапазоне от 2 до 100 ’);
gotoxy (40,14);
writeln (‘ 2) Элементы - целые числа от -10000 до 10000’);
gotoxy (40,17);
textattr: = white;
writeln (‘ Программу составила студентка’);
gotoxy (40,19);
writeln (‘ МГУПС (МИИТ), группы ППИ-111’);
gotoxy (40,20);
writeln (‘ ФИО’);
gotoxy (40,21);
writeln (‘ Москва, 2016’);
gotoxy (40,23);
writeln (‘ Нажмите любую клавишу для продолжения’);
{считывание символа с клавиатуры}
Ch:= readkey;
{----------------------------ввод количества элементов массива---------------------------}
L1: clrscr;
{начало цикла с постусловием}
repeat
textattr:= yellow;
gotoxy (5,5);
write (‘ Введите количество элементов массива в диапазоне от 2 до 100
’);
{отключение проверки ошибок ввода данных}
{$i-}
readln [N];
{ввод с клавиатуры значения переменной}
error: =ioresult; {возвращение результатов последней операции ввода/вывода}
{$i+}
{включение проверки ввода данных}
if (N<2) or (N>100) or (Error<>0) then
15
begin
textattr: =red;
writeln (‘ Неверно задано количество элементов в массиве ’);
end;
until (N>=2) and (N>=100) and (Error=0)
{конец цикла с постусловием}
{------------------------------ввод значений элементов массива----------------------------}
clrscr;
writeln;
writeln (‘ Введите значение элементов массива ’);
gotoxy (35,5);
textattr: =yellow;
writeln (‘ Внимание! ’);
gotoxy (15,16);
writeln (‘ Значение элементов должно быть в диапазоне от -10000 до
10000 ’);
textattr: =white;
{отключение проверки ошибок ввода данных}
{$i-}
for i=1 to N do
begin
repeat
writeln (‘ Введите А[‘,i,’]:’);
readln (A[i]);
error =ioresult;
{включение проверки ввода данных}
{$i+}
textattr: =red;
if (A[i]<=-10000) and (A[i]>=10000) and (error=0) then
writeln (‘ Ошибка в значении элемента массива! Повторите ввод! ’);
textattr:=white;
16
until (A[i]<=10000) and (A[i]>=-10000) and (error=0);
end;
{------------------------------ввод результатов сортировки--------------------------------}
clrcsr;
textattr:=yellow;
gotoxy(23,4);
writeln (‘ Р е з у л ь т а т ы с о р т и р о в к и ’ );
textattr:=white;
gotoxy(21,8);
writeln (‘ Исходный массив’ );
gotoxy(21,10);
for i:=1 to N do
write (А[i],’.’);
repeat
F:=0;
for i:=1 to N-1 do
begin
if А[i]> А[i+1] then
begin
Z:= А[i];
А[i]:= А[i+1];
А[i+1]:=Z;
F:=1
end;
end;
until (F=0);
writeln (‘’);
17
gotoxy(20,16);
textattr:=green;
writeln (‘ Отсортированный массив: ’ );
gotoxy(20,18);
for i:=1 to N do
write (A[i],‘ ,’ );
gotoxy(20,24);
textattr:=yellow;
writeln (‘Желаете отсортировать ещё один массив? (Y-да, N-нет)’ );
L2: case readkey of
{конструкция выбора, проверяющая вводимые данные и
выполняющая определённое действие в зависимости от ввода данных}
#89: goto L1;
#121: goto L1;
#78: exit;
#110: exit;
end;
goto L2;
end.
{конец программы}
18
7. Результаты работы программы
Начало работы:
19
20
8. Список используемой литературы
1) В.И.Ханин «Основы разработки программ»
2) В.Г.Ягофаров «Теория построения алгоритмов»
3) Г. Г. Рапаков, С. Ю. Ржеуцкая «Программирование на языке Pascal»
21
Download