★书上的一个例子,有源代码,不能运行,请看看错在哪?谢谢!
{题目:测定字母偶的出现频率
该例子是:给出一个测定单字中相邻字母偶的出现频率的程序。例如,它给出,在一个字符串中,'ea'比'ie'出现得多还是少。程序只对在单字中的字母偶计数,针对'the cat',它只对'th','he','ca','at'计数,但不对'ec'计数。计数器使用下标类型为letter得一个二维数组conmat。把字母偶'ie'得出现次数放入下标变量conmat['i','e']中。}
program Project2(input,output);
{$APPTYPE CONSOLE}
uses
SysUtils;
{ TODO -oUser -cConsole Main : Insert code here }
const
cha = 'a';
chz = 'z';
type letter = cha..chz;
var conmat: array [letter,letter] of integer;
procedure initial;
var c1,c2: letter;
begin
for c1 := cha to chz do
for c2 := cha to chz do
conmat[c1,c2] := 0;
end;{initial}
{统计过程}
procedure statistical;
var thischar,prevchar: char;
begin
read(prevchar);
repeat
{读下一个字符}
read(thischar);
{统计一次}
if [thischar,prevchar] <= [cha..chz] then
conmat[prevchar,thischar] := conmat[prevchar,thischar] + 1;
prevchar := thischar;
until eof;
end;{statisical}
{输出过程}
procedure out;
{输出从beginch 到 endch 部分结果表}
procedure outone(beginch,endch: letter);
var c1,c2: letter;
begin
{打印表头}
write('*' : 5);
for c1 := beginch to endch do
write(c1 : 5);
writeln;
{打印表体}
for c1 := cha to chz do
begin
write(c1 : 5);
for c2 := beginch to endch do
write(conmat[c1,c2] : 5);
writeln;
end;{for}
end;
begin
outone('a','m'); {输出a..m部分}
outone('n','z'); {输出n..z部分}
end;
begin
initial; {初始化}
statistical; {统计}
out; {输出}
readln;
readln;
end.
我的问题是:该程序不能输出结果,我想是until eof闹的。until eof是干什么的?
这个程序的输入文件应该是指屏幕,我的问题是eof对屏幕文件起作用吗?
当然,可以用其它方式来确定输入结束,但是我不明白这个程序中为什么用until eof,这种用法我还是头一次看到。