Witam, mam problem, robię takie zadanie: http://db.tt/hKoRVep0 i kompilator pokazuje błąd (Compilation aborted k:\roboczy.pas:36
), ale nie podaje nic więcej. czy rozwiązanie ma sens? co powinienem naprawić?
program mapa;
var
wynx,wyny,najmx,najwx,najmy,najwy,licz2:longint;
dlug:int64 ;
x,y,licz,n,petla:longint;
zwrot:array[1..999999] of widestring;
powt:array[1..1000000] of word;
c:char;
begin
readln(n);
for licz:=1 to n do
begin
read(powt[licz],zwrot[licz]);
end;
x:=0;
y:=0;
najmx:=0;
najwx:=0;
najwy:=0;
najmy:=0;
wynx:=1;
wyny:=1;
for petla:=1 to n do
begin
for licz:=1 to powt[petla] do
begin
licz2:=1;
repeat
if zwrot[licz][licz2]='N' then y:=y+1; { <---tu pokazuje błąd}
if y>najwy then najwy:=y;
if zwrot[licz][licz2]='S' then y:=y-1;
if y>najmy then najmy:=y;
if zwrot[licz][licz2]='E' then x:=x+1;
if x>najwx then najwx:=x;
if zwrot[licz][licz2]='W' then x:=x-1;
if x>najmx then najmx:=x;
licz2:=licz2+1;
c:=zwrot[licz][licz2];
until c='';
end;
end;
wynx:=najwx-najmx;
wyny:=najwy-najmy;
writeln(wynx,' ',wyny);
readln;
end.
Skoro deklarujesz tablicę zwrot jako jednowymiarową a tu w warunku “if zwrot[licz][licz2]=‘N’” robisz z niej dwuwymiarową, to nie dziw się, że kompilator zwariował.
Zadanie rozwiązuję ja, jednak jest błąd, i proszę was o radę, chyba nie napisałem “Zróbcie za mnie to zadanie, bo ja nic nie umiem ale chce wygrać konkurs”.
Poza tym, to nie jest tablica dwuwymiarowa,
if zwrot[licz][licz2]=‘N’
tutaj licz to indeks tablicy, a licz2 to numer znaku w zmiennej zwrot[licz].
Protected_48 , to ty się mylisz. String jest typem talicy charów. Np:
Mamy:
zwrot:array[1…999999] of string;
Co jest równe:
zwrot:array : array[1…999999] of array[1…255] of char;
Czyli poniekąd mamy tablicę dwuwymiarową
Niech będzie, że coś podpowiem.
Rozmiar tablicy to 65536 bajtów, sam typ widestring jest większy (2GB, gdzie nie ma przymusu trzymania znaków 1bitowych). Nie ma sensu robić tablicy dla tego typu. Ogólnie zadanie jest proste, moim zdaniem powinno się go zrobić na jednej zmiennej typu widestring
To i ja dopiszę, że Lexander niekoniecznie musi się mylić.
Kompilator Delphi (stary, bo stary, ale zawsze to standard) po drobnych modyfikacjach kodu (brak Int64 i WideString) spokojnie “łyka” taki kod. Przyznam, że mnie to zdziwiło, ale tak jest.
Dzikęi, Drobok, ale tu nie chodzi o to żeby mój kompilator to łyknął, tylko sprawdzarka u organizatorów, gdzie nie da się zmienić żadnych ustawień kompilatora,
poza tym mam dostępne 16 MB pamięci.
Jak zrobić to na jednej zmiennej widestring? chyba na tablicy? jeśli tak, to właśnie tak robię, i jak widać kompilator tego nie łyka.