Создайте класс Cafe c 3 полями - наименование кафе, наименования блюд(строковый массив), цены(целочисленный массив). Значения двух массивов соответствуют друг другу на i позиции. a. Создайте конструктор с 3 параметрами для этих полей.
b. Напишите метод, который выводит общую информацию об объекте данного класса.
c. Напишите рекурсивный метод, который возвращает общую стоимость всех блюд.
d. Напишите метод, который выводит наименование самого дорогого блюда.
e. Напишите метод, у которого есть параметр - наименования блюд, которые хочет заказать гость(строковый список). Проверьте наличие блюд и, если данные блюда есть в меню, выведите общую стоимость заказа, прибавив 10% за обслуживание.
f. Создайте объект данного класса и примените вышеуказанные методы.
type
Student = record
Ocenka: array [1..5] of Byte;
end;
var
i, j: Byte;
Summa: Integer;
Troechik: Boolean;
Studenti: array [1..25] of Student;
begin
for i:=1 to 25 do
begin
// Zapolnyaem ocenki studentov:
WriteLn('Vvedite ocenki '+IntToStr(i)+' studenta: ');
for j:=1 to 5 do
begin
Write('Ocenka za '+IntToStr(i)+' ekzamen: ');
ReadLn(Studenti[i].Ocenka[j]);
end;
end;
// Chitaem summu
S:=0;
WriteLn('');
for i:=1 to 25 do
begin
//
Troechik:=False;
//
for j:=1 to 5 do
if Studenti[i].Ocenka[j] < 4 then Troechik:=True;
//
if not Troechik then
begin
WriteLn('Vidat stipendiu '+IntToStr(i)+' studentu');
Summa:=Summa + 900;
end;
end;
// Vivod summi vsex stipendii
WriteLn('Summa vsex stipendii = '+IntToStr(Summa));
end.
const
nMax = 50; { максимум 50 команд }
cGold = 7;
cSilver = 6;
cBronze = 5;
type
cName = string[20];
RC = record
position: byte;
name: cName;
nGold: byte;
nSilver: byte;
nBronze: byte;
cTotal: byte
end;
tM = array[1..nMax, 1..2] of byte;
procedure Shell(var a: tM; n: integer);
{ Сортировка методом Шелла массива a[1..n, 1..2]
по убыванию значений элементов второго столбца. }
var
i, j, step, t1, t2: integer;
begin
step := n div 2;
while step > 0 do
begin
for j := n - step downto 1 do
begin
i := j;
while i <= n - step do
begin
if a[i, 2] < a[i + step, 2] then
begin
t1 := a[i, 1]; t2 := a[i, 2];
a[i, 1] := a[i + 1, 1]; a[i, 2] := a[i + 1, 2];
a[i + 1, 1] := t1; a[i + 1, 2] := t2
end;
i := i + step
end
end;
step := step div 2
end
end;
{ Основная программа }
var
f: file of RC;
a: tM;
i, n: byte;
s: cName;
t: RC;
begin
{ Организуем ввод данных }
Assign(f, 'Olympic.in');
Rewrite(f);
n := 0;
repeat
Writeln('Введите наименование команды или * для окончания ввода');
Readln(s);
if s[1] <> '*' then
begin
n := n + 1;
Write('Количество медалей: золото, серебро, бронза: ');
Readln(t.nGold, t.nSilver, t.nBronze);
t.position := n;
t.name := s;
t.cTotal := t.nGold * cGold + t.nSilver * cSilver + t.nBronze * cBronze;
Write(f, t);
a[n, 1] := t.position; a[n, 2] := t.cTotal
end
until s[1] = '*';
Reset(f);
{ Выполняем сортировку заполненного массива a,
определяя положение записей в файле }
Shell(a, n);
{ Выводим результаты, используя прямой доступ к файлу }
Writeln('Результаты олимпиады');
for i := 1 to n do
begin
seek(f, a[i, 1] - 1);
Read(f, t);
Writeln(i, ': ', t.name, '(', t.nGold, ' зол, ', t.nSilver, ' сер, ',
t.nBronze, ' бронз), очков- ', t.cTotal)
end;
Close(f);
end.
Тестовое решение:
Введите наименование команды или * для окончания ввода
Веселые медузы
Количество медалей: золото, серебро, бронза: 4 6 10
Введите наименование команды или * для окончания ввода
Юные сурки
Количество медалей: золото, серебро, бронза: 2 0 5
Введите наименование команды или * для окончания ввода
Черепашки-ниндзя
Количество медалей: золото, серебро, бронза: 3 7 11
Введите наименование команды или * для окончания ввода
*
Результаты олимпиады
1: Черепашки-ниндзя(3 зол, 7 сер, 11 бронз), очков- 118
2: Веселые медузы(4 зол, 6 сер, 10 бронз), очков- 114
3: Юные сурки(2 зол, 0 сер, 5 бронз), очков- 39