507.методическое пособие по дисциплине «информатика» ч1 программирование на языке pascal
1. МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
«Северный (Арктический) федеральный университет
имени М.В. Ломоносова»
Институт Энергетики и транспорта
Методическое пособие по дисциплине «Информатика»
часть 1 Программирование на языке PASCAL
Архангельск 2014
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
4. 4
ВВЕДЕНИЕ.
Паскаль (англ. Pascal) — язык программирования общего назначения. Был
создан Николаусом Виртом в 1970. Язык назван в честь французского математика,
физика, литератора и философа Блеза Паскаля, который создал первую в мире
механическую машину, складывающую два числа. Первая публикация Вирта о
языке датирована 1970 годом, представляя язык, автор указывал в качестве цели
его создания — построение небольшого и эффективного языка, способствующего
хорошему стилю программирования, использующему структурное
программирование и структурированные данные.
Новый язык оказался настолько удачным, что быстро завоевал
популярность. Его популярность выросла в связи с массовым распространением
персональных компьютеров и выпуском в середине 80-х годов прошлого века
фирмой Borland среды разработки Turbo Pascal. С тех пор Pascal - классический
язык программирования.
Важным шагом в развитии языка является появление свободных реализаций
языка Паскаль Free Pascal и GNU Pascal, которые не только вобрали в себя черты
множества других диалектов языка, но и обеспечили чрезвычайно широкую
переносимость написанных на нѐм программ (например GNU Pascal поддерживает
более 20 различных платформ, под более чем 10 различными операционными
системами, Free Pascal обеспечивает специальные режимы совместимости с
различными распространѐнными диалектами языка, такими как Turbo Pascal
(полная совместимость), Delphi и другими). Данной методическое пособие
предназначено для получения основных навыков работы с языком
программирования ПАСКАЛЬ
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
5. 5
Запуск системы Турбо Паскаль
Система Турбо Паскаль довольно значительна по объему. При
развертывании системы на жестком диске обычно создается каталог с именем ТР
(или PAS, TURBOPAS, PASCAL и т.п.), в который помещаются все файлы,
которые были установлены. Для вызова Турбо Паскаля необходимо запустить
файл TURBO.EXE. Этот файл содержит готовую к работе диалоговую систему
программирования Турбо Паскаль. В него входят минимально необходимые части
Турбо Паскаля (текстовый редактор, компилятор, компоновщик, загрузчик). Для
нормальной работы в диалоговой среде понадобятся также основная библиотека,
располагающаяся в файле, и справочная служба. В принципе, этих файлов
достаточно для написания, компиляции и выполнения лабораторных работ в
Турбо Паскаль.
После успешного вызова системы экран ПК приобретает вид, показанный на
рисунке 1.
Рисунок 1 – Внешний вид рабочего окна Турбо Паскаль
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
6. 6
Основные клавиши и функции
Верхняя строка содержит «меню» возможных режимов работы Турбо
Паскаля, нижняя - краткую справку о назначении основных функциональных
клавиш. Вся остальная часть экрана принадлежит окну редактора, очерченному
двойной рамкой и предназначенному для ввода и коррекции текстов программ. В
его верхней строке приводятся имя того файла, откуда был прочитан текст
программы (новому файлу присваивается имя NONAME00.PAS), два специальных
поля, используемых при работе с устройством ввода «мышь» (эти поля выделены
квадратными скобками), и цифра 1 - номер окна. В Турбо Паскале можно работать
одновременно с несколькими программами (или частями одной крупной
программы), каждая из которых может располагаться в отдельном окне редактора.
Функциональные клавиши используются для управления средой Турбо
Паскаля. Они обозначаются F1, F2, ..., F12 и располагаются в самом верхнем ряду
клавиатуры. С каждой из этих клавиш связывается некоторая команда меню.
Действие почти всех функциональных клавиш можно модифицировать тремя
особыми клавишами: Alt, Ctrl и Shift. В дальнейшем такое совместное нажатие
двух клавиш будем обозначать чертой. Например, Alt-F3 означает, что вместе с
клавишей Alt необходимо нажать клавишу F3, Ctrl-F9 - вместе с Ctrl нажимается
F9 и т.д.
Ниже приводятся команды, которые передаются среде Турбо Паскаля
функциональными клавишами и некоторыми их комбинациями с клавишами Ctrl и
Alt:
Fl - обратиться за справкой к встроенной справочной службе (Help-помощь);
F2 - записать редактируемый текст в дисковый файл;
F3 - прочитать текст из дискового файла в окно редактора;
F4 - используется в отладочном режиме: начать или продолжить исполнение
программы и остановиться перед исполнением той ее строки, на которой стоит
курсор;
F5 - открыть активное окно на весь экран;
F6 - сделать активным следующее окно;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
7. 7
F7 - используется в отладочном режиме: выполнить следующую строку
программы; если в строке есть обращение к процедуре (функции), войти в эту
процедуру и остановиться перед исполнением первого ее оператора;
F8- используется в отладочном режиме: выполнить следующую строку
программы; если в строке есть обращение к процедуре (функции), исполнить ее и
не прослеживать ее работу;
F9 - компилировать программу, но не выполнять ее;
F10 - перейти к диалоговому выбору режима работы с помощью главного
меню;
Ctrl-F9 - выполнить прогон программы: компилировать программу,
находящуюся в редакторе, загрузить ее в оперативную память и выполнить, после
чего вернуться в среду Турбо Паскаля.
Alt-F5 - сменить окно редактора на окно вывода результатов работы
(прогона) программы.
Чаще всего, Вам понадобятся команды Ctrl-F9 для проверки работы Вашей
программы и Alt-X - для выхода из Турбо Паскаля. Клавиши F2 и F3 помогут Вам
в работе с Вашим каталогом. Командой Alt-F5 Вы в любой момент сможете
просмотреть данные, выданные на экран в результате прогона программы.
Сохранение программы
Основной формой хранения текстов программ вне среды являются файлы.
После завершения работы с Турбо Паскалем можно сохранить текст новой
программы для того, чтобы использовать его в следующий раз. Для обмена
данными между файлами и редактором среды предназначены клавиши F2 (запись
в файл) и F3 (чтение из файла). Если Вы создаете новую программу, то среда еще
не знает имя того файла, в который Вы захотите поместить текст этой программы,
и поэтому она присваивает ей стандартное имя NONAME00.PAS (NO NAME - нет
имени). Для сохранения текста программы в файле нужно нажать F2. Пройдя по
команде File – Save as (Сохранить в файле с именем...) - название программы
(должно состоять из 8 латинских символов или цифр) – ОК (Рисунок 2).
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
8. 8
Рисунок 2 – Сохранение программы
Если в имени опущено расширение, среда присвоит файлу стандартное
расширение PAS. Если Вы захотите завершить работу с Турбо Паскалем, а в
редакторе остался не сохраненный в файле текст, на экране появится окно с
запросом.
Построение блок-схемы алгоритма
Для того, чтобы правильно написать программу в Турбо Паскаль,
необходимо создать блок-схему алгоритма будущей программы. Элементы блок-
схемы приведены на рисунке 3, их нужно запомнить. По созданной блок-схеме вам
не составит труда написать код программы.
Рассмотрим построение блок-схеме на примере простого линейного
алгоритма.
Пример: Вычислить периметр прямоугольника (Р), если его стороны
соответственно равны: а=2, в=4 с помощью Турбо Паскаль.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
9. 9
Рисунок 3 Элементы блок-схемы алгоритма программы
Для построения блок-схемы удобно будет представить алгоритм
выполнения:
1) Начало программы.
2) Переменные, которые будут использоваться для вычисления
периметра прямоугольника (а,в,Р).
3) Формула для вычисления периметра прямоугольника Р=2(а+в).
4) Вывод решения на экран.
5) Конец программы.
Блок-схема алгоритма представлена на рисунке 4:
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
10. 10
Рисунок 4 Блок-схема алгоритма
Опираясь на данную блок-схему, можно написать код программы. Для того
чтобы правильно составить программу познакомимся с основными операциями и
функциями в Турбо Паскаль.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
11. 11
Написание конструкций языка
Написание конструкций языка осуществляется в соответствии с
синтаксисом и использованием принятого алфавита, который включает в себя
буквы, цифры и специальные символы.
1. Буквы латинского алфавита
2. Цифры арабские
3. Знаки :=, +, -, *, /, <, >, <=, >=,<>
4. Ключевые слова (служебные)
Ключевые слова (служебные), которые будут необходимы в ходе написания
программы:
PROGRAM –программа
BEGIN – начало программы
VAR – описание блока переменных
WRITE, WRITELN – обеспечивает вывод информации в текстовый файл или
передачу ее на логическое устройств
READ, READLN - обеспечивает ввод символов, строк и чисел
END – завершение программы.
Слова Program, begin и end выделяют две части программы - раздел
описаний и раздел операторов. Такая структура обязательна для любой
программы, что является следствием жесткого требования языка: любой
нестандартный идентификатор, используемый в исполняемых операторах, должен
быть предварительно описан в разделе описаний.
В рассматриваемых далее программах понадобятся следующие типы
данных:
• INTEGER - целочисленные данные, во внутреннем представлении
занимают 2 байта; диапазон возможных значений - от -32768 до +32767; данные
представляются точно;
• REAL - вещественные данные, занимают 6 байт; диапазон возможных
значений модуля - от 2.9Е-39 до 1.7Е+38; точность представления данных - 11...12
значащих цифр;
• CHAR - символ, занимает 1 байт;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
12. 12
• STRING - строка символов, занимает МАХ+1 байт, где МАХ -
максимальное число символов в строке;
• BOOLEAN - логический тип, занимает 1 байт и имеет два значения:
FALSE (ложь) и TRUE (истина).
Для вычисления отношения введенных чисел используется один из
основных операторов Турбо Паскаля - оператор присваивания. В его левой части
указывается имя переменной, правая часть представляет собой выражение того же
типа, что и переменная. Пара символов «: =», связывающая левую и правую части
оператора присваивания, означает «присвоить значение». Запомним: в операторах
присваивания Турбо Паскаля всегда используются символы «: =», в то время как
при описании констант -одиночный символ «=». Пример блок-схемы программы с
описанием операторов приведен на рисунке 5
Рисунок 5 – Блок-схема алгоритма и описание функций языка Паскаль.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
13. 13
Теперь напишем код программы в Паскале. Пример на рисунке 6.
Рисунок 6 – Пример написания программы
После написания кода программы сохраняем ее и проверяем на ошибки
(Рисунок 7).
Рисунок 7 Проверка и компиляция программы в машинные коды
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
14. 14
Если при написании кода нет ошибок, то появится следующий экран
(рисунок 8)
Рисунок 8 Успешное завершение компиляции программы
Данное окно позволяет запустить программу и вычислить периметр
искомого прямоугольника (рисунок 9). Запускаем программу:
Рисунок 9 Окно запуска программы.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
15. 15
Вводим значения сторон прямоугольника и получаем искомый периметр
(рисунок 10).
Рисунок 10 Вывод результатов расчета на экран
Написание программ с использованием разветвляющихся и циклических
алгоритмов
Для решения таких алгоритмов используются определенные операторы:
- оператор безусловного перехода Go to;
- составной оператор;
-условный оператор If;
- условный оператор Case;
- оператор цикла For;
- оператор цикла While;
- оператор цикла Repeat.
Оператор Go to применяется в случаях, когда после выполнения некоторого
оператора следует выполнить не следующий по порядку, а какой – либо другой,
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
16. 16
отмеченный меткой оператор. Метка может содержать как цифровые, так и
буквенные символы.
Оператор If
Оператор If изменяет порядок выполнения операторов в зависимости от
истинности или ложности некоторого условия. Существует два варианта
оператора:
1. If <условие> Then <оператор 1> Else <оператор 2>
2. If <условие> Then <оператор>
Условие может быть простым или сложным. Сложные условия образуются с
помощью логических операций AND, OR, NOT. При записи условий могут
использоваться все возможные операции отношения. Результат выражения всегда
имеет булевский тип (истина или ложь).
В первом варианте, если условие принимает значение "Истина",
выполняется оператор 1, если условие - "Ложь", выполняется оператор 2.
Пример: Создать разветвляющийся алгоритм линейной структуры.
Исходные данные:
Начнем с построения блок-схемы алгоритма (рисунок 11).
После того, как мы построили блок-схему алгоритма, строго следуя ей,
пишем код программы в Turbo Pascal.
Начало программы будет таким же, как и в написании линейного алгоритма,
изменится только блок описания условия:
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
17. 17
Рисунок 11 Блок-схема программы с оператором условного перехода
…
If x<=0 then
begin y1:=sin(1.5*x+a);
Writeln (‗y1=‘, y1:6:2);
End
else then
begin y2:=EXP(-(SQR(x)-a));
Writeln (‗y2=‘, y2:6:2);
End
…
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
19. 19
Оператор цикла For
Оператор цикла For подходит для решения задач с известным числом
повторений. Рассмотрим пример, в ходе которого мы и познакомимся с этим
оператором.
Пример: Создать циклический алгоритм, вычислить сумму 10 членов ряда.
Блок-схема алгоритма представлена на рисунке 12:
Рисунок 12 Блок-схема программы с использованием оператора For
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
20. 20
Код программы будет выглядеть следующим образом:
Var i,Kn: Integer;
y1,y,UN:real;
Begin
Writeln (‗введите значения Kn‘);
Readln (Kn);
y:=0; - первоначально значение функции у
For i:=1 to kn do - параметр цикла от 1 до 10
Begin UN:=1/SQR(i); - определение значения i–того члена ряда
y:=y+UN; - к первоначальному значению прибавляется
значение i–того члена ряда пока не будет
выполнен цикл.
END;
Y1:=3*(SQRT(y)); - расчет значения итоговой функции
Writeln (‘Y1=’,Y1:6:2); - вывод результата
End.
Оператор цикла While и Repeat
Оператор цикла While и Repeat для решения задач с неизвестным числом
повторений, также важно запомнить, что оператор цикла While (до тех пор пока), а
оператор цикла Repeat (после того как).
Для заданий, когда число повторений цикла заранее неизвестно и действия,
предусмотренные в цикле, могут вообще не выполняться и служит оператор цикла
с предусловием.
Разберем на примере:
Вычислить с точностью е=0,001 значение функции. Суммирование
закончить при выполнении условия ,
|Un |≤e
где Un – общий член ряда;
n – номер члена ряда, n=1,2,3…n.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
21. 21
Блок-схема программы представлена на рисунке 13
Рисунок 13 Блок-схема программы с использованием оператора While
В блоке описания переменных необходимо указать все переменные, которые
будут использоваться в написании программы, для того, чтобы избежать ошибок
во время компиляции.
При выполнении этого оператора цикла последовательность операторов,
находящихся между словами Repeat и until, выполнится один и более раз. Этот
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
22. 22
процесс завершается, когда после очередного выполнения заданной
последовательности операторов логическое выражение примет значение True.
Блок-схема программы с использованием оператора Repeat представлена на
рисунке 14
Рисунок 14 Блок-схема программы с использованием оператора Repeat
Табулирование функций
Вычисление значений функции при изменении аргумента от некоторого
начального значения до некоторого конечного значения с определенным шагом
это и есть табулирование. Говоря простым языком, вычисление значения функции
от изменяющегося алгоритма с известным шагом. Решением будет таблица
значений аргумента и функции, которая появится на экране после прохождения
компиляции.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
23. 23
Основные моменты:
В блоке переменных прописываем аргумент (х), величину шага (dx) и
количество повторений (kn).
В блоке ввода данных нарисуем шапку будущей таблицы (см. пример)
После введения вычисляемой функции не забудьте о приращения шага.
Пример:
…
Writeln (― ―);
Readln ();
Writeln (―_____________________‖);
Writeln (―| x | y |‖); построение таблицы
Writeln (―_____________________‖);
…
х:=x+dx; приращение функции
Далее в решении задач для самостоятельного решения необходимо
воспользоваться примером, все остальные части программы уже знакомы Вам из
предыдущих работ .
Массивы
Одномерные массивы.
Необходимость в массивах возникает всякий раз, когда при решении задачи
приходится иметь дело с большим, но конечным количеством однотипных
упорядоченных данных.
Массив – это упорядоченный набор фиксированного количества некоторых
значений.
Формат описания массива
<имя массива>:array [<количество>] of <тип компонента>
<имя массива> - идентификатор массива
Array – массив
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
24. 24
<количество> - количество элементов в массиве
Of - для
<тип переменных> - описание типа переменных в массиве.
Примеры:
Описание массива состоящего из 100 элементов:
A:array [1..100] of real;
Описание массива по годам 1901-2000:
Vek: array [1901..2000] of integer.
Для использования случайных чисел в Турбо Паскале используются
операторы random:real - генерирует случайные числа в диапазоне 0...0.99.
random(i:word):word - генерирует случайные числа в диапазоне 0...1.
randomize - изменение базы генератора случайных чисел.
Переменные:
А- массив, тип integer;
I- параметр цикла, тип integer;
kn – размер массива, тип integer;
Рассмотрим пример с использованием базы генератора случайных чисел:
Вывести 15 значений элементов массива с помощью генератора случайных
чисел в диапазоне 0...50 и вывести в строку.
В данном примере будет использован генератор случайных чисел
Randomize, необходимо правильно разобраться в условия, для того, чтобы
ориентироваться в исходных данных и записать их в блок переменных.
Блок-схема алгоритма будет достаточно простая (рисунок 15):
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
25. 25
Рисунок 15 Блок-схема алгоритма создания массива
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
26. 26
Двумерные массивы
Двумерным массивом (матрица) называется совокупность данных. Внешний
вид двумерного массива представлен на рисунке 16. Каждый элемент
характеризуется его местоположением (номером строки и номером столбца
(рисунок 17)
Рисунок 16 Двумерный массив
Рисунок 17 Характеристика элементов двумерного массива
Описание двумерного массива представлено на рисунке 18
Рисунок 18 Описание двумерного массива
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
27. 27
При написании программы существует несколько отличий, чем в написании
кода в одномерных массивов.
Var i, j, kn, km : integer;
a:array [1..10,1..10] of real;
begin
writeln (‗введите значения kn, km‘);
readln (kn, km);
for i:=1 to kn do
for j:=1 to km do begin
writeln (‗введите значения a[‗i,j,‘]=‘);
readln (a[i,j]);
end;
….
Так как, двумерный массив это матрица, то кроме переменных i, kn – строки
матрицы, необходимо прописать столбцы матрицы j, km. Описание массива в коде
массива будет таким же, как в примере, на рисунке №. Далее вводим количество
строк и столбцов, используя циклический алгоритм. Такой же алгоритм
необходимо прописать и для ввода элементов массива.
Далее написание кода производится в зависимости от поставленной задачи,
это может быть нахождения максимального и минимального значений,
вычисление среднего арифметического значения в строке или столбце матрицы.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
28. 28
Процедуры и функции
Алгоритм решения задачи проектируется путем разбиения всей задачи на
отдельные подзадачи. Обычно подзадачи реализуются в виде подпрограмм.
Подпрограмма - это отдельная функционально независимая часть
программы. Любая подпрограмма обладает той же структурой, которой обладает и
вся программа.
Подпрограммы решают три важные задачи:
1 избавляют от необходимости многократно повторять в тексте программы
аналогичные фрагменты;
2 улучшают структуру программы, облегчая ее понимание;
3 повышают устойчивость к ошибкам программирования и
непредвидимым последствиям при модификациях программы.
Вызов подпрограммы происходит при каждом употреблении ее имени в
основной (или вызывающей) программе. При вызове подпрограммы выполнение
основной программы приостанавливается, и управление передается в
подпрограмму, где выполняются команды, заданные в ней. Подпрограмма
завершается, если выполнены все ее процедуры до завершающего слова End или
по специальной команде выхода из подпрограммы Exit. По окончании работы
подпрограммы управление возвращается основной программе, иначе говоря, к
первой команде, следующей за обращением к этой подпрограмме.
В языке Pascal определяются два типа подпрограмм – процедуры (Procedure)
и функции (Function).
Любая программа может содержать несколько процедур и функций.
Структура любой подпрограммы аналогична структуре всей программы.
Подпрограмма должна быть описана до того, как будет использована в
программе или другой подпрограмме.
Процедуры и функции объявляются в разделе описания вслед за разделом
переменных.
Тогда общая структура программы выглядит так:
Рrogram hh;
Label; {описание меток}
Const; {описание констант}
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
29. 29
Type; {описание типов}
Var; {описание переменных}
Procedure; {описание процедур}
Function; {описание функций}
Begin
. . .
. . .
end.
Выполнение программы начинается с операторов основной программы. При
необходимости вызывается подпрограмма и начинают действовать еѐ операторы.
Затем управление передаѐтся в основную программу, которая продолжает
выполняться.
Обращение к подпрограмме - переход к выполнению подпрограммы с
заданием информации, необходимой для ее выполнения и возврата.
Подпрограмма вызывается по своему имени с указанием необходимых
параметров.
ПРОЦЕДУРЫ
Структура процедуры имеет следующий вид:
Procedure <имя процедуры>{(формальные параметры : их тип)};
{Var
(локальные переменные)}
begin
. . .
end;
Процедура вызывается по имени:
<имя процедуры> {(фактические параметры)};
Процедура может быть с параметрами, а может быть без параметров.
Процедура-это поименованный составной оператор, где имя задается
служебным словом Procedure.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
30. 30
Связь процедуры другими операторами программы осуществляется через
переменные. Эти переменные используются как в программе, так и в процедуре, а
описаны в самой программе. Такие переменные называются глобальными.
Глобальными переменными называются переменные, которые описаны в
самой программе, а используются как в программе так и в процедуре (функции).
Глобальные переменные, которые не были инициализированы явным
образом, перед началом выполнения программы обнуляются. Время жизни
глобальных переменных - с начала программы и до ее завершения. Глобальные
переменные доступны в любом месте программы или подпрограммы, кроме тех
подпрограмм, в которых описаны локальные переменные с такими же именами.
Локальными переменными называются переменные, описанные внутри
процедуры (функции) и используемые только внутри процедуры (функции).
Формальными параметрами называются переменные описанные в заголовке
программы и используемые только внутри процедуры (функции).
Формальные параметры указывают, с какими параметрами следует
обращаться к этой процедуре (функции), т.е. их количество, последовательность,
тип. Они задаются в заголовке процедуры (функции) в виде списка параметров,
разбитого на группы (секции) однотипных параметров, разделенных ‗;‘. Порядок
следования групп (секций) произвольный.
Для каждого формального параметра следует указать имя и тип. Имена
параметров могут быть любыми, они могут совпадать с глобальными именами
программы. Необходимо лишь помнить, что в этом случае параметр основной
программы с таким именем становится недоступным для непосредственного
использования подпрограммой. Но формальные имена не могут совпадать с
локальными переменными, т.к. они располагаются в одном стековом сегменте
памяти. Тип формального параметра может быть практически любым, однако в
заголовке процедуры (функции) нельзя вводить новый тип.
Рассмотрим пример: необходимо создать 3 массива случайных чисел,
создать массив суммы всех элементов и организовать вывод всех массивов в виде
таблицы.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
31. 31
Если писать эту программу не используя процедуры, то код программы
будет выглядеть следующим образом (комментариями код не сопровождается,
потому что все элементы рассматривались ранее):
var a1: array [1..10] of integer;
a2: array [1..10] of integer;
a3: array [1..10] of integer;
Asum: array [1..10] of integer;
i: integer;
begin
for i:= 1 to 10 do begin
a1[i]:=random(10);
a2[i]:=random(10);
a3[i]:=random(10);
end;
writeln ('1 massiv');
writeln ('_____________________');
writeln ('| i | a[i] |');
for i:=0 to 9 do
writeln ('| ',i:3, ' | ', a1[i]:4, ' |');
writeln('______________________');
writeln ('2 massiv');
writeln ('_____________________');
writeln ('| i | a[i] |');
for i:=0 to 9 do
writeln ('| ',i:3, ' | ', a2[i]:4, ' |');
writeln('______________________');
writeln ('3 massiv');
writeln ('_____________________');
writeln ('| i | a[i] |');
for i:=0 to 9 do
writeln ('| ',i:3, ' | ', a3[i]:4, ' |');
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
32. 32
writeln('______________________');
for i:= 1 to 10 do Asum[i]:=a1[i]+a2[i]+a3[i];
writeln('summarnii massiv');
writeln ('_____________________');
writeln ('| i | a[i] |');
for i:=0 to 9 do
writeln ('| ',i:3, ' | ', Asum[i]:4, ' |');
writeln('______________________');
readln();
end.
Код получился большим и громоздким, в придачу при выводе массивов в
виде таблицы, оформление придется корректировать в каждом массиве отдельно,
что приведет к большим временным затратам. Видно, что процесс вывод массива
повторяется для всех массивов. Введем процедуру, которая будет выводить массив
на экран в виде таблицы.
Блок-схема для этой программы приведена на рисунке 19.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
33. 33
Рисунок 19 Блок-схема программы с использованием процедуры
var a1: array [1..10] of integer;
a2: array [1..10] of integer;
a3: array [1..10] of integer;
Asum: array [1..10] of integer;
i: integer;
procedure print (var x: array of integer); {название процедуры и формальный
элемент, на который будет ссылаться основная программа}
var i:integer; {локальная переменная, которая используется только в
процедуре}
begin
writeln ('_____________________');
writeln ('| i | a[i] |');
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
34. 34
for i:=0 to 9 do
writeln ('| ',i:3, ' | ', x[i]:4, ' |');
writeln('______________________');
end;
begin
for i:= 1 to 10 do begin
a1[i]:=random(10);
a2[i]:=random(10);
a3[i]:=random(10);
end;
writeln ('1 massiv'); print(a1); {вызов процедуры}
writeln ('2 massiv'); print(a2);
writeln ('3 massiv'); print(a3);
for i:= 1 to 10 do Asum[i]:=a1[i]+a2[i]+a3[i];
writeln('summarnii massiv'); print(Asum);
readln();
end.
Видно, что количество строк в коде уменьшилось, и правка кода стала
значительно легче. Теперь в основной программе можно создавать сколь угодно
много массивов целых чисел и каждый можно будет выводить на экран в виде
таблицы, используя лишь одну строчку кода.
ФУНКЦИИ
Иногда функций, которые заложены в среде Turbo Pascal не хватает для
выполнения сложных математических задач, в таких случаях можно написать
собственную функцию.
Функция, в отличии от процедуры, возвращает в вызывающую программу
значение, т.е. результат ее работы. Это значение можно:
• присвоить переменной
• использовать в выражении
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
35. 35
• передать в качестве параметра в процедуру или функцию.
Из этого следуют отличия в структуре функции, т.е. надо знать тип
возвращаемого функцией результата и должен быть указан механизм возвращения
этого результата.
Структура функции имеет следующий вид:
Function <имя функции>{(формальные параметры : их тип)}: <тип
функции>;
{Var
(локальные переменные)}
begin
. . .
<имя функции>: =<выражение>
end;
где:
тип функции – простой порядковый тип, исключение - тип string. Если тип
не стандартный, то его надо предварительно описать в разделе Type программы.
<имя функции>: =<выражение> - оператор, который осуществляет механизм
возврата значения.
В остальном структура функции полностью повторяет структуру
процедуры. Она так же может быть с параметрами, а может быть без параметров.
Функция - это поименованный составной оператор, возвращающий
единственное значение, имя которой задается служебным словом Function.
Рассмотрим пример использования функции: посчитать сумму факториалов
чисел, введенных с клавиатуры. Из условия задачи видно, что целесообразно
написать функцию вычисления факториала числа.
Блок-схема алгоритма программы приведена на рисунке 20:
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
36. 36
Рисунок 20 Блок-схема программы с использованием функции.
Код будет выглядеть следующим образом:
var a:array[1..100] of integer;
i,n:integer;
sum:longint;
function fact(x:integer):longint; {название процедуры, описание формальных
переменных и тип, который примет функция}
var i,f:integer; {описание локальных переменных}
begin
f:=1;
for i:=1 to x do
f:=f*i;
fact:=f; {присвоение значения, которое примет функция}
end;
begin
sum:=0;
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
37. 37
writeln('Vvedite 4islo elementov');
readln(n);
for i:=1 to n do
begin writeln('vvedite ', i, '-oe 4islo');
readln(a[i]);
end;
for i :=1 to n do sum:=sum+fact(a[i]); {вызов функции из основной
программы}
write('factorial summi 4isel ');
for i := 1 to n do
write(a[i], ' ' );
writeln(' raven ', sum);
readln;
end.
Модуль CRT
В этом модуле сосредоточены процедуры и функции, обеспечивающие
управление текстовым режимом работы экрана. С помощью модуля, можно
перемещать курсор в произвольную позицию экрана, менять цвет выводимых
символов и окружающего фона, создавать окна.
Стандартные процедуры и функции управления текстовым экраном:
Процедура TEXTCOLOR(цвет)- устанавливает цвет для выводимых
символов.
Процедура TEXTBACKGROUND(цвет)- устанавливает цвет фона на
который выводятся символы.
Процедура GOTOXY(X,Y)- выводит курсор в требуемое положение на
экране
X – горизонтальная координата;
Y - вертикальная координата.
Процедура WINDOW(x1,y1,x2,y2) – устанавливает границы активного окна
для вывода данных.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
38. 38
x1,y1 – координаты верхнего левого угла окна;
x2,y2 - координаты нижнего правого угла окна.
Процедура CLRSCR – очищает экран или активное окно.
Пример:
Вывести 10 значений y=sin(x) начав с х=0 с шагом dx= 0.15 в таблице в
центре экрана.
Переменные:
y- функция тип real;
x – аргумент тип real;
dx – шаг аргумента тип real;
i,kn- параметры цикла тип integer.
Блок-схема программы представлена на рисунке 21
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
39. 39
Рисунок 21 Блок-схема программы
Пишем код программы, используя блок-схему: пояснений мы решили
приводить не для каждой строки, т.к., в процессе изучения TP, вы уже усвоили
основные моменты в написании программного кода.
uses crt; используем модуль СRT
var x,dx,y:real; описываем переменные, которые будут использованы
i,kn:integer;
begin
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
40. 40
clrscr; используем функцию для очистки экрана
writeln('vv.kn,x,dx');
readln(kn,x,dx);
gotoxy(33,6); используем эту процедуру для вывода курсора на экран в
центре
writeln('--------------');
gotoxy(33,7);
writeln('| x | y |');
gotoxy(33,8);
writeln('--------------');
for i:=1 to kn do
begin
y:=sin(x);
gotoxy(33,i+);writeln('|',x:4:2,'|',y:7:4,'|');
x:=x+dx; табулируем функцию
end;
gotoxy(33,i+);
writeln('--------------');
readln;
end.
Модуль GRAPH
Графические возможности языка Турбо-Паскаля реализованы с помощью
ряда графических подпрограмм (их более 50), содержащихся в модуле Graph
(файл GRAPH.TPU). Кроме того, существует ряд графических драйверов,
обеспечивающих работу программы с тем или иным видеоадаптером. Для
реализации графических драйверов (BGI-файлов) выделяется некоторый
небольшой набор базовых графических операций и именно эти операции
―привязываются‖ к конкретному драйверу устройства. Для каждого драйвера
обеспечивается стандартный интерфейс, а все остальные операции реализуются
библиотечными подпрограммами на основе набора базовых операций. Таким
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
41. 41
образом удается обеспечить почти полную независимость программ от типа
установленного видеоадаптера.
Для работы в графическом режиме программа должна выполнить его
инициализацию. Инициализация графического режима выполняется с помощью
вызова библиотечной процедуры InitGraph(var GraphDriver, GraphMode :integer;
PathToDriver : string), которая отыскивает на диске указанный в вызове драйвер,
загружает его в память и подготавливает экран к работе в графическом режиме.
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
42. 42
СПИСОК ЛИТЕРАТУРЫ
1 Free Pascal и Lazarus: Учебник по программированию: Алексеев Е. Р.,
Чеснокова О. В., Кучер Т. В.: [Текст]: ДМК-пресс, 2010, 442 с., ил
2 Зубок Д. А., Маятин А. В., Краснов С. В. Основы программирования в среде
TURBO PASCAL: Учебное пособие. - [Текст]: СПб.: СПбГУ ИТМО, 2009, 69
с., ил.
3 http://turbopascal.h18.ru/tp/Index.html
4 http://www.tp7.info/tp_ushitel.php
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
43. 43
ОГЛАВЛЕНИЕ
Введение …………………………………………………………………………. 3
Запуск системы Турбо Паскаль ……………………………………………….. 4
Основные клавиши и функции …………………………………………………. 5
Сохранение программы …………………………………………………………. 6
Написание конструкций языка …………………………………………………. 10
Написание программ с использованием разветвляющихся и циклических
алгоритмов ……………………………………………………………………… 14
Табулирование функций…………………………………………………………. 21
Массивы ………………………………………………………………………….. 22
Процедуры и функции …………………………………………………………... 27
Модуль CRT …………………………………………………………………….. 36
Модуль GRAPH …………………………………………………………………………………………….. 39
СПИСОК ЛИТЕРАТУРЫ ……………………………………………………… 41
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»