Дан текстовой файл, знаки препинания отсутствуют, слова разделены пробелами.
Необходимо вычислить количество слов одинаковой длины.
Например слов диной в один символ - столько-то, в два символа столько то, в три символа - столько то.
PROGRAM PRP7;
VAR
f:text;
s:string;
i:INTEGER;
n:INTEGER;
BEGIN
ASSIGN(f,'in.txt');
RESET(f);
n:=0;
WHILE NOT EOF(f) DO
BEGIN
READLN(f,s);
FOR i:=1 TO LENGTH(s) DO
IF (s[i-1]=' ') OR (i=1) THEN
BEGIN
n:=n+1;
END;
END;
CLOSE(f);
WRITELN;
WRITELN(n);
END.
IF (i=1) OR (s[i-1]=' ') THEN, и это будет работать везде и всегда. Кстати, еще одно: в следующий раз, когда обращаешься к нулевому символу строки, и сравниваешь его с пробелом, подумай, а что будет, если длина строки будет равна 32? В этом конкретном случае ничего страшного не произойдет, но вообще таких "сюрпризов" надо избегать.
var
WordLen: array[1 .. 15] of integer;
Inc(WordLen[Count]);
Честно не совсем понятно
Допустим ввели новые переменные
PROGRAM PRP7;
VAR
f:text;
s:string;
i:INTEGER;
n:INTEGER;
WordLen: array[1 .. 15] of integer;
count:INTEGER;
BEGIN
ASSIGN(f,'in.txt');
RESET(f);
n:=0;
WHILE NOT EOF(f) DO
BEGIN
READLN(f,s);
FOR i:=1 TO LENGTH(s) DO
IF (i=1) OR (s[i-1]=' ') THEN
BEGIN
n:=n+1;
Inc(WordLen[Count]);
WRITELN('Количество слов длины','i',' - ', WordLen[ i ]);
END;
END;
CLOSE(f);
WRITELN;
WRITELN(n);
END.
RESET(f);
for i:=1 to nLen do WordLen[i]:=0;
WHILE NOT EOF(f) DO BEGIN
READLN(f,s);
n:=0;
FOR i:=1 TO LENGTH(s) DO IF s[i]=' ' THEN begin // по пробелу..
if n>0 then Inc(WordLen[n]); // .. увеличиваем счетчик слов длины n
n:=0 // .. и обнуляем n
end
else Inc(n); // по НЕпробелу просто увеличиваем длину текущего слова
if n>0 then Inc(WordLen[n]) // в конце строки тоже увеличиваем счетчик
END;
CLOSE(f);
// теперь выводим результаты
for i:=1 to nLen do if WordLen[i]<>0 then WriteLn(i,'-char words: ',WordLen[i]);