13.12.2019, 02:29 [+3 UTC]
в нашей команде: 4 064 чел. | участники онлайн: 4 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.79 (12.12.2019)
JS-v.1.35 | CSS-v.3.36

Общие новости:
28.04.2019, 09:13

Форум:
29.11.2019, 17:59

Последний вопрос:
13.12.2019, 02:03
Всего: 151247

Последний ответ:
12.12.2019, 16:10
Всего: 259562

Последняя рассылка:
13.12.2019, 00:45

Писем в очереди:
1

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
16.08.2009, 17:47 »
Петрович_
Спасибо вам, ребята, за такой прекрасный сайт!!! Огромная БЛАГОДАРНОСТЬ Зенченко Константину Николаевичу, за помощь в решении таких трудных (для меня) проблем. Счастья, здоровья и удачи!
02.10.2019, 21:36 »
dar777
Это самое лучшее решение! [вопрос № 196526, ответ № 278818]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

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

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

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 651
puporev
Статус: Профессионал
Рейтинг: 456
Gluck
Статус: 10-й класс
Рейтинг: 455

Перейти к консультации №:
 

Консультация онлайн # 196713
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: IvanDorohov (Посетитель)
Отправлена: 18.10.2019, 17:36
Поступило ответов: 1

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

Состояние: Консультация закрыта

Здравствуйте, 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: 8700 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

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.17426 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.79 от 12.12.2019
Версия JS: 1.35 | Версия CSS: 3.36