Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.12.2006
Репутация: нет Всего: нет
|
Здраствуйте, у меня (точнее у моего друга) зачетка по Delphi завтра! Я написал программу на паскале, но возникли трудности в написании ее на Дельфи в визуальной среде (потому-что я не знаю Дельфи). Помогите пожалуйста перевести мою программу в Дельфи. Дана шахматная доска, размером 8x8, начальное положение шахматного коня на ней, его конечное положение. Требуется написать программу, которая считывает данные из 2 полей ввода, задем переходит на объект StringGrid и показывает на нем минимальный путь из 1 точки во 2-ую. Входные координаты даются в формате а1, b2, h8 (как на шахматной доске первая координата - столбец, вторая - строка) Доска должна быть раскрашена в цвета #CCCC99 и #666633 (RGB: 204 204 153 и 102 102 51 соответственно) Конкретно, на экране картинка шахматного коня прыгает из начальной точки последовательно в конечную, клетки по ходу коня затемняются (когда он там побывал). По прибытии коня в пункт нахначения он должен улыбнуться. Я написал программу на Pascal'e ниже приведен ее код. Она считывает из файла input.txt и выводит в output.txt результат. Работает правильно, проверял на тестах. Вся проблема состоит в том, чтобы написать аналогичное приложение на Delphi с использованием визуальных средств как поле ввода, StrinGrid, картинка коня. Пожалуйста помогите, уже завтра ему сдавать, а мне ему отдавать уже сегодня )). Исходный код на паскале с комментариями прицеплен к темеДобавлено @ 16:15 Что-то я не увидел у себя прицепленного файла, вот исходник: | Код | {$APPTYPE CONSOLE} const FileIn='input.txt'; FileOut='output.txt'; n=9; m=8; {dopustimyie hody konia dx-kak izmenitsa stroka,kuda mozhet hodit kon' dy-kak izmenitsa stolbec,kuda mozhet hodit kon m- kolichestvo vsevozmozhnyh hodov konia} dx:array[1..m] of integer=(1,-1, 1, -1,2, 2,-2, -2); dy:array[1..m] of integer=(2, 2,-2, -2,1,-1, 1, -1); type mas1=array[-1..n+2,-1..n+2] of integer; {ochen' nuzhnyi tip - hranit koordinaty mestopolozhenia na doske r- stroka, c - stolbec } coord=record r,c:integer; end; mas2=array[1..n*n] of coord; var (*massiv a - nasha shakhmatnaia doska 1..n,1..n diapozon realnyh strok i stolbcov - kletok doski, a diapozon [-1..0,n+1..n+2],[-1..0,n+1..n+2] - pustaia zona shtob programma po hodu vypolnenia ne vyzvala elenent skazhem s indexom (-1,0)* ELEMENT A[I,J] MASSIVA HRANIT ZNACHENIA - MINIMAKNOIE KOLICHESTVO HODOV NEOBHODIMOIE DLIA KONIA+1 pochemu+1 - stanet poniatno iz realizacii CHTOB DOSTIGNUT' TOCHKI S COORDINATAMI I,J I-STROKA,J-STOLBEC*) a:mas1; {massiv q - nuzhen dlia hranenia ocheredi, to est' dlia realizacii poiska v shirinu} q:mas2; {ql,qr - nachalo i konec ocheredi sootvetstvenno} ql,qr:integer; {result - massiv posledovatelnost' hodov v minimalnom puti po poradku iz konca v nachalo nuzhno potom prosto vyvesti s poslednego elementa po porvyi k - kolichestvo hodov v minimalnom puti, to est razmer massiva result} result:mas2; k:integer; {s,t - tochka starta i tochka naznachenia} s,t:coord; {========================================================================================} procedure convert(c1:char;c2:char;var a:coord); var stroka,code:integer; begin code:=0; {vvod tochki naprimer, starta} (*c1 - stolbec na doske, c2 - stroka na shakhmatnoi doske, naprimer vveli b2 c1=b c2=2 *) (*perevodim v verkhnii registr stroku na sluchai esli vhodnyie dannyie budut raznogo formata naprimer h6 ili H6 *) c1:=upcase(c1); (* nakonec prisvaivaem nuzhnoie znachenie parametru a.c (a.r - stroka tochki, naprimer starta a.c - stolbec tochki, naprimer starta) dlia a4 stolbec=1 stroka=5 (8-4+1) dlia h2 stolbec=8 stroka=7(8-2+1)) *) a.c:=ord(c1)-ord('A')+1; {i stroke tozhe...} val(c2,stroka,code); a.r:=n-stroka+1; end; {========================================================================================} procedure reverse(a:coord; var c1,c2:char); begin {a eta procedura naoborot iz zadannyh stroki i stolbca v zapisah peremennoi a vozvrashchaet coordinaty f formate a1, b2, h5, i tak dalee, c1 - eto koordinata - stolbec c2 - eto koordinata - stroka} c1:=low(char); c2:=c1; c2:=chr((n-a.r+1)+ord('1')-1); c1:=chr(a.c+ord('a')-1); end; {========================================================================================} procedure init; var i,j:integer; begin {delaem ogranku massiva, chtob kon' ne popal za predely doski eto delaetsia prosto - vokrug doski delaetsa ogranka ili ograda )) tolshchinoi=2 vot kak eto vygladit: -1-1-1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1 -1-1 0 0 0 0 0 0 0 0-1-1 -1-1 0 0 0 0 0 0 0 0-1-1 -1-1 0 0 0 0 0 0 0 0-1-1 -1-1 0 0 0 0 0 0 0 0-1-1 -1-1 0 0 0 0 0 0 0 0-1-1 -1-1 0 0 0 0 0 0 0 0-1-1 -1-1 0 0 0 0 0 0 0 0-1-1 -1-1 0 0 0 0 0 0 0 0-1-1 -1-1-1-1-1-1-1-1-1-1-1-1 -1-1-1-1-1-1-1-1-1-1-1-1 }
for i:=-1 to 0 do for j:=-1 to n+2 do begin a[i,j]:=-1; a[j,i]:=a[i,j]; end; for i:=n+1 to n+2 do for j:=-1 to n+2 do begin a[i,j]:=-1; a[j,i]:=a[i,j]; end;
end; {========================================================================================} procedure read; var c1,c2:char; begin (*vvod iz faila input.txt pervaia stroka - tochka starta v formate {a1,h2,b5...} vtoraia stroka - tochka finisha v tom zhe formate*) assign(input,filein); reset(input); assign(output,fileout); rewrite(output); {tochka starta} readln(c1,c2); convert(c1,c2,s); {tochka finisha - target} readln(c1,c2); convert(c1,c2,t); end; {========================================================================================} procedure add(a:coord); begin inc(qr); if qr=n*n+1 then qr:=1; q[qr]:=a; end; {========================================================================================} procedure extract(var b:coord); begin inc(ql); if ql=n*n+1 then ql:=1; if ql>qr then begin writeln('Ochered'' perepolnena kon'' sdoh'); close(output); halt(0); end; b:=q[ql]; end; {========================================================================================} function founded:boolean; begin {proveraiet naiden li kratchaishii put' ili net} if a[t.r,t.c]<>0 then founded:=true else founded:=false; end; {========================================================================================} procedure definepath; var i,j,n1:integer; cur:coord; begin n1:=0; cur:=t;
for i:=k downto 1 do begin inc(n1); result[n1]:=cur; for j:=1 to m do if a[cur.r+dx[j],cur.c+dy[j]]=i then begin cur.r:=cur.r+dx[j]; cur.c:=cur.c+dy[j]; break; end; end; end; {========================================================================================} procedure work; var i,j:integer; cur,next:coord; {cur sokr. current - eto tekushaia rassmatrivaiemaia tochka} begin {prisvaivaem nachalnoi tochke znachenie 1 to est v konce my poluchim minimalnoie chislo hodov+1} a[s.r,s.c]:=1; {dobavlaiem tochku starta v ochered' i poneslas'!} add(s); {algoritm privedennyi nizhe iavlaietsa standartnym algoritmom poiska minimalnogo puti na ploskosti s ispolzovaniem poiska v shirinu. V dannom sluchaie ispolzovalas' ochered' q, gde hranilis' v nachale ocheredi - tekushaia rassmatrivaiemaia tochka, v konce - vozmozhnyie hody iz tekushei tochki} while not founded do begin {izvlekaiem iz ocheredi tekushuiu tochku} extract(cur); for i:=1 to m do {Iesli my mozhem iz nee kuda-libo pohodit', gde kon' eshche ne byl to pishem v konec ocheredi vozmozhnyi variant, z ametim chto vsego vozmozhnyh variantov u konia 8. Ih opisanie sm. v razdele const v nachale programmy} if a[cur.r+dx[i],cur.c+dy[i]]=0 then begin {zadaem koordinaty sleduiushei poseshchaemoi konem tochki...} next.r:=cur.r+dx[i]; next.c:=cur.c+dy[i]; {...pishem etu tochku v konec ocheredi} add(next); {delaiem pometku na doske: My zdes' byli na takom-to hodu(tochnee na tekushem hodu+1)} a[next.r,next.c]:=a[cur.r,cur.c]+1; end; end; {rezultat k - chislo hodov} k:=a[t.r,t.c]-1; {Delo za malym - vosstanovit' posledovatelnost' hodov s konca} definepath; end; {========================================================================================} procedure write; var i:integer; c1,c2:char; begin writeln(k); for i:=k downto 1 do begin reverse(result[i],c1,c2); writeln(c1,c2,' '); end; close(output); end; begin init; read; work; write; end.
|
M alexeis1 | Модератор: не забывайте выбирать тип подсветки. | Это сообщение отредактировал(а) alexeis1 - 8.12.2006, 16:37
|