1. ЦЕЛЬ РАБОТЫ:
Целью работы является изучение приемов программирования вычислительных задач с использованием таких подпрограмм пользователя как функции.
2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Любая задача решается гораздо легче, если разбить ее на части - процедуры и функции. Например, задача по созданию школьной базы данных разбивается на три процедуры: создание БД, использование данных БД, корректировка БД. В пользовательские процедуры и функции можно передавать значения и после выполнения получать результат. Сначала рассмотрим процедуры.
ПРОЦЕДУРЫПОЛЬЗОВАТЕЛЯ
Процедура начинается словом PROCEDURE, по структуре аналогична программе:
PROCEDURE <имя> (необязательные формальные параметры);
LABEL...; CONST...; TYPE...; VAR...;
BEGIN
<операторы>
END;
Для выполнения процедуры достаточно указать ее имя и, если они нужны, передаваемые в процедуру данные (фактические параметры), совпадающие по типу и порядку следования с требуемыми (формальными параметрами).
ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ
Функция начинается словом FUNCTION, за которым следует имя, необязательный список формальных параметров и тип возвращаемого результата:
FUNCTION <имя> (Необязательные формальные параметры): <тип результата>;
LABEL...; CONST...; TYPE...; VAR...;
BEGIN
<операторы>
END;
В разделе операторов функции должен находиться по крайней мере один оператор, присваивающий имени функции значение. В точку вызова возвращается результат последнего присваивания.
ПАРАМЕТРЫ
Если список параметров начинается словом VAR, то они передаются из процедуры после ее выполнения и результаты присваиваются соответствующим фактическим параметрам. Если при перечислении формальных параметров VAR не указано, то эти значения передаются в процедуру.
Изучите пример:
Дополнительно:
1. Три золотых правила.
2. Глобальные и локальные переменные.
3. Формальные и фактические параметры.
4. Параметры-значения и параметры-переменные.
1. Три золотых правила:
1. Если надо что-то вычислить и получить в точке вызова результат - используем функцию;
2. Если надо что-то сделать: считать данные с диска, очистить часть экрана, закрасить экран в другой цвет и т.п. - используем процедуру;
3. При вызове процедуры или функции тип фактических параметров должен совпадать с типом формальных параметров (т.е. они должны быть согласованы).
2. Глобальные переменные (константы, типы) - переменные (константы, типы), объявленные в программе вне процедуры или функции.
Локальные - существуют только внутри процедуры или функции, объявленные либо в списке параметров, либо в разделе VAR внутри процедуры или функции (для констант - раздел CONST, для типов - TYPE).
При совпадении имен локальной и глобальной переменной используется в подпрограмме локальное имя (если в подпрограмме используется цикл FOR, то параметр цикла - локальная переменная).
3. Формальные параметры - описываются в заголовке объявления подпрограммы.
Фактические параметры - которые подставляются на их место при вызове подпрограммы.
4. Параметры-значения - локальные переменные подпрограммы, стартовые значения которых задаются при вызове подпрограммы из внешних блоков, могут изменять свои значения, но изменения только локальные.
Параметры-переменные - локальные переменные подпрограммы, стартовые значения которых задаются при вызове подпрограммы из внешних блоков, могут изменять свои значения и изменения носят глобальный характер (т.е. передаются в вызывающие операторы).
Пример.
Возведение числа в квадрат, если квадрат числа больше 100, то программа возвращает значение 100.
(pr1- использует функцию, pr2-использует для решения той же задачи прцедуру)
program pr1;
var flag:boolean; {flag-глобальная переменная}
function q(x:real):real; {x-локальная переменная,
парметр-значение,
формальный параметр}
const max=100; {локальная константа}
var x2:real; {x2-локальная переменная}
begin
x2:=sqr(x);
flag:=(x2>max);
if flag then x2:=max;
q:=x2;
end;
Begin
writeln(q(5),'Флаг',flag); {5-фактический параметр}
End.
program pr2;
var flag:boolean; {flag-глобальная переменная}
procedure q(x:real;var sq:real); {x-локальная переменная,
парметр-значение,
формальный параметр}
const max=100; {локальная константа}
var x2:real; {x2-локальная переменная}
begin
x2:=sqr(x);
flag:=(x2>max);
sq:=x2;
end;
var sqGlobal:real;
Begin
q(5,sqGlobal); {5-фактический параметр}
writeln(sqGlobal,'Флаг',flag);
End.
3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания.
4.ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы, представленный в виде таблицы.
5. КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Что представляют собой формальные и фактические параметры программы и как организовать их согласование?
2. В какую точку программы осуществляется выход из функции?
3. В чем различие между локальными и глобальными переменными и могут ли совпадать их имена?
4. Назвать два вида локальных переменных и описать их различие.
6. ВАРИАНТЫЗАДАНИЙ
№ по списку | ||||||||||||||||||||||||||||||
№ задания |
Задание:
1. Написать программу, содержащую функцию, которая вычисляет объем цилиндра. Параметрами функции должны быть радиус и высота цилиндра.
2. Написать программу, содержащую функцию, которая возвращает процент от числа, полученного в качестве аргумента.
3. Написать программу, содержащую функцию, которая вычисляет факториал числа, введенного с клавиатуры.
Лабораторная работа №10
РАБОТА С ФАЙЛАМИ
1. ЦЕЛЬ РАБОТЫ:
Целью работы является изучение приемов работы с переменными файлового типа.
2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Под файлом понимается либо именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, электронного "виртуального" диска), либо логическое устройство - потенциальный источник или приемник информации.
Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN:
ASSIGN (<ф.п.>, <имя файла или л.у.>);
Здесь
<ф.п.> - файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа);
<имя файла или л.у.> - текстовое выражение, содержащее имя файла или логическое устройство.
Если имя файла задается в виде пустой строки, например, ASSIGN(f,"), то в зависимости от направления обмена данными файловая переменная связывается со стандартным файлом INPUT или OUTPUT.
Для чтения файл инициируется с помощью стандартной процедуры RESET:
RESET (<ф.п.>);
Здесь
<ф.п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством - приемником информации.
В Турбо Паскале разрешается обращатся к типизированным файлам, открытым процедурой RESET (т.е. для чтения информации), с помощью процедуры WRITE (т.е. для записи информации). Такая возможность позволяет легко обновлять ранее созданные типизированные файлы и при необходимости расширять их. Для текстовых файлов, открытых процедурой RESET, нельзя использовать процедуру WRITE или WRITELN.
Стандартная процедура
REWRITE (<ф.п.>)
инициирует запись информации в файл или в логическое устройство, связанное ранее с файловой переменной. Процедурой REWRITE нельзя инициировать запись информации в ранее существовавший дисковый файл: при выполнении этой процедуры старый файл уничтожается и никаких сообщений об этом в программу не передается. Новый файл подготавливается к приему информации и его указатель принимает значение 0.
Стандартная процедура
APPEND (<ф.п.>)
инициирует запись в ранее существовавший текстовый файл для его расширения, при этом указатель файла устанавливается в его конец. Процедура APPEND применима только к текстовым файлам, т.е. их файловая переменная должна иметь тип TEXT. Процедурой APPEND нельзя инициировать запись в типизированный или нетипизированный файл. Если текстовый файл ранее уже был открыт с помощью RESET или REWRITE, использование процедуры APPEND приведет к закрытию этого файла и открытию его вновь, но уже для добавления записей.
Процедура CLOSE закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой ASSIGN, сохраняется.
Формат сообщения:
CLOSE(<ф.п.>)
При создании нового или расширении старого файла процедура обеспечивает сохранение в файле всех новых записей и регистрацию файла в каталоге.
Функции процедуры CLOSE выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы. Поскольку связь файла с файловой переменной сохраняется, файл можно повторно открыть без дополнительного использования процедуры ASSIGN.
3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания.
4.ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы.
5.КОНТРОЛЬНЫЕ ВОПРОСЫ
1. В какое место файла можно добавлять новые элементы:
- в начало,
- в середину,
- в конец,
- куда угодно,
- никуда?
2. Если не переписывать файл заново, то значения каких его элементов можно менять:
- только первого;
- только последнего;
- каких угодно;
- никаких.
3. Если не переписывать файл заново, то какие из его элементов можно удалять:
- только первый;
- только последний;
- какие угодно;
- никакие.
4. Определить содержимое файла f после выполнения следующих операторов:
rewrite(f);
for i:=1 to 3 do write(f,i*2);
close(f);
5. Определить содержимое файла f после выполнения следующих операторов:
rewrite(f);
for i:=3 downto 1 do write(f,i);
close(f);
i:=5;
append(f);
write(f,i);
close(f);
6. Определить содержимое файла f после выполнения следующих операторов:
i:=5;
rewrite(f);
write(f,i);
close(f);
rewrite(f);
if eof(f) then write(f,i) else write(f,i-5);
close(f);
6.ЗАДАНИЕ
№ задания | |||||||||||||||
№ по журналу | |||||||||||||||
Состоит из двух частей:1-общая для всех, 2-по варианту.
1). Организовать процедуру, позволяющую записать в текстовый файл введенную с клавиатуры строку.
2-1).Удвоить в данном файле каждую цифру.
2-2).Заменить в данном файле каждую цифру на следующую по величине.
2-3).Оставить в данном файле только первые вхождения каждой литеры.
2-4).Заменить в данном файле ккаждую литеру 'a' на две литеры 'b'.
2-5).Дописать в начало файла фразу 'Turbo Pascal'.
Лабораторная работа №11
МОДУЛЬ SYSTEM
1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ
Целью работы является изучение основных процедур и функций модуля System.
2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Модуль System содержит все стандартные и встроенные процедуры и функции Turbo Pascal. Модуль System реализует низкоуровневые подпрограммы для операций ввода/вывода, обработки строк, управления оверлеями и динамическое распределение памяти. Модуль System используется автоматически любым модулем или программой и никогда не требуется указывать его в директиве uses.
Процедуры управления программой.
Процедура | Описание |
Exit | Позволяет немедленно выйти из текущего блока |
Halt | Останавливает выполнение программы и возвращает в операционную систему |
RunError | Останавливает выполнение программы и генерирует ошибку времени выполнения |
Функции преобразования.
Функция | Описание |
Chr | Возвращает символ с заданным порядковым номером |
Ord | Возвращает порядковый номер, соответствующий символу |
Round | Округляет значение вещественного типа до значения типа LongInt |
Trunc | Усекает значение вещественного типа до значения типа LongInt |
Арифметические функции.
Функция | Описание |
Abs | Возвращает абсолютное значение аргумента |
ArcTan | Возвращает арктангенс аргумента |
Cos | Возвращает косинус аргумента |
Exp | Возвращает экспоненту аргумента |
Frac | Возвращает дробную часть аргумента |
Int | Возвращает целую часть аргумента |
Ln | Возвращает натуральный логарифм аргумента |
Pi | Возвращает значение числа Pi {3.1415926535897932385} |
Sin | Возвращает синус аргумента |
Sqr | Возвращает аргумент в квадрате |
Sqrt | Возвращает квадратный корень аргумента |
Процедуры и функции для ординальных типов.
Процедура | Описание |
Dec | Уменьшает значение переменной |
Inc | Увеличивает значение переменной |
Функция | Описание |
Odd | Проверяет, является ли аргумент нечетным числом |
Pred | Возвращает предшествующее значение аргумента |
Succ | Возвращает его последующее значение |
Строковые процедуры.
Процедура | Описание |
Delete | Удаляет подстроку из строки |
Insert | Вставляет подстроку в строку |
Str | Преобразует численное значение в его строковое представление |
Val | Преобразует строковое значение в его численное представление |
Строковые функции.
Функция | Описание |
Concat | Выполняет слияние последовательности строк |
Copy | Возвращает подстроку из строки |
Length | Возвращает динамическую длину строки |
Pos | Производит поиск подстроки в строке |
Процедуры и функции для ввода/вывода.
Процедура | Описание |
Assign | Присваивает имя внешнего файла файловой переменной |
ChDir | Меняет текущую директорию |
Close | Закрывает открытый файл |
Erase | Удаляет внешний файл |
GetDir | Возвращает текущую директорию на заданном диске |
MkDir | Создает директорию |
Rename | Переименовывает внешний файл |
Reset | Открывает существующий файл |
Rewrite | Создает и открывает новый файл |
RmDir | Удаляет пустую директорию |
Seek | Передвигает текущую позицию файла на указанную компоненту (не используется с текстовыми файлами) |
Truncate | Усекает размер файла до текущей позиции в файле. (Не используется с текстовыми файлами) |
Функция | Описание |
Eof | Возвращает для файла состояние end-of-file (конец Файла) |
FilePos | Возвращает текущую позицию в файле. (Не используется с текстовыми файлами) |
FileSize | Возвращает текущий размер файла. (Не используется с текстовыми файлами) |
IOResult | Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода. |
Процедуры и функции для текстовых файлов.
Процедура | Описание |
Append | Открывает существующий файл для добавления |
Flush | Выводит содержимое буфера файла в физический файл |
Read | Считывает одно или более значений из текстового файла в одну или более переменных |
Readln | Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла |
SetTextBuf | Назначает буфер ввода/вывода для текстового файла |
Write | Записывает в текстовый файл одно или более значений |
Write | Выполняет те же действия, что и Write, а затем добавляет к файлу маркер конца строки |
Функция | Описание |
Eoln | Возвращает для файла состояние end-of-line (конец строки) |
SeekEof | Возвращает для файла состояние end-of-line (конец строки). Предварительно пропускает все пробелы, символы табуляции и признаки конца строки. |
SeekEoln | Возвращает для файла состояние end-of-line (конец строки). В отличии от Eoln предварительно пропускает все пробелы и символы табуляции. |
Нетипизированные файлы.
Процедура | Описание |
BlockRead | Считывает в переменную одну или более записей |
BlockWrite | Записывает одну или более записей из переменной |
Функции для работы с указателями и адресами.
Процедуры и функции динамического распределения памяти.
Эти процедуры и функции используются для управления кучей – областью памяти, которая занимает всю свободную память, остающуюся при выполнении программы.
Процедуры и функции разного назначения.
Процедура | Описание |
Randomize | Инициализирует случайным значением встроенный генератор случайных чисел |
Функция | Описание |
Hi | Возвращает старший байт аргумента |
Lo | Возвращает младший байт аргумента |
Random | Возвращает случайное число |
UpCase | Преобразует символ в прописной |
3. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
1. Ознакомиться с теоретическими сведениями данной работы.
2. Ответить на контрольные вопросы.
3. Выполнить свой вариант задания.
4. ОФОРМЛЕНИЕ ОТЧЕТА
Отчет о работе должен содержать номер, название и цель работы, ответы на контрольные вопросы, текст программы и результат выполнения программы.
5. контрольные вопросы
1. Следует ли указывать в директиве USES модуль SYSTEM?
2. В чем разница в процедурах Halt и Exit (своими словами)?
3. Какого типа может быть параметр-переменная используемая в функциях Round и Trunc, и в чем разница между этими функциями (разницу показать на примере)?
4. Какая процедура возвращает текущую длину строки?
5. Какая процедура позволяет создавать подкаталог?
6. ВАРИАНТЫЗАДАНИЙ
№ задания | |||||||||||||||
№ по журналу | |||||||||||||||
Составить программу (по варианту), которая использует следующие процедуры и функции модуля System:
Exit, Chr, Abs, ArcTan, Dec,Random | |
Halt, Ord, Exp, Cos, Inc,Random | |
Exit, Round, Frac, Sin, Odd,Random | |
Halt, Trunc, Int, ArcTan, Pred,Random | |
Exit, Chr, Sqr, Cos, Succ,Random | |
Halt, Ord, Sqrt, Sin, Dec,Random | |
Exit, Round, Abs, ArcTa Inc n,,Random | |
Halt, Trunc, Exp, Cos, Odd,Random | |
Exit, Chr, Frac, Sin, Pred,Random | |
Halt, Ord, Int, ArcTan, Succ,Random | |
Exit, Round, Sqr, Cos, Dec,Random | |
Halt, Trunc, Sqrt, Sin, Inc,Random | |
Exit, Chr, Abs, ArcTan, Odd,Random | |
Halt, Ord, Exp, Cos, Pred,Random | |
Exit, Round, Frac, Sin, Succ,Random |
Лабораторная работа №12