Студопедия
rus | ua | other

Home Random lecture






OnEZeroDivide do


Date: 2014-02-27; view: 1132.


Except

Begin

Try

Begin

Else

Except

Try

Begin

Begin

Begin

Begin

{енгізу терезесіне массив элементтерін ретімен енгізу}

fork:=1 to4 do

forj:=1 to3 do

a[k,j] :=InputBox(“,’кезекті элемент –‘,”);

{әр болған элементтерін қосындылау}

s[1] :=0, s[2] :=0 s[3] :=0;

forj:=1 to3 do

fork:=1 to4 do

s[j] :=s[j]+StrFloat(a[k,j]);

{жеңімпаз топтың жинаған барлық ұпайы,топ нөмірі}

min:=s[1]; nomer:=1;

forj:=2 to3 do

ifs[j]<min then

min:=s[j]; nomer:=j;

end;

nomerT:=IntToStr(nomer);

min:=min/4;

{нәтиже}

Label1.Color:=’1-орынға шыққаны:’+

NomerT+’-топ’;

Label2.Color:=clWhite;

Label2.Caption:=’Бір студенттің орташа уақыты’

+FloatToStr(min, ffFixed,”);

end;

  1. Проектіні сақтап, іске қосу. Форма көрінеді. Оның Button1 түймесін шерту. Енгізу терезесі көрінеді. Оған элементтерді енгізу.

****

Ескерту. Енгізу терезесіне элементтерді цикл бойынша енгіу үшін әр элемент клавиатурадан енгізілген сайын оның ОК түймесін шерту не КҚ клавишін басу керек.

 

2.14.3. Жол. Жолдық стандартты функциялар.

Мәндік массивті реттеу.

Іс жүзінде бір символдық және жолдық шамалармен жұмыс жиі кездеседі (жолдық және мәтіндік сөздерді баламалы).

Сандық тұрақтылар сияқты, символдық, жолдық шамалардың мәндерін салыстыруға болатын белгілі.Себебі, Windows жүйесінде пайдаланылатын ANSIкодтары кестесінде түрлі символдардың кодтары әртүрлі, мысалы asc(‘A’)=65,asc(‘С’)=67. Екі символдың қайсысының коды жоғары болса, сол символдың рангісі жоғары деп қабылданған (‘A’<’C’).

Мәтіндермен біріктіру және қиып алу амалдарын орындалу мүмкін. Delphi-де жалғастыру операциясы олардың аралығына (+) таңбасын қою арқылы орындалады.

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

Length(a) – aмәтінінің ұзындығын анықтау (length-ұзындық). Функция Integer типті.

Concat (a,b)неa+b – aмен b жолдарын біріктіру.

Copy(a,m,n) – aмәтінінің m –символынан бастапn символын кесіп алу. Функция String типті.

Post(st,a) – aжолынан stүзіндісін іздеп,жолдың басынан есептегенде үзінді басталған орынның нөмірін анықтау (үзінді табылмаса, оны нөлге (0)тең деп нәтижелейді).

Chg(a) – aкоды бойынша символды анықтау. Функция Char типті.

Ord(b) – bсимволының кодын анықтау. Функция Integer типті, т.б. Мысалы:

Length(‘мен’)=3; Copy(‘Ахметұлы’, 3, 5)=

Pos(‘мет’,’Ахметұлы’) =3; Pos(‘раш’,’Мұратбек’) =0.

Chr(65)=’A’; Ord(‘A’)=65.

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

3-мысал. Қазақ әріптерді бойынша төменде жазылған адамдардың аты-жөндерін бірінші әріптері бойынша реттеу керек.

Мәдіхожаев Сұлтан

Ысқақова Дамира

Мұстафаев Қажым

Атчабаров Жәнібек

Оралханова Маржан

1. Жаңа проект ашу;

2. Формаға Panel1, панель үстіне Button1, форманың жоғарғы жағына Memo1 компоненттерін орнату;

3. Компонент қасиеттеріне мәндер меншіктеу:

Компонент Қасиет Мәән
Форма   Panel1   Button1 Memo1 Font Caption Caption Align Name Align ScrollBars WordWrap Times Kaz, 10 Реттеу <бос ету> alBottom OK alCllient ssBoth False

 

4.Button1 түймесінің OnClick оқиғасын өңдеуіш құру;

 

Procedure TForm1.ButtonClick(Sender:TObject);

Const n=5;

vara:array [1...n] of string;

d, k, j :integer;

r : string;

fork:=1 to n do

a[k] :=InputBox(“a[k],’кезекті элемент –‘,”);

r:=’АӘБВГҒДЖЗИЙКҚЛМНҢОӨПРСТУФХ...’;

d:=length(r);

{Цикл ішіндегі цикл. Массивті реттеу}

min:=s[1]; nomer:=1;

forj:=1 to d do

for k:=1 to n do

ifcopy(a[k],1,1)=copy(r,j,1) then

Memo1.Lines.Add(a[k])

end;

 

5.Проектіні сақтап, іске қосу. Форма бетінде енгізу терезесі көрінеді. Оның өрісіне кезекті фамилияны енгізіп, OK түймесін шерту.

 

Реттелген фамилиялар форма терезесінде жазылып қойылады (2.13-сурет).

2.14.4. TStringList класы. Массивті класс қасиетін пайдаланып реттеу.

 

TStringList – жолдармен жұмыс істеуге арналған аталық

TString класының алғагқы туынды класы. TstringList-ті пайдаланып, 2.14.3-тақырыпта берілген мысалдағы сияқты, формада орнатылған TМemo компонентінің терезесіне көп қатарлы жолдар, жолдық массив енгізуге болады және класс қасиетін пайдаланып, оларды автоматты түрде реттеу (сорттау) да мүмкін. Кластың әдістері мен қасиеттері жеткілікті (ол аталық кластың қасиеттерін пайдалана алатыны да белгілі), мысалы,

Берілгендер жиынтығына жол қосу:

Function Add (Const: string) : Integer;

Бұрынғы берілгендер жиынтығын өшіріп, жаңа жиынтық қосу:

Prodcedure Assign (Source: Tpersistent);

Жолдары алфавит бойынша сорттау:

Property Sorted: Boolean;

Жиынтықта жолдардың ағымдық санын анықтау:

Property Count: Integer; т.б.

Мысал. 2.14.3-тақырыптың 3-мысалында берілген адамдарды Sorted қасиеті арқылы аты-жөндері бойынша сорттап, формаға орнатылған Мemo компонентінің терезесіне шығару керек.

1. Жаңа проект ашып, формада Мemo1, Button1 компоненттерін орнату.

2. Button1 түймесін екі рет шертіп, код терезесінде Button1Click продцедурасын құру:

 

Procedure TForm1.ButtonClick(Sender:TObject);

Var st:TstringList;

A: array [1..4] of string; k: byte;

Begin

St:=TstringList.Create; // класс данасын құру

St.Sorted:=True; // сорттау

For k:=1 to 4 do

Begin

A[k]:=InputBox(‘Кезекті мән’,’’,’’);

end;

st.Sorted:=False; // сорттау аяқталған соң оны

// пайдаланбау

Memo1.Lines.Assign(st); // нәтижені шығару

St.Free; // free-өшіру

end;

3. Іске қосу командасын беріп, көрінген форманың Button1 түймесін шерту. Одан әрі, көрінген енгізу терезесіне кезекпенен мысалда берілген тізім элементтерін енгізсе болғаны. Формаға енгізілген Мemo1 компонентінің терезесінде аты-жөні бойынша сортталған массив көрінеді (2.13-суретті қараңыз). (Сорттау программасы TstringList класының Sorted қасиетіне енгізілен.)

 

2.15. Процедура және функция. Рекурсия

Стандартты математикалық функциялар компоненттер панелінің System бетіне жазылып қойылған. Күрделі программаларда басқа қосалқы процедуралар мен функцияларды пайдалану жиі кездеседі. Қажеттілерін Турбо Паскальдағы сияқты негізгі программа ішіне кірістіру қиын емес.

1-мысал. Тіктөртбұрышты үшбұрыштың катеттері белгілі: а=4.5; b=5.2. Процедура және функция енгізілген программалар арқылы оның периметірін табу керек. нәтиже шығару терезесінде көрсетілген.

1. Жаңа проект ашу.

Ішінде Pifagpr атауы берілген қосалқы программа – процедура енгізілген форманың OnClikc оқиғасын өңдеуіш құру:

Procedure TForm1.FormClick (Sender: TObject);

Var a, b, c, p: real;

Procedure PifagPr(a1.b1:real;var c1:real); //қосалқы

Begin //процедура

C1:=sqrt(sqr(a1)+sqr(b1)) //гипотенуза

End;

Begin //негізгі процедура

A:=4.5;b1:=5.2;

PifagPr(a,b,c); p:=a+b+c;

ShowMessage(FloatToStr(p));

End;

2.Программаны сақтап,іске қосу.

Көрінген форманы шерткен кезде шығару терезесінде нәтиже көрінеді.(2.14-сурет).

Piffune

Procedure TForm1.FormClick(Sender:Tobject);

Var:a,b,p:real;

Function Piffunc(a1,b1:real):real; //қосалқы функция

Begin

Piffunc:=sqrt(sqr(a1)+sqr(b1))

End;

Begin //негізгі функция

A:=4.5;b1:=5.2;

P:=a+b+Piffunc(a,b);

ShowMessage(FloatToStr(p));

Х
Pifaqpr11   16,5767724987817
End;

ОК
2.14-сурет. Нәтиже

Кейде программаны рекурсия тәсілін пайдаланып құру да мүмкін (рекурсия-операторының орындалуы кезінде ішкі программаның қайта айналып орындалуы).

2-мысал. n! Мәнін рекурсияны пайдаланып табу керек.(n!=1*2*3*...*n).

Жаңа проект формасының Edit1, Label1, Button1 компанентерін орнатып, Edit1 компанентінің Text және Label1 компанентінің Caption қасиеттерін тазалау; Button1 компjнентінің факториал мәні есептелетін функция енгізілген onClick оқиғасын өңдеуіш құру:

Function fact (k:integer): integer;

Begin

If k>1 then

Fact:=k*fact(k-1)

Else fact:=1

End;

Procedure Tform1.Button1Click(Sender:TObject);

Var n:integer; // факториал мәнін есептейтін сан

Man:integer; // n! мәні

begin

n:=StrToInt(Edit1.Text);

man:=fact(n); // fact – функцияны шақыру

label1.Caption:=IntToStr(man);

end;

Программаны іске қосып және көрінген форманы Edit1 өрісіне 5 санын енгізіп Button1 түймесі шертілгенде Label1 өрісінде 120 саны көрінеді т.с.с.

3-мысал. Формаға Edit1, Button1 компанентерін орнатып, Edit1 өрісіне 4 бүтін санынан тұратын массив енгізу (5, 24, -128, 40) және элементтерді кемімелі түрде реттімен кезекті қатарларға шығатын етіп, шығару терезесінде көрсету керек.

1. Жаңа проект ашып, формаға сәйкес компонентерді орнату;

2. Edit1 компонентінің Text қасиетінің мәнін бос ету Button1 компонентінің Caption қасиетіне ОК мәнін меншіктеу;

3. Button1 түймесін екі шертіп, код терезесінде OnClick оқиғасын өндеуіш дайындамасын орнату. Дайындама ішінде процедура мәтінің енгізу және оның ішіне екі бос орын символдарының аралығына енгізілген ішкі жолды ерекшелейтін GetSubStr атаулы функция енгізу:

Procedure Tform1.ButtonClick (Sender:Tobject);

Const n=4; // массив өлшемі

Var f:array[1..n] of integer;

к: integer; // цикл параметрі

st: string; // үзінді ерекшеленетін жол

Function GeetSubStr(st:string;n1:integer):string;

Var m:integer;

к: integer; //цикл параметрі

begin

for k:=1 to n1-1 do

begin

m:= pos(‘’,st);

st:= copy(st,m+1,length(st)-m);

while (pos(‘’,st)=1) and (length(st)>0) do

delete (st,11); // бос орынды алып тастау

еnd;

m:= pos(‘’,st); // қажетті үзіндінің соңғы нөмірі

if m>0 then

result:=copy(st,1,m-1)

else

result:=st;

end;

begin

st:=’’; // негізгі программа

for k:=1 to n do

st:=st+IntToStr(k)+’ ‘+GetSubStr(Edit1.text,k)+#13;

ShowMessage(st);

еnd;

4. Программаны сақтап, іске қосу командасын беру (F9).Форма көрінеді; Edit1 өрісін шертіп, курсорды орналастыру және араларында бос орындар қалдырып, есепте берілген массив элементерін енгізу (2.15-сурет);

 
 

 

 


****

 

 

2.15-сурет. Edit1 өрісіне енгізілген массив элементері.

 

 

5. ОК түймесін шерту. Шығару терезесінде қатарлары номерленген элементтер кемімелі түрде бір баған бойында көрінеді (2.16-сурет).

ОК түймесі шертілген соң программаға енгізілген функция алдымен 1-ші ішкі жолды (5) ерекшелейді. Программа оны бүтін санға түрлендіріп, шығару терезесінде көрсетеді, т.с.с.

 

****

 

 

Программадағы Edit1.Text, k – нақты параметрлер; Result – стандартты айнымалы. Оған функция беретін нәтиже меншіктеледі.

 

 

2.16. TOLEContainer компоненті. OLE технологиясы.

1.10-тақырыпта компоненттер панелінің System бетінде орналасқан TOLEContainer компонентін пайдалануға мысал келтірілген болатын (OLE – Object Linking and Embedding, объектілерді байланастыру және қолдану). Жалпы, OLE технологиясы офистік қосымшалардан кеңінен пайдаланады. Мысалы, Word мәтіндік редактор терезесіне ClipArt-тан сурет кірістіру үшін Вставка-Рисунок-Картинки (Кірістіру-Сурет-Картинкалар) командасын беру жеткілікті екені белгілі.

OLEContainer (Ole контейнер) компоненті арқылы Delphi-мен байланыстырылатын, автоматты түрде жұмыс істейтін қосымшалар жеткілікті. Мұндай тәсіл OLE автоматтандыруы делінеді. Мысалы, OLE автоматтандыруын пайдаланып, Excel-де мыеадай есепті шешу керек болсын.

 

Есеп. Фирма кеңсесінде 1 кеңсе бастығы, 2 орынбасар, 3 бөлім бастығы, 15 қызметкер, 4 лаборант, 5 тазалаушы қызмет істейді. Алғашқыда қызметкерлерге берілетін айлық жоспары 281750т. болып белгіленген. Алатын айлықтар:

тазалаушы-3500т.,

лаборант-тазалаушыдан 1,5 есе артық,

қызметкерлер - тазалаушыдан 3 есе артық,

бөлім бастықтары - қызметкерлерден 20%-ке артық,

орынбасарлар - тазалаушыдан 4 есе көп,

кеңсе бастығы - орынбасарларға қарағанда 20% көп алады.

Егер фирма айлық жоспарын 300000т. етсе, жоғарғыдағы коэффициентерін өзгертпей, олардың айлығын қалай өзгерту керек?

1. Жаңа проект ашып, формаға OLEContainer компонентін орнату. Оны екі рет қайталап шерту. 1.15-суретте белгіленген Объектіні кірістіру терезесі көрінеді.

2. Терезеден ListMicrosoftExcel қатарын таңдап, Ашу түймесін шерту. Delphi терезесінің үстіне MS Excel терезесінің бірінші беті көшіріліп қойылады.

3. Бетті 3.17-суретте толтырылған ретпен толтыру. Мұндағы

  А В С D E F
Жалақы (түсініктеме) Тазалаушы айлығы Қызмет атауы Айлық Саны Қосындысы
1.D3 1,5D3 3.D3 1.3.D5 4.D3 1,2.D7 Тазалаушы Лаборант Қызметкер Бөлім баст. Орынбасар Бастық =1*В3 =1,5*D3 =3*D3 =1,3*D5 =4*D3 =1,2*D7 =5*D3 =4*D4 =15*D =3*D6 =2*D7 =1*D8
           
        Сумма=  

3.17-сурет.Алғашқы айлық.

F10 ұяшығына қосынды ақшаны (сумманы) енгізу үшін оны таңдап, Excel-дің аспаптар панелі қатарынан түймесін екі рет шерту жеткілікті. Ұяшыққа 281750 саны енгізіліп қойылады.

4. F10 ұяшығын ағымдық етіп, Сервис-Подбор параметра (Сервис-Параметрді іріктеу) командасын беру. Сәйкес сұхбаттық терезе көрінеді (3.18-сурет).

 

 

***-******

 

5. Терезенің Мән өрісіне 300 000 санын, төменгі өріске $B$3 адресін енгізіп, ОК түймесін шерту. Автоматты түрде Айлық кестесі сәйкес түрде өзгертіліп қойылады (3.19-сурет).

  А B C D E F G
Жалақы Тазалаушы айлығы   Айлық Саны Қосындысы  
             
1.D3 3726,71   3726,71 18633,54  
1,5.D3     5590,06 22360,25  
3.D3     11180,12 167701,9  
1,3*D5     14534,16 43602,48  
4*D3     14906,83 29813,66  
1,2*D7     17888,20 17888,2  
             
           

3.19-сурет Автоматты түрде есептелген жаңа айлық.

Ескерту. B, D бағандарына енгізілген сандарды ақшалық форматқа ауыстырып қойыуға болады. Ол үшін B, D бағандарын таңдау; Формат-Ячейка-Число командасын беріп Числовые форматы тізімін ашу керек; тізімінен Денежный қатарын таңдап, Ондық белгілер саны өрісіне 2 санын енгізсе болғаны.

TOLE технологиясын пайдаланып, Delphi арқылы 1.12-суретте көрінген басқа Windows қосымшаларымен де әдеттегідей жұмыс істей беруге болады.

 

 

2.17. Консолдық қосымша

Delphi-де берілгендерді енгізу мен шығару үшін Турбо Паскальда пайдаланылатын read (оқу) және write (жазу) операторларын пайдалану тәсілі де бар. Оларды пайдаланып құрылатын программалар, осы үшін арналған, MS-DOS операциялық жүйесінде жұмыс істейтің консолдық қосымша терезесіне енгізіледі. Қосымшаны іске қосу тәсілі:

1. File-New-Application (Файл-Жаңа қолданба) командасын беру;

2. Көрінген Form1, Unit1.pas терезелерін жабу. Экранда Delphi мен Obgect Inspector терезелері қалады;

3. Progect-View Source (Проект-Көріп шығу) командасын беру. Progect.dpr тақырыпты терезе ашылады;

4. Терезені тазалау және экранды ақ түсті ету (соңғысы үшін терезені таңдау түймесін шертіп, көрсеткіш арқылы экранды таңдап шықса болғаны);

5. Программа теру. ASCII кодтары қолданылатын Турбо Паскаль программасындай жұмыс істейді. Программа мәтіні {$APPTYPE CONSOLE} нұсқауынан басталады (2.20-сурет). Ол консольдық қосымша дайындалатыны жөнінде компилятор нұсқауы. Мысалы,

Program MyProgr;

{$APPTYPE CONSOLE}

Uses

SysUtils;

var x,y:real;

begin

Write(‘x=?’);readln(x);

y:=3*x+5;

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

readln;

end.

 

 

******

 

 

2.20-сурет. Консолдық терезе.Терезеге енгізілген программа.

 

 

6. Проектіні сақтап (мысалы, MyProgr түрінде), іске қосу командасын беру. Сұрақ, нәтиже

енгізілетін MyProgr тақырыпты терезе көрінеді (терезеде орнатылған түймелер арқылы

терезені үлкейту, шрифті таңдау, терезені ақ түсті ету қиын емес). Терезеде көрінген

сұраққа жауап енгізілген соң ҚҚ клавишін басу керек.

Ескерту. Прграммаға енгізілген параметрсіз readln операторы консольдық терезені экранда ұстап тұрады.

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

 

Ескерту. Консольдық программа терезесін экранға шығарудың екнінші тәсілі: File-New командасын беріп, ашылған терзенің Consol Wizard (не Console Aplication) белгішесін таңдау.

 

 

2.18. Программаны дұрыстау. Ерекше жағдайлар

 

Программа құруда семантикалық (мағыналық), синтаксистік және алгоритмдік қателер жиі кездеседі. Программаны компиляциялау кезінде синтаксистік қателерді компилятор өзі табады да, машина жұмысын тоқтатады. Ал, 15 орнына 25 енгізілген сияқты қатені компилятор еске алмай, программаның орындалуы аяқталған кезде қате нәтиже шығарады. Программада қате жазылған оператор сияқты алгоритмдік қате де программаның орындалу нәтижесін дұрыс көрсетпейтіні сөзсіз. Сондықтан программаны құрып болған соң оны мұқият қайта тексеріп шығу керек.

 

Программаның синтаксистік түрде жазылу дұрыстығын компилятордыңөзі қадағалап отыруы және терезесін экранда көрсету үшін әдетте Delphi орнатылған соң ол күйге келтіріліп қойылады. Оның бірі – Project-Options(Проект-Күйге келтіру) командасын беріп, ашылған терезенің Copiler бетіндегі жалаушаларды 2.21-суреттегі сияқты орнатып қою керек.

 

2.21-сурет. Компиляторды күйге келтірутерезесі

Ерекше жағдайлар

 

Программаға нөлге бөлу және т.с.с. орындалмайтын қате әрекеттердің кездейсоқ енгізілуіде мүмкін. Олар ерекше жағдайлар делінеді. Ерекше жағдайларды өңдеу үшін Delphi-ге стандартты өңдеуіштер класы енгізілген. Өңдуіштер атаулары Е әріпінен басталады:

EZero Divide – нөлге бөлу;

EIntError – бүтін сандармен жұмыс кезінде кездесетін қателер;

EConvertError – мәннің типін түрлендіру қатесі, т.б.

 

Мысалы, мынадай программа үзіндісін

 

x:=5

for k:= -2 to 2 do

y:=x/k

ShowMessage(FloatToStr(y));

end;

орындау кезінде нөлге бөлуге болмайтыны жазылған 2.22-суреттегі хабар шығады (k=0 болған кезде).

 

*******

2.22-сурет. Ерекше жағдайды хабарлау терезесі

 

Ерекше жағдайды өңдеу үшін Delphi ортасында блокты қорғау механизм қарасатырылған. Оның жазылу түрі:

 

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

<ерекше жағдайларды өңдеуіштер>;

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

end;

Блокты қорғау блогыtry(байқап көру) қызметші сөзінен басталып,endсөзімен аяқталады. Мұнда алдымен try .. exceptбөлімінің операторлары орындалады. Егер операторлар ерекшеліксіз орындалса, қорғалған блоктың жұмысы осымен аяқталып, басқару endоператорынан соң жазылған операторға беріледі. Егер ерекшелік бар болса, басқару except-тең соң жазылған бөлімге беріледі (блокқа else бөлімін енгізу міндетті емес ) .

1-мысал. h=1 қадам бойынша, [-2;2] кесіндісінде у=2х/(х+1) функциясының мәндерін есептеу керек.

Ол үшін формаға Button1 компонентін енгізіп, Button1 Click процедурасын мынандай түрде құруға болады:

 

Procedure TForm1.Button1Click (Sender: Tobject);

var y:=real; x:integer; y1:string;

for x:=-2 to 2 do

y:=2*x/(x+1); y1:=FloatToStr(y);

ShowMessage (y1);

end;


<== previous lecture | next lecture ==>
Goto, Label операторлары. Бос оператор. | Биттік бейнелерді жылжыту
lektsiopedia.org - 2013 год. | Page generation: 0.189 s.