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

Программа шифрования и дешифрования. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ консольное приложение C++ http://www.cyberforum.ru/cpp-beginners/thread404341.html
Нажимаю создать Win32 console application, пишет - переход на веб страницу отменен,что это может быть?
C++ Ошибка в нахождении точек пересечения #include <cstdlib> #include <iostream> #include <math.h> using namespace std; int main(int argc, char *argv) { int a,b,a1,b1,a2,b2,x,y,x1,x2,y1,y2; float D; http://www.cyberforum.ru/cpp-beginners/thread404332.html
C++ Найти максимальный элемент в каждом столбце матрицы
Ребята помогите мне с решением Дана матрица целых чисел МxN элементов . Найти максимальный элемент в каждом столбце матрицы. Я новичок самоучка помогите как ее решить в С++.
Поиск символа A в слове В C++
пытаюсь написать программу для нахождения количества символов В в слове А. написал вот этот код, но он постоянно зависает. подскажите в чем ошибка, пожалуйста :) #include <iostream.h> #include <stdio.h> void main() {int i=0,j=0,n=1,m; char str,b; cout <<"Vvod stroki A\n";
C++ WinAPI Не удается правильно синхронизировать потоки, критическая секция http://www.cyberforum.ru/cpp-beginners/thread404316.html
доброго времени суток. необходимо синхронизировать n = 2,4,8,16 потоков чтения записи (используется проекция файла) загвоздка в том, что иногда 1-3 процесса из 4х (пока пробую n = 4) завершаются с кодом -1073741749 (0xc000004b) или выскакивает необработанное исключение вообще не знаю, можно ли в функцию потока помещать помещать работу с критической секцией подобным образом буду благодарна за...
C++ Как переделать двусвязный список в циклический c++ Как переделать двусвязный список в циклический c++ подробнее

Показать сообщение отдельно
Cofeee
Сообщений: n/a

Программа шифрования и дешифрования. - C++

11.12.2011, 15:39. Просмотров 1166. Ответов 0
Метки (Все метки)

Пытаюсь реализовать что-то на подобие шифра Цезаря. Программа должна открывать файл, считывать поэлементно его содержимое и если будет находить соотв. элемент - сдвигать его и записывать в новый файл, а если соотв. эл. не найдет то запис. не изменённым. Проблема в том что, когда начинаю сравнивать исходный файл и дешифрованый - обнаруживаю, что файлы не идентичны. А именно один элемент неправильно дешифрован. Подскажите в чем проблема пожалуйста!
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <string>
using namespace std;
 
char Shifr(char* ABC, char c, int n, int len) // --------------------- ф-я Шифрования
{
    for(int i = 0; i < len; i++)
    {
        if(ABC[i] == c)
        {
            int q = i + n;
            if ( q  >= len)
            {
                return ABC[q - len];
            }
            else
                return ABC[q];
            
        }
    }
    return c;
}
 
char Deshifr(char* ABC, char c, int n, int len) //------------------- ф-я Дешифрования
{
    for(int i = 0; i < len; i++)
    {
        if(ABC[i] == c)
        {
            int q = i - n;
            if (q < 0)
            {
                return ABC[len + q];
            }
            else
                return ABC[i - n];
             
        }
    }
    return c;
}
 
 
int main() // - - - - - - - - - - - - - - - - - - - - - - - - - - - -  main()
     
{
    setlocale(LC_ALL,"russian");
    
    char text[126];
    char x[100];
    int n,num;
    
    FILE *alf , *ish , *sh , *d_sh;
 
      alf = fopen ( "Alfavit.txt", "rb" )
      int q = 0;
 
      while ( !feof (alf))
      {
            fread ( &text[q] ,1 ,1 ,alf);
            q++;
      }
 
      fclose (alf);
 
    cout << "Введите размер сдвига:";
    cin>> n;
    cout << endl;
 
    int i = 0;
    ish = fopen ( "смайл1.wav" , "rb" );
    sh = fopen ( "Shifr.oop" , "wb" );
    int b;
      while ((b =  fgetc (ish))!=EOF)
      {
          b = Shifr(text,b,n,126);//------ Вызов функции Шифрования
          fputc(b, sh);
          i++;
      }
          
      int  p = i;
      cout << endl << p << endl;
 
      fclose(ish);
      fclose (sh);
 
      cout <<"Файл зашифрован !"<<endl<<endl;
 
    do {
    cout <<"1.Выйти"<<endl;
    cout <<"2.Дешифровать"<<endl;
    cout <<"Ваш выбор:";
 
    cin >> num;
    switch (num)
    {
    case 1:
        break;
    case 2:
        {
            int i = 0;
            cout <<"Файл дешифрован !"<<endl;
            sh = fopen ( "Shifr.oop" , "rb" );
            d_sh = fopen ( "DeShifr.wav" , "wb" );
            int v;
            while ( (v = fgetc(sh))!=EOF)
            
                {
                    v = Deshifr(text,v,n,126);//------ Вызов функции Дешифрования
                    fputc(v, d_sh);
                    i++;
                }
 
            int  j = i ;
            cout << endl << j << endl;
            fclose(sh);
            fclose (d_sh);
            break;
        }
 
        
    } cout<<endl;
        
    }
    while ( num != 1);
     
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru