Witam. Pracuję nad problemem komiwojażera, piszę go w Lazarusie. W podanym kodzie w miejscu zapełniania zarezerwowanej pamięci (wiersze 78-88) po inkrementacji licznika pętli (do wartości 1) występują poniższe błędy zamieszczone na załączniku.
Kod:
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
type
wsk_li=^li;
wsk_miasto=^miasto;
li=record {lista wskaznikow}
next:wsk_li;
odleglosc:real;
sasiad:wsk_miasto;
end;
miasto=record {rekord miasta}
nazwa:string;
x,y:integer;
stan:boolean; {false}
li:wsk_li; {nil}
end;
tab=array[0..5] of miasto;
wsk_tab=^tab;
var
p_miast, p_sasiedzi:text;
tmp, tmp2:string;
l_miast,i,skala:byte;
tab_miast:wsk_tab;
start:wsk_miasto;
dalej:boolean;
delay_time:word;
procedure policzMiasta(var p_miast:text; var l_miast:byte);
begin
while not eof(p_miast) do
begin
readln(p_miast);
inc(l_miast);
end;
reset(p_miast);
end;
{rozbija linie teksu pobrana z pliku miasta.txt}
procedure miasto_dane(var tmpM, nazwa:string; var x,y:integer);
var
i,sr:byte;
tmp,tmp2:string;
blad:word;
begin
sr:=pos(';', tmpM);
nazwa:=copy(tmpM, 0, sr-1);
tmp:=copy(tmpM, sr+1, length(tmpM)-1);
sr:=pos(';', tmp);
tmp2:=copy(tmp, 0, sr-1 );
val(tmp2, x, blad);
tmp:=copy(tmp, sr+1, length(tmp)-1);
val(tmp, y, blad);
end;
{laduje wszystkie informacje o miastach do pamieci}
procedure ladujMiasta(var p_miast, p_sasiedzi:text; var tab_miast:wsk_tab; const l_miast:byte);
var
tmpM, tmpS, nazwa:string;
x,y:integer;
begin
i:=0;
while not eof(p_miast) do
begin
readln(p_miast, tmpM);
miasto_dane(tmpM, nazwa, x,y);
tab_miast^[i].nazwa:=nazwa;
tab_miast^[i].x:=x;
tab_miast^[i].y:=y;
tab_miast^[i].stan:=false;
tab_miast^[i].li:=nil;
inc(i);
end;
i:=0;
{while not eof(p_sasiedzi) do
begin
readln(p_sasiedzi, tmpS);
miasto_sasiedzi(tab_miast, tmpS, i, l_miast);
inc(i);
end;}
end;
begin
assign(p_miast, 'c:\pliki\miasta.txt');
assign(p_sasiedzi, 'c:\pliki\sasiedzi.txt');
reset(p_miast);
reset(p_sasiedzi);
policzMiasta(p_miast, l_miast);
writeln(l_miast);
getmem(tab_miast, l_miast*sizeof(miasto));
ladujMiasta(p_miast, p_sasiedzi, tab_miast, l_miast);
writeln('koniec');
readln;
end.
- errory komi.png (68 KB) - ściągnięć: 261