Написать прогу в паскале.нужно высчитать минимальные затраты на поклейку обоями комнаты. 3вида обоев(по ширине),3 вида обоев(3типа обоев)+разные цены на обои,1 вид клея,из площади комнаты вычесть площадь окон и дверей.
type tWP = record naim: string; wide: real; leng: real; cost: real end;
var WallPaper: array[1..n] of tWP; lr, wr, hr, ww, hw, wd, hd, gc, sg: real; i, nw, nd, nPanel, nWP, nRolls, index: integer; p, nPanRoll, ng, cg, C, Cmin: real;
begin writeln('Введите информацию по рулонам обоев:'); for i := 1 to n do begin with WallPaper[i] do begin write('Рулон ', i, ', наименование: '); readln(naim); write('ширина, длина, стоимость: '); readln(wide, leng, cost); end; end; writeln('Длина комнаты, ширина комнаты, высота оклейки'); readln(lr, wr, hr); writeln('Ширина окна, высота окна, количество окон'); readln(ww, hw, nw); writeln('Ширина двери, высота двери, количество дверей'); readln(wd, hd, nd); writeln('Стоимость обойного клея и площадь, которую им можно оклеить'); readln(gc, sg); p := 2 * (lr + wr) - nw * ww - nd * wd; //периметр оклейки ng := p * hr / sg; if ng > int(ng) then ng := int(ng) + 1; //количество банок с клеем cg := gc * ng; // общая стоимость клея Cmin := 32768; nRolls := 0; index := 0; for i := 1 to n do with WallPaper[i] do begin // Требуемое количество полотнищ, т.е. сколько раз // ширина рулона укладывается по периметру оклейки nPanel := Trunc(p / wide); if p - nPanel * wide > 0 then nPanel := nPanel + 1; // Определяем, сколько полотнищ получается из одного рулона // при заданной высоте оклейки. nPanRoll := leng / hr; // Вычисляем, сколько потребуется рулонов nWP := Trunc(nPanel / nPanRoll); if nPanel - nWP * nPanRoll > 0 then nWP := nWP + 1; C := nWP * cost + cg; // Cтоимость поклейки обоев if Cmin > C Then begin Cmin := C; index := i; nRolls := nWP end; end; with WallPaper[index] do begin writeln('Минимальные расходы на оклейку в сумме ', CMin:0:2); writeln('получаются при использовании ', nRolls, ' рул. обоев ',naim); writeln('шириной ', wide * 100:0:2, ' при цене ', cost:0:2, ' руб.'); writeln('за рулон длиной ', leng:0:0, ' м. и ',ng,' банок клея.') end end.
Тестовое решение:
Введите информацию по рулонам обоев: Рулон 1, наименование: Гладкие ширина, длина, стоимость: 0.8 10 190 Рулон 2, наименование: Гладкие ширина, длина, стоимость: 0.9 10 210 Рулон 3, наименование: Гладкие ширина, длина, стоимость: 1.2 8 240 Рулон 4, наименование: Ромбик ширина, длина, стоимость: 0.8 10.5 210 Рулон 5, наименование: Ромбик ширина, длина, стоимость: 0.9 10 230 Рулон 6, наименование: Ромбик ширина, длина, стоимость: 1.1 8.5 240 Рулон 7, наименование: Тисненые ширина, длина, стоимость: 0.8 10 218 Рулон 8, наименование: Тисненые ширина, длина, стоимость: 0.9 9.5 224 Рулон 9, наименование: Тисненые ширина, длина, стоимость: 1 9 235 Длина комнаты, ширина комнаты, высота оклейки 8.5 6.2 2.4 Ширина окна, высота окна, количество окон 1.6 1.2 1 Ширина двери, высота двери, количество дверей 0.95 2.2 2 Стоимость обойного клея и площадь, которую им можно оклеить 85 3.1 Минимальные расходы на оклейку в сумме 3255.00 получаются при использовании 7 рул. обоев Гладкие шириной 90.00 при цене 210.00 руб. за рулон длиной 10 м. и 21 банок клея.
n = 9;
type
tWP = record
naim: string;
wide: real;
leng: real;
cost: real
end;
var
WallPaper: array[1..n] of tWP;
lr, wr, hr, ww, hw, wd, hd, gc, sg: real;
i, nw, nd, nPanel, nWP, nRolls, index: integer;
p, nPanRoll, ng, cg, C, Cmin: real;
begin
writeln('Введите информацию по рулонам обоев:');
for i := 1 to n do
begin
with WallPaper[i] do
begin
write('Рулон ', i, ', наименование: ');
readln(naim);
write('ширина, длина, стоимость: ');
readln(wide, leng, cost);
end;
end;
writeln('Длина комнаты, ширина комнаты, высота оклейки');
readln(lr, wr, hr);
writeln('Ширина окна, высота окна, количество окон');
readln(ww, hw, nw);
writeln('Ширина двери, высота двери, количество дверей');
readln(wd, hd, nd);
writeln('Стоимость обойного клея и площадь, которую им можно оклеить');
readln(gc, sg);
p := 2 * (lr + wr) - nw * ww - nd * wd; //периметр оклейки
ng := p * hr / sg;
if ng > int(ng) then ng := int(ng) + 1; //количество банок с клеем
cg := gc * ng; // общая стоимость клея
Cmin := 32768;
nRolls := 0;
index := 0;
for i := 1 to n do
with WallPaper[i] do
begin
// Требуемое количество полотнищ, т.е. сколько раз
// ширина рулона укладывается по периметру оклейки
nPanel := Trunc(p / wide);
if p - nPanel * wide > 0 then nPanel := nPanel + 1;
// Определяем, сколько полотнищ получается из одного рулона
// при заданной высоте оклейки.
nPanRoll := leng / hr;
// Вычисляем, сколько потребуется рулонов
nWP := Trunc(nPanel / nPanRoll);
if nPanel - nWP * nPanRoll > 0 then nWP := nWP + 1;
C := nWP * cost + cg; // Cтоимость поклейки обоев
if Cmin > C Then begin
Cmin := C; index := i; nRolls := nWP
end;
end;
with WallPaper[index] do
begin
writeln('Минимальные расходы на оклейку в сумме ', CMin:0:2);
writeln('получаются при использовании ', nRolls, ' рул. обоев ',naim);
writeln('шириной ', wide * 100:0:2, ' при цене ', cost:0:2, ' руб.');
writeln('за рулон длиной ', leng:0:0, ' м. и ',ng,' банок клея.')
end
end.
Тестовое решение:
Введите информацию по рулонам обоев:
Рулон 1, наименование: Гладкие
ширина, длина, стоимость: 0.8 10 190
Рулон 2, наименование: Гладкие
ширина, длина, стоимость: 0.9 10 210
Рулон 3, наименование: Гладкие
ширина, длина, стоимость: 1.2 8 240
Рулон 4, наименование: Ромбик
ширина, длина, стоимость: 0.8 10.5 210
Рулон 5, наименование: Ромбик
ширина, длина, стоимость: 0.9 10 230
Рулон 6, наименование: Ромбик
ширина, длина, стоимость: 1.1 8.5 240
Рулон 7, наименование: Тисненые
ширина, длина, стоимость: 0.8 10 218
Рулон 8, наименование: Тисненые
ширина, длина, стоимость: 0.9 9.5 224
Рулон 9, наименование: Тисненые
ширина, длина, стоимость: 1 9 235
Длина комнаты, ширина комнаты, высота оклейки
8.5 6.2 2.4
Ширина окна, высота окна, количество окон
1.6 1.2 1
Ширина двери, высота двери, количество дверей
0.95 2.2 2
Стоимость обойного клея и площадь, которую им можно оклеить
85 3.1
Минимальные расходы на оклейку в сумме 3255.00
получаются при использовании 7 рул. обоев Гладкие
шириной 90.00 при цене 210.00 руб.
за рулон длиной 10 м. и 21 банок клея.