- •Основы алгоритмизации и программирования
- •Введение
- •1.1. Структура программы
- •1.2. Типы данных
- •1.2.1. Целый тип данных
- •1.2.2. Логические типы данных – Boolean
- •1.2.3. Данные символьного типа
- •1.3. Операторы языка программирования Турбо Паскаль
- •1.3.1. Операции в Турбо Паскаль
- •1.3.2. Правила вычисления выражений
- •1.3.3. Встроенные функции в Турбо Паскаль
- •1.3.4. Описание констант и переменных
- •1.3.5. Операторы в Турбо Паскаль
- •Вопросы для самопроверки
- •Лабораторная работа №1 Организация программ линейных структур
- •Варианты заданий
- •2. Организация форматного вывода данных на языке Паскаль
- •Вопросы для самопроверки
- •Лабораторная работа №2 Организация ввода-вывода данных на языке Паскаль
- •Методические указания
- •Варианты задания
- •3. Организация программ разветвляющихся структур
- •3.1. Полная форма условного оператора
- •3.2. Краткая форма условного оператора
- •Вопросы для самопроверки
- •Лабораторная работа №3 Организация программ разветвляющихся структур
- •Варианты заданий
- •4. Организация циклических процессов
- •Лабораторная работа №4 Составление циклических программ
- •Варианты заданий
- •Методические указания
- •Варианты заданий
- •5. Программирование структур с вложенными циклами
- •Вопросы для самопроверки
- •Лабораторная работа №5 программирование структур с вложенными циклами. Вычисление суммы ряда
- •Методические указания
- •Варианты заданий
- •6. Перечислимые и ограниченные типы данных
- •6.1 Перечислимый тип данных
- •6.2. Ограниченный тип данных
- •6.3. Оператор выбора (варианта)
- •Вопросы для самопроверки
- •Лабораторная работа №6 Перечислимые и ограниченные типы данных
- •Варианты заданий.
- •7. Регулярные типы данных
- •7.1. Одномерные массивы
- •7.1.1. Краткая форма объявления одномерного массива
- •7.1.2. Полная форма объявления одномерного массива
- •7.1.3. Доступ к элементам массива
- •Вопросы для самопроверки
- •Лабораторная работа №7_1 регулярные типы данных. Массивы
- •Варианты заданий
- •7.2. Двумерные массивы
- •Полная форма описания матрицы:
- •Формирование элементов случайным образом:
- •Формирование элементов матрицы при вводе с клавиатуры:
- •Фрагменты программ по обработке 2-х мерных массивов
- •Вопросы для самопроверки
- •Лабораторная работа №7_2 регулярные типы данных. МАтрицы
- •Варианты заданий
- •7.3. Сортировка элементов массива
- •7.3.1. Сортировка методом «пузырька»
- •7.3.2. Сортировка вставками
- •7.3.3. Сортировка посредством выбора
- •7.3.4. Быстрая сортировка
- •8. Составление программ с использованием подпрограмм
- •8.1. Область видимости идентификатора переменной
- •8.2. Подпрограммы - процедуры (procedure)
- •8.2.1. Формальные и фактические параметры
- •Вопросы для самопроверки
- •Лабораторная работа №8_1 составление программ с использованием подпрограмм - процедур
- •Методические указания
- •Варианты заданий
- •8.3. Подпрограммы-функции (function)
- •Вопросы для самопроверки
- •Лабораторная работа №8_2 составление программ с использованием подпрограмм - функций
- •Варианты заданий
- •8.4. Рекурсия
- •8.4.1. Вычисление факториала
- •8.4.2. Формы рекурсивных процедур
- •8.4.3. Числа Фибоначчи
- •Вопросы для самопроверки
- •9. Модули
- •Структура модуля
- •Interface
- •Implementation
- •Вопросы для самопроверки
- •10.2. Стандартные процедуры и функции для строк
- •10.3. Хранение строк
- •Вопросы для самопроверки
- •Лабораторная работа №10 обработка символьной информации
- •Варианты заданий
- •11. Комбинированные типы. Записи (Record)
- •11.1 Записи с фиксированными частями
- •11.2. Оператор with…do
- •11.3. Вариантные записи
- •Вопросы для самопроверки
- •Лабораторная работа №11 Комбинированные типы. Записи
- •Варианты заданий
- •12. Файлы
- •12.1. Классификация файлов
- •12.1.1. Чтение файла
- •12.1.2. Запись файла
- •Вопросы для самопроверки
- •13.1. Объявление множества
- •13.2. Операции над множествами
- •13.3. Сравнение множеств
- •Include (s, I);
- •13.4. Старшинство множественных операций
- •Вопросы для самопроверки
- •Лабораторная работа №13 множества
- •Варианты заданий
- •Горячие клавиши
- •Библиографический список
- •Оглавление Введение 3
- •1. Программирование на языке Паскаль 5
- •1.1. Структура программы 5
- •2. Организация форматного вывода данных на языке Паскаль 17
- •Лабораторная работа №7_1.
- •Лабораторная работа №7_2.
- •Лабораторная работа №8_2.
8.4.2. Формы рекурсивных процедур
Главное требование к рекурсивным программам заключается в том, что вызов рекурсивных процедур должен выполняться по условию, которое на каком-то уровне рекурсии станет ложным.
Существуют 3 формы рекурсивных процедур:
форма с выполнением действий до рекурсивного вызова (на рекурсивном спуске):
procedure rec;
begin
s :=..;
if <условие> then rec;
end;
форма с выполнением действий после рекурсивного вызова (на рекурсивном возврате):
procedure rec;
begin
if <условие> then rec;
s :=..;
end;
форма с выполнением действий как до, так и после рекурсивного вызова (выполнение действий, как в рекурсивном спуске, так и в рекурсивном возврате).
Пример 1.
procedure rec;
begin
fl;
if <условие> then rec;
end;
Пример 2.
procedure rec;
begin
if <условие> then
begin
fl;
rec;
f2;
end;
end;
Задача 8.8. Составить процедуру вывода на печать символов строки в обратном направлении.
Листинг программы
Uses crt;
Procedure r;
Var
с : char;
Begin
If not eoln then
Begin
Read(c);
R;
Write(c);
End;
End;
Begin
Clrscr;
R;
End.
Задача 8.9 о перевёртывании строки. Составить программу, которая позволяет вводить любой текст, и слово "end" будет прекращать работу программы.
Uses crt;
Type
st = string[20];
Var
s, s1 : st;
Function r (s_t :st): st;
Var
fl : char;
f2:st;
begin
if length (s_t) = 1 then r := s_t;
else
begin
fl := s_t[l];
delete (s_t, 1, 1);
f2:=r(s_t);
r := concat (f2,fl);
end;
end;
begin
clrscr;
repeat
writeln ('введите любой текст');
writeln ('слово "end" прекратит программу');
readln (s);
s1 := г (s);
writeln (s1, ' есть перевёрнутая ', s);
until s = 'end';
end.
8.4.3. Числа Фибоначчи
Первое и второе числа равны 1. Каждое последующее, начиная с третьего, есть сумма двух предшествующих: 1, 1, 2, 3, 5, 8, ...
Листинг программы
Uses crt;
Var
n, i : integer;
A : array [1..100] of integer;
Function fib (n : integer) : integer;
Begin
If (n = 1) and (n = 2) then fib := 1
Else
fib := fib (n- 1 ) + fib (n-2);
End;
Begin
Writeln (‘…’);
Readln (n);
For I := 1 to n do Writeln (Fib (i));
End.
Рекурсивный вызов может быть косвенным. В этом случае подпрограмма обращается к себе опосредованно, путём вызова другой подпрограммы, в которой содержится обращение к первой.
Например:
Procedure A (i : Byte);
Begin
…
B(i);
…
End;
Procedure В (j : Byte);
Begin
…
A(j);
…
End;
Если строго следовать правилу, согласно которому каждый идентификатор перед употреблением должен быть описан, то такую программную конструкцию использовать нельзя. Для того чтобы такого рода вызовы стали возможны, вводится опережающее описание:
Procedure B (j: Byte); forward;
Procedure A (i: Byte);
Begin
…
B(i);
…
End;
Procedure B;
Begin
…
A(j);
…
End;
Итак, опережающее описание заключается в том, что объявляется лишь заголовок процедуры В, а её тело заменяется стандартной директивой FORWARD. Теперь в процедуре А можно использовать обращение к процедуре В - ведь она уже описана, точнее, известны её формальные параметры, и компилятор может правильным образом организовать её вызов. Обратим внимание на то, что тело процедуры В начинается заголовком, в котором уже не указываются описанные ранее формальные параметры.