Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция по ПАСКАЛЬ.doc
Скачиваний:
38
Добавлен:
20.04.2015
Размер:
572.93 Кб
Скачать

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.