Жазбалар

Жазбалар (комбинирленген тип) – түрлі қасиеттерімен сипатталатын күрделі объекттерді сипаттауда және түрлі ақпараттық жүйелерді сипаттау барысында пайдаланылатын деректердің ең икемді және ыңғайлы құрылымдарының бірі.

Жазба – жазбаның өрістері деп аталатын компоненттердің фиксацияланған санынан тұратын деректер құрылымы. Жазба өрістерінің типтері әртүрлі болуы мүмкін. Жазбаның кейбір компонентіне сілтеу жасау үшін өрістерге атаулар беріледі.

Жазбалар түрлі текті бырақ логикалық байланысқан ақпаратты беру үшін пайдаланылады..

Мысалы: "студентке" тиісті деректерді сипаттау керек:

· - фамилиясы, аты (символдық массивтер немесе жолдар);

· - туылған жылы (таңбасыз бүтін);

· - мамандығы (санақтап шығу типі).

Сонымен, жазба – ол жазбаның өрістері немесе компоненттері деп аталатын түрлі типтегі шамалардың фиксацияланған санынан тұратын тізбектілік. Массив сияқты жазба да бір қатар жеке компоненттерді қамтиды, бырақ жазбаның компоненттері ретінде түрлі типтегі деректер болуы мүмкін. Мысалы, адрестік деректерді (индекс, қала, көше, үй, пәтер нөмірі) жазба (record) ретінде бейнелеуге болады:

type address = record

index:string[6]; { 1-ші өрістің аталуы:тип }

city:string[20]; { 2-ші өрістің аталуы:тип }

street:string[20]; { 3-ші өрістің аталуы:тип }

haus,flat:integer { 4-ші өрістің аталуы:тип }

end;

Массивтерді сипаттағандай жазба типін және сәйкес айнымалыларды сипаттауды беттестіруге болады. Мысалы, екі студенттер туралы деректерді келесідей сипаттауға болады:

var stud1,stud2:record

fio:string[20];

fac:string[10];

grup:string[8];

end;

«жазба» типтегі айнымалыны және оның бастапқы мәнін тұрақты-жазба ретінде тұрақылар бөлімінде: const <имя>: <имя типа> = <константное значение> схема бойынша анықталады.

Тұрақтылық мән – ол жай жақшаларға алынған өріс атауларының және сәйкес мәндердің тізімі. Тізім элементтері «нүктелі үтір» таңбасы арқылы ажыратылады. Мысалы, координаталардың басы туралы жазбаны келесідей анықтауға болады:

type point = record

х,у,z:integer

end;

const o:point=(x:0;y:0;2:0);

Жазбаның компоненттерімен сәйкес типтегі айнымалылармен сияқты жұмыс жасауға болады. Жазбаның компоненттеріне сілтеу нүктеден кейін өріс аталуын көрсету арқылы жүзеге асырылады. Мысалы, х айнымалысы address типіне ие болсын, яғни программада var x: address; сипаттау бар. Онда келесі меншіктеулер рұқсат етілген:

x.haus:=52;к.street:='пр.Бейбітшілік';x.city:='Шымкент';x.flat:-135;x.index;='660049'

Р29 программасында екі кешенді сандар қосындысы мен көбейтіндісін анықтайтын есепте жазбалармен жұмыс жасау бейнеленген:

z1=a1+i*b1 және z2=a2+i*b2.

Программадағы белгілеулердің қолайсыз үлкендігі деректерді құрылымдау арқылы алгоритмнің жоғары көрнекілігімен теңелтіледі. Көп жағдайларда егер фиксацияланған жазбаның өрістерімен операцияларды орындау қажет болса, белгілеулерді қысқарту үшін жалғау with операторын пайдалануға болады. Оның құрылымы: with <жазбаның аталуы> do <оператор>;

Бұл жағдайда қызметші do сөзінен кейін жазылған операторда көрсетілген жазба өрістерінің атаулары жазбаның аталуы және нүктесіз сипатталады. Мысалы, алдыңғы мысалдағы s қосындыны экранға шығаруды with операторын пайдаланып келесідей ұйымдастыруға болады:

with 5 do writeln('s=',re:4:2,'+i*',im:4:2);

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

man=record

fio:record

fam, im, otch:string[10];

end;

data:record

day:1..31;

mes:1..12;

god:integer

end;

pol:char;

elef:record

dom,rab:string[10];

end;

end;

«жазба» типін деректердің басқа құрама типтерін сипаттауда пайдалануға рұқсат етілген, мысалы, жазбалар массивін құруға болады.


Модуль 2 Алгоритмдік тілдерде программалаудың арнайы мәселелері

5 тақырып Программадағы басқару құрылымдар

8 лекция Алгоритмдік тіл операторларының классификациясы.Меншіктеу операторы.Басқару операторлары. Деректерді енгізу-шығаруды ұйымдастыру. Программаның құрылымы. Алгоритм сұлбасынан программаға өту.

8.1 Алгоритмдік тілдің операторлары.

Операторлар орындалуы тиіс болатын алгоритмдік амалдарды сипаттайды. Операторлардың алдында оларды өту операторларында сілтемелеу үшін қолдануға болатын таңбалар тұруы мүмкін. Оператор – программалауда – деректерді өндеудің аяқталған кезеңін анықтайтын алгоритмдік тілдің фразасы. Операторлардың құрамына кілттік сөздер, деректер, өрнектер және басқалар кіреді.

Ажыратады:

· атомарлы операторлар, олардың ешқандай бір бөлігі жеке өзіндік оператор болып табылмайды;

· құрылымды операторлар, басқа операторларды жаңа, іріленген операторға біріктіреді.

Меншіктеу, цикл, шарт, енгізу-шығару, басқару және басқа операторлар пайдаланылады.

8.2 Меншіктеу операторы. Ол айнымалының ағымдағы мәнін өрнек арқылы анықталатын жаңа мәнмен алмастырады немесе мәні функция арқылы қайтарылатын өрнекті анықтайды.

Меншіктеу оператордың түрі: айнымалы:= өрнек

Айнымалы ретінде жай айнымалы, аталуынан босатылған нұсқағыш, индекстері бар айнымалы немесе жазба типтегі айнымалының компоненті болуы мүмкін. Өрнектің типі айнымалының типіне сәйкес немесе сол типке келтірілетіндей болуы тиіс.

Процедураның операторы процедураның идентификаторы арқылы белгіленген процедураны белсендіруді анықтайды. Егер процедураның сәйкес сипатталуы формальды параметрлер тізімін қамтитын болса, онда процедураның операторы оған сәйкес фактілі параметрлер тізімін қамтуы тиіс (тізімі сипатталуда келтірілген параметрлер формальды параметрлер, ал процедураны шақыру оператораторында параметрлер фактілі параметрлер болып табылады). Шақыру барысында фактілі параметрлер формальды параметрлерге беріледі.

8.3 Басқару операторлары. Құрама және бос операторлар

Өту goto операторы басқаруды осы операторда көрсетілген таңбасы бар операторға беруді жүзеге асырады. Өту операторын қолданғанда келесі ережелерді сақтау керек:

· өту операторында көрсетілген таңба өту операторы орналасқан сол блокта немесе модульде орналасуы тиіс. Басқа сөзбен айтқанда, процедура немесе функциядан сыртқа немесе олардың ішіне өту рұқсат етілмейді;

· сырттан құрылымды оператордың ішіне өту (яғни кірістірудің тереңдеу деңгейіне өту) болжамдауға болмайтын эффекттерге әкелуі мүмкін, бырақ, компилятор қате туралы хабарламайды.

Мысалы, for циклы операторының тұлғасының ішіне өтуге болмайды.

Программалаудың жақсы стилі goto операторын мүмкіндігінше аз қолдануды талап етеді.

Шартсыз өту goto операторы келесі формаға ие: goto таңба;

Ол программаның орындалуын таңба арқылы белгіленген операторға өткізеді.

Таңба идентификатор немесе таңбасыз бүтін болып табылады. Операторды таңбамен белгілеу үшін оператордың алдына таңбаны көрсетіп одан кейін қос нүкте қою керек:

label1: оператор;

Таңбалар label қызметші сөзді пайдалану арқылы таңбалар бөлімінде сипатталынуы тиіс, мысалы:

label 1,2,3;

Мысалы, келесі программаның орындалу нәтижесінде

label 1,2;

begin

i:=5;

2: if i<0 then goto 1;

write(i);
Dec(i);

goto 2;
1:

end.

54321 саны шығарылады.

Таңба өзі сипатталған блокта операторды белгілеуі тиіс. Бір таңба бірнеше операторларды белгілей алмайды.

goto операторын пайдаланудың негізгі нұсқалары үшін Паскаль тілінде арнай операторлар бар: break – циклдан кейінгі операторға өту; exit - процедураның соңғы операторынан кейінгі операторға өту; continue – цикл тұлғасындағы соңғы операторынан кейінгі операторға өту.

Программада goto операторын орынды пайдаланудың жалғыз мысалы – бір-біріне салынған бірнеше циклдардың ішінен бір мезгілде шығу. Мысалы, екіөлшемді массивте k элементін іздеу барысында:

found:=False;

for i:=1 to 10 do

for j:=1 to 10 do

if a[i,j]=k then

begin

found:=True;

goto c1;

end;

c1: writeln(found);

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

begin

операторлар

end

Операторлар бір-бірінен ";" символ арқылы ажыратылады. Операторларды қоршайтын begin және end қызметші сөздері операторлық жақшалар деп аталады.

Мысалы:

s:=0; p:=1;

for i:=1 to 10 do

begin

p:=p*i;

s:=s+p

end

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

8.4 Деректерді енгізу-шығаруды ұйымдастыру

Паскальда клавиатурадан сандық және символдық деректерді енгізуге болады. Енгізудің кірістірілген екі процедурасы (ішкі программасы) бар:

read (айнымалылар тізімі); және readln (айнымалылар тізімі).

read (xl,x2,...,xN) процедураның орындалу барысында программа өз жұмысын тоқтатып компьютер клавиатурадан xl, х2,..... xN тізім айнымалыларының N мәнін енгізуді күтеді. Бұл мәндер – сәйкес типтегі тұрақтылар – енгізу барысында бос орын арқылы ажыратылуы тиіс. Деректерді теру Enter клавишасын басумен аяқталады. readln процедураның read процедурадан айырмашылығы енгізуді аяқтағаннан кейін курсор келесі жолдың басына өтеді. Мысал: var a,b:real; c:char; d:integer; read(a,c,d,b); Рұқсат етілетін енгізу: 83.14 k 200 -7.15

Деректерді шығару операторлары. Программа экран немесе принтерге сандық немесе символдық өрнектердің мәндерін шығара алады. Экранға шығарудың екі процедурасы бар:

write (айнымалылар немесе өрнектер тізімі);

writeln (айнымалылар немесе өрнектер тізімі).

write(x1,x2v..,xN) процедурасы x1, х2,..., xN тізімдегі өрнектердің мәндерін экранға шығарады. writeln процедурасының write процедурасынан айырмашылығы ол курсорды келесі жолдын басына жылжытады. Принтерге шығару үшін өрнектер тізімінің алдына lst қызметші сөзі қосылған сол процедуралар пайдаланылады. Мысал: write(lst,’шешімі жоқ’). Қағазда «шешімі жоқ» деген мәтін басылады.

Баспаны басқару үшін деректердің форматтары пайдаланылады. х - real типтегі айнымалы болсын. Егер форматты қолданбаса, онда х-тің мәні «жылжымалы» (1.654887892E-04 сияқты) формада шығарылады. Форматтар нақты санды жаратылыс формада баспаға шығаруға мүмкіндік береді. m, n – бүтін сандар болсын. write(xxx:m:n) процедурасы xxx айнымалының мәнін экранға ондық бөлшек түрінде шығарады, сонымен қатар m цифрларды, нүктені және санның таңбасын қоса шығарылатын символдардың жалпы санын анықтайды, n – нүктеден кейінгі цифрлардың санын. Егер шығарылатын символдар саны m -нен аз болса онда санның алдына бос орындар қосылады. Мысалы, х = 123.45 болсын. Келесі мысал форматтардың х мәнін шығаруға тигізетін әсерді бейнелейді:

writeln('*',x) беретін нәтижесі 1.2345000000E+02;

writeln('*',x:8:3) беретін нәтижесі 123.450;

writeln('*',x:8:l) беретін нәтижесі 123.4.

Бір форматты – шығару өрісінің енін - integer, boolean, char типтегі өрнектерді шығару үшін де қолдануға болады.

Pascal ABC-те еректерді енгізу-шығаруды ұйымдастырудың ерекшеліктеріне назар аударайық.

1. Шығару терезесіне шығару үшін стандартты write және writeln процедуралары пайдаланылады. Олар параметрлерсіз және параметрлер тізімімен шақырылуы мүмкін. Тізімдегі параметрлер үтір арқылы ажыратылады және жай типке (санақтап шығу типінен және санақтап шығу типінің негізінде құрылған аралық типтен басқа) немесе string типке немесе нұсқағыш типке ие болуы тиіс. writeln процедурасы өз параметрлерін шығарып болғаннан кейін жаңа жолға өтуді жүзеге асырады.

2. write және writeln шығару процедураларында шығарылатын әр мәннен кейін шығару форматы көрсетілуі мүмкін. Ол қос нүктеден кейін ілесетін бүтін сан немесе өрнек болып табылады. Бұл сан немесе өрнек шығару өрісінің енін, яғни шығарылатын мәнге берілген позициялар санын анықтайды. Егер шығарылатын мәннің ұзындығы шығару өрісінің енінен аз болса, онда шығарылатын мәтін қажетті енге жеткенше сол жағынан бос орындармен толықтырылады; нәтижесінде шығарылатын мән оң жақтағы шетімен тегістеледі. Егер шығарылатын мәннің ұзындығы шығару өрісінің енінен көп болса, онда формат ескерілмейді. Шығару форматының түрі:m болатын нақты және кешенді мәндер әрдайым экспоненциалды формада шығарылады. Мысалы, егер a, b – бүтін айнымалылар болса, онда келесі операторлар орындалғанда:

a:=-2437; b:=13555;

writeln(a:6,'Сәлем!':9);

writeln(b:1);

шығару терезесінде келесі мәтін көрінеді:

-2437 Сәлем!

3. Нақты және кешенді мәндер үшін :m:n форматты да пайдалануға болады, мұндағы m және n – бүтін мәндер. m мәні шығару өрісінің енін, ал n мәні ондық нүктеден кейінгі таңбалар санын береді. Мысалы:

writeln(-14.859:10:3); // ___-14.859

writeln(-14.859:10:5); // _-14.85900

writeln(-14.859:10:2); // ____-14.86

writeln(-14.859:10:0); // _______-15

writeln(-14.859:10:7); // -14.8590000

writeln((0,1):10:1); // _(0.0,1.0)

{мұнда _ символ арқылы бос орындар бейнеленген }.

4. Клавиатурадан енгізу үшін стандартты read және readln процедуралары пайдаланылады. Олар параметрлерсіз және параметрлер тізімімен шақырылуы мүмкін. Тізімдегі параметрлер үтір арқылы ажыратылады және жай типтегі (санақтап шығу типінен және санақтап шығу типінің негізінде құрылған аралық типтен басқа) немесе string типтегі айнымалылар болуы тиіс. readln процедурасы енгізуден кейін ағымдағы енгізу жолының соңына дейінгі деректерді өткізіп жібереді.

5. write, writeln, read, readln процедуралары – ұзындығы еркін болатын параметрлер тізімін көрсетуге болатын жалғыз процедуралар.

6. Мәтіндік файлға енгізу-шығару үшін дәл сол процедуралар пайдаланылады, бырақ бірінші параметр ретінде файлдық айнымалы көрсетіледі:

writeln(f,'abc',1,True,2.4);

Қосымшадағы енгізу/шығару мысалдары бар программаларды да қараңыз.

8.5 Программаның құрылымы. Алгоритмнің схемасынан программаға өту

Сонымен, жоғарыда айтылғандай, Паскаль тіліндегі программа тақырыптан, сипаттау бөлімдерінен және операторлар бөлімдерінен тұрады.

Программаның Тақырыбы программаның аталуын қамтиды, мысалы:

Program PRIM;

Сипаттау бөлімдері қосылатын библиотекалар (модулей) бөлімдерін, таңбаларды сипаттау бөлімін, тұрақтыларды сипаттау бөлімін, типтерді сипаттау бөлімін, айнымалыларды сипаттау бөлімін, процедуралар мен функцияларды сипаттау бөлімін қамтуы мүмкін.

Модульдерді сипаттау бөлімі USES қызметші сөзімен анықталады да PASCAL жүйесінің құрамына кіретін және тұтынушының өзі жазған қосылатын модульдер (библиотекалар) атауларын қамтиды. Модульдерді сипаттау бөлімі сипаттау бөлімдерінің ішінде бірінші болуы тиіс. Модульдердің атаулары бір-бірінен үтірлер арқылы ажыратылады:

uses CRT, Graph;

Программадағы кез келген операторды таңба арқылы белгілеп қоюға болады. Таңба ретінде төрт цифрдан аспайтын таңбасыз бүтін сандар немесе атауларды қолдануға болады. Таңба оператордың алдында қойылады және одан қос нүкте арқылы ажыратылады. Программада пайдаланылатын барлық таңбалар таңбаларды сипаттау бөлімі нде санақталып шығуы тиіс, мысалы: label 3, 471, 29, Quit;

Тұрақтыларды сипаттау атауларды тұрақтылардың синонимдері ретінде пайдалануға мүмкіндік береді, оларды тұрақтыларды сипаттау бөлімі нде анықтау керек:

const K = 1024; MAX = 16384;

Айнымалыларды сипаттау бөлімі нде программада пайдаланылатын барлық айнымалылардың типтерін анықтау керек:

var P,Q,R: Integer;

A,B: Char;

F1,F2: Boolean;

Паскаль-программасында программаның барлық компоненттері оларды пайдалануға дейін міндетті түрде сипатталынуы тиіс.

Операторлар бөлімі қызметші begin... end сөздерінің арасында операторлардың тізбектілігін қамтыған құрама оператор болып табылады.

Операторлар бір-бірінен ";" символы арқылы ажыратылады. Программаның мәтіні нүктемен аяқталады.

Сипаттаулар мен операторлардан басқа Паскаль-программа түсініктемелер ді қамтуы мүмкін, олар { фигуралық жақшалардың арасына жазылған символдардың еркін тізбегі болып табылады }.

Қажет болса, Паскаль-программаның мәтіні компиляциялау кілттерін қамтуы мүмкін, олар компиляциялау режимін басқаруға мүмкіндік береді. Синтаксистикалық тұрғыда компиляциялау кілттері түсініктемелер сияқты жазылады. Компиляциялау кіліті $ символын және + (режимді қосу) немесе - (режимді өшіру) таңбасы ілескен әріп-кілтті қамтиды. Мысалы:

{$E+} - математикалық сопроцессорды эмуляциялау;

{$F+} – процедуралар мен функцияларды шақырудың алыс типін қалыптастыру;

{$N+} - математикалық сопроцессорды қолдану;

{$R+} – аралықтардың шекараларын шығуды тексеру.

Кейбір компиляциялау кілттері параметрді қамтуы мүмкін, мысалы:

{$I файл_аталуы} - компиляцияланылатын программа мәтініне аталған файлды қосу.

Герон формуласы бойынша үшбұрыштың ауданын есептейтін жай программаның жазылу мысалы:

Program TRIANG;

var A, B, C, S, P: Real;

begin

Read(A,B,C);

WriteLn(A,B,C);

P:=(A+B+C)/2;

S:=Sqrt(P*(P-A)*(P-B)*(P-C));

WriteLn('S=',S:8:3)

end.


Лекция

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 мысалға блок-схема

9.3 Таңдау операторы (case)

Бұл оператор программада көп if операторларды пайдаланбай альтернативалар арасында таңдауды жүзеге асыруға мүмкіндік береді. Таңдау операторы (case) өрнектен (айырып-қосқыштан, селектордан) және әрқайсысының алдында бір немесе бірнеше тұрақтылар (олар таңдаудың тұрақтылары немесе таңбалар деп аталады) немесе else кілттік сөзі тұратын операторлардың тізімінен тұрады. case таңбасы бірнеше тұрақтылардан немесе ішкі аралықтардан (поддиапазон) тұрады, олардан кейін қос нүкте қойылады және олар үтірлер арқылы ажыратылады. Қай оператордың case таңбасы селектордың ағымдағы мәніне тең болады сол оператор орындалады. Егер case таңбалардың бірде біреуі селектордың мәнін қамтымаса, онда бір де бір оператор орындалмайды немесе міндетті емес резервтелген else сөзінен тұратын операторлар орындалады. Айырып-қосқыш санақтап шығу типіне ие болуы тиіс және осы типтің жоғарғы және төменгі шекараларының санақтап шығылатын мәндері -32768 ден 32767 дейінгі аралықта жатуы тиіс. Сонымен, жолдық типті және ұзын бүтін типті айырып-қосқыш үшін рұқсат етілмеген. Барлық таңдау тұрақтылары бірегей болуы және айырып-қосқыштың типімен үйлесімді болатын санақтап шығу типіне ие болуы тиіс. Таңдау операторы оның алдындағы таңдау тұрақтысы айырып-қосқыштың мәніне немесе айырып-қосқыштың мәні жататын таңдау диапазонына тең болатын оператордың орындалынуына әкеледі. Егер ондай таңдау тұрақтысы ондай таңдау диапазоны болмаса және else бұтағы бар болса онда else кілттік сөзінен кейін ілескен оператор орындалады. Егер else бұтағы болмаса онда ешқандай оператор орындалмайды. Таңдау операторға мысалдар қосымшада келтірілген (Р6 және Р11 программалары):

case Operator of

plus: X:= X+Y;

minus: X:= X-Y;

times: X:= X*Y;

end;

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

Мысал 9.5. у-ті есептеу үшін таңдау операторын жазу керек. Блок-схемасы 9.6 суретте. 9.5 мысалға программаның фрагменті:

case n of

1: y:= x;

2, 3: y:= 2 * sqrt(abs(x));

4: y:= exp(x);

end;

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


Лекция

10.1 Циклдік құрылымды алгоритмдерді программалау. Кейінгі шартты цикл операторы (repeat)

Цикл операторы белгілі бір операторлардың қайталап орындалуын береді. Егер қайталану саны алдын-ала белгілі болса, онда ыңғайлы конструкция болып for операторы табылады. Кері жағдайда while немесе repeat операторларын пайдалану керек. Кейінгі шартты цикл (repeat сөзінен басталатын) операторында операторлардың тізбектілігін қайталап орындауды басқаратын өрнек repeat операторының ішінде қамтылған.

Өрнектің нәтижесі бульдік типтегі нәтиже болуы тиіс. repeat және until қызметші сөздердің арасына алынған операторлар өрнектің нәтижесі Тrue мәнін қабылдағанша ретімен орындала береді. Операторлардың тізбектілігі кемінде бір рет болса да орындалады, себебі өрнек операторлардың тізбектілігі әр орындалып болғанынан кейін есептеледі. Кейінгі шартты цикл операторды пайдалану мысалдары (қосымшадағы Р7 және Р9 программаларды да көріңіз):

repeat K:= I mod J; I:= J;J:= K; until J = 0; repeat Write(' (0..9) мәнін енгізіңіз:'); Readln(I); until (I >= 0) and (I <= 9);

P9 программасы "Қайталау-" сұрағына n немесе N жауабы алынғанша қайталана береді. Басқа сөзбен айтқанда, repeat және until арасына алынған нәрсе until –ден кейінгі өрнек Тrue мәнге ие болып түрғанша қайталанып орындала береді. while циклы мен repeat циклдарының арасында негізгі үш айырмашылық бар:

1) repeat циклындағы операторлар әрдайым кемінде бір рет болса да орындалады, себебі өрнекті тексеру repeat кілттік сөзінен кейін бірден жүзеге асырылмайды. Керісінше, while циклында егер өрнек ең басында False мәнге ие болса онда циклдің бүкіл тұлғасы өткізіліп жіберіледі (орындалмайды).

2) repeat циклы өрнек Тrue мәнге ие болғанша орындала береді; оған қарағанда while циклы өрнек Тrue мәніне ие болып тұрған кезде орындала береді.

3) repeat циклы құрама операторды құрмайтын бірнеше операторларды қамтуы мүмкін.

Сонымен, repeat циклының операторы келесі формаға ие:

Repeat

операторлар

until шарт

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

repeat

write(1);

until 2=1;

Циклденіп қалған программаны тоқтату үшін Ctrl-F2 клавиштер комбинациясын немесе кнопкасын басу керек.

Блок-схемаларда repeat циклының операторына 10.1 суретте көрсетілген құрылым сәйкес.

Сурет 10.1 - repeat оператордың жұмыс жасау блок-схемасы

Мысал 10.1 Бір айнымалысы бар функцияны табуляциялау есебін шешу керек, яғни аргументі [-0.5, 2.5] аралықта 0.1 қадаммен өзгеретін функцияның мәндер кестесін есептеу керек. Бұл есепте айнымалы циклдың басқарушы айнымалысы болып табылады. Бұл есепті шешудің басқа нұсқасы төменде 10.2 мысалда келтірілген.

Program P10_1;

Var a, b, x, y: real;

Begin

writeln(‘Бастапқы деректерді енгізіңіз’); read(a, b);

writeln(‘ x y(x)‘); x:= -0.5;

repeat

y:= ln(abs(x))/(a*a - b*b);

writeln(x:8:1, y:8:1)

x:= x + 0.1;

until x > 2.5;

End.

10.2 Алдынғы шартты цикл операторлары (while)

Алдынғы шартты цикл (while сөзінен басталатын) операторы оператордың (ол құрама оператор да болуы мүмкін) қайталап орындалуын басқаратын өрнекті қамтиды. while операторы кейбір шартты циклдың басында тексеру үшін пайдаланылады.

Ол арқылы оператордың қайталап орындалуын басқару жүзеге асырылатын өрнек бульдік типке ие болуы тиіс. Ол ішкі оператор орындалғанша есептеледі. Өрнек Тruе мәнді қабылдап тұрса ішкі оператор қайталанып орындала береді. Егер өрнек ең басынан False мәнін қабылдаса онда алдынғы шартты цикл операторының ішінде қамтылған оператор орындалмайды. Алдынғы шартты цикл операторының мысалдары: (сонымен қатар, қосымшадағы Р3 және Р10 программалары).

while Data[I] <> X do I:= I + 1; while I > 0 do begin if Odd(I) then Z:= Z * X; I:= I div 2; X:= Sqr(X); end;
while sum<1000 do begin I:= I + 1; sum:=sum+a; end; while not Eof(InFile) do begin Readln(InFile,Line); Process(Line);end;

while циклының операторы келесі формаға ие:

while шарт do

оператор

Шарт логикалық типтегі өрнек болып табылады, ал do-дан кейінгі оператор цикл тұлғасы деп аталады. Циклдың әр итерациясының алдында шарт есептеледі де егер ол ақихат болса онда цикл тұлғасы орындалады, кері жағдайда циклдан шығу орын алады.

Егер шарт әрдайым ақихат болып қала берсе, онда циклденіп қалу орын алуы мүмкін:

while 2>1 do

write(1);

Циклденіп қалған программаны тоқтату үшін Ctrl-F2 клавиштер комбинациясын немесе кнопкасын басу керек. Pascal ABC-те while циклдың тұлғасы бос болуы мүмкін емес.

while цикл операторының repeat цикл операторынан негізгі ерекшеліктері:

1. while цикл операторының тұлғасында тек жалғыз оператор тұруы мүмкін. Циклде бірнеше операторларды орындау үшін цикл тұлғасы операторлық beginend жақшаларға алынуы тиіс.

repeat операторында операторлық жақшалар қойылмайды, себебі оларды қызметші repeatuntil сөздер алмастырады.

2. while операторында егер логикалық шарт бірден жалған болып табылса цикл тұлғасы бір де бір рет орындалмауы мұмкін.

repeat операторында логикалық өрнек цикл тұлғасынан кейін жазылады. Сондықтан, цикл тұлғасы міндетті түрде кемінде бір рет болса да орындалады.

Блок-схемаларда while цикл операторына 10.2 суретте көрсетілген құрылым сәйкес

Сурет 10.2 - while оператордың жұмыс жасау блок-схемасы

Мысал 10.2 (бұл 10.1 мысал шешімінің екінші нұсқасы). Бір айнымалысы бар функцияны табуляциялау есебін шешу керек, яғни аргументі [-0.5, 2.5] аралықта 0.1 қадаммен өзгеретін функцияның мәндер кестесін есептеу керек. Бұл есепте айнымалы циклдың басқарушы айнымалысы болып табылады.

Алгоритмнің блок-схемасы 10.3 суретте. 10.2 мысалдың программасы:

Program P10_2;

Var a, b, x, y: real;

Begin

writeln(‘Бастапқы деректерді енгізіңіз’); read(a, b);

writeln (‘ x y(x)‘); x:= -0.5;

while x <= 2.5 do

begin

y:= ln(abs(x))/(a*a - b*b);

writeln(x:8:1, y:8:1)

x:= x + 0.1;

end;

End.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: