...
type koords=record
point:boolean
c:byte
poz:boolean
end;
ms=array[1..10] of koords;
var m:ms
begin
...
m[1].point:=true; {Почему-то не присваевается}
...
end.
Записи в массивах
Задан массив, элементами которого являются записи.
Так вот поле записи этого массива не заполняется, почему?
Код:
Код:
type koords=record //у тебя что на begin не ругается?
point:boolean;
c:byte;
poz:boolean;
end;
ms=array[1..10] of koords;
var m:ms;
begin
...
m[1].point:=true;
...
end.
point:boolean;
c:byte;
poz:boolean;
end;
ms=array[1..10] of koords;
var m:ms;
begin
...
m[1].point:=true;
...
end.
Но все равно не получается.
у меня нормально работает(присваивается). покажи тогда, что в коде делаешь. непонятно почему не получается. ошибку что ли выдает? или просто ты сам как-то определяешь присвоилось true или нет?
Код:
...
type koords=record
point:boolean;
c:byte;
napr:boolean;
end;
ms1=array[1..10] of koords;
ms=array[1..12,1..12] of byte
...
procedure zap(e,h,q,i1:byte;fl:boolean;var m1:ms;m2:ms1);
var r,k,k1:byte
begin
if fl then begin r:=e+2;
for k:=h to h+1+q do for k1:=e to r do m1[k1,k]:=1;
for k:=h+1 to h+q do m1[e+1,k]:=2;
else begin r:=h+2
for k1:=e to e+q+1 do for k:=h to r do m1[k1,k]:=1;
for k1:=e to e+q do m1[k1,h+1]:=2;
{Вот здесь начинается присваивание полям}
with m2[e,h] do
begin point:=true;
c:=q;
napr:=fl
end
end;
type koords=record
point:boolean;
c:byte;
napr:boolean;
end;
ms1=array[1..10] of koords;
ms=array[1..12,1..12] of byte
...
procedure zap(e,h,q,i1:byte;fl:boolean;var m1:ms;m2:ms1);
var r,k,k1:byte
begin
if fl then begin r:=e+2;
for k:=h to h+1+q do for k1:=e to r do m1[k1,k]:=1;
for k:=h+1 to h+q do m1[e+1,k]:=2;
else begin r:=h+2
for k1:=e to e+q+1 do for k:=h to r do m1[k1,k]:=1;
for k1:=e to e+q do m1[k1,h+1]:=2;
{Вот здесь начинается присваивание полям}
with m2[e,h] do
begin point:=true;
c:=q;
napr:=fl
end
end;
Код:
ms1=array[1..10] of koords;
ms=array[1..12,1..12] of byte
...
procedure zap(e,h,q,i1:byte;fl:boolean;var m1:ms;m2:ms1);
.....
with m2[e,h] do
begin point:=true;
c:=q;
napr:=fl;
end;
ms=array[1..12,1..12] of byte
...
procedure zap(e,h,q,i1:byte;fl:boolean;var m1:ms;m2:ms1);
.....
with m2[e,h] do
begin point:=true;
c:=q;
napr:=fl;
end;
или ты опять
[quote=Salamansar]зашился[/quote]?
ты еще кстати пару end'ов пропустил.
и еще я вызвал процедуру для проверки(исправив m2[e,h] на m2[e], уж не знаю как должно быть на самом деле, просто чтобы проверить присваивание) смотрел с помощью Watch: все меняется как надо.
Блин, да что ж такое: конечно там должно быть m2:[i1], прости за неудобства.
Код:
var a:ms1;b:ms;
...
zap(1,1,1,1,false(потом true),b,a);
...
zap(1,1,1,1,false(потом true),b,a);
нормально присваивается. ты как процедуру вызываешь, с какими параметрами?
Код:
var x,y,c,l:byte; flag:boolean; m:ms; mm:ms1
...
begin
...
zap(x,y,c,l,flag,m,mm);
...
end.
...
begin
...
zap(x,y,c,l,flag,m,mm);
...
end.
Меня обнадеживает одно: хоть у тебя все получилось - а то я уже подумал, что нельзя такие массивы применять (я сам в это не верил, ну а вдруг...)
Может быть у меня ошибка вот в чем:
я эти поля ячейки массива использую параметрами для другой процедуры?
приложи архивчик со всем кодом, так проще разобраться будет что? где? и как?.
P.S. Если влом будет с этим разбираться, то я тебя пойму (сам бывает путаюсь)
я че то с самого начала не обратил внимания - старею. смотри в архиве как надо делать.
Как я понял ты заменил локальные переменные на глобальные, так? Если так, то я чего-то непойму - какая разница, по идее оно должно и так, и так работать - не мог бы ты объяснить мне?
Код:
function test(a:word):boolean;
begin
a:=6;
writeln(a); //выведет 6
test:=true;
end;
...
begin
a:=1;
test(a);
writeln(a); //выведет 1
end.
begin
a:=6;
writeln(a); //выведет 6
test:=true;
end;
...
begin
a:=1;
test(a);
writeln(a); //выведет 1
end.
тоже самое и с массивами в твоем коде, поэтому мы используем глобальные переменные, чтобы изменения сохранились.
Но я же задаю в заголовке процедуры var m1 - если я не ошибаюсь, то это означает, что для этих переменных не выделяется новых ячеек памяти - а значит записывается в переменную, которую мы зададим. Разве не так?:confused:
Код:
procedure zap(e,h,q,i1:byte; fl:boolean;var m1:ms; m2:ms1);
а так как ты var m2:ms1 не написал, то здесь будет так как я показал в прошлом сообщении, если помнишь, то проблема у тебя как раз с m2 и была.
СПАСИБО тебе ОГРОМЕННОЕ!!!!
P.S. Я че-то не понял, почему мне не разрешили тебе отзыв добавить?