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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 16:51   #1
MasterK
Пользователь
 
Регистрация: 27.08.2009
Сообщений: 28
Восклицание Проблема при переносе кода.

Написал программу, которая кодирует сообщение по одному из методов Хаффмана. Писал в Pascal ABC так как были проблемы с Delphi. В Pascal ABC программа работает правильно, при переносе кода в Delphi для создания exe программа выдает другие значения.
Пример правильной кодировке
Сообщение accbcaaabc
Закодированное a 0c 1 00b 1 001 01 01 001 01

В делфи концовка отличается

Вот код работающий правильно в Pascal ABC

Код:
program hufman;

var
a:array [1..256] of string;
p:array [1..256] of integer;
kod:array [1..256] of string;
b,b1,n,y,vrem,a1:string;
g,i,k,g1,q,po,j,z,s,c:integer;
f:boolean;
begin
writeln('vvedite soobshenie');
readln(b);
g:=length(b);
b1:=b;
  for k:= 1 to g do
   begin
     y:=copy(b,1,1);
      kod[k]:='';
      for q:=1 to g do
        begin
          i:=pos(y,b);
          delete(b,i,1);
        end;
     n:=n+y;
     y:='';  end;
     
      g1:=length(n);
    a[1]:=copy(b1,1,1); kod[1]:=a[1]; p[1]:=1; delete(b1,1,1);

for k:= 1 to (g-1) do
begin
 vrem:=copy(b1,k,1); i:=1;
 z:=0; s:=1;
     for i:= 1 to g1 do
       begin
          if vrem=a[1] then  begin kod[k+1]:='1';
          if (vrem=a[1]) and (i=1) then p[1]:=p[1]+1;
            z:=1; end;
          if (vrem=a[i+1]) then begin
            for j:= 1 to i do
              kod[k+1]:=kod[k+1]+'0';
              kod[k+1]:= kod[k+1]+'1'; z:=1;
              p[j+1]:=p[j+1]+1; end;
        end;

          if z<>1 then
           begin
            for i:= 1 to g1 do
             begin
              a[g1+i]:=a[i];
              p[g1+i]:=p[i];
             end;
            for i:= 1 to g1 do
             begin
              a[i+1]:=a[g1+i];
              p[i+1]:=p[g1+i];
             end;
            for i:= 1 to g1 do
              a[g1+i]:='';
            for i:= 1 to g1 do
              begin
               if a[i]<> '' then
               s:=s+1;
              end;
            for i:=1 to (s-2) do
               kod[k+1]:=kod[k+1]+'0';
            p[1]:=1; a[1]:=vrem;
            kod[k+1]:=kod[k+1]+a[1];
           end;
 repeat
   f:=false;
   for i:=1 to g1-1 do
     begin
       if p[i]<p[i+1] then
         begin
          f:=true;
          c:=p[i];p[i]:=p[i+1];p[i+1]:=c;
          a1:=a[i]; a[i]:=a[i+1]; a[i+1]:=a1;
         end;
     end;
 until not f;
end;

         writeln(' kod ssobshenia');
        for k:=1 to g do begin
        write(' ',kod[k]);
   end;
end.
Помогите исправить данную проблему пожалуйста. Я видимо что-то упускаю

Последний раз редактировалось MasterK; 08.04.2010 в 17:00.
MasterK вне форума Ответить с цитированием
Старый 08.04.2010, 18:05   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

хм..
в строке 255 знаков... с 0-ём..
Код:
a:array [1..256] of string;
p:array [1..256] of integer;
kod:array [1..256] of string;
значит если от 1 до 256 то ты используешь 254 знака вместо 255..значит надо:
Код:
a:array [0..255] of string;
p:array [0..255] of integer;
kod:array [0..255] of string;
возможно в этом и была ошибка

попробуй написать это как функцию..
Код:
function Haffman(b:string): integer  //принимаемое значение это строка, выходное это число.
begin
        //твой код.
end;

Последний раз редактировалось Человек_Борща; 08.04.2010 в 18:10.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка кода при компиляции rubik Общие вопросы C/C++ 0 22.03.2010 19:44
Ошибка при переносе из 2006 в delphi 2009/2010 Яр|/||< (^_^) Общие вопросы Delphi 2 18.02.2010 12:01
О переносе *.exe Glaznoy Общие вопросы Delphi 8 15.05.2009 19:21
Выбор диаппазона при помощи кода komar73 Microsoft Office Excel 4 25.03.2009 18:10
Суммирование определенных ячеек при переносе Pilot Microsoft Office Excel 5 17.07.2008 12:46