Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Непрерывную последовательность 0 и 1 закодировать 5-битным кодом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка оператора постфиксной инкрементации http://www.cyberforum.ru/cpp-beginners/thread1132649.html
Пытался набросать простенький контейнер с итератором. Вот код: #include <iostream> template<typename Item> class Vector{ private: friend class iterator; int max_size; int...
C++ Ввод\вывод файла Здравствуйте, уважаемые программисты. Есть проблемка: нужно прочитать из файла текст и вывести его на экран. Пробую через символьный массив и через ifstream но хорошего не получается ничего http://www.cyberforum.ru/cpp-beginners/thread1132646.html
Не выводит перегрузку оператора сложения C++
Помогите пожалуйста исправить ошибку: не выводит перегрузку оператора сложения как сделать чтобы /*Класс "Многочлен одной переменной". Поля: степень многочлена, массив коэффициентов. Методы:...
Написать программу, которая вводимое число преобразует в текст C++
Написать программу, которая по вводимому числу от 1 до 5 (номеру курса) выдает соответствующее сообщение «Привет, k-курсник». Например, если k=1, «Привет, первокурс*ник»; при k=4: «Привет,...
C++ Вычислить сумму и число положительных элементов матрицы, находящихся над главной диагональю http://www.cyberforum.ru/cpp-beginners/thread1132627.html
Помогите пожалуйста решить, и распишите каждую строку а то будут спрашивать что тут а что там. -Двумерный массив вычислить сумму и число положительных элементов матрицы A, находящихся над главной...
C++ Создать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y" Доброго времени суток. Прошу помочь в решении поставленного передо мной вопроса. Суть: Нужно написать консольное приложение, которое продолжало бы работать до тех пор, пока не нажата клавиша "y"... подробнее

Показать сообщение отдельно
mishkazzz
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 34
03.04.2014, 13:46  [ТС]
ValeryS, Байт, сейчас скину свой код, но он является обманом, потому как пишет просто 0 и 1 именно числами

насколько я понял, тут нужно использовать что-то вроде
C++
1
2
3
4
struct code {
unsigned amount : 4;
unsigned symbol : 1;
}
мой код работает по-другому, и, собственно, мне сказали, что биты я как таковые не использую
то есть файл с кодом должен весить столько бит, сколько в нем символов
поможет ли мне в этом расширение .bin?

спасибо вам большое за помощь
ниже прилагаю свой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
 
using namespace std;
 
int transmute(char c)
{
    if(c=='1') return 1;
    if(c=='0') return 0;
    else return -1;
}
 
void encode(FILE *fin, FILE *fout)
{
    char c;
    char t;
    int temp;
    int num=0;
    int prev;
    int cur;
    int helptool;
    int del;
    fscanf(fin, "%c", &c);
    prev=transmute(c);
    num++;
    while(fscanf(fin, "%c", &c)==1)
    {
            cur=transmute(c);
            if(prev==cur)
            {
            num++;
                    if(num==15)
                    {
                        fprintf(fout, "1111x%d\n", cur);
                        num=0;
                    }
            }
            else
            {
                del=8;
                for(int i=0; i<4; i++)
                {
                    if(num>=del)
                    {
                        fprintf(fout, "1");
                        num=num-del;
                        del=del/2;
                    }
                    else
                    {
                        fprintf(fout, "0");
                        del=del/2;
                    }
                }
            fprintf(fout, "x%d\n", prev);
            prev=cur;
            num=1;
            }
    }
        if(num>0)
        {
            del=8;
                for(int i=0; i<4; i++)
                {
                    if(num>=del)
                    {
                        fprintf(fout, "1");
                        num=num-del;
                        del=del/2;
                    }
                    else
                    {
                        fprintf(fout, "0");
                        del=del/2;
                    }
                }
            fprintf(fout, "x%d\n", prev);
        }
 
fprintf(fout, "0000x0");
}
 
 
void decode(FILE *fin, FILE *fout)
{
    int checker=1;
    int num=0;
    char c;
    int temp;
    int mult=8;
 
 
    while(checker!=0)
    {
        for(int i=0; i<4; i++)
        {
            fscanf(fin, "%c", &c);
            temp=transmute(c);
            num=num+mult*temp;
            mult=mult/2;
        }
        if(num==0) {checker=0;}
        else
        {
            fscanf(fin, "%c", &c); // pudtoe schityvanie
            fscanf(fin, "%c", &c);
            temp=transmute(c);
            fscanf(fin, "%c", &c); // pustoe schityvanie
            for(int j=0; j<num; j++)
            {
                fprintf(fout, "%d", temp);
            }
        num=0;
        mult=8;
        }
    }
 
}
 
int main()
{
   FILE *f1, *f2;
f1=fopen("input.txt", "r");
f2=fopen("output.txt", "w");
encode(f1, f2);
fclose(f1);
fclose(f2);
 
f1=fopen("output.txt", "r");
f2=fopen("checktheinput.txt", "w");
decode(f1, f2);
fclose(f1);
fclose(f2);
return 0;
}

он работает следующим образом:

кодирует 000, к примеру, как 0011x0
декодирует тоже посимвольно
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru