понедельник, 28 января 2013 г.

Процедуры

1. Процедуры в Паскале


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

Формат описания процедуры имеет вид:
procedure имя процедуры (формальные параметры);
  раздел описаний процедуры
begin
  исполняемая часть процедуры
end;

Формальные параметры в заголовке процедур и функций записываются в виде:
var имя параметра: имя типа
и отделяются друг от друга точкой с запятой (служебное слово var может отсутствовать, об этом см. ниже). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. Список формальных параметров может отсутствовать.

Вызов процедуры производится оператором, имеющим следующий формат:
имя  процедуры(список фактических параметров);

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

Пример программы с использованием процедуры поиска максимума из двух целых чисел.

var x,y,m,n: integer;

procedure MaxNumber(a,b: integer; var max: integer);
begin
   if a>b then max:=a else max:=b;
end;

begin
   write('Введите x,y ');
   readln(x,y);
   MaxNumber(x,y,m);
   MaxNumber(2,x+y,n);
   writeln('m=',m,'n=',n);
end.

2. Передача параметров

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

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

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

Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке (var). Практически это сводится к расстановке в заголовке процедуры описателя var при всех параметрах, которые обозначают результат работы подпрограммы.

3. Решение задач

Вместе: proc3 (стр. 36), самостоятельно proc4.
Вместе: proc6, самостоятельно (или вместе) proc7.

понедельник, 21 января 2013 г.

Цикл while (продолжение)

1. Выполните задание без компьютера


Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
begin
  s:=5;
  k:=0;
  while k < 9 do begin
    k:=k+2;
    s:=s+k;
  end;
  write(s);
end. 

2. Программируем

Добавим для использования еще один тип данных.

Тип boolean (логический). Переменные и константы логического типа занимают 1 байт и принимают одно из двух значений, задаваемых предопределенными константами True (истина) и False (ложь). 

Решаем вместе задачу while22.
Перед решение задачи выполните упражнения:
  • разложите число на простые множители: 55, 350, 47.
  • определите, является ли число простым: 53, 91.
Решаем вместе задачу while23.

Описание алгоритма нахождения НОД делением
  1. Большее число делим на меньшее.
  2. Если делится без остатка, то меньшее число и есть НОД (следует выйти из цикла).
  3. Если есть остаток, то большее число заменяем на остаток от деления.
  4. Переходим к пункту 1.
Перед решение задачи выполните упражнения:
  • найдите вручную НОД (42,66), НОД (55,12), НОД (350,35).
Самостоятельно напишите программу для поиска НОД вычитанием по следующему алгоритму:
  1. Из большего числа вычитаем меньшее.
  2. Если получается 0, то значит, что числа равны друг другу и являются НОД (следует выйти из цикла).
  3. Если результат вычитания не равен 0, то большее число заменяем на результат вычитания.
  4. Переходим к пункту 1.
Задание В2 ЕГЭ по информатике за 2011 год:


вторник, 15 января 2013 г.

Цикл с предусловием (while)

1. Структура цикла while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.

Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.

2. Решение задач

Вместе while1, самостоятельно while2.
Вместе while5, самостоятельно while11.
Вместе while17, самостоятельно while18.