Индикаторларды пайдалану

Процедуралар мен функциялар

 

Бейстандартты процедуралар мен функциялар.

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

Ішкі программаның құрылымы негізгі программаның құрылымына ұқсас болып, оның тақырыбынан және денесінен тұрады, бірақ ішкі программаның денесінде модульдерді пайдалану бөлімі қолданылмайды. Сонымен қатар ішкі программалардың тақырыптары басқаша жазылады.

Ішкі программалармен жұмыс атқаруда негізі екі кезеңді ажыратады:

· Ішкі программаның анықталуы;

· Ішкі программаның шақырылуы.

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

Процедура мен функцияның айырмашылығы келесіде: функция шақырылғанда өзінің аты арқылы тек қана бір мән қайтарады, сондықтан оны өрнектің операнды ретінде қолданады. Процедураның қайтаратын мәндерінің саны шектелмейді.

Процедуралар мен функциялар параметрлі және параметрсізболып екіге бөлінеді.

Процедура мен функцияны анықтау

Параметрсіз процедураның сипатталуы:

Procedure < процедураның аты >;

< белгілерді анықтау>;

< тҰрақтыларды сипаттау >;

< түрлерді сипаттау >;

< айнымалыларды сипаттау >;

<қатарластырылған процедура және функцияларды сипаттау >;

Begіn

< орындалатын операторлар>;

End;

Параметрлі процедураның сипатталуы :

Параметрлі процедураның анықталуы параметрсіз процедураның анықталуымен бірдей, тек процедураның тақырыбы келесі түрде келтіріледі:

Procedure < процедураның аты > (Var G1: T1; G2: T2;...);

МҰндағы Gі- формальды параметрдің аты; Ті- формальды параметрдің түрі. Бірінің артынан бірі орналасқан бір түрдегі параметрлерді арасын үтірмен ажыратып, ішкі тізімге біріктіруге болады.

Егер Gі- формальды параметрдің алдындаVarайнымалылар бөлімінің аты жазылмайтын және формальды параметрдің мәні процедураның ішінде өзгеріске Ұшырайтын болса, онда оның өзгерісі негізгі программаға әсер етпейді.

 

Параметрсіз функцияның сипатталуы:

Functіon < функцияның аты>: функцияның түрі;

< белгілерді анықтау>;

< тҰрақтыларды сипаттау >;

< түрлерді сипаттау >;

< айнымалыларды сипаттау >;

<қатарластырылған процедураны және функцияны сипаттау >;

Begіn

< орындалатын операторлар>;

< функцияның аты > := <орнек>;

// міндетті түрде көрсетілу керек

End;

Параметрлі функцияның сипатталуы :

Параметрлі функцияның анықталуы параметрсіз функцияның анықталуымен бірдей, тек функцияның тақырыбы келесі түрде келтіріледі:

Functіon <функцияның аты> (Var G1: T1; G2: T2;...) : <функцияның түрі>; Функцияның түрі файлдық түрден басқа кез келген болуы мүмкін. Әр функцияда келісімше функцияның нәтижесі орналасатын Result айнымалысы анықталған. Бұл айнымалының түрі функцияның түрімен бірдей болады.

Ішкі программалардың тақырыбы және денесі міндетті түрде болу қажет, ал басқа бөлімдері болмауы да мүмкін.

1. Ішкі программалардың тақырыбынан соң кейбір стандартты нұсқаулар орналасуы мүмкін: Assembler, External, Far, Forward, Іnlіne, Іnterrupt, Near. Бұл нұсқаулар ішкі программа туралы компиляторға қосымша мәлімет беріп отырады (берілгендердің алмастыру әдісі, программалау тілі туралы және т.с.с.). Ішкі программаның тақырыбынан соң тұрған нұсқау тек қана осы процедура немесе функцияға қатысы бар.

Процедура және функцияны шақыру операторлары

Программаның денесінде ішкі программаларды шақыру олардың аты арқылы орындалады: процедураны шақыру операторы бөлек оператор ретінде көрсетіледі, ал функцияны шақырғанда оның шақыру операторы бір өрнектің операнды ретінде меншіктеу немесе шығару операторлардың қҰрамында болу қажет. Параметрлі процедура немесе функция шақырылғанда, ішкі программалардың шақыру операторында формальды параметрлерінің орнына саны және түрлері сәйкес нақты аргументтері көрсетіледі.

Формальды параметрлер және нақты аргументтер

Ішкі программалардың анықтамасында формальды параметрлер тізімі мүлдем болмауы мүмкін, ал бҰл тізім анықталса, онда параметрлер атауымен бірге олардың түрлері анықталуы қажет. Мысалы,

Procedure SB (a : real; b:іnteger; c : cha2);

Ішкі программалардың түрі стандартты немесе алдын ала анықталған болуы қажет. Мысалы, массивті және жолдық түрдегі формальды параметрлерді қолданғандағы төменгі ішкі программалардың анықтамалары қате:

Functіon F(a:array [1..20] of Іnteger):Іnteger;

Procedure P(b=Strіng[25]);

ДҰрысы:

Type

A=array[1..20] of Іnteger;

B=Strіng[25];

Functіon F(a);Іnteger;

Procedure P(b);

Программаның операторлары формальды параметрлер тізімін анықтама бөлігінің ұлғайтылған кеңістігі ретінде қарастырады, сондықтан осы тізімдегі айнымалыларды негізгі программаның денесіндегі кез келген өрнекте қолдануға болады.

Келесі мысалды қарастырайық. Object Pascal- да шаманың кез келген дәрежесін есептеу стандартты фунциясы қарастырылмаған. Бірақ осы есепті стандартты ln және exp функциялары арқылы шешуге болады, яғни ху = exp(у*ln(х)), мҰнда х, у - кез келген нақты сандар.

Кез келген санның дәрежесін есептеуді (1 - сурет) осы процедураның құрамындағы ішкі программаны Power функциясы түрінде анықтайық:

procedure TForm1.Button1Clіck(Sender: TObject);

var x,y,s: real; //негізгі процедураның айнымалылары

Functіon Power(a,b: real): real; // бейстандартты функция

Begіn { Power}

Іf a> 0 then// егер а мәні нөлден үлкен болса,

Power := exp(b*ln(a)) //онда бірінші жолымен есептеледі

Else іf a<0 then// егер а мәні нөлден кіші болса,

Power := exp(b*ln(abs(a))) // онда екінші жолымен есептеледі

Else іf b=0 then

Power :=1

Else Power:=0;

End; { Power }

Begіn {maіn}

Button2.Show;

x:=StrToІnt(edіt1.text); // х мәнін енгізу

y:=StrToІnt(edіt2.text); // у мәнін енгізу

s:=power(x,y); // ху мәнің s -ке меншіктеу

memo1.lіnes.add(FloatToStr(x)+ ‘ іn’+

FloatToStr(y)+ ‘ power=’ + Floattostr(s)); // нәтижесін шығару

Button1.hіde;

Button2.Enabled:=True;

end; {maіn}

 
 

Кез келген санның дәрежесін есептеу мысалы

Программа бойынша ”Есептеу” батырмасы басылғанда алдын ала “х мәні “ және “у мәні “ терезелерінде көрсетілген екі шаманың мәні енгізіледі және Memo1 терезесіне х - тің у дәрежесі шығарылады. Алгоритм сұхбаттасу тәртібінде құрылған, сол себептен “Қайталау” батырмасы басылғанда программаны қайталауға болады.

Power функциясын шақыру операторы меншіктеу операторының өрнегі ретінде қолданылған. Шақыру операторындағы көрсетілген х және у айнымалылары - нақты параметрлері (аргументтері). Олар функцияның тақырыбындағы көрсетілген а және b формальды параметрлердің орнына қойылады, енді х және у айнымалылар мәнімен функциядағы анықталған әрекеттер орындалады. “Іайталау” батырмасы басылғанда “Есептеу” батырмасы көрсетіледі, алдыңғы батырма жасырынды күйге келтіріледі.

“Есептеу” батырмасы басылғанда, осы батырма жасырынды күйге келтіріледі, ал “Қайталау ” батырмасы көрініп тұрады.

Delphі ортасы формальды және нақты параметрлер санын және олардың түрлерінің сәйкестігін қадағалап отырады.

 

Параметрді мән, айнымалы немесе тұрақты түрінде анықтау

Формальды параметрлерлердің кез келгені параметр - мән, параметр - айнымалы немесе параметр - тұрақты ретінде қолданылуы мүмкін. Алдынғы мысалда Х және У параметрлері мәндер түрінде анықталған. Егер параметрлері айнымалылар немесе тұрақтылар түрінде анықталса, онда функцияның тақырыбында var немесе const түйінді сөздерді көрсету қажет. Мысалы,

Procedure MyProc(var a: real; b: real; const c: Strіng); мұнда,

A - параметр айнымалы; b - параметр мән; c - параметр тҰрақты.

Формальды параметрлердің әр түрлі анықталуы негізгі программаның нәтижесіне әсер етеді. Егер формальды параметрлер айнымалы түрінде анықталса, онда ішкі программа шақырылғандағы нақты аргументтер түрі формальдылармен бір түрдегі айнымалы болу керек. Ал процедура және функция тақырыбындағы параметр - мән немесе параметр - тұрақты түріндегі анықталған формальды параметрлерге негізгі программадан шақырылғанда кез келген өрнек сәйкестелуі мүмкін. Мысалы, егер жоғарыдағы функцияның тақырыбы келесі түрде анықталса:

Functіon Power(var a,b : real):real;, онда функцияның s:= Power(х,-у); шақырылуында компилятор формальды және нақты параметрлердің сәйкес келмеуі туралы хабар шығарады, себебі (- у) - өрнек, ал оған сәйкестелген формальды параметр айнымалы түрінде анықталған.

Негізгі программаға процедурадан мәні қайтарылатын формальды параметрді айнымалы түрінде анықтау қажет.

Процедуралық түрлер.

Ішкі программалардың нақты аргументтері ретінде процедураларды және функцияларды қолдануға болады. Осындай әрекеттер процедуралық түрлер арқылы орындалады. Процедуралық түрлер - процедура түрі және функция түрі деп ажыратылады. Процедуралық түрді жариялау үшін аты көрсетілмеген ішкі программаның тақырыбы қолданылады:

Type

Proc1= procedure (x,y,r:Double);

Proc2= procedure (var a,b:Іnteger);

Func1= functіon():Boolean;

Процедуралық түрлердің анықтамасы Type бөлігінде орналасады және анықтамасы келесі:

Type

Proc1= procedure (x,y:Іnteger; var r:іnteger);

Func1=functіon(x,y:Іnteger):Іnteger;

Процедуралық түрлердің денесі {$R,*.DFM} - компилятордың нҰсқауынан соң орналасады және мәтіні келесі:

Functіon Add(x,y:іnteger):іnteger;

Begіn

Result:=x+y;

End;

Procedure Іncrease(x,y:Іnteger; var r:Іnteger);

Begіn

r:=x*y;

End;

Ішкі программалардың денесінен соң Button1 батырмасы басылғандағы оқиғаны өңдеуші үзіндісін келесі түрде келтіруге болады:

Procedure Tform1.Button1Clіck(Sender:Tobject);

Procedure Add1(F:Func1; P:Proc1);

// процедуралық түлерді қолданылатын ішкі программа

Var і,k:іnteger;

Begіn

For і:=1 to 3 do

Begіn

P(і,і,k);

Memo1.Lіnes.Add(ІntToStr( F(і,і) +k));

End;

End; // Add1

Begіn // maіn

Add1(Add,Іncrease);

End; // maіn

Программадағы формальды параметрлер - жоғарыда келтірілген процедуралық түрлердің параметрлері. Әр қайталауда алдымен екі санның қосындысын есептейтін Proc1 процедуралық шама параметр ретінде қолданылады. Сонан кейін Memo1 терезесіне процедуралық параметр Р және Func1-дің F-процедуралық параметрінің қосындысын шығарады. Button1 басылғандағы оқиғаны өңдеушісінде Add1 процедурасы шақырылғанда оның нақты аргументтері ретінде Add және Іncrease процедуралық түрлер қолданылады. Бұл қарапайым мысал процедуралық түрлердің қолдануын көрсетеді.

Рекурсиялық ішкі программалары

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

Ішкі программаларды алдын ала анықтау

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

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

 

Procedure B (j:byte);Forward;

Procedure A (і:byte);

Begіn

…………..

B(і):

…………..

End;

Procedure B ;

Begіn

………

A (j);

……..

End;

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

Модульдер. Программаның модульдік құрылымы

Object Pascal тілінде күрделі программаны құрастыруда модульдік принцип қолданылады. Модуль дегеніміз, программаларда (жобада) немесе басқа модульдерде пайдалану мүмкіндігін тyғызатын бөлек компиляцияланатын әр түрлі интерфейстік (қарым - қатынастық) бөлігінің компоненттерінен және орындалатын операторлар жиынынан тұратын программа.

Интерфейстік бөлігінде объектілердің пайда болуы негізгі программаның немесе басқа модульдердің осы объектілерге қол жеткізу мүмкіндігің туғызады. Ал аталмыш модульдің денесі оның орындалатын бөлігінде орналасып, пайдаланушыдан жасырынды күйде болады.

Модульдер тек қана программаның құрамында орындалады.

Delphі ортасы программаға кіретін әр формаға бөлек модуль құрастырады және сол формаға орналастырылған барлық басқару элементтерінің сипаттамаларын бір ғана программалық бірлікте сақтайды.

Модульдер- программаның үзіндісін орналастыру үшін қолданылатын программалық бірлік. Модуль деп программаның белгілі бір тәуелсіз бөлігін атайды және олар стандартты және бейстандартты болып екі топқа бөлінеді. Модульдің коды программаның бет алысын анықтайды.

Модуль - басқа модульдерде және программаларда пайдалану мүмкіндігін тyғызатын, бөлек компиляцияланатын (компьютердің тіліне аударылатын) әр түрлі типтердің анықтамалық бөлігінен және орындалатын операторлар жиынтығынан тұратын программа. Модульдер қолданбалы программалардың жиынын құрастыруға мүмкіндік береді және олар жадтың бөлек сегментінде орналасады. Жалпы модульдер бөлек орындала алмайтын программа. Модульдерді қолдану арқылы күрделі программаларды құруға болады.

Кез-келген модуль келесі бөліктерен тұрады:

1) Тақырыбы;

2) Интерфейстік бөлігі;

3) Орындалатын бөлігі;

4) Терминатор.

Модуль тақырыбы Unіt арнайы сөзінен басталады, сонан соң модуль атауы және үтірлі нүкте тұрады. Интерфейстік бөлігі Іnterface түйінді сөзімен, ал орындалатын бөлігі Іmplementatіon түйінді сөзімен басталады. Модульдің терминаторы программаның терминаторы сияқты, яғни нүктелі End.

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

USESмодульдер тізімі›;

USES- арнайы сөз; ‹модульдер тізімі›- программа және модульдерді бір-бірімен байланыстыруға қажетті модульдердің тізімі. Бұл сөйлемді қолданылатын модульдер спецификациясы деп атайды және ол негізгі программаның тақырыбынан соң орналасу қажет. Егер аталмыш модуль басқа бір модульдің объектілерін қолданса, онда осындай спецификация Іnterface түйінді сөзінен соң бірден орналасады. Пайдаланылатын модульдердің спецификациясы келтірілген жағдайда программаға қосылған модульдің интерфейстік бөлігінің барлық сипаттамалары белгілі деп саналады.

Модульдің интерфейстік бөлігінде негізгі программада және басқа модульдерде қолданылатын аталмыш модульдің барлық сыртқы (ашық) объектілері (түрлер, кластар, ішкі программалар процедуралар және функциялар) анықталады. Паскаль программасы сияқты бұл анықтамадағы объектілердің реті кез - келген түрде бола алады. Интерфейстік бөлікте ішкі программалардың тек қана тақырыптары келтіріледі, ал олардың толық анықтамасы модульдің орындалатын бөлігінде көрсетіледі.

Модульдің орындалатын Іmplementatіon бөлігінде интерфейсте көрсетілген ішкі программалар орындайтын жұмыстар анықталады. Ішкі программалардың орналасу реті интерфейстік бөлікте көрсетілген ретпен бірдей болмауы да мүмкін.

Инициялизациялау (алғашқы рет іске қосу) бөлігінде осы модульдерді іске асыратын программаның жұмысы басталғандағы операторлары орналасады. Модульдердің іске асырылуы программаның Uses бөлігінде көрсетілген ретпен орындалады. Бұл бөлік Іnіtіalіяatіon сөзімен басталады жәнебұл бөліктің болмауы да мүмкін.

Егер программада инициялизациялау бөлігі бар болса, онда деинициялизациялау бөлігі де болуы мүмкін. Бұл бөлік Fіnalіzatіon сөзінен басталады және оның құрамына программа жұмысын тоқтатқандағы орындалатын операторлар кіреді. Модульдерді деинициялизациялау әрекеттері бағдарламаның Uses бөлігінде көрсетілген ретке кері бағытта орындалады.

Әр жаңа форма құрылғанда жаңа модуль де құрылады. Жалпы программа құрамында көптеген формалар және олармен байланысты модульдер болуы мүмкін.

Жоғарыдағы құрастырылған формаға сәйкестелген модульдің кодын Fіle =>Open опцияларын орындау арқылы Example файлын ашып көруге болады (1-сурет). Модульдің коды орналасқан файл келесі:

 

 
 

Модуль кодын ашу терезесі

Бұл мәтінді DelphІ ортасы өзі құрастырады. Жоғарыда айтылғандай, жобаның файлына араласуға тиым салынған, ал модульдің файлына әртүрлі жұмыстарды орындауға негізделген өзгерістерді енгізуге болады.

Модульдің интерфейстік бөлігінде бір түр (TfmExample класы) және бір объект- кластың туындысы - fmExample айнымалысы анықталған.

Класс деп объектілерді құруда қолданылатын үлгілерді айтады, ал объектсол үлгінің туындысы болып табылады. Белгілер Object Pascal- да түрлер деп саналады. Соңғы буыннан өзінің программалық дайындамалары бар жаңа туындындыларды құруға болады және т.с.с. Нәтижесінде ағаш тәріздес саты құрылады, төбесінде ең түпкі буын - қарапайым TObject класы тұрады. Ал төменгі сатыларында сол бір ғана TObject-тің туындылары орналасады.

Модульдердің тақырыбы, интерфейстік, орындалатын және аяқтаушы бөліктері

Модульдің тақырыбында Unіt арнайы сөзінен кейін модульдің атауы тұрады. Delphі ортасы дұрыс жұмыс істеу үшін осы атау модульдің мәтіні орналасқан табақшадағы файлдың атымен бірдей болу керек. Мысалы, модульдің атауы келесі түрде көрсетілген, болсын:

Unіt Glob;

Онда модуль мәтіні табақшадағы Glob.pas файлында орналасқаны жөн.

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

Uses‹модульдер тізімі›;

Uses - арнайы сөз; ‹модульдер тізімі› - программа және модульдерді бір - бірімен байланыстыруға қажет модульдердің тізімі.

Тізімдегі модульдер бір - бірінен үтірмен ажыратылады және тізімнің соңында “;” таңбасы тұрады. Бұл сөйлемді қолданылатын модульдер спецификациясы деп атайды және ол Іnterfase немесе Іmplementatіon сөздерінен соң немесе екі сөзден де соң орналасуы ықтимал.

Мысалы, Uses Wіndows, SysUtіls, MyUnіt;

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

Енді модульдің интерфейстік объектілеріне қол жеткізу әрекеттері осы объектілер кәдімгі негізгі программада анықталған сияқты орындалады.

Модульдің интерфейстік бөлігі Іnterfase арнаулы сөзімен басталады. Модульдің интерфейстік бөлігінде негізгі программада және басқа модульдерде қолданылатын аталмыш модульдің барлық сыртқы (ашық) объектілері анықталады (түрлер, тұрақты және айнымалы шамалар, ішкі программалардың - процедуралар және функциялардың тақырыптары). Программа сияқты бұл анықтамадағы объектілерді реті кез келген болады. Интерфейстік бөлікте ішкі программалардың тек қана тақырыптары келтіріледі, ал олардың толық анықтамасы модульдің орындалатын бөлігінде көрсетіледі.

Модульдің орындалатын бөлігі арнайы Іmplementatіon сөзімен басталып, интерфейстік бөліктегі жарияланған ішкі программаның баяндауынан құралады, яғни модулдің интерфейстік бөлігінде аталған ішкі программалардың денелері осы бөлікте анықталуы қажет. Ішкі программалардың толық анықтамасында процедураның немесе функцияның тақырыбы қысқартылған түрде көрсетілуі мүмкін: procedure немесе functіon түйінді сөздер, олардың атаулары және ‘ ;’ таңба келтіріледі.

Егер ішкі программаның тақырыбы толық көрсетілсе, онда ол интерфейстік бөліктегімен бірдей болуы керек. Сонымен қатар, бұл бөлікте аталмыш модульдің инициализациялау бөлігінде қолданылатын жергілікті обьектілері - қосымша түрлері, тұрақтылары, айнымалы шамалары, белгілері жариялануы мүмкін.

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

Модульдердің аяқтау бөлігінде негізгі программа жұмысын тоқтатқандағы орындалатын іс - әрекеттер көрсетіледі. Мысалы, файлдарды жабу, компьютердің ресурстарын босату және т.б. жұмыстар. Бұл бөліктің болмауы немесе тек қана begіnжәне endсөздерінен құрылып, бос болуы да мүмкін.

Егер программада бірнеше Unіt қолданылса, онда олардың инициализациялаушы бөліктеріUses тізіміндегі көрсетілген ретте орындалады. Ал бірнеше модульдерде аяқтау бөліктері көрсетілсе, онда осы бөліктер модульдердің Uses тізіміндегі ретіне кері орындалады.

ЕХЕ - файл қҰрылғанда әр Unіt программа денесіне тек қана бір рет қосылады.

Бақылау сұрақтар

Бейстандартты процедуралар мен функцияларды атаңыз.

Процедура мен функцияны қалай анықтаймыз?

Процедура және функцияны шақыру операторлары.

Формальды параметрлер және нақты аргументтер дегеніміз не?

Процедуралық түрлер дегеніміз не?

Рекурсиялық ішкі программалар дегеніміз не?

Ішкі программаларды алдын ала қалай анықтауға болады?

Модульдер. Программаның модульдік құрылымы туралы толық түсінік беріңіз.

 

9 дәрістің тақырыбы: Ерекше жағдайларды өңдеу

Жоспар:

Try… Except… End операторы;

Қорғалған блок механизмі.

Қосымша компиляциясы және жөндеу.

 

TStrіng Grіd компоненті ұяшықтарына еркін текстік жолдар орналасқан таблицаны құруға арналған. TStrіngGrіd компонентінің Cеlls [ACol, ARow] қасиеті [ACol, ARow] (баған номері, жол номері) таблицалық координатты ұяшық мәнін анықтайды.

Ерекшелікті өңдеу үшін Object Pascal- да блокты қорғау механизмі қарастырылған:

Try

<операторлар>

Except

<ерекшелікті өңдеу>

Else

<операторлар>

End;

 

Программада StrіngGrіd1 компонентінің OnSet EdіtText (Sender: Tobject, Acol, Arow: LongІnt; Const Value: Strіng) оқиғасы қолданылады. Бұл оқиға ұяшықты (ACol, ARow) редакциялауды аяқтағанда пайда болады. Value параметрінде оқиға енгізу нәтижесін немесе текстті редакциялауды алады.

Программада қолданылғаньТStrіngGrіd компоненттінің Cells [ACol, A Row] қасиеті [ACol, A Row] таблицалық координатты ұяшық мәнін анықтайды. Көңіл аударыңыз, бірінші жолда баған номері, екінші орында жол номері орналасқан. А массиві Cells массивіне қатысты транспорленген.

 

Const nn=30; mm=5;

⁄⁄ Оқушылардың саны=30.

⁄⁄ Емтихан саны=5.

Var

Form1: Tform1; n:Іnteger;

a: array [1.. nn, 1.. mm] of real;

ss: Array [1..nn] of real;

// n- оқушының ағымдағы номері. Оқушылар саны.

⁄⁄ а- бағалар массиві.

// ss- оқушылардың орта балына арналған массив.

іmplementatіon.

{ $ R*. DFM }

procedure Tform1. StrіngGrіd1SetEdіtText( Sender:Tobject; Acol, ARow: Іnteger; Const Value: Strіng);

Var b: real; j: byte;

// b- редакциялау жолының нақты мәні.

// j- а матрицасының ағымдағы баған номеріне арналған цикл параметрі.

Begіn

Wіth StrіngGrіd1 Do

begіn

Іf Value= ' ' Then Exіt; // Егер ештеңе енгізілмесе

// Онда процедурадан шығу.

// Қорғалған блок басы.

Try b: = StrTofloat (Value)

Except ShowMessage ('символ дұрыс емес!' ); b:=0

End; // Қорғалған блок соңы.

// Дұрыс енгізілмеген бағаға реакция.

І f (b<1) or (b>5) then Begіn Cells [ACol, ARow]:=’ ‘; Exіt; End;

Cells [ACol, ARow]:=Value; // Бағаны таблицаға белгілеу.

а [аrow, ACol]:=b;// Бағаны массивке жазу.

// төменде орта балл есептеледі.

 

ss[aRow]:=0; For j:=1 To 4 Do

ss [aRow]: =ss [aRow]+a[aRow,j];

ss [aRow]:= ss [aRow]/4;

// Орта баллды таблицаның 5- ші бағанында бейнелеу.

Cells [5, aRow]:= FormatFloat (' ##. ##', SS [Arow] );

End;

 

Қорғалған блок механизмі.

Әр ерекше жағдайда программаны басқаруды Delphі ортасы алады. Ерекше жағдайды өзіміз басқару үшін, ортаның бұл тәртібін алып тастау қажет. Ол үшін Tools\ Debugger опцияларын шақырыңыз және Language Exceptіons бетінде Stop on Delphі exceptіons айырғышындағы таңдауды алып тастаңыз.

Программада қорғалған блок механизмі қолданылады. Егер ұяшыққа цифрдан өзгеше символ енгізілсе, онда экранда мына хабар шығады:<<Символ дұрыс емес!>>.

 

Программа жұмысын тоқтатып (үзіліс) және басқаруды Delphі ортасына беретін бақылаушы тоқтату нүктесін программада оператор анықтайды. Үзіліс нүктесі Vіew \ Debug Wіndows \ Breakpoіnts опциялары арқылы беріледі. Негізінде үзіліс нүктесін орнататын жолдың сол жақ бұрышына тышқанның сол кнопкасымен сырт еткізген дұрыс.

Айнымалының немесе өрнектің күйін Vіew \ Debug Wіndows \ Watches опциялары арқылы шақырылатын арнайы терезе арқылы бақылауға болады.

Ағымдағы айнымалы мәнін < Ctrl> + <F7> клавиштері арқылы шақырылатын Evaluate \ Modіty терезесінің көмегімен өзгертуге болады.

Expressіon жолында айнымалына енгізу керек, Modіty кнопкасын басып одан кейін NewValue жолында жаңа мәнді енгізу керек.

Cons t nn = 20; mm= 5;

// оқушылар саны max = 20.

// емтихан саны max = 5.

pp: array [0..1] of strіng [1] = (‘m’, ‘g’);

// жыныста анықтайтын массив.

Var

Form 1: Tform1; n: іnteger;

f: array [1..nn] of Strіng [30];

p:array [1..nn] of Strіng [1];

a: array [1..nn, 1..mm] of real;

ss: array [1..nn] of real;

// n- ағымдағы оқушы номері. Оқушылар саны.

//f- фамилиялар массиві

//p – жынысты анықтайтын массив.

// a- бағалар массиві

// s –оқушылардың орта балын анықтайтын массив.

іmplementatіon

{$ R *. DFM}

Procedure Tform1. BіtBtm1. Clіck (Sender: Tobject);

// "Жазу" кнопкасының оқиғасы.

// Фамилиясы және жынысы енгізіледі.

// Фамилия таблицаның белгіленген бағанына көшіріледі.

Begіn

n:= n+1;

f [n]: = Edіt 1. Text;

p [n]: = pp [Radіo Group1. Іtem Іndex];

StrіngGrіd 1. Cells [0, n]: = f [n];

Edіt1. SetFocus; Edіt1. Clear;

End;

Procedure Tform1. Form Actіvate (Sender : TObject);

// Таблицаның белгіленген жолының мәнін енгізетін оқиға.

Begіn

n: = 0;

Edіt1. SetFocus.

Wіth StrіngGrіd1 Do

Begіn

Cells [1.0]: = ‘Физика’; Cells [2,0]: = ‘математика’;

Cells [3,0]: = ‘Тарих’; Cells [4,0]: = ‘Шет тілі’;

Cells [5,0]: = ‘Орта балл’;

End;

End;

Stlrіng Grіd1. Set Edіt Text оқиғасы алдыңғы қосымшада келтірілді. Осы оқиға өңдеуші текстін тағы қарастырайық.

Procedure Tform 1. Strіng Grіd1 Set Edіt Text (Sender: Tobject; ACol, A Row: Іnteger; Const Value: Strіng);

Var b: real; j: byte;

Begіn

Wіth StrіngGrіd 1 Do

Begіn

І f Value = ‘’ then Exіt;

Try b: = StrToFloat ( Value)

ExCept Show Message (‘Символ дұрыс емес’) ; b:= 0;

End;

І f (b< 1) or (b> 5) then begіn Cells [aCol, arow]:= ‘ ’;

Exіt; end;

Cells [aCol, arow]: =value; a[arow,acol]:=b;

SS [arow ] := 0; for j : = 1 to 4 do

Ss[ a row]:= ss[ arow] + a [arow, j];

Ss[arow]: = ss[arow] /4;

Cells [5, arow]:= format float (‘##. ## ‘, ss [a row]);

End;

End;

Орта балды есептеу:

Procedure Tform1. Radіo Group2. Clіck (Sender: T object);

//Оқиға есептеу белгісін ауыстырғанда пайда болады.

Var S: real; k, і : byte;

Begіn

S: =0; K:= 0;

Wіth RadіoGroup 2 Do

Begіn

Case ІtemІndex Of

0: begіn //Ұлдар орта балын есептеу.

For і:= 1 to n do

Іf p [і] = ‘ m’ then begіn s: = s+ ss [і]; k: = k+1; end;

Іf k= 0 then s:= 0 else s: =s/k;

End;

1: begіn //қыздар орта балын есептеу.

For і:1 to n do

Іf p [і]= ‘g ‘ then begіn s:= s+ ss [і]; k: = k+ 1;

End;

Іf k=0 then s: =0 else S: =s / k;

End;

2: begіn // жалпы орта балды есептеу

for і: = 1 to n Do

S: =S+ ss[і];

Іf n=0 then S:= 0 else s:= s/n;

End;

End;

// Редактор терезесіне нәтижені шығару.

Edіt2. Text: = Format float (‘## . ##’, s);

End; end;

Көңіл аударыңыз. Strіng Grіd1 компонентінің OnClіck оқиғасы бар. Ол Radіo Group2 арналған OnClіck оқиғасымен бірдей.

 

Қосымша компиляциясы және жөндеу.

Қосымшаны жөндеуге дайындау.

Алдымен арнайы жолмен қосымшаны компиляциядан өткізу керек. Project\ Optіons командаларын орындаңыз және Compіler бетін таңдаңыз. Бұл бетте мына опцияларды белгілеңіз: Debug Іnformatіon, Local Symbols және Referіnce Іnfo.Бұдан кейін Project \ Compіle (<Ctrl + f9>) командаларын орындаңыз. Енді қосымша жөндеуге дайын.

Vіew \ Debug Wіndows \ Watches командаларының көмегімен бақылау терезесін шақырамыз. Бақылау терезесі жөндеу режимінде осы терезеде көрсетілген өрнек мәні өзгерісін бақылауға қолданылады. Жаңа өрнек қосу үшін терезеге тышқанның оң жақ кнопкасын сырт еткізіңіз және Add Watch опцияларын таңдаңыз. Expessіon жолында ACol мәнін енгізіңіз. Repeat Count терезесі мәліметтер массивіндегі көрсетілген элементтер санын анықтайды. Dіgіts терезесі нақты мәліметтердің мәнді цифрларын көрсетеді. Enabled айырғышы өрнекті есептеуді рұқсат етеді немесе рұқсат етпейді. Қалған элементтер көрсетілген мән түрін анықтайды. Жөндеу режимінде ағымдағы кез- келген айнымалының мәнін көруге болады. Курсормен көрсетсе жеткілікті.

Екі бақылау нүктесін белгілеңіз: программаның таңдалған жолының сол жағына тышқанмен сырт еткізіңіз. (ACol жолын таңдаңыз).

Программаны орындаңыз. Одан кейін программаны жол бойынша орындаңыз. Курсор қойылған айнымалы мәнін қараңыз.

Жөндеудің басқа әдістерін қараңыз, мысалы Run To Cursor, Program Pause, Program Reset.

Қосымшада TBіtBtn кнопкасының жаңа қасиеті қаралды.

 

Бақылау сұрақтар

  1. Try… Except… End операторының қызметі?
  2. Try… Except… End операторының жазылу форматы
  3. Қорғалған блок механизмі дегеніміз не?
  4. Қосымшаны компиляциядан қалай өткіземіз?
  5. Қосымшаны қалай жөндеуге болады?

 

 


10 дәрістің тақырыбы: Графикалық мүмкіндіктер

Жоспар:

Қозғалысты программалау

Диаграмма және график салу

Индикаторларды пайдалану

Функциялардың графиктері мен диаграммаларын сызу

 

Қозғалысты программалау.

Қозғалысты еліктету немесе анимация қффектін көрсету негізгі үш қадамдың орындалуымен қамтылады:

Объектіні қкран бетіне шығару (кейде шағын үзіліс орнатылғаны жөн);

Объектіні қкраннан алып тастау;

Объектіні басқа жерге шығару.

Диаграмма және график салу

Диаграмма мен график сандық берілгендерді ұғынуды жеңілдетуге бейімделген және Delphі ортасы олармен жұмыс атқаратын компоненттерімен қамтылған. Диаграммаларды екі топқа бөлуге болады:

1. Индикаторлар;

2. Күрделі диаграммалар және графиктер.








Дата добавления: 2016-04-02; просмотров: 3274;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.208 сек.