Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции информатика.doc
Скачиваний:
60
Добавлен:
11.04.2015
Размер:
2.47 Mб
Скачать

3.4 Оператор выбора case

С помощью этого оператора можно выбрать вариант из любого количества вариантов.

Структура оператора:

case <ключ выбора> of

константа1: оператор1;

константа2: оператор2;

константаN: операторN;

else оператор;

end;

<ключ выбора> - переменная или выражение, значение которого вычисляется. Далее выполняется оператор, которому предшествует константа, равная вычисленному значению. Если константы, соответствующей значению ключа выбора не найдено, то выполняется оператор после else (эта часть может отсутствовать).

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

case i of

0,2,4,6,8: writeln(‘четная цифра’);

1,3,5,7,9: writeln(‘нечетная цифра’);

10..100: writeln(‘число от 0 до 100’);

else writeln(‘отрицательное число или >100’);

end;

Пример: программа-калькулятор

var op: char;

x,y,r: real;

err: boolean;

begin

err:=false;

write(‘Введите х, у’); readln(x,y);

write(‘Определите операцию’); readln(ор);

case op of

‘+’: r:=x+y;

‘-’: r:=x-y;

‘*’: r:=x*y;

‘/’: r:=x/y;

else err:=true;

end;

if err then writeln(‘Неверно заданная операция’)

else writeln(х, ор, у, ‘=’, r);

end.

3.5 Оператор цикла с параметром (цикл for)

Циклом называется последовательность действий, выполняемая более одного раза. В Паскаль есть три различных типа операторов, позволяющих запрограммировать циклический процесс: оператор цикла с параметром (цикл FOR); оператор цикла с предусловием (цикл WHILE) и оператор цикла с постусловием (цикл REPEAT).

Рассмотрим работу оператора цикла с параметром (цикл FOR). Начнем с примера. Пусть требуется вывести на экран строку из пяти звездочек через пробел. Рассмотрим три варианта решения:

1 вариант:

Begin

Write(‘* * * * *’);

End.

2 вариант:

Begin

Write(‘* ’);

Write(‘* ’);

Write(‘* ’);

Write(‘* ’);

Write(‘* ’);

End.

3 вариант:

var i: integer;

Begin

for i:=1 to 5 do

Write(‘* ’);

End.

Команду for i:=1 to 5 do Write(‘* ’); можно прочитать так: “Для i от 1 до 5 делай команду вывода звездочки”.

Переменная i изменит автоматически свое значение 5 раз (от 1 до 5 с шагом 1), а, следовательно, и оператор, записанный после слова do, повторится 5 раз.

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

Теперь перейдем к теоретической части.

Оператор цикла с параметром имеет следующую структуру:

заголовок цикла - for <параметр>:=<начальное значение> to <конечное значение> do

тело цикла - <оператор>;

Этот оператор используется, когда число повторений заранее известно.

Работает: В заголовке параметр цикла автоматически изменяется от начального значения до конечного с шагом 1 и каждый раз выполняется тело цикла - оператор после do.

for i:= 0 to 9 do write(i); На экране: 0123456789

T.e. сколько раз параметр цикла изменит свой значение от начального до конечного включительно с шагом один, столько раз выполнится тело цикла.

Схема оператора FOR:

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

Пример 1.

var k,x: integer;

begin

x:=2;

for k:=x-2 to sqr(x) do

x:=k;

end.

Этапы работы данной программы:

1. x:=2

2. начальное значение параметра k = 0

конечное значение параметра k = 4

3. k:=0

4. проверка: если к<=4 то на п.5

если к>4 то на п.

5. выполнение тела цикла:

x:=k;

Замечание: изменение значения x в теле цикла уже не влияет на начальное и конечное значения параметра цикла.

6. возврат на заголовок цикла.

В заголовке: k:=k+1 (автоматически) и п.4

7. Переход к следующему оператору программы после цикла For .

Пример 2.

var c: char;

begin

for c:= ‘A’ to ‘D’ do

write(c);

end.

На экране:

ABCD

Пример 3.

var p, h: integer;

begin

h:=5;

for p:=3 to 1 do

h:=h+p;

writeln(‘h=’,h);

end.

На экране:

h=5

Пример 4.

var p, h: integer;

begin

h:=5;

for p:=1 to 3 do

h:=h+p;

writeln(‘h=’,h);

end.

Этапы вычисления:

h + p → h :

5 + 1 → 6

6 + 2 → 8

8 + 3 → 11

На экране:

h=11

Пример 5.

Внесем в программу примера 4 некоторые изменения:

var p, h: integer;

begin

h:=5;

for p:=1 to 3 do

begin

h:=h+p;

writeln(‘h=’,h);

end;

end.

Этапы работы:

h + p → h :

5 + 1 → 6

вывод на экран: h=6

6 + 2 → 8

вывод на экран: h=8

8 + 3 → 11

вывод на экран: h=11

В результате на экране:

h=6

h=8

h=11

(см. пояснения ниже)

Если тело цикла состоит из нескольких операторов, то организуется составной оператор begin..end;

Пример: Вычислить и вывести на экран 100 значений функции y=sin x. Начальное значение x=0; x изменяется с заданным шагом H.

var x,y,H: real;

i: integer;

begin

x:=0; H:=0,1;

for i:= 1 to 100 do

begin

y:=sin(x);

writeln(‘y = ’, y);

x:=x+H;

end;

end.

Таким образом, если необходимо повторить заданное количество раз не одну команду, а последовательность команд, то эта последовательность заключается в так называемые операторные скобки begin..end; . Если после слова do нет слова begin, то система считает телом цикла только одну команду, записанную после слова do. Если после слова do есть слово begin, то система считает телом цикла все команды, записанные между словами begin и end. А работает оператор цикла и в том и в другом случаях одинаково: тело цикла повторяется столько раз, сколько раз меняет свое значение параметр цикла от начального до конечного включительно с шагом 1.

Замечания:

  1. Переменная-параметр цикла должна быть обязательно описана в разделе описания переменных var. Имя параметра – любое.

  2. В теле цикла можно использовать параметр, но запрещается его явное изменение (например, присваиванием i:=… или вводом с клавиатуры read(i)).

  3. По окончании цикла переменная-параметр цикла считается неопределенной, хотя на практике последнее значение этой переменной сохраняется.

Пример:

var k,p: integer;

begin

x:=5;

for k:=x+1 to x+5 do k = 6 7 8 9 10

begin

x:=x-2; x = 3 1 -1 -3 -5

p:=sqr(k); p = 36 49 64 81 100

writeln(x,’ ‘,p);

end;

end.

В результате работы программы на экране увидим:

3 36

1 49

-1 64

-3 81

-5 100

Второй вариант оператора FOR:

заголовок цикла - for <параметр>:=<начальное значение> downto <конечное значение> do

тело цикла - <оператор>;

В этом операторе параметр изменяется от начального значения до конечного с шагом -1, т.е. уменьшается на 1 при каждом выполнении цикла. Если начальное значение сразу меньше конечного, то тело цикла не выполняется ни разу.

Пример: отсчет при запуске ракеты.

uses crt;

var i: integer;

begin

for i:= 9 downto 1 do

begin

write(#8,i);

delay(2000);

end;

write(#8,’Пуск’);

end.

Еще некоторые примеры программ.

Пример 1: Вычисление суммы чисел S=1+2+3+…+N.

var n, p, s: integer;

begin

s:=0;

write(‘Введите n’); readln(n);

for p:= 1 to n do

s:=s+p;

writeln(‘S = ’, s);

end.

Пример 2: Вычисление суммы чисел S=0,2+ 0,4+ 0,6+…+2.

const n=10;

var p, s, x: integer;

begin

s:=0; x:=0.2;

for p:= 1 to n do

begin

s:=s+ x;

x:=x+ 0.2;

end;

writeln(‘S = ’, s);

end.

В данном примере использование оператора цикла For нецелеобразно, т.к. в задании явно не указано число повторений суммирования. В таких случаях применяют циклы с условиями: While или Repeat (см. пп. 3.6, 3.7)

Пример 3: Вычисление факториала n!=1*2*3*…*N.

var n,i: integer;

f: longint;

begin

write(‘Введите n’); readln(n);

f:=1;

for i:= 1 to n do

f:=f*i;

writeln(‘Факториал f = ’, f);

end.