Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Программирование с использованием процедурСодержание книги
Поиск на нашем сайте
Общий вид процедуры следующий:
procedure f (var g1:t1; g2:t2; …); Раздел описаний Begin Раздел операторов end; здесь f – имя процедуры; gi - формальные параметры (g 1 – формальный параметр-переменная, записывается со служебным словом var; g2 – формальный параметр-значение); t Особенности использования процедуры: – процедура помещается в главной программе после раздела var и перед разделом begin основной программы; – вызов процедуры: f (b1, b2, …); здесь bi - фактические параметры; – возврат из процедуры происходит на оператор, следующий за вызовом; – формальные и фактические параметры должны соответствовать по количеству, порядку следования и типу; – параметры–значения используются для передачи значений в подпрограмму (выполняют роль входных параметров процедуры). Они могут получать значения фактических параметров, но не могут передавать значения фактическим параметрам; – параметры–переменные записываются со служебным словом var в заголовке процедуры. Параметры-переменные выполняют роль как входных, так и выходных параметров процедуры. Они могут получать значения фактических параметров, изменять их в процедуре и возвращать новые значения фактическим параметрам; – тип массива, передаваемого в процедуру, должен быть описан в разделе type основной программы.
Пример 1. В символьном массиве А(10) заменить все * на:, а в массиве В(15) – все. на!. Type cm=array [1..15] of char;
Var a, b: cm; a1, a2, b1, b2: char; i: integer;
procedure Zam (var x:cm; n: integer; x1, x2: char); Begin WriteLn (‘Исходный массив’); for i:= 1 to n do Write(x[i]); WriteLn; for i:= 1 to n do if x[i] = x1 then x[i]:= x2; WriteLn (‘Новый массив’); for i:= 1 to n do Write (x[i]); WriteLn; end;
{ Основная программа } Begin WriteLn (‘Введите а(10)’); for i:= 1 to 10 do ReadLn (a[i]); WriteLn (‘Введите в(15)’); for i:= 1 to 15 do ReadLn (b[i]); Zam (a, 10, ‘*’, ‘:’); Zam (b, 15, ‘.’, ‘!’); ReadLn; End.
Пример 2. Второй вариант первого примера. Ввод, вывод массивов, замену символов оформить как процедуры.
Type cm =array [1..15] of char;
Var a, b:cm; a1, a2, b1, b2:char; ka, kb, i:integer;
procedure Vvod (var x:cm, n:integer; im: char); Begin WriteLn (‘Введите массив’, im); Write (‘Количество элементов’, n); for i:= 1 to n do ReadLn (x[i]); end;
procedure Vivod (x:cm; n:integer; im: char); Begin WriteLn (‘массив’,im); for i:= 1 to n do Write (x[i],’_’); WriteLn; end;
procedure Zam (var x:cm; i: integer; x1, x2:char); Begin for i:= 1 to n do if x[i] = x1 then x[i]:= x2; end;
{ Основная программа } Begin WriteLn (‘Введите количество элементов в массиве а=>’); ReadLn (ka); Vvod (a, ka, ‘a’); Write (‘введите количество элементов в=>’); ReadLn(kb); Vvod (b, kb, ‘b’); Vivod (a, ka, ‘a’); Zam (a, ka, ‘*’, ‘:’); Vivod (a, ka, ‘a’); Vivod (b, kb, ‘b’); Zam (b, kb, ‘.’, ‘!’); Vivod (b, kb, ‘b’); ReadLn; End.
Пример 3. В символьных матрицах А(3,3) и D (4,4) определить номер строки и номер столбца, где больше всего *.
Type cmatr= array [1..4, 1..4] of char;
Var a, d: cmatr; c: char; i, j: integer; k, max: integer; as, at, ds, dt: integer;
procedure Pz (b: cmatr; n: integer;c1: char; var bs, bt: integer); Begin WriteLn (‘Матрица’,c1); for i:= 1 to n do Begin for j:= 1 to n do Write (b[i, j]); WriteLn; end; max:= 0; bs:= 0; for i:= 1 to n do Begin k:= 0; for j:= 1 to n do if b[i, j] = ’*’ then k:= k+1; if max < k then max:= k; bt:= j; end; end;
{ Основная программа } begin WriteLn (‘Введите а(3, 3)’); for i:= 1 to 3 do for j:= 1 to 3 do ReadLn (a[i, j]); Pz (a, 3, ‘a’, as, at); WriteLn (‘В матрице а строка =’as,’ столбец =’ at); WriteLn (‘Введите d(4, 4)’); for i:= 1 to 4 do for j:= 1 to 4 do ReadLn (d[i, j]); Pz (d, 4, ‘d’, ds, dt); WriteLn (‘в матрице d строка =’ds,’ столбец =’, dt); End.
Рекурсия и опережающее описание
Рекурсия – это такой способ организации вычислительного процесса, при котором подпрограмма в ходе вычисления обращается к самой себе. Классический пример – вычисление факториала.
program factorial; Var n: integer;
function Factorial (n: integer): real; Begin if n=0 then Fac:=1 Else Fac:=n*Fac(n-1); end;
Begin ReadLn(n); WriteLn(n, ‘!=’, fac(n)) End.
При выполнении правильно организованной рекурсии осуществляется многократный переход от некоторого текущего уровня организации алгоритма к нижнему уровню последовательно до тех пор, пока не будет получено тривиальное решение поставленной задачи (в данном случае это факториал 0).
Во время создания программы может возникнуть следующая ситуация:
procedure A (i: integer); Begin … B(i); … end;
procedure B (j: integer); Begin … A(j); … end;
Согласно правилу, гласящему, что каждый идентификатор должен быть описан перед своим использованием, такую конструкцию использовать нельзя. Поэтому в данном случае следует воспользоваться опережающим описанием (директива forward).
procedure B (j: integer); forward;
procedure A (i: integer); Begin … B(i); … end;
procedure B; Begin … A(j); … end;
Важный момент: тело процедуры B начинается заголовком, в котором уже не указываются описанные ранее формальные параметры.
|
||
|
Последнее изменение этой страницы: 2017-02-05; просмотров: 425; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.) |