Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

8 - Типизированные файлы

.pdf
Скачиваний:
15
Добавлен:
14.03.2016
Размер:
410.89 Кб
Скачать

Л. Р.

Студент

Иванов И. И.

Группа

ХХ-999

«Типизированные файлы»

 

 

Дата

дд.мм.гг

 

 

 

 

 

Допуск

 

 

 

 

 

Выполнение

 

 

 

 

 

Отчет

 

 

 

 

Условие задачи 1

Ввести файл F целых чисел, состоящий из 9 элементов. Определить среднее арифметическое чётных элементов.

Тестовые примеры к задаче 1

1)

 

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

файл

f:

3

4

5

6

7

8

9

1

2

Выходные данные:

среднее арифметическое четных: SrA = 4,00;

2)

 

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

файл f:

6

7

4

32

5

4

7

2

45

Выходные данные:

SrA = 9,60;

3)

 

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

файл

f:

1

21

23

9

11

3

5

5

7

Выходные данные:

В файле нет четных компонент

1

Блок-схема к задаче 1

Листинг программы на Pascal к задаче 1

program ABC;

var b,S,k,i:integer; f:file of integer; SrA:real;

begin assign(f,'f.dat'); //ввод файла rewrite(f);

writeLn('вводите 9 компонент файла f:'); for i:=1 to 9 do

begin

2

writeLn('введите ',i,'-ую компоненту файла f'); readLn(b);

write(f,b);

end;

//поиск среднего арифм. четных reset(f);

S:=0;

k:=0;

while not EOF(f) do begin

read(f,b);

if b mod 2 = 0 then begin

S:=S+b;

inc(k);

end;

end;

//вывод результатов

if k>0 then begin

SrA:=S/k;

writeLn('среднее арифметическое четных =',SrA:8:2) end

else

writeLn('в файле нет четных элементов');

close(f);

end.

Условие задачи 2

Ввести файл F . В файле элементы большие четырёх, стоящие на позициях некратных трём увеличить на 5. Файл вывести до и после преобразования.

Тестовые примеры к задаче 2

1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файл f

до

изменения:

7

8

9

0

3

8

87

6

55

6

1

2

3

4

5

6

 

Выходные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файл f

после изменения:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

2

3

4

 

10

 

11

 

7

 

13

 

14

0

3

 

13

87

 

11

 

60

6

2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файл

f

до

изменения:

7

 

 

7

 

7

7

 

 

 

 

 

 

 

 

7

7

 

7

7

7

 

 

 

 

 

 

 

 

 

 

 

 

Выходные данные:

файл f после изменения:

3

7

12

 

12

7

12

 

12

7

12

 

12

Блок-схема к задаче 2

4

Листинг программы на Pascal к задаче 2

program ABC; var b,i:integer;

f:file of integer; begin

assign(f,'f.dat');

writeLn('введите первую компоненту файла f (признак конца ввода: "555")');

//ввод файла rewrite(f); readLn(b);

i:=1;

//номер

компоненты файла

while

b<>555 do

 

begin write(f,b); inc(i);

writeLn('введите ',i,'-ую компоненту файла f'); readLn(b);

end;

//вывод файла до изменения reset(f);

writeLn('файл f до изменения:'); while not EOF(f) do

begin read(f,b); write(b:5);

end;

writeLn;

//увеличение на 5 в файле элементов больших четырех,

//не стоящих на позициях кратных трём

reset(f);

while not EOF(f) do begin

read(f,b);

if (b>4) and ((filepos(f)-1) mod 3 <> 0) then begin

seek(f,filepos(f)-1); b:=b+5;

write(f,b);

end;

end;

//вывод файла после изменения reset(f);

writeLn('файл f после изменения:'); while not EOF(f) do

begin read(f,b);

5

write(b:5);

end;

writeLn;

close(f);

end.

Условие задачи 3

Ввести файл F действительных чисел. В файле элементы стоящие после второго нуля переставить в обратном порядке. Вывести файл до и после преобразования.

Тестовые примеры к задаче 3

1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файл f

до изменения:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

74

2

8

0

 

2

5

0

6

5

4

1

56

Выходные данные:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

файл f

после изменения:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

74

2

8

0

 

2

5

0

 

56

 

1

 

4

 

5

 

6

 

2)

 

 

 

 

 

 

 

 

 

 

 

 

Входные данные:

 

 

 

 

 

 

 

 

 

 

файл f до изменения:

0

2

5

3

6

5

4

1

56

5

74

2

8

Выходные данные:

В файле меньше двух нулевых компонент

6

Блок-схема к задаче 3

Начало

Assign(F, ‘F.dat’)

Rewrite(F)

Ввод b (1-я

компонента файла)

i:=1

b ≠ 555

F←b

i:= i + 1

Ввод b (i-я

компонента файла)

reset(F)

Not EOF(F)

b←F

Вывод b

1

1

k:=0

reset(F)

(not EOF(F)) and (k2)

b←F

b=0

k:=k+1

k=2

I2_0:=filePos(f)-1

1

стр. 8

7

 

1

 

стр. 7

 

k<2

'В файле нет двух

 

нулей'

 

I2_0=fileSize(f)

 

‘второй ноль в

left:=I2_0+1

файле на

 

последнем месте’

 

 

right:=fileSize(f)-1

Шаг 1-2

left<right

Алгоритм вывода файла F

 

reset(F)

seek(f,left);

b←F

 

seek(f,right);

 

a←F

Not EOF(F)

seek(f,left);

 

F←a

b←F

seek(f,right);

F←b

 

Вывод b

left:=left+1;

right:=right-1

 

 

1

 

алгоритм вывода

 

файла F

 

2

 

close(F)

 

Конец

8

 

Листинг программы на Pascal к задаче 3

program ABC;

var a,b,i,left,right,I2_0,k:integer; f:file of integer;

begin assign(f,'f.dat');

writeLn('введите первую компоненту файла f (признак конца ввода: "555")');

//ввод файла rewrite(f); readLn(b);

i:=1;

//номер

компоненты файла

while

b<>555 do

 

begin write(f,b); inc(i);

writeLn('введите ',i,'-ую компоненту файла f'); readLn(b);

end;

//вывод файла до изменения reset(f);

writeLn('файл f до изменения:'); while not EOF(f) do

begin read(f,b); write(b:5);

end;

writeLn;

//поиск позиции второго нуля k:=0;

reset(f);

while (not EOF(f)) and (k<>2) do begin

read(f,b); if b=0 then begin

k:=k+1;

if k=2 then I2_0:=filePos(f)-1;

end;

end;

//проверка возможности перестановки в файле if k<2 then

writeLn('в файле нет двух нулей') else

if I2_0=fileSize(f) then

writeLn('второй ноль в файле на последнем месте')

9

else begin

// перестановка элементов файла left:=I2_0+1; right:=fileSize(f)-1;

while left<right do begin

seek(f,left);

read(f,b);

seek(f,right);

read(f,a);

seek(f,left);

write(f,a);

seek(f,right);

write(f,b);

left:=left+1; right:=right-1;

end;

//вывод файла после изменения reset(f);

writeLn('файл f после изменения:'); while not EOF(f) do

begin read(f,b); write(b:5);

end;

writeLn;

end;

close(f);

end.

10