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



жүктеу 8,61 Mb.
бет27/35
Дата09.01.2018
өлшемі8,61 Mb.
#7365
1   ...   23   24   25   26   27   28   29   30   ...   35

Күн және уақыт типі


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

Күнмен және уақытпен жұмыс істеу төмендегідей қосалқы программалар пайдаланылады:



  1. Function Date:TDateTime; –ағымдағы күнді береді;

  2. Function DateToStr (D:TDateTime):String;-күнді символдар жолына түрлендіреді;

  3. Function DateTimeToStr (D:TDateTime)- күн мен уақытты символдар жолына түрлендіреді;

  4. Function FormatDateTime(Format:String; Value:TDateTime):String;П – күн мен уақыт Format параметрінің спецификаторына сәйкес Value параметрін символдар жолына түрлендіреді;

  5. Function Now:TDateTime; – ағымдағы күн мен уақытты береді;

  6. Function Time:TDateTime – ағымдағы уақытты береді;

  7. Function TimeToStr – уақытты жолға айналдырады.

Төмендегі BbRunClick өңдеуші оқу программасының көмегімен енгізу жолына кез келген нақты санды енгізіп, оны TDateTime типінің мәні ретінде көруге болады:

Procedure TfmExample.bbRunClick(Sender:TObject);

Var k:double;

Begin


Try

K:=StrToFloat(edinput.text);

Except

ShowMessage; (“Нақты санның жазылуында қате бар”);



Edinput.SelectAll;

Exit


End;//Нәтижені күн-уақыт ретінде көрсетеміз LBOutput.Caption:=FormatDateTime(‘dd.mm.yyyy.hh:mm:ss,k’);

//енгізу жолын Edinput-қа айналдыру

Edinput.SetFocus;

End;


ТАПСЫРМА:
ТАПСЫРМАНЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР:
ҰСЫНЫЛАТЫН ӘДЕБИЕТТЕР: [1-9]
БЕКІТУ СҰРАҚТАРЫ:


  1. Object Pascal тіліндегі мәліметтер типіне жалпы сипаттама беріңдер.

  2. Қарапайым типке қандай типтер жатады?

  3. Реттелген типке қандай типтер жатады?

  4. ORD(X) жәнеPRED(X) функцияларының қызметі қандай және оларды қандай типтерге қолдануға болады?

  5. SUCC(X) функциясының қызметі қандай?

  6. Бүтін тптердің қандай түрлері бар және олар қалай белгіленеді?

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

  8. Object Pascal тілінде логикалық тптердің ұандай түрлері қолданылады.

  9. Символдық типтер қалай белгіленеді және олардың мәндері қалай анықталады?

  10. Саналатын типтер қалай белгіленеді олардың ең жоғарғы мәні қаншаға тең?

  11. Аралық тип деп қандай типті айтамыз және олар қалай бейнеленеді?

  12. Аралық типтердің қызметін сүйемелдейтін функцияларды атаңдар және олардың қызметтері қандай?

  13. Реттелген типтерден нақты типтердің айырмашылығы қандай?

  14. Нақты типтермен жұмыс істеуге арналған математикалық функцияларды атаңдар және олардың қызметі қандай?

  15. Күн және уақыт типі қалай анықталады?

  16. Күн және уақытпен жұмыс істеуге арналған қандай қосалқы программалар бар?

  17. Object Pascal тілінде қанша құрылымдық тип бар?

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

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

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

Кез келген құрылымдық типтер осы элементтер типін құрайтын жиынмен сипатталады. Object Pascal тілінде оларды 4- ке бөлуге болады: массивтер, жиындар және файлдар.

Object Pascal тілінде типтер бірінің ішіне бірі еркін орналаса алады, олардың кез келгенінің ұзындығының қосындысы 2 Гбайттан аспауы тиіс.

Масссивтер

Object Pascal тілінде массивтер басқа программалау тілдеріндегі элементтер типіне ұқсас келеді. Массивтердің айырымдық ерекшеліктері олардың компоненттерінің бәрі бір типті мәліметтер болады (құрылымдық болуы мүмкін). Бұл компоненттерді өте оңай реттеуге және олардың реттік номерін көрсету арқылы кез келгенімен жұмыс істеуге болады, мысалы:

Type


Digit=array[0..9] of char;

Matrix=array[byte] of single;

Var

M:matrix:



D:digit:

I:integer:

Begin



End.



Массивтер типі төмендегідей сипатталады:

<тип аты>=array[<индекстік типтер тізбегі>] of<тип аты>;

Мұндағы <тип аты>- индентификатор атауы;

Array, of- қызметші сөздер;

<индекстік типтер тізбегі>- үтір арқылы ажыратылған бір немесе бірнеше индекстік типтер тізбегі.

Object Pascal тілінде индекстік тип ретінде өлшемі 2 Гбайттан артпайтын кез келген реттелген типті пайдаланцуға болады.

Айнымалыны массив ретінде анықтауға болады, массив типін алдын- ала сипаттамай- ақ, айнымалы ретінде тікелей сипатталынады. Мысалы,

Var


a,b:array[1..10] of real:

Әдетте, индекстік тип ретінде аралық тип пайдаланылады, мұнда индекстін шекарасының өзгерісі беріледі. Массивті сипаттауда of сөзінен кейінорналасқан типтің өзі Object Pascal-дың кез келген типі болуы мүмкін, тіпті басқа массив болуы мүмкін.

Мысалы,

Type


Mat=array[0..5] of array[-2..2] of array[char] of byte;

Мұндай жазуды ықшамды етіп сипаттауға болады:

Type

Mat=array[0..5,-2..2,char] of byte;



Дербес компьютердің жадында массив элементтері кіші адрестен үлкен адреске көшкенде массивтің оң жақ индкесті жылдам өзгеретіндей болып бірінен соң бірі орналасады.мысалы, егер

Var


a:array[1..2,1..2] of Byte;

Begin


a[1,1]:=1;

a[2,1]:=2;

a[1,2]:=3;

a[2,2]:=4;

end.

Болса, онда жадында 1, 3, 2, 4 мәндерімен байттар бірінен соң бірі орналасады.



Object Pascal тілінде бір массивтің барлық элементтерін басқа массивке меншіктеу операторы арқылы беруге болады. Мысалы,

Var


a,b:array[1..5] of single;

begin


a:=b;


End.


Меншіктеу командасы орындалғаннан кейн А массивінің элементтері В массивінің элементтерімен бірдей болады.

Массивтер үшін қатынас операциялары анықталамаған.

Мысалы, төмендегі жазу қате:

If a=b then…

Екі массив элементтері бойынша салыстырылады. Мысалы:

Var


a,b:array[1..5] of single;

p: Boolean;

i: byte;

begin


P:=true;


For i= 1 to 5 do

Ifa[i]<>b[i] then p:=False;

If p then

End.



Динамикалық массивтер. Delphi- дің 4- нұсқасынан бастап динамикалық массивтер енгізілген. Программада мұндай массивтердібейнелегенде индекстің шекараларын көрсетудің қажеті жоқ:

Var


A:array of integer;

B:array of array of char;

C:array of array of array of real;

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

SetLegth(А, 3);

Бір өлшемді А динамикалық массиві тағайындалады, яғни үш бүтін санды орналастыруға жететін жадыдан орын бөлінеді. Динамикалық массивтің кез келген өлшемі бойынша индекстің төменгі шекарасы 0 (нолге) тең, сондықтан А массивтің индексінің жоғарғы шекарасы 2- ге тең болады.

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

Var


A,B:array of integer;

Begin // жадыны үлестіреміз:

SetLegth(А, 10);

SetLegth(B, 20);//Массивтреді пайдаланамыз:

A:=Nil;

Finanalize(B);



End;

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

Көп өлшемді массивтерде алдымен оның алғашқы өлшемінің ұзындығын тағайындалады, одан кейін екінші, үшінші т.с.с.

Мысалы,


Var

A:array Of array of integer;// екі өлшемді динамикалық массив;

Begin // бірінші өлшемнің ұзындығын тағайындаймыз (бағандар өлшемі);

SetLegth(А, 3);

// әрбір бағанның ұзындығын береміз;

SetLegth(А[0], 3);

SetLegth(А[10], 3);

SetLegth(А[2], 3);

End;


Динамикалық массивтің әдеттегі массивтен айырмашылығы оның екінші, үшіші өлшемінде ұзындықтары әртүрлі болуы мүмкін. Алдынғы мысалда өлшемі 3х3 квадрат массив анықталған. Үшбұрыш массив құрып көрейік:

SetLegth(А, 3);

// әрбір бағанның ұзындығын береміз;

SetLegth(А[0], 3);

SetLegth(А[10],4);

SetLegth(А[2], 5);

Көпөлшемді динамикалық массивтерде N-1 өлшемінің әрбір элементі динамикалық массив болуы мүмкін, сондай- ақ, ол тағайындауды талап етеді. Мысалы 3х3х3 өлшемді нақты куб массивті тағайындау қажет:

Var


A:array Of array of integer;

I,j:integer;

Begin

SetLegth(А, 3);



For i:=0 to 2 do

Begin


SetLegth(А[i], 3);

For i:=0 to 2 do

SetLegth(А[I,j], 3);

End;


End;


Енді Delphi ортасында массив элементтерімен жұмыс істеуге қажетті компоненттерді қарастырайық.

Delphi ортасында экранға массив элементтерін енгізу және шығаруды компоненттер палитрасын Additional бетінде орналасқан Stringrid компонентінің көмегімен ұйымдастырылаған ыңғайлы. Бұл компонент ақпаратты кесте түрінде бейнгелеу үшін пайдаланылады. Кесте белгілкенген және жұмыс аймағынан тұрады. Белгіленген аймақ жұмыс аймағының жол және баған атауларын шығару және тышқанның көмегімен олардың өлшемін басқару қызметін атқарады. Белгіленген аймақ басқа түспен ерекшеленген және оған клавиатурадан ақапарат енгізуге болмайды. Белгіленген аймақтын жолдары мен бағандар саны FixedRows және FixedCols қасиетінде көрсетіледі. Ал, жұмыс аймағы RowCount- жол және ColCount баған ақпараттарынан тұрады, оны программалық жолмен де, тышқанның немесе клавиатураның да көмегімен өзгертуге болады. Программадағы ақпаратпен қатынас Cells[Acol,AROW:integer]:String қасиетінің көмегімен жүзеге асырылады. Мұндағы Acol- кестенің баған нөмері, ал AROW- жол нөмері, ал нөмірлеу нөлден басталады. Сонымен қатар, қосымша батырмаларсыз кестенің өлшемін басақару үшін компоненттер палитрасының Samplesбетінде орналасқан SpinEdit редактор өрісін пайдалануға болады. Енді осы компоненттердің қызметін пайдаланатын мысал қарастырайық.


ТАПСЫРМА:

A={aij}(Xj=apj,j=1,2,..m) матрицасының P жолына тең болатын Х={Х1X2,….Xm} векторының, A={Yi=aiq, i=1,2,..,n} матрицасының q бағанына тен болатын Y={Y1,Y2,…Yn} векторын есептейтің және A={aij} матрицасының ең үлкен және ең кіші элементтерінің экранға шығаратын программа құрайық (n6, m8)
ТАПСЫРМАНЫ ОРЫНДАУҒА ӘДІСТЕМЕЛІК НҰСҚАУЛАР:

Алдымен формаға Additional бетінен: Stringrid1, Stringrid2 және Stringrid3 компоненттерін, ал Samples бетінен SpinEdit1, SpinEdit2 және есептеу процесін орындау үшін Button1 компоненттерінің орналастырамыз. Бұл мыслада барлық StringGrid компоненттері үшін белгіленген аймақ пайдаланылмайды. Объектілер Инспекторы FixedRows және FixedCols қасиеттерінің мәніне 0 мәнін меншіктейміз. Есеп шартына сәйкес StringGrid компоненттері үшін n жол мен m бағанның ең жоғарғы шектік мәндерін тағайындаймы:



StringGrid1

RowCount=6;

ColCount=8

StringGrid2

RowCount=8;

ColCount=1

StringGrid3

RowCount=6;

ColCount=1

StringGrid1 компонентіне ескертусізклавиатурадан мән енгізбес үшін осы компонент үшін объектлер инспекторы терезесіндегі Options қасиетіндегі + белгісін тышқанмен жылдам екі рет басқанда ашылған GoEditing командасына True мәнін тағайындаймыз. Ал, SpinEdit1, SpinEdit2 компоненттері үшін төмендегідей қасеиттерге мән береміз:



SpinEdit1

MaxValue=1

MinValue=6

SpinEdit2

MaxValue=1

MinValue=6

Енді SpinEdit1 және SpinEdit2 компоненттері үшін осы оқиғаларды өндеу процедураларын ққұрайық. Ол үін курсорды SpinEdit1 және SpinEdit2 компоненттерінекелтіріп тышқанның батырмасын жылдам екі басамыз. Нәтижесінде программалар коды терезесінде:

Procedure SpinEdit1Cgange(Sender:TObject);

Procedure SpinEdit2Cgange(Sender:TObject);

Оқиға өндеуші процедураларын аламыз.

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


unit Unit1;
interface
uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Spin, Grids;
type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

SpinEdit3: TSpinEdit;

SpinEdit4: TSpinEdit;

Button1: TButton;

Button2: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

Label12: TLabel;

Procedure SpinEdit1Change(Sender:TObject);

Procedure SpinEdit2Change(Sender:TObject);

Procedure FormCreate(Sender:TObject);

Procedure Button1Click(Sender:TObject);

Procedure Button2Click (Sender:TObject);

Private {Private declarations}

Public {Private declarations}

End;

Var


Form1:TForm;

implementation


{$R *.dfm}

Var


A:array[1..6,1..8] of extended;

X:array[1..8] of extended;

Y:array[1..6] of extended;

m,n,p,q:integer;max,min:extended;


Procedure TForm1.FormCreate(Sender: TObject);

Begin


SpinEdit1.Text:='4';

SpinEdit2.Text:='6';

SpinEdit3.Text:='2';

SpinEdit4.Text:='3';

StringGrid1.RowCount:=4;

StringGrid1.ColCount:=6;

StringGrid2.RowCount:=6;

StringGrid3.RowCount:=4;

End;
Procedure TForm1.SpinEdit1Change(Sender: TObject);

Begin


n:=StrToint(SpinEdit1.Text);

StringGrid1.RowCount:=n;

StringGrid3.RowCount:=n;

End;
Procedure TForm1.SpinEdit2Change(Sender: TObject);

Begin

n:=StrToint(SpinEdit2.Text);



StringGrid1.ColCount:=m;

StringGrid2.RowCount:=m;

End;

Procedure TForm1.Button1Click(Sender: TObject);



var i,j:integer;

begin


n:=StrToint(SpinEdit1.Text);

StringGrid1.RowCount:=n;

StringGrid3.RowCount:=n;

m:=StrToint(SpinEdit2.Text);

StringGrid1.ColCount:=m;

StringGrid2.RowCount:=m;

p:=StrToint(SpinEdit3.Text);

q:=StrToint(SpinEdit4.Text);

for i:=1 to n do

for j:=1 to m do

A[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);

Max:=A[1,1]; //Ең үлкен және ең кіші элементті табу

for i:=1 to n do

for j:=1 to m do

if A[i,j]>max then max:=A[i,j]

else if A[i,j]

label9.Caption:=floattostr(max);

label2.Caption:=floattostr(min);

for j:=1 to m do // X[j] массивін шығару

begin


X[j]:=A[p,j];

StringGrid2.Cells[0,j-1]:=FloatToStrF(X[j],ffFixed,3,1);

end;

for i:=1 to n do // Y[i] массивін шығару



begin

Y[i]:=A[i,q];

StringGrid3.Cells[0,i-1]:=FloatToStrF(X[j],ffFixed,3,1);

end;


end;

Procedure TForm1.Button2Click(Sender: TObject);

begin

Close;


end;

end.


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


5.1-сурет. Массивтерді шығару терезесі.
Ұсынылатын әдебиеттер: [1-9]
Бекіту сұрақтары:

  1. Масссив дегеніміз не және оның жазылуы форматы қандай?

  2. Динамикалық массив дегеніміз не жән олар қалай бейнеленеді?

  3. Setlength функциясының қызметі қандай?

  4. Р және n натурал санадары мен а1...,аn бүтін сандары берілген. а1...,аn тізбегінің Р санына еселі болатын мүшелерінің көбейтіндісін табындар?

  5. P, q және а1...,аn бүтін санадары берілген (P>q>=0). а1...,аn тізбегінде модулі Р-ға бөлгенде q қалдық беретін мүшелерін нолмен алмастырындар.

  6. а1...,аn тізбегіндегі

а) 5- ке еселіж

б) тақ және теріс

в) 5- ке бөлінетін және 7- ге бөлінбейтін;

г) |aj|2 шартын қанағаттанадыратын мүшелерінің қосындысын және санын табатын программа құрыныз.



  1. A(m,n) матрицасының әр жол элементтерінің ең үлкен экранға шығаратын программа құрыныз.

  2. A(m,n) матрицасының диагональдарындағы ең кіші элементті экранға шығаратын программа құрыныз.

  3. A(m,n) матрицасының диагоналндағы және одан жоғары жатқан элементтерін нольмен алмастырындар.

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

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

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

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

Жазуларды сипаттаудың форматты төмендегідей:



<тип аты>=record

<өрістер тізімі>

End;


Мұндағы <тип аты>- жазудың атауы;

Record, end; қызметші сөздер (жазу соңы дегенді білдіреді);



<өрістер тізімі>- өрістер тізімі, ол нүктелі үтір арқылы ажыратылып жазылған жазулар бөлімдерінің тізбегі.

Жазудың әрбір бөлімі бір немесе бірнеше өріс атауларынан тұрады, олар бір- бірінен үтір арқылы ажыратылып жахзылады. Индентификатордан кейін қос нүкте қойылып, өрістер типі сипатталады. Мысалы:

Type

BirthDay=record



Day, Month: Byte;

Year:Word;

End;

A, B: BirthDay



Бұл мысалда BirthDay типі, өрістері Day, Month, Year болып келген жазу; А және В айнымалылары BirthDay типті жазудан тұрады.

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

а:=b


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

a.day:=27;

b.year:=1963;

қабаттасқан өрістер үшін нақтыллауды жалғастыра беруге болады:

Type

BirthDay=record



Day, Month: Byte;

Year:Word;

End;

Var


C:record

Name:string;

Bd: BirthDay;

End;


Begin

If c.Bd.Year=1963 then…



End;

Жазудың өрісіне кіруді жеңілдету үшін Width жалғастыру операторы пайдаланылады.

Width<айнымалы> do <оператор>;

Мұндағы Width, do- қызметші сөздер; <айнымалы>-жазу тпті айнымалы, мұнда бірінің ішіне бірі орнласқан өрістер тізімі жазылады; <оператор>- Object Pascal тілінің кез келген операторы.

c.Bd.Month:=9;

Бұл төмендегі жазумен бара-бар:

Width c.Bd.do Month:=9;

Width c do Width Bd.do Month:=9; немесе

Width c.Bd.do Month:=9;

Object Pascal тілінде бірнеше вариатты өрісі бар жазуларды пайдалануға болады, мысалы:

Type

Forma\record



Name:String;

Case byte of

0:(BirdthPlace:String[40]);

1:(Country: String[20]);

EntryPort: String[20]);

EntryDate: 1..31;

EntryDate: 1..31)

End;


Бұл мысалда Forma типі бір шектеулі Name өрісімен және «case … of» қызметші сөзі арқылы өзгермелі бөлігі берілетін жазуды анықтайды. Өзгермелі бөлігі бірнеше варианттан тұрады. Әрбір вариант таңдау тұрақтысы бойынша анықталады; таңдай тұрақтысынан кейін қос нүкте қойылып, өрістер тізімі жазылады. Кез келген жазуда өзгермелі бөлігі тек біреу ғана болады.

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

Var

Mem4:record



0:(By:array[0..3] of byte);

1:(Wo:array[0..1] of word);

2:(lo:longInt);

End;


Бұл мысалда Mem4 жазуныңүш вариантты бар, олардың әрқайсысы жадыдан 4 байттың біреуін ғана алады. Біз программадағы жазудың қай өрісіне оралатынымызға байланысты сол бөлік массив ретінде қарастырылады. 4 байт – by өрісі, Word тәрізді екі бүтін типтен құрылған массив (Wo -өріс); longInt тәрізді бір бүтін типті сан (Lo - өрісі). Бұл мысалда алдымен ең ұзын бүтін мәнді меншіктеп, одан кейін нәтижені байт немесе сөз бойынша талдауға болады:

Var


x:word;

Xb:byte;


Xl:LongInt;

Begin


Width m do

Begin

lo:=Trunc(2*Pi*x);



if wo[1]=0 then

if by[1]=0 then

xb:=x[0]

else


x:=wo[0]

else


x1:=lo

end;


End.


Өзгермелі бөлікті ашатын case…of сөзі сыртқы түрі таңдау операторына ұқсағанымен, бұл жерде тек өзгермелі бөліктің басын көрсететін қызметші сөзді ғана атқарып тұр. Сондықтан өзгермелі бөліктің соңына case…of қызметші сөзінің жұбы ретінде end сөзін жазбауға болады. (Өзгеомелі бөлігі барлық уақыттта жазудың соңында болғандықтан end сөзі жазылады, бұл record сөзінің жұбы)

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


ТАПСЫРМА:

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


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

Алдымен интерфейсті құрамыз. Жазулармен жұмыс істегенде экранға ақпаратты енгізу мен шығаруды StringGrid компоненті арқылы ұйымдастырған ыңғайлы. Ол үшін формаға StringGrid және Button компонентін орналастырамыз. Бағандар мен жолдарға сәйкес жолдарды енгізу үшін StringGrid компонентінің белгіленген аймағы пайдаланылады. Сондықтан объектілер инспекторы терезесіндегі FixedCols және FixadRows қасиеттеріне 1 мәнін тағайындаймыз. Есептің шартына сәйкес баған және жолдар санын көрсететін қасиеттерге: ColCount=6 және RowCount=10 мәндерін тағайындаймыз. StringGrid компонентіндегі жолдарды толық көру үшін вертикаль орағыш жолағын орнатуға болады, ScrollBars қасиетіне ssVertical мәнін тағайындаймыз. StringGrid компонентіне клавиатурадан ақпарат енгізіп, жөндеу мүмкіндігіне алу үшін +Options қасиетіндегі goEditing жолына true мәнін беру қажет. Осы мәндер толық тағайындалып болғаннан кейін программа коды терезесіне FormCreate эәне Button1Click оқиға өндеуші процедураларын құрамыз.

unit Unit1;
interface
uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;
type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

procedure FormCreate(Sender:TObject);

procedure Button1Click(Sender:TObject);

private

{ Private declarations }



public

{ Public declarations }

end;
var

Form1: TForm1;


implementation
{$R *.dfm}

type


zap=record

fio:string[20];

mat,phiz,chem:integer;

srball:real;

end;

var mzap:array[1..9] of zap;



procedure TForm1.FormCreate(Sender:TObject);

var i:integer;

begin with StringGrid1 do

begin


Cells[0,0]:='i';

Cells[1,0]:='fio';

Cells[2,0]:='matem';

Cells[3,0]:='phyzics';

Cells[4,0]:='Chemstry';

Cells[5,0]:='srball';

for i:=1 to 9 do

Cells[0,i]:=intToStr(i);

Cells[1,1]:='Kanat';Cells[2,1]:='5';Cells[3,1]:='5'; Cells[4,1]:='5';

Cells[1,2]:='Sanat';Cells[2,2]:='4';Cells[3,2]:='4'; Cells[4,2]:='4';

Cells[1,3]:='Janat';Cells[2,3]:='3';Cells[3,3]:='4'; Cells[4,3]:='4';

Cells[1,4]:='Marat';Cells[2,4]:='4';Cells[3,4]:='3'; Cells[4,4]:='3';

Cells[1,5]:='Sara';Cells[2,5]:='5';Cells[3,5]:='5'; Cells[4,5]:='4';

Cells[1,6]:='Clara';Cells[2,6]:='4';Cells[3,6]:='4'; Cells[4,6]:='5';

Cells[1,7]:='Janna';Cells[2,7]:='2';Cells[3,7]:='3'; Cells[4,7]:='3';

Cells[1,8]:='Dana';Cells[2,8]:='5';Cells[3,8]:='4'; Cells[4,8]:='3';

Cells[1,9]:='Erlan';Cells[2,9]:='5';Cells[3,9]:='5'; Cells[4,9]:='3';

for i:=1 to 9 do

with mzap[i] do

begin


fio:=Cells[1,i];

mat:=StrToInt(Cells[2,i]);

phiz:=StrToInt(Cells[3,i]);

chem:=StrToInt(Cells[4,i]);

srball:=( mat+phiz+chem)/3;

Cells[5,i]:=FloatToStrF(srball,ffFixed,5,2);

end;end;end;

procedure Button1Click(Sender:TObject);

var i,j:integer; vper:zap;

begin


for i:=1 to 9 do

with StringGrid1,mzap[i] do

begin

fio:=Cells[1,i];



mat:=StrToInt(Cells[2,i]);

phiz:=StrToInt(Cells[3,i]);

chem:=StrToInt(Cells[4,i]);

srball:=( mat+phiz+chem)/3;

Cells[5,i]:=FloatToStr(srball,ffFixed,5,2);

end;


for i:=2 to 9 do

for j:=9 downto i do

if mzap[j-1].srball

begin


vper:=mzap[j-1];

mzap[j-1]:= mzap[j];

mzap[j]:=vper;

end;


for i:=1 to 9 do

with stringGrid1,mzap[i] do

begin

fio:=Cells[1,i];



mat:=StrToInt(Cells[2,i]);

phiz:=StrToInt(Cells[3,i]);

chem:=StrToInt(Cells[4,i]);

srball:=( mat+phiz+chem)/3;

Cells[5,i]:=FloatToStr(srball,ffFixed,5,2);

end; end;



end.

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



5.2-сурет. Сұрыпталған жазуларды шығару терезесі.
жүктеу 8,61 Mb.

Достарыңызбен бөлісу:
1   ...   23   24   25   26   27   28   29   30   ...   35




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

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