Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота 13 (4чт., СА-10).doc
Скачиваний:
3
Добавлен:
24.08.2019
Размер:
50.18 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА №13 «Списки»

Вариант №1 (5 баллов)

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

Вариант №2 (6 баллов)

Заданный во входном файле текст (за ним следует точка) распечатать в обратном порядке. (Выбрать для представления данных подходящую списковую структуру).

Вариант №3 (5 баллов)

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

Вариант №4 (5 баллов)

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

Вариант №5 (6 баллов)

Дана непустая последовательность непустых слов из букв; между соседними словами – запятая, за последним словом точка. Напечатать все слова максимальной длины. (Выбрать для представления данных подходящую списковую структуру).

Вариант №6 (5 баллов)

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

Вариант №7 (5 баллов)

Дано целое n>1, за которым следует n вещественных чисел. Напечатать эти числа в порядке их неубывания (Выбрать для представления данных подходящую списковую структуру).

Вариант №8 (5 баллов)

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

Вариант №9 (5 баллов)

Дано целое n>1, за которым следует n вещественных чисел. Напечатать порядковые номера тех чисел последовательности, которые имеют наименьшую величину (Выбрать для представления данных подходящую списковую структуру).

Вариант №10 (5 баллов)

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

Вариант №11 (5 баллов)

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

Вариант №12 (5 баллов)

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

Вариант №13 (5 баллов)

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

Вариант №14 (5 баллов)

Дано целое n>1, за которым следует n вещественных чисел. Напечатать порядковые номера тех чисел последовательности, которые имеют наибольшую величину (Выбрать для представления данных подходящую списковую структуру).

Вариант №15 (5 баллов)

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

Вариант №16 (5 баллов)

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

Вариант №17 (5 баллов)

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

Вариант №18 (5 баллов)

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

Вариант №19 (5 баллов)

Проверить, входит ли список L1 в список L2.

Вариант №20 (5 баллов)

Дано целое n>1, за которым следует n вещественных чисел. Напечатать эти числа в порядке их невозрастания (Выбрать для представления данных подходящую списковую структуру).

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ ЛАБОРАТОРНОЙ РАБОТЫ №4.

«Динамические переменные»

7.1. Карта памяти Turbo Pascal.

Префикс сегмента программы (Program Segment Prefix - PSP) - это 256-ти байтовая область, создаваемая DOS при загрузке программы. Адрес сегмента PSP хранится в переменной PrefixSeg. Каждый модуль (и главная программа и каждый модуль) имеет свой кодовый сегмент. Главная программа занимает первый кодовый сегмент; кодовые сегменты, которые следуют за ним, занимают модули (в порядке, обратном тому, как они следовали в операторе uses), и последний кодовый сегмент занимает библиотека времени выполнения (модуль System). Размер одного кодового сегмента не может превышать 64К, но общий размер кода ограничен только имеющейся памятью.

Рис. 16.1. Распределение памяти в Turbo Pascal.

HeapEnd -->-----------------------------¬

¦ ¦

¦ свободная память¦

¦ ¦

HeapPtr -->¦................. ..........¦

¦ куча (растет вверх) ¦

HeapOrg -->+ >- - OvrHeapEnd

¦ оверлейный буфер ¦

+------------------------+ >- - OvrHeapOrg

¦ стек (растет вниз) ¦

SSeg:SPtr -->¦.... ........................¦

¦ свободный стек ¦

SSeg:0000 -->+ ----------------------------+

¦ глобальные переменные ¦

¦ типированные константы ¦

DSeg:0000 ->+--------------------- -------+

¦ кодовый сегмент ¦¦

¦ модуля System ¦ ¦

¦........ ....................¦ ¦

¦ кодовый семент ¦ ¦

¦ первого модуля   ¦ ¦. кодовый сегмент содержат образ других модулей .EXE файла

¦ кодовый сегмент ¦ ¦

¦ последнего  модуля ¦ ¦

+------------------------- -- -+ ¦

¦ кодовый сегмент ¦ ¦

¦ главной программы ¦ ¦

¦ префикс сегмента программы ¦

Нижняя граница памяти DOS

Сегмент данных (адресуемый через DS) содержит все глобальные переменные и затем все типированные константы. Регистр DS никогда не изменяется во время выполнения программы. Размер сегмента данных не может превышать 64К.

При запуске программы регистр сегмента стека (SS) и указатель стека (SP) устанавливаются так, что SS:SP указывает на первый байт после сегмента стека. Регистр SS никогда не изменяется во время выполнения программы, а SP может передвигаться вниз пока не достигнет конца сегмента. Размер стекового сегмента не может превышать 64К; размер по умолчанию - 16К, он может быть изменен директивой компилятора $M.

Буфер оверлеев используется стандартным модулем Overlay для хранения оверлейного кода. Размер оверлейного буфера по умолчанию соответствует размеру наибольшего оверлея в программе; если в программе нет оверлеев, размер буфера оверлеев равен 0. Размер буфера оверлеев может быть увеличен с помощью вызова программы OvrSetBuf модуля Overlay; в этом случае размер кучи соответственно уменьшается, смещением вверх HeapOrg.

Куча хранит динамические переменные, то есть переменные, распределенные через вызов стандартных процедур New и GetMem. Куча занимает всю или часть свободной памяти, оставшейся после загрузки программы. Фактически размер кучи зависит от минимального и максимального значений кучи, которые могут быть установлены директивой компилятора $M. Размер кучи никогда не будет меньше минимального значения и не превысит максимального. Если в системе нет памяти равного минимальному значению, программа не будет выполняться. Минимальное значение кучи по умолчанию равно 0 байт, максимальное - 640К; это означает, что по умолчанию куча будет занимать всю оставшуюся память.