- •Федеральное агенство по образованию российской федерации
- •1. Основные категории и понятия информатики
- •Предмет информатики как науки
- •1.2. Информация: структура, форма, измерение
- •2. Техническое и программное обеспечение пэвм
- •2.1. Структура аппаратных средств пэвм
- •2.2. Программное обеспечение пэвм
- •3. Основы алгоритмизации
- •Этапы разработки программ
- •3.2.Формы представления алгоритмов
- •Действие 1
- •Действие 2
- •Классификация и примеры алгоритмических структур
- •3.2.1. Алгоритм линейной структуры.
- •3.2.2. Алгоритм разветвляющейся структуры.
- •Да нет да да Рис 3.11
- •3.2.3. Алгоритмы циклической структуры.
- •4.2. Структура программы на языке Паскаль
- •4.3. Скалярные стандартные типы данных
- •4.4. Скалярные, пользовательские типы данных
- •5. Структурные типы данных
- •Массивы
- •5.3. Записи
- •5.4. Записи с вариантами
- •Множества
- •5.6.Файлы
- •6. Операции над данными скалярных типов. Выражения
- •7. Операторы языка Паскаль
- •7.1. Простые операторы
- •7.2. Структурные операторы
- •Оператор 2
- •8. Примеры программ на языке Паскаль
- •8.1. Пример 1. Арифметические выражения. Оператор присваивания
- •Пример 2. Условные операторы
- •Ввод чисел х, а
- •8.3. Пример 3. Программа обработки одномерного массива
- •8.4. Пример 4. Программа обработки двумерного массива
- •True False True False False
- •8.5. Пример 5. Программа обработки символьных строк
- •8.6. Пример 6. Программа обработки двумерного массива с вводом элементов матрицы из текстового файла
- •9.Разработка программ сложной структуры
- •9.1. Процедуры и функции
- •9.2. Область действия идентификаторов при использовании процедур и функций. Локальные и глобальные переменные
- •9.3. Передача данных в подпрограмму с помощью параметров. Формальные и фактические параметры
- •9.4. Использование процедур и функций
- •True False Рис. 9.4
- •9.5. Массивы – параметры процедур и функций
- •True False True False Рис. 9.7
- •True False True False True False Рис 9.9
- •9.6. Рекурсивные процедуры и функции
- •True False Рис. 9.10 True False
- •True False Рис. 9.12
- •9.7. Модули
- •10. Динамические структуры данных
- •Основные определения
- •10.2. Объявление и создание динамических структур данных. Указатели
- •Операции над указателями
- •Программа создания и обработки линейного списка
- •Приложение. Контрольные вопросы
- •Литература
9.4. Использование процедур и функций
Задание. Определить наибольший общий делитель двух целых чисел.
Постановка задачи.
Входные данные:
A,B– целые, положительные числа.
Выходные данные:
Nod– наибольший общий делительAиB.
Метод решения: алгоритм Евклида.
Алгоритм.Выдача наибольшего общего делителя двух целых чисел.
Входные данные.
СКАЛЯР A,B– целые, положительные числа.
Выходные данные.
СКАЛЯР Nod– целое число.
Начало
A:=0
B:=0
ЦИКЛ_ПОКА(A<=0 ИЛИ B<=0)
Вывод(‘Input A,B : ’)
ввод(A,B)
КОНЕЦ_ЦИКЛА
Findnod(A,B,Nod)
Вывод(‘Nod(A,B)= ’,Nod)
Конец
Алгоритм.Процедура определения наибольшего общего делителя двух целых чисел (findnod).
Входные данные.
СКАЛЯР A,B– целые, положительные числа.
Выходные данные.
СКАЛЯР Nod– целое число.
Промежуточные данные.
СКАЛЯР R– целое число. {остаток от деления }
Начало
R:=1
ЦИКЛ_ПОКА(R<>0)
R:=A mod B
A:=B
B:=R
КОНЕЦ_ЦИКЛА
Nod:= A
Конец
Блок - схема программы
True False Рис. 9.4
Блок-схема процедуры findnod.
True False Рис.
9.5
Программа на языке Паскаль, использующая процедуру.
Program Exam7;
Var
A, B, Nod: integer;
procedure findnod (A, B: integer; Var X: integer);
Var R: integer;
Begin
R:=1;
While R<>0 do
Begin
R:=A mod B;
A:=B; B:=R;
End;
X:=A;
End;
Begin A:=0; B:=0;
While (A<=0) or (B<=0) do begin
Writeln('Input A,B <>0 :');
Readln(A,B);
End;
findnod(A,B,Nod);
Writeln('Nod(A,B) = ',Nod);
Readln;
End.
Результаты тестирования.
1. Исходные данные:
A=84
B=36
Результат: Nod(A,B)=12
Тестовый пример 2:
A=84
B=56
Результат: Nod(A,B)=28
Результаты, выданные программой.
Тестовый пример1
InputA,B<>0 :
84
36
Nod(A,B) = 12
Тестовый пример 2
InputA,B<>0 :
84
56
Nod(A,B) = 28
Программа на языке Паскаль, использующая функцию.
Program Exam7;
Var
A, B, Nod: integer;
Function findnod (A, B: integer): integer;
Var R: integer;
Begin
R:=1;
While R<>0 do
Begin
R:=A mod B;
A:=B; B:=R;
End;
findnod :=A;
End;
Begin A:=0; B:=0;
While (A<=0) or (B<=0) do begin
Writeln('Input A,B <>0 :');
Readln(A,B);
End;
Nod := findnod(A,B);
Writeln('Nod(A,B) = ',Nod);
Readln;
End.
Результаты тестирования.
1. Исходные данные:
A=84
B=36
Результат: Nod(A,B)=12
Тестовый пример 2:
A=84
B=56
Результат: Nod(A,B)=28
Результаты, выданные программой.
Тестовый пример1
InputA,B<>0 :
84
36
Nod(A,B) = 12
Тестовый пример 2
InputA,B<>0 :
84
56
Nod(A,B) = 28
Замечание.
Передача параметров функции выполняется также, как и в случае процедур, результат выполнения функции формируется как возвращаемое значение путем присваивания значения имени функции в теле функции. В вызывающей программе возвращаемое значение присваивается некоторой переменной или используется в выражении.
В общем случае функция может возвращать значения следующих типов: любого порядкового типа, любого вещественного типа, стандартного типа stringи типа-указателя.
9.5. Массивы – параметры процедур и функций
Массив является структурным типом данных, поэтому для того, чтобы передать массив в качестве параметра в подпрограмму, необходимо в разделе типов основной программы объявить требуемый тип «массив». Например,
TYPEVect=array[1..20]ofreal; { тип одномерного массива}
TMatrix=array[1..10,1..10] of real; { тип двумерного массива} .
С помощью имени этого объявленного пользователем типа описывается массив – параметр подпрограммы в списке формальных параметров и соответствующий ему фактический параметр, используемый в операторе вызова подпрограммы.
Рассмотрим пример, в котором функции передается одномерный массив в качестве параметра. Пусть требуется написать программу, которая находит произведение максимальных элементов двух одномерных массивов. Для определения максимального элемента массива использовать функцию.
Постановка задачи.
Входные данные:
A,B– одномерные массивы размераn1 иn1, соответственно.
Выходные данные:
Proizv– произведение максимальных элементов массивовAиB.
Метод решения: для определения максимального элемента массива использовать функцию.
Программа будет включать внутреннюю функцию MaxEl. Алгоритм основной программыMainпредставлен на рис. 9.6, алгоритм функцииMaxElпредставлен на рис. 9.7.
Рис.
9.6