Найти ошибку в коде не находит максимальные значения.: в исходном текстовом файле записаны строки, содержащие текст на языке.
требуется написать программу, которая для каждой строки исходного файла будет
определять и выводить в результирующий файл букву, встречающуюся в этой
строке чаще всего, и количество там таких букв. строчные и прописные буквы при этом
считаются не различимыми. если искомых букв несколько, то программа должна выводить на
экран первую из них по алфавиту.
uses crt;
const
lat = ['a'..'z'];
type mas = array['a'..'z'] of integer;

procedure strtomas(s: string; var a: mas);
var
c: char;
i: integer;
begin
for c : = 'a' to 'z' do
a[c] : = 0;
for i : = 1 to length(s) do
if s[i] in lat then
a[upcase( : = a[upcase( + 1;
end;

procedure max(var a: mas; var s: string; var k: char; amax: integer);
var
c: char;
begin
amax : = 0;
c : = 'a';
for c : = 'a' to 'z' do
begin
strtomas(s, a);
if a[c] > amax then
amax : = a[c];
k : = c;
end;
end;

procedure mastostr(var a: mas; var sres: string);
var
c, k: char;
amax: integer;
s: string;
begin
sres : = '';
k : = ' ';
amax : = 0;
for c : = 'a' to 'z' do
begin
if a[c] > 0 then
max(a, s, k, amax);
sres : = sres + k + ' ' + amax + ',';
if length(sres) > 2 then
delete(sres, length(sres) - 1, 2);
end;
end;

procedure filetofile(var f1, f2: text);
var
sres, s: string;
a: mas;
begin
reset(f1);
while not eof(f1) do
begin
readln(f1, s);
if s < > '' then begin
strtomas(s, a);
mastostr(a, sres);
end
else sres : = '';
rewrite(f2);
writeln(f2, sres);
end;
close(f1); close(f2);
end;

var
f1, f2: text;
fname1, fname2: string;

begin
clrscr;
task;
write('введите имя исходного файла ');
readln(fname1);
assign(f1, fname1);

if fileexists(fname1) then begin

write('введите имя результата ');
readln(fname2);
assign(f2, fname2);
filetofile(f1, f2);
end
else writeln('файл с таким именем не существует');
end.

anna1660 anna1660    1   25.11.2019 20:50    1

Другие вопросы по теме Информатика