Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] ШИФРОВАНИЕ ОБРАТНОЙ ПЕРЕСТАНОВКОЙ БИТОВ 
V
    Опции темы
vipclient
Дата 13.1.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.1.2009

Репутация: нет
Всего: нет



вот сама задача
Задача 1.18.  "ШИФРОВАНИЕ ОБРАТНОЙ ПЕРЕСТАНОВКОЙ  БИТОВ". Вводится  последовательность   строк   символов   не  длиннее  46 символов.  Допустимые символы в строке - латинские буквы, цифры, знаки  препинания  и  пробел.  Окончание  входного потока - ввод строки,  начинающейся с  символа  "?".  Максимальное  количество строк  равно  7.  Шифрование состоит в том,  что в двоичном коде каждого символа (байте) биты переставляются в обратном  порядке, а  затем  бит  7  устанавливается в 0/1 при не/четном количестве 1-битов  в   байте,   формируя   код   зашифрованного   символа. Формируется   также  статистическая  информация.  Примерный  вид выходной информации:
Входной текст:
        (последовательность входных строк)
  Введено К строк, всего N символов,
     минимальная  длина строки М1 символов.
     максимальная длина строки М2 символов.
Получен шифрованный текст:
        (последовательность обработанных строк


ну вот допустим я все строки записал в масивы,а каждый элемент этого массива это символ.
вопрос:что делать дальше?как выдрать из него биты поменять их местами,а затем запихнуть обратно? можете код набросать или сказать алгоритм

Добавлено через 8 минут и 47 секунд
язык программы просто СИ
PM MAIL   Вверх
JackYF
Дата 13.1.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
airyashov
Дата 14.1.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 1
Всего: 6



есть волшебные операции << >> && ||



--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
vipclient
Дата 14.1.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.1.2009

Репутация: нет
Всего: нет



про << >> && || я знаю,но кто бы мог помочь составить алгоритм переварачивания битов???????
PM MAIL   Вверх
solverr
Дата 15.1.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 31.12.2008

Репутация: 1
Всего: 1



проверка того, что в x установлен i-й бит: if (x&(1<<i)) { ... }
установка i-го бита: x |= 1<<i;
сброс i-го бита: x &= ~(1<<i);
PM MAIL   Вверх
vipclient
Дата 31.1.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.1.2009

Репутация: нет
Всего: нет



всё,вот какойкод я написал
#include <STDIO.H>
#include<CONIO.H>
#include <STRING.H>
void Title ( void );
void refer( void );
void OutRez( void );
void GetStrings( void ) ;
int YesNo( char *query );
void Finish( void );

/* числовые костынты */
#define MAXLINE /*Максимальное количество строк*/
#define MAXSIM /*Максимальное количество символов в строке*/

/* строки константы */
char *NAME    = "Шифрование строк";
char *START    = "\nВходной текст : ";
char *NUMBERS    = "минимальна  длина строки  = %d символов, максимальна длина строки  = %d бсимволов";
char *FINAL    = "Работа закончена!";
char *QUERY    = "Повторить?";
char *OUTMSG    = "Введено = %d строк, вего символов = %d";
char *OUTMSG2   = "Получен шифрованный текст : ";
/* Глобальные переменные*/
int i,                /*щётчик для символов*/
k,                /*щётчик для строк*/
j,                /*щётчик обрабатываемых строк строк */
p,                /*максимальное количество символов в строке*/
kolvo[6],            /*Массив для значений длин строк */
count,                /*Показатель чётности */
Lenth,                /*Длина текущей строки */
m,                /*количество введённых строк */
min ;                /*минимальное количество символов в строке */
char bits[64][64];        /*массив дл хранени зашифрованных строк */
char V[64][64];            /*массив дл хранени всех введённых строк */
char Strin[64];            /*массив дл хранени текущей вводимой строки */

void main( void )
{
    do
    {
        Title();
        GetStrings();
        refer();
        OutRez();

    }
    while ( YesNo( QUERY ) );
    Finish();
}

void Title( void )
/*****
Вход:        Нет.
Действие:    С новой строки выводит строку NAME.
Выход:        Нет.
*****/

{
    clrscr();
    printf( "\n%s",NAME );
}

void GetStrings( void )

/*****
Вход:        Нет.
Действие:    получени входного текста от пользовател.
Выход:        нет.
*****/

{
        printf(START);
        k = 0 ;
        while( k < MAXLINE - 1 || Strin[0] != '?' )
            {
                m = k ;
                printf( "\n");
                scanf("%s",Strin);

                kolvo[k] = Lenth ;
                    if ( p < Lenth )  { p = Lenth ; }
                    min = Lenth ;
                    if ( min > Lenth && Strin[0] != '?' ) { min = Lenth ; }
                if (Strin[0]=='?')
                    {
                        Lenth = 64 ;
                        m = k ;
                        k = 8 ;
                    }
                for (i = 0 ; i < Lenth ; i++)
                    {
                        V[k][i] = Strin[i] ;
                    }

            k = k++ ;



            }
}

void refer ( void )
/*****
Вход:        Нет.
Действие:    Шифрование полученного текста.
Выход:        Нет.
*****/
{
fflush(stdin);
k = 0 ;
for (k = 0 ; k < 7 ;k++)
    {
        for (j = 0 ; j < kolvo[i] ; j++ )
            {
                bits[k][j] = V[k][j] & 0177 ;

                bits[k][j] = ((bits[k][j] & 0x0F) << 4) | ((bits[k][j] & 0xF0) >> 4);
                bits[k][j] = ((bits[k][j] & 0x33) << 2) | ((bits[k][j] & 0xcc) >> 2);
                bits[k][j] = ((bits[k][j] & 0x55) << 1) | ((bits[k][j] & 0xaa) >> 1);

                count = 0;
                for (i = 1; i <= 16; i++)
                    {if ( ((bits[k][j] >> i) & 0x1) == 0x1) {count = count ^ 0x1;}}
                if ( count == 1 ) ( bits[k][j] = bits[k][j] | 1 );
                    else
                        if ((bits[k][j] | 1) == bits[k][j])
                            ;
                                else
                                    bits[k][j] =( bits[k][j] + 1) ;

            }
    }
}



void OutRez (void)
/*****
Вход:        Нет.
Действие:    Вывод статистической информации,вывод зашифрованого текста.
Выход:        Нет.
*****/
{
for ( i = 0 ; i < m ; i++ )
    {
        kolvo[0] = kolvo[0] + kolvo[i+1];
    }
printf("\n");
printf(OUTMSG,m,kolvo[0] - 1);
printf("\n");
printf(NUMBERS,min,p);
printf("\n");
printf(OUTMSG2);
for ( k = 0 ; k < m ; k++)
        {
            kolvo[i] = 0 ;
            printf("\n");
            for ( i = 0 ; i < p ; i++ )
                {
                    printf("%c",bits[k][i] ) ;
                }
        }


}
int YesNo(char *msg)
/*****
Вход:        Текст запроса типа "Да/Нет".
Действие:    С новой строки выводит текст запроса на экран, добавляет "[Y/N]"
            и ожидает реакции пользователя.
Выход:        Возвращает 1 при нажатии клавиши 'y' или 'Y', иначе 0.
*****/
{
int c ;
    printf("\n%s[Y/n]",msg);
    fflush( stdin );
    c = getchar();
    if ( (c== 'y') || (c== 'Y') )
        return 1;
    else
    return 0;
}

void Finish ( void )

/*****
Вход:        Нет.
Действие:    С новой строки выводится строка FINAL.
Выход:        Нет.
*****/

{
    printf("%s",FINAL);
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.