
- •Технологии программирования
- •Содержание
- •Линейные алгоритмы
- •1.1. Примеры решения заданий
- •1.2. Задания для самостоятельного решения
- •1.3. Задания для контрольной работы
- •Алгоритмы с разветвлениями
- •2.1. Примеры решения заданий
- •2.2. Задания для самостоятельного решения
- •2.3. Задания для контрольной работы
- •Алгоритмы с циклами
- •3.1. Примеры решения заданий
- •3.2. Задания для самостоятельного решения
- •3.3. Задания для контрольной работы
- •Одномерные массивы
- •4.1. Примеры решения заданий
- •4.2. Задания для самостоятельного решения
- •4.3. Задания для контрольной работы
- •Двумерные массивы
- •5.1. Примеры решения заданий
- •5.2. Задания для самостоятельного решения
- •5.3. Задания для контрольной работы
- •6.1. Примеры решения заданий
- •6.2. Задания для самостоятельного решения
- •6.3. Задания для контрольной работы
- •7.1. Примеры решения заданий
- •7.2. Задания для самостоятельного решения
- •7.3. Задания для контрольной работы
- •8.1. Примеры решения заданий
- •8.2. Задания для самостоятельного решения
- •8.3. Задания для контрольной работы
- •Контрольная работа
- •Список использованных источников
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 должен существовать на диске или может быть создан с помощью блока, обозначенного в программе.