Упаковка строки
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Упаковка строки Expand / Collapse
Автор
Сообщение
21.06.2007 13:25
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 08.11.2007 8:27
Сообщ.: 33, Visits: 111
Есть следующее задание:

Первый наиболее часто встречающийся символ кодируется битом 0. Бит 1 кодирует группу из всех остальных символов. Код 10 кодирует второй по частоте символ, 11 - группу всех остальных и т.д.. Разработать функцию упаковки строки

Есть вот такой код:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

char str[256]; //строка
unsigned char outarray[256]; //выходной массив
unsigned char amounth_elem=0; //количество элементов
char filse_name[256];
FILE *fp;

void package()
{
 int frequencies[256]={0}; //частота появления символа
 int i,tmp;
 int j,cnt,flag=0;
 printf("");
 for(i=0;str[i]!='\0';i++)
 {
  tmp=str[i]; //сохраняем код тек. символа
   if(frequencies[tmp]==0)
    amounth_elem++;
   frequencies[tmp]++; //увеличиваем частоту соответствующего символа

 }

//******************sort*********************
for (i=0;i<256;i++)
     {
     for ( cnt=0,j=0; j<256; j++)
      if(frequencies[j]!=0 && frequencies[i]!=0)
      {    if (frequencies[j] < frequencies[i]) cnt++;
          else
           if (frequencies[j]==frequencies[i] && j<i) cnt++;
         flag=1;
      }

       if(flag==1)
        outarray[cnt]=i;
        flag=0;
     }
//******************end sort*****************

/*for (i=0;i<amounth_elem;i++)
{ printf("");
 printf("%d ",outarray[i]);
 }


 printf("amount simbols: %d ",amounth_elem);
}
*/
}
void write_in_file()
{
 printf("Input files name for save:");
 gets(filse_name);
 fp=fopen(filse_name,"w");
 if(fp==NULL)
  printf("error open file");
 else
 {
  fprintf(fp,"%c",amounth_elem);
 }

 


 fclose(fp);
}

void read_file()
{
 printf("Input files name:");
 gets(filse_name);
 fp=fopen(filse_name,"r");
 if(fp==NULL)
  printf("can not open file!");
 else
 {
  fscanf(fp,"%c",&amounth_elem);
 }
 printf("%d",amounth_elem);
 fclose(fp);
}


int main()
{
 clrscr();
 printf("Enter string for packing:");
 gets(str);
 str[256]='\0';
 package();
 write_in_file();
 read_file();
// F2();
 return 0;
}

Т.е. естькод, который определяет к-во вхождений символов в строке и сортирует их по частоте (первый символ, тот, который меньше раз повторяется в строке; последний - наиболее часто повторяющийся).

Не могу разобраться как с использованием битов поместить закодированую строку в файл :(

 

Помогите пожалуйсто!

 

Сообщ. #914260
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 5:22