русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Линейные списки


Дата добавления: 2014-09-29; просмотров: 3082; Нарушение авторских прав


 

Цель лабораторной работы: изучение способов создания и принципов использования односвязных линейных списков; изучение стандартных средств языка Турбо Паскаль для работы с динамической памятью; изучение концепций и освоение технологии модульного программирования; приобретение навыков модульного программирования на языке Турбо Паскаль при решении задач обработки односвязных линейных списков.

 

Задание на программирование: используя технологию модульного программирования разработать программу обработки односвязных линейных списков с числом элементов в списке не менее пяти в соответствии с индивидуальным заданием. Программа должна включать модуль, содержащий набор всех необходимых средств (типов, подпрограмм и т.д.) для решения поставленной задачи.

 

Порядок выполнения работы:

 

1) Получить у преподавателя индивидуальное задание.

2) Разработать математическую модель: описать с помощью формул и рисунков структуру односвязного линейного списка и процессы его создания и преобразования.

3) Построить схему алгоритма решения задачи.

4) Составить спецификации подпрограмм: инициализации, создания, проверки на пустоту, преобразования в соответствии с формулировкой задания и просмотра односвязного линейного списка.

5) Разработать модуль обработки линейного списка в соответствии с заданием.

6) Составить программу на языке Турбо Паскаль.

7) Использовать оконный интерфейс предыдущих лабораторных работ.

8) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов. Обеспечить одновременный показ в окнах на экране исходного и преобразованного списков.

9) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, спецификация подпрограмм, текст программы, контрольные примеры.



 


Варианты индивидуальных заданий

По списку L построить два новых списка L1 и L2: первый из элементов с положительными значениями, а второй из остальных элементов исходного списка.

 

Вставить в список L новый элемент E1 за каждым вхождением заданного элемента E, если Е входит в L.

 

Вставить в список L новый элемент Е1 перед каждым вхождением заданного элемента Е, если Е входит в L.

 

Вставить в непустой список L перед его последним элементом пару новых элементов Е1 и Е2.

 

Вставить в непустой список L, элементы которого изначально упорядочены по не убыванию их значений, новый элемент E так, чтобы сохранить упорядоченность элементов списка.

 

Удвоить каждое вхождение элемента Е в списке L.

 

Удалить из списка L все вхождения элемента Е.

 

Удалить из списка L все элементы с отрицательными значениями.

 

Удалить из списка L за каждым вхождением элемента Е один элемент, если он есть и отличен от Е.

 

Оставить в списке L только первые вхождения одинаковых элементов.

 

В списке L из каждой группы подряд идущих элементов с равными значениями оставить только один.

 

Перевернуть список L, то есть изменить ссылки в этом списке так, чтобы его элементы оказались расположенными в обратном порядке.

 

Найти элемент непустого списка с максимальным значением.

 

Проверить, есть ли в списке L хотя бы два элемента с одинаковыми значениями.

 

Проверить на равенство два списка L1 и L2.

 

Построить список L1 – копию списка L.

 

Добавить в конец списка L1 все элементы списка L2.

 

Вставить в список L за первым вхождением элемента Е все элементы списка L1, если Е входит в L.

 

Сформировать список L, включив в него по одному разу элементы, которые входят хотя бы в один из списков L1 и L2.

 

Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.

 

Сформировать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2.

 

Сформировать список L, включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входят в другой из них.

 

Объединить два упорядоченных списка L1 и L2 в один упорядоченный список, построив новый список L.

 

 

Объединить два упорядоченных списка L1 и L2 в один упорядоченный список L1, меняя соответствующим образом ссылки в L1 и L2.

 

Найти среднее арифметическое значений элементов непустого списка.

 

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

 

Проверить, упорядочены ли элементы списка по алфавиту.

 

Найти сумму значений последнего и предпоследнего элементов списка.

 

Удалить из списка первый отрицательный элемент, если такой есть.

 

Заменить в списке L все вхождения элемента Е1 на Е2.

 

Вставить новый элемент после первого элемента непустого списка.

 

Перенести в конец списка его первый элемент.

 

Удалить из списка второй элемент, если такой есть.

 

Подсчитать число вхождений элемента Е в список L.

 

Удалить из списка L первое вхождение элемента Е, если такое есть.

 

Перенести в начало списка его последний элемент.

 

Подсчитать количество слов списка, которые совпадают с последним словом.

 

 

Подсчитать количество слов списка, которые начинаются и оканчиваются одной и той же литерой.

 

Подсчитать количество слов списка, которые начинаются с той же литеры, что и следующее слово.

 


Пример программы

 

{Определить, входит ли список L1 в список L2}

Program Spisok;

Uses Crt, M_Spis;

 

{Решение поставленной задачи}

Function Rez(head1,head2:Ref):Boolean;

Var

tec1,

tec2:Ref;

Begin

Rez:=False; {предполагаем, что L1 не входит в L2}

tec2:=head2;

While tec2<>Nil

Do Begin

tec1:=head1;

While (tec2^.inf<>tec1^.inf)And(tec2^.sled<>Nil)

Do tec2:=tec2^.sled;

If tec2^.inf=tec1^.inf

Then Begin

While (tec2^.inf=tec1^.inf)And(tec2<>Nil)And(tec1<>Nil)

Do Begin

tec1:=tec1^.sled;

tec2:=tec2^.sled;

End;

If tec1=Nil

Then Begin

Rez:=True; {L1 входит в L2}

Exit;

End

Else Continue;

End;

tec2:=tec2^.sled;

End;

End;

 

{Рисование окна на экране}

Procedure Okno(x1,y1,x2,y2,bkcl,cl:Byte;title:String);

Var i:Byte;

Begin

Window(x1,y1,x2,y2);

TextBackGround(bkcl);

TextColor(cl);

ClrScr;

GoToXY((x2-x1) Div 2 - Length(title) Div 2,1);

Write(title);

Window(x1,y1+1,x2,y2);

End;

 

{Основная программа}

Var

head1,

head2:Ref;

Begin

TextBackGround(1);

ClrScr;

Okno(45,1,80,5,12,10,'Исходный список L1:');

Okno(45,6,80,10,12,10,'Исходный список L2:');

Okno(45,12,80,18,13,10,'Результат:');

Okno(1,20,80,25,2,15,'Задача:');

WriteLn(' Определить, входит ли список L1 в список L2.');

Okno(1,1,43,18,14,10,'Ввод:');

WriteLn('Создание списка L1.');

SozdSpis(head1);

Okno(45,1,80,5,12,10,'Исходный список L1:');

Vivod(head1);

Okno(1,1,43,18,14,10,'Ввод:');

WriteLn('Создание списка L2.');

SozdSpis(head2);

Okno(45,6,80,10,12,10,'Исходный список L2:');

Vivod(head2);

If Pust(head1) Or Pust(head2)

Then Begin

Okno(45,12,80,18,13,10,'Результат:');

WriteLn('Один из списков пуст.');

Write('Нажмите <Enter>.');

ReadLn;

Exit;

End;

Okno(45,12,80,18,13,10,'Результат:');

If Rez(head1,head2)

Then WriteLn('Список L1 входит в список L2')

Else WriteLn('Список L1 не входит в список L2');

Write('Для продолжения нажмите Enter->');

ReadLn;

End.

 


Unit M_Spis;{Модуль работы со списком}

 

Interface

Type

TElem=Byte;

Ref=^Spis;

Spis=Record

inf:TElem;

sled:Ref;

End;

Procedure InitSpis(Var head,zam:Ref); {инициализации списка}

Function Pust(head:Ref):Boolean; {проверка списка на пустоту}

Procedure VSpisok(Var head,zam:Ref;nov:TElem);{добавление нового

элемента в конец списка}

Procedure SozdSpis(Var head:Ref); {создание списка}

Procedure Vivod(head:Ref); {просмотр списка}

 

Implementation

 

{Процедура инициализации списка}

Procedure InitSpis(Var head,zam:Ref);

Begin

head:=Nil;

zam:=Nil;

End;

 

{Проверка списка на пустоту}

Function Pust(head:Ref):Boolean;

Begin

If head=Nil

Then Pust:=True {список пуст}

Else Pust:=False; {список не пуст}

End;

 

{Процедура добавления одного элемента в конец списка}

Procedure VSpisok(Var head,zam:Ref;nov:TElem);

Var

tec:Ref;

Begin

New(tec);

tec^.inf:=nov;

tec^.sled:=Nil;

If Pust(head)

Then head:=tec

Else zam^.sled:=tec;

zam:=tec;

End;

 

{Процедура создания списка}

Procedure SozdSpis(Var head:Ref);

Var

inf:TElem;

zam:Ref;

Begin

InitSpis(head,zam);

WriteLn('Вводите числа одной строкой через пробел.');

WriteLn('Признак конца ввода - ввод 0.');

Read(inf);

While inf<>0

Do Begin

VSpisok(head,zam,inf);

Read(inf);

End;

ReadLn;

End;

 

{Просмотр списка}

Procedure Vivod(head:Ref);

Var

prom:Ref;

Begin

prom:=head;

While prom<>Nil

Do Begin

Write(prom^.inf,' ');

prom:=prom^.sled;

End;

WriteLn;

WriteLn('Нажмите <Enter>');

ReadLn;

End;

 

End.

 




<== предыдущая лекция | следующая лекция ==>
Типизированные файлы | Динамические структуры данных: стек, дек, очередь


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.289 сек.