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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2012, 01:35   #1
Vladimir03643
Новичок
Джуниор
 
Регистрация: 20.04.2012
Сообщений: 1
По умолчанию Не работает графика на турбо паскале

Ребята, помогите с программой. Не работает графика на турбо паскале, хотя компилируется. Что не так?
Спасибо!

программа большая, но суть в самой графике.

Код:
program main;{початок основної програми}
uses GRAPH, crt;{підключення бібліотечних модулів}
{блок опису використовуваних у програмі об'єктів}
const kol=10;{максимальна кількість дисків}
      chars:set of char=['0','1','2','3','4','5','6','7','8','9'];{множина припустимих символів для введення}
var gd,gm {робочі змінні для ініціалізації графіки},
    i,j,{параметри циклів for}
    n,{кількість дисків}
    maxd,{довжина найбільшого диска}
    code,{допоміжна змінна для процедури val}
    step {лічильник кількості перестановок}             :integer;
    dl{масив довжин дисків}, col{масив кольорів дисків} :array[1..kol] of integer;
    a{масив розміщення дисків на шпилях}                :array[0..kol,1..3] of integer;
    flag {робоча змінна для контролю введення}          :boolean;
    ns {рядок уведення вхідних даних}:string;

{===================================================}
procedure drawing;{процедура створення ілюстрації}
var i,j,x,z,h:integer;
    st:string;
begin
 x:=40+maxd div 2; z:=x;{установка абсциси для першого шпиля}
 h:=30;{установка висоти кожного диска}
 cleardevice;{очищення екрана перед виведенням чергової ілюстрації}
setcolor(14);{установка кольору для шпилей}
 for i:=1 to 3 do
   begin
     line(z,30,z,300);{промальовування вертикального шпиля}
     z:=z+2*x-20{обчислення абсциси для наступного шпиля}
   end;
 {промальовування поточного розміщення дисків на шпилях}
 setcolor(15);
 x:=40+maxd div 2; z:=x;
 for j:=1 to 3 do
   begin
     i:=1;
     while i<=a[0,j] do
       begin
         {промальовуємо профіль диска у вигляді прямокутника}
         rectangle(z-(dl[a[i,j]] div 2),300-i*h,z+(dl[a[i,j]] div 2),300-i*h+h);
         setfillstyle(1,col[a[i,j]]);{установка стилю для фарбування диска}
         floodfill(z,300-(h*(2*i-1)) div 2,15);{фарбування диска}
         inc(i)
       end;
     z:=z+2*x-20
   end;
   inc(step);
   str(step,st);
   outtextxy(300,getmaxy-20,'перестановка '+st)
end;
{===================================================}
procedure p(m,s,b,c:integer);{основний рекурсивний процес}
begin
  if m=1 then begin
                         a[a[0,b]+1,b]:=a[a[0,s],s];
                         a[a[0,s],s]:=0;
                         dec(a[0,s]);{убрати диск зі шпиля}
                          inc(a[0,b]);{додати диск на шпиль}
                         drawing;{виклик процедури створення ілюстрації}
                         delay(2000) {фіксація малюнка на екрані}
                     end
              else begin
                        p(m-1,s,c,b);
                        p(1,s,b,c);
                        p(m-1,c,b,s)
                    end
end;
{===================================================}
begin {початок основної програми}
  {перевірка коректності введених даних}

  repeat
    flag:=true;
    clrscr;
    writeln('уведіть кількість дисків (1..10), будь ласка');
    readln(ns);
    for i:=1 to length(ns) do if not (ns[i] in chars) then flag:=false
  until flag;
  val(ns,n,code);
  gd:=detect; initgraph(gd,gm,'..BGI');{ініціалізація графіки}
  maxd:=((getmaxx-40) div 3)-40;
  for i:=1 to kol do dl[i]:=0;
  for i:=0 to kol do
      for j:=1 to 3 do a[i,j]:=0;
  dl[1]:=maxd;{довжина найбільшого диска}
  {довжина кожного з інших дисків обчислюється  через довжину попереднього диска}
  for i:=2 to n do dl[i]:=dl[i-1]-20;
  for i:=1 to kol do col[i]:=1+i;{закріплення кольору за кожним диском}
  for i:=1 to n do a[i,1]:=i;{початкове закріплення номера за кожним диском}
    a[0,1]:=n;
    step:=0;{обнулення кількості перестановок}
    drawing;{промальовування початкової позиції}
    delay(2000);{фіксація початкової позиції на екрані на 2 секунди}
    p(n,1,2,3);{виклик основного рекурсивного процесу перекладань дисків}
    {очікування натискання будь-якої клавіші для завершення програми}
    repeat
      setcolor(green);
      outtextxy(1,getmaxy-20,'натисніть будь-яку клавішу, будь ласка');
      setcolor(white);
      outtextxy(1,getmaxy-20,'натисніть будь-яку клавішу, будь ласка');
    until keypressed;
    closegraph{закриття графічного режиму}
end.{кінець основної програми}


________
1-е. Не надо лезть в чужую тему со своими вопросами/проблемами. Нужно создавать новую тему!


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

Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 20.04.2012 в 09:46.
Vladimir03643 вне форума Ответить с цитированием
Старый 20.04.2012, 09:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

сразу вижу ошибку - неверно указываете путь к драйверу графики EGAVGA.BGI:
Цитата:
Код:
initgraph(gd,gm,'..BGI');{ініціалізація графіки}
рекомендую Вам положить файлик EGAVGA.BGI туда же, куда у Вас компилируется EXE-файл (скорее всего, там же, где и исходный .PAS файл) и в строке иницилизации убрать путь совсем.
вот так:
Код:
initgraph(gd,gm,'');{ініціалізація графіки}
а ещё процес иницилизации можно легко проверить, успешно он прошел или нет.
примерно вот так:
Код:
  Gd := Detect;
  InitGraph(Gd, Gm, '..\BGI');
  ErrorCode := GraphResult;
  if ErrorCode <> grOk then
  begin
    WriteLn('Ошибка инициализации графики: ', GraphErrorMsg(ErrorCode));
    ReadLn;
    Halt(1);
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.04.2012, 19:51   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
initgraph(gd,gm,'')
Free пропускает, Turbo ругается
Poma][a вне форума Ответить с цитированием
Старый 20.04.2012, 23:55   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Poma][a
Turbo ругается
Да ну, бросьте!
я как раз TurboPascal и имел в виду.
мой TP7.0 не ругается, ведёт себя прилично, как и подобает воспитанному компилятору!

в чём у вас проявляется то, что "Turbo ругается" ?!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика в турбо паскаль мария71 Помощь студентам 1 06.04.2012 21:44
Графика в Турбо Паскаль Эммануэль Паскаль, Turbo Pascal, PascalABC.NET 5 20.12.2010 12:22
построение графика в турбо паскале. x-voron-7 Помощь студентам 1 20.06.2010 20:48
Графика в Турбо Паскале Андрей07 Помощь студентам 3 30.06.2009 09:12