І.4.Таңдау операторы
Берілген өрнектің мәніне тәуелді бір немесе бірнеше оператор орындалатын жағдайда тандау операторы пайдаланылады. Тандау операторы алгоритмдік тілдегі таңдау командасына ұқсағанымен бірге, аз өзгешелігі бар. Алгоритмдік тідде тандау шарт бойынша орындалса, Паскаль тілінде тұрақгылар бойынша іске асырылады.
Жазылу түрі:
Таңдау CASE өрнек ОҒ CASE -жағдай
жағдай 1-шарт: 1-серия 1-тұрақгы: 1-оператор; OҒ -солар,
жағдай 2-шарт: 2-серия 2-тұрақгы: 2-оператор; төмендегілер.
жағдай n-шарт: n-серия n-тұрақгы: n-оператор
бітті END.
Таңдау операторы былай орындалады: өрнектің мәні берілген тұрақтының қайсысына тең болса, оған сәйкес оператор орындалады да, басқару тандау операторының соңындағы операторға беріледі.
Егер өрнектің мѕні тұрақтылардың ешқайсысымен тең болмаса да, басқару таңдау операторынан кейінгі операторға беріледі.
Өрнектің мәні және тұрақтылар әрқашанда бүтін сан, тұрақты типі мен өрнек типі бірдей болу керек.
Мысалы:
CASE K+1 ОҒ
5: у:=sqr(x);
11: у:=sqrt(x);
4: z:=у*(а-b);
7: write(а,b)
END.
6-Мысал: Апта күндерінің нөмірі бойынша аттарын анықтауға программа құрындар.
(*-------------------! апта күндері !-----------------------*)
Ргоgram АРТА (input, output);
Vаг N: ; (*аптадағы кџн нљмірі*)
Веgіn
Writeln ('күн нөмірін енгіз:');
Read(n)
Case n of
1:WRITELN('дүйсенбі');
2:WRITELN('сейсенбі');
3:WRITELN('сәрсенбі');
4:WRITELN('бейсенбі');
5:WRITELN('жұма');
6:WRITELN('сенбі');
7: WRITELN ('жексенбі')
END
Экранда:
күн нөмірін енгіз: 5
жұма
7-Мысал. Кез келген жыл мерзімін енгізіп, сол жылдың шығыс календары (қазақша жыл санау) бойынша қай жануардың атына сәйкес келетінін анықтайтын программа құрайық.
Program jil
Vаг g : іnteger;
Begin
Write ('жыл мөлшерін енгіз:')
Read1n(g);
Write(g:4,'жыл');
CASE n (g mod 12) OF
0:WRITE ('мешін');
1:WRITE('тауық');
2: WRITE('ит');
3:WRITE('доңыз');
4:WRITE('тышқан');
5: WRITE('сиыр');
6:WRITE('барыс');
7: WRITE('қоян');
8: WTRITE(ұлу');
9:WRITE('жылан');
10:WRITE('жылқы');
11:WRITE('қой');
END;
WRITELN('жыл болды');
END.
Сұрақтары және жаттығулар.
1. Қандай жағдайларда шартты оператор пайдаланылады?
2. Шартты оператордың жазылуының қандай түрлерін білесіндер. Олардың мағына жағынан ерекшелігі неде?
3. Операторлық жакдіа қай жағдайда пайдаланылады?
4. Қай жағдайларда оператор соңына ";" нүктелі үтір қойылады, ал қай жағдайда қойылмайды?
5. Шартты операторға мысалдар келтіріңдер?
6.Шартты операторды пайдаланып, у=1/(х-1)+1/(х-2) мәнін есептеуге программа құрыңдар?
7. үш санның ішінен үлкенін табуға программа құрыңцар.
8. Мына программада анықгалған функцияның графигін
сызыңдар:
IF SQR(х)>2 THEN Begin if х>2 then у:=х*х*х else у:=8 end else у:=8*sqr(х)
9.Берілген нақты х аргументі үшін төмендегі функциялардың мәндерін есептеуге арналған программалар жазындар:
10.Көп тармақгы алгоритмдерді программалаудың әдістерін пайдаланып, функциялардың мәндерін есептеуге программа жазындар:
12.Таңдау операторы қандай жағдайларда пайдаланылады? Оның алгоритмдік тілден өзгешелігі неде?
13.Тандау операторына мысал келтіріндер.
І.5. ЦИКЛДІК АЛГОРИТМДЕР
Есептерді шешу барысында біртипті әрекеттерді көп рет қайталау қажеттілігі жиі кездеседі. Бұл ѕрекеттерді анықтайтын параметрлердің мәндері әртүрлі болады.
Осындай әрекеттерді жүзеге асыратын алгоритмдер циклдік, ал әрекеттердің көп рет қайталанатын бірізділігі(циклдің денесі) циклдер деп аталады. Циклдерді пайдалану ықшам программалар көмегімен есептеулердің үлкен көлемдерін орындауға мүмкіндік береді. Алдын-ала берілген жѕне белгісіз сандар қайталауларымен циклдер ажыратылады.
Қайталану саны белгісіз циклдер
Циклді қанша рет қайталау керек екені алдын-ала белгісіз болады, бірақ бір шарт орынды болып тұрғанда ол орындалуға тиіс.
Қaйталанатын процестерге программа құру
Паскаль тілінде қайталау процесін үш түрлі жолмен ұйымдастыруға болады:
- алдын ала берілген шарт бойынша қайталауды ұйымдастыру;
- келесі шарт бойынша қайталауды ұйымдастыру;
- параметрдің мәні бойынша қайталауды ұйымдастыру.
Алдын ала берілген шарт бойынша қайталау
Алдын ала берілген шарт бойынша қайталау кљп жағдайларда қайталаудың саны белгісіз болған жағдайда пайдаланылады. Бұл оператор WHILE (оқьшуы-уаил) – әзір және DO (оқылуы-ду) – орындау қызмет сөздерінің Көмегі арқылы орындалады да, алгоритмдік тілдегі «әзір» қайталану командасына сәйкес келеді. Оның жазылу түрі мынадай:
Әзір шарт WHILE шарт DО
Цб BEGIN
сериясерия (цикл денесі)
Цс END
Мұнда шарт орнында логикалық өрнек тұруы да мүмкін. Серия көп жағдайларда циклдің денесі деп аталады да, операторлық ашылатын BEGIN және жабылатын END жақша ішіне алынып жазылады. Бұл операторды жалпы түрде былай жазуға да болады:
While b do p
Мұндағы В – шарт (логикалық љрнек), Р – операторлар (циклдың денесі). Бұл оператор былай орындалады: алдымен шарт тексеріледі, егер шарт орындалса (сақгалса), онда циклдың денесі орындалады, одан соң қайтадан шарт тексеріледі, жѕне тағы сол сияқгы, бұл процесс қашан шарт сақталудан қалғанша қайталанады. Егер шарт сақталмаса, басқару операторлық жақшаның END соңында тұрған операторға көшіріледі. Басқаша айтқанда, логикалық өрнектің мәні жалған болғанша, қайталану денесі қайталанып орындала береді.
6-мысал. Берілген натурал М санынан үлкен Фибоначчи санын табу керек.
Шешуі. Фибоначчи саны.
Un+2 =Un+1 +Un , U0 =1, U1 =1 заңдылығы бойынша анықталады:
PROGRAM ҒІВОNАSHІ;
Vаr m,u,u1,u2:integer;
Begin
Write('m-санын енгіз:');
Readln(m);
u:=0; u1:=1; u2:=1;
While u2begin
u2:=u1+u;
u:=u1; u1:=u2
end;
Writeln('u=',u)
END.
7-мысал. Sinх функциясының мѕнін Е=10-5 дәлдігі бойынша қатарға жіктеуді пайдаланып табуға программа құрайық.
Sinх=х= x-x3 /3!+x5 /5!+…+(-1)n-1 x2n-1 /(2n-1)!+… = (-1)n-1 x2n-1/(2n-1)!
Алгоритмді құру барысында бұл қатардың келесі мүшесінің мәнін табу үшін оның қатар орналасқан екі мүшесінің қатынасын тауып, есептелген әрбір мүшені сол қатынастың мәніне көбейту кaжет.
Ап+1 /an= x2n+1/(2n +1)!: x2n-1/(2n-1)!=х2n+1[(2n +1)!/x2n-1 (2n +1)!=x2 /2n(2n+1)
Программа
PROGRAM SINX;
Vаr n : integer;
а, х, sinx : real;
Begin
Write('х-ті енгіз:');
readln(х);
х:=х*Р/180;
а:=х;
sinx:=а;
n:=1;
While ABS(а)>ерs do
Begin
а:=-а*х*х/(2*n*(2*n+1));
sinx:=sinx+а;
n:=n+1
END
Writeln('sinх=', sinх : 6 : 4)
END.
Келесі шарт бойынша қайталау операторы
Бұл оператор көп жағдайларда қайталаудың саны белгісіз болған жағдайда пайдаланылады. Оның жазылу түрі:
REPEAT
қайталау денесі (серия)
UNTIL логикалық өрнек
Мұндағы REPEAT – қайтала, UNTIL – соған дейін – қызмет сөздері.
Оның орындалуы: қашан логикалық өрнектің мѕні ақиқат болғанша циклдің денесі қайталана береді.
Алгоритмдік тілде бұл қайталануды «Цикл-дейін» дейді, оның жоғарыда көрсетілген «Цикл-әзір»-ден өзгешелігі мұнда қайталанатын командалар сериясы (қайталау денесі) кемінде бір рет орындалады. Демек, бұл қайталануда алдымен циклдың денесі орындалады да, одан соң шарт тексеріледі (блок-схеманы қараңыз).
Оператордың соңы UNTIL қызмет сөзімен бітетін болғандықтан, мџнда операторлық ашылатын және жабылатын жақшалар орнына жазылатын BEGIN және END қызмет сөздері жазылмайды.
Егер қайталау денесінде көшіру операторы болып, ол циклдың сыртындағы оператордың белгісіне басқаруды берсе, онда циклдың орындалуы ары қарай жалғаспайды.
8-мысал. Х=8,6,4,2 болғанда, у= х2 мәндерін табатын программа құрайық.
PROGRAM В10;
Vаr х, у : integer
Begin
Writeln('--------');
Writeln('!x ! y !');
Writeln('--------');
X:=8;
Repeat
у:=х*х;
Writeln ('!', х:3, '!', у:5, '!');
х:=х-2;
Until=0;
Writeln('-------------`)
END.
Бұл программада циклдың денесі қашан х-тің мәні нөлге тең болғанша (яғни, егер өрнек болса, онда өрнектің мәні ақиқат болғанша) қайталанады. Мәндер кесте түрінде беріледі.
9-мысал. Табуляция есебі.
F(X)=sinax+ /cosax
функциясының [0,8] аралығында (жалпы тџрде [b,с] аралығында) h қадам бойынша кестесін программа жазайық.
Программа.
Program В11;
Vаr f, h, а, х : rеаl;
Begin
Writeln ('а, h-енгіз:');
Readln(а,h);
Writeln('--------`);
Writeln (' ! х ! F(х) ! ');
Writeln (' ------ ');
х:=0;
Repeat
f:= sin(а*х)+sqrt(а*х)/cos(а*х);
Writeln ('!', х : 3 : 2,`!`, Ғ : 7 : 3, '!');
х:=х+h;
Until X=8;
Writeln (' ---- ')
END.
10-мысал. N! Есептеуге программа құрайық.
1-вариант. N!=1*2*3*...*n
Рrogram В12; (*факгориал есептеу*)
Vаr n, і : іnteger;
р : rеаl;
Begin
Write ('n-енгіз:');
Readln (n);
р:=1; і:=0;
While іBegin
і:=і+1;
р:=р*і
end;
Writeln ('n!=', р)
END.
Көп жағдайларда қайталану саны белгілі болғанда, шартты параметрлі қайталану операторын пайдалануға болады. Параметрлі қайталану операторының жалпы түрі алгоритмдік тілдегі параметрлі қайталану командасына:
і үшін m1 бастап m2 дейін h қадам
Цб
серия
Цс
сәйкес келеді де, былай жазылады:
ҒОR і:=m1 ТО (DOWNTО) m2 do
BEGIN
END
Мұндағы ҒОR – үшін, ТО – дейін, DО – орындау деген мағынаны беретін қызмет сөздері; і-циклдің параметрі. І-Паскаль тілінде міндетті түрде бүтін типтегі айнымалы болуы қажет;
M1, M2 – сәйкес параметрдің бастапқы және соңғы мәндері, олар бүтін сандар болуы немесе бүтін мән беретін арифметикалық өрнектер болуы мүмкін.
Паскаль тілінде параметрдің қадамы тек екі мән: 1 немесе -1-ді ғана қабылдай алады.
Қадамның мәніне тәуелді операторда ТО немесе (DOWNTO-төмен, ТО-дейін, DOWNTO-азайту) қызмет сөздері пайдаланылады. Егер кадам 1-ге тең болса, онда ТО, ал қадам -1-ге тең болса, онда DOWNTO пайдаланылады.
Оператордың орындалу тәртібі:
а) параметрдің мәні m2-мен салыстырылады, егер ол m2-ден кіші болса, онда циклдің денесі бір рет қайталанады. Ал ол m2-ден үлкен болса, онда басқару цикл денесінің соңындағы операторға беріледі де, қайталану аяқгалады;
ѕ) әрбір қайталанғанда, параметрдің алғашқы мәніне бір қосыла отырып, параметрдің ағымдағы мәні m2-ден артық болғанша циклдың денесі қайталана береді.
Егер m1 жѕне m2 арифметикалық өрнектер болса, онда олардың мәндері циклдың орындалу алдында бір-ақ рет орындалады.
Мысалдар.
Оператор Нәтиже
FOR і:=1 TO 6 DO WRITE(і:2);
123456
FOR і:=6 TO 6 DOWN TO 1 DO WRITE(і:2);
654321
FOR С:='а' TO 'е' DO WRITE (С:2);
а b с d е
FOR С:='е' DOWNTO 'а' DO WRITE (С:2);
e d c b a
11-мысал. Барлық латын әріптерін экранға шығаруға программа құру.
Шешуі:
Program В16;
Vаr SIМ : СНАR;
Веgin
Writeln('латын әріптері:');
FOR SIМ:='А' ТО 'Z' DO
Write(',', SIМ)
END.
Нәтиже: латын әріптері: А; В, ..., Z экранға шығады.
12-мысал. A1 а2,..., аn сандарының арифметикалық орта мәнін табуға программа құру.
S= i /n
Шешуі:
Программа:
Program В17;
Vаг n, і : integer;
t,а :геаl;
Begin
і:=0;
Writeln ('N-санын еніз:');
Read (a);
Ғоr і:=1 Іо N do
Begin
Writeln ('а-ларды енгіз:');
Read (а);
t:=t+a;
END;
t:=t/n;
Writeln ('арифметикалық орта t=', t : 5 : 3)
END.
13-мысал. N!- ды есептеуге программа құрайық.
Программа.
Рrogram ҒОSТ;
Vаr p, і : integer;
Веgin
Write ('n-санын енгіз:');
Readln(n); p:=1;
For і:=2 tо n do Р:=Р*і;
Write (n, '1=', Р)
END.
Сұрақтары және жаттығулар.
1. Қайталану операторлары қандай міндеттер атқарады?
2. Үш қайталану операторларының бір-бірінен өзгешелігі неде?
3. WHILE операторында қай кезде циклдің денесі орындалады, қай кезде орындалмайды?
4. FOR операторында параметрлі қайталану қадамы қандай болады? Оған тәуелді оператордың жазылуында қандай өзгеріс болады?
5. REPEAT операторының шарты бірден орындалса, онда оның циклдің денесі орындала ма?
6. Қандай жағдайларда бұл үш оператордың қайсысын пайдалану қолайлы болады?
7. Р-натурал сан болса, ap есептеуге программа құрыңдар.
8. Төмендегі өрнектердің мәндерін табута программа құрындар:
а) 1+1/2+1/3+…1/n, n>=2;
б) 1/1*2+1/2*3+…1/(n-1)n , n>=2;
b) 1-1/2-1/4-…+(-1)n/n, n>=2;
g) (1+1/12)(1+1/22)…(1+1/n2); n>=2;
9.Берілген санның барлық бөлгіштерін өсу тәртібімен жазуға программа құрыңдар.
10.Берілген n санның ішіндегі оң жѕне теріс сандарының қосындысын, қосындылардың абсолют шамасы бойынша үлкенін табындар.
11. Берілген нақты тізбектің элементтерінің ең үлкені мен ең кішісінің айырмасын табуға программа құрындар.
Достарыңызбен бөлісу: |