Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

#include <stdlib.h>
#include <stdio.h>
#define ARRLEN 11
#if !(ARRLEN & 1)
 #error "Array size must be odd!"
#endif
//////////////////////////////////////////////////
void decode(char* cipher, char* plain)
{
    int i, j, x, y;
    char buf[ARRLEN][ARRLEN];
 
    y = x = ARRLEN >> 1;
    for(j = 1; ; ++j)
    {
        for(i = 0; i < j; ++i)
        {
            buf[y][x] = *cipher++;
            if(j & 1)
                ++x;
            else
                --x;
        }
 
        if(j >= ARRLEN)
            break;
 
        for(i = 0; i < j; ++i)
        {
            buf[y][x] = *cipher++;
            if(j & 1)
                ++y;
            else
                --y;
        }
    }
 
    memcpy(plain, buf, sizeof(buf));
}
 
//////////////////////////////////////////////////
void encode(char* plain, char* cipher)
{
    int i, j, x, y;
    char buf[ARRLEN][ARRLEN];
 
    memcpy(buf, plain, sizeof(buf));
     
    y = x = ARRLEN >> 1;
    for(j = 1; ; ++j)
    {
        for(i = 0; i < j; ++i)
        {
            *cipher++ = buf[y][x];
            if(j & 1)
                ++x;
            else
                --x;
        }
 
        if(j >= ARRLEN)
            break;
 
        for(i = 0; i < j; ++i)
        {
            *cipher++ = buf[y][x];
            if(j & 1)
                ++y;
            else
                --y;
        }
    }
}
 
char str[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
             "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw";
//////////////////////////////////////////////////
main()
{
    int i, j;
    char buf[ARRLEN * ARRLEN], buf2[ARRLEN * ARRLEN + 1];
 
    decode(str, buf);
    for(j = 0; j < ARRLEN; ++j)
    {
        for(i = 0; i < ARRLEN; ++i)
            printf("%c ", buf[j * ARRLEN + i]);
        puts("");
    }
    puts("");
 
    puts(str);
     
    encode(str, buf);
     
    for(i = 0; i < ARRLEN * ARRLEN; ++i)
        printf("%c", buf[i]);
    puts("");
     
    decode(buf, buf2);
 
    for(i = 0; i < ARRLEN * ARRLEN; ++i)
        printf("%c", buf2[i]);
    puts("");
    getchar();
}

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 18:59 19-06-2013 | Исправлено: ne_viens, 08:54 21-06-2013
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru