Форум кафедры Техники и Электрофизики Высоких Напряжений

Онлайн-сообщество ТВНщиков
Гостям форума:

Добро пожаловать на форум по технике высоких напряжений!
Для получения доступа ко всем разделам необходимо зарегистрироваться


Текущее время: 24 окт 2017, 14:16

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Домашнее задание №1
СообщениеДобавлено: 06 окт 2017, 23:30 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4125
Откуда: Д-3
Напишите программу, кодирующую (или раскодирующую) заданную строку шифром Цезаря (смещение влево или вправо всех букв в алфавите на заданное число). Задачка вроде простенькая, но мы попробуем извлечь из нее много полезного.

Строку задайте латиницей, в кодировке 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;
}


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Домашнее задание №1
СообщениеДобавлено: 06 окт 2017, 23:51 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4125
Откуда: Д-3
А, ну и трек для решения этой задачи:

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Домашнее задание №1
СообщениеДобавлено: 11 окт 2017, 03:34 
Не в сети
Site Admin

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Домашнее задание №1
СообщениеДобавлено: 12 окт 2017, 11:42 
Не в сети

Зарегистрирован: 13 фев 2017, 21:35
Сообщения: 5
Сурово, это все html теги? Даниил Анатольевич, как взять запись занятия? Подойти попросить в Д-3?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Домашнее задание №1
СообщениеДобавлено: 13 окт 2017, 11:58 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4125
Откуда: Д-3
YakovlevKirill писал(а):
Сурово, это все html теги?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB