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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2011, 22:54   #1
Quazar
Новичок
Джуниор
 
Регистрация: 02.11.2011
Сообщений: 1
По умолчанию Конвертация кода в другую IDE

Уважаемы Форумчане! Доброго вам времени суток.
Кратко о задаче. У меня есть код на делфи, реализующий компрессию методом Хаффмана. Необходимо перевести код в C++ Builder 6, ибо иного преподаватель видеть не хочет. Заранее огромное спасибо!
Код собственно.
Код:
unit Archivarius;

interface


Uses
  Forms, Dialogs;
const
   count=4096;
   Arch_Extention='asv';
   dot='.';

//две файловые переменные для чтения исходного файла и для
//записи архива
var
   f_r,f_w: File;

// Процедуры, которые используются для работы с файлом
// Первая - кодирование по методу Хаффмана
procedure RUN_ENCODE(f_name: string);
// Вторая - декодирование
procedure RUN_DECODE(f_name: string);

implementation

Type
   //тип дерева для динамической обработки статистики байтов
   byte_=^byte_jachejka;
   byte_jachejka=Record
      //сам байт
      byte_id: Byte;
      //статистика байта
      byte_st: Integer;
      //последовательность битов, в которые преобразуется текущий
      //байт после сжатия (в виде строки из "0" и "1")
      byte_string: String;
      //ссылки на левое и правое поддеревья (ветки)
      left, right: Byte_;
   End;

   //массив со статистикой байтов, принимающих участие в
   //файле
   bytes_with_stat = Array [0..255] of byte_;

   //объект, инкапсулирующий в себе:
   // * массив байтов с их статистикой
   // * количество байт, содержащихся в файле (встречающихся в файле
   //   хотя бы один раз)
   // * процедура (метод) инициализации объекта
   // * процедура для увеличения частоты i-го байта
   // * метод чтения i-го байта и его статистики
   // * метод чтения массива байтов со статистикой
   TStat = Object
      massiv: bytes_with_stat;
      count_byte: Byte;
      Procedure create;
      Procedure inc(i: Byte);
      Function Read_(i: Byte): Byte_;
      Function Read_Bytes: bytes_with_stat;
   End;

   // * процедура (метод) инициализации объекта
   Procedure TStat.create;
   var
      i: Byte;
   Begin
      count_byte:=255;
      For i:=0 to count_byte do
      Begin
         new(massiv[i]);
         massiv[i]^.byte_id:=i;
         massiv[i]^.byte_st:=0;
         massiv[i]^.left:=nil;
         massiv[i]^.right:=nil;
         Application.ProcessMessages;
      End;
   End;

   // * процедура для увеличения частоты i-го байта
   Procedure TStat.inc(i: Byte);
   Begin
      massiv[i]^.byte_st:=massiv[i]^.byte_st+1;
   End;

   // * метод чтения i-го байта и его статистики
   Function TStat.Read_(i: Byte): Byte_;
   Begin
      Read_:=massiv[i];
   End;

   // * метод чтения массива байтов со статистикой
   Function TStat.Read_Bytes: bytes_with_stat;
   Begin
      Read_Bytes:=massiv;
   End;

Type
   //объект, инкапсулирующий в себе:
   // * имя и путь к архивируемому файлу
   // * размер архивируемого файла
   // * массив статистики частот байтов
   // * дерево частот байтов
   // * метод генерации по имени файла имени архива
   // * метод генерации по имени архива имени исходного файла
   File_=Object
      Name: String;
      Size: Integer;
      Stat: TStat;
      Derevo: Byte_;
      Function ArcName: String;
      Function FileSizeWOHead: Integer;
      Function DeArcName: String;
   End;

   // * метод генерации по имени архива имени исходного файла
   Function File_.DeArcName: String;
   Var
      i: Integer;
      name_: String;
   Begin
      name_:=name;
      if pos(dot+Arch_Extention,name_)=0
      Then
      Begin
         ShowMessage('Неправильное имя архива,'#13#10'оно должно заканчиваться на ".'+Arch_Extention+'"');
         Application.Terminate;
      End
      Else
      Begin
         i:=Length(name_);
         While (i>0) And (name_[i]<>'!') Do
         Begin
            Dec(i);
            Application.ProcessMessages;
         End;
         If i=0
         Then
         Begin
            name_:=copy(name_,1,pos(dot+Arch_Extention,name_)-1);
            If name_=''
            Then
            Begin
               ShowMessage('Неправильное имя архива');
               Application.Terminate;
            End
            Else
               DeArcName:=name_;
         End
         Else
         Begin
            name_[i]:='.';
            Delete(name_,pos(dot+Arch_Extention,name_),4);
            DeArcName:=name_;
         End;
      End;
   End;
Quazar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертация кода AutoIT в DELPHI Lime Помощь студентам 1 21.08.2011 14:20
конвертация Romuald Microsoft Office Excel 8 12.07.2010 14:23
Конвертация surf135 Помощь студентам 3 31.05.2010 23:41
Конвертация Delphi->C# templllar Помощь студентам 0 21.12.2009 11:08
Конвертация одной БД в другую Старовъръ БД в Delphi 2 19.08.2008 12:26