ПОӘК 042-18-12 5/03-2013 №1 басылым 18. 09. 2013ж-сурет 3. Параметрлі цикл операторына мысалдар
Берілген массивтің кез келген элементтеріне арифметикалық операцияларды, салыстыру және меншіктеу операторларын қолдануға болады. Сонымен қатар, массивтерге Turbo Pascal программалау тіліндегі айнымалы типіне сәйкес келетін барлық стандартты процедуралар және функциялар қолданылады. Массивтің кез-келген бір элементіне элементіне нәтиже беру үшін, меншіктеу операторы қолданылады: Массив атауы[индексі]:=нәтиже Мысалы: а) А массивінің бірінші элементіне- 12 санын меншіктеу үшін: А[1]:=12; ә) А массивінің бесінші элементіне- 405 санын меншіктеу үшін: А[5]:=1405; б) А массивінің екінші элемент нәтижесін экранға- шығару үшін: writeln (A[2]); (экранға 11 шығады.) в) А массивінің бесінші элементіне нәтижені пернелер тақтасы көмегімен енгізу үшін: readln(A[1]); г) А массивінің бірінші және үшінші элементтерін қосындысын Sum айнымалысына меншіктеу үшін: Sum:=A[1]+A[3];(нәтижесінде Sum айнымалысына 17 саны меншіктеледі). Бірөлшемді массивтер элементтерімен жұмыс. Массивтің кез-келген элементерімен жұмыс істегенде программалау барысында олардың индекісінің мәні сипатталған шектеуден аспауы тиіс. Егер массив индексінің мәні сипатталған шектеуден асып кетсе онда, синтаксистік қате тіркеліп, экранда “Index type is not compatible with declaration” деген сөз тіркестері шығарылады. Массивтер қолдпанылатын программаларда “{R+}” директивасын жазу арқылы массивтің шектеулерін тексеруге болады. Егер прогаммада“{R+}” директивасы беріліп, массив индексі шектеуден асып кетсе, онда экранға “Range check error” сөз тіркесі шығарылады. Массивтерді программада қолдану үшін Turbo Pascal програмаллау тілінде оларды бірден var бөлімінде сипаттау жолы қарастырылған. Жалпы жазылу түрі: Var Массив атауы : array (индекс типі) of элемент типі; Мысалы, бөлшек сандарға арналған он сегіз элементтен тұратын GR массивін сипаттау: Var GR: array [1...18] of real; Берілген тоғыз элементтен тұратын А масчсивіне бөлшек сандар енгізіп, оларды дисплей бетіне ретімен шығару программасын қарастырайық: {$ R+} PROGRAM MASSIV; {Программа атауы} Type { Типтерді сипаттау бөлімі } Mas = array [1..9] of real; { Шарт бойынша массив типі } Var {айнымалыларды сипаттау бөлімі} A: Mas; {Mas типті А - массиві} I: integer; {циклді басқару айнымалысы} BEGIN {негізгі программа басы} WRITELN (‘A – массивінің 9 элементін енгізіңіз:’); ` FOR I:= 1TO 9 DO {I- бойынша цикл} READ (A[i]); {A[i] массивіне нақты сандарды енгізу операторы} FOR I:=1 to 9 do {I- бойынша цикл} WRITE(‘A[‘,I,’]=’,A[I]); {A[I] массивінің элементін дисплейге шығару операторы} END. {Негізгі программа соңы} Өзін-өзі тексеру сұрақтары
Дәріс №10. Деректердің құрылымданған типі: массивтер.Бірөлшемді және көпөлшемді массивтер. Массивті экранға шығару Массивтер Қарапайым типтер қатарына жататын стандартты (Integer, real) және қолданушылар (тізбектелген тип) типтерінде бір айнымалыны сақтау үшін, негізінен компьютер жадысының бір ғана ұяшығы қолданылады. Бірақ көпетген программаулау есептерінің шешімін табу барысында әрбір элементтің деректерін жеке айнымалыға сақтау орнына, оларды тізбектеп бір жерде сақтау анағұрлым тиімді болып табылады.
Бір типтес берілгендерден құралып, барлық элементтеріне бір ортақ атау берілген жиынды массив деп атаймыз. Массив құрылымдық типтер қатарына жатады. Массив элементтері нөмірленеді. Массивтің әрбір элементіне индексін көрсету арқылы жұмыс істеуге болады. Массивке мысал ретінде векторларды қарастыруға болады. Егерм массивке кестелік берілгендер жазылса ( матрица), онда элементтері екі индекс бойынша нөмірленеді. Массив сипаттамалары:
Массивтер элементтерімен жұмыс жасау барысында, массив атауынан кейін міндетті түрде тік жақшаға алынған индекс көрсетіледі. Индекс ретінде сандар қолданылады. Массивтерді қолдану үшін оларды типтер (type) немесе айнымалыларды сипаттау (var) бөлімінде хабарлану қажет. Жалпы жазылу түрі:
A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
Берілген массивтің кез келген элементтеріне арифметикалық операцияларды, салыстыру және меншіктеу операторларын қолдануға болады. Сонымен қатар, массивтерге Turbo Pascal программалау тіліндегі айнымалы типіне сәйкес келетін барлық стандартты процедуралар және функциялар қолданылады. Массивтің кез-келген бір элементіне элементіне нәтиже беру үшін, меншіктеу операторы қолданылады: Массив атауы[индексі]:=нәтиже Мысалы: а) А массивінің бірінші элементіне- 12 санын меншіктеу үшін: А[1]:=12; ә) А массивінің бесінші элементіне- 405 санын меншіктеу үшін: А[5]:=1405; б) А массивінің екінші элемент нәтижесін экранға- шығару үшін: writeln (A[2]); (экранға 11 шығады.) в) А массивінің бесінші элементіне нәтижені пернелер тақтасы көмегімен енгізу үшін: readln(A[1]); г) А массивінің бірінші және үшінші элементтерін қосындысын Sum айнымалысына меншіктеу үшін: Sum:=A[1]+A[3];(нәтижесінде Sum айнымалысына 17 саны меншіктеледі). Бірөлшемді массивтер элементтерімен жұмыс. Массивтің кез-келген элементерімен жұмыс істегенде программалау барысында олардың индекісінің мәні сипатталған шектеуден аспауы тиіс. Егер массив индексінің мәні сипатталған шектеуден асып кетсе онда, синтаксистік қате тіркеліп, экранда “Index type is not compatible with declaration” деген сөз тіркестері шығарылады. Массивтер қолдпанылатын программаларда “{R+}” директивасын жазу арқылы массивтің шектеулерін тексеруге болады. Егер прогаммада“{R+}” директивасы беріліп, массив индексі шектеуден асып кетсе, онда экранға “Range check error” сөз тіркесі шығарылады. Массивтерді программада қолдану үшін Turbo Pascal програмаллау тілінде оларды бірден var бөлімінде сипаттау жолы қарастырылған. Жалпы жазылу түрі: Var
Массив атауы : array (индекс типі) of элемент типі; Мысалы, бөлшек сандарға арналған он сегіз элементтен тұратын GR массивін сипаттау: Var GR: array [1...18] of real; Берілген тоғыз элементтен тұратын А масчсивіне бөлшек сандар енгізіп, оларды дисплей бетіне ретімен шығару программасын қарастырайық: {$ R+} PROGRAM MASSIV; {Программа атауы} Type { Типтерді сипаттау бөлімі } Mas = array [1..9] of real; { Шарт бойынша массив типі } Var {айнымалыларды сипаттау бөлімі} A: Mas; {Mas типті А - массиві} I: integer; {циклді басқару айнымалысы} BEGIN {негізгі программа басы} WRITELN (‘A – массивінің 9 элементін енгізіңіз:’); ` FOR I:= 1TO 9 DO {I- бойынша цикл} READ (A[i]); {A[i] массивіне нақты сандарды енгізу операторы} FOR I:=1 to 9 do {I- бойынша цикл} WRITE(‘A[‘,I,’]=’,A[I]); {A[I] массивінің элементін дисплейге шығару операторы} END. {Негізгі программа соңы} Өзін тексеру сұрақтары
Әдебиет: (1) бет. 140-153 Дәріс №11. Деректерді сұрыптау әдістері Массивтің минималды және максималды элементтерін анықтау Ең алдымен массивтің ең кіші немесе ең үлкен элементі деп жорамалмен 1-ші элементі алынады. Ары қарай массивтің ең кіші немесе ең үлкен элементін табу үшін цикл орындалады, яғни сол элемент басқа элементтермен салыстырылады. Егер ағымды элемент басқаларға қарағанда ең үлкен болса, онда сол элемент ізделінді элемент болғаны, басқа жағдайда ең үлкен элемент өзгеріссіз қалады. Оны математикалық формула түрінде былай жазуға болады Сәйкесінше ең кішіні табу: Сұрыптау. Қарапайым таңдау әдісімен сұрыптау. Қарапайым ауыстыру әдісімен сұрыптау. Тікелей қосу әдісімен сұрыптау. Араласу әдісімен сұрыптау. Бөлу әдісімен сұрыптау. (Хоар сұрыптауы). Сұрыптау – бұл қандай да бір жиынның элементтерін кему немесе өсу ретімен ауыстыру процесі. Массивтерді сұрыптау алгоритмдері бірнешеу. Тиімділік критерийі бойынша қарапайым және жақсартылған болып бөлінеді. Қарапайым:
Жақсартылған әдіс
Тікелей таңдаулы сұрыптау a1, a2, …, an сандар берілген, соларды азаюы бойынша орналасатындай етіп орналастыру керек. Ол үшін массивтегі элементтен ең үлкен элемент алынып, ол бірінші орынға қойылады, ал бірінші элемент жанағы ең үлкен элементтең орнына қойылады. Сонан соң. Екіншіден басталыр әлгі процедура қайталанады. Қарапайым айырбастау сұрыптауы a1, a2, …, an сандар берілген, соларды өсуі бойынша орналасатындай етіп орналастыру керек. Ол үшін массивтегі 2 көрші элемент салыстырылып, егер ai> ai+1 болса, ауыстыру орындалады. Осылайша, барлық элементтер өсу ретімен орналасқанша орындала береді. .Өзін-өзі тексеру сұрақтары
Әдебиет: (1) бет. 140-153 12 апта Дәріс №12. Деректер типі – Жазбалар. Массив анықтамасында айтылғандай, массив дегеніміз құрылымына және қолдану тәсіліне байланысты, бір типті нөмірленген тізімдідер. Егер әртүрлі типтегі мәліметтер берілген болсын. Осы тізімнен белгілі бір жлыдар аралығында туған оқушыларды сұрыптап бөліп алу керек болсын. Мәліметтерді сақтау үшін оған екі массмвке орын бөлуімізге болатын еді. Бірінші массив (snring типті) оқушылардың аты жөнін сақтауға, екіншісі сақтауға арналған. Егер бізге қосымша мәліметтер (мысалы: сыныбы, ұлты, т.б.) енгізу керек болса, онда енгізуге тура келеді. Бір мезгілде бірнеше массивпен жұмыс істеу және оларды смпаттамалары бойынша сұрыптауға, әрине болады, бірақ үлкен жұмысты талап етеді. Сонымен қатар бұл мәліметтерді файлда сақтау керек болса не істейміз? Файлдар туралы сұрақтарды талдағанда айтылғандай, файл элементтері тек бір типті элементтер болып келеді. Олай болса әр түрлі типтегі элементтерді әрбір типке – жолдық типке айналдырып, мәтіндік файлдармен жұмыс істеуіміз керек. Мәліметтерді сақтай аламыз, бірақ болашақта бұл мәліметтермен жұмыс істеу жеткілікті қиындық туғызады. Бұл қиындықтан шығу үшін мәліметтердің құрама типі қолданады. Мәліметтердің бұл типі жазба деп аталады. Жазбалар әр түрлі типтегі элементтер жиынтығынан тұрады. Жазба элелменттерін құраушыларды өріс деп атайды да, әрбір өрістің өзіндік атауы болады. Әрбір жазбаның бірегей атауы болады.
және т.б. Бұл мысалдағы шамалар типі мынадай:
Осындай объектілерді сипаттауда Паскальда –жазбалар қолданылады. Жазба типті айнымалыны сипаттау Жазбалар әр түрлі типтегі элементтер жиынтығынан тұрады. Жазба элелменттерін құраушыларды өріс деп атайды да, әрбір өрістің өзіндік атауы болады. Әрбір жазбаның бірегей атауы болады.
Жазбаны өңдеу элементар объектә түрінде шығады. Мұндай объект типі – record (жазба) деп аталады. Олай болса, мәліметтердің типтеріне байланысты шектеулер алынып тасталады. Жазбаларды сипаттау үшін, оның атауы, берілген өрісте сақталатын мәліметтердің атауы және типі көрсетілуі керек. Жазбалардың жалпы түрде сипатталуы келесідегідей: Type<жазба атауы>=Record <1 өріс>:<1 тип>; <2 өріс>:<2 тип>; ;
Жазбаны сипаттау Берілген мәліметтерді сипаттау
Егер өрістерді былай берсек: № - N Атауы – Name Саны – K Бағасы – C Шыққан жылы – G Онда сипатталу мынадай болады: type T1=record N,K,G:integer; Name:string; C:real; end;
var X:T1; Өзін тексеру сұрақтары
Әдебиет: (1) бет. 130-140 Дәріс №13. Деректердің типтері - файлдар. File (ағылшын тілінен аударылғанда) бума, іс қағаздар жинағы, сонымен қатар ақпаратты сақтау деген мағынаны білдіреді. Borland Pascal-да файлдарды екі негізгі белгісі бойынша топтастыруға болады: файлдың типі бойынша (оның логикалық құрылымына ) файл элементтеріне қатынау тәсілі бойынша Типтері бойынша файлдар шартты тұрде үш түрге бөлінеді: мәтіндік файл; типтік файл; типтік емес файл. Біз көбінесе мәтіндік және типтік файлдармен жұмыс істейміз. Қатынау тәсілі бойынша файлдар келесідей бөлінеді: Тікелей қатынау файлдары Кезекпен қатынау файлдары Олардың айырмашылығы тікелей қатынау файлдарында арнайы процедуралар және функцияларды пайдалана отырып, мәліметтерді, олардың файлдағы орнына тәуелсіз, оқуға немесе жазуға болады, ал кезекпен қатынау файлында оның ортасында немесе соңында тұрған мәліметті оқу үшін, оның алдындағы мәліметтердің барлығын оқуға тура келеді. Мәтіндік файлдар кезекпен қатынау файлдарына жатады, ал типтік файлдар тікелей қатынау файлдарыа жатады. Мәтіндік файлға мәліметтер жазу Ең қарапайым файл типі мәтіндік файл болып табылады. Бұл файлдағы мәліметтер типтік және типтік емес файлдардағыдай машиналық кодта емес, сан, әріп және басқа пернетақта символдары түрінде (ASCII кодында) беріледі. Сондықтан мұндай файлдар мазмұны оңай қаралады, оңай өзгереді және оларды кез келген мәтіндік редактордың, соның ішінде Borland Pascal ортасының да көмегімен өзгертуге болады. Өздеріңіз білетіндей 2.1.2.-ні қара, мәтінді теру кезінде жаңа жолды енгізу үшін "Enter” пернесін басу керек, осы кезде арнайы код гинерацияланады—ол жол соңы коды, ал файлды сыртқы сақтау құрылғысына жазған кезде де арнайы код гинерацияланады—ол файл соңы коды. Мәтіндік файлды оқығанда бұл кодтар көрінбейді. Келесі есепті шешіп көрейік: Пернетақтадан бірнеше сандар енгізіп, оларды "mayFile.in” атты мәтіндік типтегі файлға жазу керек. Есепті кезеңдерге бөлейік: пернетақтадан мәліметтерді енгізу оларды "mayFile.in” атты файлға жазу керек. Бірінші кезеңді орындау үшін: пернетақтадан енгізілетін сандардың мөлшерін (массив өлшемін) көрсету керек Сан мөлшерін білген соң, параметрлі циклді қолдану арқылы массив элементтеріне осы сандардың нақты мәндерін меншіктейміз Осы әрекеттерді орындау үшін қолданылатын айнымалыларды сипаттаймыз. Айталық, санымыз 100-ден көп емес және олар басқа да процедураларда қолданылатындықтан, оларды ауқымды айнымалыларды баяндау блогында сипаттаймыз. рrogram Misal_F1; var
i, SanMolcher: integer;
procedure init; begin readln (SanMolcheri); for i:=1 to SanMolcheri do begin
readln(San[i]);
procedure work ; begin
var
Одан кейін біз программаға, "мәтіндік” типтегі FileOut атты айнымалының, біздің "mayFile. in” атты нақты файлмызды белгілейтінін көрсетуіміз керек. Ол үшін assign(Name Var, Name File)процедурасы қолданылады. Name Var—бұл файлды белгілеу үшін берілген айнымалы аты, біздің жағдайда Name Var—дың орнына File Out сөзін жазасыз. NameFile—бұл біз жұмыс істейтін файлдың аты, біздің жағдайда”mayFile.in”. Файл аты мен оның кеңейтілуінен басқа орналасқан орнына қарай сипатталатыны да белгілі. Мысалы,”c,\bp\bin\MyFile.in”. Ал егер толық аты берілмеген жағдайда, үнсіз келісім бойынша сіздің программаңыз орналасқан ағымдағы каталог қолданылады. Енді сіз берілген файлды ашып, оған мәліметтер жазылатындығын көрсетуіңіз керек. Ол үшін rewrite (Name Var)процедурасы қолданылады. Мұндағы, Name Var-бұл файлды белгілеу үшін берілген айнымалы аты, біздің жағдайда Name Var—дың орнына FileOut атауы жазылады. rewrite( Name Var) процедурасы—файлды жазу үшін ашады және көрсеткішті файлдың басына орналастырады. Енді мәліметтерді файлға жазуға бәрі дайын. Ол үшін бұрынан белгілі Write() және Write() процедураларын қолданамыз. Жазулар экранға емес файлға жазылуы үшін, мәліметтерді шығару бағытын көрсетеміз. Яғни, жақшаның ішіндегі мәліметтерді жазатын айнымалы атауының алдында, бізді файлмен байланыстыратын assign() процедурасындағы айнымалы атуын көрсетеміз. Айталық, берілгендерді шығыс файлына бір жолға жазу керек болсын, бұл жағдайда бірінші мән ол енгізілетін сандардың мөлшері болады. Жаңа жолға көшу болмайтындықтан,Write() процедурасын қолданып, бастапқыда файлға SanMolcheri айнымалысын мәнін жазамыз да, содан кейін параметрлі циклді пайдаланып енгізу процедурасында енгізілген сандарды жазамыз. Барлық мәліметтер файлға жазылып болған соң, файлды жазу керек. Ол Close() процедурасының көмегімен орындалады. Close(Name Var) процедурасы—файлдың соңына, файл соңы белгісін жазып, оны жабады. Егер файл Close() процедурасымен жабылмаған болса, онда мәліметтер сақталынбайды. Мәліметтерді файлға жазу процедурасы қандай болатынын қарастырып көрелік: procedure exi; var
begin assing(FileOut,`mayFile.in`); rewrite(FileOut); write(FileOut, SanMolcheri); for i=1 to SanMolcheri do write(FileOut,San[i]);
begin
init; work;
exi; end.
Осы программаны ‘Misal_F1’ атымен дискіге жазып, оны орындауға жіберіңіз. Программа жұмысын аяқтағаннан кейін, BP редакторының көмегімен біздің программамыз құрған `mayFile.in` файлын ашып, оның мазмұнын көріңіз. Өкінішке орай сандар файлда бос орынсыз тіркесіп жазылған болып шығады. Мұндай жазбадан қандай сандар жазылғанын анықтау қиындық тудырады. Бұл жағдайды қалай түзетуге болады? Ол үшін, сандары бір бірінен дәл ажыратудың екі мүмкіндігі бар: а.әрбір мәнді бос орын (``)белгісі арқылы бөліп жазу в.әрбір мәнді жаңа жолға жазу (баған бойынша). Бірінші жағдайда енгізілетін айнымалы атауынан кейін бос орын (``) белгісін қоямыз.
for i:= to SanMolcheri do write(FileOut,San[i],``);
writeln(FileOut,SanMolcheri); for i=1 to SanMolcheri do writeln(FileOut, San[i] ); Мәтiндiк файлдан мәлiметтердi оқу Өткен тақырыптарда сіздер, мәліметтерді мәтіндік файлға жазуды үйреніңіздер. Енді оларды қайтадан файлдан қалай оқуға болатынын қарастырамыз. Ол үшін `mayFile1/in` файлын пайдаланамыз. Мәліметтерді файлға жазу кезіндегідей, біздің файлмызды байланыстыратын айнымалыға атау беруіміз керек. Айталық, ол атау Fileln болсын, содан кейін біз оны мәтіндік файл ретінде сипаттауымыз керек. Бұл айнымалыны біз енгізу процедурасында пайдаланатын болғандықтан, сол процедураның жергілікті айнымалысы ретінде сипаттаймыз. var
Одан кейін біз программада, "мәтіндік типті ” Fileln айнымалысы, біздің `mayFile1.in` атауымен берілген нақтылы файлмызды белгілейтіндігін көрсетуіміз керек. Ол үшін assing(NameVar,NameFile)-процедурасын қолданады. Енді файлдан мәліметтерді оқу үшін, берілген файлды ашуымыз керек. Ол үшін, reset(NameVar)—процедурасында қолданады, мұндағы NameVar-сіздің файлды белгілеуге берген айнымалыңыздың атауы, біздің жағдайымызда, ол NameVar-Fileln. Reset(NameVar)-процедурасы, мәліметтерді оқуға файлды ашады және курсорды файлдың басына орналастырадв. Егер ондай жоқ болса, қателік туралы хабарлама береді. Енді мәліметтерді файлдан оқуға барлығы дайын болды. Ол үшін өзімізге бұрынан таныс Read() және Readln() процедураларын пайдаланамыз. Мәліметтерді оқу пернетақтадан емес, файлдан жүзеге асу үшін, мәліметтерді оқудың жолын көсетеміз. Яғни, жақшалардың ішіне, assing()- процедурасының көмегімен біздің файлмызды байланыстырып тұрған, айнымалының атауын көрсетеміз. `MayFile.in`файлындағы бірінші сан, файлдағы барлық сандардардың мөлшерін көрсетеді. Сондықтан, алдымен файлдан Sanau айнымалысының мәнін оқытамыз,содан кейін параметрлі циклді қолданып, файлдағы сандардың мәндерін оқимыз. Мәліметтер толық оқылып болған соң, өзімізге таныс Close() процедурасын пайдаланып, файлды жабу керек.
procedure lnit; var
read(Fileln,San[i]); close(Fileln); end; Дәл осындай, егер өлшемдері белгілі болса, мәліметтерді екі өлшемді массивтен оқу да онша қиыншылық туғызбайды. `MayFile.in5` файлынан мәліметтерді оқитын программадан үзінді мысалға келтірейік: procedure lnit; var
Fileln :text; begin
assing(Fileln,`mayFile5.in`); {файлды оқуға ашу} reset(File); {массив өлшемдерiн оқу, курсорды жаңа жолға көшiру} readln(Fileln,JolSany,BaganSany); {массив элементтерiн жол және баған бойынша оқу} for:=1 to JolSany do read(Fileln,San[i,j]);
close(Fileln); end; Мынаған көңіл аударыңыз, массив элементтерін оқу кезінде, Readln() процедурасын қолданбай, тек қана Read() процедурасы қолданылды. Бұл мүмкін еді, себебі массив элементтерін оқу үшін оның өлшемдері алдын ала белгілі болды. Егер мәтіндік файлдағы элементтер жазбалар саны алдын ала белгісіз болса, онда қайталану саны белгісіз цикл операторларын қолдануға тура келеді. Егер мәтіндік файлдардағы жазбалар саны белгілі болса, онда мәліметтерді оқу онша қиын емес. Ал, егер мәтіндік файлдағы жазбалар саны белгісіз болса ше, онда не істейміз? Егер сізге орындалатын әрекеттердің саны белгісіз болса, онда қайталану саны белгісіз цикл операторларын қолдануға болатындығын білесіз.2.8.2 тақырыбында мәтіндік файлдардың қасиеттерін сипаттаған болатынбыз, онда файлдың соңына файл соңын көсететін белгі код қойылатыны жайлы айтылған. Олай болса, мәліметтерді оқу файлдың соңы табылғанша жалғаса береді. Егер файл бос болса, яғни онда ешқандай жазба жоқ, онда одан мәліметтерді оқуға болмайды. Осы айтылғандарды тұжырымдай келе, алғы шарт циклін қолдану керек екеніне көзіміз жетті. Файл соңы белгісін анықтау үшін, EOF(Name Var)-процедурасын қолданады ағылшын тілінде EndOf File—файл соңы деген сөзден қысқартылып алынған. Жақшаның ішіне assing() процедурасында көрсетілген файлдың нақтылы атымен байланыстыратын айнымалы атауы жазылады. EOF(Name Var)-процедурасының мәні, False(жалған)-болады егер файл соңына жетпеген болса Ture(ақиқат)-болады, егер файлдың соңы анықталған болса. Олай болса, алғы шарт циклін қолданғанда Not EOF(Fileln)-шарты әзірше ақиқат болса, онда цикл орындала береді, яғни файл соңы анықталғанша. Бұл жағдайда мәліметтерді енгізу процедурасы келесідей болады: procdure lnit; var
Fileln:text;
assing(fileln,`mayFile1.in`); {файлды оғуға әзiрлеу} reset(Fileln); {санауыштын бастапқы мәнi} Sanau:=0; While Not EOF(Fileln) do Begin
inc(Sanau);
read(Fileln,San[i]); end; {файлды жабу} close(Fileln); end. Sanau-айнымалысы файлдағы жазбалардың санын анықтауға қызмет атқарады. Бұл айнымалыны ауқымды айнымалылар бөлімінде сипаттаған тиімді. Сол сияқты San[] массиві де ауқымды айнымалылар бөлімінде сипатталады: Var
Sanau: byte; Жазбалар саны белгісіз файлдан мәліметтерді оқу жұмысының дұрыстығын тексеру үшін, оқылған мәліметтер массивін экранға баған түрінде шығарамыз: procedure exi; var
begin
begin
end; end; Егер сіз программа мәтінінің қалған бөлігін дұрыс құрастырыңыз, онда жазбалар саны 100-ден аспайтын мәтіндік файлдан мәліметтерді және жазбалар санын оқитын программа аласыз. Сонымен қатар бұл программа файлдағы барлық жазбалар санын анықтап, оны экранда жазады. Енді екі өлшемді массив мәліметтерін файлдан қалай оқуға болатындығын қарастырыралық. Жоғарыда айтылғандай мәліметтерді файлдан оқу, оның файл соңын анықтайтын белгісіне байланысты екен. Бірақ екі өлшемді массивтерді жазғанда оның элементтері жол бойынша және баған бойынша жазылады. Сондықтан файлдан мәліметтерді оқығанда, алдымен алғашқы жол бойынша файл соңы белгісі анықталады. Жолдағы мәліметтер толығымен оқылып болған соң келесі жолды оқуды бастау керек. Мәтіндік файлдар қасиеттерін қарастырғанда айтылғандай, онда әрбір жол, жол соңы белгісімен кодымен аяақталады. Осы белгіні анықтау үшін стандартты EOLn(Name Var) процедурасын қолданады. EOLn(), ағылшын тілінде End of length жол соңы сөзінің қысқартылған түрі. Жақшаның ішіне assing() процедурасында көрсетілген файлдың нақтылы атымен байланыстыратын айнымалы атауы жазылады. EOLn(Name Var)-процедурасының мәні, False(жалған)-болады, егер жолдың соңына жетпеген болса, Ture(ақиқат)-болады егер жолдың соңы анықталған болса. Олай болса мәліметтерді оқу жалғаса береді егер Not EOF(Fileln) шарты ақиқат болса, яғни жол соңы анықталғанша. Бұл жағдайда мәліметтерді оқу процедурасының түрі келесідей болады: procedure lnit; var
{айнымалы атауын мәтiндiк файл түрiнде сипаттау} Fileln:text; Begin {айнымалыны нақтылы файл атымен байланыстыру} assing(fileln,`mayFile5.in`); {файлды оқуға әзiрлеу} reset(Fileln); {жолда санауыштың бастапқы мәнi} Sanau Jol:=0; {массив элементтерiн жол бойынша оқу} while Not EOF (Fileln)do begin
inc(Sanau Jol); {бағанда санауыштың бастапқы мәнi} SanauBagan:=0; {массив элементтерiн жол бойынша оқу} while Not EOF (Fileln)do begin
inc(Sanau Bagan); {массив элементтерiн оқу} read(Fileln, San[i,j]); end;
read(Fileln, San[i,j]); end;
close(Fileln); end; Типті файл. Типті файлдарға мәліметті жазу Келесі есепті қарастырып көрелік: Мәтіндік файлға төрт таңбалы 50 сан жазу керек. Әрбір сан жеке жолдарға жазылатын болсын. Нәтижесіндегі файлдың өлшемі қандай болады? Оны жуықтап бағалап көрелік. Әрбір таңба 1 байт орын алады. Ондай таңбалардың саны 50×4=200. Мәтіндік файлдарға берген анықтама бойынша әрбір жолдың соңында файл соңы белгісі болғандықтан, файл өлшемі 250 байттан асып кетеді. Бұл мәліметтерді кіші өлшемдегі файлдарда сақтауға бола ма? Біздің программамыз мәліметтерді өңдей алуы үшін, біз оған алдын ала оперативті жадыдан белгілі бір орын бөлуіміз керек. Жадыдан бөлінетін орынның өлшемі мәліметтердің типіне байланысты болғандықтан, бір элементті сақтау үшін, integer типті элементтерге 2 байт, byte типті бір элементке 1 байт орын бөлінеді. Мұндай амалдарды мәліметтерді файлда сақтау кезінде қолдануға бола ма? Болады екен. Типті файл деп аталатын арнайы файлдық типтер бар. Типті файл – барлық элементтері бір типті мәліметтер болып келетін файл түрі. Типті файл элементтері файлдық типетен басқа кез-келген тип бола алады. Әр элементті файлға жазу үшін, мәліметтердің типіне байланысты, міндетті белгіленген мөлшерде орын бөледі. Типті файлдарды смпаттау бөлімінде ашу үшін, мәтіндік файлды смпаттағандай, файл мәліметтерді смпаттайтын тип жазылады.
Біздің жағдайымызда: FileOut:File of interger Бұл жазу, берілген файлдағы мәліметтер – 32768-ден 32767 аралығында жататын бүтін сандар екенін көрсетеді. Сонымен қатар, типті файлдармен жұмыс істегенде де, assign( ) - процедурассының көмегімен нақтылы файл аты мен байланыстыратын атауды көрсетеміз. Assign(<файл атауы>,<файлдың нақты атауы>) Біздің жағдайымызда: Assign(FileOut ,’may.dat’) Типті файлдармен жұмыс жасағанда мәтіндік файлдардағы секілді оларды жазуға және оқуға ашуға болады. Ол үшін стандартты функциялар қолданады: Rewrite(<файл атауы>) – процедурасын файлды жазуға ашады және курсорды файлдың басына орналастырады. Типті файлдарға мәліметтерді жазу write() процедурасы арқылы жүзеге асырылады. Ол мәтіндік файлдардағы write() процедурасына ұқсас. Алайда write() процедурасын типті файлдарда қолдануында біршама өзгешелік бар. Әрекетті орындау кезінде көрсеткіш келесі жазу блогына көшеді. Типті файлдарда writeln() процедурасын қолдану қателік көрсетеді. Типті файлдарға writeln() процедурасын қолдануға болмайды. Типті файлдармен жұмыс аяқталған соң Close<файл атауы>) – процедурасы көмегімен файл жабылады. Енді тақырып басында берілген есепті шешуді жалғастырайық. 2.8.2 тақырыбындағы Мisal_F1 мәліметтерді шығару программасына келесідегідей өзгертулер енгіземіз: Procedure Exi; Var
I :integer; Begin
Rewrite(FileOut);
Write (FileOut, San[i]); Close(f);
Титі файлдар тікелей қатынау файлдарына жатады, ол оның қатал ұйымдастырылғанына байланысты. Бұрында айтып өткеніміздей, типті файлдың компоненттері біркелкі, қатаң тәртіптегі көлемде орын алады. Сонымен тұтас блок бар делік және оған қатынауды ұйымдастырғанда, оған олардың орналасуы жайлы қосымша ақпараттарды сақтау қажет емес. Типті файлдардан мәліметтерді оқуға арналған негізгі проуедураларды қарастырамыз. Типті файлдармен жұмыс жасар алдында, мәтіндік файлдардағыдай, файл атауын жариялау және файлдағы мәліметтердің типін көрсету керек, нақтылы файл атауын байланыстыратын айнымалы атауын сипаттауымыз кереек (2.8.5 тақырыбын қараңыз). Reset(<файл атауы>) – процедурасы файлдф оқуға ашады және көрсеткішті файлдың басына орналстырады. Типті файлдан мәліметтерді оқу үшін read( ) процедурасын қолданады. Берілген процедураның жұмысы кезінде, блоктан мәліметті оқыған соң, көрсеткіш автоматтты түрде келесі жазбаға ауысады. Егер көрсеткіш соңғы жазбаның соңынан тұрса, онда программа орындалуында қателік болады. Бұл қиындықтан шығу үшін FileSize( ) функциясын қолдануға болады. FileSize(<файл атауы>):longint – функциясы файлдағы компоненттер санын анықтайды. Яғни, бізге файлдағы барлық мәліметтерді оқу керек болса, оқу процедурасын FileSize( ) рет орындауымыз керек. Мisal_F8 программасымен құралған типті файлдан мәліметтерді оқудың программасының мәтінінен үзінді келтіреміз: Procedure Init; Var
I, Sanau : integer; San:array[1..100] of integer; begin
reset (FileInput); Sanau :=FileSize(FileInput); For i:=1 to Sanau do Read(FileInput, San [i]); Close(FileInput)’ End; Тақырыптың басында типті файлдар – тікелей қатынау файлдарына жататынын айтып кеткенбіз. Яғни, файлдың кез-келген бөлігіндегі мәліметтерді оқу үшін, оның алдында тұрған мәліметтерді оқуды қажет етпейтін файлдар кездеседі. Көрсеткішті қажетті мәліметті оқуға қою үшін, Seek() – процедурасын қолданады. Оның түрі келесідегідей болады: Seek(<файл атауы>, <жазбаның нөмері>); Сонымен қатар типті файлдарда нөмірлеу нөлден басталатыны есте ұстау керек, яғни бірінші лементтің нөмері "Нөл". Олай болса, біз көрсеткішті үшінші элементті оқуға көшіру үшін, Seek( ) - процедурасын қолдануды ескеруіміз керек. Мысалы: Seek(FileInput, 2); немесе
Өзін тексеру сұрақтары
Әдебиет: (1) бет. 158-167 Тақырып 12. Модульдер ұғымы Дәріс №14. Модульдер Turbo Pascal тілінде модульдерді ұйымдастыру және пайдалану Модуль дегеніміз нақты бір типті есептерді шығаруға арналған тұрақтылар, деректер типтері, айнымалылар, процедуралар мен функциялар жиынтығы. Әрбір модуль әрбір жеке программада әртүрлі құрылымда болады. Модульді кейде кітапхана деп те атайды. Модульді сонымен қатар, біреудің сізге және сіздің қолдануыңызға жазған қарапайым үрдіс деп те қарастыруға болады. Turbo Pascal тілінде стандартты (встроенными) модульдер бар, олардың негізгілері мыналар:
және т.б. Модульдер System, Dos, Overlay, Crt, Printer біріктірілген және Turbo.tpl файлында сақталады. Graph модулі Graph.tpu файлында сақталады. System модулі деректердің кіру – шығу, жолдардың өңделуін және т.б. процедуралары мен функцияларын қолдайды. Dos модулі көбісі MS-DOS командаларына эквивалентті стандартты процедуралар мен функцияларды қамтиды. Overlay модулі Оверлейлер жүйесін қолдауды қамтамасыз етеді. (Оверлей – арнайы программа, негізгі программаға мәндер беріп тұрады) Crt модулі поддерживает ряд стандартных процедур и функций, которые обеспечивают работу с экраном монитора в текстовом режиме, управление звуком и работу с клавиатурой. Printer модулі ақпаратты баспаға басып шығаратын баспа құрылғысының драйверін сақтайды және баспаға шығаруды ұйымдастырады. Graph модулі монитор экранының графиктік режимде жұмыс істеуін қамтамасыз етеді. Процедураны немесе қандай да бір модульді пайдалану үшін оны программаға қосу қажет. Бұл uses бөлімінде орындалады, оның түрі мынадай: uses модуль _ аты_1, модуль_аты_2, …, модуль_ аты_N; System модулі кез – келген программаға автоматты түрде қосылады, сондықтан uses бөлімінде көрсетудің қажеті жоқ. Стандартты модульдер. CRT модулі. GRAPH модулі. Crt модулі 1. Мәтіндік режимді қою Мәтіндік режим компьютердің кодтық кестесінің символдарын көрсету қызметін атқарады және жолдардағы символдар саны мен экрандағы жолдар санымен сипатталады. Мәтіндік режим TextMode(M) процедурасымен орнатылады, мұндағы М – режим.
Курсордың орны жолдың нөмірі мен курсордың координаталары ретінде есептеуге болатын жолдағы позициясымен анықталады. GotoXY(X,Y); процедурасы курсорды (X,Y) координаталы позицияға жылжытады 3. Түсті басқару Келесі үрдістерді пайдалануға болады: TextColor(C); енгізілетін символдардың түсін қою үшін. TextBackGround(C); фонның түсін қою үшін. мұндағы С – түс. Экранды, жолдарды тазалау,жолдарды жою және жолдар қою ClrScr; - экранды толық тазалайды, мұнда курсор экранның сол жақ жоғары бұрышына орналасады. ClrEol; - курсордың тұрған орнынан бастап жолодың соңына дейін барлық символдарды өшіреді. DelLine; - курсор орналасқан жолды жояды, барлық астыңғы жолдарды бір позиция жоғары көтереді. InsLine; - курсор тұрған позициядан бастап, жаңа жол қояды. Программаның орындалуының кідіруі Delay(N); - программаның орындалуын N миллисекундқа кідіртеді. 6. Пернетақтамен жұмыс Әрбір перненің өз коды бар, ол пернетақтаның панелінде перненің орнына тәуелді және пернедегі салынған бейнеге қатысы жоқ..
Дәріс №14.Өзін-өзі тексеру сұрақтары
Дәріс №015. Модуль
Графикалық режимде кез – келген монитор экранындағы бейне көптеген пиксельдерден тұрады. Монитор экранының графикалық режимде жұмыс істеуін графикалық адаптер деп аталатын арнаулы электрондық схема қамтамасыз етеді. Адаптерлердің негізгі иптері: CGA, EGA, VGA SVGA. Графикалық режимнің жұмысын драйвер деп аталатын арнайы программа. ТР драйверлер BGI өсімшелі файлдарда сақталады. Пайдаланылған драйвер әртүрлі режимде жұмыс істеуі мүмкін. 2. Инициализация және графикалық режимнен шығу Graph модулін қосқан соң, алдымен мүмкін бір графикалық режимді орнататын процедура шақырылады. InitGraph(D,M,P); мұнда D – драйверді береді, М – режимді береді, Р – драйвер файлына жол көрсетеді, яғни сәйкес BGI өсімшелі файлға. (Ескерту: Егер драйвер файлы ағымдағы каталогта орналасса жол ретінде '' (екі апостроф)). Графикалық режимнен шығу үшін CloseGraph; процедурасы 3. Координат жүйесі Экранда бейнені тұрғызу үшін координаттар жүйесі қолданылады Графикалық режимде көрінетін курсор жоқ, бірақ көрінбейтін ағымдағы сілтеме бар. Ағымдағы сілтемені жылжыту үшін келесі процедуралар қолданылады:
Боялмаған тікбұрышты сызу Сызық түсі SetColor процедурасымен, стиль мен қалыңдығы SetLineStyle процедурасымен беріледі. Bar(X1,Y1,X2,Y2); Боялған тікбұрышты сызу Бояу кезінде мына шаблонмен анықталатын шаблон мен түс қолданылады: SetFillStyle(N,C); Мұндағы N толтыру стилі, ал С-түсі. 4. Параллелепипед тұрғызу Bar3D(X1,Y1,X2,Y2,D,T); Мұнда D үш өлшемді контурдың тереңдігін береді, Т тікбұрышты параллелепипед төбесін құру керек пе (T=True) , әлде жоқ па (T=False), соны көрсетеді. Сызық түсі SetColor процедурасымен, стиль мен қалыңдығы SetLineStyle процедурасымен беріледі. 5. Шеңбер, доға, эллипстер тұрғызу Circle(X,Y,R); (X,Y) нүктесінде R радиусы бойынша шар салады. Түс SetColor процедурасымен беріледі. Arc(X,Y,B,E,R); Центрі (Х,У) нүктесінде, В бастапқы бұрыштан Е соңғы бұрышқа дейінгі радиусы R болатын доға сызу. Ellipse(X,Y,B,E,XR,YR); В бастапқы бұрыштан Е соңғы бұрышқа дейінгі центрі (Х,У) нүктесінде, Х осі бойынша радиусы ХR болатын, У осі бойынша радиусы YR болатын эллипс сызу. 6. Толтыру түсі мен фон түсі SetBkColor(C); Графикалық режимде фонның түсін қояды. ClearDevice; Графикалық режимде экранды тазалау процедурасы. FloodFill(X,Y,C); SetFillStyle процедурасымен анықталған шектелген облысты ағымды түспен және толтыру стилімен бояйды. (X, Y) – шектелген боялған облыстың ішінде орналасқан нүктелер координаты, С – шектелген облыстың шеттерінің түсі. 7. Мәтінді графикалық режимде шығару OutText(S); Мәтін жолын сілтеменің ағымды жағдайынан бастап шығарады. S – жолдық типтегі айнымалы немесе константа OutTextXY(X,Y,S); (X, Y) – мәтінді шығарудың басының координаттары. Ескерту: Сандық деректерді экранға шығару үшін санды жолға айналдыру қажет. .Өзін-өзі тексеру сұрақтары
GRAPH модулінің қандай процедуралар мен функциялары бар және олар не үшін керек? Әдебиет: (1) бет. 130-140 2>2>1>1>11>8> жүктеу/скачать 0.84 Mb. Достарыңызбен бөлісу: |