Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцый для 1 курса-1 семестр.doc
Скачиваний:
3
Добавлен:
09.11.2019
Размер:
2.95 Mб
Скачать

Аператар паўтарэння for

Аператар цыкла, ці аператар паўтарэння FOR, складаецца з загалоўка і цела цыкла. Ён можа быць прадстаўлены ў двух фарматах:

1) FOR параметр_цыкла:=S1 TO S2 DO аператар;

2) FOR параметр_цыкла:=S1 DOWNTO S2 DO аператар; або схемай:

Выразы S1 і S2 вызначаюць адпаведна пачатковае і канечнае зна­чэн­ні параметра цыкла; FOR…DO – загаловак цыкла; аператар утварае це­ла цыкла, гэта можа быць просты ці састаўны аператар.

Аператар FOR забяспечвае выкананне цела цыкла да той пары, па­куль не будуць перабраны ўсе значэнні параметра цыкла – ад па­чат­ко­ва­га да канечнага.

Параметр цыкла, яго пачатковае значэнне S1 і канечнае значэнне S2 па­він­ны належаць да аднаго і таго ж скалярнага парадкавага тыпу даных (сумяшчальнымі па наданні значэнняў!).

Калі выкарыстоўваюцца тыпы Integer, Byte, інтэрвальны, зна­чэн­ні параметра цыкла паслядоўна павялічваюцца пры FOR…TO ці па­мян­ша­юц­ца пры FOR…DOWNTO на 1 пры кожным паўтарэнні. Калі вы­ка­рыс­тоў­ва­юц­ца не цэлалікавыя парадкавыя тыпы, то павелічэнне адбываецца на ўмоўную «адзінку» пэўнага тыпу. Напрыклад, калі працуем з тыпам Char, тады адбываецца пераход на наступны (папярэдні) сімвал, г. зн. ад­роз­нен­не на Chr(Ord(C)1).

Разгледзім некаторыя прыклады выкарыстання аператара FOR.

Аператар

Вынік

FOR i:=10 TO 14 DO Write (i:3);

10 11 12 13 14

FOR i:=14 DOWNTO 10 DO Write (i:3);

14 13 12 11 10

FOR ch:='a' TO 'e' DO Write (ch:2);

a b c d e

FOR ch:= 'e' DOWNTO 'a' DO Write (ch:2);

e d c b a

VAR Sort :(S1, S22, S23, S3); FOR Sort:=S1 TO S3 DO аператар;

Колькасць паўтораў аператара FOR відаць з наступнай табліцы.

Аператар

S1  S2

S1 = S2

S1 > S2

FORTO

S2–S1+1 разоў

1 раз

Не выконваецца

FORDOWNTO

Не выконваецца

1 раз

S1–S2+1 разоў

Заўвага. Існуе правіла: у целе цыкла нельга самім змяняць значэнне па­ра­мет­ра цыкла.

Пасля нармальнага завяршэння аператара FOR значэнне параметра цык­ла звычайна роўна рэальнаму канечнаму значэнню. Калі ж FOR не вы­кон­ваў­ся, то значэнне параметра цыкла не вызначана.

Калі мы хочам дачасна выйсці з цыкла, выкарыстаем аператар break, які рэалізуе выхад на аператар, размешчаны адразу пасля цела цыкла.

Тыповымі задачамі выкарыстання цыклаў з’яўляюцца вылічэнне су­мы і ўвядзенне ў цэлалікавую ступень.

1. Вылічэнне сумы  

S:=0;

FOR i:=1 TO 10 DO S:=S+1.0/sqr(i);

Write(S:8:4);

2. Увядзенне ў цэлалікавую ступень

y:=1;

FOR i:=1 TO n DO y:=y*a;

На наступным прыкладзе добра відаць, што не толькі апе­ра­та­ры, але і выбраныя тыпы даных адказваюць за рашэнне пастаўленай за­да­чы.

Задача. Вылічыць суму:

Інакш: an = n!, a0 = 1,

Паколькі намі раней разглядаліся блок-схемы ра­шэн­ня задач па накапленні сум, адразу атрымаем на­ступную блок-схему.

Калі а, у маюць тып Integer, то для вы­нік атрымліваецца правільны, а пры – адмоў­ны. Калі ж а, у маюць тып Longint, то пры вы­нік добры, а пры – адмоўны. З пункту гле­джання дыяпазону даных абгрунтаваць гэта проста.

Калі а, у маюць тып Real, то вынік будзе на­бліжаны, бо для мантысы адводзіцца абмежаваная колькасць бітаў. Можна паспрабаваць тып Comp, аднак там таксама ёсць абмежаванні на дыяпазон да­ных. Значыць, для любых вялікіх патрэбна вы­карыстоўваць масіў лічбаў у 10-й с/зл для захавання аn і рэалізаваць аперацыі складання і множання над такімі «доўгімі» лікамі. Такім чынам, алгарытм мо­жа мець некалькі рэалізацый, у залежнасці ад тыпу даных для захавання аn.

Праграма, якая рэалізуе алгарытм на мове Pascal:

PROGRAM Sum;

CONST k = 12;

VAR y, a : Longint;

n : Byte;

BEGIN

y := 0;

a := 1;

FOR n := 1 TO k DO

BEGIN

y := y + a;

a := a * (n+1)

END;

Writeln ('k=', k, ' y=', y)

END.

Заўвага. У целе цыкла могуць быць і другія ўкладзеныя аператары цыкла FOR.

Заданне. Раздрукаваць табліцу сімвалаў і адпаведных ім ASCII кодаў, пачынаючы з сімвала з кодам 32.