Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BPlab (работы по паскалю).pdf
Скачиваний:
33
Добавлен:
01.06.2015
Размер:
1.04 Mб
Скачать

20 –

5.Какова фактическая длина пустой строки ?

6.Какие операции допустимы над данными строкового типа ?

Лабораторная работа 6. Использование процедур

Основные сведения

Описание процедуры

procedure имя_процедуры(параметр1;параметр2;...); тело_процедуры;

Описание процедуры располагается непосредственно перед разделом операторов основной программы или вызывающей подпрограммы (процедуры или функции).

Параметры процедуры могут быть двух видов:

параметры-значения: параметр1, параметр2, ... : тип ;

параметры-переменные: var параметр1, параметр2, ... : тип .

Параметр-значение передается в процедуру по значению, т.е. копируется, и его изменение внутри процедуры не влияет на значение подставляемого на его место при вызове фактического параметра. Параметры-значения могут рассматриваться только как входные параметры.

Параметр-переменная передается в процедуру по адресу, его изменение внутри процедуры влечет за собой изменение подставляемого на его место при вызове фактического параметра. Параметры-переменные могут рассматриваться как входные, так и выходные параметры.

Тело процедуры подобно телу основной программы. Оно может содержать разделы описания констант, типов, переменных, и обязательно содержит блок исполняемых операторов.

Вызов процедуры

имя_процедуры( фактический_параметр1, фактический_параметр2,...)

Типы фактических параметров-значений, передаваемых в процедуру при вызове, должны совпадать или быть совместимыми по присваиванию с типами формальных параметров, заданных в заголовке процедуры. Типы фактических параметров-переменных должны строго совпадать с типами формальных параметров-переменных.

Связь по данным между вызывающей программой и процедурой может осуществляться одним из двух способов:

через параметры процедуры;

через глобальные переменные, описанные в вызывающей программе и доступные в процедуре.

Пример выполнения

Ввести массив из 20 чисел, найти среднее арифметическое положительных чисел массива, упорядочить его по возрастанию элементов и вывести упорядоченный массив. Ввод, вывод массива, подсчет среднего арифметического и упорядочение оформить в виде процедур:

program PRIMER; const N=20;

type Data = array [1..N] of real; var arM : Data;

{***** VVOD *****}

procedure VVOD( var arA : Data );

{

Действие:

Ввод со стандартного ввода элементов массива. Параметры:

21 –

массив arA. Возвращает:

массив arA. Замечания: -

}

var I:integer; begin

writeln('Ввод массива'); for I:=1 to N do begin

write('Введите A[',I,']'); readln(arA[I])

end end;{ VVOD }

{***** VIVOD *****}

procedure VIVOD( var arA : Data );

{

Действие:

Вывод на стандартный вывода элементов массива. Параметры:

массив A. Возвращает: - Замечания: -

}

var I:integer; begin

writeln('Отсортированный массив');

for I:=1 to N do writeln('A[',I,']=', arA[I]); end;{ VIVOD }

{***** SREDAR *****}

procedure SREDAR( var arA : Data );

{

Действие:

Подсчет и вывод среднего арифметического положительных элементов массива. Параметры:

массив arA. Возвращает:

Печать среднего арифметического Замечания: -

}

var rS:real; I,J :integer; begin

rS:=0;

J:=0;

for I:=1 to N do

if arA[I]>0 then begin rS:=rS+arA[I]; J:=J+1

end;

if J=0 then writeln('Положительных чисел нет') else writeln('Среднее арифметическое=',rS/J)

end;{ SREDAR }

{***** SORT *****}

procedure SORT( var arA : Data );

{

Действие:

22 –

Сортировка массива методом простого выбора. Параметры:

массив arA. Возвращает:

массив arA. Замечания: -

}

var I,J,K:integer; rMIN,rR:real; begin

for I:=1 to N-1 do begin K :=I;

rMIN:=arA[K]; for J:=I to N do

if A[J]<rMIN then begin rMIN:=arA[J];

K :=J end;

rR :=arA[I]; arA[I]:=rMIN; arA[K]:=rR

end end;{ SORT }

{*****MAIN *****}

begin

VVOD( arM ); SREDAR( arM ); SORT( arM ); VIVOD( arM )

end.

Варианты заданий

Во всех вариантах заданий обрабатывается таблица розыгрыша лотереи, которая представляет собой тройки чисел вида: «серия-номер-выигрыш».

1.Ввести таблицу розыгрыша, упорядочить ее по убыванию серии, вывести упорядоченную таблицу на экран, циклически запрашивать серию и для указанной пользователем серии выдавать все имеющиеся в таблице тройки «серия-номер-выигрыш». Ввод, вывод, упорядочение таблицы и вывод троек для заданной серии организовать в виде процедур.

2.Ввести таблицу розыгрыша, упорядочить ее по возрастанию совокупности полей «выигрыш» и «серия», вывести упорядоченную таблицу на экран, циклически спрашивать две пары «выигрыш-серия» и выводить на экран данные о выигрышных билетах, не попавших во введенный пользователем интервал. Ввод, вывод, упорядочение таблицы и вывод данных о билетах, не попадающих во введенный отрезок, оформить в виде процедур.

3.Ввести таблицу розыгрыша, упорядочить ее по возрастанию серии, вывести упорядоченную таблицу на экран, циклически запрашивать серию и номер билета и выдавать сообщение, есть ли выигрыш и какой. Ввод, вывод, упорядочение и поиск по таблице оформить в виде процедур.

4.Ввести таблицу розыгрыша, упорядочить ее по возрастанию выигрыша, вывести упорядоченную таблицу на экран, подсчитать общую сумму выигрыша, приходящуюся на следующие категории выигрыша: 1…500, 501…1000, 1001…5000, 5001 и выше. Ввод, вывод, упорядочение таблицы и подсчет суммы, приходящейся на одну из категорий выигрыша, оформить в виде процедур.

5.Ввести таблицу розыгрыша, упорядочить ее по возрастанию номеров, вывести упорядоченную таблицу на экран, циклически запрашивать номер билета и выдавать серию и выигрыш, если номер совпадает, или ближайшие тройки «серию-номер-выигрыш», имеющиеся в таблице, если номер не совпадает. Ввод, вывод, упорядочение и поиск по таблице оформить в

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]