Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2010, 17:10   #1
Голем
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 10
Восклицание как сам лабиринт ввести не как постоянную как тут а считыванием с файла

вот прога:
Program Voln;

Uses Crt;

Const

Map : array [1..10, 1..10] of Byte =

(

(0, 0, 1, 0, 0, 0, 0, 0, 0, 0),

(1, 0, 0, 0, 0, 1, 0, 0, 1, 0),

(0, 0, 0, 1, 1, 1, 0, 0, 1, 1),

(0, 1, 0, 0, 0, 1, 0, 0, 1, 0),

(0, 0, 0, 0, 1, 1, 1, 0, 1, 0),

(0, 0, 1, 1, 1, 0, 1, 0, 0, 0),

(0, 0, 0, 1, 0, 0, 1, 0, 0, 0),

(1, 1, 0, 1, 0, 0, 1, 1, 1, 0),

(0, 1, 0, 0, 0, 0, 1, 0, 0, 0),

(0, 1, 0, 0, 0, 0, 1, 0, 0, 0)

);

var

XS, YS, XE, YE : Byte;

X, Y, I : Byte;

MapM : array [1..10, 1..10] of Byte;

Moves : Byte;

MovesX : array [1..100] of Byte;

MovesY : array [1..100] of Byte;

Procedure Next(Var X, Y : Byte);

Begin

If (X <10) and (MapM[X, Y] - MapM[X + 1, Y] = 1) then

Begin

X := X + 1;

Exit;

End;

If (X >1) and (MapM[X, Y] - MapM[X - 1, Y] = 1) then

Begin

X := X - 1;

Exit;

End;

If (Y <10) and (MapM[X, Y] - MapM[X, Y + 1] = 1) then

Begin

Y := Y + 1;

Exit;

End;


If (Y >1) and (MapM[X, Y] - MapM[X, Y - 1] = 1) then

Begin

Y := Y - 1;

Exit;

End;

End;

Begin

ClrScr;

For Y := 1 to 10 do

Begin

For X := 1 to 10 do Write(Map[X, Y], ' ');

WriteLn;

End;

WriteLn('Please enter X and Y of the start: ');

ReadLn(XS, YS);

WriteLn('Please enter X and Y of the end: ');

ReadLn(XE, YE);
If (XS = XE) or (YS = YE) then
Begin

WriteLn('Start = End. Error!!!');

ReadLn;

Halt;

End;

If (Map[XS, YS] = 1) or (Map[XE, YE] = 1) then

Begin

WriteLn('Error!!!');

ReadLn;

Halt;

End;

MapM[XS, YS] := 1;

I := 1;

Repeat

I := I + 1;

For Y := 1 to 10 do

For X := 1 to 10 do

If MapM[X, Y] = I - 1 then

Begin

If (Y <10) and (MapM[X, Y + 1] = 0)
and (Map[X, Y+1] = 0) Then MapM[X, Y+1] := I;

If (Y >1)
and (MapM[X, Y-1] = 0) and (Map[X, Y-1] = 0) Then MapM[X, Y-1] := I;

If (X <10)
and (MapM[X+1, Y] = 0) and (Map[X+1, Y] = 0) Then MapM[X+1, Y] := I;

If (X >1)
and (MapM[X-1, Y] = 0) and (Map[X-1, Y] = 0) Then MapM[X-1, Y] := I;

End;

If I = 100 then Begin

WriteLn('You can''t go there!!!');

ReadLn;

Halt;

End;

{For X := 1 to 10 do begin

For y := 1 to 10 do

Write(MapM[X, Y]:4);
Writeln
End;
Readln; }

Until MapM[XE, YE] >0;
Writeln;
Moves := I - 1;

X := XE;

Y := YE;

I := Moves;

Map[XE, YE] := 4;

Repeat

MovesX[I] := X;

MovesY[I] := Y;

Next(X, Y);

Map[X, Y] := 3;

I := I - 1;

Until (X = XS) and (Y = YS);

Map[XS, YS] := 2;

For I := 1 to Moves do WriteLn('X = ', MovesX[I],', Y = ', MovesY[I]);

WriteLn('Total: ', Moves, ' moves');

ReadLn;

For x := 1 to 10 do

Begin

For y := 1 to 10 do Write(Map[X, Y], ' ');

WriteLn;

End;

ReadLn;

End.
Голем вне форума Ответить с цитированием
Старый 17.07.2010, 17:11   #2
Голем
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 10
По умолчанию

вот файл:
Map: ( (0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
(1, 0, 0, 0, 0, 1, 0, 0, 1, 0),
(0, 0, 0, 1, 1, 1, 0, 0, 1, 1),
(0, 1, 0, 0, 0, 1, 0, 0, 1, 0),
(0, 0, 0, 0, 1, 1, 1, 0, 1, 0),
(0, 0, 1, 1, 1, 0, 1, 0, 0, 0),
(0, 0, 0, 1, 0, 0, 1, 0, 0, 0),
(1, 1, 0, 1, 0, 0, 1, 1, 1, 0),
(0, 1, 0, 0, 0, 0, 1, 0, 0, 0),
(0, 1, 0, 0, 0, 0, 1, 0, 0, 0) );
Голем вне форума Ответить с цитированием
Старый 17.07.2010, 17:11   #3
Голем
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 10
По умолчанию

называется karta.txt
Голем вне форума Ответить с цитированием
Старый 17.07.2010, 17:16   #4
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

непонятно что именно надо
ну например можно чисто текстом закатать файл
или преобразовать все по 2 байта и байтами сделать....
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 17.07.2010, 17:27   #5
Голем
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 10
По умолчанию

надо карту в начале:
Map: ( (0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
(1, 0, 0, 0, 0, 1, 0, 0, 1, 0),
(0, 0, 0, 1, 1, 1, 0, 0, 1, 1),
(0, 1, 0, 0, 0, 1, 0, 0, 1, 0),
(0, 0, 0, 0, 1, 1, 1, 0, 1, 0),
(0, 0, 1, 1, 1, 0, 1, 0, 0, 0),
(0, 0, 0, 1, 0, 0, 1, 0, 0, 0),
(1, 1, 0, 1, 0, 0, 1, 1, 1, 0),
(0, 1, 0, 0, 0, 0, 1, 0, 0, 0),
(0, 1, 0, 0, 0, 0, 1, 0, 0, 0) );
забить в файл karta.txt и организовать чтение информации о лабиринте из файла и ее хранение в двумерном массиве
Голем вне форума Ответить с цитированием
Старый 17.07.2010, 17:29   #6
Голем
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 10
По умолчанию

а карту из констант просто убрать
я пытался считать карту из файла но вылетала ошибка 106 и я забил карту в постоянные а так нежелательно
Голем вне форума Ответить с цитированием
Старый 17.07.2010, 17:42   #7
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от Голем Посмотреть сообщение
а карту из констант просто убрать
я пытался считать карту из файла но вылетала ошибка 106 и я забил карту в постоянные а так нежелательно
давай проще - разберем твой способ чтения из файла
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 17.07.2010, 17:51   #8
Голем
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 10
По умолчанию

Program Voln;

Uses Crt;

var



XS, YS, XE, YE : Byte;

X, Y, I : Byte;

MapM : array [1..10, 1..10] of Byte;

Moves : Byte;

MovesX : array [1..100] of Byte;

MovesY : array [1..100] of Byte;

Procedure Next(Var X, Y : Byte);

Begin

If (X <10) and (MapM[X, Y] - MapM[X + 1, Y] = 1) then

Begin

X := X + 1;

Exit;

End;

If (X >1) and (MapM[X, Y] - MapM[X - 1, Y] = 1) then

Begin

X := X - 1;

Exit;

End;

If (Y <10) and (MapM[X, Y] - MapM[X, Y + 1] = 1) then

Begin

Y := Y + 1;

Exit;

End;


If (Y >1) and (MapM[X, Y] - MapM[X, Y - 1] = 1) then

Begin

Y := Y - 1;

Exit;

End;

End;
const
n=10;
type
t= array[1..n, 1..n] of integer;

var

Map:t;

f: text;
k,j:integer;


Begin вот тут и ошибочка

ClrScr;
assign(f, 'karta.txt');
reset(f);
Writeln('ichodnaya karta');

for x:=1 to n do
for y:=1 to n do



readln(f, Map[x,y]);




For Y := 1 to 10 do

Begin

For X := 1 to 10 do Write(Map[X, Y], ' ');

WriteLn;

End;

WriteLn('Please enter X and Y of the start: ');

ReadLn(XS, YS);

WriteLn('Please enter X and Y of the end: ');

ReadLn(XE, YE);
If (XS = XE) or (YS = YE) then
Begin

WriteLn('Start = End. Error!!!');

ReadLn;

Halt;

End;

If (Map[XS, YS] = 1) or (Map[XE, YE] = 1) then

Begin

WriteLn('Error!!!');

ReadLn;

Halt;

End;

MapM[XS, YS] := 1;

I := 1;

Repeat

I := I + 1;

For Y := 1 to 10 do

For X := 1 to 10 do

If MapM[X, Y] = I - 1 then

Begin

If (Y <10) and (MapM[X, Y + 1] = 0)
and (Map[X, Y+1] = 0) Then MapM[X, Y+1] := I;

If (Y >1)
and (MapM[X, Y-1] = 0) and (Map[X, Y-1] = 0) Then MapM[X, Y-1] := I;

If (X <10)
and (MapM[X+1, Y] = 0) and (Map[X+1, Y] = 0) Then MapM[X+1, Y] := I;

If (X >1)
and (MapM[X-1, Y] = 0) and (Map[X-1, Y] = 0) Then MapM[X-1, Y] := I;

End;

If I = 100 then Begin

WriteLn('You can''t go there!!!');

ReadLn;

Halt;

End;

{For X := 1 to 10 do begin

For y := 1 to 10 do

Write(MapM[X, Y]:4);
Writeln
End;
Readln; }

Until MapM[XE, YE] >0;
Writeln;
Moves := I - 1;

X := XE;

Y := YE;

I := Moves;

Map[XE, YE] := 4;

Repeat

MovesX[I] := X;

MovesY[I] := Y;

Next(X, Y);

Map[X, Y] := 3;

I := I - 1;

Until (X = XS) and (Y = YS);

Map[XS, YS] := 2;

For I := 1 to Moves do WriteLn('X = ', MovesX[I],', Y = ', MovesY[I]);

WriteLn('Total: ', Moves, ' moves');

ReadLn;

For x := 1 to 10 do

Begin

For y := 1 to 10 do Write(Map[X, Y], ' ');

WriteLn;

End;

ReadLn;

End.
Голем вне форума Ответить с цитированием
Старый 17.07.2010, 17:52   #9
Голем
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 10
По умолчанию

вот оно и нужный файл:
Map: ( (0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
(1, 0, 0, 0, 0, 1, 0, 0, 1, 0),
(0, 0, 0, 1, 1, 1, 0, 0, 1, 1),
(0, 1, 0, 0, 0, 1, 0, 0, 1, 0),
(0, 0, 0, 0, 1, 1, 1, 0, 1, 0),
(0, 0, 1, 1, 1, 0, 1, 0, 0, 0),
(0, 0, 0, 1, 0, 0, 1, 0, 0, 0),
(1, 1, 0, 1, 0, 0, 1, 1, 1, 0),
(0, 1, 0, 0, 0, 0, 1, 0, 0, 0),
(0, 1, 0, 0, 0, 0, 1, 0, 0, 0) );
Голем вне форума Ответить с цитированием
Старый 17.07.2010, 17:52   #10
Голем
Новичок
Джуниор
 
Регистрация: 17.07.2010
Сообщений: 10
По умолчанию

название karta.txt
Голем вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ввести? logok Общие вопросы C/C++ 1 24.04.2010 06:41
Как изменять атрибуты музыкального файла такие как Исполнитель, Альбом и т.п. TwiX Общие вопросы Delphi 4 22.01.2010 14:48
Как из юникодного текстового файла прочитать его построчно и неповторяющиеся слова ввести в ListBox? SkAndrew Общие вопросы Delphi 2 10.11.2008 22:14
как из EXE файла ...выташить сам проект(код,Project,Unit)??? ivp88 Общие вопросы Delphi 5 18.03.2007 23:41