- •Оглавление
- •Учебное пособие
- •1. Структура программы
- •2. Константы и переменные
- •3. Основные типы данных
- •4. Выражения, операнды, операции
- •5. Совместимость и преобразование типов
- •6. Основные операторы языка
- •7.Массивы
- •8. Процедуры и функции
- •9. Интегрированная среда Turbo Pascal 7.0
- •Практикум
- •1. Основные конструкции языка Паскаль. Составление простейших программ
- •2. Условный оператор
- •3. Цикл с параметром
- •4. Циклы с условиями
- •5. Процедуры и функции
- •7. Одномерные массивы
- •8. Двумерные массивы
- •Вопросы для самопроверки
5. Процедуры и функции
Цель работы
Получение навыков в использовании процедур и функций.
Пример 1. Составить программу, которая будет находить an, то есть п-ю степень числа а, где а и п — это целые числа и п > 0, вводимые с клавиатуры.
Решение. Составим процедуру, которая вычисляет степень целого числа.
Program Example_8;
Var
a, n: Integer; {глобальные переменные}
s: Longint;
Procedure Degree(x,y: Integer; Var st: Longint); {x, y, st - формальные
Var параметры}
i: Integer; {i – локальная переменная}
Begin
st:=l;
For i:=l To у Do st:=st*x;
End;
Begin {основная программа}
Writeln('Введите два числа а и n');
Readln(a,n);
Degree (a,n,s); {обращение к процедуре; a, n, s - фактические параметры }
Writeln('Результат = ',s); {вывод значения аn}
Readln;
End.
Пример 2. Написать функцию, подсчитывающую количество цифр числа. Используя ее, определить, в каком из двух данных чисел больше цифр.
Решение. Для решения задачи вспомним, как подсчитать количество цифр.
Для этого можно выделять последнюю цифру до тех пор, пока число не станет равным нулю. При этом каждый раз надо увеличивать счетчик на 1 (начальное значение счетчика — 0).
Program Example_9;
Var
n1, n2: Longint;
k1, k2: Byte;
Function Quantity (x: Longint) : Byte;
Var k: Byte;
Begin
k:=0;
While x <> 0 Do Begin
Inc(k);
x:=x Div 10;
End;
Quantity:=k;
End;
Begin {основная программа}
Writeln('Введите два числа');
Readln (n1, n2);
kl:= Quantity(nl); {количество цифр первого числа}
k2: = Quantity(n2); {количество цифр второго числа}
{Сравнение количества цифр в числах}
If kl=k2 Then Writeln ('Одинаковое количество цифр')
Else If kl>k2 Then Writeln('B первом числе цифр больше')
Else Writeln('Bo втором числе цифр больше');
Readln;
End.
7. Одномерные массивы
Цель работы
Получение практических навыков работы с одномерными массивами.
Пример 1. Составить программу нахождения суммы элементов массива.
Решение. Опишем две процедуры (формирования и вывода массива) и функцию нахождения суммы элементов, которые будем использовать в основной части. Заметим, что заполнение и вывод массива можно осуществить только поэлементно, то есть можно сначала присвоить значение первому элементу, затем второму и так далее, то же самое и с выводом на экран — выводим первый, второй, третий... и так до последнего. Будем вводить значения элементов массива с клавиатуры.
Program Example_11;
Const
n=30; {n - это число элементов массива}
Type myarray = Array[1..n] Of Integer;
Var
A: myarray;
s: Integer; {сумма всех элементов массива}
Procedure Init1(Var m: myarray);
Var
i: Integer; {локальная переменная для работы с элементами массива}
Begin
Writeln('введите ',n, ' чисел');
For i:=l To n Do {ввод массива с клавиатуры}
Readln(m[i]);
End;
Procedure Print(m: myarray);
Var
i: Integer;
Begin
For i:=l To n Do {вывод массива}
Write(m[i]: 4);
Writeln;
End;
Function Sum(m: myarray): Integer;
Var
i, sum: Integer;
Begin
sum:=0; {начальное значение суммы}
For i:=l To n Do
sum:=sum+m[i]; {к уже найденной сумме первых (i-1) элементов прибавляем i-й элемент}
End;
Begin {начало основной программы}
Init1(A); {обращение к процедуре формирования}
Print(А); {вывод массива}
s:=Sum(A); {нахождение суммы элементов}
Writeln('Сумма равна ',s); {вывод результата на экран}
Readln;
End.
Первый способ задания одномерного массива — это задание с клавиатуры (он был рассмотрен в примере выше — процедура Init1).
Второй способ задания — это задание с помощью генератора случайных чисел; этот способ более удобен, когда много элементов в массиве.
Пример 2. Составим программу заполнения и распечатки одномерного массива с помощью генератора случайных чисел. Процедура вывода уже составлена ранее, а процедуру формирования напишем новую.
Program Example_12;
Const
n=30;
dd=51;
{n - число элементов массива, dd - для генератора случайных чисел}
Type myarray = Array [l..n] Of Integer;
Var
A: myarray;
Procedure Init2(Var m:myarray);
{процедура заполнения (инициализации) массива случайными числами}
Var
i: Integer;
Begin
For i:=l To n Do
m[i]:=-25+Random(dd);
{Random выбирает случайное число из отрезка от 0 до dd-1, тогда i-му элементу массива будет присвоена сумма выбранного случайного числа минус 25, таким образом, массив будет заполняться случайными числами от -25 до 25}
End;
Procedure Print(m:myarray) ; {процедура вывода (распечатки) массива}
. . .
Begin {начало основной программы}
Randomize; {включение генератора случайных чисел}
Init2(А); {обращение к процедуре заполнения массива}
Print(А); {обращение к процедуре вывода заполненного массива}
Readln;
End.
Третий способ задания — это чтение чисел из файла.
Пример 3. Пусть в файле записано несколько строк, а в каждой из них по 30 целых чисел. Составить программу с использованием процедуры заполнения массива из файла.
Program Example_13;
Const
n=30; {n - это число элементов массива,}
Type myarray = Array [l..n] Of Integer;
Var
A: myarray;
F: text;
Procedure Init3(Var m:myarray);
{процедура заполнения (инициализации) массива}
Var
i: Integer;
Begin
For i:=l To n Do
Read(f, m[i]) {чтение из файла очередного числа}
End;
Procedure Print(m:myarray);
{процедура вывода (распечатки) массива}
. . .
Begin {начало основной программы}
{связываем файловую переменную с конкретным внешним файлом}
Assign(F, '...');
Reset (F); {открываем его для чтения}
While Not Eof(F) Do Begin {пока не конец файла}
{считываем очередную строку)
Init3(A); {обращение к процедуре заполнения массива}
Print(А); {обращение к процедуре вывода}
Readln(F);
End;
Readln;
End.