Установлена операционная система Windows XP PRO. При проверке программы на Borland Pascal 7.0 выдаёт ошибку UNIT expected. Курсор мигает в начале программы. Программа взята с Построение любого графика Думаю, это как то связано с Graph. программы с использованием Crt работают нормально.
program grafik;
{$N+}{$E+}Uses Graph,crt;
const{ OPTIONS }
shag=0.0001;
lgr = -50;
pgr = 50;
zcrtX=320;
zcrty=240;
mtrX=10;
mtrY=10;
colorG=15;
colorOXY=4;
OXYminX=-200;
OXYmaxX=200;
OXYminY=-200;
oxymaxY=200;
Var grDriver : Integer;
grMode : Integer;
x,y:real;{extended;}
i:integer;
Begin
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrty,colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrty-i,colorOXY);
x:=lgr;
while x<=pgr dobegin{ readln(x);}{***}if x<>2thenbegin y:=abs(x/(x-2))-1; {***}{ writeln(y:1:8);}
putpixel(zcrtx+trunc(x*mtrX),zcrty-trunc(y*mtrY),colorg) end;
x:=x+shag;
end;
readkey;
closegraph;
end.
Помогите исправить ошибку.
volvo
6.03.2007 3:27
Во-первых, почему здесь? Есть же раздел "Задачи"? А во-вторых, твоя программа у меня компилируется и под BP7 и под TP7 совершенно нормально - что-то у тебя с настройками среды програмирования...
Переезжаем в Задачи...
volvo
6.03.2007 4:01
Стоп... Вопрос на засыпку: Как называется файл, в котором находится эта программа?
Mr. Anderson
8.03.2007 16:17
файл называется grafik.pas . Находится C:\BP\BIN Сначала скопировал на BPW, сохранил как graf. Потом открыл в BP. добавил в начале program grafik; Нажал run >> UNIT expected. Курсор мигает в начале. Потом напечатал в вручную в BP File >> Change directory >> C:\BP\BIN Может здесь нужно что-то поменять? Я знаю, что программа правильна, всё дело в настройках...
volvo
8.03.2007 16:57
Mr. Anderson, ты опять даешь противоречивую информацию... Тебя спросили, как файл называется, ты начинаешь юлить:
Цитата
файл называется grafik.pas
, однако:
Цитата
Сначала скопировал на BPW, сохранил как graf
Так вот учти, если выяснится, что ты сохранил НЕ как graf, а как GRAPH (чувствуешь разницу, да?) то тебе никто не поможет решить твою проблему, ибо ты в программе делаешь Uses Graph, следовательно, опять же начинает компилироваться ТВОЙ ЖЕ файл, и что? Первое слово, которое компилятор ждет в нем - Unit, у тебя его нет... Ошибка...
Переименуй файл в 1.pas и попробуй скомпилировать !!!
Mr. Anderson
8.03.2007 19:04
Да, выяснилось ... сохранил как graph.pas свою программу (c другой функцией, другим диапазоном...) до того, как проверял программу из форума... Удалил этот файл (graph.pas), т.к. по-прежнему выдавало ошибку в программе ( уже 1.PAS) . Теперь новая ошибка. Error 15: File not found (GRAPH.TPU). Курсор мигает на ; в строке Uses Graph, crt; Этот файл GRAPH.TPU, однако, сейчас после удаления graph.pas , находится по-прежнему в C:\BP\UNITS (он не удалён). Кажется, прийдётся переустанавливать Паскаль... ??? Хотя вряд ли поможет...
compiler
8.03.2007 19:33
по моему эта программа для FP...
Mr. Anderson
8.03.2007 19:36
Пока мы сейчас проходим Паскаль 7.0 ( с сентября прошлого года)
volvo
8.03.2007 19:38
Один ответ на 2 предыдущих поста: "Ничего подобного"...
Для compiler: эта программа - для любого компилятора Паскаля, в том числе и для FP... Для Mr. Anderson: Файл GRAPH.TPU должен присутствововать в текущей папке, или в одной из папок, перечисленных в Options -> Directories -> Unit Directories ...
compiler
8.03.2007 19:43
Цитата(volvo @ 8.03.2007 14:38)
Для compiler: эта программа - для любого компилятора Паскаля, в том числе и для FP...
да тут я ошибся... у меня и на FP компилируется и на TP...
Mr. Anderson
8.03.2007 20:11
Спасибо. Осталось ещё немного: После исправлений в unit directories (вместо D:\BP\UNITS C:\BP\UNITS, у меня тот же Паскаль установлен и на диске D) нажимаю на >> Run, экран очень быстро показывает чёрный экран (даже не видно график) и мгновенно закрывается, пробовал в конце перед end. поставить readln; ничего не изменилось...
volvo
8.03.2007 20:18
ReadLn надо ставить НЕ перед End. , а перед CloseGraph... Это во-первых... А во-вторых: уверен, что граф. режим успешно инициализировался? Я бы все-таки это проверял:
x,y:real;{extended;} i:integer; Begin grDriver:=Detect; InitGraph(grDriver, grMode, ''); ErrCode:=GraphResult; if ErrCode <> grOk then begin writeln('Oshibka: ', GraphErrorMsg(ErrCode)); readln; halt(100); end; for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrtY,colorOXY); for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrtY-i,colorOXY); x:=lgr; while x<=pgr do begin { readln(x);} {***} if x<>2 then begin y:=abs(x/(x-2))-1; {***} { writeln(y:1:8);} putpixel(zcrtX+trunc(x*mtrX),zcrtY-trunc(y*mtrY),colorg) end; x:=x+shag; end; readkey; readln; closegraph; end.
volvo
8.03.2007 21:42
Добавить:
Var
grDriver : Integer;
grMode : Integer;
ErrCode: Integer; { <--- Вот это ... }
Mr. Anderson
8.03.2007 22:29
BGI Error: Graphics not initialized (use InitGraph) ....................................................................... (повторяется 44-45 раз ) Oshibka: Device driver file not found (EGAVGA.BGI)
Проверил, EGAVGA.BGI на месте в C:\BP\BGI Unit directories C:\BP\UNITS; Resource directories C:\BP\UNITS; Change Directory C:\BP\BIN GRAPH.TPU в C:\BP\UNITS
Также исправил, где надо, строчные буквы на заглавные для соответствия (oxy >> OXY, y>>Y , кроме, конечно переменных x, y.
volvo
8.03.2007 22:47
Цитата
Проверил, EGAVGA.BGI на месте в C:\BP\BGI
Неправильный вывод... ЭТОТ файл должен быть рядом с EXE, в текущей папке !
Добавлено через 2 мин.
Цитата
Также исправил, где надо, строчные буквы на заглавные для соответствия
А вот это совсем лишнее... для Паскаля нет разницы, это NON-case-sensitive язык
Mr. Anderson
8.03.2007 23:17
теперь файл EGAVGA.BGI в папке BIN. компилируется Только оси без стрелок и обозначений (x, y, 0). Вопрос: нужно ли остальные файлы BGI скопировать в BIN (так, если будут другие программы на графику)?
volvo
8.03.2007 23:51
Цитата
нужно ли остальные файлы BGI скопировать в BIN
Вообще-то я бы крайне не рекомендовал сбрасывать все свои программы в папку \BIN... Это все-таки папка для средства разработки... Создал бы свою папку для программ, и работал бы с ней...
Это первое... Второе - зачем тебе другие BGI? Ты что, собрался делать программу, которая будет работать с любыми драйверами? Сомневаюсь...
Ну, и третье: лучше всего (если ты уже занялся разработкой графических программ), написать вот такой модуль:
Unit BGI;
interfaceProcedure EgaVgaDriverProc;
{ Сюда можешь добавить также другие драйверы }Procedure SmallFontProc;
{ Можно добавить любые другие шрифты }implementation{$L EGAVGA.obj}Procedure EgaVgaDriverProc; External;
{ Не забудь добавить все OBJ файлы и описания внешних процедур сюда }{$L LITT.obj}Procedure SmallFontProc; External;
{ Не забудь добавить все OBJ файлы и описания внешних процедур сюда }beginIf RegisterBGIDriver(@EgaVgaDriverProc) < 0then Halt(100);
{ Здесь надо зарегистрировать ВСЕ описанные выше драйверы }If RegisterBGIFont(@smallFontProc) < 0then Halt(200);
{ Здесь надо зарегистрировать ВСЕ описанные выше шрифты }end.
, откомпилировать его один раз, а потом просто использовать в программе, не заботясь о присутствии BGI и CHR файлов в текущей папке...
(о том, как преобразовать BGI/CHR в OBJ - читай здесь: Директивы компилятора - про директиву $L )
Mr. Anderson
8.03.2007 23:58
Спасибо, попробую. А как поставить стрелки и обозначения? я не нашёл по поиску.
volvo
9.03.2007 1:07
А как поставить стрелки и обозначения?
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrtY,colorOXY);
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrtY-i,colorOXY);
так какая разница между smallint и integer (ссылку дайте хотя бы).
volvo
9.03.2007 3:28
Да нет никакой разницы, просто smallint гарантированно имеет размер в 2 байта (см. файл Ref.PDF из документации на FPC) в отличие от Integer, который может быть 2-х, 4-х или 8-ми байтовым, а процедура InitGraph принимает переменные по ссылке - значит, размер переменных должен совпадать с эталонным. Это гарантируется только использованием типа smallint...
compiler
9.03.2007 16:04
Цитата(volvo @ 8.03.2007 22:28)
Да нет никакой разницы...
благодарю..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.