![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Glykaman |
![]()
Сообщение
#1
|
|||
Гость ![]() |
Значит проблема такая я пытался сделать библиотеку процедур. В этой библиотеке мне надо обьявить массив. Паскаль ругается на ошибку 121 неизвесный сертификатор при первом же использовании массива (массив graf). вот исходник: unit DopforGr; ![]() подозреваю что я неправильно обьявил массив или какаято проблема с синтаксисом. ![]() сама по себе процедура должна вызываться из библиотеки зарезервированым словом NEMSAVE(переменная;переменная;имя массива) и должна сохранять файлы с параметрами для графики. Недавно примерно такаяже проблема была у меня при записи в типиризированые типы файлов массивов, но там удалось обойти при помощи циклов и текстовых файлов. Зарание благодарен. ![]() Сообщение отредактировано: klem4 - 5.09.2007 20:59 |
|||
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Проблема в другом: ошибка №121 - это неправильный квалификатор, т.е., ты объявил Graf одномерным массивов, а обратиться к нему пытаешься, как к двумерному.. А нельзя
![]() |
Glykaman |
![]()
Сообщение
#3
|
Гость ![]() |
Проблема в другом: ошибка №121 - это неправильный квалификатор, т.е., ты объявил Graf одномерным массивов, а обратиться к нему пытаешься, как к двумерному.. А нельзя ![]() Понятно как мне тогда обьявить двухмерный массив? На код:
ругается что после array должен стоять of. (А если это обойти придётся делать 100 массивов ономерных.) Сообщение отредактировано: мисс_граффити - 5.09.2007 23:25 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Да что ты?
А вот так не пробовал: unit DopforGr;? (просто Паскаль не позволяет конструировать типы в описании заголовков процедур/функций, все типы, используемые в описании должны быть уже известны) |
-Glykaman- |
![]()
Сообщение
#5
|
Гость ![]() |
Спасибо volvo. Походу в очередной раз было доказано что всё генеальное просто. Щас буду тестить.вроде всё должно получиться.Ещё раз спасибо!
![]() |
Glykaman |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Мужской Реальное имя: артём Репутация: ![]() ![]() ![]() |
Прошу прощения что возвращаюсь к темже баранам. Тестил библиотека работает нормально а вот с использованием возникли проблемы и указывает на 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. |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата несмотря на то что graf также принадлежит TMatrix. Да, но только учти, что тип, описанный в модуле и заново описанный в основной программе - это разные типы с точки зрения Паскаля, несмотря на то, что их описание совпадает до последнего символа... Естественно, что при использовании разных типов ты получаешь сообщение об их несовместимости...Решение очевидно: убери переопределение типа TMatrix из основной программы, оставь только в модуле, тогда Паскаль будет использовать одно и то же описание и там и там, и никаких проблем не возникнет... |
Glykaman |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Мужской Реальное имя: артём Репутация: ![]() ![]() ![]() |
![]() с прогой разобрался только теперь компилятор возвращает меня в библиотеку с ошибкой 202 stack overflow error я сам ни разу ещё с этим не встречался. Если я тебя ещё не совсем задолбал своими вопросами раскажи что это и как с этим бороться. Я так понял там чтото с памятью типа переполнения но что такое "стек" (так написано в русификаторе справки) я не знаю. |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата теперь компилятор возвращает меня в библиотеку с ошибкой 202 stack overflow error Смотри, что происходит:TypeТак было, правда?А давай посмотрим, каков размер массива graf? 100*100*sizeof(integer) = 20000 байт... А передается массив по значению, то есть, целиком заталкивается в стек. А стек не безграничен, его размер равен... (Зайди в меню Options -> Memory Sizes, и посмотри, сколько байт отведено под стек...) Скорее всего, 16384, по умолчанию? Вот тебе и переполнение стека... Вот это: procedure NEMSAVE(nameFile:String ;nameintofile:string ; VAR graf: TMatrix); { <--- Var замечаешь? } тебе поможет, теперь массив не заталкивается в стек, а передается по ссылке... Сообщение отредактировано: volvo - 6.09.2007 0:11 |
Glykaman |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Мужской Реальное имя: артём Репутация: ![]() ![]() ![]() |
Смотри, что происходит: TypeТак было, правда?А давай посмотрим, каков размер массива graf? 100*100*sizeof(integer) = 20000 байт... А передается массив по значению, то есть, целиком заталкивается в стек. А стек не безграничен, его размер равен... (Зайди в меню Options -> Memory Sizes, и посмотри, сколько байт отведено под стек...) Скорее всего, 16384, по умолчанию? Вот тебе и переполнение стека... Вот это: тебе поможет, теперь массив не заталкивается в стек, а передается по ссылке... Ураа! заработало! volvo ты действительно крут ![]() Ты мне очень помог я уже чуть не отчаялся. А то в самоучителях нет подобной информации. ![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:31 |