Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Зертханалық жұмыс №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<mzap[j].srball then

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-сурет. Сұрыпталған жазуларды шығару терезесі.

 

Ұсынылатын әдебиеттер: [1-9]

Бекіту сұрақтары:

1. Object Pascal тіліндегі жазулар дегеніміз не және олар қалай сиппаталады.

2. Width_do операторының қызметі қандай?

3. Жазықтықта n нүкте берілген. Координаталар басына жақын орналасқан нүктені табыңыз.

4. Нүкте мен түзуді, екі түзудің және екі жазықтықтың арасындағы қашықтықты табыңыз.

5. дене бір қалыпты үдемелі қозғалады. Дененің Т уақыттан кейінгі жылдамдығы мен үдеуін табыңыз.

6. 4A+7B-3A+8A-2K+1P-5R-2B көпмүшелігі берілген. А үшін ұқсас мүшелерді тауып, қосынды коэффицентті есептеңдер.

7. Группада 30 оқушы бар. Студенттердің берілген аты-жөні және 6 сабақтан тапсырған емтихан бағасы бойынша әрбір оқушының орта балын, аты-жөнін және ең жақсы оқушының орта балын есептеп экранға шығаратын программа құрыңдар.

8. Ағымдағы күннен Х күн өткеннен кейін болатын күнді есептейтін программа құрыңдар.

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

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

11. «Студент» деп аталатын жазу типті мәлімет берілген. Төмендегі ақпаратты өндейтін программа құрыңдар.

a. Қалада және жатаханада қанша студент тұрады;

b. Бірінші семестрдегі қанша студенттің балы 12-ден жоғары;

c. Екінші семестрдегі қанша студенттің балы 13-тен төмен;

d. Оқу жылы бойынша орташа оқу үлгерімін есептеу;

e. Үлгермейтін студенттердің тізімін шығару;

f. Тізімді балдың кемуі бойынша реттеу;

12. Тізімді алфавиттік ретпен реттеу.


mylektsii.ru - Мои Лекции - 2015-2018 год. (0.017 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал