Другие языки программирования и технологии

И Снова Паскаль

Помогите пожалуйста!) ) Как провести считывание из файла букв латинницы (не учитывая регистр) попутно подсчитывая их количество? Строка в файле может быть любой длины. .
я пробовал так
for i:=1 to 26 do
schet:=0;
letter:=copy ( abc, i, 1 );
repeat
read ( infile, c);
c:=upcase(c);
if c = letter then
begin
schet:=schet+1;
end;
until eof(infile);
Доброго времени суток.

С трудом понимаю, что вам требуется. Есть файл, состоящий из строк символов. Все символы латиница или нет? Главного не сказали. То что строка может иметь любую длину ничего не дает.

Итак. Если в строке могут быть кроме латиницы и другие символы, то прислушайтесь к DiG DeePeR в части множества символов латиницы. Если вам надо, ко всему прочему, подсчитывать количество каждого символа, то советую сделать так. Объявляете массив, индексами которого будут символы латиницы.

var C : array['A'..'Z'] of Byte; {или Word, если текст большой, а поскольку не учитывая регистр, то от A до Z}

FillChar(C, SizeOf(C), 0); {обнулили массив С}

затем открываете файл на чтение

Assign(InFile, 'MyFile.txt');
Reset(InFile);

И приступаете к чтению строк

while not Eof(InFile) do begin
ReadLn(InFile, AnyStr);
for j:=1 to Length(AnyStr) do
if UpCase(AnyStr[j]) in ['A'..'Z'] then
Inc(C[UpCase(AnyStr[j])]);
end;

А теперь можно вывести подсчитанное количество символов.

for ch:='A' to 'Z' do
if C[ch] > 0 then WriteLn(ch, ' - ', C[ch]); {вывод встретившихся в тексте символов и их количества}

Все. Остальное оформление сами, плз.

Удачи!
™Ern@t™ ™Shayzan0V™
™Ern@t™ ™Shayzan0V™
59 612
Лучший ответ
проще всего использовать признак вхождения в множество ['A'..'z']
типа:

for x:=1 to length(abc) if abc[x] in ['A'..'z'] then schet:=schet+1

примерно так ))

p.s. подразумевается, что abc - строка из файла
chars: array [0..255] of byte;
c: char;
..
fillchar(chars, 256, 0);
repeat
read(c);
if c in ['A'..'z'] then inc(chars[byte(c)]);
until eof;