powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите закодить алгоритм
22 сообщений из 22, страница 1 из 1
Помогите закодить алгоритм
    #32813950
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано число, например, 149 Числа будут от 0 до 255
1)Преобразовать в двоичный вид (есть ли встроенная функция?) 149 = 10010101
2)Если разрядов меньше 8 - дополнить слева 0 (т.е. до байта)
3)Разделить байт по 4 бита. В нашем случае 1001 и 0101
4)Перевисти полученные 2 числа в десятичную форму, т.е. 1001 = 9 и 101 = 5
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32814046
roman11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
void Split(unsigned char iSrc, unsigned char& iHigh, unsigned char& iLow)
{
    iLow  = 0x0F & iSrc;
    iHigh = (0xF0 & iSrc) >>  4 ;
}
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32814091
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexFVДано число, например, 149 Числа будут от 0 до 255
1)Преобразовать в двоичный вид (есть ли встроенная функция?) 149 = 10010101
2)Если разрядов меньше 8 - дополнить слева 0 (т.е. до байта)
3)Разделить байт по 4 бита. В нашем случае 1001 и 0101
4)Перевисти полученные 2 числа в десятичную форму, т.е. 1001 = 9 и 101 = 5
А нельзя ли сделать проще - переводить, например, через 16-ричное представление?
Например, число 149:
1. Делим на 16 (149/16=9.3125).
2. Целая часть результата (9) = первое число
3. Остаток от деления (5) = второе число.
Или такая постановка дана в задаче?
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32814169
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как получилось:
Станислав С.3. Остаток от деления (5) = второе число.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32814260
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав C.А нельзя ли сделать проще - переводить, например, через 16-ричное представление?
Например, число 149:
1. Делим на 16 (149/16=9.3125).
2. Целая часть результата (9) = первое число
3. Остаток от деления (5) = второе число.
Или такая постановка дана в задаче?

Решение которое предлагает Роман - наиболее лаконичное. Хотя с точки зрения математики - не обобщающее т.к. не распространяется на другие системы счисления не кратные степени двойки. К тому-же среди программистов-системщиков считается хорошим тоном заменять операции целочисленного деления-умножения на операции логического сдвига/маскирования.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32814294
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
void Split(unsigned char iSrc, unsigned char& iHigh, unsigned char& iLow)
{
    iLow  = 0x0F & iSrc;
    iHigh = (0xF0 & iSrc) >>  4 ;
}

А можно подробно объяснить что происходит в этом коде? Что-то я недопогимаю.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32814401
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexFVА можно подробно объяснить что происходит в этом коде? Что-то я недопогимаю

Исходный байт (параметр iSrc) делится на две половинки по 4 бита, как вы сказали. Они кладутся в iLow и iHigh. Первую получаем, накладывая маску 0x0F, которая в двоичном представлении выглядит как 00001111, старшие четыер бита обнуляются, а младшие остаются.

Получение второй половины можно упростить:
iHigh = iSrc >> 4;

С помощью операции поразрядного сдвига вправо, старшие четыре бита перетягиваются на место младших четырех. Это равносильно делению на 16. Вот и все, в принципе.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32816947
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем.
А может кто-нибудь поможет как сделать обратное преобразование?, т.е.
1)Есть 2 числа, например 1 и 2 (числа от 1 до 10)
2)Надо перевести из в двоичное представление, 1 - 00000001 ; 2 - 00000010
3)Откинуть старшие 4 разряда 1 - 0001 ; 2 - 0010
4)Получить из них байт: 0001 и 0010 -> 00010010
5)Перевести в десятичную форму 00010010 -> 18
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32816960
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
unsigned char iByte, iLow, iHigh;

iLow =  1 ;
iHigh =  2 ;

iByte = iLow + (iHigh <<  4 );
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32817193
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего что-то у меня не получается в-общем, что задумано.
Изначально, без всяких алгоритмов задача - зашифровать короткий txt-файл.

Напрмер, есть файл Fin.txt содержит 2 строки по 2 символа - "ab"
Считываем файл fgetc() получаем для каждой строки a=97 и b=98 .

Далее у нас есть шифрованная таблица, в кот. a=1, b=2 ,
приводим в 2 представление по 4 бита а=0001 и b=0010 .
Далее делаем байт ab = 00010010 и приводим в 10 форму ab = 18

Полученное число 18*2 = 36
Записываем в Fout.txt символ с ANSI-кодом 36 -> $
Т.е. должно получиться 2 строки в каждой $.

Ну и сделать расшифровщик, чтобы два $ обратно превращались в "ab".

Может кто-нибудь подскажет как попроще это реализовать? Несколько дней бьюсь - ничего!
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32818011
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в "шифрованной" таблице что всего 16 соответствий ?
А если встретится символ, например, 'z', номером, допустим, 32 ?
Как 32 "запихать" в полбайта ?
Я думаю, сначала здесь надо разобраться...
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32818934
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex VCА в "шифрованной" таблице что всего 16 соответствий ? ?

Максимальных соответствий не может быть больше 14. Иначе такая задача и не стояла бы.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32818988
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
готов проявить полную тупость, но не понимаю, к чему это:
a=97 и b=98
и
шифрованная таблица
- это ключ?
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819018
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13 апостолготов проявить полную тупость, но не понимаю, к чему это:

a=97 и b=98

и

шифрованная таблица

a=97 и b=98 - возвращает fgetc()
Под "шифрованной" таблицей понимается таблица где этим 'a' и 'b' ставится в соответствии некоторые числа (от 1 до 14 т.к. сообщения построены таким образом что разных символов не может быть больше 14), для простоты я привел 1 и 2, но может быть 5 и 6 не в этом дело. Потом 'а' и 'b' (1 и 2) превращаем в байт 0001(1)0010(2).Потом этот байт переводим в десятичное число - 00010010=18. Умножаем на 2 18*2 = 36.
И в зашифрованный файл записываем символ с ANSI-кодом 36, т.е. '$'. Вот такая задача.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819181
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
теперь очередной вопрос: в чем проблема, если чтение/запись файла ты осуществляешь; алгоритм код/декод у тебя есть?
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819227
Guest?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я одно не понел
тебе кодировка нужна или уменшения обьема ?
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819255
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13 апостолтеперь очередной вопрос: в чем проблема, если чтение/запись файла ты осуществляешь; алгоритм код/декод у тебя есть?
Чтение-то без труда осуществляется, а вот с остальным проблема.
Вот я и прошу может кто-нибудь чиркнет код как перевести строку 'ab' в '$' по этому алгоритму.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819260
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest?я одно не понел
тебе кодировка нужна или уменшения обьема ?
В итоге должно получиться и то и то, т.е. сообщение зашифровалось и шифрованный файл уменьшился в объеме по сравнению с первоисточником.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819264
Guest?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тогда бери по отдельности и напиши алгоритм ;) потом обьединяй и все ..
(кодировка не проблема ;) у меня в архиватором были проблемы .. что хотел уже есть новое как то криво выходило ;))
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819318
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest?кодировка не проблема
А для меня почему-то проблема, да еще какая.
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819460
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а вот с остальным проблема
c чем именно? с кодированием? декодированием? записью в файл? можно же проверить, на чем прога вылетает.
шифрованный файл уменьшился в объеме по сравнению с первоисточником
гмм... а смысл в таком архивировании?
...
Рейтинг: 0 / 0
Помогите закодить алгоритм
    #32819816
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все спасибо всем, в особенности roman10 и roman11 (хотя я подозреваю, что это один и тот же человек).
Все заработало.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите закодить алгоритм
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]