Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример выполнения заданий на Pascale.doc
Скачиваний:
17
Добавлен:
15.02.2015
Размер:
421.89 Кб
Скачать

Тема 13.Файлы

Задача 42 б

Задание:

Дан файл f, содержащий сведения о кубиках: размер каждого кубика (длина ребра в сантиметрах), его цвет (красный, желтый, зеленый или синий) и материал (деревянный, металлический, картонный). Найти: б)количество деревянных кубиков с ребром 3 см и количество металлических кубиков с ребром, большим 5 см.

Обоснование:

Создаем новый тип – запись состоящую из трех полей : цвет, материал, длина ребра кубика. Создаем файл, состоящий из таких кубиков (ручной ввод или сведения указываются в тексте самой программы)

Затем считываем оттуда сведения и проверяем их на выполнение условия задачи

Алгоритм:

  1. открываем файл для записи

  2. заполняем файл сведениями

  3. сохраняем

  4. открываем файл для чтения

  5. i=0, j=0

  6. считываем новую запись

  7. Если материал кубика дерево и длина ребра =3, то inc(i)

  8. Если материал кубика металл и длина ребра >3 то inc(j)

  9. Если не встретили символ EOF, то возвращаемся к шагу 6

  10. Выводим на экран результат

Реализация:

program nom_514b;

type

kubik=record

color:string[6];

mat:char;

l:integer;

end;

var

kub:file of kubik;

k:kubik;

i,j:integer;

begin

assign(kub,'dop_514.dat');

rewrite(kub);

{заполнение файла сведениями}

k.l:=3;

k.color:='red';

k.mat:='d';

write(kub,k);

k.l:=2;

k.color:='yellow';

k.mat:='k';

write(kub,k);

k.l:=5;

k.color:='red';

k.mat:='m';

write(kub,k);

{такое заполнение файла можно заменить ручным вводом сведений:

Writeln('Введите количество кубиков :');

Readln(n);

For i:=1 to n do

begin

Write('Введите цвет (до 6-ти букв)');

Readln(k.color);

Write('Введите материал (d-дерево,k-картон,m-металл)');

Readln(k.mat);

Write('Введите длину ребра (целое)');

Readln(k.l);

Write(kub,k);

end;}

close(kub);

reset(kub);

i:=0;

j:=0;

while not eof(kub) do

begin

read(kub,k);

if (k.mat='d') and (k.l=3) then inc(i);

if (k.mat='m') and (k.l>3) then inc(j);

end;

close(kub);

writeln('Деревянных кубиков с ребром = 3 :',i);

writeln('Металлических кубиков с ребром больше 3 :',j);

readln;

end.

Блок-схема:

Протокол:

  1. Файл dop_514.dat заполняется следующими сведениями: деревянный кубик красного цвета с ребром 3, картонный кубик желтого цвета с ребром 2, металлический кубик красного цвета с ребром 5

  2. i:=0, j:=0

  3. Открываем файл dop_514.dat для чтения

  4. 4.1 Мы не встретили символа EOF

4.2 Считываем сведения о первом кубике ( деревянный кубик красного цвета с ребром 3)

4.3 Условие(k.mat='d')and(k.l=3) выполнено I:=I+1=1

4.4 Условие (k.mat='m')andk.l>3) не выпонено j=0

5) 5.1 Мы не встретили символа EOF

5.2 Считываем сведения о первом кубике (картонный кубик желтого цвета с ребром 2)

5.3 Условие(k.mat='d')and(k.l=3) не выполнено I=1

5.4 Условие (k.mat='m')andk.l>3) не выпонено j=0

6) 6.1 Мы не встретили символа EOF

6.2 Считываем сведения о первом кубике ( деревянный кубик красного цвета с ребром 3)

6.3 Условие(k.mat='d')and(k.l=3) не выполнено I:=1

6.4 Условие (k.mat='m')andk.l>3) выпонено j=j+1=1

7) Мы встретили символ EOF

  1. Печать «Деревянных кубиков с ребром = 3 : 1»

  2. Печать «Металлических кубиков с ребром больше 3 : 1»