Оқу-ҽдістемелік материалдар «алгоритмдеу жҽне бағдарламалау негіздері» Баспа



Pdf көрінісі
бет7/11
Дата28.01.2017
өлшемі1,33 Mb.
#2921
1   2   3   4   5   6   7   8   9   10   11

 
9.2 Мәтіндік файлға мәліметтер жазу. 
Екі өлшемді массив 
 
Алдыңғы  тақырыпта  мҽтіндік  файлдарды  ашуды,  оған  ақпараттарды 
жазуды  ҥйреніңіздер.  Write()-  процедурасын  пайдаланып  мҽліметтерді  бір 
жолға, ал writeln()—процедурасын пайдаланып оларды бағанға жазуды кҿрдік. 
Осы білгендерімізді пайдаланып, келесі есепті шешіп кҿрелік: 
Пернетақтадан,  ҿлшемі  100х100,  элементтері  бҥтін  сан  болатын,  екі 
ҿлшемді  массив  енгізіледі.  Осы  массивті  элементтерінің  орналасу  реті 
бойынша,  `МayFile5.in`  атымен,  мҽтіндік  файл    тҥрінде  жазатын,  программа 
жазу керек. 
Бҧл есеп те, алдыңғы тақырыпта қарастырылған есепке ҧқсас, екі негізгі 
кезеңнен тҧрады:  
1.Пернетақтадан мҽліметтерді енгізу 
2.Оларды атауы `МayFile5.in` болатын, файлға жазу керек.  
Бірінші кезеңді орындау ҥшін : 
־
 
Пернетақтадан енгізілетін, массив ҿлшемдерінің нақты мҽндерін кіргізу; 
־
 
Массив  ҿлшемдерін  біле  отырып  параметрлі  цикл  операторын  қолданып 
массив элементтеріне нақты мҽндерді меншіктеу. 
Мҽліметтерді  енгізу  процедурасының  мҽтінін  Misal_8  программасынан 
алуға  болады.  Ал  мҽліметтерді  ҿңдеу  процедурасы  ҿзгеріссіз  қалатындықтан, 
Misal_F1программасындағыдай болады. 
Массив  элементтерін    `МayFile5.in`  файлына  жазу  процедурасының 
қандай болатындығын қарастыралық: 
procedure exi; 
var 
FileOut: text; 
begin 
{нақтылы файлмен айнымалы арасындағы байланыс} 
assing (FileOut,`mayFile.in`); 
{файлды жазуға дайындау} 
rewrite(FileOut);  
{массив ҿлшемдерiн жазу жҽне курсорды жаңа жолға кҿшiру} 
writeln(FileOut, JolSany,``, BaganSany); 

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 70-сі 
 
 
70 
for i=1 to JolSany do 
begin 
{массив элементтерiн бос орын арқылы жолға жазу} 
for j=1 to BaganSany do 
write(FileOut,San[i,j],``); 
{j-циклiн аяақтаған соң, курсорды жаңа жолға кҿшiру} 
writeln(Fileout); 
end; 
{файлды жабу} 
close(FileOut); 
end; 
Негiзгi  программа  мҽтiнiнiң  ҿзгерiсiз  қалатындығын  айтпаса  да  болады. 
Осы    программаны  Misal_F5  атымен  сактаңыз.  Программаны  iске  қосу  ҥшін 
алдымен, келесi ҽрекеттердi: 
־
 
Курсорды Exi процедурасын сипаттайтын жолдың басына қойыңыз; 
־
 
Негiзгi менюдi Debug iшкi менюiн ашыңыз; 
־
 
Add brekpoint… әрекетiн тандаңыз; 
־
 
Enter пернесiн басыңыз. 
Экранға  Add  brekpoint…  (тоқтату  нҥктесiн  қосу)  сұхбат  терезесi 
шығады    (2.8-сурет).‖Line  number‖  (жол  нөмері)өрісінде,  курсор  тұрған 
жолдвң  нөмірін  көрсетіп  тұрады,  ол  Exi    процедурасын  сипаттайтын 
жолдың басын көрсетеді. 
־
 
―Ok‖  батырмасын  (сұхбат  терезесіндегі)  немесе  ―Enter‖    пернесін 
басыңыз. 
Редактор  терезесіндегі  бұл  жол  басқа  тҥспен  бөлінеді.  Енді  Ctrl+F9 
пернелерін  басу  арқылы  программаны  іске  қосыңыз.  Пернетақтадан 
бастапқы  мәндерді  енгізіңіз.  Мәліметтерді  енгізген  соң  программа 
жұмысын  тоқтатады  және  компьютердің  экранында  қайтадан  редактор  
терезесі  шығады.  Яғни,  біз  өзіміздің  әрекеттеріміз  арқылы  программа 
жұмысын көрсетілген жолда тоқтатуға нұсқау бердік. Жұмысты қайтадан 
жалғастырву  ҥшін    ―Ctrl+F9‖  пернелерін  басуымыз  керек  немесе  F7 
пернесін  пайдаланған  тиімді  және  Exi  процедурасының  қалай  жұмыс 
істейтінін бақылап көре аламыз. 
Бұл  әрекеттер,  программаның  жеке  бөліктерімен  жұмыс  жасағанда 
(жҥріп өткенде) тиімді, себебі ҥлкен өлшемді программаларды толығымен 
жҥріп өту жалықтырады және керек емес. Олай болса, программалаудың 
құрылымдылық тәсілін (1.5 тақырып) қолдай отырып бізде бары: 
1.
 
Жеке модульдермен ―жҧмыс істеу‖ (программалау) мҥмкіндігі. 
2.
 
Бір  деңгейдегі  ―ойша‖  машиналардың  тҽуелсіздігі,  программаның 
жекеленген  бҿліктерін, программаш\ның басқа бҿліктеріне ҽсер етпей тҽуелсіз 
жетілдіруге  мҥмкіндік  береді.  Э.  Дейкстр  атап  ҿткендей:  ―...  программаны 
жетілдіру,  бір  тҥрдегі  (ойша)  машиналардың  басқа  қолайлы  машиналарға 
ауысуынан туындайды‖. 

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 71-сі 
 
 
71 
3.
 
Қҧрылымдылық программаның жеке бҿліктерімен жҧмыс жасау. 
Процедура  мҽтінімен  жҥріп  ҿткенде  қҧрама  операторлардың  жҧмысына 
кҿңіл бҿліңіз. 
begin  
{массив элементтерiн бос орын аркылы жолга жазу} 
for j:=1 to BaganSany do 
write (FileOut, San[i,j],``); 
{j-цикл аякталган сон, курсорды жана жолга кошiру} 
writeln(FileOut); 
end; 
Тоқтату нҥктесін алып тастау ҥшін, келесі ҽрекеттерді орындаймыз: 
־
 
Негізгі менюді бес\лсенділеңіз; 
־
 
Негізгі менюден Debug   ішкі менюін ашыңыз; 
־
 
Breakpoints пернесін басыңыз. 
־
 
Enter пернесін басыңыз. 
Экранда программаға қойылған барлық тоқтату нҥктелерінің тізімі 
кҿһрсетілген,  Breakpoints… (тоқтату нҥктелерісҧхбат терезесі (2.9-сурет) 
шығады. 
־
 
Қажетті элементті белгілеңіз; 
־
 
―Delete‖ (сҧхбат терезесінен) батырмасын немесе  ―D‖ 
(пернетақтадан) пернесін басыңыз. 
Белгіленген тоқтату нҥктесі тізімнен алынып тасталадыЕгер сіз барлық 
тоқтату нҥктесін алып тастағыңыз келсе--   ―Clear all‖ батырмасын басу керек.  
 
9.3 Мәтiндiк файлдан мәлiметтердi оқу 
 
Ҿткен  тақырыптарда  сіздер,  мҽліметтерді  мҽтіндік  файлға  жазуды 
ҥйреніңіздер.  Енді  оларды  қайтадан  файлдан  қалай  оқуға  болатынын 
қарастырамыз. 
Ол ҥшін `mayFile1/in`  файлын пайдаланамыз. Мҽліметтерді файлға жазу 
кезіндегідей,  біздің  файлмызды  байланыстыратын  айнымалыға  атау  беруіміз 
керек.  Айталық,  ол  атау  Fileln  болсын,  содан  кейін  біз  оны  мҽтіндік  файл 
ретінде  сипаттауымыз  керек.  Бҧл  айнымалыны  біз  енгізу  процедурасында 
пайдаланатын болғандықтан, сол процедураның жергілікті айнымалысы ретінде 
сипаттаймыз. 
                                                           var 
      Filelnt:text; 
Одан кейін біз программада, ―мҽтіндік типті ‖ Fileln айнымалысы, біздің 
`mayFile1.in`  атауымен  берілген  нақтылы  файлмызды  белгілейтіндігін 
кҿрсетуіміз 
керек. 
Ол 
ҥшін 
assing(NameVar,NameFile)-процедурасын 
қолданады. 
Енді  файлдан  мҽліметтерді  оқу  ҥшін,  берілген  файлды  ашуымыз  керек. 
Ол  ҥшін,  reset(NameVar)—процедурасында  қолданады,  мҧндағы    NameVar-

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 72-сі 
 
 
72 
сіздің файлды белгілеуге берген айнымалыңыздың атауы, біздің жағдайымызда, 
ол NameVar-Fileln. Reset(NameVar)-процедурасы, мҽліметтерді оқуға файлды 
ашады жҽне курсорды файлдың басына орналастырадв. Егер ондай жоқ болса, 
қателік туралы хабарлама  береді.      Енді мҽліметтерді файлдан оқуға барлығы 
дайын  болды.  Ол  ҥшін  ҿзімізге  бҧрынан  таныс    Read()  жҽне    Readln() 
процедураларын пайдаланамыз. Мҽліметтерді оқу пернетақтадан емес, файлдан 
жҥзеге  асу  ҥшін,  мҽліметтерді  оқудың  жолын  кҿсетеміз.  Яғни,  жақшалардың 
ішіне, assing()- процедурасының кҿмегімен біздің файлмызды байланыстырып 
тҧрған, айнымалының атауын кҿрсетеміз. 
 `MayFile.in`файлындағы  бірінші  сан,  файлдағы  барлық  сандардардың 
мҿлшерін кҿрсетеді. Сондықтан, алдымен файлдан 
Sanau  айнымалысының  мҽнін  оқытамыз,содан  кейін  параметрлі  циклді 
қолданып,  файлдағы  сандардың  мҽндерін  оқимыз.  Мҽліметтер  толық  оқылып 
болған  соң,  ҿзімізге  таныс  Close()  процедурасын  пайдаланып,  файлды  жабу 
керек.  
Енді,  мҽліметтерді  фйалдан  оқу  процедурасы  қандай  болатындығын 
кҿрелік:  
procedure lnit; 
var 
i:byte; 
Fileln:text; 
begin 
assing(fileln,`mayFile1.in`); 
reset(Fileln); 
readln(Fileln,Sanau); 
for i:=1 to Sanau do 
read(Fileln,San[i]); 
close(Fileln); 
end; 
Дҽл  осындай,  егер  ҿлшемдері  белгілі  болса,  мҽліметтерді  екі  ҿлшемді 
массивтен  оқу  да  онша  қиыншылық  туғызбайды.  `MayFile.in5`  файлынан 
мҽліметтерді оқитын программадан ҥзінді мысалға келтірейік: 
procedure lnit; 
var 
i,j:byte; 
{айнымалы атауын мҽтiндiк файл тҥрiнде сипаттау} 
Fileln  :text; 
begin 
{айнымалыны нақтылы файл атымен байланыстыру} 
assing(Fileln,`mayFile5.in`); 
{файлды оқуға ашу} 
reset(File); 
{массив ҿлшемдерiн оқу, курсорды жаңа жолға кҿшiру} 

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 73-сі 
 
 
73 
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 
{айнымалы атауын мҽтiдiк файл тҥрiнде сипаттау} 
Fileln:text; 
Begin 
{айнымалыны нақтылы файл атымен байланыстыру} 
assing(fileln,`mayFile1.in`); 
{файлды оғуға ҽзiрлеу} 
reset(Fileln); 
{санауыштын бастапқы мҽнi} 
Sanau:=0; 

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 74-сі 
 
 
74 
While  Not EOF(Fileln) do 
Begin 
{санауыштын мҽнiн бiрге арттыру} 
inc(Sanau); 
{массивтен элементтердi оқу} 
read(Fileln,San[i]); 
end; 
{файлды жабу} 
close(Fileln); 
end. 
 
Sanau-айнымалысы  файлдағы  жазбалардың  санын  анықтауға  қызмет 
атқарады.  Бҧл  айнымалыны  ауқымды  айнымалылар  бҿлімінде  сипаттаған 
тиімді.  Сол  сияқты  San[]  массиві  де  ауқымды  айнымалылар  бҿлімінде 
сипатталады: 
                                        Var 
San: arry[1…100] of  integer; 
                                        Sanau: byte; 
Жазбалар саны белгісіз файлдан мҽліметтерді оқу жҧмысының  
дҧрыстығын тексеру ҥшін, оқылған мҽліметтер массивін экранға баған тҥрінде 
шығарамыз: 
 
procedure exi; 
                                                     var 
                                                     i: byte; 
                                                     begin 
                                                     for i:=1 to Sanau do 
                                                     begin 
                                                     writeln(San[i]); 
                                                  end
                                              end; 
Егер  сіз  программа  мҽтінінің  қалған  бҿлігін  дҧрыс  қҧрастырыңыз,  онда 
жазбалар саны 100-ден аспайтын мҽтіндік файлдан мҽліметтерді жҽне жазбалар 
санын  оқитын  программа  аласыз.  Сонымен  қатар  бҧл  программа  файлдағы 
барлық жазбалар санын анықтап, оны экранда жазады. 
Енді  екі  ҿлшемді  массив  мҽліметтерін  файлдан  қалай  оқуға 
болатындығын қарастырыралық. Жоғарыда айтылғандай мҽліметтерді файлдан 
оқу,  оның  файл  соңын  анықтайтын  белгісіне  байланысты  екен.  Бірақ  екі 
ҿлшемді  массивтерді  жазғанда  оның  элементтері  жол  бойынша  жҽне  баған 
бойынша  жазылады.  Сондықтан  файлдан  мҽліметтерді  оқығанда,  алдымен 
алғашқы  жол  бойынша  файл  соңы  белгісі  анықталады.  Жолдағы  мҽліметтер 
толығымен  оқылып  болған  соң  келесі  жолды  оқуды  бастау  керек.  Мҽтіндік 
файлдар  қасиеттерін  қарастырғанда  айтылғандай,  онда  ҽрбір  жол,  жол  соңы 

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 75-сі 
 
 
75 
белгісімен  кодымен  аяақталады.  Осы  белгіні  анықтау  ҥшін  стандартты  
EOLn(Name Var) процедурасын қолданады.  EOLn(), ағылшын тілінде End of 
length  жол  соңы  сҿзінің  қысқартылған  тҥрі.  Жақшаның  ішіне    assing() 
процедурасында  кҿрсетілген  файлдың  нақтылы  атымен  байланыстыратын 
айнымалы  атауы  жазылады.  EOLn(Name  Var)-процедурасының  мҽні,  
False(жалған)-болады,  егер  жолдың  соңына  жетпеген  болса,    Ture(ақиқат)-
болады  егер  жолдың  соңы  анықталған  болса.  Олай  болса  мҽліметтерді  оқу 
жалғаса  береді  егер    Not  EOF(Fileln)  шарты  ақиқат  болса,  яғни  жол  соңы 
анықталғанша. Бҧл жағдайда мҽліметтерді оқу процедурасының тҥрі келесідей 
болады: 
procedure lnit; 
var 
i: byte; 
{айнымалы атауын мҽтiндiк файл тҥрiнде сипаттау} 
Fileln:text; 
Begin 
{айнымалыны нақтылы файл атымен байланыстыру} 
assing(fileln,`mayFile5.in`); 
{файлды оқуға ҽзiрлеу} 
reset(Fileln); 
{жолда санауыштың бастапқы мҽнi} 
 
Sanau Jol:=0; 
{массив элементтерiн жол  бойынша оқу} 
while Not EOF (Fileln)do 
begin                      
{санауыштың мҽнiн бiрге арттыру} 
inc(Sanau Jol); 
{бағанда санауыштың бастапқы мҽнi} 
SanauBagan:=0; 
{массив элементтерiн жол  бойынша оқу} 
while Not EOF (Fileln)do 
begin                      
{санауыштың мҽнiн бiрге арттыру} 
inc(Sanau Bagan); 
 
{массив элементтерiн  оқу} 
read(Fileln, San[i,j]); 
end; 
{курсорды жаңа жолдың басына қою} 
read(Fileln, San[i,j]); 
end; 
{файлды жабу} 

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 76-сі 
 
 
76 
close(Fileln); 
end; 
10 Типті файл. Типті файлдарға мәліметті жазу 
 
Келесі есепті қарастырып кҿрелік: 
Мҽтіндік  файлға  тҿрт  таңбалы  50  сан  жазу  керек.  Ҽрбір  сан  жеке 
жолдарға жазылатын болсын. Нҽтижесіндегі файлдың ҿлшемі қандай болады? 
Оны  жуықтап  бағалап  кҿрелік.  Ҽрбір  таңба  1  байт  орын  алады.  Ондай 
таңбалардың  саны  50×4=200.  Мҽтіндік  файлдарға  берген  анықтама  бойынша 
ҽрбір  жолдың  соңында  файл  соңы  белгісі  болғандықтан,  файл  ҿлшемі  250 
байттан асып кетеді. 
Бҧл мҽліметтерді кіші ҿлшемдегі файлдарда сақтауға бола ма? 
Біздің  программамыз  мҽліметтерді  ҿңдей  алуы  ҥшін,  біз  оған  алдын  ала 
оперативті  жадыдан  белгілі  бір  орын  бҿлуіміз  керек.  Жадыдан  бҿлінетін 
орынның  ҿлшемі  мҽліметтердің  типіне  байланысты  болғандықтан,  бір 
элементті  сақтау  ҥшін,  integer  типті  элементтерге  2  байт,  byte  типті  бір 
элементке 1 байт орын бҿлінеді. 
Мҧндай  амалдарды  мҽліметтерді  файлда  сақтау  кезінде  қолдануға  бола 
ма? Болады екен. Типті файл деп аталатын арнайы файлдық типтер бар. 
Типті  файл  –  барлық  элементтері  бір  типті  мҽліметтер  болып  келетін 
файл тҥрі. Типті файл элементтері файлдық типетен басқа кез-келген тип бола 
алады. 
Ҽр  элементті  файлға  жазу  ҥшін,  мҽліметтердің  типіне  байланысты, 
міндетті  белгіленген  мҿлшерде  орын  бҿледі.  Типті  файлдарды  смпаттау 
бҿлімінде  ашу  ҥшін,  мҽтіндік  файлды  смпаттағандай,  файл  мҽліметтерді 
смпаттайтын тип жазылады. 
<файл атауы>:file of<мәліметтер типі> 
Біздің жағдайымызда: 
 
FileOut:File of interger 
 
Бҧл  жазу,  берілген  файлдағы  мҽліметтер  –  32768-ден  32767  аралығында 
жататын бҥтін сандар екенін кҿрсетеді.  
Сонымен  қатар,  типті  файлдармен  жҧмыс  істегенде  де,  assign(  )  
процедурассының кҿмегімен нақтылы файл аты мен байланыстыратын атауды 
кҿрсетеміз. 
Assign(<файл атауы>,<файлдың нақты атауы>) 
Біздің жағдайымызда: 
Assign(FileOut ,‘may.dat‘) 
Типті файлдармен жҧмыс жасағанда мҽтіндік файлдардағы секілді 
оларды жазуға жҽне оқуға ашуға болады. Ол ҥшін стандартты функциялар 
қолданады: 
Rewrite(<файл  атауы>)  –  процедурасын  файлды  жазуға    ашады  жҽне 

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 77-сі 
 
 
77 
курсорды файлдың басына орналастырады. 
Типті  файлдарға  мҽліметтерді  жазу  write()  процедурасы  арқылы  жҥзеге 
асырылады.  Ол  мҽтіндік  файлдардағы  write()  процедурасына  ҧқсас.  Алайда 
write()  процедурасын  типті  файлдарда  қолдануында  біршама  ҿзгешелік  бар. 
Ҽрекетті  орындау  кезінде  кҿрсеткіш  келесі  жазу  блогына  кҿшеді.  Типті 
файлдарда writeln() процедурасын қолдану қателік кҿрсетеді. 
Типті файлдарға writeln() процедурасын қолдануға болмайды. 
Типті  файлдармен  жҧмыс  аяқталған  соң  Close<файл  атауы>)  – 
процедурасы кҿмегімен файл жабылады. 
Енді  тақырып  басында  берілген  есепті  шешуді  жалғастырайық.  2.8.2 
тақырыбындағы  Мisal_F1  мҽліметтерді  шығару  программасына  келесідегідей 
ҿзгертулер енгіземіз: 
Procedure Exi; 
Var 
FileOut        :File of integer; 
I                   :integer; 
Begin 
Assign (FileOut, ‗mayFile.in‘); 
Rewrite(FileOut); 
For i:=1 to Sanau do 
                Write (FileOut, San[i]); 
                 Close(f); 
                 End; 
Программаны толықтырып жазып Мisal_F8 атымен сақтаңыз. Программа 
орындалғаннан кейін "mayFile.in" файлын ашып кҿріңіз. Не кҿрдіңіз? 
 
10.1 Типті файлдан мәліметтерді оқу 
 
Титі  файлдар    тікелей  қатынау  файлдарына  жатады,  ол  оның  қатал 
ҧйымдастырылғанына  байланысты.  Бҧрында  айтып  ҿткеніміздей,  типті 
файлдың  компоненттері  біркелкі,  қатаң  тҽртіптегі  кҿлемде  орын  алады. 
Сонымен  тҧтас  блок  бар  делік  жҽне  оған  қатынауды  ҧйымдастырғанда,  оған 
олардың орналасуы жайлы қосымша ақпараттарды сақтау қажет емес. 
Типті  файлдардан  мҽліметтерді  оқуға  арналған  негізгі  проуедураларды 
қарастырамыз. 
Типті файлдармен жҧмыс жасар алдында, мҽтіндік файлдардағыдай, файл 
атауын  жариялау  жҽне  файлдағы  мҽліметтердің  типін  кҿрсету  керек,  нақтылы 
файл  атауын  байланыстыратын  айнымалы  атауын  сипаттауымыз  кереек  (2.8.5 
тақырыбын қараңыз). 
Reset(<файл  атауы>)  –  процедурасы  файлдф  оқуға  ашады  жҽне 
кҿрсеткішті файлдың басына орналстырады. 
Типті  файлдан  мҽліметтерді  оқу  ҥшін  read(  )  процедурасын  қолданады. 

ПОҼК 042-11.1.20/03-2014
 
Баспа  №1 кҥні 11.09.2014 ж.  121 беттің 78-сі 
 
 
78 
Берілген  процедураның  жҧмысы  кезінде,  блоктан  мҽліметті  оқыған  соң, 
кҿрсеткіш  автоматтты  тҥрде  келесі  жазбаға  ауысады.  Егер  кҿрсеткіш  соңғы 
жазбаның соңынан тҧрса, онда программа орындалуында қателік болады. 
Бҧл қиындықтан шығу ҥшін FileSize( ) функциясын қолдануға болады. 
FileSize(<файл  атауы>):longint  –  функциясы  файлдағы  компоненттер 
санын анықтайды. Яғни, бізге файлдағы барлық мҽліметтерді оқу керек болса, 
оқу  процедурасын  FileSize(  )  рет  орындауымыз  керек.  Мisal_F8 
программасымен 
қҧралған 
типті 
файлдан 
мҽліметтерді 
оқудың 
программасының мҽтінінен ҥзінді келтіреміз: 
 
Procedure Init; 
Var 
FileInput : file of integer; 
I, Sanau : integer; 
San:array[1..100] of integer; 
 
begin 
 
assign(FileInput, ‗mayFile.in‘); 
reset (FileInput); 
Sanau :=FileSize(FileInput); 
For i:=1 to Sanau do 
Read(FileInput, San [i]); 
Close(FileInput)‘ 
End; 
 
Тақырыптың  басында  типті  файлдар  –  тікелей  қатынау  файлдарына 
жататынын айтып кеткенбіз. Яғни, файлдың кез-келген бҿлігіндегі мҽліметтерді 
оқу  ҥшін,  оның  алдында  тҧрған  мҽліметтерді  оқуды  қажет  етпейтін  файлдар 
кездеседі. 
Кҿрсеткішті  қажетті  мҽліметті  оқуға  қою  ҥшін,  Seek()  –  процедурасын 
қолданады. Оның тҥрі келесідегідей болады: 
 
Seek(<файл атауы>, <жазбаның нөмері>); 
 
Сонымен қатар типті файлдарда нҿмірлеу нҿлден басталатыны есте 
ҧстау керек, яғни бірінші лементтің нҿмері "Нҿл". Олай болса, біз 
кҿрсеткішті ҥшінші элементті оқуға кҿшіру ҥшін, Seek( ) -  процедурасын 
қолдануды ескеруіміз керек. Мысалы: 

Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10   11




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

    Басты бет