Форум кафедры Техники и Электрофизики Высоких Напряжений
http://tvn-moscow.ru/forum/

Домашнее задание №1
http://tvn-moscow.ru/forum/viewtopic.php?f=70&t=3664
Страница 1 из 1

Автор:  dmatveev [ 06 окт 2017, 23:30 ]
Заголовок сообщения:  Домашнее задание №1

Напишите программу, кодирующую (или раскодирующую) заданную строку шифром Цезаря (смещение влево или вправо всех букв в алфавите на заданное число). Задачка вроде простенькая, но мы попробуем извлечь из нее много полезного.

Строку задайте латиницей, в кодировке ASCII. Не тратьте время на ввод строки из консоли, задайте строку прямо в коде программы:

char str[] = {"Your string shouldn't necessarily be too long"};
const int sz = sizeof(str);


Свое решение этой задачи я выложу здесь перед началом следующего занятия и объясню его в аудитории.

Удачи, и задавайте вопросы.

-------------------------------------------------------------

РЕШЕНИЕ


#include <iostream>
#include <iomanip>

using namespace std;

typedef unsigned char uchar;

uchar Shift(uchar s, char shift, uchar r1, uchar r2)
{
    uchar res = s + shift;
    if (res > r2)
        return res - r2 + r1 - 1;
    if (res < r1)
        return res + r2 - r1 + 1;
    return res;
}

uchar EncodeSymbol(uchar s, char shift)
{
    uchar r11{ 65 }, r12{ 90 }, r21{ 97 }, r22{ 122 };
    if (s >= r11 && s <= r12)
        return Shift(s, shift, r11, r12);
    if (s >= r21 && s <= r22)
        return Shift(s, shift, r21, r22);
    return s;
};

void main()
{
    uchar str[] = { "ABCD wxyz WXYZ abcd" };
    const int sz = sizeof(str);
    cout << "Initial string:\n\n";

    for (int i = 0; i < sz; i++)
        cout << str[i];
    char shift;
    bool OK = false;
    while (!OK)
    {
        cout << "\n\nInput the value of the shift for encoding: ";
        cin >> shift;
        if (shift > 26)
            cout << "Error: the shift should be less than 26.\n";
        else
            OK = true;
    }

    uchar str2[sz];

    for (int i = 0; i < sz; i++)
    {
        str2[i] = EncodeSymbol(str[i], shift);
        cout << str2[i];
    }
    cout << endl;
}

Автор:  dmatveev [ 06 окт 2017, 23:51 ]
Заголовок сообщения:  Re: Домашнее задание №1

А, ну и трек для решения этой задачи:

Папа может в Си

Автор:  dmatveev [ 11 окт 2017, 03:34 ]
Заголовок сообщения:  Re: Домашнее задание №1

Выложил решение для ДЗ №1. Щелкните в первом сообщении по кнопке "Цитата", чтобы понять, чего мне это стоило :-Ъ

Автор:  YakovlevKirill [ 12 окт 2017, 11:42 ]
Заголовок сообщения:  Re: Домашнее задание №1

Сурово, это все html теги? Даниил Анатольевич, как взять запись занятия? Подойти попросить в Д-3?

Автор:  dmatveev [ 13 окт 2017, 11:58 ]
Заголовок сообщения:  Re: Домашнее задание №1

YakovlevKirill писал(а):
Сурово, это все html теги?

Смесь html и bbcode.
YakovlevKirill писал(а):
Даниил Анатольевич, как взять запись занятия? Подойти попросить в Д-3?

Даша мне сообщила, что любезно трудится над этим =)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/