Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Borland C++ Builder] арифметическое кодирование


Автор: JayW 15.5.2008, 18:04
добрый день.
необходимы рабочие коды осуществляющие алгоритмы арифметических кодирования и декодирования.
в качестве входного файла используется файл формата *.txt с массивом числовых элементов /*они получаются в рез-те дкп*/. результат записывается в текстовый документ.

подойдёт код просто на С++ или, собственно на Билдере.

заранее спасибо всем отозвавшимся.

Автор: JayW 18.5.2008, 11:26
прграмма работает, но не хочет брать входные данные из inp.txt, и не хочет закидывать в out.txt.
посмотрите, где трабл, плз..
Код

#include <stdio.h>
#include <process.h>


FILE *in, *out;

void encode (char *infile, char *outfile)
{
  int ch, symbol;
  infile="inp.txt";
  outfile="out.txt";

  in = fopen ( infile, "r+b");
  out = fopen ( outfile, "w+b");
  if (in == NULL || out == NULL)
    return;
  start_model ();
  start_outputing_bits ();
  start_encoding ();
  for (;;)
  {
    ch = getc (in);
    if (ch == EOF)
      break;
    symbol = char_to_index [ch];
    encode_symbol (symbol);
    update_model (symbol);
  }
  encode_symbol (EOF_SYMBOL);
  done_encoding ();
  done_outputing_bits ();
  fclose (in);
  fclose (out);
}


void decode ( char *infile, char *outfile)
{
  int ch, symbol;
  infile="inp.txt";
  outfile="out.txt";
 
  in = fopen ( infile, "r+b");
  out = fopen ( outfile, "w+b");
  if (in == NULL || out == NULL)
    return;
  start_model ();
  start_inputing_bits ();
  start_decoding ();
  for (;;)
  {
    symbol = decode_symbol ();
    if (symbol == EOF_SYMBOL)
      break;
    ch = index_to_char [symbol];
    putc ( ch, out);
    update_model (symbol);
  }
  fclose (in);
  fclose (out);
}

// Головная процедура

void main ( int argc, char **argv)
{
  if (argc < 4)
  {
    printf ("\nИспользование: ar e|d infile outfile\n");
    exit (0);
  }
  if (argv [1] [0] == 'e')
    encode ( argv [2], argv [3]);
  else if (argv [1] [0] == 'd')
    decode ( argv [2], argv [3]);
  exit (0);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)