1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Пытаюсь скомпилировать: Програма должна выяснить если существует путь в лабиринте от точки А к Б.
COD(Показать/Скрыть)
Program Lab; Uses Crt; const maxn=30; dx:array[1..4] of integer=(-1,0,1,0); dy:array[1..4] of integer=(0,-1,0,1); var A:array[1..maxn+1, 1..maxn+1] of integer; n,m, sx,sy, fx,fy:integer; F:text; OK:boolean; procedure Initializare; var i,j:integer; begin for i:=0 to maxn+1 do for j:=0 to maxn+1 do a[i,j]:=1; write('Dati n si m: '); readln(n,m); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); writeln; end; write('Dati coordonatele punctului A: '); readln(sx,sy); write('Dati coordonatele punctului B: '); readln(fx,fy); readln; end; {Init} procedure Search(x,y,k:integer); var i:integer; begin OK:=True; if (x=fx) and (y=fy) then begin writeln('DA, drum exista'); OK:=False; readln; Halt; end else for i:=1 to 4 do if a[y+dy[i], x+dx[i]]=0 then Search(x+dx[i], y+dy[i], k+1); end; Begin ClrScr; Initializare; search(sx,sy,1); if OK then writeln('NU exista drum'); readln; end.
Пишет что NTVDM нашла недопустимую инструкцию. Погуглил, поискал на форуме, способа решение нашел два : перейти на 32-бит компилятор или сменить ОСь. Но ошибка только в этой програме, пробовал запустить ранее сохраненые, и быстро понаписал "Hello World" и другие мини-програмы, всё работает, тогда причем тут MS-DOS?
ДОС ни при чём. Ошибка в твоей программе. Нажми Options->Compiler и поставь там контроль переполнения стека и контроль выхода за пределы массива.
Просто у тебя программа из-за ошибки затирает код, и на месте кода получается та самая недопустимая инструкция. Да, в защищённой оси (в том числе в винде) программа не будет молча затирать код, она выдаст ошибку записи (защита памяти на уровне процессора). Но работать всё равно не будет. Так что сначала отладь программу.
ДОС ни при чём. Ошибка в твоей программе. Нажми Options->Compiler и поставь там контроль переполнения стека и контроль выхода за пределы массива.
Просто у тебя программа из-за ошибки затирает код, и на месте кода получается та самая недопустимая инструкция. Да, в защищённой оси (в том числе в винде) программа не будет молча затирать код, она выдаст ошибку записи (защита памяти на уровне процессора). Но работать всё равно не будет. Так что сначала отладь программу.
Спасибо! Ошибка было в том что у меня array[1..maxn, 1..maxn] а барьер я заполняю с for i:=0 ... как я этого не заметил...
а барьер я заполняю с for i:=0 ... как я этого не заметил...
Если программа компилируется с включенной опцией Range Checking (я уже устал говорить об этом /в самом низу поста/... Не хотите слушать - ловите ошибки дальше), то все, что произойдет - это вылет с указанием места ошибки.