В ней было приведено оригинальное решение задачи Подсчет числа различных букв в слове.
И несомненно, большим достоинством рассылки является то, что там есть ссылка на прекрасно написанные уроки по Паскалю.
Надеюсь, что автору рассылки (Юрию Викторовичу Климант) после моей рекламы теперь не следует обижаться на нас :)) , но я предложу свой более простой в понимании алгоритм и его реализацию
Идея моего решения заключается в использовании массива, каждый элемент которого с номером, равным коду символа, содержит число таких символов в строке. В Паскале максимальная длина строки равна 255, так что достаточно объявить массив байт. После заполнения массива можно делать с содержащейся в нем информацией все, что угодно
Итак, другое решение задачи "Подсчитать число различных букв в строке":
program Simbols;
const
Str: String = 'Это АнАлизируемая Строка, содержащая символы. UnderstanD?';
min = 32;
max = 255;
var
Symbols : array [min..max] of byte;
count, i: Byte;
BEGIN
{Сначала обнулим элементы массива на всякий случай}
WriteLn(#13,Str);
for i:=min to max do Symbols[i] := 0;
{Теперь увеличим на 1 содержимое каждой ячейки массива с номером, равным
коду символа}
for i:=1 to length(str) do
inc(Symbols[ord(Str[i])]);
{Остается пересчитать ненулевые элементы массива, а заодно
и выведем их на экран}
Count:=0;
for i:=min to max do
if Symbols[i] <> 0 then
begin
inc(Count);
Write(chr(i))
end;
if Count = 0 then
WriteLn('В строке нет символов - пустая')
Else
Writeln(#13#10'Число использованных символов = ',Count);
{Теперь определим число использованных БУКВ. Различие в том, что
буква "А", например, она и в Африке "А", независимо от того,
заглавная (прописная) она или строчная}
Count:=0;
for i:=min to max do
if Symbols[i] <> 0 then
begin
case i of
{Расстояние между строчной и прописной буквами
в кодировке OEM для всех английских букв, а для
русских - только в диапазоне от "а" до "п" равно 32}
ord('a')..ord('z'), ord('а')..ord('п'):
if Symbols[i-32] = 0 then inc(Count);
{Для русских букв в диапазоне от "р" до "я"
расстояние до соответствующих прописных равно 80}
ord('р')..ord('я'):if Symbols[i-80] = 0 then inc(Count);
ELSE inc(Count)
end;
end;
if Count = 0 then
WriteLn('В строке нет букв - пустая')
Else
Writeln(#13#10'Число использованных букв = ',Count);
END.
Мне кажется, что решение простое и в более подробном описании не нуждается. Хотя ... пишитеВопросы и предложения присылайте Борису