- •Указания по выполнения практических и лабораторных работ
- •Языки программирования
- •Трансляторы
- •Язык программирования Паскаль
- •Использование среды программирования турбо паскаль
- •Типы вычислительных процессов
- •Блок-схемы алгоритмов
- •Примеры составления блок-схемы алгоритма
- •Основные файлы пакета Турбо Паскаль
- •Запуск интегрированной среды программирования Турбо Паскаль
- •Работа с меню ис
- •Меню File
- •Меню Run
- •Меню Compile
- •Меню Debug
- •Меню Tools
- •Меню Options
- •Меню Window
- •Меню Help
- •Процедуры ввода-вывода
- •Оператор записи WriteLn аналогичен процедуре Write, но после вывода последнего в списке значения для текущей процедуры WriteLn происходит перевод курсора к началу следующей строки.
- •Пример программы с использованием процедур ввода-вывода данных с различными форматами выводимых данных
- •Операторы языка Паскаль
- •Оператор присваивания
- •Оператор безусловного перехода (go to)
- •Оператор выбора case
- •Оператор повтора for
- •Примеры программ с использованием оператора for
- •Оператор повтора Repeat
- •Пример программы с использованием оператора repeat
- •Пример программы с использованием операторов присваивания, повтора и выбора
- •Пример программы с использованием оператора повтора while
- •Примеры описания одномерных и двумерных массивов
- •Действия над массивами
- •Действия над элементами массива
- •Ввод-вывод элементов массива
- •Пример программы ввода-вывода одномерного массива
- •Пример программы ввода-вывода двумерного массива
- •Пример программы нахождения в одномерном массиве максимального элемента
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Основные логические структуры:
- •Встроенные функции и процедуры
- •Арифметические процедуры и функции
- •Скалярные процедуры и функции
- •Функции преобразования типов
- •Процедуры управления программой
- •Специальные процедуры и функции
- •Вызов стандартной процедуры или функции
- •Пример программы с использованием функции, определенной пользователем
- •Пример программы с использованием процедуры, определенной пользователем
- •Механизм передачи параметров
- •Нетрадиционное использование подпрограмм. Косвенная рекурсия
- •Линейный поиск
- •Линейный поиск в упорядоченном массиве данных
- •Бинарный (двоичный) поиск
- •Пример программы с использованием алгоритма бинарного поиска
- •Методы внутренней сортировки
- •Сортировки включением
- •Сортировка выбором
- •Реализация алгоритмов обменных сортировок при написании программы на Паскале
- •Шейкерная сортировка
- •Пирамидальная сортировка
- •Обменная сортировка разделением
- •Естественное слияние
- •Многопутевое слияние
- •Пример разработки собственного модуля
- •Скалярные процедуры и функции
- •Процедуры управления программой
- •Специальные процедуры и функции
- •Вызов стандартной процедуры или функции
- •Формат описания строкового типа
- •Фрагмент описания строковых данных
- •Стандартные строковые процедуры и функции
- •Пример программы работы со стандартными строковыми процедурами и функциями Порядок выполнения работы
- •Примеры программ работы со строковыми переменными
- •Пример программы работы с записями
- •Пример программы работы с записями
- •Операции над множествами
- •Объединение Пересечение Разность
- •Формат описания файлового типа
- •Средства обработки файлов
- •Текстовые файлы
- •Пример программы работы с текстовым файлом
- •Средства работы с типизированными файлами
- •Пример программы работы с типизированным файлом
- •Средства работы с нетипизированными файлами
- •Пример программы для работы с типизированными файлами
- •Распределение памяти при выполнении программы
- •Пример программы распределения памяти и получения доступа к полям psp.
- •Статические и динамические переменные
- •Указатели
- •Типизированные указатели
- •Нетипизированный указатель (pointer)
- •Доступ к переменной по указателю
- •Управление динамической памятью
- •Процедуры динамического распределения
- •Пример программы с использованием динамической памяти
- •Пример программы создания и использования связанного списка
- •Параметр процедурного типа
Средства работы с нетипизированными файлами
BlockRead(var F : file ; var Buf; Count : word {;Result:word});
Процедура считывает из файла F определенное число блоков в память, начиная с первого байта переменной Buf. Параметр Buf представляет любую переменную, используемую для накопления информации из файла F. Параметр Count задает число считываемых блоков. Параметр Result является необязательным и содержит после вызова процедуры число действительно считанных записей.
Использование параметра Result подсказывает, что число считанных блоков может быть меньше, чем задано параметром Count. Если Result указан при вызове, то ошибки ввода-вывода в такой ситуации не произойдет. Для отслеживания этой и других ошибок чтения можно использовать опции {$I-}, {$I+} и функцию IOresult.
BlockWrite(var F : file ; var Buf; Count:word {;Result :word}) ;
Процедура предназначена для быстрой передачи в файл F определенного числа записей из переменной Buf. Все параметры процедуры BlockWrite аналогичны параметрам процедуры BlockRead. Обе процедуры выполняют операции ввода-вывода блоками. Объем блока в байтах определяется по формуле:
06ъем = Count * RecSize,
где RecSize - размер записи файла, заданный при его открытии. Суммарный объем разового обмена не должен превышать 64 Кбайт. Помимо скорости передачи данных преимущество этих процедур заключается в возможности пользователя самостоятельно определять размер буфера для файловых операций.
Эта возможность играет значительную роль в тех задачах, где необходимо жесткое планирование ресурсов.
Пример программы для работы с типизированными файлами
Пусть требуется составить программу, которая создает нетипизированный файл из 100 вещественных чисел и выводит на экран k-й элемент файла. Проиллюстрируем обработку созданного файла двумя разными способами: поиск элемента в файле данных прямого доступа по его номеру и поиск элемента в файле данных с последовательным доступом.
В разделе описания переменных опишем файловую переменную F, представляющую в программе нетипизированный файл вещественных чисел; вещественную переменную Р, которой будет присваиваться значение очередного элемента файла при заполнении файла случайными вещественными числами и искомого элемента файла; целую переменную типа byte К, значения которой будут указывать на номер элемента в файле.
Program UnTyped_File;
Uses Crt;
Var
F : File of real;
P : real;
К : byte;
procedure Mak_file; {Создание файла вещественных чисел}
begin
Assign(F,'a.dat') ;
Rewrite(F) ; {Открыть файл для записи}
Randomize;
for K:=l to 100 do
begin
P:=Random(100) ;
Write(F,P) ; {Записать в файл значение К-го элемента}
end;
Writeln('Создание файла вещественных чисел завершено');
Close(F); {закрыть файл}
end; {конец процедуры Mak_file}
procedure Find_Elem; {Поиск элемента в файле прямого доступа по его номеру}
begin
Assign(F,'a.dat');
Write('Введите номер нужного элемента ');
Readln(К) ;
Reset(F) ;
Seek(F,K-l); {Переместить указатель обработки на К-1-й элемент}
Read(F,P); {Присвоить значение элемента, на который указывает указатель обработки переменной Р}
Writeln(K,'-й элемент файла ',Р:6:2) ;
Close(F) ;
end; {процедура Find_Elem}
procedure Find_Fil_P; {Поиск элемента в файле последовательного доступа}
var N : byte;
begin
Assign(F,'a.dat');
Write('Введите номер нужного элемента ');
Readln(К) ;
Reset(F) ;
N:=0; {Поместить указатель обработки в начало файла}
While not Eof(F) do {Повторять, пока не будет просмотрен весь файл}
begin
Read(F,P); {Чтение элемента и смещение указателя обработки вправо на один элемент}
if N=K-1 then {Найден элемент с искомым номером}
begin
Writeln(K,'-й элемент файла равен ',Р:6:2);
Exit; {Прервать поиск, так как элемент найден}
end;
N:=N+1; (Увеличить числа элементов файла на 1}
end;
Close(F);
end ; {конец процедуры Find_Fil_P}
Begin {Основная программа}
Mak_file; {Вызов процедуры создания файла вещественных чисел}
Find_Е1еm; {Вызов процедуры поиска элемента в файле прямого доступа}
Find_Fil_P; {Вызов процедуры поиска элемента в файле с последовательным доступом}
end.
При обработке файла a.dat как файла прямого доступа для чтения определенного элемента выполняется позиционирование указателя обработки на указанный элемент, а при обработке файла a.dat как файла последовательного доступа перемещение указателя на нужный элемент осуществляется последовательным чтением элементов, начиная с первого, до тех пор, пока указатель обработки не будет установлен на искомый элемент.
Порядок выполнения работы
Изучить теоретические сведения по теме “ Разработка программы для работы с нетипизированным файлом”.
Получить у преподавателя индивидуальное задание и разработать программу для работы с нетипизированным файлом согласно заданному варианту.
Показать работающую программу преподавателю.
Ответить на контрольные вопросы.
Контрольные вопросы
Понятие нетипизированного файла. Описание нетипизированного файла.
Средства работы с нетипизированными файлами.
Пример программы для работы с нетипизированными файлами.
Лабораторная работа № 31
Изучение карты памяти. Разработка программы доступа к полям PSP
Цель работы: формирование знаний и умений по работе со схемой распределения памяти, адресацией и работой с Heap-областью. Приобретение навыков разработки программ для доступа к полям префикса программного сегмента.
Краткие теоретические сведения
Чтобы более полно представить все процессы, протекающие внутри любой программы на Паскале, необходимо знать расположение ее внутренних областей в памяти. Для каждой отдельной программы при ее запуске (загрузке в память) MS-DOS организует в памяти что-то вроде анкеты (длинной в 256 байт). Это файл, называемый префиксом программного сегмента (Program Segment Prefix (PSP)).
Система адресации MS-DOS.
ПЗУ
16 блоков по 64 кб
каждый
-
От F0000 до FFFFF
Область кассет ПЗУ
От E0000 до ……..Расширение BIOS
От D0000 до ……..От C0000 до ……..
память дисплея
ВА
Рабочее ОЗУ (10 блоков 640 кб)
Обычно под OS
…………………..
10000
00000
Блок или сегмент обозначается 16-ричной цифрой, обозначающей старшую цифру адреса. 0-блок – это адреса: от 00000 до 0FFFF. Абсолютный адрес – это адрес без учета сегментов, он не может быть > FFFFF. Физический адрес = Абсолютный адрес + Смещение. Абсолютный адрес - адрес самого сегмента (16 бит = 2 б). Смещение – адрес внутри сегмента (4 бита). Это содержимое сегментного регистра.
Таким образом, адрес любой ячейки памяти определяется парой чисел:
СЕГМЕНТ:СМЕЩЕНИЕ.
Знак $ - предшествует 16-ой записи числа.