Как написать программу на Паскале для загрузки контейнера с максимальной стоимостью товаров без превышения

Как написать программу на Паскале для загрузки контейнера с максимальной стоимостью товаров без превышения грузоподъемности? Объем контейнера и данные о количестве, цене и весе товаров каждого типа заданы.
Cherepaha_4621

Cherepaha_4621

Для решения данной задачи мы можем использовать жадный алгоритм. Давайте разберемся, как это сделать.

Шаг 1: Загрузка данных
Сначала вам потребуется ввести данные о контейнере и товарах. Для этого вы можете использовать операторы чтения в Паскале. Вот пример кода для чтения этих данных:

pascal
program РасстановкаГрузов;
var
Грузоподъемность, ОбъемКонтейнера: integer;
КоличествоТоваров: integer;
ВесТовара, ЦенаТовара: array[1..100] of integer;
begin
writeln("Введите грузоподъемность контейнера:");
readln(Грузоподъемность);

writeln("Введите объем контейнера:");
readln(ОбъемКонтейнера);

writeln("Введите количество товаров:");
readln(КоличествоТоваров);

writeln("Введите информацию о каждом товаре:");
for i := 1 to КоличествоТоваров do
begin
writeln("Товар", i);
writeln("Введите вес товара:");
readln(ВесТовара[i]);

writeln("Введите цену товара:");
readln(ЦенаТовара[i]);
end;
end.


Шаг 2: Расстановка товаров
После ввода данных о контейнере и товарах, мы можем приступить к расстановке товаров в контейнере. Чтобы максимизировать стоимость товаров без превышения грузоподъемности, мы будем выбирать товары с самой высокой стоимостью в единицу объема и добавлять их в контейнер, пока не будет заполнен весь доступный объем или не будут закончены товары.

Вот пример кода, который реализует эту логику:

pascal
program РасстановкаГрузов;
var
Грузоподъемность, ОбъемКонтейнера: integer;
КоличествоТоваров: integer;
ВесТовара, ЦенаТовара: array[1..100] of integer;
Стоимость: array[1..100] of real;
РасстановкаТоваров: array[1..100] of integer;
ОбщаяСтоимость, ОстатокОбъема, ОстатокГрузоподъемности: real;
i, j, МаксИндекс: integer;
begin
writeln("Введите грузоподъемность контейнера:");
readln(Грузоподъемность);

writeln("Введите объем контейнера:");
readln(ОбъемКонтейнера);

writeln("Введите количество товаров:");
readln(КоличествоТоваров);

writeln("Введите информацию о каждом товаре:");
for i := 1 to КоличествоТоваров do
begin
writeln("Товар", i);
writeln("Введите вес товара:");
readln(ВесТовара[i]);

writeln("Введите цену товара:");
readln(ЦенаТовара[i]);

Стоимость[i] := ЦенаТовара[i] / ВесТовара[i]; // Вычисление стоимости товара в единицу объема
end;

// Расставляем товары в контейнере по убыванию стоимости
ОстатокОбъема := ОбъемКонтейнера;
ОстатокГрузоподъемности := Грузоподъемность;
ОбщаяСтоимость := 0;

for i := 1 to КоличествоТоваров do
begin
МаксИндекс := 0;

for j := 1 to КоличествоТоваров do
begin
if (РасстановкаТоваров[j] = 0) and ((МаксИндекс = 0) or (Стоимость[j] > Стоимость[МаксИндекс])) then
МаксИндекс := j;
end;

if (ВесТовара[МаксИндекс] <= ОстатокГрузоподъемности) and (ОбъемТовара[МаксИндекс] <= ОстатокОбъема) then
begin
РасстановкаТоваров[МаксИндекс] := 1;
ОстатокГрузоподъемности := ОстатокГрузоподъемности - ВесТовара[МаксИндекс];
ОстатокОбъема := ОстатокОбъема - ОбъемТовара[МаксИндекс];
ОбщаяСтоимость := ОбщаяСтоимость + ЦенаТовара[МаксИндекс];
end;
end;

writeln("Максимальная стоимость товаров: ", ОбщаяСтоимость);
writeln("Расстановка товаров:");
for i := 1 to КоличествоТоваров do
begin
if РасстановкаТоваров[i] = 1 then
writeln("Товар", i);
end;
end.


Теперь у вас есть полная программа на Паскале, которая решает задачу загрузки контейнера с максимальной стоимостью товаров без превышения грузоподъемности. Вы можете запустить программу и ввести соответствующие данные, чтобы увидеть результаты. Учтите, что данный код является примером и может потребовать некоторых доработок в зависимости от ваших потребностей.
Знаешь ответ?
Задать вопрос
Привет!
hello