Установлена операционная система Windows XP PRO.
При проверке программы на Borland Pascal 7.0 выдаёт ошибку UNIT expected. Курсор мигает в начале программы. Программа взята с
http://forum.pascal.net.ru/index.php?showtopic=2729&st=0&p=23770entry23770
Думаю, это как то связано с 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 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;
closegraph;
end.
Во-первых, почему здесь? Есть же раздел "Задачи"? А во-вторых, твоя программа у меня компилируется и под BP7 и под TP7 совершенно нормально - что-то у тебя с настройками среды програмирования...
Переезжаем в Задачи...
Стоп... Вопрос на засыпку: Как называется файл, в котором находится эта программа?
файл называется grafik.pas . Находится C:\BP\BIN
Сначала скопировал на BPW, сохранил как graf. Потом открыл в BP. добавил в начале program grafik;
Нажал run >> UNIT expected. Курсор мигает в начале.
Потом напечатал в вручную в BP
File >> Change directory >> C:\BP\BIN
Может здесь нужно что-то поменять?
Я знаю, что программа правильна, всё дело в настройках...
Mr. Anderson, ты опять даешь противоречивую информацию... Тебя спросили, как файл называется, ты начинаешь юлить:
Да, выяснилось ... сохранил как graph.pas свою программу (c другой функцией, другим диапазоном...) до того, как проверял программу из форума...
Удалил этот файл (graph.pas), т.к. по-прежнему выдавало ошибку в программе ( уже 1.PAS) . Теперь новая ошибка. Error 15: File not found (GRAPH.TPU). Курсор мигает на ; в строке Uses Graph, crt;
Этот файл GRAPH.TPU, однако, сейчас после удаления graph.pas , находится по-прежнему в C:\BP\UNITS (он не удалён).
Кажется, прийдётся переустанавливать Паскаль... ??? Хотя вряд ли поможет...
по моему эта программа для FP...
Пока мы сейчас проходим Паскаль 7.0 ( с сентября прошлого года)
Один ответ на 2 предыдущих поста: "Ничего подобного"...
Для compiler: эта программа - для любого компилятора Паскаля, в том числе и для FP...
Для Mr. Anderson: Файл GRAPH.TPU должен присутствововать в текущей папке, или в одной из папок, перечисленных в Options -> Directories -> Unit Directories ...
Спасибо. Осталось ещё немного:
После исправлений в unit directories (вместо D:\BP\UNITS C:\BP\UNITS, у меня тот же Паскаль установлен и на диске D) нажимаю на >> Run, экран очень быстро показывает чёрный экран (даже не видно график) и мгновенно закрывается, пробовал в конце перед end. поставить readln; ничего не изменилось...
ReadLn надо ставить НЕ перед End. , а перед CloseGraph... Это во-первых... А во-вторых: уверен, что граф. режим успешно инициализировался? Я бы все-таки это проверял:
...Файл EGAVGA.BGI в текущей папке присутствует?
grDriver:=Detect;
InitGraph(grDriver, grMode, '');
ErrCode := GraphResult;
if ErrCode <> grOk then begin
Writeln('Ошибка: ', GraphErrorMsg(ErrCode)); Readln; Halt(100);
end;
...
grDriver, grMode: integer;стоит строчка
grDriver, grMode: smallint;
EVANGA.BGI присутствует ( C:\BP\BGI ).
Сначала ставил просто перед closegraph;
Скомпилировал >> тот же быстро исчезающий чёрный экран.
Потом ставил
ErrCode:=GraphResult;
if ErrCode <> grOk then begin
writeln('Oshibka: ', GraphErrorMsg(ErrCode));
readln;
halt(100);
end;
как показано ниже. { Error 3: Unknown identifier. {курсор на ErrorCode
ErrCode :=GraphResult; } }
program grafika;
{$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, '');
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.
Добавить:
Var
grDriver : Integer;
grMode : Integer;
ErrCode: Integer; { <--- Вот это ... }
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.
Прикрепленные файлы
1.PAS ( 891 байт )
Кол-во скачиваний: 429
теперь файл EGAVGA.BGI в папке BIN.
компилируется
Только оси без стрелок и обозначений (x, y, 0).
Вопрос:
нужно ли остальные файлы BGI скопировать в BIN (так, если будут другие программы на графику)?
Unit BGI;
interface
Procedure EgaVgaDriverProc;
{ Сюда можешь добавить также другие драйверы }
Procedure SmallFontProc;
{ Можно добавить любые другие шрифты }
implementation
{$L EGAVGA.obj}
Procedure EgaVgaDriverProc; External;
{ Не забудь добавить все OBJ файлы и описания внешних процедур сюда }
{$L LITT.obj}
Procedure SmallFontProc; External;
{ Не забудь добавить все OBJ файлы и описания внешних процедур сюда }
begin
If RegisterBGIDriver(@EgaVgaDriverProc) < 0 then Halt(100);
{ Здесь надо зарегистрировать ВСЕ описанные выше драйверы }
If RegisterBGIFont(@smallFontProc) < 0 then Halt(200);
{ Здесь надо зарегистрировать ВСЕ описанные выше шрифты }
end.
Спасибо, попробую. А как поставить стрелки и обозначения? я не нашёл по поиску.
А как поставить стрелки и обозначения?
for i:=OXYminX to OXYmaxX do putpixel(zcrtX+i,zcrtY,colorOXY);заменить на:
for i:=OXYminY to OXYmaxY do putpixel(zcrtX,zcrtY-i,colorOXY);
setcolor(colorOXY);Устроит?
line(zcrtX+OXYminX, zcrtY, zcrtX+OXYmaxX, zcrtY); { horz }
moveto(zcrtX+OXYmaxX-7, zcrtY-2);
lineto(zcrtX+OXYmaxX, zcrtY);
lineto(zcrtX+OXYmaxX-7, zcrtY+2);
line(zcrtX, zcrtY-OXYminY, zcrtX, zcrtY-OXYmaxY); { vert }
moveto(zcrtX - 2, zcrtY-OXYmaxY+7);
lineto(zcrtX, zcrtY-OXYmaxY);
lineto(zcrtX + 2, zcrtY-OXYmaxY+7);
settextjustify(centertext, centertext);
outtextxy(zcrtX, zcrtY-OXYmaxY-(textheight('Y') div 2) - 3, 'Y');
outtextxy(zcrtX+OXYmaxX+(textwidth('X') div 2) + 3, zcrtY, 'X');
volvo, огромное спасибо Всё получилось
Прикрепленные файлы
2.pas ( 1.26 килобайт )
Кол-во скачиваний: 352
так какая разница между smallint и integer (ссылку дайте хотя бы).
Да нет никакой разницы, просто smallint гарантированно имеет размер в 2 байта (см. файл Ref.PDF из документации на FPC) в отличие от Integer, который может быть 2-х, 4-х или 8-ми байтовым, а процедура InitGraph принимает переменные по ссылке - значит, размер переменных должен совпадать с эталонным. Это гарантируется только использованием типа smallint...