
- •Пояснительная записка
- •Программирование на алгоритмическом языке pascal
- •«Ознакомление с работой в интегрированной среде Borland Pascal»
- •Задание 1
- •Ход работы:
- •Загрузите систему Borland Pascal.
- •После входа в систему появляется рабочий экран (рис. 2).
- •Изучите пункты главного меню.
- •Задание 2
- •Методические указания к лабораторным занятиям для учащихся.
- •Лабораторная работа №1
- •Вопросы для самоподготовки:
- •Краткие теоретические сведения
- •Задание 1
- •Ход выполнения работы.
- •Задание 2
- •Лабораторная работа №2
- •Краткие теоретические сведения
- •Правила работы с условным оператором.
- •Вопросы для самоподготовки:
- •Задание 1
- •Задание 2.
- •Задание 3
- •Правила организации цикла с параметром.
- •Вопросы для самоподготовки:
- •Задание 1
- •Задание 2
- •Решение:
- •Задачи для самостоятельного решения.
- •Лабораторная работа №4. Тема: «Разработка, отладка и испытание простых циклических алгоритмов и программ с неизвестным числом повторений».
- •Краткие теоретические сведения
- •Вопросы для самоподготовки:
- •Задание 1
- •Решение:
- •Задание 2
- •Домашнее задание
- •Вопросы для самоподготовки:
- •Определим необходимые формулы:
- •Составим графическую схему алгоритма.
- •Составим таблицу соответствия переменных.
- •В соответствии с пунктами 2 и 3 составьте программу.
- •Задание 2
- •Задание 3
- •Решение:
- •Составим графическую схему алгоритма:
- •Составим таблицу соответствия переменных
- •Составим программу на языке Pascal.
- •Задание 4
- •Лабораторная работа №6. Тема: «Разработка, отладка и испытание циклических алгоритмов и программ с известным числом повторений с внутренними ветвлениями».
- •Задание
- •Задание 2
- •Решение:
- •Задание 3
- •Решение:
- •Задание 4 (задачи повышенной сложности)
- •Решение:
- •Задания для самостоятельного решения. Напишите программы с использованием процедур.
- •Дана последовательность слов. Напечатайте все слова, предварительно преобразовав каждое из них по следующему правилу:
- •Задание 5
- •Решение:
- •Задание 8 (повышенной сложности)
- •Решение:
- •Задание для самостоятельного решения:
- •(Повышенной сложности)
- •Лабораторная работа №8. Тема: «Разработка алгоритмов и программ методом пошаговой детализации. Обработка двумерных массивов. Организация ввода-вывода с помощью текстовых файлов».
- •Вопросы для самоподготовки:
- •Краткие теоретические сведения
- •Задание 1
- •Задание 2
- •Решение:
- •Составим графическую схему алгоритма.
- •Составляем таблицу соответствия переменных.
- •Составляем программу на языке программирования Pascal.
- •Задание 3
- •Задание 4
- •Лабораторная работа №9. Тема: «Разработка алгоритмов и программ решения различных задач с использованием библиотечных модулей пользователя».
- •Краткие теоретические сведения
- •Задание
- •Задача для самостоятельного решения.
- •Лабораторная работа №10. Тема: «Разработка алгоритмов и программ обработки строк. Использование множеств для решения задач».
- •Вопросы для самоподготовки:
- •Задание 6
- •Решение:
- •Задачи для самостоятельного решения:
- •Лабораторная работа №11. Тема: «Разработка алгоритмов и программ с использованием методов внутренней сортировки».
- •Задание
- •Решение:
- •Для каждой команды в одной строке введите через пробел
- •Задание для самостоятельного решения:
- •Лабораторная работа №12. Тема: «Разработка рекурсивных алгоритмов и программ».
- •Краткие теоретические сведения
- •Задание.
- •Лабораторная работа №13. Тема: «Разработка алгоритмов и программ с использованием процедур и функций модулей crt и dos».
- •Краткие теоретические сведения
- •Задание 1
- •Задание 2
- •Задание 3
- •Задание.
- •Краткие теоретические сведения
- •Решение:
- •Задание 2
- •Андреев
- •Задание для самостоятельного решения.
- •Лабораторная работа №16. Тема: «Разработка алгоритмов и программ с использованием динамических структур данных».
- •Краткие теоретические сведения
- •Задание
- •Задание для самостоятельного решения
- •Задача о «Ханойских башнях».
- •Решение:
- •Задания для самостоятельного решения.
- •Задание для самостоятельного решения:
- •Задания для самостоятельного решения:
- •Лабораторная работа №22. Тема: «Разработка программ обработки созданных файлов».
- •Постановка задачи
- •Содержание отчета
- •Варианты задания:
- •Лабораторная работа №23. Тема: «Разработка программ с использованием прерываний bios и dos, процедурных типов».
- •Краткие теоретические сведения
- •Константы
- •Задание
- •Задание для самостоятельного решения.
- •Лабораторная работа №25. Тема: «Разработка простейших программ с использованием компонентов страницы Standart».
- •Вопросы для самоподготовки:
- •Задание 1
- •Лабораторная работа №26. Тема: «Разработка программ обработки массивов с использованием компонентов страницы Standart».
- •Задание
- •Procedure tForm1.Button2Click (Sender: tObject); {обработка массива}
- •Лабораторная работа №32. Тема: «Разработка программ создания и использования мультимедийных возможностей».
- •Задание
- •Лабораторная работа №34. Тема: «Создание и использование справочной системы».
- •Краткие теоретические сведения
- •Задание
- •Ход работы:
- •Лабораторная работа №35. Тема: «Создание установочного диска».
- •Задание
Задание 2
Напишите программу, которая использует добавление, поиск, удаление и вывод узлов динамического списка.
Program dinlist1;
type
s_name=string[20];
p_student=^student;
student=record
name: s_name;
next: p_student;
end;
var
head: p_student; {начало списка}
buf: s_name; {буфер для ввода с клавиатуры}
{добавления в начало списка}
procedure AddToList (var head: p_student; name: s_name);
var
curr: p_student;
begin
new (curr);
curr^ .name:=name;
curr^ .next:=head;
head:=curr;
end;
{вывод списка}
procedure PrintList (p: p_student);
var
curr: p_student;
begin
curr:=p;
while curr<>nil do begin
writeln (curr^. name);
curr:=curr^. next;
end;
end;
{удаление узла из списка}
function DelNode (var head: p_student; name: s_name): Boolean;
var
curr: p_student;
p: p_student;
done: Boolean;
begin
p:=nil;
curr:=head;
done:=FALSE;
while (done=FALSE) and (curr<>nil) do begin
if curr^. name=name
then begin
if p=nil
then head:=curr^. next
else p^.next:=curr^. next;
done:=TRUE;
end
else begin
p:=curr;
curr:=curr^. next;
end;
end;
DelNode:=done;
end;
{основная программа}
begin
repeat
write (‘Фамилия->’);
readln (buf);
if length (buf)<>0
then AddToList (head, buf);
until length (buf)=0;
writeln (‘** Введенный список **’);
PrintList (head);
writeln (‘** Удаление из списка **’);
repeat
write (‘Фамилия->’);
readln (buf);
if length (buf)<>0 then
if DelNode (head, buf)
then writeln (‘Элемент” ‘, buf, ‘ “удален из списка’)
else writeln (‘Элемента” ‘, buf, ‘”в списке нет’);
until length (buf)=0;
writeln (‘** Список после удаления узлов **’);
PrintList (head);
end.
Вот пример работы программы:
Фамилия-> Иванов
Фамилия-> Петров
Фамилия-> Васильев
Фамилия-> Андреев
Фамилия->
** Введенный список **
Андреев
Васильев
Петров
Иванов
** Удаление из списка **
Фамилия-> Андреев
Элемент “Андреев” удален из списка
Фамилия-> Петров
Элемент “Петров” удален из списка
Фамилия-> Сидоров
Элемента “Сидорова” в списке нет
Фамилия->
** Список после удаления узлов **
Васильев
Иванов
Задание для самостоятельного решения.
Напишите программу, которая формирует упорядоченный список студентов по убыванию. Порядок следования записей в списке определяется содержимым поля name.
Лабораторная работа №16. Тема: «Разработка алгоритмов и программ с использованием динамических структур данных».
Цель работы: получение навыков составления программ на языке Pascal с использованием динамических структур данных.
Краткие теоретические сведения
Динамической переменной называется переменная, память которой выделяется во время работы программы. Выделение памяти для динамической переменной осуществляется вызовом процедуры new. У процедуры new один параметр – указатель на переменную определенного типа, память для которой надо выделить. Например, если р – указатель на переменную типа real, то в результате выполнения new (p); будет создана переменная типа real, и переменная-указатель р будет содержать адрес этой переменной.
У динамической переменной нет имени, поэтому обратиться к ней можно только при помощи указателя.
Следующая программа демонстрирует создание и использование динамических переменных.
Program p;
Var
p1, p2, p3: ^integer;
begin
{указатели р1, р2, р3 существуют и их значения - nil}
new (p1); {создадим переменную типа integer и ее адрес присвоим переменной р1}
new (p2);
new (p3);
{существуют указатели р1, р2, р3 и три переменные типа integer}
write (‘Введите два целых числа через пробел и нажмите <Enter>’);
readln (p1^, p2^);
p3^:=p1^+p2^;
writreln (‘Сумма введенных чисел равна’, p3^);
end.
Связанные списки.
Указатели и динамические переменные позволяют создавать сложные динамические структуры данных, такие как связанные списки и деревья.
Связанный вписок можно изобразить графически, (рис. 13).
…
рис. 13
Каждый элемент списка представляет собой запись, состоящую из двух частей. Первая часть – информация. Вторая часть обеспечивает связь со следующим, и, возможно, с предыдущим элементом списка. Список, в котором обеспечивается связь только со следующим элементом, называется односвязным.
Чтобы программа могла использовать список, надо определить тип компонентов списка и переменную-указатель на первый элемент списка. Вот пример объявления списка студентов:
type
{связь между элементами списка}
p_stud=^student;
{описание типа элемента списка}
student=record
surname: string[20]; {фамилия}
name: string[20]; {имя}
group: integer; {номер группы}
address: string[60]; {домашний адрес}
next: p_stud; {указатель на следующий элемент списка}
end;
var
head: p_stud; {указатель на первый элемент списка}
Добавлять данные можно в начало, в конец или в нужное место списка. Во всех этих случаях необходимо корректировать указатели. На следующем рисунке изображен процесс добавления элементов в начало односвязного списка, (рис. 14).
h
NIL
список
пустой: head
ни на что не указывает
head
после
добавления одного элемента head
указывает на этот элемент
h
ead
после добавления второго элемента в начало
списка head указывает на этот элемент
рис. 14