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



бет22/35
Дата25.08.2017
өлшемі8,61 Mb.
#27256
1   ...   18   19   20   21   22   23   24   25   ...   35

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- суретте бейнеленген.






Достарыңызбен бөлісу:
1   ...   18   19   20   21   22   23   24   25   ...   35




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

    Басты бет