Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

zdwork
Статус: 6-й класс
Рейтинг: 864
∙ повысить рейтинг »
puporev
Статус: Профессионал
Рейтинг: 145
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 0
∙ повысить рейтинг »

∙ Pascal / Delphi / Lazarus

Номер выпуска:1785
Дата выхода:28.10.2019, 17:45
Администратор рассылки:Зенченко Константин Николаевич (Старший модератор)
Подписчиков / экспертов:33 / 37
Вопросов / ответов:1 / 1

Консультация # 196713: Уважаемые эксперты! Пожалуйста, ответьте на вопрос, помогите решить или дайте совет: Имеется каталог на 15 видов с/х машин, где указаны: номер, цена и название. Десять фермерских хозяйств составили приоритетные списки, где указаны по 5 названий машин, которые хотели бы приобрести. Зная количество денег для этих целей в каждом хозяйстве, надо напеча...

Консультация # 196713:

Уважаемые эксперты! Пожалуйста, ответьте на вопрос, помогите решить или дайте совет: Имеется каталог на 15 видов с/х машин, где указаны: номер, цена и название. Десять фермерских хозяйств составили приоритетные списки, где указаны по 5 названий машин, которые хотели бы приобрести. Зная количество денег для этих целей в каждом хозяйстве, надо напечатать список номеров машин, которых может приобрести каждое хозяйство (предположить, что хозяйство будет покупать по одной машине каждого типа).
написать нужно на паскале

Дата отправки: 18.10.2019, 17:36
Вопрос задал: IvanDorohov (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Старший модератор):

Здравствуйте, IvanDorohov!

Смотрите приложение:

Код (Pascal) :: выделить код
const
  k=5;
  n=15;
  m=10;
type
  {}
  tMas=array[1..k]of integer;
  {описание сельхоз машин}
  tVM=record{vilage mashin}
    name:string;{название}
    cost:integer;{стоимость}
    indx:string;{индекс ???}
    end;
  {описание хозяйств}
  tVA=record{vilage account}
    name:string;{название}
    summ:longint;{счет хозяйства}
    want:tMas;{массив желаний}
    end;
{генерация названий}
function gen(a:integer):string;
  var
    b:string;
  begin
    b:='';
    while a>0 do
      begin
        b:=b+chr(ord('0')+random(10));
        dec(a);
      end;
    gen:=b;
  end;
{перебор вариантов}
function check(var a:tMas;b:integer):boolean;
  var
    c,d,e,f:integer;
  begin
    for c:=1 to k do a[c]:=0;
    c:=0;
    e:=1;
    f:=1;
    while(b>0)and(c<6)do
      begin
        d:=b and 1;
        inc(c,d);
        b:=b shr 1;
        d:=d*e;
        inc(e);
        if(d in [1..n])and(f in [1..k])then
          begin
            a[f]:=d;
            inc(f);
          end;
      end;
    dec(f);
    check:=(c=k)and(f=k);
  end;
var
  a:array[1..n]of tVM;
  b:array[1..m]of tVA;
  d:set of byte;
  e:longint;
  f,i,j:integer;
  what:tMas;
begin
  {ввод - генерация сельхоз машин}
  for i:=1 to n do
    begin{create vm}
      write('name machine:');{readln(a[i].name)}a[i].name:='VM'+gen(6);write(a[i].name);
      write('cost mashine:':15);{readln(a[i].cost)}a[i].cost:=6000+270*random(n);write(a[i].cost:6);
      write('index mashine:':15);{readln(a[i].indx)}a[i].indx:='index:'+gen(8);writeln(a[i].indx);
    end;{ /create vm}
  writeln;
  {ввод - генерация хозяйств}
  for i:=1 to m do
    begin{create VA}
      write('name vilage:');{readln(b[i].name)}b[i].name:='vilage'+gen(4);writeln(b[i].name);
      write('account vilage:');{readln(b[i].account)}b[i].summ:=39000+250*random(n);writeln(b[i].summ);
      d:=[];
      for j:=1 to k do
        begin
          repeat
            e:=random(n)+1
          until  not (e in d);
          d:=d+[e];
          b[i].want[j]:=e;
        end;
      {вывод желаемого}
      write('want:');
      for j:=1 to k do
        begin
          write(a[b[i].want[j]].name:12);
          e:=e+a[b[i].want[j]].cost;
        end;
      writeln;
      if(e<=b[i].summ)and(e>0) then writeln(true){желаемое получилось}
        else
        begin{find variants}
          writeln('find variants:');{начинаем поиск вариантов}
          for j:=1 to 32000 do
            begin
              if check(what,j)then
                begin
                  e:=0;
                  for f:=1 to k do e:=e+a[what[f]].cost;
                  if e<=b[i].summ then
                    begin
                      write('variant:');
                      for f:=1 to k do write(a[what[f]].name:9);{вывод варианта}
                      writeln('summa:=':8,e);
{                      break;{если убрать коммент, будет выводить только один вариант}
                    end;
                end;
            end;
        end;{/find variants}
      writeln;
    end;{/create VA}
end.


Выводится следующая информация :
© Цитата: список сельхоз машин
name machine:VM008226 cost mashine: 7080 index mashine:index:13404080
name machine:VM293736 cost mashine: 9240 index mashine:index:73134282
name machine:VM418279 cost mashine: 7890 index mashine:index:88011505
name machine:VM076775 cost mashine: 6810 index mashine:index:65969262
name machine:VM074855 cost mashine: 9780 index mashine:index:63079771
name machine:VM197586 cost mashine: 7080 index mashine:index:06281259
name machine:VM112154 cost mashine: 7080 index mashine:index:16770001
name machine:VM783647 cost mashine: 7890 index mashine:index:38810001
name machine:VM625238 cost mashine: 7080 index mashine:index:36693427
name machine:VM757455 cost mashine: 9510 index mashine:index:61441056
name machine:VM098692 cost mashine: 8 700 index mashine:index:74612931
name machine:VM930185 cost mashine: 8700 index mashine:index:16039534
name machine:VM933408 cost mashine: 8970 index mashine:index:19418428
name machine:VM516953 cost mashine: 7620 index mashine:index:21696650
name machine:VM712874 cost mashine: 9780 index mashine:index:10103330


© Цитата: желание совпало с возможностями
name vilage:vilage4546
account vilage:42000
want: VM625238 VM076775 VM197586 VM516953 VM757455
TRUE


© Цитата: перебор возможных вариантов
name vilage:vilage6879
account vilage:39500
want: VM930185 VM074855 VM098692 VM112154 VM712874
find variants:
variat: VM008226 VM293736 VM418279 VM076775 VM197586 summa:=38100
variat: VM008226 VM418279 VM076775 VM074855 VM197586 summa:=38640
variat: VM008226 VM293736 VM418279 VM076775 VM112154 summa:=38100
variat: VM008226 VM418279 VM076775 VM074855 VM112154 summa:=38640
variat: VM008226 VM293736 VM418279 VM197586 VM112154 summa:=38370


Если захотите руками вводить информацию, в строках, аналогичных этой:
Код (Pascal) :: выделить код
write('name machine:');{readln(a[i].name)}a[i].name:='VM'+gen(6);write(a[i].name);

Уберите комментарий с readln, а все, что за ним закомментируйте.
Удачи!

Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 25.10.2019, 12:02

5
Большое спасибо, Константин Николаевич
-----
Дата оценки: 25.10.2019, 12:15

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное