Автор: Пользователь скрыл имя, 23 Декабря 2012 в 11:40, лабораторная работа
Разработать программу, в которой описать переменные для создания двунаправленного списка целых чисел. Предусмотреть в программе меню с режимами: создание динамической структуры, распечатка исходного состояния в прямом и обратном направлении, запрос удаления элемента по указанному порядковому номеру, распечатка преобразованного состояния. При невозможности выполнить изменение - выдать сообщение об ошибке.
МИНОБРНАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное
бюджетное образовательное
высшего профессионального образования
«Ижевский государственный технический университет имени М.Т. Калашникова»
Кафедра «Программное обеспечение»
Лабораторная работа №4
по дисциплине «Основы программирования»
на тему «Динамические переменные»
Вариант №1
Выполнил
Студент гр. Б1-191-1
Принял
Ижевск 2012
1. Постановка задачи
Разработать программу, в которой описать переменные для создания двунаправленного списка целых чисел. Предусмотреть в программе меню с режимами: создание динамической структуры, распечатка исходного состояния в прямом и обратном направлении, запрос удаления элемента по указанному порядковому номеру, распечатка преобразованного состояния. При невозможности выполнить изменение - выдать сообщение об ошибке.
2. Иерархическая схема
Спецификация:
mainMenu – выводит меню и вызывает необходимые процедуры;
getCloud – создаёт динамический список;
print – выводит содержимое списка;
recPrint – выводит содержимое списка в обратном порядке;
delElm – удаляет заданный элемент.
3. Описание программы
Программа описывает переменные для создания соответствующей динамической структуры. В программе предусмотрено меню с режимами, обеспечивающими создание динамической структуры, добавление и удаление существующих элементов, распечатку исходного состояния в прямом и обратном направлении, запрос изменения и преобразования, распечатку преобразованного состояния в прямом и обратном направлении. При пустой динамической структуре программа выдает сообщение об ошибке.
4. Схема программы
5. Текст программы
program DinOchered;
type
Tptr = ^Telem;
Telem = record
inf : integer;
link : Tptr;
end;
var
begQ : Tptr;
procedure addElem;
var
add : Tptr;
p : Tptr;
begin
new(add);
add^.link := NIL;
write('Введите значение добавляемого элемента: ');
readln(add^.inf);
if begQ = NIL then
begQ := add
else
begin
p := begQ;
while p^.link <> NIL do
p := p^.link;
p^.link := add;
end;
end;
procedure delElem;
var
p : Tptr;
begin
p := begQ;
begQ := begQ^.link;
p^.link := NIL;
dispose(p);
end;
procedure printQ;
var
p : Tptr;
begin
p := begQ;
while(p <> NIL) do
begin
write(p^.inf:3);
p := p^.link;
end;
end;
procedure recPrintQ(pp : Tptr);
begin
if pp <> NIL then
begin
recPrintQ(pp^.link);
write(pp^.inf:3);
end;
end;
function mainMenu : integer;
var
sel : integer;
begin
repeat
writeln('1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ');
writeln('2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ');
writeln('3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ');
writeln('4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ');
writeln('5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ');
writeln('6 - ВЫХОД');
write('Выберите один из пунктов меню: ');
readln(sel);
until((sel >= 1) and (sel <= 6));
writeln;
mainMenu := sel;
end;
function getCountElem : integer;
var
p : Tptr;
k : integer;
begin
k := 0;
p := begQ;
while(p <> NIL) do
begin
k := k + 1;
p := p^.link;
end;
getCountElem := k;
end;
var
sel : integer;
begin
begQ := NIL;
repeat
sel := mainMenu;
case sel of
1:
begin
addElem;
writeln;
writeln('Элемент успешно добавлен в конец очереди!');
readln;
end;
2:
begin
if(begQ = NIL) then
writeln('В очереди нет ни одного элемента! Удаление невозможно!')
else
begin
delElem;
writeln('Элемент успешно удален из начала очереди!');
end;
readln;
end;
3:
begin
if(begQ = NIL) then
writeln('В очереди нет ни одного элемента! Печать невозможна!')
else
begin
write('Элементы очереди имеют вид: ');
printQ;
end;
readln;
end;
4:
begin
if(begQ = NIL) then
writeln('В очереди нет ни одного элемента! Печать невозможна!')
else
begin
write('Элементы очереди имеют вид: ');
recPrintQ(begQ);
end;
readln;
end;
5:
begin
writeln('Количество элементов в очереди: ', getCountElem);
readln;
end;
end;
until(sel = 6);
end.
6. Контрольный пример
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 1
Введите значение добавляемого элемента: 156
Элемент успешно добавлен в конец очереди!
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 1
Введите значение добавляемого элемента: 225
Элемент успешно добавлен в конец очереди!
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 1
Введите значение добавляемого элемента: 369
Элемент успешно добавлен в конец очереди!
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 1
Введите значение добавляемого элемента: 457
Элемент успешно добавлен в конец очереди!
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 1
Введите значение добавляемого элемента: 132
Элемент успешно добавлен в конец очереди!
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 3
Элементы очереди имеют вид: 156 225 369 457 132
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 4
Элементы очереди имеют вид: 132 457 369 225 156
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 5
Количество элементов в очереди: 5
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 2
Элемент успешно удален из начала очереди!
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 5
Количество элементов в очереди: 4
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 6
1 - ДОБАВИТЬ ЭЛЕМЕНТ В ОЧЕРЕДЬ
2 - УДАЛИТЬ ЭЛЕМЕНТ ИЗ ОЧЕРЕДИ
3 - ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ НАЧАЛА К КОНЦУ
4 - РЕКУРСИВНАЯ ПЕЧАТЬ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТ КОНЦА К НАЧАЛУ
5 - ПОЛУЧИТЬ КОЛИЧЕСТВО ЭЛЕМЕНТОВ ОЧЕРЕДИ
6 - ВЫХОД
Выберите один из пунктов меню: 3
В очереди нет ни одного элемента! Печать невозможна!