- Преподавателю
- Информатика
- Паскаль тілінде есептер шығаруда файлдармен жұмыс
Паскаль тілінде есептер шығаруда файлдармен жұмыс
Раздел | Информатика |
Класс | 9 класс |
Тип | Другие методич. материалы |
Автор | Айтбаев С.Ш. |
Дата | 24.02.2016 |
Формат | docx |
Изображения | Нет |
Қазақстан Республикасы Білім және Ғылым министрлігі ЖАМБЫЛ ОБЛЫСЫ Т.РЫСҚҰЛОВ АУДАНЫ
Ақтоған орта мектебі
Әдістемелік құрал
Паскаль тілінде есептер шығаруда файлдармен жұмыс
Информатика пәнініңмұғалімі:
Айтбаев Серик Шакенович
2013 - 2014 оқу жылы
Паскаль тілінде есептер шығаруда файлдармен жұмыс
Файлдық тип, сыртқы тасымалдаушыда орналасқан бір типтегі компонентер тізбегінен тұратын Паскаль тіліндегі мәліметтер болып табылады. Ондағы компоненттердің типі файлдық типтен басқа кез-келген бола алады. Паскальда файлдық типтегі айнымалылар ақпаратты енгізу-шығару үшін қолданылады. Ақпаратты енгізу-шығару алдында файлдық айнымалы ASSIGN процедурасының көмегімен сыртқы файлмен байланысқан болуы тиіс. Бұл файл кез-келген дискіде, каталогта болуы мүмкін. Осы файлды оқу немесе оған жазу үшін ол ашық болуы керек. Сонан соң енгізу-шығаруды орындауға болады.
Файлдардың 3 тобы болады: текстік (тип ТЕХТ), типтік (FILE OF <тип>), типтік емес (FILE). Олармен жұмыс істеу бір-бірінен ерекшеленеді.
Әдетте барлық файлдарды тізбектей, ретпен ену мүмкіндігіне ие файлдар дейді. Көңіл аударыңыз: SEEK процедурасының көмегімен типтік және типтік емес файлдар үшін ретсіз ену режимін орнатуға болады. Бұл кезде файл компоненттерін нөмірлеу нөлден басталады. Жұмыс аяқталған соң файл CLOSE процедурасымен жабылуы тиіс.
Барлық файлдар үшін қолданылатын стандартты процедуралар мен функциялар:
ASSIGN (F, NAME) - файлдық айнымалы F-ті сыртқы NAME файлымен байланыстыру.
CHDIR (PATH) - ағымдағы директорияны өзгерту.
CLOSE (F) - ашылған файлды жабу.
ERASE (F) - сыртқы файлды жою.
MKDIR (PATH) - каталог құру.
RENAME (F,NEW) - сыртқы файлдың атын өзгерту.
RESET (F[,SIZE]) - алдын-ала бар файлды ашу.
REWRITE (F[,SIZE]) - бос, жаңа файл ашу. Оған ASSIGN процедурасында көрсетілген атау беріледі. Егер ондай файл бар болса, онда ол файл өшіріледі.
RMDIR (PATH) - бос каталогты жою.
EOF (F) - файл соңы.
Текстік файлдар жолдарға бөлінген символдар жиынтығынан тұрады. Әрбір жолдың соңында жол соңын білдіретін белгі болады. Текстік файлдармен жұмыс істеу ерекшелігі мынада: мәндері READ немесе WRITE процедуралары арқылы енгізілетін және шығарылатын CHAR немесе STRING типтерімен қатар жай типтердің бірінде: бүтін, нақты, логикалық (тек жауапқа шығаруда) бола алады.
Бұл процедуралар ASCII-жолдармен де жұмыс істей алады. Текстік файлдар үшін, программаны іске қосқанда автоматты түрде жабылатын екі стандартты файлдық айнымалы бар. Олар: INPUT - клавиатурамен байланыс; OUTPUT - дисплей экранымен байланыс.
Егер ТЕХТ типіндегі файлдармен жұмыс жұмыс барысында файлдық айнымалы көрсетілмесе, онда файлдық айнымалы INPUT немесе OUTPUT қолданылуда деп есептейді. Текстік файлды оқу үшін RESET процедурасымен, не оған жазу үшін REWRITE немесе APPEND процедураларының бірімен ашу керек.
Текстік файлдармен жұмыс істейтін процедуралар мен функциялардың сипаттамалары:
APPEND (F) - файлды ашу және соңына жаңа ақпарат енгізу.
READ (F, <тізім>) - файлдан оқу.
READLN (F, <тізім>) - файлдан жолдарды оқу.
WRITE (F, <тізім>) - файлға жазу.
WRITELN (F, <тізім>) -файлға жолдарды жазу.
EOLN (F) - файл жолының соңы.
SEEKEOF (F) - файл соңы.
SEEKOLN (F) - файл жолының соңы.
Типтік файлдармен жұмыс істегенде мынадай қосымша процедуралар мен функциялар қолданылады:
READ (F, <тізім>) - файлдан типтері көрсетілген компонентерді оқу.
SEEK (F, NUM) - файлдың нөмірі көрсетілген компонентіне орналастыру.
TRUNCATE (F) - ағымдағы компоненттен бастап файлдың бөлігін жою.
WRITE (F, <тізім>) - типтері көрсетілген компоненттерді файлға жазу.
FILEPOS (F) - файлдың ағымдағы компонентінің номері.
FILESIZE (F) - файлдың ағымдағы компонентінің өлшемі.
Типтік емес файлдармен жұмыс істегенде мынадай қосымша процедуралар мен функциялар қолданылады:
BLOCKREAD (F, BUF, N [,RESULT]) - файлдан компонентерді оқу.
SEEK (F, NUM) - файлдың нөмірі көрсетілген қажетті компонентіне орнату.
TRUNCATE (F) - ағымдағы компоненттен бастап файлдың бөлігін жою.
BLOCKWRITE (F, BUF, N [,RESULT]) - типтері көрсетілген компоненттерді файлға жазу.
FILEPOS (F) - файлдың ағымдағы компонентінің номері.
FILESIZE (F) - файлдың ағымдағы компонентінің өлшемі.
Бірнеше мысалдар қарастырайық. Мазмұны мына суретте көрсетілген екі файл берілсін.
Файл аты: SAN
Файл аты: ARIP
1 3 5 6 7 8
2 4 4 4
3 2 6 2 2
4 3 3 3 3 3 3
5 7 7 7 7 7 7
6 9 9 9 9 9 9
7
3
1
Ata Apa Ana Papa
Almaty
Astana.
Kazakhstan
1-есеп: Әрбір элементін еселеу арқылы SAN файлын оқу.
Бұл есепті шешу үшін енгізу және шығару файлдарын текстік файл ретінде сипаттаймыз. SAN файлы алдын-ала құрылып, мәліметтермен толтырылған. Оны файлдық айнымалы F1-мен байланыстырамыз да, оқу үшін ашамыз.
ASSIGN (F1,'SAN');
RESET (F1);
F2 айнымалысын бос жолдың көмегімен стандартты шығару құрылғысымен (дисплей экранына) байланыстырамыз және оны жауапқа шығарамыз.
ASSIGN (F2,' ');
REWRITE (F2);
Дисплей орнына DOS форматындағы кез-келген файлдың атын көрсетуге болады. Сонан соң F1 файлының элементтерін оқитын және оларды бос орын арқылы F2 файлына жазатын цикл ұйымдастырамыз. Ол цикл, EOF (F1) функциясының көмегімен F1 файлының сңы табылғанша орындалады. Жұмыс соңында екі файлды да жабамыз.
Program Esep1;
Var F1, F2: text;
x: char;
begin
assign (F1,'C:\Esepter\SAN.txt');
reset (F1);
assign (F2,'C:\Esepter\Esepter1-output.txt');
Rewrite (F2);
while not eof (F1) do
begin
read (F1,x);
Write (F2,x+''+x);
End;
Writeln;
Close (F1);
Close (F2);
End.
Айнымалылар:
F1, F2 - текстік файлдар;
Х - файл элементі.
Өңделген SAN файлы мына түрде жауапқа шығарылады. Әрбір символ бос орын арқылы еселенеді.
11 33 55 66 77 88
22 44 44 44
33 22 66 22 22
44 33 33 33 33 33 33
55 77 77 77 77 77 77
66 99 99 99 99 99 99
77
33
11
2-есеп: «a» әрпін еселеу арқылы ARIP файлын оқыңдар.
Program Esepter2;
Var F1, F2: text;
x: char;
begin
assign (F1,'C:\Esepter\ARIP.txt');
reset (F1);
assign (F2,'C:\Esepter\Esepter2-output.txt');
Rewrite (F2);
while not eof (F1) do
begin
read (F1, x);
if (x='a') OR (x='A') then write (F2, x+x)
Else write (F2, x);
End;
Writeln;
Close (F1);
Close (F2);
End.
Есепші шешу алгоритмі:
-
Программа денесін айнымалыларды сипаттаудан бастаймыз.
-
ARIP файлын F1файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.
-
F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін оқимыз.
-
F1 файлының элементтерін оқитын және оларды F2 файлына жазатын цикл ұйымдастырамыз. Ол цикл, EOF (F1) функциясының көмегімен F1 файлының соңы табылғанша орындалады.
-
Егер «А» немесе «а» әрпі кездессе ол жазу кезінде еселенеді.
-
Екі файлды да жабамыз.
Айнымалылар:
F1, F2 - текстік файлдар;
Х - файл элементі.
Өңделген ARIP файлы мына түрде жауапқа шығарылады. Әрбір «а» немесе «А» әрпі екі рет жазылады.
AAtaa AApaa AAnaa Paapaa
AAlmaaty
AAstaanaa
Kaazaakhstaan
3-есеп: ARIP файлын оқыңдар және «а» әрпін санаңдар.
Program Esepter3;
Var F1: text;
x: char;
k: integer;
begin
k:=0;
assign (F1,'C:\Esepter\ARIP.txt');
reset (F1);
while not eof (F1) do
begin
read (F1, x);
if (x='a') OR (x='a') then k:=k+1;
End;
Writeln ('a арпінінсаны:=', k);
Close (F1);
End.
Есепші шешу алгоритмі:
-
Программа денесін айнымалыларды сипаттаудан бастаймыз.
-
ARIP файлын F1файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.
-
F1 файлының элементтерін оқитын және «а» әрпін санайтын цикл ұйымдастырамыз. Ол цикл, EOF (F1) функциясының көмегімен F1 файлының соңы табылғанша орындалады.
-
Нәтижені жауапқа шығарамыз.
-
Файлды жабамыз.
Айнымалылар:
F1, F2 - текстік файлдар;
Х - файл элементі;
К - әріптің санын анықтау.
Жұмыс нәтижесі: А әрпінің саны:=16.
4-есеп: SAN файлын оқыңдар және онда кездесетін цифрлардың қосындысын табыңдар?
Бұл есептегі текстік файлдың элементтерінің сандық мәнін анықтау үшін символдардың реттелген типке жататындығын пайдалануға болады. Цифрлардың ASCII коды бірінен-соң бірі орналасқан. Сондықтан кез-келген цифрдың мәнін былай анықтауға болады:
K:=ORD(X)-ORD('0');
Program Esepter4;
Var F1: text;
x: char;
k, sum: integer;
begin
sum:=0;
assign (F1,'C:\Esepter\SAN.txt');
reset (F1);
while not eof (F1) do
begin
read (F1, x);
if (x>='0') and (x<='9') then
begin
K:=ORD(X)-ORD('0');
sum:= sum+K
End;
End;
Writeln ('sum:= ', sum);
Close (F1);
End.
Есепші шешу алгоритмі:
-
Программа денесін айнымалыларды сипаттаудан бастаймыз.
-
SAN файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.
-
F1 файлының элементтерін оқитын және цифрлардың қосындысын анықтайтын цикл ұйымдастырамыз. Ол цикл, EOF (F1) функциясының көмегімен F1 файлының соңы табылғанша орындалады.
-
Нәтижені жауапқа шығарамыз.
-
Файлды жабамыз.
Айнымалылар:
F1, F2 - текстік файлдар;
Х - файл элементі;
К - көмекші айнымалы;
SUM - цифрлар қосындысы.
Жұмыс нәтижесі: SUM:=199.
5-есеп: ARIPфайлының элементтерін өзіне-өзі екі рет жазыңдар.
Бұл жағдайда файлды екі рет ашпау үшін, қажетті элементке орналастыру SEEK (F1,0) процедурасын пайдаланамыз, яғни оның көмегімен F1 файлдың типін, мысалы символдар файлы ретінде көрсету керек.
Program Esepter5;
Var F1: file of char; F2: text;
x: char;
i: integer;
begin
assign (F1,'C:\Esepter\ARIP.txt');
reset (F1);
assign (F2,'C:\Esepter\Esepter5-output.txt');
rewrite (F2);
for i:=1 to 2 do
begin
while not eof (F1) do
begin
read (F1, x);
Write (F2, x);
End;
Writeln;
SEEK (F1,0)
End;
Writeln;
Close (F1);
Close (F2);
End.
Есепші шешу алгоритмі:
-
Программа денесін айнымалыларды сипаттаудан бастаймыз.
-
ARIP файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.
-
F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.
-
F1 файлының элементтерін оқу және оларды F2 файлына жазу үшін екі рет көру мүмкіндігін ұйымдастырамыз.
-
Екі файлды да жабамыз.
Айнымалылар:
F1 - символдар файл;
F2 - текстік файл;
Х - файл элементі;
К - көмекші айнымалы.
Жұмыс нәтижесі:
Ata Apa Ana Papa
Almaty
Astana
KazakhstanAtaApa Ana Papa
Almaty
Astana
Kazakhstan
6-есеп: ARIPфайлын оқыңдар және соңынан басына қарай жауапқа шығарыңдар.
Файлды көру үшін, тек типтік файлдарға қолданылатын файлдың ұзындығын FILESIZE (F1) функциясын пайдаланамыз. Бұл кезде файлдың ұзындығы файл соңындағы символмен анықталады. Бұл символды назардан тыс қалдыру керек.
Program Esepter6;
Var F1: file of char;
F2: text;
x: char;
l, i: integer;
begin
assign (F1,'C:\Esepter\ARIP.txt');
reset (F1);
assign (F2,'C:\Esepter\Esepter6-output.txt');
rewrite (F2);
L:=filesize (F1);
for i:=l-1 downto 0 do
begin
SEEK (F1, i);
read (F1, x);
Write (F2, x);
End;
Writeln;
Close (F1);
Close (F2);
End.
Есепші шешу алгоритмі:
-
Программа денесін айнымалыларды сипаттаудан бастаймыз.
-
ARIP файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.
-
F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.
-
F1 файлының элементтерін соңынан кері оқуды және оларды F2 файлына жазуды ұйымдастырамыз.
-
Екі файлды да жабамыз.
Айнымалылар:
F1 - символдар файл;
F2 - текстік файл;
Х - файл элементі;
L - файл ұзындығы;
I - цикл параметрі.
Жұмыс нәтижесі:
natshkazaKanatsAytamlAapaP anA apA atA
7-есеп: ARIP файлын өзіне-өзі соңынан басына қарай жазылған түрде тізбектей жазуды құрыңдар.
Program Esepter7;
Var F1: file of char;
F2: text;
x: char;
l, i: integer;
begin
assign (F1,'C:\Esepter\ARIP.txt');
reset (F1);
assign (F2,'C:\Esepter\Esepter7-output.txt');
rewrite (F2);
L:=filesize (F1);
while not eof (F1) do
begin
read (F1, x);
Write (F2, x);
End;
Writeln;
for i:=l-1 downto 0 do
begin
SEEK (F1, i);
read (F1, x);
Write (F2, x);
End;
Writeln;
Close (F1);
Close (F2);
End.
Есепші шешу алгоритмі:
-
Программа денесін айнымалыларды сипаттаудан бастаймыз.
-
ARIP файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.
-
F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.
-
F1 файлының элементтерін соңынан кері оқуды және оларды F2 файлына жазуды ұйымдастырамыз.
-
Екі файлды да жабамыз.
Айнымалылар:
F1 - символдар файл;
F2 - текстік файл;
Х - файл элементі;
L - файл ұзындығы;
I - цикл параметрі.
Жұмыс нәтижесі:
Ata Apa Ana Papa
Almaty
Astana
Kazakhstan
natshkazaK anatsA ytamlA apaP anA apA atA
8-есеп: ARIP файлында бірінші нүктеден кейінгі сөздерді жойыңдар.
Бұл программада көрсетілген позициядан бастап файлдың бір бөлігін жою функциясын пайдаланамыз.
Program Esepter8;
Var F1: file of char;
F2: text;
x: char;
k,i: integer;
begin
assign (F1,'C:\Esepter\ARIP.txt');
reset (F1);
assign (F2,'C:\Esepter\Esepter8-output.txt');
rewrite (F2);
k:=-1;
while not eof (F1) do
begin
k:=k+1;
read (F1, x);
if x<>'.' Then
Write (F2, x)
Else begin
SEEK (F1, k+1);
Write (F2, x);
truncate (F1)
End;
End;
Writeln;
Close (F1);
Close (F2);
End.
Есепші шешу алгоритмі:
-
Программа денесін айнымалыларды сипаттаудан бастаймыз.
-
ARIP файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.
-
F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.
-
F1 файлының элементтерін тізбектей көруді және оларды бірінші нүктеге дейін F2 файлына жазуды ұйымдастырамыз.
-
Келесі позициядан бастап файлдың қалдық бөлігін жоямыз.
-
Екі файлды да жабамыз.
Айнымалылар:
F1 - символдар файл;F2 - текстік файл;Х - файл элементі;
L - файл ұзындығы;К - көмекші айнымалы.
Жұмыс нәтижесі:
Ata Apa Ana Papa
Almaty
Astana.
2013-2014 оқу жылындағы информатикадан аудандық олимпиада есебінен мысал
A есебі: Факториал
N - Factorial - 1-ден N-ге дейінгі сандардың кобейтіндісі. Берілген N саны үшін, N - Factorial санының соңында қанша нөл бар екенін анықтаныз.
Енгізуфайлыныңаты:
A.in
Шығаруфайлыныңаты:
A.out
Есептіңжауабыфайлыныңаты:
A.{c,cpp,pas}
Уақытшектеу:
2 секунд
Жадығашектеу:
64 мегабайт
Мәліметтердіенгізуформаты
Енгізуфайлындабірбүтінсан- N(1 ≤ N ≤ 106)берілген.
Мәліметтердішығаруформаты
N - Factorial саныныңсоңындағынөлдерсаныншығарыңыз.
Мысал
A.in
A.out
Комментарий
4
6
10
0
1
2
1*2*3*4=24
1*2*3*4*5*6=720
1*2*3*4*5*6*7*8*9*10=3628800
programesepA;
vara,s,f,i:integer;
f1,s1:string;
r,g:text;
begin
assign(r,'C:\Esepter\Olimpiada2013\Ain.txt');
reset (r);
readln (r,a);
close (r);
f:=1;
for i:=2 to a do
f:=f*i;
str(f,f1);
for i:=1 to length(f1) do
begin
s1:=copy(f1,1,1);
if s1<>'0' then
delete(f1,1,1);
end;
for i:=1 to length(f1) do
begin
s1:=copy(f1,1,1);
if s1='0' then
s:=s+1;
end;
assign (g,'C:\Esepter\Olimpiada2013\Aout.txt');
rewrite (g);
writeln (g,s);
close(g);
end.
Б есебі: Цифрлар
Біз бір-бірімізге хат жазған кезде сандарды жиі қолданамыз.Сізге ағылшын тілінде жазылған сөйлем берілген. Солсөйлемдекездесетінбүкілцифрлардытабукерек.
Енгізуфайлыныңаты:
B.in
Шығаруфайлыныңаты:
B.out
Есептіңжауабыфайлыныңаты:
B.{c,cpp,pas}
Уақытшектеу:
2 секунд
Жадығашектеу:
64 мегабайт
Мәліметтердіенгізуформаты
Енгізуфайлындаағылшынтіліндежазылғанбірсөйлемберілген. Сөйлемнің ұзындығы 100 символдан аспайды.
Мәліметтерді шығару форматы
Берілген сөйлемде кездесетін бүкіл цифрларды өсу ретімен жазыңыз.
Мысал
B.in
I owe you 491 tenge and I will return it when I will be in university at 15:22
B.out
12459
programesepB;
var b,n,i,k,c,o,x1:integer;
f,s,ch:string;
r,g: text;
A:array [0..9] of integer;
begin
assign (r,'C:\Esepter\Olimpiada2013\Bin.txt');
reset (r);
readln (r,f);
close (r);
for i:=1 to length(f) do
begin
s:=copy(f,1,1);
if (s<>'0') or (s<>'1') or (s<>'2') or (s<>'3') or (s<>'4') or (s<>'5') or (s<>'6') or (s<>'7') or (s<>'8') or (s<>'9')then
delete(f,1,1);
if (s='0') or (s='1') or (s='2') or (s='3') or (s='4') or (s='5') or (s='6') or (s='7') or (s='8') or (s='9')then
begin
x1:=pos(s,ch);
if x1<>0 then
begin
delete(ch,x1,1);
ch:=ch+s;
end
else
ch:=ch+s;
end;
end;
val(ch,n,o);
N := Abs(N);
for i := 0 to 9 do
A[ i ] := 0;
while N > 0 do
beginInc(A[ N mod 10]);
N := N div 10;
end;
assign (g,'C:\Esepter\Olimpiada2013\Bout.txt');
rewrite (g);
for i := 0 to 9 do
while A[ i ] > 0 do
begin Write(g,i);
Dec(A[ i ]);
end;
close(g);
end.