Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воробьева Соппа Программирование в Паскаль 2006...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.4 Mб
Скачать

Пример программирования задачи с использованием файлов данных

Создать файл F1, состоящий из целых чисел по 6 чисел в строке. Числа могут быть как положительными, так и отрицательными. Переписать из файла F1 все положительные числа в файл F2, оставляя их в этих же строках.

Решение

Пусть для хранения файлов используется тот же текущий каталог (папка), в котором записана программа.

В данной задаче файл F1 является файлом входных данных, который необходимо создать до выполнения программы. Используя текстовый редактор среды Турбо Паскаль, создадим файл с именем ‘F1.dat’, например, следующего вида:

–5

16

–7

10

–1

2

4

–12

–19

8

–34

17

Выходному файлу зададим имя ‘F2.dat’. В этот файл в процессе выполнения программы будут записаны результаты.

Program P_F;

Uses Crt;

Var

f1, f2: text;

a: integer;

Begin

ClrScr;

assign(f1, ‘F1.dat’);

reset(f1);

assign(f2, ‘F2.dat’);

rewrite(f2);

while not eof(f1) do

begin

read(f1, a);

if (a>0) then

if not eoln(f1) then

write(f2, a:5);

else

writeln(f2, a:5);

end;

close(f1);

close(f2);

writeln(‘Выходной файл создан’);

readln;

End.

В результате выполнения программы будет создан выходной файл следующего вида:

16

10

2

4

8

17

10.3. Пример решения задачи создания документа

Пусть требуется получить результаты обработки экзаменационной ведомости в виде следующего документа.

РЕЗУЛЬТАТЫ ОСЕННЕЙ СЕССИИ ГР. 151

п/п

ФИО

Матема-тика

Информа-тика

Химия

Средний балл

1

Андреева С.В.

4

5

5

x

20

Яковлев А.Н.

5

5

4

x

Ср. оценка по дисциплине

x

x

x

x

Примечание. x – расчетные данные.

Составить программу, обеспечивающую чтение входных данных из файла и вывод документа с расчетными данными по заданной форме. В программе предусмотреть чтение каждой строки файла в переменную типа запись.

Решение

Создадим в текущем каталоге файл данных ‘Wed.dat’, каждая строка которого имеет вид:

4 5 5 Андреева с.В.

Заметим, что ФИО студента записывается в файле в конце строки. Это связано с тем, что переменная типа запись, в которую будет читаться строка из файла, содержит поле fam (ФИО студента) строкового типа, для которого не указан максимальный размер, а следовательно, конец поля должен быть зафиксирован нажатием клавиши [Enter].

Program P_Wed;

Uses Crt;

Const

pr = ‘    ’; {20 пробелов}

Type

zap = record

m, inf, h: integer;

fam: string;

end;

Var

str: zap;

f: text;

n, d: integer;

fam1: string;

Sm, Sinf, Sh, Sc, Sg: real;

Begin

ClrScr;

{Вывод заголовка документа}

writeln(‘РЕЗУЛЬТАТЫ ОСЕННЕЙ СЕССИИ ГР. 151’);

{Вывод шапки документа}

writeln(‘| | | | |’,

‘    | |’);

writeln(‘| № | ФИО | Математика | Информатика |’, ‘Химия| Средний балл |’);

writeln(‘|п/п |’, pr, ‘|’, copy(pr,1,12), ‘|’, copy(pr,1,13), ‘|’,

copy(pr,1,7), ‘|’, copy(pr,1,14), ‘|’);

writeln(‘| | | | |’,

‘    | |’);

{Обработка файла данных}

assign(f, ‘Wed.dat’);

reset(f);

Sm := 0;

Sinf := 0;

Sh := 0;

n := 0; {Счетчик строк файла}

while not eof(f) do

begin

n := n + 1;

readln(f, str.m, str.inf, str.h, str.fam);

Sc := (str.m + str.inf + str.h)/3; {Ср. балл студента}

Sm := Sm + str.m;

Sinf := Sinf + str.inf;

Sh := Sh + str.h;

{Вывод строки документа}

d := 20 – length(str.fam);

fam1 := str.fam + copy(pr, 1, d);

writeln(‘|’, n:2, ‘   |’, fam1, ‘|’, str.m:6, copy(pr,1,6), ‘|’,

str.inf:7, copy(pr,1,6), ‘|’, str.h:4, copy(pr,1,3), ‘|’,

Sc:9:2, copy(pr,1,5), ‘|’);

end;

close(f);

Sm := Sm/n;

Sinf := Sinf/n;

Sh := Sh/n;

Sg := (Sm + Sinf + Sh)/3; {Средний балл по группе}

writeln(‘| | | |’,

‘    | |’);

writeln(‘| Ср. оценка по дисциплине|’, Sm:8:2,

copy(pr,1,4), ‘|’, Sinf:9:2, copy(pr,1,4), ‘|’, Sh:6:2, ‘ |’,

Sg:9:2, copy(pr,1,5), ‘|’);

writeln(‘| | | |’,

‘    | |’);

End.

Пояснения к программе

Для рисования таблицы используются символы псевдографики. Коды символов приведены в приложении 2. Ввод символов псевдографики рассмотрен в главе 1 (см. п. 1.1).

Переменная d в программе определяет количество пробелов, которые надо присоединить справа к строковой переменной fam, чтобы получить длину строки fam1, равную 20 символам. Задание строковой переменной fam1 позволяет в графе ФИО выводить фамилии студентов, выровненные по левому краю.