Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 325; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.119.163 (0.006 с.) |