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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2009, 12:21   #1
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
Стрелка TurboPascal:переделать программу без repeat-until

Здравствуйте!
Вчера я сдавала л/р на тему "Графы - нахождение длины кратчайшего пути методом динамического программирования". Вот текст программы:

Код:
Program lab7;
 type
  mnozhestvo=set of 0..9;
 var
  X,F1,F2,F3,F4,F5,F6,F7,F8,F9:mnozhestvo;
  R,L:array [1..9,1..9] of 0..100;
  A:array [1..9] of 0..100;
  i,j,m,n,min:byte;
 Begin
  X:=[1,2,3,4,5,6,7,8,9];
  F1:=[2,3,4];
  F2:=[3,6];
  F3:=[4,5];
  F4:=[5,7];
  F5:=[6,8];
  F6:=[9];
  F7:=[8,9];
  F8:=[9];
  F9:=[];
  for j:=1 to 9 do
   begin
    if j in F1 then r[1,j]:=1 else r[1,j]:=0;
    if j in F2 then r[2,j]:=1 else r[2,j]:=0;
    if j in F3 then r[3,j]:=1 else r[3,j]:=0;
    if j in F4 then r[4,j]:=1 else r[4,j]:=0;
    if j in F5 then r[5,j]:=1 else r[5,j]:=0;
    if j in F6 then r[6,j]:=1 else r[6,j]:=0;
    if j in F7 then r[7,j]:=1 else r[7,j]:=0;
    if j in F8 then r[8,j]:=1 else r[8,j]:=0;
    if j in F9 then r[9,j]:=1 else r[9,j]:=0;
   end;
  for i:=1 to 9 do
   begin
    for j:=1 to 9 do
     write(r[i,j]:2);
    writeln;
   end;

  for j:=1 to 9 do
   l[j,1]:=0;
  for i:=2 to 9 do
   for j:=1 to 9 do
    l[j,i]:=100;

  j:=1;
  repeat

   j:=j+1;
   n:=0;
   for i:=1 to 9 do
    if r[i,j]=1 then
     begin
      n:=n+1;
      a[n]:=l[j-1,i]+1;
     end;
   min:=100;
   for m:=1 to n do
     if a[m]<min then min:=a[m];
   for i:=j to 9 do
    l[i,j]:=min;

  until j=9;

  writeln;

  for j:=1 to 9 do
   begin
    for i:=1 to 9 do
     write(l[j,i]:4);
    writeln;
   end;

 End.
Всё работает, всё правильно, но преподаватель сказал что тут можно обойтись без repeat-until (и при этом не потерять универсальность программы). Ка это сделать? Заранее спасибо:*
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 11.12.2009, 12:29   #2
Armorer
Подтвердите свой е-майл
 
Регистрация: 07.04.2007
Сообщений: 120
По умолчанию

Не точное условие.

Т.е. нужно заменить repeat на for?
Или изменить алгоритм чтобы в этом месте цикла не было?

Первое решается элементарно, а для второго надо думать над условием, возможно, менять алгоритм.
Armorer вне форума Ответить с цитированием
Старый 11.12.2009, 12:45   #3
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Если можно заменить repeat на for то лучше так))))) преподаватель любит чтобы всё было просто))))
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 11.12.2009, 12:50   #4
Armorer
Подтвердите свой е-майл
 
Регистрация: 07.04.2007
Сообщений: 120
По умолчанию

Код:
//j := 1;
//until

for j := 1 to 9 do begin
  // j:=j+1;
   n:=0;
   for i:=1 to 9 do
    if r[i,j]=1 then
     begin
      n:=n+1;
      a[n]:=l[j-1,i]+1;
     end;
   min:=100;
   for m:=1 to n do
     if a[m]<min then min:=a[m];
   for i:=j to 9 do
    l[i,j]:=min;

//  until j=9;
end;
Armorer вне форума Ответить с цитированием
Старый 11.12.2009, 12:56   #5
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

ОГРОМНОЕ спасибо за помощь:*:*:*
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 11.12.2009, 13:34   #6
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

хммм.... что-то неправильно работает...
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 11.12.2009, 13:34   #7
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

выводит одни сотни
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите переделать программу на VS C++ Many man Помощь студентам 1 16.10.2009 19:26
Помогите переделать программу. Valentin49 Помощь студентам 1 26.03.2009 13:58
Нужно переделать программу? bamer Фриланс 6 28.12.2008 17:12