Автор: ilua_great 30.04.2007 22:34
Код
program maper;
uses crt;
var f:text;
x,y:integer;
map: array[1..10,1..10]of integer;
begin
clrscr;
assign(f,'map');
reset(f);
{load}
writeln('load');
x:=1;
y:=1;
repeat
read(f,map[x,y]);
y:=y+1;
if y>10 then
begin
y:=1;
x:=x+1;
end;
until x>10;
writeln('load 100%');
close(f);
{load}
readln;
clrscr;
{draw}
x:=1;
y:=1;
repeat
gotoxy(x,y);
write(map[x,y]);
y:=y+1;
if y>10 then
begin
y:=1;
x:=x+1;
end;
until x>10;
{draw}
readln;
end.
Этот код должен рисовать картинку как в файле
Код
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 7 7 7 7 7 7 7 7 1
1 1 1 1 1 1 1 1 1 1
Но он рисует её перевёрнуто, в чём проблема?
Автор: volvo 30.04.2007 22:55
Цитата
в чём проблема?
В том, что при обращении к map[x, y] изменение Х - это изменение
строки, а при gotoxy(x, y) изменение Х - это изменение
столбца...
Автор: ilua_great 1.05.2007 15:44
Но по программе x:=1 y:=1 если y>5, тобиш изменение строки, или нет???
Автор: volvo 1.05.2007 16:02
Я ж тебе говорю, что индексы X и Y меняются для GotoXY и для Map одинаково, так? У тебя же все обрабатывается в одном цикле. НО... Значения X для GotoXY и для Map - совершенно противоположные...
Пойми, при работе с матрицами первым изменяется самый последний индекс, т.е. сначала ты проходишь по первой строке, и только потом переходишь на вторую, правда? Это достигается изменением в Map[i, j] индекса J быстрее, чем индекса i... Помотри, что у тебя меняется быстрее... Y, не так ли? Переходим теперь к GotoXY... Что означает случай, когда Y меняется быстрее чем X? То, что ты проходишь сначала по первому столбцу, и только потом переходишь ко второму, потому что ОY - это ось вертикальная...
Вот тебе и противоречие...
Хочешь правильной работы - обращайся к Map[Y, X] ...
Автор: ilua_great 1.05.2007 18:51
Мне друг говорил чтото похожее а я не принял значения, вот я дурак
Автор: ilua_great 1.05.2007 19:14
Вот рабочая прога
Код
program load;
uses crt;
var x,y:integer;
f:text;
room:array[1..6,1..5]of integer;
procedure load_room;
begin
assign(f,'room');
reset(f);
for y:=1 to 5 do
begin
for x:=1 to 6 do
begin
read(f,room[x,y]);
end;
end;
close(f);
end;
procedure draw_room;
begin
for y:=1 to 5 do
begin
for x:=1 to 6 do
begin
gotoxy(x,y);
write(room[x,y]);
end;
end;
end;
begin
load_room;
draw_room;
readln;
end.
Код
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
зы Как ты , вова, всё загнул, но всё равно спасибо! Как говорил один не безизвестный чел-"Истина где-то рядом", я просто перепутал x и y местами