ТЕМА: "ВЕТВЛЕНИЯ И ЦИКЛЫ В ПАСКАЛЕ. ОПЕРАТОР ВАРИАНТА".

Ход урока.

I. Актуализация опорных знаний.

Разбор практической работы № 1, домашнего задания №2.

II. Новый материал.

Вопросы для рассмотрения темы урока.

  1. Оператор ветвления.
  2. Оператор варианта.
  3. Оператор цикла с параметром.
  4. Оператор цикла с предусловием.
  5. Оператор цикла с постусловием.
  6. Оператор ветвления (условный).

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

IF логическое выражение THEN серия команд 1 ELSE серия команд 2

Данный оператор выполняется следующим образом. Сначала вычисляется выражение, стоящее после служебного слова if. Результат вычисления должен иметь булевский тип. Если значение выражения есть true, то выполняется оператор, указанный после служебного слова then. Если результат вычисления выражения есть false, выполняется оператор, сле-дующий за служебным словом else. Если при этом часть условного оператора, начиная со слова else, отсутствует, то управление немедленно передаётся оператору, следующему за условным.

Пример 1. Длины сторон треугольника равны a, b, c. Определите, является ли этот треугольник равносторонним, равнобедренным или разносторонним.

Решение.

алг вид труегольника (вещ a,b,c, лит y);
арг a, b, c
рез y
нач
если a=b и b=c
то y:="треугольник равносторонний"
иначе если a=b или b=c или c=a
то y:="треугольник равнобедренный"
иначе Y:="треугольник разносторонний"
все
все
кон

program vid_treugolnik;
var a,b,c: real; y:string;
begin
write('Введите значения a,b,c');
readln(a,b,c);
if (a=b) and (b=c) then y:='Треугольник равносторонний'
else if (a=b) or (b=c) or (c=a) then y:='Треугольник равнобедренный'
else y:='Треугольник разносторонний';
writeln (y);
end.

Условный оператор управляет только одним оператором, поэтому если требуется произвести более 1 действия, то необходимо использовать составной оператор (операторные скобки).

Условные операторы могут быть встроенными. И в тоже время не каждый встроенный оператор может иметь ELSE. В этом случае появляется неоднозначность, которая решается следующим образом: ELSE всегда относится к ближайшему IF.

........
IF A>B THEN IF C<D THEN IF C<0 THEN C:=0 ELSE A:=B
........

Оператор варианта.

Оператор варианта является обобщением условного оператора: он дает возможность выполнить один из нескольких операторов в зависимости от значения некоторого выражения: называемого селектом. В общем виде оператор имеет вид:

CASE селектор OF
метка 1: оператор 1;
метка 2: оператор 2;
. . . . . . . . . . . . . . . . .
метка N: оператор N ELSE оператор N+1
END;

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

Метка варианта - не обычная метка: это не обязательно целое число, она не описывается в разделе LABEL, на не нельзя ссылать в операторе GOTO.

Пример 2. Составить программу для вычисления выражения:

program pr2;
var x,y,a,b,c:real; n:1..5;
begin
n:=trunc (x);
read (x, a, b, c);
case n of
1: y:= a + b*x + a*x*x;
2: y:= abs(a*sin(a*b));
3: y:= sqrt(abs(a+b*x*x*x))+c;
4: y:=exp(a*sin(x)) + c*c*c;
5: y:=a*ln(abs(b+c/(2*x)));
else y:=0;
end;
end.

Кроме одиночных констант в альтернативах оператора варианта могут быть заданы списки и/или диапазоны значений, которые в этом случае должны разделяться символом "," (запятая), например:

case Switch of
1..2 : Proc1
3,4,10..20 : Proc2
5, 6 : Proc3
else Proc4
end

В последнем примере оператор процедуры Prok2 будет выполнен в том случае, когда переменная Switch будет иметь одно из следующих значений: 3, 4, 10, 11, 12,...,19, 20. При использовании оператора варианта должны выполняться следующие правила:

  1. Значение выражения - "переключателя", записанного после служебного слова case, должны принадлежать дискретному типу; для целого они должны лежать в диапазоне -32768 ... 32767.
  2. Все константы, предшествующие операторам альтернатив, должны иметь тип, совместимый с типом выражения.
  3. Все константы в альтернативах должны быть уникальны в пределах оператора варианта (т.е. повторения констант в альтернативах не допускаются); диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах.

Обратите внимание, что синтаксис языка предполагает один оператор для каждой альтернативы; при необходимости задания нескольких операторов следует сгруппировать их в составной оператор. В то же время ветвь else допускает последовательность операторов, разделённых символом ";"

Оператор цикла с параметром.

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

FOR параметр цикла:=выражение TO выражение DO (DOWNTO)

Данный вариант оператора цикла определяет:

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

Приведённый ниже пример иллюстрирует использование цикла с параметром: for i:=1 to 10 do M:=i*2

Здесь задано десятикратное повторение оператора присваивания, причем управляющая переменная i последовательно принимает значения 1,2,...,9,10.

Диапазон значений управляющей переменной может задаваться выражениями, которые вычисляются один раз перед выполнением цикла:

for i:=x+2 downto x-2 do
M:=M+i;

На использование управляющей переменной налагаются следующие ограничения:

  1. В качестве управляющей переменной должна использоваться простая переменная, описанная в текущем блоке.
  2. Управляющая переменная должна иметь дискретный тип.
  3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной.
  4. В теле цикла запрещается явное изменение значения управляющей переменной (например, оператор присваивания).
  5. После завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора цикла не было прервано оператором перехода.

Оператор, который содержится в теле оператора for, выполняется один раз для каждого значения в диапазоне между начальным и конечным значениями. Управляющая переменная всегда определяется начальным значением. В случае использования служебного слова to значение управляющей переменной увеличивается при каждом повторении на единицу. Если начальное значение превышает конечное значение, то содержащийся в теле операторa for оператор не выполняется. Когда в операторе цикла используется служебное слово downto, значение управляющей переменной уменьшается при каждом повторении на единицу. Если начальное значение в таком операторе меньше, чем конечное, то содержащийся в теле оператора цикла оператор не выполнится ни разу.

Пример 3. Вычислить:


program SQ;
var i,n: integer; s,a:real;
begin
readln(n);
s:=0;
for i:=1 to n do
s:=sqrt(2+s);
writeln(s:10:6);
end.

Оператор цикла с предусловием.

Этот структурный оператор задаёт повторяющееся выполнение оператора, содержащегося в нём. Перед каждым очередным выполнением внутреннего оператора производится проверка значения выражения логического типа, которое служит критерием повторения: если это выражение имеет значения true, то выполняется очередная итерация; в противном случае (значение выражения есть false) выполнение оператора цикла заканчивается. Если выражение с самого начала имеет значение false, то цикл не выполняется ни разу.

WHILE условие DO
оператор

Примерами оператора цикла с предусловием могут служить:

  1. while i <> 0 do j :=j+1;
  2. while X <=N do
    begin Fact := Fact*X; X := X+1; end;

Пример 4. Сколько слагаемых должно быть в сумме, чтобы эта сумма оказалась больше 5?


program poisk;
var i,n:integer; s:real;
begin
s:=0; i:=1;
while S<=5 do
begin
s:=s+1/i;
i:=i+1;
end;
n:=i;
writeln (n);
end.

Ответ: 84.

Оператор цикла с постусловием.

Этот оператор аналогичен предыдущему оператору (циклу с предусловием), однако отличается от него тем, что условие проверяется после выполнения очередной итерации (таким образом, гарантируется хотя бы однократное выполнение цикла), а также тем, что критерием прекращения цикла является равенство выражения константе true; если выражение есть false, то цикл повторяется.

REPEAT
операторы цикла
UNTIL условие

Например, цикл вида
repeat
Proc1(x,y+i); i:=i-1;
until i=0
будет выполняться до тех пор, пока i не станет равным нулю.

Обратите внимание, что синтаксис while-цикла допускает в теле цикла единичный или составной оператор, в то время как repeat-цикл может содержать последовательность операторов.

Приведем еще два примера repeat-циклов:

  1. repeat
    K:=I mod J; I:=J; J:=K
    until J=0;
  2. repeat
    Write("Введите целое число: ");
    Readln(i); Process(i)
    until (i<0) and (i>9)

Пример 5.

program poisk;
var i,n:integer; s:real;
begin
s:=0; i:=1;
repeat
s:=s+1/i;
i:=i+1;
until s>5;
n:=i;
writeln (n);
end.

III. Практическая работа на ЭВМ.

Набрать программы для примеров 1, 2, 3, 4,5.

IV. Домашнее задание.

  1. Длины сторон треугольника равны a, b, c. Определите, является ли этот треугольник остроугольным, прямоугольным или тупоугольным.
  2. Найти остаток от деления целой части значения функции z=ln(x2 + a*b) на 7 и в зависимости от его величины напечатать сообщение об одном из дней недели, пронумеровав их от 0 до 6.
  3. Найти сумму: y=sin x + sin sin x + sin sin sin x + .... + sin sin .... sin x
  4. Используя циклы с условием решить задачу:
    Найти произведение первых N сомножителей:

Hosted by uCoz

к оглавлению     на домашнюю