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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.12.2009, 20:41   #1
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
Вопрос Ошибка во FreePas, в Turbo нет ошибки

Код:
Program Slova;
 Var s,s1: string;
     i,k,o,o1,v,min,M: integer;
     a,a2,v1: array [1..79] of integer;
Begin
 Write('Vvedite stroku iz chisel ');ReadLn(s);
 Write('Vvedite chislo M ');ReadLn(M);
 k:=1;
 s1:='';
 v:=1;
 For i:=1 to Length(s) Do
  begin
   If (s[i]>='0') and (s[i]<='9') then
     begin
      s1:=s1+s[i]; v1[v]:=i; v:=v+1;
      If i=Length(s) then
       begin
        Val(s1,o,o1);
        a[k]:=o;
       end;
     end
    else
     begin
      Val(s1,o,o1);
      If ((s[i]=' ') and (s[v1[1]-1]=' ')) or
       ((s[i]=' ') and (v1[1]=1)) then
        begin
         a[k]:=o;
         k:=k+1;
        end;
      s1:=''; v:=1;
     end;
  end;
  k:=0;
  For i:=1 to 60 Do If (a[i]>0) and (M mod a[i]=0) then begin a2[i]:=a[i]; k:=k+1; end;
  min:=a[1];
  For i:=1 to k Do If a2[i]<min then min:=a2[i];
  WriteLn('Minimalnoe znachenie = ',min);
 ReadLn;
end.
Помогите определить почему во фри паскале ошибка 201, а в турбо работает все идеально?
Gapro вне форума
Старый 03.01.2011, 11:03   #2
Dalokoshka
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

В турбо все работает , а в фри не хочет. Кроме того, не могу найти , что значит эта ошибка =( , собственно ,поэтому и не могу ее устранить =(

Может быть кто-нибудь сталкивался с подобной проблемой?
Просто, я никак не могу понять, что это за ошибка и почему в турбо она не возникает. А преподаватель принимает работу только в ФриПаскале, я же пишу их в Турбо.
Вложения
Тип файла: txt Copy of 13UZD.txt (4.5 Кб, 125 просмотров)
Спасибо огромное и низкий поклон всем тем, добрым людям, которые помогают мне - бедному студенту и моим коллегам.

Последний раз редактировалось Stilet; 06.01.2011 в 13:51.
Dalokoshka вне форума
Старый 03.01.2011, 14:33   #3
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Цитата:
Помогите определить почему во фри паскале ошибка 201, а в турбо работает все идеально?
Выход у тебя происходит за границы массива. Вероятно в TP в опциях компилятор не поставлена проверка Range Checking. Вот он и проглатывает. Кроме того, на некоторых данных все идет нормально. на некоторых вылетает ошибка.
Разберись получше с кодом.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума
Старый 03.01.2011, 14:39   #4
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

Цитата:
201 Range check error
If you compiled your program with range checking on, then you can get this error in the following cases:
1.An array was accessed with an index outside its declared range.
2.Trying to assign a value to a variable outside its range (for instance an enumerated type).
http://community.freepascal.org:1000.../userch14.html
dosha вне форума
Старый 03.01.2011, 15:20   #5
Dalokoshka
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 27
По умолчанию

Это может быть из-за того, что в графическом режиме требуется целочисленный тип? То есть, у меня все все идет, если я все значения округляю (round), но тогда график рисуется не правильный ( т.к. данные искажены).
А турбо принимает все значения, которые сами по себе целые и без округления.
Теперь возникает проблема, как в таком случае, написать прогу, для графика функции во Фри?
Код:
program uzd13;
 Uses Graph;

Var grDriver : Integer;
      grMode : Integer;
     ErrCode : Integer;
     x,y,x0,y0,q,a,dx,dy,b,c,i,g,xs: Integer;
     t: string;
     color:word;
     xx,xm,yy,ys,ym:real;
  Begin
 grDriver:=Detect;
 InitGraph(grDriver, grMode, '');
 ErrCode:=GraphResult;
 If ErrCode = grOk Then
  Begin
   setcolor (cyan);
   q:=20;
   OutTextXY (round(1.5*q+5), round(1.5*q), '   3x-2');
   OutTextXY (round(1.5*q+5), round(2*q), 'y=');
   OutTextXY (round(1.5*q+5), round(2.5*q), '  4x^3+1');
   OutTextXY (round(GetMaxX/2)-q, 10, 'y');
   OutTextXY (GetMaxX-10, round((GetMaxY/2)-0.5*q)-3, 'x');
   Line (round(2.5*q), 2*q+3, 5*q, 2*q+3 );
   SetColor (white);
   Line ( q, round((GetMaxY/2)-0.5*q), GetMaxX-q, round((GetMaxY/2)-0.5*q));
   Line ( round(GetMaxX/2), q, round(GetMaxX/2), GetMaxY-q);
   MoveTo (GetMaxX-q, round((GetMaxY/2)-0.5*q) );
   LineRel (-10,-10);
   MoveTo (GetMaxX-q, round((GetMaxY/2)-0.5*q));
   LineRel (-10, 10);
   MoveTo (round(GetMaxX/2), q);
   LineRel (-10, 10);
   MoveTo (round(GetMaxX/2), q );
   LineRel (10, 10);
   x0:=round(getMaxX/2);
   y0:=round((getMaxY/2)-0.5*q);
   OutTextxy (x0-q, round(0.25*q)+y0, '0');
   dx:=100;
   dy:=100;
   b:=x0;
   i:=1;
   while (b<getmaxx-q)  do
       begin
       moveto (b, round((getmaxy/2)-0.5*q)-2);
       lineto (b, round((getmaxy/2)-0.5*q)+2);
       inc(b,10);
       inc(i);
       str((i/10):0:0,t);
       case i of
            10: outtextxy (b, round((getmaxy/2)-0.25*q), t);
            20: outtextxy (b, round((getmaxy/2)-0.25*q), t);
            30: outtextxy (b, round((getmaxy/2)-0.25*q), t);
            40: outtextxy (b, round((getmaxy/2)-0.25*q), t);
       end
       end;
   b:=x0;
   i:=1;
   while (b>q)  do
       begin
       moveto (b, round((getmaxy/2)-0.5*q)-2);
       lineto (b, round((getmaxy/2)-0.5*q)+2);
       dec(b,10);
       dec(i);
       str((i/10):0:0,t);
       case i of
            -10: outtextxy (b, round((getmaxy/2)-0.25*q), t);
            -20: outtextxy (b, round((getmaxy/2)-0.25*q), t);
            -30: outtextxy (b, round((getmaxy/2)-0.25*q), t);
            -40: outtextxy (b, round((getmaxy/2)-0.25*q), t);
       end
       end;
   c:=y0;
   i:=0;
   while c>q do
        begin
        moveto (round(getmaxx/2)-2, c);
        lineto (round(getmaxx/2)+2, c);
        dec(c,10);
        inc(i);
        str((i/10):0:0,t);
       case i of
            10: outtextxy (round(getmaxx/2)+5, c-3, t);
            20: outtextxy (round(getmaxx/2)+5, c-3, t);
            30: outtextxy (round(getmaxx/2)+5, c-3, t);
            40: outtextxy (round(getmaxx/2)+5, c-3, t);
       end
   end;
   c:=y0;
   i:=0;
   while c<getmaxy-q do
        begin
        moveto (round(getmaxx/2)-2, c);
        lineto (round(getmaxx/2)+2, c);
        inc(c,10);
        dec(i);
        str((i/10):0:0,t);
       case i of
            -10: outtextxy (round(getmaxx/2)+5, c-3, t);
            -20: outtextxy (round(getmaxx/2)+5, c-3, t);
            -30: outtextxy (round(getmaxx/2)+5, c-3, t);
            -40: outtextxy (round(getmaxx/2)+5, c-3, t);
       end
   end;

   setcolor (red); {asimptota}
   setlinestyle (3,0,1);
   xs:=0;
   ys:=(3*xs-2)/(4*xs*xs*xs+1);
   moveto (xs+x0,round(ys*-dy)+y0);
   for a:=x0 downto q do
       begin
            xM:=round((a-x0)/dx);
            ym:=round(4*xm*xm*xm+1);
            if ym=0 then
            begin
            moveto (a, q);
            lineto (a, round(getmaxy-q))
            end;
       end;
   moveto (xs+x0,round(ys*-dy)+y0);
   for a:=x0 to round(getmaxx-q) do
       begin
            xM:=round((a-x0)/dx);
            ym:=round(4*xm*xm*xm+1);
            if ym=0 then
            begin
            moveto (a, q);
            lineto (a, round(getmaxy-q))
            end;
       end;

   setcolor(cyan);
   setlinestyle(0,0,1);
   moveto (xs+x0,round((ys*-dy)+y0));
   xx:=0;
   for a:=x0 downto q do
       begin
            xx:=round((a-x0)/dx);
            if (4*xx*xx*xx+1)<>0 then
            begin
                yy:=(3*xx-2)/(4*xx*xx*xx+1);
                g:=round((yy*-dy)+y0);
                lineto ( a, g)
            end
       end;
   moveto (xs+x0,round((ys*-dy)+y0));
   xx:=0;
   for a:=x0 to round(getmaxx-q) do
       begin
            xx:=round((a-x0)/dx);
            if (4*xx*xx*xx+1)<>0 then
            begin
                yy:=(3*xx-2)/(4*xx*xx*xx+1);
                g:=round((yy*-dy)+y0);
                lineto ( a, g)
            end
       end;
   ReadLn;
   CloseGraph;
  End
 Else WriteLn('ЋиЁЎЄ* Ё*ЁжЁ*«Ё§*жЁЁ Ја*дЁЄЁ:', GraphErrorMsg(ErrCode));
End.
Спасибо огромное и низкий поклон всем тем, добрым людям, которые помогают мне - бедному студенту и моим коллегам.

Последний раз редактировалось Stilet; 06.01.2011 в 13:51. Причина: добавила код
Dalokoshka вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка! В устройстве нет диска, вставьте диск\Device\Harddisk1\DR2 Alexij Windows 10 15.09.2014 10:28
Нет доступа в нет для Антивирусов! Ralf_ru Операционные системы общие вопросы 4 22.10.2009 16:33
Ошибка в Delphi или нет? vitalik007 Общие вопросы Delphi 3 10.04.2008 19:47
Программирование под Windows (ошибка), как избежать ошибки Unresolved external '_main' referenced fro DeLure Общие вопросы C/C++ 2 02.03.2008 01:35