Ішкі файлды қолдана отырып бағдарламалау
Мәтіндік файлды құру жіне жұмыс жасау үшін мысалдарды қарастырайық. Мысалы, топтағы информатика пәні бойынша емтихан бағаларының нәтижесі туралы ведомость бар. Оның кіру файлы DAN атымен жұмыс жасайды:
Тегі
| Бағасы | Макулбеков Аким |
5
|
Машрапова Эльмира
|
4
|
Кептербаева Нургул
|
5
|
Аханов Фархад
|
5
|
Насиев Фархат
|
3
|
Садыров Сабыржан
|
4
|
Бағдарлама құру керек. Шығатын файлдың аты REZ, оған бастапқы ведомость ақпаратын жазу керек және орташа баллды есептеу үшін қолданылады.
Топтағы орташа балл 4.17
Студенттің саны 6
Бағдарламаның мәтіні төмендегідей болады:
Program ABC;
Uses CRT;
Var
Finp, Fout: text; {файлдық айнымалы }
N: integer; {студенттерді санау счетчигі }
Sum: real; {баға қосындысы }
Smb: char; {символдық айнымалы}
C: integer; {баға}
Sr: real; {орташа балл}
Begin
ClrScr; {экранды тазалау }
Assign(Finp,'a:\Dan.txt'); {логикалық файлды физикалық файлмен байланыстырыу}
Assign(Fout,'a:\Rez.txt'); {}
Reset(Finp); {Finp ашу}
Rewrite(Fout); {Fout ашу}
N:=0;
Sum:=0;
While not Eoln(Finp) do
begin
Read(Finp, Smb); {Finp оқу}
Write(Fout,Smb); { Fout файлға символды жазу}
If Smb=':'
then
begin
Read(Finp,C); {Finp файлынан бағаны оқу}
Write(Fout,С); {Fout файлына бағаны жазу}
Sum:=Sum+C;
N:=N+1
end
end;
Sr:=Sum/N; {орташа баллды есептеу }
Writeln(Fout,'--------------------------');
Writeln(Fout, 'топтағы орташа балл ', Sr:5:2);
Writeln(Fout, 'топтағы студенттердің саны', N:4);
Writeln('Есептеуді аяқтау');
Writeln(' Rez.txt файлына нәтижені жазу');
Close(Fout); { Файлды жабу}
Close(Finp)
End.
Бағдарламаны орындағаннан кейін дискіде үш файл жазылған болады:
Бастапқы мәліметтің файлы (Dan.txt);
Нәтиже файлы (Rez.txt);
Бағдарлама файлы (ABC.pas)
К О М П О Н Е Н Т Т І К Ф А Й Л Д А Р
Компонеттік немесе типтелген файл – бұл компонентпен көрсетілген немесе хабарланған файл. Компоненттік файл айнымалыдан тұрады. Ақпаратты машиналық түрде сақтайды.
Файлдық типтің түрі келесідегідей болады:
type M= File Of T;
мұндағы М – файлдық типтің аты, Т – компоненттің типі. Мысалы:
type
FIO= String[20];
SPISOK=File of FIO;
var
STUD, PREP: SPISOK;
Мқұндағы STUD, PREP - файлдың аты, оның компоненті жол болып табылады.
Файлды сипаттау айнымалыны сипаттау бөлімінде жазуға болады:
var
fsimv: File of Char;
fr: File of Real;
Файлдың компоненті болып барлық скалярлы тип табылады. Құрылымдық типтен массивтер, жинақтар, жазбалар табылады.
Файлдың компоненттеріне барлық операциялар стандартты процедуралардың көмегімен жасалады:
Reset, Rewrite, Read, Write, Close.
Енгізу-шығару үшін келесі процедуралар қолданылады:
Read(f,X);
Write(f,X);
Мұндағы f – логикалық файлдың аты, Х – айнымалы, масссив, жол, жинақ, жазбалардың біреуі болукы мүмкін.
Компоненттік файлдармен жұмыс жасау үшін енгізу және шығарудың кеңейтілген формасы ұсынылады:
Read(f,X1,X2,...XK)
Write(f,X1,X2,...XK)
Мұндағы f – компоненттік файл, ал Х1, Х2,...ХК f файлының компоненті жазылған типтен тұруы керек.
Т И П С І З Ф А Й Л Д А Р
Типсіз файлдар ЭЕМ-ның жадысының көлемін көресетеді және дискіден жадыға жазу ұрдісімен жұмыс жасайды. Типсіз файлдармен жұмыс жасау үшін BlokRead және BlockWrite процедуралары қолданылады. Соынмен қатар кеңейтілген Reset және Rewrite процедуралар қолданылады. Қалған жағдайларда басқа компоненттік файлдың процедураларын қолданылады.
Логикалық файлды қолданар алдында
var f: File;
физикалық процедура Assign – мен байланысқан болады.
Файлды ашу кезінде буфер ұзындығы үнсіздік бойынша 128 байтты орнатады. TURBO PASCAL тілі буфердің өлшемін өзгертуге мүмкіндік жасайды. Ол кеңейтілген процедура
Reset(var f: File; BufSize: Word сының көмегімен іске асады немесе
Rewrite(var f: File; BufSize: Word ) болады.
BufSize параметрі байттың санын береді. Минимальды мән BufSize – 1 байт, максимальды мән - 64 К байт болады.
Типсіз файлдан мәліметті оқу келесі процедураның көмегімен іске асады.
BlockRead( var f: File; var X; Count: Word; var QuantBlock: Word );
Типсіз файлға мәліметті жазу
BlockWrite( var f: File; var X; Count: Word; var QuantBlock: Word ); процедурасының көмегімен іске асады.
Т І З Б Е К Т Е Й Ж Ә Н Е Т І К Е Л Е Й М Ү М К І Н Д І К
Тізбектей мүмкіндікті фыайлдың мәні әр уақытта мүмкіндік бір компоненттен барлық тізбек бойынша атқарылады. Компонентке К нөмірімен талап жасау үшін, мәндетті түрде файлдың басынан бастап К-1 келесі компонентке дейін қарау керек. К нөміріне талап жасалғаннан кейін келесі компонентке К+1 нөмірі арқылы талап жасалады. Осы жерден жазбаны қалыптастыру үрдісі кезекпен орындалады.
TURBO PASCAL тілі компоненттік файл мен типсіз файлды ауыстыра алады. Ол тікелей мүмкіндік тәсілімен іскее асады. Тікеелей мүмкіндік алдын ала файлда блокты анықтап алу үшін қолданылады. Ол енгізу/шығару операторымен іске асады.
Тікелей мүмкіндікті файл сызықты локтар тізбегінен тұратындығын көресетеді. Егер файл n блоктан тұрса, онда ол 1 ден n-ге дейін нөмірленеді. Сонымен қатар шартты шекара деген түсінік енгізіледі.
Тікелей мүмкіндікті тарату үшін келесі процедураларо қолданылалды FileSize, FilePos, Seek және Truncate.
FileSize( var f ): Longint функциясы f ашылған файлындағы блоктардың санын қайтарады.
FilePos( var f ): Longint функциясы f файлындағы ағымдағы позицияны көрсетеді. Файлдағы позиция бұл шартты шекараның нөмірі.
Seek( var f; N: Longint) процедурасы файлдағы ағымдық позицияның сипаттамасын қамтамасыз етеді.
Truncate( var f ) процедурасы файлдың соңын білдіретін позицияны орнатады.
Мысал. Дискіде мәтіндік файл ID.DAT болсын. Ол нақтылы типтің сандық мәліметін екі саннын жолда сақтап тұрсын. Осындай жұптар 200-ден аспасын. Файлды оқитын, аргументтің мәнін оқитын бағдарлама құру керек. Функцияны бір өлшемді массивте сақтап, олардың санының қанша екенідігін көрсетсін, Экранның бетіне нәтижені RD.DAT компоненттік файлына жазып көрсетсін.
Program F;
var
rArg, rF: Array[1..200] of Real;
inf: Text;
outf: File of Real;
n, l: Integer;
begin
Assign(inf,'ID.DAT');
Assign(outf,'RD.DAT');
Reset(inf);
Rewrite(outf);
n:=0;
while not EOF(inf) do
begin
n:=n+1;
ReadLn(inf,rArg[n],rF[n])
end;
for l:=1 to n do
begin
WriteLn(l:2,rArg[l]:8:2,rF[l]:8:2);
Write(outf,rArg[l], rF[l]);
end;
close(outf)
end.
Мысал. Бүтін типті мәннен тұратын файл мәліметтері бар болсын. Жаңа файлды құру керек. Оған барлық шығатын файлдың компоненттерін жазу керек.
Program Primer;
Var
F1, F2: file of integer;
I,x: integer;
Begin
Assign (f1, “Name1.txt”);
Reset (f1);
Assign (f2, “Name2.txt”);
ReWrite (f2);
I:=0;
While not EOF(f1) do begin
Seek(f1,i);
I:=I+2;
Read(f1, x);
Write (f2, x);
End;
Close (f1);
Close (f2);
End.
Бекіту сұрақтары:
Файл, файлмен жұмыс жасау үшін қойлатын талаптар
Файлдармен жұмыс жасауға қолданылатын процедуралар мен функциялар
Паскаль бағдарламаларының ішінде бағдарламаны ұйымдастыру: процедура және функция
Дәрістің жоспары:
Бағдарлама ішіндегі бағдарлама түсінігі.
Процедуралар
Бағдарлама ішіндегі формальды және нақтылы параметрлер.
Мәндер - параметрлер
Айнымалы - параметрлер
Функциялар
Бағдарлама ішіндегі бағдарлама түсінігі
Бағдарлама ішіндегі бағдарлама дегеніміз – бағдарламалау тілінің операторларының логикалық аты бар аяқталған тізбек. Оларды бағдарламаның кез-келген жеріне қою арқылы қажет деп табылған уақытта шақыруға болады.
Операторлардың үлккен бөлігінен тұратын, үлкен инструкциялардан тұратын бөлікті монолитті бағдарлама деп атайды, процедуралар мен функуциялардан тұратын бөлікті бағдарламаны модульдік бағдарлама деп атайды; Осындай модульдік бағдарламалар өзінен модульдік бағдарламаны шығарады, әдетте олардың құрылымы иерархиялық құрылым бойынша жұмыс жасайды. Моудльдік бағдарламалар және бағдарлама түсінікті және жұмыс жасау үшін ыңғайлы болуы үшін қолданылады.
Әр бағдарлама ішіндегі бағдарлама атауына байланысты болады. Паскаль тілінде екі бағдарлама ішіндегі бағдарлама типінен тұрады. Олар процедуралар және функциялар.
Процедура және функция – сипаттау және операторлардың атауы бар тізбегі. Процедура немесе функцияны қолдану кезінде Паскаль тілінде процедура немесе функция мәтіні және оған талап жасау операторы болуы шарт. Процедура және функция мәтіні процедура мен функцияны сипаттау бөлімінде жазылады.
Процедура және функция арқылы жиі қолданылатын алгоритмдерді рәсімдеп қоюға болады. Ол бірнеше рет қолдану үшін бірнеше рет жазба бермес үшін қолданылады. Процедура жауап ретінде бірнеше мәнді бере алады, ал функция бір ғана жауапты бере алады. Процедура мен функциямен жұмым жасау екі бөліктен тұрады:
1) процедураны және функцияны сипаттау;
2) оны орындау үшін шақыру;
Достарыңызбен бөлісу: |