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

Нужно составить программу на Delphi.

Нужно составить программу на Delphi, чтоб она вычисляла процентное соотношение символов в тексте. При моем подходе необходимо сначала узнать общее число символов в тексте, за тем узнать какие символы содержатся в тексте и по сколько их. Но для этого каждый символ должен содержаться в отдельной переменной и так как мы не знаем какое кол-во символов изначально то получается заморочка. исправьте меня или предложите свой вариант пожалуйста.
Заранее спасибо.
var
a: array [#0..#255] of integer;
n: integer;
f: text;
c: char;
s: string;
begin
Assign(f, 'input.txt');
Reset(f);
while not eof(f) do begin
Read(f, c);
Inc(a[c]);
Inc(n);
end;
Close(f);
for c := #0 to #255 do
if a[c] <> 0 then begin
case c of
#13: s := 'CR';
#10: s := 'LF';
else
s := c;
end;
writeln('''', s, ''' -- ', a[c] / n * 100:0:2, '%');
end;
end.
ОС
Олег Сорочинский
99 775
Лучший ответ
Берем текст, в цикле проходим его, смотрим если текущий элемент символ (вначале задаем массив символов, которые нам нужны) , то увеличиваем переменную счетчика. В конце делим значение переменной счетчика на длину текста и умножаем на 100 - получаем процент символов в тексте.

UPD: тогда проверяй что элемент не буква.
Мага ***вайнах***
Мага ***вайнах***
87 183
любой символ - байт. Т. е. получается не так уж много символов - 256.
Задай массив на 256 элементов Integer, и подсчитывай число элементов.
Все правильно тебе сказали выше.
Гасан, в предыдущем ответе есть все что вам нужно, читайте внимательнее. Сделайте, наконец, два цикла. В первом выясните какие символы, во втором займитесь обработкой.
VA
Vlad1Slav A.
73 561
Ну символ может быть и не байтом. Обычно есть способы определить кодировку файла. Если юникод то символ может занимать и 2 байта.
ПП
Павел Попов
52 467
Зачем тебе на каждый символ переменную-то заводить? Ассоциативный массив построй, структуру определи ( символ => количество букв в тексте) , это можно хотя бы ввиде двунаправленного связанного списка с указателями реализовать с помощью динамической структуры, чтобы оверхеда по памяти не было. Один раз по тексту проходишь и сразу все считаешь. Если диапазон алфавита известен, можно и массивом обойтись, как Imobilazer написал.
Как вариант:
Или нужно посчитать сколько каждый символ раз встречается? Может я не так понял.
создаете таблицу переменных и прозодите текст от начала и до конца.... каждый элемент можно записать в отдельную переменную и вести запись о колличестве их в тексте - потом провести анализ и выдать результат - при желание можно написать - цену вопроса на почту
Aligator *
Aligator *
4 014
Люди вы шо серьёзно? Это задача состоит из одного цикла одного константного массива символов и одного двумерного выходного массива + оператора if... И вы ему всё решили.. . Смешно)))
Илья Козырев
Илья Козырев
2 751
Как выриант
Другой вариант, в цикле проверить код аскии для каждого символа.
Все символьные знаки входят в один диапазон.

Или проверить числа: если да, то не увеличивать счетчик. Числа ттоже в одном диапазоне кодов аскии - от 48 для 0 до 57 для 9 - и это покороче, чем символьный ряд :) Точное значение кода аскии лучше проверить: пишешь прогу вывести аскии ("1") - точно увидишь значение кода аскии...
VK
Valentin Kundelev
280