107
Бақылау сұрақтары
1. Таңдау операторы не үшін керек?
2. Таңау операторының бірнеше тармағы бңр мезетте орындалуы
мүмкін бе?
3. Айнымалы мəнінен кейін неше оператор жазуға болады?
4. Айнымалы мəні ретінде бірнеше тұрақтыны көрсетуге бола ма?
Тапсырмалар
1. Апта күнінің нөмірін жəне оған сəйкес күннің атын орыс, ағылшын
тілдерінде экранға шығаратын программа құрыңыз.
2. Ай нөмірін жəне оған сəйкес айдың атын орыс, ағылшын тілде-
рінде экранға шығаратын программа құрыңыз.
3. Айдың нөмірін енгізіңіз. Осы айға сəйкес жыл мезгілінің атын
экранға шығарыңыз.
4. Уақытты енгізіңіз (тек сағатты). Енгізілген уақытқа сəйкес
экранға: «Қайырлы таң», «Қайырлы күн», «Қайырлы кеш»,
«Қайыр лы түн» деген мəліметтердің бірін шығаратын програм-
ма құрыңыз.
5. Отыратын орын санын енгізіп, осыған сəйкес транспорт атын
экранға шығарыңыз: «велосипед», «мотоцикл», «жеңіл автомаши-
на», «микроавтобус», «автобус».
6. Енгізілген санға сəйкес келесі операциялар атын экранға шыға-
ратын программа құрыңыз: 1 - қосынды; 2 - айырма; 3 – көбейтінді;
4 – бөлінді;
7. Енгізілген санға сəйкес келесі функциялар атын экранға шығара-
тын программа құрыңыз: 1 - квадрат; 2 – квадрат түбір; 3 - си-
нус; 4 – косинус.
8. Енгізілген санға сəйкес келесі мəліметтерді экранға шығаратын
программа құрыңыз: 1 – фамилия; 2 – аты; 3 – тегі; 4 – туған
жылы.
9. Пернетақтадан енгізілген санның дəрежесін есептейтін програм-
ма құрыңыз. Дəреже 0 .. 9 аралығында.
10. Бүтін оң x санының символдарының санын анықтайтын програм-
ма құрыңыз.
5.4 Қайталану саны белгілі цикл операторы
Цикл операторлары құрамына кіретін операторлар тобын
бірнеше рет қайталау үшін қолданылады. Турбо Паскаль тілінде
арифметикалық прогресия түріндегі (FOR – санауышы бар цикл
операторы) параметрлік жəне итерациялық түрдегі қадамдық
цикл операторлары (WHILE жəне REPEAT) бар.
108
Арифметикалық прогресия түріндегі цикл операторы
циклдің қайталану саны алдын ала белгілі болған жағдайда қол-
данылады. Мұнда цикл параметрінің өзгеру қадамы +1 немесе –1
болуы мүмкін.
Оператордың жазылуы:
TO
FOR <цикл параметрі>:= <1 өрнек>
DOWNTO
<2 өрнек> DO ;
<цикл параметрі> – бұл кез келген типтегі айнымалы (бүтін,
символдық, санауыш, интервалды);
TO – цикл параметрінің өзгеру қадамы +1 болған кезде
қолданылатын түйінді сөз;
DOWNTO – цикл параметрінің өзгеру қадамы -1 болған кез-
де қолданылатын түйінді сөз;
<1 өрнек> – цикл параметрінің бастапқы мəні, өрнек типі цикл
параметрінің типімен бірдей;
<2 өрнек> – цикл параметрінің соңғы мəні, өрнек типі цикл
параметрінің типімен бірдей;
<оператор> – цикл тұлғасы – жəй немесе құрама оператор.
Параметрлі цикл операторының орындалу схемасы төмендегі
суретте көрсетілген.
FOR операторы төмендегі ереже бойынша орындалады:
•
<1 өрнек> есептеліп, цикл параметріне меншіктеледі;
•
цикл соңы шарты тексеріледі: <цикл параметрі> үлкен < 2
өрнек> болса TO сөзі қолданылады жəне <цикл параметрі> кем
< 2 өрнек> болса DOWNTO сөзі қолданылады;
•
цикл тұлғасы орындалады;
•
цикл параметрі бірге өседі (TO) немесе кемиді (DOWNTO);
•
циклдің бірінші сатысынан басқасы қайталанады.
Бұл операторды пайдаланғанда, мына жағдайларды есте сақ-
тау керек:
•
FOR циклінің ішінде цикл параметрінің бастапқы, соңғы
жəне ағымдағы мəндерін өзгертуге болмайды.
•
Қадамы +1 болып келетін нұсқада цикл параметрінің бас-
тапқы мəні соңғы мəнінен үлкен болса, цикл бір де бір рет орын-
далмайды. Сол сияқты, цикл қадамы –1 бол ғанда да, бастапқы
мəн соңғы мəннен кем болса, ол бір де бір рет атқарылмайды.
109
•
Циклден шығу GOTO операторы немесе BREAK проце-
дурасы көмегімен орындалған кездерден басқа жағдайлардың
барлығында цикл параметрінің мəні анықталмаған болып сана-
лады.
•
Цикл тұлғасы ретінде басқа оператор қолданылуы мүмкін.
Мысалы, F=N! факториалының мəнін есептеу үшін төмендегі
операторларды қолдануға болады:
a) … F:=1; b) … F:=1;
FOR I:=1 TO N DO FOR I:=N DOWNTO 1 DO
F:=F*I; … F:=F*I; …
Келесі мысалда цикл 26 рет орындалады жəне SIM айнымалысы
мəн терінде ’A’-дан ‘Z’-ке дейінгі латын əріптерін қабылдайды.
...
FOR SIM:=’A’ TO ‘Z’ DO
WRITELN(SIM);
...
Егер цикл ішінде тағы да басқа цикл болса, онда бұндай цикл
қабатталған цикл немесе күрделі цикл деп аталады. Ішінде циклі
бар цикл сыртқы цикл деп, ал сыртқы цикл ішіндегі цикл ішкі цикл
деп аталады. Ішкі жəне сыртқы циклдерде жоғарыда айтылған
үш циклдің кез келгені болуы мүмкін: FOR, WHILE немесе
REPEAT. Қабат
тасқан цикл құрастырған кезде, ішкі циклдің
барлық операторлары сыртқы цикл тұлғасының ішінде болуы
керек. Циклдерді бір-біріне қабаттастыру саны компьютердің
жады көлемімен шектеледі. Алдымен ішкі цикл орындалады,
сонан кейін сыртқы цикл параметрі өзгеріп, тағы да ішкі цикл
орындалады, т.с.с.
Мысал. Y мəнін төмендегі формаула бойынша есептеу керек
болсын делік:
1
1
N
M
ij
j
i
Y
A
=
=
=
∑ ∏
Мұның программасы мəтіні төмендегідей болады.
PROGRAM SP;
CONST N=10;
M=15;
110
VAR A: ARRAY [1..N,1..M] OF REAL;
I,J: INTEGER;
P,Y: REAL;
BEGIN
FOR I:=1 TO N DO
FOR J:=1 TO M DO
READLN(A[I,J]);
Y:=0;
FOR I:=1 TO N DO
BEGIN
P:=1;
FOR J:=1 TO M DO
P:=P*A[I,J];
Y:=Y+P
END;
WRITELN(‘Y=’,Y)
END.
Бақылау сұрақтары
1. Параметрлі цикл операторы неше рет орындалады?
2. Параметрлі цикл операторының неше нұсқасын білесіз?
3. Цикл параметрі дегеніміз не? Цикл параметірінің бтастапқы
жəне соңғы мəні дегеніміз не?
4. Параметрлі цикл денесі дегеніміз не?
5. Параметрлі циклдың орындалу ретін түсіндіріңіз.
6. Параметрлі цикл блок-схемасының жұмысын түсіндіріңіз.
7. Break жəне Continue процедураларының қызметін түсіндіріңіз.
8. Параметрлі циклды қолдануға мысал келтіріңіз.
Тапсырмалар
1. Пернетақтадан енгізілген n үшін
1
1
1
1
1
2
3
s
x
x
x
nx
= + +
+
+ +
қатарының қосындысын есептеңіз.
2.
x
x
y
1
4
.
0
2
−
=
функциясының x [2;10] аралығында 0,5 қадаммен
өзгергендегі мəнін есептеңіз.
3. Пернетақтадан енгізілген n үшін n! мəнін есептеңіз.
4. Пернетақтадан енгізілген n үшін
!
!
3
!
2
!
1
n
y
+
+
+
+
=
функ
ция-
сының мəнін есептеңіз.
111
5. Пернетақтадан енгізілген n үшін
7
6
6
5
5
4
4
3
3
2
2
1
+
+
+
+
+
қатарының
алғашқы n мүшесінің қосындысын.
6.
Пернетақтадан енгізілген а жəне n үшін
)
(
)
2
(
)
1
(
n
a
a
a
a
+
⋅
⋅
+
⋅
+
⋅
-ді есептеңіз.
7. Əр түсті жəне əр түрлі өрнектермен өрнектелген, көлемдері
бірдей параллепипедтерден құрастырылған, көлемі 10x10 көлбеу
тор салыңыз.
8. Əр түсті жəне əр түрлі өрнектермен өрнектелген, көлемдері
бірдей дөңгелектерден құрастырылған, көлемі 10x10 тор салыңыз.
9. Əр түсті жəне əр түрлі өрнектермен өрнектелген, көлемдері
бірдей тікбұрыштардан құрастырылған, көлемі 10x10 пирами-
да салыңыз. Пирамиданың ең төменгі қатары 20 тікбұрыштан
тұрады.
10. Əр түсті жəне əр түрлі өрнектермен өрнектелген, көлемдері
бірдей ромбтердан құрастырылған, көлемі 15x15 тор салыңыз.
5.5 Шарты алдын ала берілген цикл операторы
Итерациялық түрдегі цикл операторлары циклдің қай-
талану саны алын ала белгісіз болғанда немесе цикл параметрі-
нің өзгеру қадамы +1 немесе –1-ден өзгеше болған жағдайда
қолданылады.
Шарты алдын ала берілген цикл операторының жазылуы:
WHILE <логикалық өрнек> DO <оператор>;
Логикалық өрнек, яғни шарт цикл тұлғасының əр орындалу
5.12-сурет. Шарты алдын ала тексерілетін цикл алгоритмінің
орындалу схемасы
112
алдында есептелді. Егер логикалық өрнек АҚИҚАТ (TRUE)
мəнін қабылдаса, онда цикл тұлғасы орындалады, егер мəн
ЖАЛҒАН (FALSE) болса циклден шығу жүзеге асырылады.
Логикалық өрнек бірден жалған болған жағдайда цикл тұлғасы
бір де бір рет орындалмайды. Цикл тұлғасы жəй немесе құрама
оператор болуы мүмкін. Циклдің орындалу схемасы 5.12-суретте
көрсетілген. Мұнда цикл операторлары (тұлғасы) ішінде шартқа
кіретін айнымалыларды өзгертетін өрнектер міндетті түрде бо-
луы тиіс, əйтпесе цикл шексіз болып кетуі мүмкін.
FOR операторы көмегімен жазылған кез келген алгоритмді
WHILE операторы көмегімен жазуға болады. Мысалы, F=N!
факториалының мəнін есептеу программасы:
… F:=1;
I:=1;
WHILE I<=N DO
BEGIN
F:=F*I;
I:=I+1;
END; …
Келесі мысалда Sin(x) мəнін функцияны қатарға жіктеу
арқылы есептеу керек:
∑
∞
=
=
+
−
+
−
=
1
...
!
7
7
!
5
5
!
3
3
i
i
U
x
x
x
x
Y
Қосындыға тек төмендегі шартты қанағаттандыратын қатар
мүшелерін ғана қосу керек:
ε
>
i
U
демек, қатардың əрбір мүшесі берілген
дəлдіктен үлкен болуы
тиіс.
PROGRAM SINX;
VAR X,Y,E,U,Z : REAL;
K: INTEGER;
BEGIN
READLN(X,E);
113
K:=0;
Y:=0;
U:=X;
Z:=SQR(X);
WHILE ABS(U)>E DO
BEGIN
Y:=Y+U;
K:=K+2;
U:= -U* Z/(K*(K+1));
END;
WRITELN(‘SIN(X)=’,SIN(X), ‘Y=’,Y);
END.
Программаның дұрыстығын тексеру үшін шығару опера-
торына синусты стандартты функция көмегімен есептегенде
алынған нəтижені қатар көрсету қарастырылған. Егер есептеу
нəтижесінің стандартты функция көмегімен есептеу арқылы
алынған нəтижеден айырмашылығы берілген дəлдіктен артық
болмаса, программа дұрыс жұмыс жасайды деп есептеуге болады.
Итерациялық формула бойынша Х санынан түбір алу мыса-
лын қарастырайық.
Y
i+1
=(Y
i
+ X/
Y
i
) /2, Y
i+1
–
Y
i
<=ε дəлдікпен
Y
0
=A алғашқы жуықтама параметр болып саналады.
PROGRAM SQRTX;
VAR X:REAL; {аргумент }
EPS:REAL; {есептеу дəлдігі }
Y0:REAL; {алғашқы жуықтау }
Y1:REAL; {келесі жуықтау }
A:REAL; {ба
стапқы жуықтау}
BEGIN
READLN( A,EPS,X);
IF X>0 THEN
BEGIN
8–1618
114
Y0:=A;
Y1:=(Y0+X/Y0)/2;
WHILE ABS(Y1-Y0)>EPS DO
BEGIN
Y0:=Y1;
Y1:=(Y0+X/Y0)/2
END;
WRITELN(‘Y1=’,Y1,’ X=’,X)
END
ELSE
WRITELN(, X, ‘саны нөлден кіші’);
END.
Бақылау сұрақтары
1. Қандай есептеулерді цикл деп атайды?
2. Шарты алдын ала берілген цикл операторы неше рет орын-
далады?
3. Шарты алдын ала берілген циклдан шығу қалай іске асырылады?
4. Шарты алдын ала берілген цикл операторының құрылымын тү-
сіндіріңіз.
5. Шарты алдын ала берілген цикл операторының орындалу ретін
түсіндіріңіз.
6. Шарты алдын ала берілген цикл операторының блок-схемасын
түсіндіріңіз.
7. Шарты алдын ала берілген цикл операторына мысал келтіріңіз.
Тапсырмалар
1. 15 əр түсті қилысқан дөңгелектерден тұратын көлденең сызық
сызыңыз.
2. 15 əр түсті қилысқан эллипстерден тұратын экран «диагоналін»
сызыңыз.
3. Радиустары бірдей секторлардың тігінен орналасқан тізбегін
салыңыз. Соңғы сектор – дөңгелек.
4. 40 əр түсті сызықтан тұратын араның суретін салыңыз.
5. 50 əр түсті сызықтан тұратын «веер» суретін салыңыз.
6. 36 əр түсті квадраттардан тұратын дөңделек суретін салыңыз.
7. 20 əр түсті дөңгелектерден тұратын квадрат суретін салыңыз.
8. 100 əр түсті шеңберден тұратын синусоида фрагментін салыңыз.
9. Пернетақтадан енгізілген n үшін n! мəнін есептеңіз.
10. N натурал саны берілген. Осы санның цифрларының қосындысын
есептеңіз.
115
5.6 Шарты соңынан тексерілетін цикл операторы
REPEAT
< 1 оператор > [;
< 2 оператор >] [;
…
< n оператор >]
UNTIL <логикалық өрнек>;
Бұл цикл қайталану саны белгісіз, бірақ циклден шығу шар-
ты белгілі болған жағдайда қолданылады. Циклді басқаратын ло-
гикалық өрнек циклден шығу шарты болып саналады. Егер шарт
АҚИҚАТ (TRUE) мəнін қабылдаса, онда цикл тоқтатылады.
REPEAT операторын қолданғанда, цикл тұлғасы кем дегенде бір
рет орындалады. Цикл операторларының басқа түріне қарағанда,
бұл оператор BEGIN – END операторлық жақшасын керек
етпейді, себебі операторлық жақша қызметін REPEAT – UNTIL
түйінді сөздері атқарады.
Бұл оператордың орындалу схемасы 5.13-суретте көрсетілген.
F=N! факториалын есептеу REPEAT – UNTIL операторла-
рының көмегімен төмендегідей түрде жазылады:
. . .
F:=1;
I:=1;
5.13-сурет. Шарты соңынан тексерілетін цикл алгоритмінің
орындалу схемасы
116
REPEAT
F:=F*I;
I:=I+1;
UNTIL I>N;
. . .
Осы оператордың көмегімен жазылған басқа мысалды қа-
растырайық. Берілген сандар тізбегінің ішінен 7-ге бөлінетіндер
санын анықтау.
PROGRAM REP;
VAR A,K: INTEGER;
C: CHAR;
BEGIN
K:=0;
REPEAT
WRITELN(‘ Келесі санды енгізіңіз ‘);
READLN( A);
IF A MOD 7=0 THEN K:=K+1;
WRITELN(‘Циклден шыққыңыз келе ме? Д/Y’);
READLN( C ) ;
UNTIL ( C=’Д‘ ) OR ( C=’Y’) ;
WRITELN(‘KOL=’,K);
END.
Бұл мысалда циклден шығу шарты – қойылған сауалға жауап
бергенде енгізілген Д немесе Y символы болып саналады. Егер
осы айтылған символдың бірі енгізілсе, UNTIL сөзінен кейін
жазылған логикалық өрнек АҚИҚАТ (TRUE) мəнін қабылдайды
да, циклден шығу орындалады.
Келесі мысалда А(M,N) матрицасының жұп жолдарының
ең үлкен жəне ең кіші элементтерін тауып, солардың орнын
ауыстыру керек.
PROGRAM OBMEN;
VAR A: ARRAY[1..30,1..30] OF INTEGER;
I,J : INTEGER;
K1,L1,K2,L2 : INTEGER;
T,M,N: INTEGER;
BEGIN
117
READLN(M,N);
For I:=1 to M do
FOR J:=1 TO N DO
READLN( A[I,J]);
K1:=1;L1:=1;{ең үлкен элемент координатасы}
K2:=1;L2:=1;{ең кіші элемент координатасы}
I:=2;
WHILE I<=M DO
BEGIN
FOR J:=1 TO N DO
IF A[K1, L1]< A[I,J] THEN
BEGIN
K1:=I;L1:=J;
END
ЕLSE
IF A[K2, L2]> A[I,J] THEN
BEGIN
K2:=I;L2:=J;
END;
I:=I+2;
END;
T:= A[K1, L1];
A[K1, L1]:= A[K2, L2];
A[K2, L2]:=T;
FOR I:=1 TO M DO
BEGIN
FOR J:=1 TO N DO
WRITE ( A[I,J] :6);
WRITELN ;
END;
END.
Бізге тек жұп жолдар керек болғандықтан, жол индекстерін
өзгерту үшін WHILE циклы қолданылады. Мұны FOR циклының
көмегімен орындай алмаймыз.
Турбо Паскаль тілінде BREAK немесе CONTINUE про-
цедура ларын FOR, WHILE жəне REPEAT циклдерының ішін-
де қолдануға болады. BREAK процедурасы циклді тоқтатып,
118
басқаруды циклден кейін орналасқан операторға береді. CON-
TINUE процедурасы өзінен кейін орналасқан операторларды
орындамай, циклдің келесі қадамына көшеді.
Мысалы, бірөлшемді массивтің 3-ке аяқталатын бірінші
элементін анықтау керек.
PROGRAM KON;
VAR A:ARRAY [1.. 30] OF INTEGER;
FL: BOOLEAN;
I,N: INTEGER;
Begin
READLN(N);
FOR I:=1 TO N DO
READLN( A[I] );
FL:=FALSE;
FOR I:=1 TO N DO
BEGIN
IF A[I] MOD 10 <> 3 THEN CONTINUE;
WRITELN(‘3-ке аяқталатын бірінші сан
нөмірі ’,I);
FL:=TRUE;
BREAK;
END;
IF NOT FL THEN WRITELN(‘3-ке аяқталатын сан
жоқ‘);
END.
Егер 3-ке аяқталатын сан табылса, экранға мəлімет шығады.
Жалауша – FL айнымалысы АҚИҚАТ (TRUE) мəнін қабылдап,
программа өз жұмысын тоқтатады. Сан табылмаған жағдайда
программа соңына дейін орындалады. FL айнымалысының мəні
ЖАЛҒАН(FALSE) болып қалады. Экранға сан табылмағаны
жайлы мəлімет шығады.
5.9-мысал. Алғашқы n натурал сандардың қосындысын
есептей тін программа құру керек.
Қосынды жинақтау тəсілімен анықталады. Қосылатын сандар
саны белгілі болғандықтан, қайталану саны белгілі цикл опера-
торын қолданамыз. Əр сан қосылған сайын цикл параметрі 1-ге
өсіп отырады. Циклға кірер алдында қосындыға нөлді меншіктеу
119
керек. 5.14-суретте программа алгоритмінің схемасы келтірілген.
Төменде программа мəтіні берілген.
Program ex;
Var
i,n,S:integer;
Begin
WriteLn(‘ n-ді енгізіңіз’);
ReadLn(n);
S:=0;
for i:=1 to n do
S:=S+i;
WriteLn(n,’ санның
қосындысы ‘,S, ‘-ке тең’);
End.
5.10-мысал. 1 – 1/х + 1/х
2
– 1/х
3
+ ... қатарының қосындысын
бе ріл ген ε (эпсилон) дəлдікпен анықтайтын программа жазу ке-
рек.
Математика курсынан білетініміздей тізбек түріндегі қатар
қосындысы дегеніміз берілген мүшелердің қосындысы ұмты-
латын шек болып саналады. Егер мұндай шек бар болса, қатар
жинақталған болып, кері жағдайда жинақталмаған болып санала-
ды. Таңбасы ауысып отыратын қатар |r
n
| < |r
n+1
| болған жағдайда,
жинақталған болып саналады. Мұндағы r
n
жəне r
n+1
– сəйкесінше
қатардың n-ші жəне n+1-ші мүшелері. Сонымен бірге |S-S
n
| < |r
n+1
|
екендігі дəлелденген. Мұнда S – жалпы қатар қосындысы, aл S
n
– қатардың n мүшесінің қосындысы.
Демек, қажетті қосындыны табу үшін қатар элементтерінің
жеке қосындысын тізбектің кезекті мүшесі берілген |r
n
| < ε
қателіктен кіші болғанша, жинақтап отырамыз.
Қайталану саны белгісіз болғандықтан, цикл-əзірше нұсқасын
қолданамыз. Ол үшін S=S+R операциясын екі рет қайталау ке-
рек: біреуін циклға дейін, екіншісін цикл соңына орналастыра-
мыз. Циклға дейін жазылған S=0 жəне S=S+R операторларын
R=1 операторымен алмастырамыз. Циклден шығу шартын да
кері шартқа алмастырамыз. Цикл-əзірше нұсқасы көмегімен
жазылған алгоритмнің түрі 5.15 а-суретіндегідей, ал программа-
сы төмендегідей болады:
5.14-сурет. n санды қосу
алгоритмі
120
Program ex;
Var S,R,X,eps:real;
Begin
WriteLn('
x жəне эпсилонды енгіз:');
ReadLn(X,eps);
if x>1 then {егер
x>1 болса, онда қатардың
қосындысын есептейміз}
begin
S:=1;
R:=1;
while abs(R)>eps do
begin
R:=-R/X;
S:=S+R;
end;
WriteLn('x=',x:6:2,' S=',S:8:2,',ал R=',
R:8:6)
end
else WriteLn('Қатар жинақты емес');
End.
Осы алгоритмді цикл-дейін нұсқасы көмегімен де жазуға бо-
лады (5.15, ə-сурет).
Program ex;
var S,R,X,eps:real;
Begin
WriteLn(‘
x жəне эпсилонды енгіз:’);
ReadLn(X,eps);
if x>1 then
begin
S:=0;
R:=1;
repeat
S:=S+R;
R:=-R/X
until abs(R*x)<=eps;
WriteLn(‘x=’,x:6:2,’ S=’,S:8:2,’, ал
R=',R:8:6)
end
else WriteLn(‘Қатар жинақты емес’);
End.
1>2>1>2>1> Достарыңызбен бөлісу: |