我写了这个程序,但我无法弄清楚它有什么问题。 SkaitytiDuomenis(读取值)过程将两个数组作为参数,因此它可以从文本文件中读取坐标并将它们存储在数组中,但问题是它并没有真正读取它。 assign()部分有问题,但我无法弄清楚我的生活。任何帮助的人都将非常感激,因为这是我正在准备的州考试。
program Uzduotis1;
type
masyvas = array[1..50] of integer;
{*************************Kintamieji************************}
var
Duomenys, Rezultatai :text;
x, y :masyvas; {koordinates (x;y) }
UzsakymuSk, {uzsakymu skaicius}
DienosKm, {dienos kilometrazo limitas}
NuvaziuotiKm, {nuvaziuotu kilometru suma}
LikeKlientai, {neaptarnautu klientu skaicius}
UzsakymoNr {atliekamo uzsakymo numeris}
:integer;
{*************************Proceduros************************}
procedure SkaitytiDuomenis(var a,b:masyvas);
var i:integer;
begin
for i:=1 to UzsakymuSk do
readln(Duomenys, a[i], b[i]);
end;
procedure IsvestiRezultatus;
begin
rewrite(Rezultatai);
write(LikeKlientai,' ',NuvaziuotiKm);
close(Rezultatai)
end;
{************************Funkcijos**************************}
function atstumas(a,b :integer) :integer;
begin
atstumas := (abs(a) + abs(b)) * 2;
end;
{********************Pagrindine programa********************}
begin
assign(Duomenys,'C:\Duomenys\U1.txt');
assign(Rezultatai,'C:\Duomenys\U1rez.txt');
reset(Duomenys);
readln(Duomenys,UzsakymuSk,DienosKm);
SkaitytiDuomenis(x,y);
NuvaziuotiKm := 0;
LikeKlientai := UzsakymuSk;
UzsakymoNr := 1;
while ((UzsakymoNr<UzsakymuSk) and (NuvaziuotiKm<DienosKm)) do
begin
NuvaziuotiKm := NuvaziuotiKm + atstumas(x[UzsakymoNr],y[UzsakymoNr]);
LikeKlientai := LikeKlientai - 1;
UzsakymoNr := UzsakymoNr + 1
end;
IsvestiRezultatus;
end.
这是输入文件:
14 30
2 3
3 –1
-2 –4
–3 0
-2 4
0 2
5 -4
1 2
4 -3
2 1
-5 -5
-1 0
0 5
2 5
答案 0 :(得分:0)
您是否直接通过PC将输入文本文件复制/粘贴到问题中?当我把它复制出来时,我发现了一些意想不到的字符:
$ od -c U1.txt
0000000 1 4 3 0 \n 2 3 \n 3 342 200 223 1
0000020 \n - 2 342 200 223 4 \n 342 200 223 3 0 \n
0000040 - 2 4 \n 0 2 \n 5 - 4 \n 1
0000060 2 \n 4 - 3 \n 2 1 \n - 5 - 5
0000100 \n - 1 0 \n 0 5 \n 2 5 \n
因此,在读完前两行后,它会尝试从第3行读取两个ASCII整数值,因为它不是有效文本。我从原始文件中删除了第3,4和5行,然后程序运行了。
尝试重新生成文本文件。或者检查生成它的程序,如果它是你的。
答案 1 :(得分:0)
您的输入文件格式不正确。它包含十六进制UTF8字符序列E2 80 93
,它等同于en-dash,code point 8211 decimal。
这可能是因为文件是使用文字处理器而不是文本编辑器创建的,很少是个好主意。
只需用真正的-
个(code point 45 decimal)替换短划线字符,一切都应该很好。