title
// ConsoleApplication23.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
#include <time.h>
#define N 256
struct mydata
{
char ch;
int col;
float ch1;
char bincode[20];
};
void dobav(char*x, char z)
{
int i = 0;
while (x[i] != '\0')
i++;
x[i] = z;
x[i + 1] = '\0';
}
void schinys(int x, int y, mydata*ptr)
{
if (x == y)return;
if (x + 1 == y)
{
dobav((ptr + x)->bincode, '1');
dobav((ptr + y)->bincode, '0');
return;
}
int sum = 0;
for (int i = x; i <= y; i++)
{
sum = sum + (ptr + i)->col;
}
printf("in functtion : sum=%d\n", sum);
for (int i = x; i <= y; i++)
{
(ptr + i)->ch1 = (float)(ptr + i)->col/sum;
}
int k = 0;
float z = 0;
for (int i = x; i <= y; i++)
{
z = z + (ptr + i)->ch1;
if (z > 0.5)
{
k = i;
break;
}
}
for (int i = x; i < k; i++)
{
dobav((ptr + i)->bincode, '1');
}
for (int i = k; i <= y; i++)
{
dobav((ptr + i)->bincode, '0');
}schinys(k, y, ptr);
schinys(x, k - 1, ptr);
}
int obratnoe(char*x,char*y)
{
int i = 0;
while (x[i] != '\0' || y[i] != '\0')
{
if (x[i] != y[i])
return 1;
i++;
}
return 0;
}
void print(mydata*X, int n)
{
for (int i = 0; i < n; i++)
{
printf("%d %c %s \n", i + 1, (X+i)->ch,(X+i)->bincode);
}
}
void dobav(char *x,char *k)
{
int i = 0;
while (x[i] != '\0')i++;
int j = 0;
while (k[j] != '\0')
{
x[i + j] = k[j];
j++;
}
x[i + j + 1] = '\0';
}
void sort(mydata*x, int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (x[j].col<x[j + 1].col);
{
mydata rez = x[j];
x[j + 1] = x[j + 1];
x[j + 1] = rez;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char str[20];
gets_s(str);
puts(str);
int ar[256] = { 0 }; int i = 0, q = 0;
while (str[i] != '\0')
{
ar[str[i]]++;
i++;
}
for (int i = 0; i < N; i++)
{
if (ar[i] != 0)
{
printf("%c %d\n", i, ar[i]);
q++;
}
}
mydata *ptr = new mydata[q];
mydata*pt = ptr;
for (int i = 0; i < N; i++)
{
if (ar[i]!=0)
{
ptr->ch = i;
ptr->col = ar[i];
ptr++;
}
}
ptr = pt;
print(ptr, q); printf("**************\n");
//sort(ptr, q);
for (int i = 0; i < q - 1; i++)
for (int j = 0; j < q - 1 - i; j++)
if ((ptr+j)->col<(ptr+j+1)->col)
{
mydata vs = *(ptr + j);
*(ptr + j) = *(ptr + j + 1);
*(ptr + j + 1) = vs;
}
for (int i = 0; i < q; i++)
{
(ptr + i)->bincode[0] = '\0';
}
print(ptr, q);
schinys(0, q - 1, ptr);
print(ptr, q);
char rez[200] = "\0";
i = 0;
while (str[i] != '\0')
{
char cc = str[i];
for (int i = 0; i < q; i++)
{
if ((ptr + i)->ch == cc)
dobav(rez, (ptr + i)->bincode);
}i++;
}puts(rez);
char ss[20] = "";
i = 0;
while (rez[i] != '\0')
{
dobav(ss, rez[i]);
for (int j = 0; j < q; j++)
if (obratnoe(ss, (ptr + j)->bincode) == 0)
{
printf("%c", (ptr + j)->ch);
ss[0] = '\0';
}
i++;
}printf("\n");
return 0;
}