М | Код нужно заключать между тегами [code = pas ] [ /code ] |
unit DopforGr;
interface
uses
graph;
procedure NEMSAVE(nameFile:String ;nameintofile:string ;graf:array of integer);
implementation
procedure NEMSAVE(nameFile:String ;nameintofile:string ;graf:array of integer);
var
dlafor:integer;
col:integer;
s,d:byte;
gFile:text ;
begin
col:=0;
assign(gFile,'mario.nem') ;
rewrite(gFile) ;
writeln(gFile,nameintofile) ;
for s:=0 to 99 do
for d:=0 to 99 do
begin
if graf[d,s]>0 then col:=col+1;
end;
writeln(gFile,col);
for s:=0 to 99 do
for d:=0 to 99 do
begin
if graf[d,s]>0 then begin writeln(gFile,d); writeln(gFile,s) ; writeln(gFile,graf[d,s]); end;
end;
close(gFile) ;
end.
Проблема в другом: ошибка №121 - это неправильный квалификатор, т.е., ты объявил Graf одномерным массивов, а обратиться к нему пытаешься, как к двумерному.. А нельзя
unit DopforGr;
interface
uses
graph;
procedure NEMSAVE(nameFile:String ;nameintofile:string ;graf:array [0..99,0..99] of integer);
implementation
procedure NEMSAVE(nameFile:String ;nameintofile:string ;graf:array [0..99,0..99] of integer);
var
dlafor:integer;
col:integer;
s,d:byte;
gFile:text ;
begin
col:=0;
assign(gFile,'mario.nem') ;
rewrite(gFile) ;
writeln(gFile,nameintofile) ;
for s:=0 to 99 do
for d:=0 to 99 do
begin
if graf[d,s]>0 then col:=col+1;
end;
writeln(gFile,col);
for s:=0 to 99 do
for d:=0 to 99 do
begin
if graf[d,s]>0 then begin writeln(gFile,d); writeln(gFile,s) ; writeln(gFile,graf[d,s]); end;
end;
close(gFile) ;
end.
Да что ты?
А вот так не пробовал:
unit DopforGr;?
interface
uses
graph;
Type
TMatrix = array [0..99, 0..99] of integer;
procedure NEMSAVE(nameFile:String ;nameintofile:string ;graf: TMatrix);
Спасибо volvo. Походу в очередной раз было доказано что всё генеальное просто. Щас буду тестить.вроде всё должно получиться.Ещё раз спасибо!
Прошу прощения что возвращаюсь к темже баранам. Тестил библиотека работает нормально а вот с использованием возникли проблемы и указывает на Graf :
[code = pas ]
program NeoNMooNpaintVersionFORPascal ;
uses
crt,graph,dopforgr;
type
TMatrix = array [0..99,0..99] of integer;
var
cursor:array[0..99,0..99] of boolean ;
a,b:integer;
x,y:integer;
color:byte;
name:string[8] ;
graf:TMatrix ;
Procedure graphinit ;
var
gm,gd:integer;
begin
gm:=2;
gd:=installuserdriver ('bgi256',nil);
initGraph(gd,gm,' ');
if graphResult <> grOK then halt(1);
end;
Procedure WrStr ;
begin
setcolor(150) ;
moveto (401,0);
lineto (401,401);
lineto (0,401);
moveto (401,40);
lineto (480,40);
SetTextStyle(DefaultFont, HorizDir, 1); ;
outtextxy(410,10,'Welcome to') ;
outtextxy(410,20,'NeoNMooN Paint for PASCAL') ;
outtextxy(410,30,'Glykasoft & NeoNMooN studio') ;
outtextxy(410,50,'You need Help? -> F1 ') ;
end;
Procedure initcolor ;
var
color2:byte;
begin
for color2:=0 to 255 do
begin
setcolor(color2) ;
rectangle(color2*2,460,color2*2,480);
rectangle(color2*2+1,460,color2*2+1,480);
end;
end;
Procedure nemLOAD ;
var
dlafor:integer;
col:integer;
s,d:byte;
gFile:text ;
begin
col:=0;
closegraph;
write('Input name(8) file please: ');
readln(name) ;
assign(gFile, name +'.nem') ;
reset(gFile) ;
readln(gFile,name) ;
readln(gFile,col) ;
for dlafor:=0 to col do
begin
readln(gFile,d) ;
readln(gFile,s) ;
readln(gFile,graf[d,s])
end;
close(gFile) ;
graphinit;
wrstr;
initcolor;
end;
Procedure text ;
var
printtext:string;
begin
setfillstyle(0,0);
bar(10,410,200,420);
setcolor(10) ;
outtextxy(10,410,'X=');
str(a,printtext);
outtextxy(30,410,printtext);
outtextxy(50,410,'Y=');
str(b,printtext);
outtextxy(70,410,printtext);
str(color,printtext);
outtextxy(90,410,'COLOR -');
outtextxy(150,410,printtext);
end;
Procedure chek ;
begin
setcolor(color);
setfillstyle(1,color);
bar(2*(color-10),430,2*(color+10),455) ;
rectangle(color*2,430,color*2,459) ;
for y:=0 to 99 do
begin
for x:=0 to 99 do
begin
if graf[x,y]<>0 then begin setcolor(graf[x,y]) ;rectangle(4*x+1,4*y+1,4*x+3,4*y+3); end;
end;
end;
setcolor(color);
for y:=0 to 99 do
begin
for x:=0 to 99 do
begin
if cursor[x,y]=true then rectangle(4*x,4*y,4*x+4,4*y+4);
end;
end;
end;
Procedure cursorinit ;
var
ch:char;
begin
repeat
chek;
text ;
setcolor(0);
ch := readkey;
case ch of
#75:if a>0 then begin rectangle(4*a,4*b,4*a+4,4*b+4); a:=a-1; cursor[a+1,b]:=false; cursor[a,b]:=true; end;
#77:if a<99 then begin rectangle(4*a,4*b,4*a+4,4*b+4);a:=a+1; cursor[a-1,b]:=false; cursor[a,b]:=true; end;
#72:if b>0 then begin rectangle(4*a,4*b,4*a+4,4*b+4);b:=b-1; cursor[a,b+1]:=false; cursor[a,b]:=true; end;
#80:if b<99 then begin rectangle(4*a,4*b,4*a+4,4*b+4);b:=b+1; cursor[a,b-1]:=false; cursor[a,b]:=true; end;
#49:begin rectangle(2*(color+10),430,2*(color+10)-1,455) ;rectangle(color*2,430,color*2,459) ;color:=color-1;end;
#51:begin rectangle(2*(color-10),430,2*(color-10)+1,455) ;rectangle(color*2,430,color*2,459) ;color:=color+1;end;
#13:graf[a,b]:=color;
#63:NEMSAVE('esd','nem', graf );
#66:nemLOAD;
{c #99:begin readln(color); end;}
else
end;
until ch = #27 ;
end;
begin
color:=1;
cursor[0,0]:=true;
graphinit;
wrstr;
initcolor;
cursorinit;
closegraph;
end.
[ /code ]
вобще тут много не относящегося к поблеме
если в кратце то при компиляции указатель в строке #63:NEMSAVE('esd','nem', graf ); указывает на graf и пишет тип несовместим несмотря на то что graf также принадлежит TMatrix.
с прогой разобрался только теперь компилятор возвращает меня в библиотеку с ошибкой 202 stack overflow error я сам ни разу ещё с этим не встречался. Если я тебя ещё не совсем задолбал своими вопросами раскажи что это и как с этим бороться. Я так понял там чтото с памятью типа переполнения но что такое "стек" (так написано в русификаторе справки) я не знаю.
TypeТак было, правда?А давай посмотрим, каков размер массива graf? 100*100*sizeof(integer) = 20000 байт... А передается массив по значению, то есть, целиком заталкивается в стек. А стек не безграничен, его размер равен... (Зайди в меню Options -> Memory Sizes, и посмотри, сколько байт отведено под стек...) Скорее всего, 16384, по умолчанию? Вот тебе и переполнение стека...
TMatrix = array [0..99, 0..99] of integer;
procedure NEMSAVE(nameFile:String ;nameintofile:string ;graf: TMatrix);
procedure NEMSAVE(nameFile:String ;nameintofile:string ; VAR graf: TMatrix); { <--- Var замечаешь? }
TypeТак было, правда?А давай посмотрим, каков размер массива graf? 100*100*sizeof(integer) = 20000 байт... А передается массив по значению, то есть, целиком заталкивается в стек. А стек не безграничен, его размер равен... (Зайди в меню Options -> Memory Sizes, и посмотри, сколько байт отведено под стек...) Скорее всего, 16384, по умолчанию? Вот тебе и переполнение стека...
TMatrix = array [0..99, 0..99] of integer;
procedure NEMSAVE(nameFile:String ;nameintofile:string ;graf: TMatrix);