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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2012, 17:11   #1
angelalso
Пользователь
 
Регистрация: 23.05.2011
Сообщений: 15
По умолчанию маленькое исправление кода в паскале

не выводит ответ решения
Код:
uses crt;
label lb1;
var
g,m,rab,time,s,ts,obsl,a,b:real;
k,k1,k2,i,j,l:integer;
t1,t,y,t2:array[1..100] of real;
function akspon(m2:real):real;
var x,r:real;
begin
randomize;r:=random(1);
x:=-(1/m2)*ln(1-r);
end;
function ravnom(a,b:real):real;
var x, r:real;
begin
randomize;r:=random(1);
x:=a+(b-a)*r;
end;

Begin
CLRSCR;
g:=0; k1:=0; k2:=0;
writeln('vvedite a,b,m,rab');
read(a,b,m,rab);
lb1:if g<rab then begin
k:=k+1; k1:=k1+1;
g:=g+10; t1[k1]:=g+3;
ts:=ts+3;

for i:=2 to k1 do
if t1[i]<t1[i-1] then begin
S:=t1[i-1];
t1[i-1]:=t1[i];
t1[i]:=S;
end;

for i:=1 to k1 do begin
for j:=1 to 2 do begin
if t1[i]>=Y[j] then begin
obsl:=ravnom(a,b);
t1[i]:=t1[i]+obsl;
Y[j]:=t1[i]+obsl;
ts:=ts+obsl; k1:=k1-1;
if Y[j]>rab then begin
l:=l+1; k2:=k2+1;
t2[k2]:=t1[i]+5;
end;

for i:=1 to k2 do
if t2[i]<t2[i-1] then begin
S:=t2[i-1];
t2[i-1]:=t2[i];
t2[i]:=S;
end else
goto lb1; end
else
t2[i]:=t1[i]+3;
ts:=ts+3;
t1[i]:=t1[i]+9;
ts:=ts+9;end;
end;
t2[i]:=t1[i]+9;
ts:=ts+9;
end;

for i:=1 to k2 do
if t2[i]>=Y[3] then begin
obsl:=akspon(m); t2[i]:=t2[i]+obsl;
Y[3]:=t2[i]+obsl;
ts:=ts+obsl; k2:=k2-1;
end else
time:=ts/k;
writeln('time=',time,'k=',k,'l=',1);
End.
writen (time;k,1);
end.

Последний раз редактировалось ACE Valery; 04.04.2012 в 17:48.
angelalso вне форума Ответить с цитированием
Старый 04.04.2012, 17:54   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Во-первых, функции ничего не возвращают.
Во-вторых, вложенный цикл:
Цитата:
for i:=1 to k2 do
if t2[i]<t2[i-1] then begin
S:=t2[i-1];
t2[i-1]:=t2[i];
t2[i]:=S;
end
Нельзя использовать i (т.к. i используется внешним циклом).

Исправьте или дайте более полную информацию о программе (условие, тесты программы, алгоритм программы).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.04.2012, 18:01   #3
angelalso
Пользователь
 
Регистрация: 23.05.2011
Сообщений: 15
По умолчанию

здесь есть текст задания
Вложения
Тип файла: zip задача.zip (191.9 Кб, 8 просмотров)
angelalso вне форума Ответить с цитированием
Старый 04.04.2012, 18:38   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Программа писалась по блок-схеме?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.04.2012, 18:44   #5
angelalso
Пользователь
 
Регистрация: 23.05.2011
Сообщений: 15
По умолчанию

кажется да
angelalso вне форума Ответить с цитированием
Старый 04.04.2012, 19:09   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Эх, не очень-то она совпадает с блок-схемой.
Хех, это совсем не маленькое исправление
Слишком сложная задача для меня
Блок-схема тоже вызывает подозрения.
Если бы быть 100% уверенным, что или программа или блок-схема сделаны правильно.
В блок-схеме смущает место (см рисунок).
Почему 2 линии заходят в блок цикла или выходят?
Правая линия, похоже, выходит и идет в самое начало.
Левая линия заходит в цикл (это не смущает).

Вобщем, сам я не могу решить данную задачу по текстовому условию (слишком сложно для меня), а разобраться в блок-схеме невозможно из-за логических ошибок (на мой взгляд, присутствующих)
Изображения
Тип файла: png блоксхема.png (21.7 Кб, 59 просмотров)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.04.2012, 19:18   #7
angelalso
Пользователь
 
Регистрация: 23.05.2011
Сообщений: 15
По умолчанию

спасибо за уделенное время
angelalso вне форума Ответить с цитированием
Старый 04.04.2012, 21:52   #8
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Вот так вроде работает(по крайней мере не зацикливается).
Код:
label lb1;
var
g,m,rab,time,s,ts,obsl,a,b:real;
k,k1,k2,i,j,l,p:integer;
t1,t,y,t2:array[1..100] of real;
function akspon(m2:real):real;
var r:real;
begin
  randomize;
  r:=random(1);
  akspon:=-(1/m2)*ln(1-r);
end;
function ravnom(a,b:real):real;
var r:real;
begin
  randomize;
  r:=random(1);
  ravnom:=a+(b-a)*r;
end;
begin
    Write('a = ');
    Readln(a);
    Write('b = ');
    Readln(b);
    Write('m = ');
    Readln(m);
    Write('rab = ');
    Readln(rab);
    g:=0;
    k:=0;
    k1:=0;
    k2:=0;
    ts:=0;
   lb1:
    if g < rab then
    Begin          //yes
      inc(k);
      k:=k1+1;
      g:=g+10;
      t1[k1]:=g+3;
      ts:=ts+3;
      for i := 2 to k1 do
        Begin
          if t1[i] < t1[i-1] then
          Begin
            S:=t1[i];
            t1[i]:=t1[i-1];
            t1[i-1]:=s
          End;
        End;
        for i := 1 to k1 do
          Begin
            for j := 1 to 2 do
            Begin
              t1[i]:=t1[i]+9;
              ts:=ts+9;
              if t1[i] >= Y[j] then
              Begin
                obsl:=ravnom(a,b);
                t1[i]:=t1[i]+obsl;
                Y[j]:=t1[i]+obsl;
                ts:=ts+obsl
              End
              else
              Begin
                t1[i]:=t1[i]+3;
                ts:=ts+3;
              End;
            End;  //end loop j
             dec(k1);
             if Y[j] > rab then
             Begin
               inc(l);
               inc(k2);
               t2[k2]:=t1[i]+5;
             End
             Else GoTo lb1 ;
             for p := 1 to k1 do
             Begin
               if t2[p] < t2[p-1] then
               Begin
                 S:=t2[p];
                 t2[p]:=t2[p-1];
                 t2[p-1]:=S
               End;
             End;  //end loop p
          End; //end loop i
          for i := 1 to k2 do
            Begin
              if t2[i] > Y[3] then
              Begin
                obsl:=akspon(m);
                t2[i]:=t2[i]+obsl;
                Y[3]:=t2[i]+obsl;
              End;
            End; //end loop i
            dec(k2);
            GoTo lb1
    End
    else      //no
    Begin
      time:=ts/k;
      Writeln('time = ',time:6:4,' k = ',k:4,' l = ',l:4);
    End;
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками. Исправление кода. allod26 Паскаль, Turbo Pascal, PascalABC.NET 0 17.12.2011 16:36
Исправление кода под нужный компилятор МихаилБ Помощь студентам 3 26.06.2011 22:32
Создание формы + исправление кода Meiyo C# (си шарп) 2 22.06.2011 09:30
Исправление кода... SwIm Помощь студентам 3 19.01.2010 01:43
Помогите в исправление кривого кода HECTOR.A. Помощь студентам 2 02.06.2009 11:05