
- •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. Практическое задание
- •Образцы контрольных работ
- •Контрольно-измерительные материалы
10. Организация программ с использованием рекурсий
Рекурсия широко применяется в математике. Рекурсия – это такой способ организации вычислительного процесса, при котором процедура или функция в ходе выполнения обращается сама к себе.
В качестве примера дадим рекурсивное определение суммы первых n натуральных чисел. Сумма первых n натуральных чисел равна сумме первых (n - 1) натуральных чисел плюс п, а сумма первого числа равна 1.
Или: Sn= Sn-1 + n; S1 = 1.
Задача 1
Вычислить сумму первых n натуральных чисел, используя рекурсию.
Program Lab10_1;
Uses Crt;
Var n: Integer;
S: Integer;
{Описание функции вычисления суммы ряда}
Function Sum (k: Integer): Integer;
Begin
If k=l Then Sum: = 1 {Стоп-условие }
Else Sum: = Sum (k - 1) + k;
End;
{Исполнимая часть головной программы}
Begin
ClrScr;
WriteLn ('Введи количество членов ряда n');
ReadLn (n);
S: = Sum (n);
WriteLn ('Сумма S =’, S: 5);
ReadKey;
End.
Протокол работы программы:
Введи количество членов ряда n 10
Сумма S = 55
Опишем работу программы. Операция суммирования будет повторяться ровно п - 1 раз, поскольку функция Sum обращается п- 1 раз к самой себе, при этом параметр каждый раз уменьшается на единицу. В конце концов параметр станет равным 1, и рекурсивные вызовы закончатся, после чего все уже вызванные функции одна за другой завершат свою работу.
Обратим внимание на следующие обстоятельства. Во-первых, рекурсивная процедура или функция содержит всегда, по крайней мере, одну терминальную ветвь и условие окончания (If n = 1 Then Sum = 1). Во-вторых, при выполнении рекурсивной ветви (Else Sum: = Sum (n - 1) + n) процесс выполнения подпрограммы приостанавливается, но его переменные не удаляются из стека. Происходит новый вызов подпрограммы.
Задача 2
Составить рекурсивную функцию Factorial для вычисления факториала числа n (n! = 1 * 2 * 3 ... * n, 0! = 1, 1! = 1), которая основывается на многоразовом (рекурсивном) использовании формулы n! = n * (n - 1)!.
Program Lab10_2;
Uses Crt;
Var k: Integer;
F: Integer;
{Описание функции вычисления факториала}
Function Factorial (N: Integer): Integer;
Begin
If N = 0 Then Fact: = 1 {Это стоп - условие}
Else Fact: = N* Fact (N - 1);
End;
{Исполнимая часть головной программы}
Begin
ClrScr;
Write ('Введи количество k');
ReadLn (k);
F: = Factorial (k);
WriteLn ('F =*, F: 5);
ReadKey;
End.
1. Особенности рекурсии
рекурсивная форма организации алгоритма обычно выглядит изящнее итерационной и дает более компактный текст программы;
если глубина рекурсии очень велика, то это может привести к переполнению стека;
рекурсивные алгоритмы, как правило, выполняются более медленно;
при рекурсивном программировании велика вероятность ошибок зацикливания.
В целях повышения безопасности работы рекомендуется:
использовать директиву компилятора {$s+} для включения проверки переполнения стека;
использовать директиву компилятора {$R+} для вктючения проверки диапазона.
11. Решение задач на обработку элементов одномерного массива
Задача 1
Рассмотрим примеры описания массивов с пояснениями:
Program Lab11_l;
Const
Start = 100;
Finish = 105;
Var
S : Integer;
A1: Array [1..10] Of Integer;
{массив десяти переменных типа Integer, для доступа будут использоваться индексы 1, 2, 3, 4, 5, 6, 7, 8, 9 и 10. Имя массива – А1 }
А2: Array [5..10] Of Real;
{массив шести переменных типа Real, для доступа будут использоваться индексы 5, 6, 7, 8, 9 и 10. Имя массива – А2 }
Names: Array [5..10] Of String;
{массив шести переменных типа String, для доступа будут использоваться индексы 5,6,7,8,9 и 10. Имя массива - Names }
Sprites: Array [0..99] Of Pointer;
{массив ста переменных типа Pointer, диапазон индексов - от 0 до 99. Имя массива - Sprites }
В: Array [Start..Finish] Of Byte;
{массив шести переменных типа Byte, диапазон индексов задается константами Start и Finish - от 100 до 105. Имя массива - В }
Bl: Array [Start.. 110] Of Byte;
{массив одиннадцати переменных типа Byte, диапазон индексов задается константами Start и 110 - от 100 до 110. Имя массива - В1 }
IC1: Array [Start..90] Of Byte;
{некорректное описание массива: нижний индекс (задан константой Start = 100) превышает верхний индекс (задан константой 90) }
IC2: Array [S..800] Of Byte;
{некорректное описание массива: верхний индекс задан переменной, а не константой }
IC3: Array [1..80000] Of Integer;
{некорректное описание массива: объем оперативной памяти, необходимый для хранения такого массива - 160 000 байт (один элемент типа Integer занимает 2 байта), что превышает максимально допустимый объем}
Begin
{Тело программы}
End.
Задача 2
Рассмотрим пример заполнения элементов массива с помощью оператора присваивания и вывод без использования оператора цикла For.
Program Lab11_2;
Var
A : Array [1..3] Of Integer;
A[l]: = 8;
A[2]: = 12;
A[3]: = A[1] + A[2];
WriteLn(‘Первый:’, A[l]);
WriteLn(‘Второй’, A[2]);
WriteLn(‘Tретий:’, A[3]);
End.
Пояснения к задаче 2
Массив А содержит 3 элемента типа Integer. Размерность массива задана явно в описании массива. Изменение значений элементов массива происходит с помощью оператора присваивания. Результат работы программы мы видим в табл. 8.
Таблица 8
A[1] – первый элемент массива |
A[2] – второй элемент массива |
А[3] – третий элемент массива |
8 |
12 |
20 |
Задача 3
Приведем пример программы, заполняющей элементы массива размерностью n квадратами их индексов и вывод результата работы программы с помощью оператора цикла For.
Program Lab11_3;
Const
n = 9;
Var
A : Array [l..n] Of Integer;
I: Integer;
BEGIN {1}
For i: = 1 To n Do
A[i]: = I*i;
WriteLn;
For I : = 1 To n Do
Begin {2}
WriteLn (i, '-й элемент');
WriteLn (A[i]);
End; {2}
End. {1}
Пояснения к задаче 3
Массив А содержит n элементов типа Integer. Размерность массива задана равной 9 в операторе Const перед описанием массива.
Изменение значений элементов массива происходит с помощью оператора присваивания в цикле с изменением счетчика i последовательно от 1 до 9. На каждом шаге цикла элементу массива с номером i присваивается значение i * i, т.е. квадрат его индекса.
Вывод результата происходит с помощью второго цикла for. На каждом шаге цикла производится вывод значения элемента массива с индексом i.
Результатом работы программы будет столбик чисел, представляющих собой квадраты чисел от 1 до 10, т. е.: 1, 4, 9, 16,..., 81 с соответствующими пояснениями, какой именно элемент массива выводится.