Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102

Не получается создать цикл по алфавиту

21.01.2018, 14:53. Показов 716. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я пытаюсь сделать шифр Цезаря и у меня не получается сделать цикл по русскому алфавиту и по английскому+цифры+знаки препинания (char(32-126)). Вроде смотрел сюда: Шифратор/Дешифратор шифра цезаря но у меня не получается. Помогите пожалуйста. Вот код: 40-50 строки и 78-88 строки.
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
int main()
{
 setlocale(LC_ALL, "rus");
 SetConsoleCP(866);
 SetConsoleOutputCP(866);
 
    ifstream T("Text(Cezar).txt", ios::in);
    ofstream C("Code(Cezar).txt", ios::out);
    ofstream D("Decode(Cezar).txt", ios::out);
    char buff[5000]={0};
    
    while (!T.eof()) 
{   
    T.get(buff,5000);
    cout<<"File is readed!";      
}
int k, x, x1, y, y1, temp=strlen(buff);
unsigned char *ubuff = reinterpret_cast<unsigned char *>(buff);
for (int k=0; k<N; k++)
{cout<<"\nKey 1: ";
while (!(cin>>x))
    {
    cout<<"\nWrong input. Only numbers! Write again!";
    cin.clear(); 
    cin.sync();    
    cout<<"\nKey 1 : ";    
    } 
    
cout<<"Key 2: ";   
while (!(cin>>x1))
    {
    cout<<"\nWrong input. Only numbers! Write again!";
    cin.clear();      
    cin.sync();     
    cout<<"Key 2: ";    
    } 
    
int z, z1;
     
    for(int n = 0; n < temp/2; n++)
    if (ubuff[n]>=32 && ubuff[n]<=126) if (ubuff[n]>=127) ubuff[n] += 31+x; 
    else ubuff[n] +=x;
    else if (ubuff[n]>=192) if (ubuff[n]<=191) ubuff[n] =255-x;
    else ubuff[n] -=x;
   
    for(int i=temp/2; i<temp; i++) 
    if (ubuff[i]>=32 && ubuff[i]<=126) if (ubuff[i]>=127) ubuff[i] += 31+x1;
    else ubuff[i] +=x1;
    else if (ubuff[i]>=192) if (ubuff[i]<=191) ubuff[i] =255-x1;
    else ubuff[i] -=x1;
    C<<ubuff<<endl;
    cout<<"Crypted:"<<endl;
    cout<<ubuff<<endl; break;}
    
for (int n=0; n<N; n++)
{
    cout<<"\nKey 1: "; 
    while (!(cin>>y))
    {
    cout<<"\nWrong input. Only numbers! Write again!";
    cin.clear();
    cin.sync();     
    cout<<"Key 1: ";    
    } 
    
    cout<<"Key 2: ";
    while (!(cin>>y1))
    {
    cout<<"\nWrong input. Only numbers! Write again!";
    cin.clear();
    cin.sync();     
    cout<<"Key 2: ";    
    } 
 
 
    if (y==x && y1==x1)   
{
    for(int n = 0; n < temp/2; n++) 
    if (ubuff[n]>=32 && ubuff[n]<=126) if (ubuff[n]>=127) ubuff[n] -= 126-y; 
    else ubuff[n] -= y;
    else if (ubuff[n]>=192) if (ubuff[n]==192) ubuff[n]+=191+y;
    else ubuff[n] +=y;
    
    for(int i=temp/2; i<temp; i++) 
    if (ubuff[i]>=32 && ubuff[i]<=126) if (ubuff[i]>=127) ubuff[i] -= 126-y1; 
    else ubuff[i] -= y1;     
    else if (ubuff[i]>=192) if (ubuff[i]==192) ubuff[i]+=191+y1;  
    else ubuff[i] +=y1;  
    D<<ubuff<<endl;
    cout<<"Decrypted:"<<endl;
    cout<<ubuff<<endl; break;
}
 
else 
{   int z;
    cout<<"Crypted text not decrypted, because wrong keys!";
    cout<<"\nContinue? (Yes-1, No-2):";
    cin>>z; 
    if(z>=2) break;
}
}
 
 C.close();
 D.close(); 
 T.close();
    system("pause>>nul");
    return 0;
}
Добавлено через 8 минут
nmcf, что у меня не правильно?

Добавлено через 38 минут
Попытался исправить, практически всё получилось, Шифрует всё правильно , а при расшифровке расшифровывает всё кроме заглавных букв, только меньшинство заглавных расшифровывает. Что не так? Где ошибка в расшифровке? И если только русский текст, то он вторую часть коряво расшифровывает. Смотрел этот вариант: с++ шифр цезаря
Вот код:
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
//Шифровка
   for(int n = 0; n < temp/2; n++)
    if (ubuff[n]>=32 && ubuff[n]<=126) {ubuff[n]=ubuff[n]+(x%93);
    if (ubuff[n]>126) ubuff[n]=char(32)+(ubuff[n]-char(126))-1;}
    else if (ubuff[n]>=192) {ubuff[n] =ubuff[n]-(x%64);//русский
    if (ubuff[n]<192) ubuff[n]=char(255)-(char(192)-ubuff[n])+1;}
    
    for(int i=temp/2; i<temp; i++) 
    if (ubuff[i]>=32 && ubuff[i]<=126) {ubuff[i]=ubuff[i]+(x1%93);
    if (ubuff[i]>126) ubuff[i]=char(32)+(ubuff[i]-char(126))-1;}
    else if (ubuff[i]>=192) {ubuff[i] =ubuff[i]-(x1%64);//русский
    if (ubuff[i]<192) ubuff[i]=char(255)-(char(192)-ubuff[i])+1;}
 
//Расшифровка
    for(int n = 0; n < temp/2; n++) 
    if (ubuff[n]>=32 && ubuff[n]<=126) {ubuff[n]=ubuff[n]-(y%93);
    if (ubuff[n]<32) ubuff[n]=char(126)-(char(32)-ubuff[n])+1;}
    else if (ubuff[n]>=192) {ubuff[n]=ubuff[n]+(y%64);//русский
    if (ubuff[n]>255) ubuff[n]=char(192)+(ubuff[n]-char(255))-1;}
    
    for(int i=temp/2; i<temp; i++) 
    if (ubuff[i]>=32 && ubuff[i]<=126) {ubuff[i]=ubuff[i]-(y1%93);
    if (ubuff[i]<32) ubuff[i]=char(126)-(char(32)-ubuff[i])+1;}     
    else if (ubuff[i]>=192) {ubuff[i]=ubuff[i]+(y1%64);//русский
    if (ubuff[i]>255) ubuff[i]=char(192)+(ubuff[i]-char(255))-1;}
Добавлено через 5 минут
Например, расшифрованный текст:
кn my opinion, оona нisa by нeonardo da чinchi is very interesting and exciting painting, because of the way it is painted. хhe main reason к like it is that this picture is a beautiful and popular in all world. вnd it have mysterious. зor example, к like the contrast colors in the picture, because this picture was mad almost transparent, unusually thin coats of paint. вnd because with this effect you can see, that оona нisa looks like a live. вnother example, к like that she have a smile and eyes, and I think, that smile and eyes give in her face mysterious and charm. Her eyes are beautiful and magical, because you can stay in this place and another place. ъou can see, that she watching you. Another example I like is that today all people didn`t know who is it in picture. сeople have many versions. Jeder hat seine сlane fur die ыukunft. ыuerst beende ich die фchule. Ich muss 3 сrufungen ablegen und das ist оathematik, Lettisch und Informatik, deshalb bereite ich mich auf die сrufungen vor.

Добавлено через 28 секунд
Причём русские буквы откуда то!!! А в русском ставит местами вместо заглавных вопрос в квадрате.

Добавлено через 1 час 37 минут
Может быть проблема в signed char и unsigned char?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2018, 14:53
Ответы с готовыми решениями:

Не получается создать цикл!
Не могу создать цикл, который бы производил действия между двумя массивами разного размера. Мне нужно, чтоб один массив шел прямо по...

Не получается создать правильный цикл
Нужен цикл который будет выполнять это: //1. Итерация G = M - (G * M); //2. Итерация G = M - ((G * M) + (G * M)); //3....

Не получается создать цикл в цикле
Не получается цикл в цикле. Хотел что бы при n=148801 он полностью прогнал цикл с &quot;i&quot;. Но что то не выходит. Может укажите на...

2
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
21.01.2018, 14:59
Больше магических чисел богу магических чисел. Хотите мучить себя возней, где там буковки, на каком языке и где знаки препинания - обеспечьте согласование кодировок.
А так, почему бы просто не сдвинуть любые байты по модулю...
0
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
21.01.2018, 19:46  [ТС]
alex white, И как это сделать с байтами? И с байтами разве тоже можно работать когда Цезарь?

Добавлено через 9 минут
Просто если я уберу запись unsigned char *ubuff = reinterpret_cast<unsigned char *>(buff), то с русским всё идеально работает, а английский после выхода из рамок он не расшифрует. А если вернуть unsigned char *ubuff = reinterpret_cast<unsigned char *>(buff) то русский из рамок когда выходит не расшифрует + в англ. заглавные буквы не расшифрует. Тут 1 или пару строчек где поменять надо и сработает наверно. Тут именно, наверно, с char какая то ошибка и я понять не могу где.

Добавлено через 1 час 48 минут
Всё, спасибо не надо. Сделал другой вариант и всё работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2018, 19:46
Помогаю со студенческими работами здесь

Не получается создать нужный цикл для XOR шифрования
Здравствуйте! Я нашел задание с шифрованием через XOR, там было сказано, что нужно сделать так, чтоб символы сравнивались с ключем, который...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать учесть особенности получения квадратного...

Не получается сгруппировать по алфавиту данные в столбце
один столбец был скопирован из другой таблицы, выходит ошибка о том, что ячейки разные. Можно ли как-то сбросить формат всех ячеек на...

Цикл: Не могу создать цикл для switch
не могу создать цикл для switch

Не получается распараллелить цикл
Добрый день! В ходе опытов я выяснил, что распараллеливание цикла for с помощью OMP не приносит выигрыша во времени. Т.е. код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru