Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2015, 23:23   #1
Marianna22
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 24
По умолчанию задача о совместных браках

Всем доброго времени суток!
Есть ли у кого нибудь код программы для решения задачи о совместных браках? - Пусть есть массивы процессов Man[1..n] и Women[1..n]. Каждый мужчина оценивает женщин числами от 1 до n, и каждая женщина так же оценивает мужчин (Получаются перестановки целых чисел от 1 до n).
Должны выполнятся оба следующих условия.
1. Man[i] оценивает Women[p] выше, чем Women[q], или Women[q] оценивает Man[j] выше, чем Man[i].
2. Man[j] оценивает Women[q] выше, чем Women[p], или Women[p] оценивает Man[i] выше, чем Man[j].
нашла в инете код, он ошибки выдает. Может у кого то есть?
Буду очень признательна
Marianna22 вне форума Ответить с цитированием
Старый 06.06.2015, 00:23   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
нашла в инете код, он ошибки выдает. Может у кого то есть?
А где уверенность в том что то что "у кого-то есть" не будет выдавать такие же или другие ошибки? Дело то не только в самом коде, но и в кривизне рук того, кто этот код использует. Ты бы для начала привела свой вариант использования найденного кода и сказала бы какие ошибки он выдает.
northener вне форума Ответить с цитированием
Старый 06.06.2015, 08:22   #3
Marianna22
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 24
По умолчанию задача о стабильных браках

Код:
Const n =8;
Type man = 1..n; woman = 1..n; rank = 1..n; // массив мужчин, женщин, ранга
Var m: man; w: woman; r:rank;        // переменные
        Wmr : array [man, rank] of woman;
        mwr : array [woman, rank] of man;
        rwm : array [man, woman] of rank;
        rmw : array [woman, man] of rank;   //Wmr
        X: array [man] of woman;
        Y: array [woman] of man;
        single: array [woman] of boolean;

procedure print;
var m: man; rm, rw: integer;
begin rm:= 0;rw:=0;
      for m:=1 to n do
        begin write(x[m]:4);
          rm:=rm+rmw[m,x[m]]; rw := rw + rwm[x[m],m]
        end;
writeln(rm:8,rw:4);
end; //{print}

procedure try(m: man);
var r: rank; w: woman;
     function stable: boolean;
     var pm: man; pw: woman;
       i, lim: rank; s: boolean;
        begin s:=true; i:=1;
          while(i<r) ^ s do
            begin pw:=wmr[m,i]; i:=i+1;
              if single[pw] then s:=rwm[pw,m]>rwm[pw,y[pw]];
              end;
             i:=1; lim:=rwm[w,m];
          while (i<lim) ^ s do
            begin pm:= mwr[w,i]; i:= i+1;
              if pm < m then s := rmw[pm,w] > rmw[pm,x[pm]];
            end;
   stable: = s;
end{stable};

begin{try}
   for r:=1 to n do
     begin w:=wmr[m,r];
       if single[w] then
        if stable then
          begin x[m]:=w; y[w]:=m; single[w]:=false;
        if m<n then try(succ(m)) else print;
          single[w]:= true
          end;
     end;
end{try};

procedure print;
begin
  for m: = 1 to n do
  for r:= 1 to n do
begin read(wmr[m,r]); rmw[m,wmr[m;r]]:=r;
end;
   for w:=1 to n do
   for r := 1 to n do
begin read(mwr[w,r]); rwm[w,mwr[w,r]] :=r;
end;
          for w:=1 to n do single[w] := true;
          try(1)
end.
ошибка
[Error] Project1.dpr(28): Identifier expected but 'TRY' found
[Error] Project1.dpr(58): Identifier redeclared: 'print'
Marianna22 вне форума Ответить с цитированием
Старый 06.06.2015, 08:53   #4
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,987
По умолчанию

Цитата:
[Error] Project1.dpr(28): Identifier expected but 'TRY' found
Заменить TRY на другое имя - это зарезервированное слово (begin, end, var, const и т.д. нельзя употреблять в качестве переменных, названий процедур/функций и т.д.)

Цитата:
[Error] Project1.dpr(58): Identifier redeclared: 'print'
Употребляется 2 раза procedure print; - заменить 1-ю процедуру на procedure print1;, а 2-ю procedure print2;

Добавлю еще: здесь какие-то "обрывки" - последняя процедура procedure print; находится после конструкции begin ... end, кроме того, она заканчивается точкой после end.
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 06.06.2015 в 08:57.
newerow1989 вне форума Ответить с цитированием
Старый 06.06.2015, 09:28   #5
Marianna22
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 24
По умолчанию

Спасибо Вам,я не додумалась

Последний раз редактировалось Marianna22; 06.06.2015 в 09:31.
Marianna22 вне форума Ответить с цитированием
Старый 06.06.2015, 09:31   #6
Marianna22
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 24
По умолчанию

Есть еще ошибки, подскажите пожалуйста.
[Error] Project1.dpr(39): Pointer type required (это в while(i<r) ^ s )
[Error] Project1.dpr(44): Pointer type required (while (i<lim) ^ s)
[Error] Project1.dpr(48): ':=' expected but ':' found (stable: = s
[Error] Project1.dpr(65): For loop control variable must be simple local variable (for m = 1 to n do)
[Error] Project1.dpr(67): Expression expected but 'BEGIN' found (begin
read(wmr[m,r]) - почему нет то?
Marianna22 вне форума Ответить с цитированием
Старый 06.06.2015, 09:42   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,987
По умолчанию

Цитата:
[Error] Project1.dpr(39): Pointer type required (это в while(i<r) ^ s )
Надо попробовать писать: while(i<r)

Цитата:
Pointer type required (while (i<lim) ^ s)
while (i<lim)

Цитата:
[Error] Project1.dpr(48): ':=' expected but ':' found (stable: = s
Писать слитно: stable:= s; (между двоеточием и равенством не должно быть пробелов)

Цитата:
[Error] Project1.dpr(65): For loop control variable must be simple local variable (for m = 1 to n do)
for m := 1 to n do (не было двоеточия)
точно так же и на следующей строке

Цитата:
[Error] Project1.dpr(67): Expression expected but 'BEGIN' found (begin
это не надо - оно автоматически уйдет, если исправить предыдущие 2 ошибки

А почему код убрали в 5-м посте?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 06.06.2015, 11:34   #8
Marianna22
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 24
По умолчанию

Спасибо Вам еще раз! получается)
Marianna22 вне форума Ответить с цитированием
Старый 06.06.2015, 11:36   #9
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,987
По умолчанию

Пожалуйста!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 06.06.2015, 11:38   #10
Marianna22
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 24
По умолчанию

Цитата:
Const n =8;
Type man = 1..n; woman = 1..n; rank = 1..n; // ìàññèâ ìóæ÷èí, æåíùèí, ðàíãà
Var m: man; w: woman; r:rank; // ïåðåìåííûå
Wmr : array [man, rank] of woman;
mwr : array [woman, rank] of man;
rwm : array [man, woman] of rank;
rmw : array [woman, man] of rank; //Wmr
X: array [man] of woman;
Y: array [woman] of man;
single: array [woman] of boolean;

procedure print;
var m: man; rm, rw: integer;
begin rm:= 0;rw:=0;
for m:=1 to n do
begin
write(x[m]:4);
rm:=rm+rmw[m,x[m]];
rw := rw + rwm[x[m],m]
end;
writeln(rm:8,rw:4);
end; //{print}


procedure tryM(m: man);
var r: rank; w: woman;

function stable: boolean;
var pm: man; pw: woman;
i, lim: rank; s: boolean;
begin s:=true; i:=1;
while(i<r) do
begin pw:=wmr[m,i]; i:=i+1;
if single[pw] then s:=rwm[pw,m]>rwm[pw,y[pw]];
end;
i:=1; lim:=rwm[w,m];
while (i<lim) do
begin pm:= mwr[w,i]; i:= i+1;
if pm < m then s := rmw[pm,w] > rmw[pm,x[pm]]
end;
stable:= s;
end{stable};


begin{try}
for r:=1 to n do
begin w:=wmr[m,r];
if single[w] then
if stable then
begin x[m]:=w; y[w]:=m; single[w]:=false;
if m<n then tryM(succ(m)) else print;
single[w]:= true
end
// end
end{try};

begin
for m:= 1 to n do
for r:= 1 to n do
begin
read(wmr[m,r]);
rmw[m,wmr[m,r]]:=r;
end;
for w:=1 to n do
for r := 1 to n do
begin read(mwr[w,r]); rwm[w,mwr[w,r]] :=r
end;

for w:=1 to n do single[w] := true;
tryM(1);

{ TODO -oUser -cConsole Main : Insert code here }
end.
получилось вот так. Я хотела скинуть фото кода из книги. попробую ниже. Сейчас только [Error] Project1.dpr(80): Record, object or class type required пишет.
Подскажите, если можно, что может означать код while(i<r) ^ s (именно ^ s)
Marianna22 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51