ОҚУ-Әдістемелік материалдар семей 2012. мазмұны



жүктеу 3.35 Mb.
бет7/16
Дата09.06.2016
өлшемі3.35 Mb.
1   2   3   4   5   6   7   8   9   10   ...   16

InputMask жолына #99999999;1; енгізіңіз. Character for Blanks терезесіне “-” (пробелді) бос орынды көрсетіп, ОК батырмасымен терезені жабыңыз. Құрылған маска компонентке пайдаланушының енгізген мәндерінің автоматты түрде бақылануын талап етеді және қосу (+) немесе алу (-) белгілері мен бірінші орындағы («#»)маска элементі және цифрлардан басқа белгілерді қабылдамайды.

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



Procedure TfmExample.BbResultClick(Sender:Tobject);

//екінші операнданы енгізуді өңдеу



Begin

//Edinput жолындағы мәтінді бүтін санға түрлендіреміз;

Y:=STRTOInt(Trim(edinput.text));

//memo-ға 2-операнданы енгізу туралы хабарлаймыз ;

mmOutput.Lines.Add(‘2-операнда:’ edinput.Text);

//нәтижені есептен шығарамыз;

mmOutput.Lines.Add(‘нәтиже’+IntTostr(x)+’*’+IntToStr(y)+’=

’Inttostr(x*y));

Edinput.Text:=’’;//енгізу жолын тазалаймыз;

Edinput.setfocus;//енгізу фокусын береміз;

Lboutput.caption:=’1-операнданы енгізіңіз:’;

BbresultHide; //Bbresult батырмасын жасырып қоямыз;

Bbrun.show //Bbrun батырмасы экранда көрініп тұрады;

End;

Bbrun батырмасының оқиға өңдеушісін енгізу үшін Объектілер Инспекторы терезесінің жоғарғы бөлігінен іздеп тауып (ол BbResult батырмасымен толық жабылған болатын), Events бетінің OnClick жолының оң жақ бағанын екі рет белгілеу қажет. Одан кейін төмендегідей мәтін енгізіледі:
Procedure TfmExample.BbRunClick(Sender:Tobject);

//1-операнданы енгізуді өңдеу



Begin

//Edinput жолындағы мәтінді бүтін санға түрлендіреміз;

x:=strtoint(Trim(edinput.text));

//memo-ға 1-операнданы енгізу туралы хабарлаймыз ;

mmOutput.Lines.Add(‘1-операнда:’ +edinput.Text);

//нәтижені есептен шығарамыз;

Edinput.Text:=’’;//енгізу жолын тазалаймыз;

Edinput.setfocus;//енгізу фокусын береміз;

Lboutput.caption:=’2-операнданы енгізіңіз:’;

Bbresultshow; //Bbresult батырмасын көрсетеміз;

Bbrun.hide //Bbrun батырмасын жасырып қоямыз

End;
Енді программаны жүргізер алдында компонентіне енгізу фокусын беріп, х,у айнымалыларын сақтайтын операндаларды анықтау ғана қалды. Программа коды терезесінің басынан TfmExample класының сипатталуын іздеп, оған төмендегідей түзетулер енгізу қажет:

Private

{Private declarations}

x,y:integer;


Объектілер инспекторы терезесінде тізімді таңдаудың көмегімен TfmExample формасын таңдап, Events бетінен OnActivate жолын тышқанмен екі рет белгілеу арқылы төмендегідей оқиғаны өңдеуші процедураны енгіземіз:

Procedure TfmExample.formActivate(Sender:Tobject);

//жұмыс басына дайындық;



Begin

Edinput.SetFocus; //Edinput редакторына енгізу фокусын береміз;

LBOutput.caption:=’1-операнданы енгізіңіз’;

End;

Программаға түсініктеме

Private


{Private declarations}

x,y:integer;


жолының көмегімен, біз TfmExample класындағы х,у бүтін айнымалыларын анықтадық, осы анықтаудан кейін олар осы кластың кез келген әдісімен, оның ішінде OnClick оқиғаны өңдеушімен де пайдалануға мүмкіндік болды. Мұндай текті айнымалылар бір-бірімен өзара әрекеттесу әдісін жеңілдетеді (оларды кластың өрістері деп атайды). Біздің жағдайда, 1-операнда х айнымалысы бір әдіспен енгізіліп (BbrunClick), (BbresultClick) әдісіне пайдаланылады.

Екі OnClick оқиғаны өңдеушінің де операторлары бірдей. Олардың әрқайсысының басына меншіктеу операторы, ал оң жағында.

Strtoint(Trim(edinput.Text))өрнегі бар.

Бұл өрнек стандартты Object Pascal үшін төмендегі функцияны шақырудан тұрады: алдымен, Trim функциясы шақырылады, ол жолға аргумент береді (біздің жағдайда edinput.text), оң жағынан да, сол жағынан да бос орын қалдырмайды. Одан кейін Strtoint функциясының көмегімен символдар жолын бүтін санға айналады.



Strtoint түрлендіру функциясы символдық берілгендерді бүтін санға айналдыруда кететін қателерге өте сезімтал. Біздің жағдайда мүмкін болатын қателер Maskedit редакторы мен Trim функциясы арқылы жойылады. Егер Bbrun немесе Bbresult батырмаларын басқанда, редакторда мәтін болмаса, программа жұмысы ақаумен аяқталады. Мұндай жағдайды болдырмас үшін Strtoint функциясының алдына

If edinput.Text=’’then exit;

Жолын енгізу қажет. Бұл оператор edinput компонентінің енгізу терезесінде мәтін болмаса, өндеушінің жұмысын аяқтайды.
Ұсынылатын әдебиеттер: [1-9]
Бекіту сұрақтары:


  1. Форма бетіне орналасатын компоненттердің қасиеттеріне сипаттама беріңдер.

  2. Caption қасиетінің қызметі қандай?

  3. Name қасиеті нені сипаттайды?

  4. Форманың өлшемдері қалай тағайындалады?

  5. Memo көп жолдық редакторын іске қосу қалай жүзеге асырылады?

  6. Программаны орындауды жүзеге асыру үшін қандай компоненттерді пайдалануға болады?

  7. Формалар архивке қалай тасымалданады?

  8. Жоба дегеніміз не және оның құрылымы қандай?

Жобаның әрбір бөліміне сипаттама беріңіз.

  1. Қызметші сөздер дегеніміз не?

  2. Модуль дегеніміз не және оның құрылымы қандай?

  3. Интерфейсті хабарлау қандай сөзден басталады және онда не жазылады?

  4. Орындау секциясы қандай сөзден басталады және қызметі қандай?

  5. Object Pascal тіліндегі типтер дегеніміз не?

  6. Класс, ұрпақ, аталық-класс ұғымдары нені сипаттайды?

  7. Программа элементтері дегеніміз не?

  8. Программа элементтеріне нелер жатады және әрқайсысына сипаттама беріңіз.

  9. Идентификаторлар дегеніміз не?

  10. Қосалқы программалар дегеніміз не және қандай қызмет атқарады?

  11. Object Pascal тіліндегі типтердің атқаратын қызметі қандай?

  12. Жолдық тип дегеніміз не және оларға қандай операциялар қолданылады?

  13. Жолды бүтін санға және керсінше түрлендіретін функция қалай аталады? Жазылу форматы қандай?

  14. Келтірілген мысалда MaskEdit компоненті не үшін пайдаланып отыр?

Зертханалық жұмыс №5

Тақырыбы: Тілдің операторлары
Мақсаты Delphi ортасының жұмысына жалпы сипаттама
Қолданылатын материалдар мен құрал- жабдықтар:

Компьютер, Delphi программалау ортасы
Теориялық түсініктеме:

Құрама және бос оператор

Құрама оператор дегеніміз- бұл begin … end қызметші сөздерінің арасына орналасқан программа операторларының тізбегі. Құрама операторлар Object Pascal- дың маңызды инструменті болып табылады, өйткені, құрылымдық программалаудың қазіргі технологиясы бойынша программа жазуға мүмкіндік береді.



Begin

.



begin

.



begin



end;



end;



end;



тұтасымен алғанда, begin … end сөздерінің арасына орналасқан барлық операторлар бөлімі бос операторды береді.

Ал бос оператор ешқандай әрекет атқармайды, тек программа жолына «;» белгісі қойылады.



Шартты оператор

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

Шартты оператордың құрылымы төмендегідей:

If <шарт > Then <1-оператор> else <2-оператор>;

Мұнадғы If, Then, else- қызметші сөздер.

<шарт >- логикалық типті қандай да бір өрнек;

<1-оператор> және <2-оператор>- Object Pascal- дың кез келген операторлары.

Шартты оператордың орындалу алгоритмі төмендегідей. Алдымен, <шарт> шартты өрнек тексеріледі. Егер нәтиже true (ақиқат) болса, онда <1-оператор> орындалады да,<2-оператор > орындалмайды; егер нәтиже false (жалған) болса, онда керісінше <1-оператор> орындалмай,<2-оператор > орындалады. Мысалы,

Var

x, y, max :integer;



begin

If x>max then



y:=x;

else y:=max;

End;
Бұл фрагменттің орындалуы барысында Х айнымаласының мәні max-нан үлкен болса, онда У айнымалысына Х айнымалысын меншіктейді, кері жағдайда У айнымалысына max меншіктеледі.



Мүмкін болатын ақиқат немесе жалған екі мәннің біріне ие болатын өрнек шартты өрнек деп аталады. Мұндай өрнек айнымалыларды салыстыру операцияларының көмегімен жазылады: <, <= ,> ,>= , <>. Күрделі логикалық өрнектер and, or, not логикалық операцияларының көмегімен алынады.

Мысалы, if (a>b) and (b<>0) then …



Қайталау операторлары

Object Pascal тілінде қайталанатын программалар фрагментін программалауға мүмкіндік беретін үш оператор бар.

For параметрі қайталау командасы, оның құрылымы:

For < қайталау параметрі>:= <Бастапқы мән> to <соңғы мән> do <оператор>;

Мұндағы for, to, do қызметші сөздер (үшін, дейін, орында); <қайталау параметрі> -integer типті айнымалы; <бастапқы мән> және <соңғы мән>- бүтін типті айнымалылар.

<оператор>- Object Pascal-дың кез келген операторы.

Операторлың орындалуы: алдымен <бастапқы мән> өрнегі есептеліп, <қайталау параметрі>:=<бастапқы мән> меншіктелінуі орындалады.Одан кейін төмендегі опреациялар қайталанады:



  • <қайталау параметрі><= <соңғы мән> шарты тексеріледі;

  • шарт сақталмаса for операторының жұмысы аяқталады;

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

  • қайталау параметрінің мәні бірге артып отырады.

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

Әзір қайталану командасы While

Бұл оператордың жазылу форматы:



While <шарт> do < оператор>;

мұндағы While, do қызметші сөздер(әзір [шарт орындалатын болса], орында); <шарт>- логикалық типті өрнек; <оператор>- Object Pascal тілінің кез келген операторы.



Егер <шарт> өрнегінің мәні true болса, онда <шарт> өрнегі есептелгеннен кейін <оператор> орындалады да, тексеру қайталана береді. Егер <шарттың> мәні жалған болса ( false), онда while операторы жұмысын тоқтатады.

Таңдау операторы

Таңдау операторы бірнеше әрекеттің ішінен таңдауға мүмкіндік береді. Таңдау жүргізілетін параметр ретіндегі өрнек үшін кез келген реттелген тип алынады (реттелген типке- integer, char, логикалық типтер жатады).

Таңдау операторының құрылымы төмендегідей:

Case <өрнек> of

< таңдау тізімі> [else <операторлар>]

end;

Мұндағы case, of, else, end -қызметші сөздер (жағдай, одан, әйтпесе, соңы); < таңдау тізімі> - бір немесе бірнеше төмендегідей құрылым:



< таңдау тұрақтысы>: <оператор>;

<оператор>- Object Pascal тілінің кез келген операторы. Таңдау операторының орындалуы төмендегідей.

Алдымен өрнек есептеледі, одан кейін таңдау тізімінен есептелген өрнектің мәніне тең тұрақты ізделінеді. Табылған тұрақтыға сәйкес оператор орындалып, таңдау командасы өзінің жұмысын аяқтайды. Егер таңдау тізімінен есептелген өрнектің мәніне тең тұрақты табылмаса, онда программаны басқару else операторынан кейін тұрған операторға береді. Кейде else <операторлар> бөлігін жабуға да болады.

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

Мысалы,


ch:char;

begin


...

case ch of

'n', 'N','н' ,'Н':=LbOutput.Caption:='Жоқ';

'y', 'Y', 'д', 'Д':=LbOutput.Caption:='Иә';

end;

Белгі және көшу операторы



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

Көшу операторының жазылу форматы төмендегідей:

Goto <белгі>;

Мұндағы Goto-қызметші сөз (белгіге көшу); <белгі>- белгі. Object Pascal тіліндегі белгі- бұл программаның қандай да бір операторын белгілеуге мүмкіндік беретін, еркін алынған идентификатор. Белгі белгіленетін оператордың алдына орналасады, белгіден кейін қос нүкте (:) қойылады. Операторды бірнеше белгімен көрметуге болады, бұл жағдайда олар бір-бірінен қос нүкте арқылы ажыратылады. Программада белгіні пайдаланудан бұрын оны сипаттау бөлімінде бейнелеп жазу қажет. Белгіні сипаттау үшін Label қызметші сөзі пайдаланылады.

Мысалы,



Label



Bel,lb1,lb2;

Begin



………

Goto lb1;

………..

Bel:……….


……………

Lb1:lb2:………….

Goto lb2;

………….


End;
Goto операторының қызметші программадағы басқаруды сәйкес белгіленген операторға беру болып табылады.

Белгіні пайдалануда төмендегідей ережелерді басшылыққа алу қажет:



  • Goto сілтеме жасайтын белгі бейнелеу бөлімінде сипатталуы және ол программа денесінде міндетті түрде кездесуі тиіс;

  • Қосалқы программада сипатталған белгі сонда жергілікетенеді, сондықтан қосалқы программаның сыртынан оның ішіндегі белгіге жасалған сілтеме орындалмайды.


ТАПСЫРМА:

Тапсырма №1. Үш санның үлкенін табатын программа құру.

Тапсырма №2.. «Тексеру» оқу программасы

Бұл мысалда, «санды тап» ойынында программа кездейсоқ түрде 0...1000 аралығынан бүтін санды таңдап, есіне сақтайды. Пайдаланушы оны табуға тырысып, өзінің санын енгізеді. Енгізілген санды есте сақталған санмен салыстырып, программа компьютердің кездейсоқ таңдап, есіне сақтаған санының пайдаланушы енгізген санынан үлкен, кіші немесе тең екенін хабарлайды. Компьютердің таңдаған кездейсоқ саны табылғанша программада сан енгізу жалғастырылады.



Тапсырма №3

«Қосындыны табу» оқу программасы.

For операторының қолданылуын көрсету үшін кез келген бүтін N санын енгізіп, 1-ден N санына дейінгі барлық бүтін сандардың қосындысын есептейтін программа құр.



Тапсырма №4

EPSILON оқу программасы

Программа «машиналық элипсон» деп аталатын ең кіші, нөлге тең емес нақты санды іздейді, оған 1,0 санын қосқаннан кейін 1,0 -деп басқа нәтиже береді. Object Pascal тілінде бөлшек сандарды түрлендіріп сақтау үшін нақты типтер пайдаланылады. Ұсынылып отырған оқу программасында осы типтердің бірі -real пайдаланылады, ал аралас 8 байт орын алатын 10 -324-нен10+308 аралығында 15..,16 мәнді цифр дәлдігімен бөлшек сандарды береді.

Тапсырма №5

Calculator оқу программасы.



Тапсырма №6

Нұсқау бойынша таңдау.

Бұл мысалда inputBox функциясы арқылы енгізілген мән бойынша таңдау жүргізіледі

ТАПСЫРМАНЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР:

Тапсырма №1

Ол үшін формаға төмендегідей компоненттерді орналастырамыз.




Компоненттер:

Объектілер инспекторы терезесіне енгізілетін өзгертулер:

Label1:Tlabel;

Caption: X=

Font: шрифті және түсті таңдау



Label2:Tlabel;

Caption: Y=

Font: шрифті және түсті таңдау



Label3:Tlabel;

Caption: Z=

Font: шрифті және түсті таңдау



Edit1:Tedit;

Text:бос қалдыру

Edit2:Tedit;

Text:бос қалдыру

Edit3:Tedit;

Text:бос қалдыру

Button1:Tbutton;

Caption:RUN

Memo1:Tmemo

Lines: бос қалдыру

Button1 батырмасын жылдам екі рет басу арқылы программалар коды терезесіне өтіп, type бөлігінде төмендегі жазулардың бар екеніне көз жеткіземіз:

type

TForm=class (TForm)



Edit1:Tedit;

Edit2:Tedit;

Button1:TButton;

Label1:TLabel;

Label2:TLabel;

Label3:TLabel;

Edit3:TEdit;

Memo1:TMemo;

Procedure TForm1.Button1Click(Sender:TObject);

....


4.10-сурет. УСУ табуға арналған форма терезесі


Сонымен қатар, Button1Click процедурасына төмендегідей өзгерістер енгіземіз:

Procedure TForm1.Button1Click(Sender:TObject);

var x, y, z, max:integer;

begin


edit1.setfocus;

x:=strtoint (edit1.text);

y:=strtoint (edit2.text);

z:=strtoint (edit3.text);

memo1.Clear;

if x>y then max:=x else max:=y;

if z>max then max:=z else max:=max;

memo1.Lines.Add(inttostr(max));

end;

Программаның орындалу нәтижесі 4.10-суретте келтірілген.


Тапсырма №2

Пайдаланушы тек сан енгізетіндіктен fmexample формасына өзгеріс енгізейік: типі Tedit болатын edіnput кмопонентінің орнына формаға TmaskEdit компонентін орналастырайық. File/ New/ Application командаларын орындап, формаға Additional бетіндегі MaskEdit компонентін орналастырамыз, оны edіnput деп атап (Name қасиетін), оның Editmask қасиетіне 0999;1; жолын орналстырамыз.

FmExample класының Private бөліміне X бүтін санын хабарлаймыз:

Private



{Private declaration}

X:integer;

fmExample формасының OnActivate өңдеушісіне төмендегідей мәтінді енгіземіз:

Procedure TfmExample.FormActive(Sender:TObject);

Begin

X:=Random (1001);// Кездейсоқ санды шығарамыз

Edinput.SetFocus;//Edinput жолына енгізу фокусын береміз;

Caption:=’0…1000 аралығынан бүтін санды таңдап’;

Lboutput.Caption:=’Сан енгіземіз’;

End;

Bbrun батырмасының Onclick оқиға өңдеушісіне төмендегідей мәтінді енгіземіз:



Procedure TfmExample.BbrunClick(Sender:TObject);

Var

Y:=integer;



Begin

if edinput.text=’ ‘then Exit; // егер енгізілетін сан мәтін болмаса жұмысты

тоқтатамыз;

// енгізілгенді санға түрлендіреміз;

Y:=StrToInt(Trim(Edinput.Text));

Edinput.Text:=’’; //енгізу жолын тазалаймыз;

Edinput.SetFocus; // енгізу фокусын тазалаймыз.

{Tag=0 параметрі санды табуды көрсетеді, әйтпесе сұраққа жауап беріледі: санды тапқаннан кейін пайдаланушының ойнау немесе ойнамауын білдіреді}

If Tag=0 then

If x

mmOutput.Lines.Add(‘x<’+IntToStr(y))

else if x>y then

mmOutput.Lines.Add(‘x>’+IntToStr(y))

else // x=y

begin

mmOutput.Lines.Add(‘x=’+IntToStr(y))

MessageBeep(MB Ok); // Дыбыс шығару;

LBOutput.Caption:= ‘Сіз таптыңыз, егер ойыңыз келсе 1 санын енгізіңіз:’;

Tag:=1; // келесі сұраққа жауапты енгізу;

End



Else //жауапты талдау

If y=1 then



Begin x:=random(1001); //жаңа сан;

LbOutput.Caption:= ‘сан енгіз’;

Tag:=0; // келесі енгізілетін санды табу.

Edinput.SetFocus



End else close;

end;

Программаға түсіеіктеме

FormActivate өңдеушісінің программа терезесін екпінді жасағаннан кейін,

X:=Random(1001);

Операторының көмегімен 0 мен 1001 аралығынан алынған бүтін кездейсоқ санды өріске орналастырады.

Delphi-дің әрбір компонентінің бүтін санды Tag қасиеті бар, оны программист ыңғайына қарай пайдаланады. FmExample формасының бұл қасиетін программа BbRun батырмасының OnClick оқиға өңдеушісінің алгоритмін екі вариантқа бөлу үшін пайдаланады: пайдаланушы санды табады (Tag=0) немесе келесі жолы ойнауы туралы жауап береді (Tag=1). FmExample объектісінің FmExample класының экземплярын құру мезетінде оның барлық өрістерінің мәні нольге теңестіріледі.



begin

MmOutput.Lines.Add('x='+IntToStr(Y));

МеssageBeer(MB OK);// Дыбыс шығару

LbOutput.Caption:='Сіз таптыңыз,егер ойнағыңыз келсе 1 санын енгізіңіз:';

Tag:=1; //Келесі сұраққа жауап енгізу

end

Сөйтіп, Tag:=1 мәнін қабылдайды.

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

Егер пайдаланушы 1-ден басқа сан енгізсе FmExample формасының close әдісіне оралып, программа жұмысын тоқтатады.



Тапсырма №3

Жаңа қосымша үшін BbRunClick оқиға өңдеушісін құрайық, ол үшін File/ New/ Application командаларын орындаймыз.


Procedure TfmExample.BbrunClick(Sender:TObject);

var i,N, Sum :integer;

begin

Try // Дұрыстығын қадағалай отырып, енгізуді ұйымдастырамыз.



N:=StrToInt(edinput.Text);

Except//егер қате болса, төмендегі операторлар орындалады

ShowMessage ('бүтін санды енгізуде қате бар');

Edinput.SelectAll; // Қатесі бар жолды ерекшелейміз.

Exit;// өңдеушінің жұмысын аяқтаймыз

End;


Edinput.Text:='';

Edinput.SetFocus;

Sum:=0; // қосындының бастапқы мәні

For i:=1 to N do// қосындыны есептеу

Sum:=Sum+i;

MmOutput.Lines.Add('Барлық бүтін сандар қосындысы' +' 1...' +IntToStr(N) + 'аралығындағы сандар тең болады:'+ IntToStr(Sum));

End;

Программаға түсініктеме

Алдымен төмендегі операторларға назар аударыңыз:

Try // Дұрыстығын қадағалай отырып, енгізуді ұйымдастырамыз.

N:=StrToInt(edinput.Text);

Except//егер қате болса, төмендегі операторлар орындалады

ShowMessage ('бүтін санды енгізуде қате бар');

Edinput.SelectAll; // Қатесі бар жолды ерекшелейміз.

Exit;// өңдеушінің жұмысын аяқтаймыз

End;

Try (Сынау), Except (шығарып тастау) және End қызметші сөздерінің көмегімен программаның қорғалған бөлігі орындалады. Осындай қорғаныс қою арқылы программист программа жұмысын бұзылудан қорғайды. Алдыңғы программадан айырмашылығы Edinput компонентін өзгертпедік. егер бұл мәтінде бүтін сандардың берілуі дұрыс болмаса, онда төмендегі оператор орындалады:



N:=StrToInt(edinput.Text);

Әдеттегі программада осылай жазылса, ол программаның апатты аяқталуына әкелер еді. Мұндай жағдай болмас үшін, біз ол операторды Try операторынан кейін, Except операторының алдына орналастырдық. Егер қате болса, Except және End аралығындағы барлық операторлар қалдырылып, өңдеуші дұрыс жұмыс істейді. Егер қате табылса, басқару автоматты түрде Except операторынан кейінгі орналасқан операторларға беріліп, өңдеу жұмысы басталады. Алдымен, стандартты ShowMessage процедурасының көмегімен пайдаланушыға қате жөнінде хабарланады, одан кейін Edinput.SelectAll жолының көмегімен Edinput компонентіндегі қате мәтін ерекшеленеді. Одан кейін Exit стандартты процедурасының көмегімен өңдеушінің жұмысын апатты түрде аяқтаймыз(бірақ ол программаның жұмысы емес!).

Төмендегі екі мәселені ескеру қажет. Біріншіден For операторының жұмысын басқаратын шарт <оператор> орындалар алдында тексеріледі, егер шарт сақталмаса For операторындағы қайталанатын оператор бірде бір рет орындалмайды. Цикл қадамы үнемі тұрақты және (+1)-ге тең. Бұл оператордың жазылу түрі төмендегідей:

For <қайталау параметрі>:= to < Xmax> do оператор;

Мұндағы to қызметші сөзін downto қызметші сөзіне ауыстырсақ цикл қадамы (-1)-ге тең болады, ал жазылу түрі төмендегідей болады:

For <қайталау параметрі>:= downto < Xmax> do оператор;

Алдымен мысалды кез келген оң және теріс сандардың қосындысын есептеуге болатындай етіп түрлендіруге болады:

...


Sum:=0;

if N>=0 then

For i:=1 to N do

Sum:=Sum+i

Else

For i:=N to downto -1 do



Sum:=Sum-i;

...


Тапсырма №4

Real — типті сандардың іштей бейнеленуі 1019 -не жуық мүмкін болатын разрядтар комбинациясын беруі мүмкін, оған 8 байт орын бөлінеді. Әрине, бұл өте үлкен сан, бірақ ол шексіз нақты сандар жиынтығымен салыстырылмайды.

Шексіз үздіксіз нақты сандар жиынтығының аппроксимациясы ішкі машиналық бейнелеунудің соңғы жиынтығы, ол машиналық эпсилонның пайда болуына әкеледі.

Жаңа қосымша үшін bbrunClick оқиға өңдеушісін құрайық. Ол үшін File/ New/ Application командаларын орындаймыз.



Procedure TfmExample.BbrunClick(Sender:TObject);

var

Epsilon:Real;



begin

While 1+epsilon/2> 1 do

Epsilon:= Epsilon/2;

LbOutput.Caption:='машиналық эпсилон'= + FloatToStr(Epsilon)



end;

Программаға түсініктеме

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

var

X:integer;

Begin


X:=4/2;// қате! Нақты нәтижені бүтін айнымалыға меншіктеуге болмайды

End;

FloatToStr стандартты функциясы нақты сандар жолдар символына түрлендіреді.

«Дейін» қайталау командасы

Repeat ...Until операторы

«Дейін» қайталану командасының жазылу форматы:

Repeat

<цикл денесі>

Until <шарт>;

Мұндағы Repeat, until қызметші сөздер (қайтала [соған дейін],әзір [шарт орындалғанша]); <цикл денесі>- Object Pascal кез келген операторлар тізбегі; <шарт> логикалық өрнек.

<цикл денесі> операторлар кем дегенде бір рет орындалады, егер <шарт> жалған болса, яғни логикалық өрнек мәні False болса, онда Repeat, until операторы жұмысын тоқтатып, басқаруды келесі операторға береді, кері жағдайда шарт орындалудан қалғанша <цикл денесі> қайталана береді.

begin... end операторлық жақшасына ұқсас, сондықтан until сөзінің алдына нүктелі үтір (;) қою міндет емес.

Циклдан дұрыс шығуды ұйымдастыру үшін цикл шарты цикл денесін құрайтын операторлардың ішінде өзгеріп отыруы тиіс. Төмендегі цикл «табиғи» жолмен ешқашан аяқталмайды.

While do

Begin


...

end;


және

repeat


...

until

for, while, repeat циклдық операторларын басқаруды жеңілдету үшін Object Pascal тілінің құрамына параметрсіз екі процедура енгізілген:

Break- циклдан тікелей шығуды жүзеге асырады; процедураның қызметін басқаруды циклдық оператордан кейінгі операторға беру болып табылады.



Continue- циклдың кезекті қайталануын алдын ала аяқтауды қамтамасыз етеді; басқаруды цикл операторының соңына берумен бара-бар.

Бұл процедуралар шартсыз көшіру GoTo операторын пайдалану қажеттілігінен босатады.



Тапсырма №5

1-тәсіл. Микрокалькулятор жұмысын бейнелейтін программа құрайық. Программаға екі операнда мен математикалық әрекет белгісі енгізіледі, одан кейін нәтиже есептеледі. Операндалар мен белгіні енгізуді жеңілдету үшін оқу программасына екі компонент енгізейік. File/ New/ Application командаларын орындап, Lbinput компонентін Lbinput1 компонентіне алмастырамыз, оның қасиетін Width-121 (Editкомпонентінің стандартты ұзындығы), ал Left қасиетін-64-ке тең етіп алыңыз. Lbinput1 компонентінің қасына Standart бетінен Combobox компонентін орналастырыңыз, оның Name қасиетін:cbSign, Width=41-ге өзгертіңіз. Осы компоненттің items қасиетінің сұхбат терезесін ашып, төрт жолға математикалық амал белгілерін енгізіңіз.



+

-

*

/

Бұдан кейін cbSign компонентінің оң жағына тағы бір Edit компонентін (Standart бетінен) орналастырыңыз, оны edinput2 деп атаңыз. Осы үшін компоненттегі Text -қасиетін тазалау өажет.

BbrunClick оқиға өңдеушісіне төмендегідей мәтін енгізіңіз.


Procedure TfmExample.BbrunClick(Sender:TObject);

var x, y, z:real;

begin

{егер операндалар енгізілмесе және әрекет таңдалмаса жұмысты тоқтатамыз}

If (edinput1.Text=’ ’ ) or (edinput2.Text=’ ’ ) or (cbSing.ItemIndex<0) then Exit;

//1-операнданың енгізілу дұрыстығын тексереміз.

Try// қорғалған блоктың басы

X:=StrToFloat(Trim(edinput1.Text));

Except //қатені өңдеу

ShowMessage(‘Сан қате жазылған:’ + edinput1.Text);

Edinput.SelectAll;

Exit;

End; //қорғалған блоктың соңы

// 2-операнданың енгізілу дұрыстығын тексереміз.

Try// қорғалған блоктың басы

У:=StrToFloat(Trim(edinput2.Text));

Except //қатені өңдеу

ShowMessage(‘Санның жазылуы қате:’ + edinput2.Text);

Edinput.SelectAll;



Exit;

End; //қорғалған блоктың соңы

// Бәрі дұрыс болса, нәтижені есептейміз.

Case cbSing.ItemIndex of

0:1z:=x+y;

1:z:=x-y;

2:z:=x*y;

3:try


Z:=x/y except z:=1.1e+38// нөлге бөлу шексіздік

End; end;

// нәтижені шығарамыз

LBOutput.Caption:=Trim(edinput1.Text)+ ‘’+ cbSing.Items[cbSing,ItemIndex]+ ‘’ + Trim (edinput2.Text)+ ‘=’;

If z>=1.1e+38 then

LbOutput.Caption:= LbOutput.Caption+’шексіз’

Else

LbOutput.Caption:= LbOutput.Caption+FloattoStr(z);



MmOutput.Lines.Add(LbOutput.Caption); //енгізу жолын тазалаймызж

edinput1.Text:=’ ’;

edinput2.Text:=’ ’;

cbSing.ItemIndex:=-1;

end;

2-тәсіл. Арифметикалық амалдарды толық орындайтын қарапайым калькулятордың моделін төмендегі программа бейнелейді:



Type

TForm1=class(TForm)

Edit1:Tedit;

RadioButton1:TRadioButton;

Edit2:Tedit;

RadioButton2:TRadioButton;

RadioButton3:TRadioButton;

RadioButton4:TRadioButton;

RadioButton5:TRadioButton;

RadioButton6:TRadioButton;

Button1:TButton;

BitBtn1:TBitBtn;

Panel1:TPanel;

Label1:TLabel;

Memo1:TMemo;

Procedure Button1Click (Sender:TObject);

….

Procedure TForm1.Button1Click (Sender:TObject);



Var x, y, z:real; k,p:integer;

Begin


edit1.SetFocus;

x:=strToFloat(edit1.Text);

y:= strToFloat(edit2.Text);

if radioButton1.Checked then z:=x+y;

if radioButton2.Checked then z:=x*y;

if radioButton3.Checked then z:=x-y;

if radioButton4.Checked then z:=x/y;

k:=strToInt(edit1.Text);

p:=strToInt(edit2.Text);

if radioButton5.Checked then z:=k mod p;

if radioButton6.Checked then z:=k div p;

Label1.Caption:=FloatToStr(z,ffgeneral, 3, 2);

Memo1.clear;

Memo1.LinesAdd(FloatToStrF(z,ffgeneral, 3, 2));

End;

End;
Программаның орындалу нәтижесі 4.11- суретте бейнеленген.




4.11-сурет. Калькулятор.

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

inputBox («терезе тақырыбы», «нұсқау: енгізілетін мәндер»,)

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

Тапсырма №6

Программа мәтіні төмендегідей:

Procedure TForm1.Button1Click (Sender:TObject);

Var n:integer; n1:string;

Begin

Label1.Caption:=’1.Әзір қайталану командасы’;



Label2.Caption:=’2.Дейін қайталану командасы’;

Label3.Caption:=’3.Параметрлі қайталану командасы’;

n1:= inputBox(‘командалар’, ‘керекті санды енгіз:1,2,3-?’ ‘’);

n:=StrToInt(n1);

case n of

1:label4.Caption:=’While<шарт> do begin … end’;

2:label4.Caption:= ‘Repeat…Until’;

3:label4.Caption:= ‘for i:=1 to n do begin … end’;

end;

end;


end.

Программаның орындалуы нәтижесі 4.12-суретте келтірілген.



4.12-сурет. Нұсқау бойынша таңдау терезесі

Ұсынылатын әдебиеттер: [1-9]
Бекіту сұрақтары:

  1. Құрама оператор дегеніміз не?

  2. Бос оператор деп нені түсінеміз және ол программада қалай белгіленеді?

  3. Шартты оператордың қызметі және жазылу форматы қандай?

  4. Шартты оператор қалай орындалады?

  5. Object Pascal тілінде пайдаланылатын қайталану операторларының түрлері қандай және айырмашылығы неде?

  6. Параметрі қайталану операторының жазылу форматы қандай және қалай орындалады?

  7. Әзір қайталану операторының жазылу форматы қандай және қалай орындалады?

  8. Дейін қайталану операторының жазылу форматы қандай және қалай орындалады?

  9. FloatToStr функциясының қызметі не?

  10. Break,Continur процедурасының қызметі қандай?

  11. Таңдау операторының жазылу форматы және атқаратын қызметі қандай?

  12. Калькулятор программасына түсініктеме беріңіз.

  13. Программада белгі не үшін пайдаланылады?

  14. Көшу қалай жүзеге асырылады?

  15. Берілген нақты х аргументі үшін төмендегі функциялардың мәндерін есептеуге арналған программалар жазыңдар:

а) у=

б) y=


в) y=

16. Көп тармақты алгоритмдерді программалаудың әдістерін пайдаланып, төмендегі функциялардың мәндерін есептеуге прорамма жазыңдар:


  1. y=

  2. y=

Мұндағы

y=

в) y=

17. З-натурал сан болса, ар есептеуге программа құрыңдар.

18.Төмендегі өрнектердің мәндерін табуға программа құрыңдар:

а)

б)

в)

г)

19. Берілген санның барлық бөлгіштерін өсу тәртібімен жазуға программа құрыңдар.

20. Берілген n санның ішіндегі оң және теріс сандардарының қосындысын, қосындылардың абсолют шамасы бойынша үлкенін табыңдар.

21. Трапеция (немесе тік төртбұрыштар) формуласын пайдаланып, мына интегралдардың мәндерін жуықтап есептеуге программа құрыңдар:

а)

б)
Зертханалық жұмыс №6

Тақырыбы: Мәліметтер типі
Мақсаты Delphi ортасының жұмысына жалпы сипаттама
Қолданылатын материалдар мен құрал- жабдықтар:

Компьютер, Delphi программалау ортасы
Теориялық түсініктеме:

Object Pascal тілінде кез келген мәліметтер өзінің типімен сипатталады. Мәліметтер типі объект қабылдай алатын мүмкін мәндер жиынтығын анықтайды. Сонымен қатар, мәліметтер типі дербес комьютердің жадындағы мәліметтердің ішкі берілуі форматын да анықтайды. Object Pascal тілі мәліметтердің тармақталған құрылымымен сипатталады.

Енді барлық типтерге қысқаша сипаттама берейік.

Қарапайым типтер

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

Нақты типтердің де, нақты санның ішкі берілу форматы мен анықталатын мәндерінің мөлшері көрсетіледі. Бірақ нақты типтердің мүмкін мәндерінің мөлшерінің көптігі соншалық, оны олардың әрқайсысын бүтін санмен белгілеу мүмкін емес.

Мерзім және уақыт типі мерзім мен уақытты белгілеуге арналған. Дәлірек айтсақ, оны сақтау үщін нақты формат пайдаланылады.



Реттелген типтер.

Реттелген типке: бүтін, логикалық, символдық, саналатын және аралық тип жактады. Аталған типтердің әрқайсысы х өрнегінің мәнінің реттік номерін беретін ORD(x) функциясын қолдануға болады.

Бүтін типтер үшін ORD(x) функциясы х тің мәнінің өзін береді. ORD (x) функциясын логикалық, символдық және саналатын типтерге қолданып: логикалық тип үшін 0 мен 1 аралығындағы бүтін оң санды, символдық тип үшін 0 мен 255 аралығындағы сандарды, ал саналатын типтер үшін: 0 мен 65535 аралығындағы садарды береді. Аралық тип негізгі реттік типтің барлық қасиеттерін сақтайды, сондықтан оған ORD(x) функциясын қолдану сол типтің қасиетіне тәуелді болады.

Сондай-ақ, реттелген типтерге төмендегідей функцияларды қолдануға болады:

PRED(X)П функциясы реттелген типтің алдынғы мәнін береді, яғни ORD(x-1) –дің реттік номеріне сәйкес мән немесе ORD(Pred(x))= ORD(x)-1;

SUCC(X) функциясы ORD(X)+1-дің реттік номеріне сәйкес келетін реттелген типтің келесі мәнін берді, яғни ORD(Succ(x))= ORD(x)+1.

Мысалы, егер прораммада төмендегшідей айнымалылар анықталған болса,

Var C:Char;

Begin

C:=’5’;


End;

Онда PRED(C) функциясы ‘4’ символын, ал SUCC(C) п функциясы ‘6’ символын береді.

Егер кез келген реттелген типті сандық осьтің қандай да бір кесіндісінен орын алатын солдан оңға қарай өсетін реттелген мәндер жиыны ретінде қарастыратын болсақ, онда PRED(X) функциясы осы кесіндінің сол жақ ұшына дейін, ал SUCC(X) функциясы оң жақ ұшына дейін анықталмаған.

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

Атауы

Ұзындығы (байт)

Мәндер аралығы

Byte

1

0..255

ShortInt

1

-128..+128

SmallInt

2

-32768..+32767

Word

2

0..65535

Integer

4

-2147483648..+2147483647

LongInt

4

-2147483648..+2147483647

Long-Word

4

0..4294967295

Int64

8

-9*1018..9*1018

Cardinal

4

0..2147483647

B, s, w, I, l-әріптерімен сәйкес Byte, ShortInt, Word, Integer, LongInt

типтері белгіленеді; ал vb, vs, vw, vi, vl әріптерімен осы типтердің айнымалы екені көрсетіледі. Квадрат жақшада міндетті емес параметр көрсетіледі.

Бүтін типтерге қолданылатын стандартты процедуралар мен функциялардың типтері төмендегі кестеде келтірілген.



жазылуы

Нәтиже типі

әрекет

Abs(x)

x

х-тің модулін береді

Chr(x)

Char

Кодына сәйкес символды береді

Dec(vx[,i])

-

Vx-тің мәнін i –ге азайтады, ал i болмаса 1-ге азайтады

Inc (vx[,i])

-

Vx-тің мәнінi–ге арттырады, ал i болмаса 1-ге арттырады

Hi(w)

byte

Аргументтің үлкен байтын береді

HI(l)




Есеп бойынша үшінші байтты береді

Lo(i)




Аргументтің кіші байтын береді

Lo(w)




Бұл да сондай

Odd(l)

boolean

Егер тақ сан болса, True мәнін береді

Random(w)




0..( п-1) аралығындағы псевдокездейсоқ санды береді

Sqr(x)




Аргументтің квадратын береді

Swap(i)

integer

Сөздегі байттардың орнын алмастырады

Swap(w)

word

Бұл да сондай


Логикалық типтер. Логикалық типтерге: Boolean, ByteBool, Bool, WordBool және LongBool жатады. Стандартты Паскальда тек Boolean типі анықталған, ал қалған логикалық типтер Windows жүйесімен үйлесетін Object Pascal тілінде енгізілген: Boolean және ByteBool типтерінің әрқайсысы бір байт, Bool және WordBool-2 байт, LongBool-4 байт орын алады. Логикалық типтің мәні ретінде алдын-ала хабарланған False (жалған) немесе True (ақиқат) мәндерінің бірі алынады. Логикалық типтер үшін төмендегі ереже орындалады:

Ord (False)=0;

Ord(True)<>0;

Succ(False)= True;

Pred(True)=False;

Логикалық тип реттелген типке жататын болғандықтан қайталану операторында есептеу үшін пайдалануға болады, мысалы,

Var

L:Boolean;



Begin

For L:=False to True do ..

Delphi 32 жүйесінде Boolean типі үшін алынатын мән Ord(True)=+1, ал Bool WordBool және т.б. типтер үшін Ord(True)= Ord(True)+1, екенін естен шығармау керек. Сондықтан программа құру барысында бұл типтерді пайдаланғанда мұқият болу керек. Мысалы, Delphi –дің 6-нұсқасында төмендегі For қайталануындағы орындалатын оператор ShowMessage(

‘-----‘) бірде бір рет орындалмайды:

Var

L:Bool;


K:integer;

Begin


For L:=False to True do…

ShowMessage(‘____’)

End;

Егер L циклінің параметрінің типін Boolean типіне алмастырса, қайталану орындалып, хабарлама экранда екі рет пайда болады.



Символдық тип. Символдық титің мәні ретінде дербес компьютердегі барлық символдардың жиынтығы алынады. Әрбір символға 0..255 аралығындағы аралығындағы кез келген бүтін сан сәйкес келеді.Бұл сан символдың ішкі берілу коды деп аталады, оны Ord функциясы береді.

Коды 0..31 аралығындағы символдар қызметші кодқа жатады. Егер бұл кодтар программаның символдық мәтінінде кездесетін болса, онда олар бос орын болып есептеледі.

Char типіне қатынас операциялары, сондай-ақ, орнатылған функциялар қолданылады:

Chr(B) типті функция; Byte типті өрнекті символға түрлендіріледі;

Upcase(CH)-char типті функция; егер СН латынның кіші әріпі болса, онда бас әріпті береді, кері жағдайда СН символының өзін береді.

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

Type


Tuster=(ak, kyzul, jasul)
Саналатын тип программаның көрнектілігін арттырады. Егер пргораммада жыл ішіндегі айларға байланысты мәліметтер пайдаланылса, ондай программа үзіндісін былай келтіруге болады.

type Type Month=(jan,feb,mar,apr,may,jun,jul,aug,sep,okt,nov,dec);

Var

Month: TypeMonth;



begin

if month= “тамаша демалыс!”;



end.


Саналатын типтердің мәндері мен олардың реттік нөмірлерінің арасындағы реттілік нөмірі-0, екіншісі-1 және т.с.с.

Саналатын типтердің ең жоғарғы мәні-65536, сондықтан саналатын тип Word бүтін типінің ішкі жиыны тәрізді және мәндері 0,1 және т.б. болатын бүтін тұрақтылар тобы ретінде қарастырылуы мүмкін. Саналатын типке бүтін санды меншіктеуге болмайды.

Кез келген саналатын типтің айнымалысын алдын-ала сипаттамай-ақ хабарлауға болады, мысалы:

Var


Col (black, white, green);

Аралық тип. Аралық тип өзінің базалық типінің ішкі жиыны болып табылады. Базалық тип ретінде аралық типтен басқа кез келген реттелген тип алынады.

Аралық тип барлық типтің өзінің ішкі мәндерінің шекаралары арқылы беріледі:

<ең кіші мән >... <ең үлкен мән >

Мұндағы, <ең кіші мән > - аралық типтің ең кіші мәні;



<ең үлкен мән > - оның ең үлкен мәні.

Мысалы,


Type

digit =’0’..’9’;

dig2 = 48..59;

Аралық типті Type бөлімінде сипаттау міндетті емес, айнымалыларды хабарлауда тікелей көрсетуге болады.Мысалы:

Var

date: 1..31



month: 1..12

ichr: ’A’..’Z’;

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


  • “..” екі символ бір символ ретінде қарастырылады, сондықтан олардың арасына бос орын қалдыруға болмайды;

  • Аралықтың сол жақ шегінен аспауы тиіс.

Аралық типке барлық типтің қасиеті тән, бірақ аздаған шектеулері бар.

Мысалы, егер айнымалы анықталған болса,

type

days= (mo, tu, we, th, fr, sa, su);



weekend;

begin


w: = sa;


end.


онда Ord(w) функциясы 5 мәнін береді, ал Pred(w) функциясы қате жөнінде хабарлайды.

Object Pascal –дың стандартты кітапханасында аралық типтердің жұмысын сүйемелдейтін екі функция бар:

Hight (x) – х айнымалысы жататын аралық типтің ең үлкен мәнін береді;

Low (x)-аралық типтің ең кіші мәнін береді.


1   2   3   4   5   6   7   8   9   10   ...   16


©dereksiz.org 2016
әкімшілігінің қараңыз

    Басты бет