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

Закодировать файл. Взять 7 байт. Первый бит каждого байта переместить в 8 байт - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Записать программу, выводящую изображенную фигуру http://www.cyberforum.ru/cpp-beginners/thread1118716.html
Пользователь вводит некий символ. Записать программу, выводящую изображенную на рис. 2.10 фигуру, где вместо символа «*» должен быть символ, введенный пользователем. ***** ** * ** *****
C++ UrlDecode, Работа с кириллицей Сам пишу на C#. Тут возникла задача "общания с прогой", написанной в С++ 6.0. Проблема возникла с передачей данных с русским текстом (как есть работает, но надо шифровать, поэтому заворачиваю в... http://www.cyberforum.ru/cpp-beginners/thread1118709.html
C++ Координаты вектора умножить на число
вот есть класс, мне нужно координаты вектора умножить на число,через функцию используя прототип.Как это сделать ? Функцию в С++ еще не проходили, сказали делать по подобию Си #include "stdafx.h"...
Калькулятор в столбик C++
Возникла проблема не понимаю почему при умножении 567 * 900 = 50103, (программа недробляна поэтому можно только умножать одинаковые цифры по количеству а точнее показывать цифры для сложение) ...
C++ Написать функцию выбора пунктов меню стрелками "вверх" "вниз" http://www.cyberforum.ru/cpp-beginners/thread1118692.html
Доброго всем времени суток.Пожалуйста подскажите как мне справиться с моей проблемой.Нужно написать функцию выбора пунктов меню стрелками "вверх" "вниз".Вот код #include <windows.h> #include...
C++ Стек на массиве (выводит значение даже при пустом стеке) Здравствуйте, есть код со стеком, вопрос касательно метода класса,а точнее о выводе элемента из стека - pop(). Дело в том что программа выводит значения стека, даже когда он пуст,это же приводит к... подробнее

Показать сообщение отдельно
delexa
2 / 2 / 1
Регистрация: 02.03.2011
Сообщений: 134
14.03.2014, 15:43  [ТС]
mymedia, в 74 строке добавляю 8 строку. Мне кажется ошибка в кодировке. Может нужно как то по другому считать код русских букв?

Добавлено через 12 минут
А в 57 строке я беру 8 символ, чтобы дальше добавлять из него на начало каждому предыдущему символу бит.

Добавлено через 11 минут
Немного подправил код

Шифрование
Кликните здесь для просмотра всего текста
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <stdlib.h>
#include <fstream>
 
 
using namespace std;
 
int dvoich (int chislo);
int decyatich (string chislo);
 
 
int main()
{   
    setlocale(0,"");
    vector<int> s;
 
    ifstream f("input.bin", /*ios::binary|*/ ios::out);
    while(!f.eof())
    {
        char z; 
        f.get(z);
        if (f.eof()) break;
        s.push_back(static_cast <unsigned char> (z));
    }
 
 
    f.close();
 
    vector <string> kod;
    vector <string> poluch_kod;
    string l, k;
 
    ofstream z("output.bin", /*ios::binary|*/ ios::out);
    z.close();
 
    for (int i=0; i<s.size(); i++)
        kod.push_back ( to_string (  dvoich (  s[i] ) ) ); // запись в переменную код даоичное представление кода
 
    for (int i=0; i<kod.size(); i++ )                // добавляю нули в началоЮ чтобы в каждой стороке было в 8 цифр
    {
        if (kod[i].size()!=8) 
        {
            int kolvo_dobavit=8-kod[i].size();
            string q="";
            for (int j=0; j<kolvo_dobavit; j++ )
                q.append("0");
            kod[i].insert(0,q);
        }
    }
 
    if ((kod.size ()%7!=0))                     //добавление нулей если не кратно 7
    { 
        int kolvo_dobavit= 7-(kod.size ()%7);
        for (int i=0; i<kolvo_dobavit; i++)
            kod.push_back("00000000");
    }
 
    while ( kod.size ()>0 )         // делаю преобразование по заданию
    {
        for (int i=0; i<7; i++)     // читаю по 7 элементов, записываю первые элементы в k, удаляю элементы 
        {
            string z="";
            z=kod[i];
            k.push_back(z[0]);
            kod[i].erase (0,1);
        }
 
        for (int j=0; j<7; j++)           // добавляю в полученный код первые 7 строчек без первого элемента
            poluch_kod.push_back(kod[j]);
 
        poluch_kod.push_back(k);        // добавляю 8 строкой строку к из первых символов 7 строк       
 
        kod.erase (kod.begin(),kod.begin()+7); // удаляю первые 7 элементов 
 
        k="";                                // очищаю к
 
        for (int y=0; y<8; y++)      // вывожу полученный вектор
        {
            ofstream q ("output.bin", /*ios::binary|*/ ios::out | ios::app);
            q<<static_cast <unsigned char> (decyatich ( poluch_kod[y]));
            q.close();
        }
 
        poluch_kod.clear();           //очищаю полученный вектор
    }
 
 
    return 0;
}
 
int dvoich(int x1)   
{ 
    if (x1<0) x1=-x1;
 
    int i, b;  
    long c = 0;  
    for(i=0; x1 > 0; i++)  
    {
        b = x1 % 2;  
        x1 = (x1-b)/2;
        c += b * pow(10,i);
    }
    return c; }
 
int decyatich (string chislo)
{
    int lentxt=chislo.size();
    int k=0;
    double s=0;
    for (int i=lentxt-1; i>=0; i--)        //умножаем коэфициенты и выводим ответ
    {
        if (chislo[i]=='1')
            s=(int) s+pow(2.0,k);
        k++;
    }
    return s;
}


Рашифрование
Кликните здесь для просмотра всего текста
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <stdlib.h>
#include <fstream>
 
using namespace std;
 
int dvoich (int chislo);
int decyatich (string chislo);
 
 
int main()
{
    setlocale(0,"");
    vector<int> s;
 
    ifstream f("output.bin", /*ios::binary|*/  ios::out);
    while(!f.eof())
    {
        char z; 
        f.get(z);
        if (f.eof()) break;
        s.push_back(static_cast <unsigned char> (z));
    }
 
    f.close();
 
    vector <string> kod;
    vector <string> poluch_kod;
    string l, k;
 
    ofstream z("output1.bin", /*ios::binary|*/  ios::out);
    z.close();
 
    for (int i=0; i<s.size(); i++)
        kod.push_back ( to_string (  dvoich (  s[i] ) ) ); // запись в переменную код даоичное представление кода
 
    for (int i=0; i<kod.size(); i++ )                // добавляю нули в началоЮ чтобы в каждой стороке было по 7 цифр
    {
        if (kod[i].size()!=7) 
        {
            int kolvo_dobavit=7-kod[i].size();
            string q="";
            for (int j=0; j<kolvo_dobavit; j++ )
                q.append("0");
            kod[i].insert(0,q);
        }
    }
 
    while ( kod.size ()!=0 )         // делаю обратное преобразование по заданию
    {
        string z="";                   // беру 8 строк. из них беру последнюю и вставляю первые цифры на первое место в 7 строках
        z=kod[7];
 
        for (int e=0; e<7; e++)     
        {
            char z1=z[e];
            kod[e].insert(0, to_string (z1));
        }
 
        for (int f=0; f<7; f++)
        {
            ofstream q ("output1.bin", /*ios::binary|*/ ios::out | ios::app);
            if (static_cast <unsigned char> (decyatich ( kod[f])))
                q<<static_cast <unsigned char> (decyatich ( kod[f]));
            q.close();
        }
        // вывожу в файл полученный код
 
        kod.erase (kod.begin(),kod.begin()+8);   // удаляю первые 8 элементов 
    }
    return 0;
}
 
int dvoich(int x1)   
{ 
    if (x1<0) x1=-x1;
 
    int i, b;  
    long c = 0;  
    for(i=0; x1 > 0; i++)  
    {
        b = x1 % 2;  
        x1 = (x1-b)/2;
        c += b * pow(10,i);
    }
    return c; }
 
int decyatich (string chislo)
{
    int lentxt=chislo.size();
    int k=0;
    double s=0;
    for (int i=lentxt-1; i>=0; i--)        //умножаем коэфициенты и выводим ответ
    {
        if (chislo[i]=='1')
            s=(int) s+pow(2.0,k);
        k++;
    }
    return s;
}


Пример работы 1:
Кликните здесь для просмотра всего текста

input.bin
Bjarne Stroustrup, a Danish and British trained computer scientist, began his work on C++'s predecessor "C with Classes" in 1979.[7] The motivation for creating a new language originated from Stroustrup's experience in programming for his Ph.D. thesis. Stroustrup found that Simula had features that were very helpful for large software development, but the language was too slow for practical use, while BCPL was fast but too low-level to be suitable for large software development. When Stroustrup started working in AT&T Bell Labs, he had the problem of analyzing the UNIX kernel with respect to distributed computing. Remembering his Ph.D. experience, Stroustrup set out to enhance the C language with Simula-like features.[9] C was chosen because it was general-purpose, fast, portable and widely used. Besides C and Simula's influences, other languages also influenced C++, for example, ALGOL 68, Ada, CLU and ML. At first, the class, derived class, strong typing, inlining, and default argument features were added to C via Stroustrup's "C with Classes" to C compiler, Cpre.[10]

output.bin
Bjarne Stroust rup, a Danish and Bri tish tr ained c omputer scient ist, be gan his work o n C++'s predec essor " C with Classes " in 19 79.[7] The mot ivation for cr eating a new l anguage origin ated fr om Stro ustrup' s exper ience i n progr amming for his Ph.D. thesis. Strous trup fo und tha t Simul a had f eatures that w ere ver y helpf ul for large s oftware develo pment, but the langua ge was too slo w for p ractica l use, while B CPL was fast b ut too low-lev el to b e suita ble for large softwar e devel opment. When S troustr up star ted wor king in AT&T B ell Lab s, he h ad the problem of ana lyzing the UNI X kerne l with respect to dis tribute d compu ting. R emember ing his Ph.D. experie nce, St roustru p set o ut to e nhance the C l anguage with S imula-l ike fea tures.[ 9] C wa s chose n becau se it w as gene ral-pur pose, f ast, po rtable and wid ely use d. Besi des C a nd Simu la's in fluence s, othe r langu ages al so infl uenced C++, fo r examp le, ALG OL 68, Ada, CL U and M L. At f irst, t he clas s, deri ved cla ss, str ong typ ing, in lining, and de fault a rgument featur es were added to C vi a Strou strup's "C wit h Class es" to C compi ler, Cp re.[10]

output1.bin
Bjarne Stroustrup, a Danish and British trained computer scientist, began his work on C++'s predecessor "C with Classes" in 1979.[7] The motivation for creating a new language originated from Stroustrup's experience in programming for his Ph.D. thesis. Stroustrup found that Simula had features that were very helpful for large software development, but the language was too slow for practical use, while BCPL was fast but too low-level to be suitable for large software development. When Stroustrup started working in AT&T Bell Labs, he had the problem of analyzing the UNIX kernel with respect to distributed computing. Remembering his Ph.D. experience, Stroustrup set out to enhance the C language with Simula-like features.[9] C was chosen because it was general-purpose, fast, portable and widely used. Besides C and Simula's influences, other languages also influenced C++, for example, ALGOL 68, Ada, CLU and ML. At first, the class, derived class, strong typing, inlining, and default argument features were added to C via Stroustrup's "C with Classes" to C compiler, Cpre.[10]


Пример работы 2:
Кликните здесь для просмотра всего текста

input.bin
Привет, мир!

output.bin
Ophber,~ lhp! 8

output1.bin
Ophber, lhp!
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru