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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
MonteC
1 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 23
#1

С++ Код Цезаря(программа выводит не то что нужно) - C++

11.10.2011, 17:15. Просмотров 1479. Ответов 12
Метки нет (Все метки)

Пытался реализовать код цезаря на С++
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
#include <iostream>
 
using namespace std;
 
const char alphavit[]={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
 
 int main()
 {
    char x[100];
    cout << "Vvedite ishodnoe soobchenie: ";
    gets(x);
    cout << "Ishodnoe soobchenie: " << x <<'\n';
    int m=25;
    int n=1;
    int k=3, B;
 
 
  
 
    for (int i=0; i<99; i++)
        for(int j=0; j<25; j++)
 
    {
        if(x[i] == alphavit[j])
        {
            B = (i*n+k)% m;
            
 
            cout << alphavit[B];
        }
    } 
 
    return 0;
 }
При вводе латинской буквы "A" программа должна выводит "D", но вместо этого он выводит D и еще лишние буквы WSWV, в чем может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2011, 17:15     С++ Код Цезаря(программа выводит не то что нужно)
Посмотрите здесь:
C++ парни нужно кое-что добавить (нужно что бы эта программа вычисляла среднее арифметическое чисел)
Написан код который выводит матрицу .Нужно протранспонировать ее C++
Программа выводит что-то непонятное C++
C++ Выводит немного не то что надо ,как подправить код
Программа, что выводит среднее арифметическое последовательности дробных чисел, которые вводятся с клавиатуры C++
C++ Нужно написать код для программы, которая выводит на экран звездочки ("*") в таком порядке:
C++ Подскажите что не правильно чему оно не так выводит и по возможности исправьте ошибки вот условие и код программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
o-user
245 / 202 / 7
Регистрация: 03.02.2009
Сообщений: 788
11.10.2011, 17:43     С++ Код Цезаря(программа выводит не то что нужно) #2
1. Надо обрабатывать не все 100 символов, а только то количество, которое ввели.

2. B = (i*n+k)% m; - это неправильно
B зависит только от ASCII кода символа x[i], смещения m и длины алфавита m (m=26):

B=(x[i]-'A'+k)%m;
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
11.10.2011, 17:44     С++ Код Цезаря(программа выводит не то что нужно) #3
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
#include "stdafx.h"
#include "iostream"
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale(0,""); 
    int j;
    char str[256] = {0};
    char chr;
    std::cout << "Введите искомую строку!" << '\n';
    std::cin >> str;
 
    for (int i = 0; i < strlen(str); i++)
        {
          j = (int)str[i]; // узнаем числовое значение символа
          j += 3; // меняем это значение
          chr = (char)j; // узнаем, какой это символ получился
          std::cout << chr;
        }
    std::cout << '\n';
    system("pause >> NULL");
    return 0;
}
MonteC
1 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 23
11.10.2011, 18:04  [ТС]     С++ Код Цезаря(программа выводит не то что нужно) #4
Цитата Сообщение от o-user Посмотреть сообщение
1. Надо обрабатывать не все 100 символов, а только то количество, которое ввели.

2. B = (i*n+k)% m; - это неправильно
B зависит только от ASCII кода символа x[i], смещения m и длины алфавита m (m=26):

B=(x[i]-'A'+k)%m;
Все работает, а можно еще подробнее про строку B=(x[i]-'A'+k)%m; непонятно зачем отнимать 'A'
o-user
245 / 202 / 7
Регистрация: 03.02.2009
Сообщений: 788
11.10.2011, 18:12     С++ Код Цезаря(программа выводит не то что нужно) #5
Цитата Сообщение от Infinity3000 Посмотреть сообщение
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
#include "stdafx.h"
#include "iostream"
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale(0,""); 
    int j;
    char str[256] = {0};
    char chr;
    std::cout << "Введите искомую строку!" << '\n';
    std::cin >> str;
 
    for (int i = 0; i < strlen(str); i++)
        {
          j = (int)str[i]; // узнаем числовое значение символа
          j += 3; // меняем это значение
          chr = (char)j; // узнаем, какой это символ получился
          std::cout << chr;
        }
    std::cout << '\n';
    system("pause >> NULL");
    return 0;
}
Неправильно!
Что будет на выходе, если ввести последний символ алфавита Z ?
Надо закольцовывать значения символов!



Цитата Сообщение от MonteC Посмотреть сообщение
Все работает, а можно еще подробнее про строку B=(x[i]-'A'+k)%m; непонятно зачем отнимать 'A'

Надо получить НОМЕР следующего символа, а не компот из ASCII-кодов символов и номеров символов в алфавите!
Т.е. если не вычитать, то работаем со значениями 65..97, а если вычитаем, то со значениями 0..25.

Попробуйте посчитать с конкретными символами.
MonteC
1 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 23
11.10.2011, 18:43  [ТС]     С++ Код Цезаря(программа выводит не то что нужно) #6
Для всех букв работает кроме "Z" , ввожу Z и ничего не выводит.
o-user
245 / 202 / 7
Регистрация: 03.02.2009
Сообщений: 788
11.10.2011, 18:52     С++ Код Цезаря(программа выводит не то что нужно) #7
Цитата Сообщение от MonteC Посмотреть сообщение
Для всех букв работает кроме "Z" , ввожу Z и ничего не выводит.
Какой вариант программы?
А что выводит для A ?
А что выводит для Y ?
MonteC
1 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 23
11.10.2011, 18:55  [ТС]     С++ Код Цезаря(программа выводит не то что нужно) #8
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
#include <iostream>
 
using namespace std;
 
const char alphavit[]={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
 
 int main()
 {
    char x[100];
    cout << "Vvedite ishodnoe soobchenie: ";
    gets(x);
    cout << "Ishodnoe soobchenie: " << x <<'\n';
    int m=25;
    int n=1;
    int k=3, B;
 
 
  
 
    for (int i=0; x[i]; i++)
        for(int j=0; j<25; j++)
 
    {
        if(x[i] == alphavit[j])
        {
            B=(x[i]-'A'+k)%m;
            
 
            cout << alphavit[B];
        }
    } 
 
    return 0;
 }
Для A выводит D
Для Y выводит C
aeshes
439 / 202 / 13
Регистрация: 07.10.2011
Сообщений: 462
11.10.2011, 19:00     С++ Код Цезаря(программа выводит не то что нужно) #9
у вас размер алфавита - 26 символов,а не 25. Замените везде 25 на 26
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
11.10.2011, 19:06     С++ Код Цезаря(программа выводит не то что нужно) #10
до кучи: Помогите с Шифром Цезаря
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.10.2011, 19:53     С++ Код Цезаря(программа выводит не то что нужно) #11
Для каждого символа c зашифрование:
C
1
2
3
4
5
      if (isalpha(c))
         if (islower(c))
            c = (c - 'a' + 3)%26 + 'a';
         else
            c = (c - 'A' + 3)%26 + 'A';
При этом замечу, что Цезарь занимался не кодированием, а шифрованием, поэтому "шифр Цезаря" или тогда уж "кот Цезаря"
o-user
245 / 202 / 7
Регистрация: 03.02.2009
Сообщений: 788
11.10.2011, 22:48     С++ Код Цезаря(программа выводит не то что нужно) #12
Цитата Сообщение от MonteC Посмотреть сообщение
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
#include <iostream>
 
using namespace std;
 
const char alphavit[]={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
 
 int main()
 {
    char x[100];
    cout << "Vvedite ishodnoe soobchenie: ";
    gets(x);
    cout << "Ishodnoe soobchenie: " << x <<'\n';
    int m=25;
    int n=1;
    int k=3, B;
 
 
  
 
    for (int i=0; x[i]; i++)
        for(int j=0; j<25; j++)
 
    {
        if(x[i] == alphavit[j])
        {
            B=(x[i]-'A'+k)%m;
            
 
            cout << alphavit[B];
        }
    } 
 
    return 0;
 }
Для A выводит D
Для Y выводит C

Я же сразу написал, что m=26 !
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2013, 03:03     С++ Код Цезаря(программа выводит не то что нужно)
Еще ссылки по теме:
Код цезаря C++
C++ Код Цезаря на C++
Программа выдает не то,что нужно C++
Строки (Код Цезаря) C++
В приложении Dev C++ не компилируется код, что нужно изменить? C++

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

Или воспользуйтесь поиском по форуму:
Dakster
0 / 0 / 0
Регистрация: 23.04.2013
Сообщений: 75
25.11.2013, 03:03     С++ Код Цезаря(программа выводит не то что нужно) #13
можешь написать программу которая у тебя получилась? очень нужна..
Yandex
Объявления
25.11.2013, 03:03     С++ Код Цезаря(программа выводит не то что нужно)
Ответ Создать тему
Опции темы

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