Паскаль тілінде есептер шығаруда файлдармен жұмыс

Раздел Информатика
Класс 9 класс
Тип Другие методич. материалы
Автор
Дата
Формат docx
Изображения Нет
For-Teacher.ru - все для учителя
Поделитесь с коллегами:


Қазақстан Республикасы Білім және Ғылым министрлігі ЖАМБЫЛ ОБЛЫСЫ Т.РЫСҚҰЛОВ АУДАНЫ

Ақтоған орта мектебі




Әдістемелік құрал











Паскаль тілінде есептер шығаруда файлдармен жұмыс
















Информатика пәнініңмұғалімі:

Айтбаев Серик Шакенович
















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.

Есепші шешу алгоритмі:

  1. Программа денесін айнымалыларды сипаттаудан бастаймыз.

  2. ARIP файлын F1файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

  3. F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін оқимыз.

  4. F1 файлының элементтерін оқитын және оларды F2 файлына жазатын цикл ұйымдастырамыз. Ол цикл, EOF (F1) функциясының көмегімен F1 файлының соңы табылғанша орындалады.

  5. Егер «А» немесе «а» әрпі кездессе ол жазу кезінде еселенеді.

  6. Екі файлды да жабамыз.

Айнымалылар:

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.

Есепші шешу алгоритмі:

  1. Программа денесін айнымалыларды сипаттаудан бастаймыз.

  2. ARIP файлын F1файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

  3. F1 файлының элементтерін оқитын және «а» әрпін санайтын цикл ұйымдастырамыз. Ол цикл, EOF (F1) функциясының көмегімен F1 файлының соңы табылғанша орындалады.

  4. Нәтижені жауапқа шығарамыз.

  5. Файлды жабамыз.

Айнымалылар:

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.

Есепші шешу алгоритмі:

  1. Программа денесін айнымалыларды сипаттаудан бастаймыз.

  2. SAN файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

  3. F1 файлының элементтерін оқитын және цифрлардың қосындысын анықтайтын цикл ұйымдастырамыз. Ол цикл, EOF (F1) функциясының көмегімен F1 файлының соңы табылғанша орындалады.

  4. Нәтижені жауапқа шығарамыз.

  5. Файлды жабамыз.

Айнымалылар:

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.

Есепші шешу алгоритмі:

  1. Программа денесін айнымалыларды сипаттаудан бастаймыз.

  2. ARIP файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

  3. F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

  4. F1 файлының элементтерін оқу және оларды F2 файлына жазу үшін екі рет көру мүмкіндігін ұйымдастырамыз.

  5. Екі файлды да жабамыз.

Айнымалылар:

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.

Есепші шешу алгоритмі:

  1. Программа денесін айнымалыларды сипаттаудан бастаймыз.

  2. ARIP файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

  3. F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

  4. F1 файлының элементтерін соңынан кері оқуды және оларды F2 файлына жазуды ұйымдастырамыз.

  5. Екі файлды да жабамыз.

Айнымалылар:

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.

Есепші шешу алгоритмі:

  1. Программа денесін айнымалыларды сипаттаудан бастаймыз.

  2. ARIP файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

  3. F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

  4. F1 файлының элементтерін соңынан кері оқуды және оларды F2 файлына жазуды ұйымдастырамыз.

  5. Екі файлды да жабамыз.

Айнымалылар:

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.

Есепші шешу алгоритмі:

  1. Программа денесін айнымалыларды сипаттаудан бастаймыз.

  2. ARIP файлын F1 файлдық айнымалымен байланыстырамыз және оны оқу үшін ашамыз.

  3. F2 айнымалысын стандартты шығару құрылғысымен байланыстырамыз да оны жауапқа шығару үшін ашамыз.

  4. F1 файлының элементтерін тізбектей көруді және оларды бірінші нүктеге дейін F2 файлына жазуды ұйымдастырамыз.

  5. Келесі позициядан бастап файлдың қалдық бөлігін жоямыз.

  6. Екі файлды да жабамыз.

Айнымалылар:

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.

© 2010-2022