Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ задача "на файл"

Автор: влад 13.11.2005 0:34

Возможно эта задача кому-то покажется смешной, но..
В задаче требуется найти символ в текстовом файле, кот. повторяется чаще остальных. Нужно вывести этот символ и количество его повторений.

Я так понимаю здесь потребуется воспользоваться таблицей ASCII ?

Автор: volvo 13.11.2005 2:10

var
arr: array[char] of integer;
ch: char;
{ откроешь файл }
...
while not eof(f) do begin
read(f, ch); inc(arr[ch]);
end;

потом просто найдешь максимум в массиве arr и выведешь на печать сам символ и его индекс...

Автор: Guest 13.11.2005 3:31

Вот это и есть ключевой момент. Я как раз и не понимаю как найти тот символ, который повторяется макс. количество раз. Никогда с символами не работал. Перерыл уже кучу всего.
Предложенной Вами операцией, я так понял, мы "переписываем" символы из файла в массив для дальнейшей работы с ними. Само по себе уже это ценная информация для меня. Я, например, узнал как работает функция inc() :smile:
Был бы очень благодарен, если бы Вы еще объяснили как мне найти символ с макс. количеством повторений. Трудно сформулировать, что именно я не понимаю, очень бы хотелось посмотреть это на примере. Интересует сама работа с символами.

Автор: volvo 13.11.2005 3:43

Цитата
я так понял, мы "переписываем" символы из файла в массив для дальнейшей работы с ними.
Неправильно понял. Мы для каждого символа, принадлежащего к типу Char сразу подсчитываем количество повторений. Полностью программа выглядит так:

var
f: text;
arr: array[char] of integer;
max_i, i, ch: char;

begin
assign(f, 'a.txt');
reset(f);
while not eof(f) do begin
read(f, ch); inc(arr[ch]);
end;
close(f);

{
количество вхождений каждого символа уже подсчитано
теперь найдем максимум из этих чисел...
}
max_i := #0;
for i := #0 to #255 do
if arr[max_i] < arr[i] then max_i := i;

writeln('char: ', max_i, ' count: ', arr[max_i]);

end.

Автор: Влад 13.11.2005 3:58

Не знаю как благодарить... good.gif
Я очень Вам признателен. Сейчас буду разбираться. Расширять мой трехнедельный уровень паскаль-подготовки.
Спасибо.