- •Тема 1. Арифметика действительных чисел. Вычисления по формулам Задача 11 в
- •Тема 2. Разветвления
- •Задача 27б
- •Тема 3. Простейшая целочисленная арифметика
- •Задача 14в
- •Тема 4. Простейшие циклы Задача 11
- •Тема 5. Простейшие графические построения Задача 15
- •Тема 6. Пошаговый ввод данных и вывод результатов
- •Тема 7. Сочетания цикла и разветвления
- •Тема 8. Обработка последовательностей символов
- •Тема 9. Вычисления с сохранением последовательности значений
- •Тема 10. Вложенные циклы
- •Тема 11. Вложенные циклы в матричных задачах
- •Тема 12. Использование процедур
- •Тема 13.Файлы
- •Тема 14. Списки
Тема 13.Файлы
Задача 42 б
Задание:
Дан файл f, содержащий сведения о кубиках: размер каждого кубика (длина ребра в сантиметрах), его цвет (красный, желтый, зеленый или синий) и материал (деревянный, металлический, картонный). Найти: б)количество деревянных кубиков с ребром 3 см и количество металлических кубиков с ребром, большим 5 см.
Обоснование:
Создаем новый тип – запись состоящую из трех полей : цвет, материал, длина ребра кубика. Создаем файл, состоящий из таких кубиков (ручной ввод или сведения указываются в тексте самой программы)
Затем считываем оттуда сведения и проверяем их на выполнение условия задачи
Алгоритм:
открываем файл для записи
заполняем файл сведениями
сохраняем
открываем файл для чтения
i=0, j=0
считываем новую запись
Если материал кубика дерево и длина ребра =3, то inc(i)
Если материал кубика металл и длина ребра >3 то inc(j)
Если не встретили символ EOF, то возвращаемся к шагу 6
Выводим на экран результат
Реализация:
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.
Блок-схема:
Протокол:
Файл dop_514.dat заполняется следующими сведениями: деревянный кубик красного цвета с ребром 3, картонный кубик желтого цвета с ребром 2, металлический кубик красного цвета с ребром 5
i:=0, j:=0
Открываем файл dop_514.dat для чтения
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
Печать «Деревянных кубиков с ребром = 3 : 1»
Печать «Металлических кубиков с ребром больше 3 : 1»