Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2014, 14:47   #1
Klausms
Пользователь
 
Аватар для Klausms
 
Регистрация: 24.10.2011
Сообщений: 38
По умолчанию Алгоритм Шенона-Фано . помогите найти ошибку

Нашел код алгоритма на хабре. запускаю в паскале абс. но не запускается.
помогите запустить))

program ShennonFano;
uses crt;
const
a :array[1..6] of char = ('a','b','c','d','e','f'); { символы }
af:array[1..6] of integer = (10, 8, 6, 5, 4, 3); { частота символов }

{ Процедура для поиска кода каждой буквы }
procedure SearchTree(branch:char; full_branch:string; start_pos:integer; end_pos:integer);
var
dS:real; { Среднее значение массива }
i, m, S:integer; { m - номер средней буквы в последовательности, S - сумма чисел, левой ветки }
c_branch:string; { текущая история поворотов по веткам }
begin
{ проверка если это вход нулевой то очистить историю }
if (a<>' ') then c_branch := full_branch + branch
else c_branch := '';

{ Критерий выхода: если позиции символов совпали, то это конец }
if (start_pos = end_pos) then
begin
WriteLn(a[start_pos], ' = ', c_branch);
exit;
end;

{ Подсчет среднего значения частоты в последовательности }
dS := 0;
for i:=start_pos to end_pos do dS:= dS + af[i];
dS := dS/2;

{ Тут какой угодно можно цикл for, while, repeat поиск середины }
S := 0;
i := start_pos;
m := i;
while ((S+af[i]<dS) and (i<end_pos)) do
begin
S := S + af[i];
inc(i); inc(m);
end;

{ Рекурсия левая ветка дерева }
SearchTree('1', c_branch, start_pos, m);
{ Правая ветка дерева }
SearchTree('0', c_branch, m+1, end_pos);

end;

begin
WriteLn('Press <enter> to show');
ReadLn;
ClrScr;
{ Поиск кода Фано, входные параметры начало и конец последовательности }
SearchTree(' ',' ', 1, 6);
ReadLn;
end.
Klausms вне форума Ответить с цитированием
Старый 12.12.2014, 20:55   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Я не помню этот алгоритм, конечно, но что вы пытаетесь найти (что-то сделать) в пустой строке, используя пустой символ?
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация алгоритма Шенона-Фано на С doojkee Фриланс 3 23.05.2014 11:16
Реализация алгоритма Шенона-Фано на С++ doojkee Помощь студентам 0 21.05.2014 22:10
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10
Алгоритм Фано(Pascal) makc101 Помощь студентам 0 11.12.2010 12:19
Нужно найти ошибку или написать алгоритм по проще! (строки) velamut Помощь студентам 3 18.06.2010 16:09