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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2011, 19:11   #1
vesdesvet
 
Регистрация: 28.06.2011
Сообщений: 7
По умолчанию почему не работает прога?

Я написала программу. Она компилируется, запускается, но ничего не делает. Вот текст программы:

Код:
uses DOS;
const
 max=10;
var tower1,tower2,tower3, tower4,tower5,tower6, d:array[1..max] of integer;
    i, j, m: integer; c1, c2, c3: string;c4,c5,c6:array[1..10] of string;
    t, g:text;
{0} Hour2,Minute2,Sec2,MS2,Hour1,Minute1,Sec1,MS1,h11,min11,sec11,ms11:word;
{1} Hour, Minute, Sec111, MS111, h, min, sec, ms: array[1..10] of word;

procedure RECUR(n,v1,v2,v3:integer;s1,s2,s3:array of integer;c11,c12,c13:string);

  procedure print(s11,s12,s13:array of integer;c21,c22,c23:string);
{$S-}   begin
       writeln(t,'put disk');
{$R-}        for i:=1 to m do write(t,s11[i],' ');
       writeln(t,c21);
        for i:=1 to m do write(t,s12[i],' ');
       writeln(t,c22);
        for i:=1 to m do write(t,s13[i],' ');
       writeln(t,c23);
   end;

 begin
if n=1 then
  begin
   v1:=v1+1;
   s1[v1]:=n;
   print(s1,s2,s3,c11,c12,c13);
  end
else
  begin
   v1:=v1+1;
{$R-}   s1[v1]:=n;
   print(s1,s2,s3,c11,c12,c13);
   Recur(n-1,v3,v2,v1,s3,s2,s1,c13,c12,c11);
   Recur(n-1,v1,v2,v3,s1,s2,s3,c11,c12,c13);
  end;
end;

begin
   
    GetTime (Hour1, Minute1, Sec1, MS1);
    for i:=1 to 10 do begin
     i:=0; GetTime (Hour[2*i+1], Minute[2*i+1], Sec111[2*i+1], MS111[2*i+1]); end;
    assign(t,'d:\pas\ba\lab221.txt');
    assign(g,'d:\pas\ba\zapis221.txt');
    rewrite(t);
    append(g); 
   writeln('vvedite:');  readln(m);
  for i:=1 to m do
   begin
     tower1[i]:=0;
     tower2[i]:=0;
     tower3[i]:=0;
   end; 
  c1:='tower1';
  c2:='tower2';
  c3:='tower3';
 RECUR(m,0,0,0,tower2,tower1,tower3,c2,c1,c3);
    gettime (Hour2, Minute2, Sec2, MS2);
      h11:=Hour2-Hour1;
      min11:=Minute2-Minute1;
      sec11:=Sec2- Sec1;
      ms11:=MS2-MS1;
      writeln(t,m,'      * ',h11,' :',min11,' :',sec11,' :',ms11);
   for i:=1 to 10 do begin
    for j:=1 to d[i] do
   begin
     tower4[j]:=0;
     tower5[j]:=0;
     tower6[j]:=0;
   
     c4[i]:='tower4';
     c5[i]:='tower5';
     c6[i]:='tower6';
   RECUR(d[i],0,0,0,tower5[j],tower4[j],tower6[j],c5[i],c4[i],c6[i]);
    gettime (Hour[2*i], Minute[2*i], Sec111[2*i], MS111[2*i]);
      h[i]:=Hour[2*i]-Hour[2*i-1];
      min[i]:=Minute[2*i]-Minute[2*i-1];
      sec[i]:=Sec111[2*i]- Sec111[2*i-1];
      ms[i]:=MS111[2*i]-MS111[2*i-1];
      if (ms[i]<60) then begin
         writeln(g,'*          *                *');
         writeln(g,'*   ',d[i],'      * ',h[i],' :',min[i],' :',sec[i],' :',ms[i],'    *');
         writeln(g,'*          *                  *');
         writeln(g,'*****************************');
      end;
      if (ms[i]>60) or (ms[i]=60) then begin
         ms[i]:=0; sec[i]:=sec[i]+1;
         writeln(g,'*          *                *');
         writeln(g,'*   ',d[i],'      * ',h[i],' :',min[i],' :',sec[i],' :',ms[i],'    *');
         writeln(g,'*          *                *');
         writeln(g,'*****************************');
      end;
          end; end;
close(g);   close(t);
end.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 28.06.2011 в 20:06.
vesdesvet вне форума Ответить с цитированием
Старый 28.06.2011, 19:16   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Что она должна делать? Условия задачи в студию.
Вадим Мошев вне форума Ответить с цитированием
Старый 28.06.2011, 19:19   #3
vesdesvet
 
Регистрация: 28.06.2011
Сообщений: 7
По умолчанию

Эта задача о ханойских башнях.Она должана выводить в файл время перекладывания 10-ти дисков.
vesdesvet вне форума Ответить с цитированием
Старый 28.06.2011, 19:49   #4
vesdesvet
 
Регистрация: 28.06.2011
Сообщений: 7
По умолчанию

Если изменить кусочек в программе, то будет выводится лиш время подсчёта одного диска в файл t. Но при этом второй файл остаётся без изменений.

begin
GetTime (Hour1, Minute1, Sec1, MS1);

for i:=1 to 10 do begin
{i:=0;} GetTime (Hour[2*i-1], Minute[2*i-1], Sec111[2*i-1], MS111[2*i-1]); end;

assign(t,'d:\pas\bal\lab221.txt');
assign(g,'d:\pas\bal\zapis221.txt') ;
rewrite(t);
append(g);
{writeln('vvedite:'); readln(m);} m:=1;
vesdesvet вне форума Ответить с цитированием
Старый 28.06.2011, 20:11   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) ошибка - Вы же i обнуляете в цикле!
Мало того, что так делать нельзя, так ещё и бесконечный цикл получаете!

выкинуть то, что КРАСНЫМ
Цитата:
Код:
    for i:=1 to 10 do begin
     i:=0; GetTime (Hour[2*i+1], Minute[2*i+1], Sec111[2*i+1], MS111[2*i+1]); end;
2)
файл d:\pas\ba\zapis221.txt обязательно должен существовать. (Вы его пытаетесь открыть на добавление записей - если его нет - работать не будет!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.06.2011, 20:14   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Но при этом второй файл остаётся без изменений.
так вы же в цикл
Цитата:
Код:
    for j:=1 to d[i] do
внутрь не попадаете.
у Вас все элементы массива d равны нулю!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.06.2011, 20:54   #7
vesdesvet
 
Регистрация: 28.06.2011
Сообщений: 7
По умолчанию

Благодарю за помощь. Вот, я изменила эти кусочки, которые вы указали.
Код:
for i:=1 to 10 do begin
     {i:=0;} GetTime (Hour[2*i-1], Minute[2*i-1], Sec111[2*i-1], MS111[2*i-1]); end;

 for i:=1 to 10 do begin 
        d[i]:=i;
    for j:=1 to d[i] do
И у меня будет ещё одна просьба объяснить суть ошибки, которая высвечивается в программе после исправления:
Error 215: Runtime error.

Последний раз редактировалось vesdesvet; 28.06.2011 в 20:56.
vesdesvet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
Почему на разных компах прога работает иначе? Davlet M Помощь студентам 2 20.02.2011 17:31
почему интеренет на Xp не работает, а на семерке работает Lenura Windows 18 04.10.2010 12:04