Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Зертханалық жұмыс №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. Тізімді алфавиттік ретпен реттеу.
|