На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Модуль Dos не найден
    Всем привет! Есть код:
    ExpandedWrap disabled
      Program Space;
        Uses Graph, Crt,Dos;
        const centrx=300;
              centry=160;
       
      procedure vretrace;
         begin
         repeat until port[$3da] and 8=0;
         repeat until port[$3da] and 8>0;
         end;
       
      procedure game;
      var ZemX, ZemY,MercX,MercY,MarsX,MarsY,VenerX,VenerY,UpiterX,UpiterY,SatX,SatY:integer;
          VisualPage,i:Integer;
      begin
      repeat
      SetVisualPage(1-VisualPage);
          VisualPage := VisualPage+1;
              SetActivePage(1 -VisualPage);
        vretrace;
          ClearDevice;
       
          For i := 1 to 100 do
            PutPixel(centrx+Round(70*cos((i+VisualPage/9)*Pi/50+0.7)),
            centry+Round(60*sin((i+VisualPage/9)*Pi/50-Pi/500)),1);
       
              For i := 1 to 100 do
            PutPixel(centrx+Round(90*cos((i+visualpage/7)*Pi/50+0.7)),
            centry+Round(83*sin((i+visualpage/7)*Pi/50-Pi/500)),2);
          
            For i := 1 to 100 do
            PutPixel(centrx+Round(110*cos((i+VisualPage/7)*Pi/50+0.65)),
            centry+Round(100*sin((i+VisualPage/7)*Pi/50-Pi/500)),3);
       
            For i := 1 to 100 do
            PutPixel(centrx+Round(131*cos((i+VisualPage/7)*Pi/50+0.65)),
            centry+Round(120*sin((i+VisualPage/7)*Pi/50-Pi/500)),4);
       
            For i := 1 to 100 do
            PutPixel(centrx+Round(173*cos((i+VisualPage/5)*Pi/50+0.70)),
            centry+Round(155*sin((i+VisualPage/5)*Pi/50-Pi/500)),5);
       
            For i := 1 to 100 do
            PutPixel(centrx+Round(212*cos((i+VisualPage/5)*Pi/50+0.65)),
            centry+Round(195*sin((i+VisualPage/5)*Pi/50-Pi/500)),6);
           {--------------------------------------------------------------}
            {mercury}
          MercX :=centrx-Round(70*cos((i-VisualPage/5)*Pi/50+0.7));
          MercY:=centry-Round(60*sin((i-VisualPage/5)*Pi/50-Pi/500));
          setcolor(lightgray);
          circle(MercX,MercY,4);
          SetFillStyle(1,LightGray);
          floodfill(MercX,MercY,lightgray);
          outtextxy(MercX-13,MercY-8,'1');
          {---------------------------------------------------------------}
          {venera}
          VenerX :=centrx-Round(90*cos((i-VisualPage/4)*Pi/50+0.7));
          VenerY:=centry-Round(83*sin((i-VisualPage/4)*Pi/50-Pi/500));
          setcolor(lightred);
          circle(VenerX,VenerY,7);
          SetFillStyle(1,Lightred);
          floodfill(VenerX,VenerY,lightred);
          outtextxy(VenerX-13,VenerY-10,'2');
        {-----------------------------------------------------------------}
           {zemlia}
          ZemX:=centrX+Round(110*cos((i-VisualPage/3)*Pi/50+0.65));
          ZemY:=centrY+Round(100*sin((i-1-VisualPage/3)*Pi/50-Pi/500));
          setcolor(lightblue);
          circle(ZemX,ZemY,7);
          SetFillStyle(1,Lightblue);
          setcolor(2);
          circle(ZemX,ZemY,7);
          SetFillStyle(1,2);
          floodfill(ZemX,ZemY,2);
       setcolor(blue);
          circle(zemx+1,zemy+1,3);
       SetFillStyle(1,blue);
          floodfill(ZemX,ZemY,blue);
          circle(zemx+3,zemy-3,2);
       SetFillStyle(1,blue);
          floodfill(ZemX+3,ZemY-3,blue);
          circle(zemx-4,zemy-4,2);
       SetFillStyle(1,blue);
          floodfill(ZemX-4,ZemY-4,blue);
       setcolor(2);
          outtextxy(ZemX-13,ZemY-10,'3');
        {-----------------------------------------------------------------}
          MarsX:=Centrx+Round(131*cos((i-VisualPage/2)*Pi/50+0.65));
          MarsY:=Centry+Round(120*sin((i-VisualPage/2)*Pi/50-Pi/500));
          setcolor(6);
          circle(MarsX,MarsY,4);
          SetFillStyle(1, 6);
          floodfill(MarsX,MarsY,6);
          outtextxy(Marsx-11,MarsY-1,'4');
      {---------------------------------------------------------------------}
      {Upiter}
          UpiterX:=Centrx+Round(173*cos((i-VisualPage/1)*Pi/50+0.7));
          UpiterY:=Centry+Round(155*sin((i-VisualPage/1)*Pi/50-Pi/500));
          setcolor(6);
          circle(UpiterX,UpiterY,12);
          SetFillStyle(1, 6);
          floodfill(UpiterX,UpiterY,6);
          outtextxy(Upiterx-15,UpiterY+10,'5');
      {---------------------------------------------------------------------}
      {Saturn}
          SatX:=Centrx+Round(212*cos((i-VisualPage/5)*Pi/50+0.65));
          SatY:=Centry+Round(195*sin((i-VisualPage/5)*Pi/50-Pi/500));
          setcolor(9);
          circle(SatX,SatY,12);
          setfillstyle(1,9);
          floodfill(SatX,SatY,9);
          setcolor(13);
          ellipse(Satx,Saty-1,29,20,28,5);
          outtextxy(Satx-22,SatY+10,'6');
          setcolor(9);
          line(satx-10,saty-6,satx+10,saty-6);
      {---------------------------------------------------------------------}
        {solnce}
        setcolor(yellow);
        circle(300,160,30);
        SetFillStyle(1, yellow);
        floodfill(300,160,yellow);
        For i := 1 to 100 do
        line(300,160,centrx+Round(31*cos((i+VisualPage/2)*Pi/50)),centry+Round(25*sin((i+VisualPage/2)*Pi/50-Pi/500)));
       {----------------------------------------------------------------}
           OutTextXY(centrx+215,centry+20,'Planets');
           OutTextXY(centrx+200,centry+35,'1 - Mercury');
           OutTextXY(centrx+200,centry+50,'2 - Venera');
           OutTextXY(centrx+200,centry+65,'3 - Earth');
           OutTextXY(centrx+200,centry+80,'4 - Mars');
           OutTextXY(centrx+200,centry+95,'5 - Upiter');
           OutTextXY(centrx+200,centry+110,'6 - Saturn');
       
       
      until keyPressed
       
      end;
      Procedure MainMenu;
      Const menu:array[1..2] of string[20]=('New game!','Exit');
      Var i,y1: integer;
          pos:byte;
          kb:char;
      Begin
      kb:=#1;
      SetTextStyle(4,0,2);
      pos:=1; y1:=centry-30;
      for i:=1 to 2 do
      begin
      if i=pos then
      begin
           setcolor(1);
           OutTextXY(230,y1,'New game!');
           end
      else begin
                setcolor(15);
                OutTextXY(230,y1,'Exit');
           end;
       
      y1:=y1+30;
      end;
      repeat
      y1:=centry-30;
      kb:=readkey;
      case kb of
                #72:if pos>1 then
                                 Dec(pos)
                                 else pos:=3;
       
                #80:if pos<2 then
                                 Inc(pos)
                                 else pos:=1;
      end;
       
      for i:=1 to 2 do
      begin
      if i=pos then
      begin
           setcolor(1);
           OutTextXY(230,y1,menu[i]);
        end
      else begin
                setcolor(15);
                OutTextXY(230,y1,menu[i]);
            end;
      y1:=y1+30;
      end;
      until kb=#13;
      begin
           if pos=1 then begin  game;
                                cleardevice;
                     end;
       
           if pos=2 then
                       halt;
                    end;
       
      end;
       
      procedure grinit;
      var GrMode, GrError,GrDriver:Integer;
       
      begin
      GrDriver := EGA; GrMode := EGAHi;
        InitGraph(GrDriver, GrMode, 'C:\TP\BGI');
        GrError := GraphResult;
      end;
        Var
          ch:char;
       {   k:integer;}
       
      BEGIN
      Grinit;
      MainMenu;
       
       
      END.

    Теоретически должна создаваться модель солнечной системы, но что то нет. Пишу на PascalABC, выдает ошибку "Модуль Dos не найден". Судя по всему, я его не подключил? :D Вопрос - как это сделать, если это так? Во избежании дальнейших вопросов, прошу запустить, у кого запуститься, вдруг еще какие то ошибки будут. Заранее спасибо!
      Цитата Prapor48 @
      я его не подключил?

      Сначала убедись, что он у тебя есть.
        Цитата min@y™ @
        Сначала убедись, что он у тебя есть.

        Ну так, а как это сделать? Он качается и устанавливается, или как? Извините за такие вопросы.




        Исправил ошибку, ответ нашел на просторах паутины, код теперь выглядит так:
        ExpandedWrap disabled
          Program Space;
            Uses GraphABC;
            const centrx=300;
                  centry=160;
           
          procedure vretrace;
             begin
             repeat until port [$3da] and 8=0;
             repeat until port [$3da] and 8>0;
             end;
           
          procedure game;
          var ZemX, ZemY,MercX,MercY,MarsX,MarsY,VenerX,VenerY,UpiterX,UpiterY,SatX,SatY:integer;
              VisualPage,i:Integer;
          begin
          repeat
          SetVisualPage(1-VisualPage);
              VisualPage := VisualPage+1;
                  SetActivePage(1 -VisualPage);
            vretrace;
              ClearDevice;
           
              For i := 1 to 100 do
                PutPixel(centrx+Round(70*cos((i+VisualPage/9)*Pi/50+0.7)),
                centry+Round(60*sin((i+VisualPage/9)*Pi/50-Pi/500)),1);
           
                  For i := 1 to 100 do
                PutPixel(centrx+Round(90*cos((i+visualpage/7)*Pi/50+0.7)),
                centry+Round(83*sin((i+visualpage/7)*Pi/50-Pi/500)),2);
              
                For i := 1 to 100 do
                PutPixel(centrx+Round(110*cos((i+VisualPage/7)*Pi/50+0.65)),
                centry+Round(100*sin((i+VisualPage/7)*Pi/50-Pi/500)),3);
           
                For i := 1 to 100 do
                PutPixel(centrx+Round(131*cos((i+VisualPage/7)*Pi/50+0.65)),
                centry+Round(120*sin((i+VisualPage/7)*Pi/50-Pi/500)),4);
           
                For i := 1 to 100 do
                PutPixel(centrx+Round(173*cos((i+VisualPage/5)*Pi/50+0.70)),
                centry+Round(155*sin((i+VisualPage/5)*Pi/50-Pi/500)),5);
           
                For i := 1 to 100 do
                PutPixel(centrx+Round(212*cos((i+VisualPage/5)*Pi/50+0.65)),
                centry+Round(195*sin((i+VisualPage/5)*Pi/50-Pi/500)),6);
               {--------------------------------------------------------------}
                {mercury}
              MercX :=centrx-Round(70*cos((i-VisualPage/5)*Pi/50+0.7));
              MercY:=centry-Round(60*sin((i-VisualPage/5)*Pi/50-Pi/500));
              setcolor(lightgray);
              circle(MercX,MercY,4);
              SetFillStyle(1,LightGray);
              floodfill(MercX,MercY,lightgray);
              outtextxy(MercX-13,MercY-8,'1');
              {---------------------------------------------------------------}
              {venera}
              VenerX :=centrx-Round(90*cos((i-VisualPage/4)*Pi/50+0.7));
              VenerY:=centry-Round(83*sin((i-VisualPage/4)*Pi/50-Pi/500));
              setcolor(lightred);
              circle(VenerX,VenerY,7);
              SetFillStyle(1,Lightred);
              floodfill(VenerX,VenerY,lightred);
              outtextxy(VenerX-13,VenerY-10,'2');
            {-----------------------------------------------------------------}
               {zemlia}
              ZemX:=centrX+Round(110*cos((i-VisualPage/3)*Pi/50+0.65));
              ZemY:=centrY+Round(100*sin((i-1-VisualPage/3)*Pi/50-Pi/500));
              setcolor(lightblue);
              circle(ZemX,ZemY,7);
              SetFillStyle(1,Lightblue);
              setcolor(2);
              circle(ZemX,ZemY,7);
              SetFillStyle(1,2);
              floodfill(ZemX,ZemY,2);
           setcolor(blue);
              circle(zemx+1,zemy+1,3);
           SetFillStyle(1,blue);
              floodfill(ZemX,ZemY,blue);
              circle(zemx+3,zemy-3,2);
           SetFillStyle(1,blue);
              floodfill(ZemX+3,ZemY-3,blue);
              circle(zemx-4,zemy-4,2);
           SetFillStyle(1,blue);
              floodfill(ZemX-4,ZemY-4,blue);
           setcolor(2);
              outtextxy(ZemX-13,ZemY-10,'3');
            {-----------------------------------------------------------------}
              MarsX:=Centrx+Round(131*cos((i-VisualPage/2)*Pi/50+0.65));
              MarsY:=Centry+Round(120*sin((i-VisualPage/2)*Pi/50-Pi/500));
              setcolor(6);
              circle(MarsX,MarsY,4);
              SetFillStyle(1, 6);
              floodfill(MarsX,MarsY,6);
              outtextxy(Marsx-11,MarsY-1,'4');
          {---------------------------------------------------------------------}
          {Upiter}
              UpiterX:=Centrx+Round(173*cos((i-VisualPage/1)*Pi/50+0.7));
              UpiterY:=Centry+Round(155*sin((i-VisualPage/1)*Pi/50-Pi/500));
              setcolor(6);
              circle(UpiterX,UpiterY,12);
              SetFillStyle(1, 6);
              floodfill(UpiterX,UpiterY,6);
              outtextxy(Upiterx-15,UpiterY+10,'5');
          {---------------------------------------------------------------------}
          {Saturn}
              SatX:=Centrx+Round(212*cos((i-VisualPage/5)*Pi/50+0.65));
              SatY:=Centry+Round(195*sin((i-VisualPage/5)*Pi/50-Pi/500));
              setcolor(9);
              circle(SatX,SatY,12);
              setfillstyle(1,9);
              floodfill(SatX,SatY,9);
              setcolor(13);
              ellipse(Satx,Saty-1,29,20,28,5);
              outtextxy(Satx-22,SatY+10,'6');
              setcolor(9);
              line(satx-10,saty-6,satx+10,saty-6);
          {---------------------------------------------------------------------}
            {solnce}
            setcolor(yellow);
            circle(300,160,30);
            SetFillStyle(1, yellow);
            floodfill(300,160,yellow);
            For i := 1 to 100 do
            line(300,160,centrx+Round(31*cos((i+VisualPage/2)*Pi/50)),centry+Round(25*sin((i+VisualPage/2)*Pi/50-Pi/500)));
           {----------------------------------------------------------------}
               OutTextXY(centrx+215,centry+20,'Planets');
               OutTextXY(centrx+200,centry+35,'1 - Mercury');
               OutTextXY(centrx+200,centry+50,'2 - Venera');
               OutTextXY(centrx+200,centry+65,'3 - Earth');
               OutTextXY(centrx+200,centry+80,'4 - Mars');
               OutTextXY(centrx+200,centry+95,'5 - Upiter');
               OutTextXY(centrx+200,centry+110,'6 - Saturn');
           
           
          until keyPressed
           
          end;
          Procedure MainMenu;
          Const menu:array[1..2] of string[20]=('New game!','Exit');
          Var i,y1: integer;
              pos:byte;
              kb:char;
          Begin
          kb:=#1;
          SetTextStyle(4,0,2);
          pos:=1; y1:=centry-30;
          for i:=1 to 2 do
          begin
          if i=pos then
          begin
               setcolor(1);
               OutTextXY(230,y1,'New game!');
               end
          else begin
                    setcolor(15);
                    OutTextXY(230,y1,'Exit');
               end;
           
          y1:=y1+30;
          end;
          repeat
          y1:=centry-30;
          kb:=readkey;
          case kb of
                    #72:if pos>1 then
                                     Dec(pos)
                                     else pos:=3;
           
                    #80:if pos<2 then
                                     Inc(pos)
                                     else pos:=1;
          end;
           
          for i:=1 to 2 do
          begin
          if i=pos then
          begin
               setcolor(1);
               OutTextXY(230,y1,menu[i]);
            end
          else begin
                    setcolor(15);
                    OutTextXY(230,y1,menu[i]);
                end;
          y1:=y1+30;
          end;
          until kb=#13;
          begin
               if pos=1 then begin  game;
                                    cleardevice;
                         end;
           
               if pos=2 then
                           halt;
                        end;
           
          end;
           
          procedure grinit;
          var GrMode, GrError,GrDriver:Integer;
           
          begin
          GrDriver := EGA; GrMode := EGAHi;
            InitGraph(GrDriver, GrMode, 'C:\TP\BGI');
            GrError := GraphResult;
          end;
            Var
              ch:char;
           {   k:integer;}
           
          BEGIN
          Grinit;
          MainMenu;
           
           
          END.

        И ругается так: неизвестное имя "port". Почему так?
        Сообщение отредактировано: Prapor48 -
          Язык один паскаль, а диалекты разные. Ваш код написан для Turbo Pascal. А компилируете вы в Паскаль ABC.
          Turbo Pascal - это устаревшая технология 80-90 тых годов. Паскаль ABC это выкидыш нашей "науки". В попытке возродить о что ушло в прошлое.

          Слово port служит для доступа к аппаратуре в Turbo Pascal(TP). В паскале ABC его нету. Не сделали.

          Так как с целью увеличения безопасности, прямой доступ к аппаратуре начали запрещать ещё с конца 80-тых. Начиная с Win 2000 такой способ окончательно закрыт.

          ExpandedWrap disabled
            procedure vretrace;
            begin
              repeat until port[$3da] and 8=0;
              repeat until port[$3da] and 8>0;
            end;

          Этот код остался на задворках истории и заменить его нечем. Но просто так его выкинуть нельзя. Я рекомендую вместо этих строчек кода сделать паузу командой sleep(10);
            Цитата Pavia @
            Язык один паскаль, а диалекты разные. Ваш код написан для Turbo Pascal. А компилируете вы в Паскаль ABC.
            Turbo Pascal - это устаревшая технология 80-90 тых годов. Паскаль ABC это выкидыш нашей "науки". В попытке возродить о что ушло в прошлое.

            Слово port служит для доступа к аппаратуре в Turbo Pascal(TP). В паскале ABC его нету. Не сделали.

            Так как с целью увеличения безопасности, прямой доступ к аппаратуре начали запрещать ещё с конца 80-тых. Начиная с Win 2000 такой способ окончательно закрыт.

            Всё сделал как высказали, скачал Turbo Pascal School Pak, там вроде бы уже все настроено и подключено. Прогресс, запускается, даже если не меняю код, то есть что со старым, что со sleep(10), появляется exe файл, запускаю его, и всё. Он открывается и тут же закрывается. Сижу на XP. Где я опять накосячил?
              Prapor48
              Цитата Prapor48 @
              Всё сделал как высказали, скачал Turbo Pascal School Pak,

              Я такого не говорил. Тем более School Pak, я бы не брал. Это неофициальная сборка и с такими я не работал.
              Цитата Prapor48 @
              Сижу на XP. Где я опять накосячил?

              В 90-тых XP не было. Для Turbo Pascal нужен DOS или его эмулятор.

              И не забываем, что в строчке с InitGraph надо указать правильный путь к драйверу.
              InitGraph(GrDriver, GrMode, 'C:\TP\BGI');
                Цитата Prapor48 @
                Он открывается и тут же закрывается.

                У программы код дурацкий. Может вылетать при запуске. Если при запуске сработает тройное нажатие Enter, то выйдет из программы. Хотя такое событие маловероятное один раз на милион если не больше.

                В эмуляторе запустил картинка красивая.
                Прикреплённый файлПрикреплённый файл_________________________________.png (13,22 Кбайт, скачиваний: 1192) ]
                Сообщение отредактировано: Pavia -
                  Да я скачал то скул пак, потому что там уже все подключено, а сейчас попробовал в простом турбо паскале забить код. Жалуется что нету graph. Скачал его, закинул в папку, прописал путь, не получается. Прописал и создал путь как у вас, в C:\TP\BGI, опять жалуется. Хорошо, что хоть заработала. Можете рассказать поподробнее как запустили то? :D
                      Цитата Pavia @
                      Установка и настройка BP7.0 для WindowsXP
                      Видео сборки Space.pas

                      Ух ты, ну прям мини квест! Спасибо большое! Сделал все один в один, небольшие различия только когда путь прописываешь в свойствах компьютера, но это из за пути наверное. У меня вот так выглядит: C:\Program Files\NVIDIA Corporation\PhysX\Common;C:\Documents and Settings\All Users\Application Data\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\BP7.0\BIN. Тут просто надо стереть и написать C:\ как я понял. Дальше совсем интересно, микропроцессорными кодами был удивлён, у меня такой предмет в вузе, так что было прям знакомо. Но после того как makefile прописал все равно в консоли ошибка появляется, такая же как и до этого была. Я уже обрадовался прям, думаю все, сейчас заработает, ага. Не получилось блин. Свой код собирать не пробовал, не получится, я так думаю.
                        В path надо добавить ";C:\BP7.0\BIN". Если он есть то добавлять не надо.
                        Это нужно для автоматизации. Что-бы при вызове в командной строке make, bp, tasm ОС могла сразу найти нужные утилиты. Иначе придётся везде прописывать полные пути к ним.

                        С ассемблером можете не возится. Для тех у кого BP версии 7.1 или 7.01 это не нужно.
                        Для тех у кого 7.0 могут взять файл во вложении и просто замените им свой.
                        Это нужно для устроения ошибки runtime 200: Division by zero.
                        Прикреплённый файлПрикреплённый файлTURBO.zip (28,52 Кбайт, скачиваний: 236)
                        Сообщение отредактировано: Pavia -
                          Pavia, спасибо Вам огромное! Просто большое, простое человеческое спасибо! Вы мне очень помогли! Все заработало! Спасибо!
                            Pavia написал в личку. Может кто то еще подсказать, как запустить сие на Win7? Скачал вот XP Mode, но там какая то беда с путями указания файла, не пойму как указать нормально.
                              Prapor48
                              Для Windows Vista, Windows 7, Winoes8. Windows 10 нужен эмулятор доса.
                              К примеру DosBox. И да DosBox надо настроить. А то по умолчанию по нажатию клавиши F9 досбокс закрывается.
                                PaviaОкей, DosBox есть, когда то программировали в нем на ассемблере, но паскаль я там никогда не запускал. Сейчас попробовал покопаться - безрезультатно. Можете помочь настроить его или показать как там запустить мою программу.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0467 ]   [ 19 queries used ]   [ Generated: 28.03.24, 11:05 GMT ]