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

8.1. Примеры решения заданий

Задача 1. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Имеется информация о багаже нескольких пассажиров - соответствующие пары чисел. Подсчитать общее количество вещей и выяснить, имеется ли пассажир, багаж которого состоит из одной вещи весом не менее 30 кг.

Решение: Алгоритм решения задачи представлен на рис. 7.1.

Программа в Turbo Pascal будет иметь следующий вид:

Const z:String[3] = ' не';

t:Byte=0;

Type Info = record

q: Byte;

w: Real;

end;

Var luggage: Info;

i,n : Byte;

Begin

Write('Введите число пассажиров ');

ReadLn(n);

WriteLn ('Вводите пары чисел (количество

и вес) ');

For i:=l to n do

Begin

ReadLn(luggage.q,luggage.w);

Inc(t,luggage.q);

If (luggage.q=l) and (luggage.w>=30)

then z:='';

End;

WriteLn('Суммарное количество вещей: ',t);

WriteLn('Искомый пассажир ' ,z, ' имеется');

ReadLn;

End.

Рис. 8.21. Блок-схема алгоритма решения задачи 1

Определим тип Info - запись с двумя полями. Имена полей q (количество вещей одного пассажира) и w (общий вес вещей одного пассажира); типы полей Byte и Real. Luggage - идентификатор переменной введенного типа. Введём данные с клавиатуры и, используя составные имена полей записи luggage.q и luggage.w, найдём искомые величины.

Задача 2. Имеются сведения о кубиках: размер каждого кубика (длина ребра в см), его цвет (красный, желтый, зеленый или синий) и материал (деревянный, металлический, картонный). Найти: а) количество кубиков каждого из перечисленных цветов и их суммарный объём; б) количество деревянных кубиков с ребром 3 см и количество металлических кубиков с ребром, большим 5 см.

Решение: Алгоритм решения задачи представлен на рис. 7.2.

Для представления разнотипной информации о кубе определим тип Info - запись с тремя полями. Имена полей l (размер), с (цвет) и m (материал); типы полей Word, String[7] и String[13]. Для хранения информации введём сложную типизированную константу - массив записей Cube. Имена полей при этом указываются явно; поле от своего значения отделяется двоеточием; поля разделяются точкой с запятой; порядок следования полей должен соответствовать порядку их описания в типе Info.

Для упрощения доступа к полям записей при их совместной обработке предназначен оператор with, имеющий формат:

with <имя переменной> do <onepamop>.

Один раз указав имя переменной типа запись в операторе with, можно внутри оператора обращаться к полям записи без указания имени.

Программа в Turbo Pascal будет иметь следующий вид:

Uses Crt;

Type Info = record

l: Word;

c: String[7];

m: String [13];

end;

Const n=5;

Cube: Array [l..n] of Info =

((l: 3; с: 'синий'; m: 'деревянный' ),

(l: 8; с: 'красный'; m: 'металлический'),

(l: 3; с: 'зеленый'; m: 'деревянный' ),

(1: 4; с: 'желтый'; m: 'металлический'),

(1: 5; с: 'синий'; m: 'картонный' ));

Var i,ql,q2,q3,q4,q5,q6: 0..n;

v: Longlnt;

Begin

ql:=0;

q2:=0;

q3:=0;

q4:=0;

q5:=0;

q6:=0;

v:=0;

For i:=l to n do

begin

With Cube[i] do

begin

{a} If с='красный' then Inc(ql);

If с='желтый' then Inc(q2);

If c='зеленый' then Inc(q3);

If c='синий' then Inc(q4);

Inc(v, l*Sqr(l));

{б} If (m='деревянный') and (l=3)

then

Inc(q5);

If (m='металлический') and (l>5)

then

Inc(q6);

End;

End;

{ вывод }

WriteLn('Красных:',ql,' желтых:',q2,

' зеленых:',q3,' синих:',q4);

WriteLn('Суммарный объем: ',v);

WriteLn('Деревянных кубиков с ребром 3 см:',

q5);

WriteLn('Металлических кубиков с ребром,

большим 5 см: ', q6);

ReadLn;

End.

Рис. 8.22. Блок-схема алгоритма решения задачи 2

Задача 3. Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти фамилии владельцев и номера автомобилей данной марки.

Решение: Программа в Turbo Pascal будет иметь следующий вид:

Program Automobile;

Uses Crt;

Const n=10;

found: Boolean=false;

Type Info = record

Brand : String[15];

Number : String[15];

Surname: String [20];

end;

Var Car: Info;

f: File of Info;

z: String[20];

i: 1..n;

Begin

Assign(f,'auto.dat');

{$I-};{отключаем проверку ошибки ввода-вывода}

Reset(f);

{$I+}

{если файл не существует, создаем новый}

If IOResult<>0 then Rewrite(f);

{если файл пустой, заполняем его}

If FileSize(f)=0 then

begin

Writeln('Файл пуст! Введите элементы!');

Write('Вводите данные построчно: ');

Write('марку автомобиля, его номер ');

Writeln('и фамилию владельца');

For i:=l to n do

begin

With Car do

begin

Readln(Brand);

Readln(Number);

Readln(Surname);

End;

Write(f,Car);

End;

Write('Введите заглавными буквами');

Write('марку автомобиля >>');

ReadLn(z);

While not Eof(f) do

begin

Read(f,Car);

With Car do

If Brand=z

then

begin

found:=true;

WriteLn(Surname:20, Number:20);

End;

End;

If Not found

then

Write('Автомобиля данной марки нет');

ReadLn;

End.

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