
- •230701 Прикладная информатика (по отраслям)
- •Содержание
- •Требования к минимуму содержания основной профессиональной образовательной программы по специальности 080802 Прикладная информатика (по отраслям)
- •Рабочая программа
- •Пояснительная записка
- •Тематический план учебной дисциплины
- •Содержание учебной дисциплины
- •Тема 1.4. Составление алгоритмов с помощью блок-схем
- •Тема 1.5. Методы и правила надежного программирования. Способы конструирования программ
- •Раздел IV. Процедуры и функции.
- •Тема 4.1. Подпрограммы
- •Тема 4.2. Параметры и аргументы, связь формальных и фактических параметров
- •Раздел V. Программирование рекурсивных алгоритмов
- •Тема 5.1. Рекурсивные процедуры и функции
- •Тема 5.2. Примеры рекурсивного программирования
- •Раздел VIII. Ввод и вывод информации: текстовые файлы
- •Тема 8.1. Файлы и их виды
- •Тема 8.2. Оперирование текстовыми файлами.
- •Раздел IX. Структурированный тип записи
- •Тема 9.1. Записи и их описание
- •Тема 9.2. Использование таблиц с разнотипными полями. Записи.
- •Раздел X. Модульное программирование
- •Тема 10.1. Методы работы с модулями. Стандартные модули языка Pascal.
- •Тема 10.2. Создание модульных программ
- •Критерии оценок
- •Литература
- •Теоретический курс Основные понятия языка Состав языка
- •Алфавит и лексемы
- •Константы
- •Имена, ключевые слова и знаки операций
- •Типы данных
- •Классификация типов
- •Стандартные типы данных Логические типы
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Порядковые типы
- •Приведение типов
- •Линейные программы
- •Переменные
- •Выражения
- •Структура программы
- •Оператор присваивания
- •Процедуры ввода-вывода
- •Ввод с клавиатуры
- •Вывод на экран
- •Операторы ветвления
- •Условный оператор if
- •Оператор варианта case
- •Операторы цикла
- •Цикл с предусловием while
- •Цикл с постусловием repeat
- •Цикл с параметром for
- •Рекомендации по использованию циклов
- •Процедуры передачи управления
- •Оператор перехода goto
- •Перечисляемый тип данных
- •Интервальный тип данных
- •Массивы
- •Двумерные массивы
- •Операции
- •Процедуры и функции для работы со строками
- •Множества
- •Операции над множествами
- •Текстовые файлы
- •Бестиповые файлы
- •Компонентные файлы
- •Прямой доступ
- •Совместимость типов
- •Совместимость по присваиванию
- •Подпрограммы
- •Процедуры
- •Функции
- •Глобальные и локальные переменные
- •Виды параметров подпрограмм
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Открытые массивы и строки
- •Параметры процедурного типа
- •Рекурсивные подпрограммы
- •Описание модулей
- •Использование модулей
- •Стандартные модули Паскаля
- •Модуль System
- •Модуль Crt
- •Модули Dos и WinDos
- •Модуль Graph
- •Модуль Strings
- •Задания для самостоятельной работы студентов
- •1. Знакомство с интегрированной средой программирования pascal
- •1. Общие положения
- •Начало работы
- •Интерфейс ide
- •Комбинации клавиш
- •2. Подготовка текста программы
- •5. Компиляция
- •5.1. Ошибки времени компиляции
- •6. Пробный запуск программы на выполнение
- •6.1. Ошибки времени выполнения программы
- •7. Запуск программы на исполнение
- •8. Завершение работы
- •9. Практическое задание
- •2. Организация работы программ линейной структуры
- •1. Управление режимами вывода данных на экран дисплея
- •1.1. Управление положением курсора на экране монитора
- •1.2. Стандартный модуль crt. Подключение модулей с помощью Uses. Процедура очистки экрана дисплея ClrScr. Функция ReadKey
- •1.3. Процедуры работы с цветом (TextColor,TextBackground)
- •2. Практическое задание – решение задач линейной структуры
- •3. Решение задач с условием
- •3. Составной оператор
- •Практическое задание – решение задач с условием
- •4. Решение задач на множественный выбор
- •5. Организация циклов с помощью оператора for
- •1.Особенности циклов
- •2. Оператор цикла с параметром (со счетчиком) for ... Do
- •3. Вложенные циклы
- •2.1. Структура вложенных циклов
- •6. Организация циклов с помощью оператора while
- •7. Организация циклов с помощью оператора repeat
- •8. Организация программ с использованием процедур
- •1. Общие положения
- •2. Описание процедуры, оператор процедуры
- •2.1. Формальные и фактические параметры
- •2.2. Параметры-значения и параметры-переменные
- •2.3. Область действия имен
- •2.4. Процедуры без параметров
- •3. Массив в процедуре
- •9. Организация программ с использованием функций
- •10. Организация программ с использованием рекурсий
- •1. Особенности рекурсии
- •11. Решение задач на обработку элементов одномерного массива
- •1. Стандартные операции с массивами
- •12. Решение задач на обработку элементов двумерного массива
- •1. Многомерные массивы
- •2. Ввод-вывод двумерного и многомерного массива
- •3. Стандартные (типовые) задачи на двумерных массивах
- •4. Практическое задание - решение задач с использованием массивов
- •13. Решение задач по обработке символьных данных
- •1. Таблица кодирования символов
- •Б азовая таблица кодировки ascii
- •2. Запись символов, специальные и управляющие символы
- •3. Операции отношения
- •4. Встроенные функции
- •14. Решение задач по обработке строковых данных
- •1. Внутреннее представление строки
- •2. Операции над строками
- •3. Строковые встроенные функции
- •4. Примеры использования процедур и функций
- •5. Практическое задание
- •Методические указания
- •15. Решение задач по обработке множественного типа
- •1. Описание множественного типа
- •2. Присваивание значений переменным множественного типа
- •3. Операции над множествами
- •3.6. Нахождение элемента во множестве
- •3.7. Приоритеты операций при работе с множествами
- •4. Практическое задание
- •16. Решение задач по обработке структурированного типа - запись
- •1. Описание записи
- •2. Обращение к элементу записи
- •3. Оператор присоединения
- •4. Практическое задание
- •Образцы контрольных работ
- •Контрольно-измерительные материалы
Параметры процедурного типа
Все рассмотренные параметры подпрограмм позволяли выполнять один и тот же алгоритм с различными данными. В Паскале есть и другая возможность — параметризовать алгоритм функциями и процедурами. Это может пригодиться, если требуется выполнить одну и ту же последовательность действий, внутри которой выполняется обращение к разным функциям или процедурам.
Описание параметра подпрограммы в большинстве случаев состоит из имени и типа. Имя функции является константой процедурного ( функционального ) типа, который требуется описать в разделе type, например:
type fun = function(x : real) : real;
pr = procedure;
proc = procedure(a, b : word; var c : word);
Здесь вводится описание трех типов. Первый из них соответствует любой функции с одним аргументом вещественного типа, возвращающей вещественное значение, второй — процедуре без параметров, а третий — процедуре с тремя параметрами типа word. Как видно из примеров, описание процедурного (функционального) типа соответствует заголовку подпрограммы без имени. Имя типа используется затем в списке параметров подпрограммы аналогично другим типам.
Пример. Программа, вычисляющая определенные интегралы методом прямоугольников для двух функций
на интервале [a, b] с заданным количеством его разбиений (пример 4.5).
program integrals;
type fun = function(x : real) : real; { 1 }
var a, b : real;
n : integer;
{$F+}
function Q(x : real) : real;
begin
Q := 2 * x / sqrt(1 – sin(2 * x));
end;
function R(x : real) : real;
begin
R := cos(x) – 0.2 * x;
end;
{$F–}
function integr(f : fun; a, b : real; n : integer) : real;
var sum, x, h : real;
i : integer;
begin
h := (b – a) / n; sum := 0; x := a;
for i := 1 to n do begin
sum := sum + f(x); x := x + h;
end;
integr := sum * h;
end;
begin
writeLn('Введите интервал и количество шагов');
readln(a, b, n);
writeln('Интеграл для первой функции: ', integr(Q, a, b, n):8:3);
writeln(' Интеграл для второй функции: ', integr(R, a, b, n):8:3);
end.
Вычисление определенного интеграла методом прямоугольников состоит в приближенном подсчете площади, ограниченной осью абсцисс, графиком функции и границами интервала. Интервал разбивается на заданное количество промежутков, и площади получившихся фигур заменяются площадями прямоугольников.
Итак, чтобы передать имя функции или процедуры в подпрограмму, необходимо:
Определить соответствующий процедурный тип.
Задать для функций и процедур, предназначенных для передачи в подпрограмму, ключ компилятора {$F +}, определяющий дальнюю адресацию. При этом компилятор формирует полный адрес, состоящий из сегмента и смещения. Альтернативный способ — указать в заголовке каждой функции директиву far:
function Q(x : real) : real; far;
Рекурсивные подпрограммы
Рекурсивной называется подпрограмма, в которой содержится обращение к самой себе. Такая рекурсия называется прямой. Есть также косвенная рекурсия, когда две или более подпрограмм вызывают друг друга.
При обращении подпрограммы к самой себе происходит то же самое, что и при обращении к любой другой функции или процедуре: в стек записывается адрес возврата, резервируется место под локальные переменные, происходит передача параметров, после чего управление передается первому исполняемому оператору подпрограммы. При повторном вызове этот процесс повторяется. Для завершения вычислений каждая рекурсивная подпрограмма должна содержать хотя бы одну нерекурсивную ветвь, заканчивающуюся возвратом в вызывающую программу.
При завершении подпрограммы область ее локальных переменных освобождается, а управление передается на оператор, следующий за рекурсивным вызовом.
Простой пример рекурсивной функции — вычисление факториала (это не означает, что факториал следует вычислять именно так). Чтобы получить факториал числа n, требуется умножить на n факториал ( n – 1)!. Известно также, что 0! = 1 и 1! = 1.
function fact(n : byte) : longint;
begin
if (n = 0) or (n = 1) then fact := 1
else fact := n * fact(n – 1);
end;
Рекурсивные подпрограммы чаще всего применяют для компактной записи рекурсивных алгоритмов, а также для работы со структурами данных, описанными рекурсивно, например с двоичными деревьями. Любую рекурсивную функцию можно реализовать без применения рекурсии: для этого программист должен сам обеспечить распределение памяти под необходимое количество копий параметров.
Достоинством рекурсии является компактная запись. К недостаткам относятся расход времени и памяти на повторные вызовы функции и передачу ей параметров, а главное, опасность переполнения стека.
Модули
Модуль — это подключаемая к программе библиотека ресурсов. Он может содержать описания типов, констант, переменных и подпрограмм. В модуль обычно объединяют связанные между собой ресурсы: например, в составе оболочки есть модуль Graph для работы с экраном в графическом режиме. Модули применяются как библиотеки, которые могут использоваться различными программами, и для разбиения сложной программы на составные части.
Чтобы использовать модуль, достаточно знать только его интерфейс: детали реализации модуля скрыты от его пользователя. Это позволяет успешно создавать программы большого объема, поскольку мозг человека может хранить одновременно довольно ограниченный объем информации. Кроме того, использование модулей позволяет преодолеть ограничение в один сегмент на объем кода исполняемой программы, поскольку код каждого подключаемого к программе модуля содержится в отдельном сегменте.
Модули можно разделить на стандартные, которые входят в состав системы программирования, и пользовательские, то есть создаваемые программистом. Чтобы подключить модуль к программе, его требуется предварительно скомпилировать. Результат компиляции каждого модуля хранится на диске в отдельном файле с расширением .tpu.