Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AEP_LEKTsII.doc
Скачиваний:
90
Добавлен:
28.03.2015
Размер:
1.27 Mб
Скачать

9 Лекция

9.1 Сызықты құрылымды алгоритмдерді программалау

Сызықты есептеу үрдісі (СЕҮ) бірінен кейін бірі ретімен орындалатын операторлардың жиынтығы болып табылады. СЕҮ программаның негізін меншіктеу операторы (лекция 8.2), деректерді енгізу және шығару (лекция 9.1) операторлары құрайды.

Сызықты құрылымды алгоритмдер есептерін шешу мысалдары қосымшада келтірілген.

Құрама операторлар өзінің элементтері болып табылатын операторлардың орындалу ретін береді. Олар жазылған реті бойынша орындалуы тиіс. Құрама операторлар бір оператор сияқты өнделеді, Паскальдың синтаксисі тек бір операторды ғана орындауға рұқсат ететін жағдайларда оның маңызы зор. Операторлар begin және end шектеушілер арасына алынады да бір-бірінен нүктелі үтір арқылы ажыратылады. Құрама оператор мысалы:

begin

Z := X;

X := Y;Y := Z;

end;

Құрама оператор бірнеше операторларды бір операторға біріктіру үшін арналған. Оның түрі:

begin

операторы

end

Операторларды қоршаған begin және end қызмметші сөздерін операторлық жақшалар деп атайды. Мысал:

s:=0; p:=1;

for i:=1 to 10 do

begin

p:=p*i;

s:=s+p

end

end-тің алдында да ";" қойылуы мүмкін. Бұл жағдайда end-тің алдындағы соңғы оператор ешқандай амалдарды орындамайтын бос оператор болып табылады деп санайды.

9.2 Тармақталған құрылымды алгоритмдерді программалау

Шартты операторлар орындау үшін құрама операторлардың біреуін таңдап алуға мүмкіндік береді (немесе бір де біреуін таңдамауға). Өрнекте стандарты бульдік типке ие болатын нәтиже пайда болуы тиіс. Егер өрнектің нәтижесі ақихат (Тrue) мәні болып табылса, онда then кілттік сөзінен кейін ілесетін оператор орындалады. Егер өрнектің нәтижесі жалған (False) мәні болып табылса және else кілттік сөзі бар болса, онда else-ден кейінгі оператор орындалады. Егер else кілттік сөзі болмаса, онда ешқандай оператор орындалмайды. Else-нің алдындағы операторда нүктелі үтір қойылмайды.

Конструкцияда орын алатын синтаксистикалық бірмәнділіксіз:

if e1 then e2 else e3

бұл конструкцияны келесідей интерпретациялау арқылы шешіледі:

if e1 then

begin

if e2 then s1 else s2

end

Жалпы айтқанда else әлі басқа else-мен байланыспаған ең жақын if – пен байланысады.

if оператор мысалдары:

if X < 1.5 then Z := X+Y else Z := 1.5;

if P1 <> nil then P1 := P1^.father;

if B = 0.0 then Writeln('Нөльге болуге болмайды.')

else begin Ratio = A / B; Writeln('Қатынас тең ',Ratio) end;

Жоғарыда айтылғанды қорытындылайық.

Шартты оператордың толық және қысқа формалары бар. Шартты оператордың толық формасының түрі:

if шарт then оператор1

else оператор2

Шарт ретінде кейбір логикалық өрнек көрсетіледі. Егер шарт ақиқат болып табылса, онда оператор1 орындалады, кері жағдайда оператор2 орындалады.

Шартты оператордың қысқа формасының түрі: if шарт then оператор

Егер шарт ақиқат болып табылса, онда оператор орындалады кері жағдайда программаның келесі операторына өту жүзеге асырылады. Келесі түрдегі конструкцияның жағдайында:

if шарт1 then

if шарт2 then оператор1

else оператор2

else ол үшін else бұтағы әлі көрсетілмеген алдыңғы ең жақын if операторға қатысты. Егер алдыңғы мысалда else бірінші if операторға қатысты болуы қажет болса, онда құрама операторды пайдалану керек:

if шарт1 then

begin

if шарт2 then оператор1

end

else оператор2

Қысқа шартты оператордың графикалық интерпретациясы. Блок-схемаларда қысқа шартты операторға егер-онда типті құрылым сәйкес.

Сурет 9.1 - Қысқа шартты оператордың блок-схемасы

9.1. y айнымалысына түрлі үш санның ішінен минималды мәнін меншіктеу керек, яғни y = min (a, b, c). Блок-схемасы 9.2 суретте. 9.1 мысал программасы:

Program P9_1;

Var

a, b, c, y: real;

Begin

writeln (‘a, b, c сандарын енгізіңіз’);

read (a, b, c);

y := a;

if b<y then y := b;

if c<y then y := c;

writeln (‘y =’, y:6:2);

End.

Мысал 9.2. y айнымалының мәнін екі бұтақтың біреуі бойынша есептеу керек. Блок-схемасы 9.4 суретте. 9.2 мысалға программа:

Program P9_2;

Var

x, y: real;

Begin

writeln (‘x санын енгізіңіз’);

read (x);

if x>0 then y := ln(x) else y := exp(x);

writeln (‘y =’ , y:6:2);

End.

Сурет 9.2 –9.1 мысалға блок-схема

Толық шартты оператордың графикалық интерпретациясы. Блок-схемаларда толық шартты операторға егер-онда-әйтпесе типті құрылымға сәйкес:

Сурет 9.3 – Толық шартты оператордың блок-схемасы

Сурет 9.4 - 9.2 мысалға блок-схема

Мысал 9.3. Толық квадратты ax2+bx+c=0 теңдеудің түбірлерін есептеу керек. Программада дискриминанттың таңбасын тексеруді көздеу керек. Егер дискриминант теріс болып табылса, онда «Түбірлері жорамал» деген хабарлы шығару керек. 9.3 мысалға программа:

Program P9_3;

Var

a, b, c, d, x1, x2: real;

Begin

writeln(‘Теңдеудің коэффициенттерін енгізіңіз’);

read (a, b, c);

d := bb – 4ac;

if d<0 then

writeln (‘Түбірлері жорамал’)

else

begin

x1 := (-b + sqrt(d)) / (2a);

x2 := (-b - sqrt(d)) / (2a);

writeln(‘x1=’, x1:5:2, ‘x2=’, x2:5:2);

end;

End.

Мысал 9.4. Шартты операторлардың бірінің ішіне бірі салынған құрылымдарды пайдалану. Егер THEN және ELSE қызметші сөздерден кейін және шартты операторлар пайдаланылатын болса онда құрылым бірінің ішіне бірі салынған деп аталады. Бірінің ішіне бірі салыну саны еркін. Бұл кезде келесі ереже әділ: ELSE қызметші сөзі әрдайым жоғарыдағы ең жақын THEN сөзіне қатысты. Бірінің ішіне бірі салынған құрылымдарды оқуды ыңғайлату үшін программалау барысында мүмкін болғанша THEN сөзінен кейін Бірінің ішіне бірі салынған шартты операторды жазудан бас тарту ұсынылады. Үш бұтақтың біреуі бойынша у-тің мәнін есептеу есебін қарастырайық. Блок-схема 9.5 суретте. 9.4 мысалға программа:

Program P9_4;

Var

x, y: real;

Begin

writeln(‘x санын енгізіңіз’);

read(x);

if x>=1 then

y := sqrt(x)/2

else

if x>0 then

y := exp(1/3*ln(x))/3

else

y := exp(1/4*ln(abs(x)))/4;

writeln(‘y =’, y:6:2);

End.

Сурет 9.5 - 9.4 мысалға блок-схема

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]