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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2012, 22:39   #1
makroys
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 10
Восклицание Графика в ABC

Начну с того, что я просмотрел первые 10 страниц и ничего подобного не нашел, если пропустил подобную тему простите, с кем не бывает...
И так, проблема в элементарном: не могу настроить программу, что бы работала графика в Паскале, очень надо для школьного курса и дальнейшего освоения самоучителя. Срочно прошу разобраться, что писать в пропущенном месте, в котором стоят знаки вопросы.

uses graph;
var device, mode: integer;
begin
writeln('Это текстовый режим');
readln;
device:=0;
initgraph(device, ??? mode);
cicrle(100,80,50);
readln;
closeGraph;
Writeln('Это снова текстовый режим');
readln
end.


Цитата:
Сообщение от В учебнике написано:
Третий элемент - не что иное, как путь к графическим драйверам Паскаля. Я использовал угловые скобки <>, чтобы подчеркнуть, что в вашей программе нужно писать не те четыре русских слова, что внутри угловых скобок, а то, на что они указывают. Почти наверняка для вас графический драйвер представлен файлом egavga.bgi, расположенном в каталоге BGI. Если сам Паскаль расположен в каталоге TP диска c, то строка ва-шей программы будет выглядеть так:
InitGraph(Device, Mode, ‘c:\TP\BGI’)
Я старался делать так, как написано автором (кстати самоучитель скачивал с этого форума отсюда), но появляется ошибка: File not found (GRAPH.TPU) - что это означает, я уже заучил.
Как мне быть в такой ситуации? Соглашусь с мнением о том, что автор все правильно изложил, но не до ясного понимания. Вот фото
Изображения
Тип файла: jpg 1.jpg (520.5 Кб, 196 просмотров)
makroys вне форума Ответить с цитированием
Старый 15.10.2012, 23:27   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
самый простой вариант ето перенести етот файл (Graph.TPU) в папку с turbo.exe (или TP.exe). Также можно проверить директории в Options => Directories.
Попробуйте.
И напишите, как в самоучителе: InitGraph(Device, Mode, ‘c:\TP\BGI’);

Кстати, в Паскаль АБС, наверное, нужно использовать GraphABC.
Еще в Паскаль АБС есть справка
Похоже, графический режим не нужно никак инициализировать (все же, Паскаль АБС сильно отличается от Турбо Паскаля).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 15.10.2012 в 23:32.
BDA вне форума Ответить с цитированием
Старый 15.10.2012, 23:37   #3
makroys
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Попробуйте.
И напишите, как в самоучителе: InitGraph(Device, Mode, ‘c:\TP\BGI’);

Кстати, в Паскаль АБС, наверное, нужно использовать GraphABC.
Еще в Паскаль АБС есть справка
Похоже, графический режим не нужно никак инициализировать (все же, Паскаль АБС сильно отличается от Турбо Паскаля).
Раз не нужно инициализировать, то что нужно писать в операторе?
И еще, если нет такой папки BGI в ABC, то как быть?

З.Ы. на абс перешел не давно, только из-за возможности писать на русском при составлении программы.
makroys вне форума Ответить с цитированием
Старый 15.10.2012, 23:45   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Ничего не нужно делать.
Просто запускаете программу и все.
Пример из справки:
Код:
// Мозаика. Квадратики случайным образом меняются местами
uses GraphABC;

const 
  w=25;
  w1=1;
  m=50;
  n=70;
  x0=0;
  y0=0;

var i,j,i1,j1,di,dj,v,k: integer;
    a: array [0..n,0..m] of integer;

begin
  SetWindowCaption('Мозаика');
  for i:=0 to n-1 do
  for j:=0 to m-1 do
  begin
    a[i,j]:=RGB(Random(256),Random(256),Random(256));
    SetBrushColor(a[i,j]);
    FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1);
  end;
  while true do
  begin
    k:=k+1;
    if k mod 1000 = 0 then 
    begin
      k:=0;
      Sleep(1);
    end;  
    i:=Random(n-2)+1;
    j:=Random(m-2)+1;
    di:=Random(3)-1;
    dj:=Random(3)-1;
    i1:=i+di; j1:=j+dj;
    v:=a[i,j];
    a[i,j]:=a[i1,j1];
    a[i1,j1]:=v;
    SetBrushColor(a[i,j]);
    FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1);
    SetBrushColor(a[i1,j1]);
    FillRect(x0+i1*w,y0+j1*w,x0+(i1+1)*w-w1,y0+(j1+1)*w-w1);
  end;
end.
Вам будет сложно учиться по самоучителю, т.к. Паскаль АБС ближе к Дельфи, чем к Паскалю. Лучше возьмите ФриПаскаль. Сам не пользовался, но он, вроде, ближе к "каноническому" Паскалю.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.10.2012, 00:11   #5
makroys
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 10
По умолчанию

Переписал Вашу программу на АВС, Паскаль показал ошибку: "Program1.pas(19) : Нельзя преобразовать тип System.Drawing.Color к integer"
Либо в Вас не правильный код программы, либо у меня проблемы с .ехе

Почему не нужно ничего делать?
Данный оператор initgraph будет выполнять не все условия, которые заложены в нем, в противном случае программа покажет ошибку.
И тем более, не оставлять же мне место пустым.
Видимо я чего-то недопонимаю или не так делаю, до графики проходил курс самообучения по книге на Турбо и вовсе успешно, по крайней мере 1/4 часть учебника пройдена, но связавшись с графикой настройки Турбо не утешили, что пришлось примкнуть на использование АВС.
Как Вы смотрите на эту ситуацию?
makroys вне форума Ответить с цитированием
Старый 16.10.2012, 00:26   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Что же Вы не уточнили, что у вас Pascal ABC NET?
Он отличается от Паскаль АБС.
Тогда пример из набора АБС НЕТ:
Код:
// Мозаика. Квадратики случайным образом меняются местами
uses GraphABC;

const 
  w  = 25;
  w1 = 1;
  m  = 50;
  n  = 70;
  x0 = 0;
  y0 = 0;
  delay = 10;

var a: array [0..n,0..m] of Color;

begin
  Window.Title := 'Мозаика';
  Window.SetSize(800,600);
  
  // Заполнение массива случайными цветами
  for var i:=0 to n-1 do
  for var j:=0 to m-1 do
  begin
    a[i,j] := clRandom;
    Brush.Color := a[i,j];
    FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1);
  end;
  
  var k := 0;
  while true do
  begin
    k += 1;
    if k mod 1000 = 0 then 
    begin
      k := 0;
      Sleep(delay);
    end;  
    
    var i := Random(1,n-2);
    var j := Random(1,m-2);
    var di := Random(-1,1);
    var dj := Random(-1,1);
    var i1 := i+di; 
    var j1 := j+dj;
    Swap(a[i,j],a[i1,j1]);
    
    Brush.Color := a[i,j];
    FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1);
    Brush.Color := a[i1,j1];
    FillRect(x0+i1*w,y0+j1*w,x0+(i1+1)*w-w1,y0+(j1+1)*w-w1);
  end;
end.
Как Вы можете заметить, никакого оператора initgraph тут нет.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.10.2012, 09:16   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

makroys, мой Вам совет: вообще, выкиньте Вы этих самодельных уродцев (я имею в виду Pascal ABC и Pascal ABC NET) и возьмите либо FreePascal + Lazarus, либо (лучше), если есть возможность, Delphi. и учитесь программировать с помощью настоящих средств разработки, а не этих "псевдо-паскальных" языков..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.10.2012, 18:37   #8
makroys
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 10
По умолчанию

BDA
О, спасибо большое, программа получилась, тогда дайте совет, как обойти этот оператор полагаясь на данный самоучитель, я его понимаю и он мне нравится. Поэтому бросать книгу и платить за курсы я не собираюсь.

Отсутствие initgraph удивило, и очень рад, что так можно делать, лишь бы научиться его обходить. Пожалуйста, покажите как без initgraph можно выполнить программу в Pascal ABC NET, которая в шапке написана.
makroys вне форума Ответить с цитированием
Старый 16.10.2012, 19:25   #9
makroys
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 10
По умолчанию

Serge_Bliznykov
Я уважаю Ваш совет и скорее воспользовался им, но тут дело экзаменов. В смысле я еще не совсем студент, а 11классник, так что Паскаль очень нужно понять, для успешной сдачи экзамена и поступить в универ, где можно начать уже более с серьезных языков программирования. Так же не упускаю мысль рассмотреть 2 языка одновременно, т.е. Паскаль, для экзамена и Делпфи для серьезного программирования.
Но тут вопрос: такое возможно ли изучить на данном моем этапе возраста и знаний два языка одновременно, на сколько я знаю, рекомендованный Вами язык чуть сложнее?
makroys вне форума Ответить с цитированием
Старый 16.10.2012, 20:09   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Ну что же. По порядку.
Во-первых, используйте кнопочку Правка, чтобы не писать несколько сообщений подряд.
Во-вторых, для сдачи ЕГЭ не нужно знать графический режим работы Паскаля (по крайней мере 2 года назад не нужно было). Или у Вас экзамен устраивается институтом?
В-третьих, пытаться освоить графический режим Паскаля на Паскаль АБС НЕТ, подобен копанию огорода ружьем. Может быть неудачное сравнение. Паскаль АБС НЕТ ОЧЕНЬ далек от Турбо Паскаля. Цитата из справки:
Цитата:
PascalABC.NET – это язык Delphi (Object Pascal) для платформы Microsoft .NET, содержащий все основные элементы современных языков программирования
Вам нужно немедленно перебираться на ФриПаскаль (насколько понимаю, он является наиболее близким к требуемому языку).
В-третьих, похоже в Паскаль АБС НЕТ нельзя сделать приведенную программу так, как задумано.
Код:
uses graphabc;
begin
writeln('Это текстовый режим');
readln;
DrawCircle(100,80,50);
readln;
Writeln('Это снова текстовый режим');
readln
end.
После подключения GraphABC программа работает только в графическом режиме. Не могу конечно это утверждать на 100% процентов, т.к. почти не использую Паскаль АБС НЕТ (только для тестирования различных текстовых программ).
В-четвертых, совмещать 2 языка на мой взгляд совсем несложно. Тем более Дельфи и Паскаль достаточно похожи. Начал совмещать их почти с самого начала обучения Паскалю (теперь пишу код средней паршивости на 5 языках).
В-пятых, графический режим не настолько важен. По крайней мере при обучении. За 5 лет изучения Паскаля в школе этот режим использовался в 2-3 программах. В институте пока не было ни одной программы в графическом режиме.
Гораздо важнее писать эффективные алгоритмы (например, "быстрая сортировка" вместо школьной сортировки "пузырьком" или вывод формулы для вычисления значения вместо цикла на 10000 итераций).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
графика в Pascal ABC Анна_ Помощь студентам 1 30.03.2012 19:51
ABC - графика Form_13 Паскаль, Turbo Pascal, PascalABC.NET 2 11.10.2011 15:13
Графика Pascal ABC maxon56 Помощь студентам 2 24.04.2011 19:18