Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Кателевский ВН
0 / 0 / 1
Регистрация: 23.04.2014
Сообщений: 94

Не хватает опыта для того, чтобы понять ошибку в задаче циклического побитового сдвига

23.04.2014, 21:06. Показов 1573. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Помогите пожалуйста разобраться, почему вместо заданных мною, скажем 4 символов, после циклического сдвига он выдаёт в разы больше. Ошибка начинает появляться на третьем цикле for. Вот функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void lrotate(unsigned char ch[],int n)
    { unsigned int in[80];
        for(int j=0;ch[j] > 0;j++)
        {
            in[j]=ch[j];
 
        }
 
        for(int k=0;in[k];k++)
            {
                 cout << in[k] << endl;
                for(int i=0;i < n; i++)
                {
                    in[k] = in[k] << 1;
                    if(in[k] & 256)
                        in[k] = in[k] | 1;
                }
 
            }
        int l=0;
        while(in[l])
        {
            cout << in[l] <<" ";
            l++;
        }
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.04.2014, 21:06
Ответы с готовыми решениями:

Алгоритм для циклического сдвига слова на N символов влево
Дана строка, содержащая текст. Зашифровать текст, циклически Help

Напишите функции для циклического сдвига слова влево и вправо
Нужно использовать SHL и SHR для сдвига? Не очень понятно как определить в какой момент нужно прекращать сдвиги?

Написать программу для циклического сдвига списка на n-1 элементов влево
Здравствуйте, помогите написать программу на Lisp Написать программу для циклического сдвига списка на n-1 элементов влево (очень нужно)

12
Заблокирован
23.04.2014, 21:30
Это Г. код. Лучше скажи, для чего тебе нужен этот сдвиг и в каком узле своего софта ты его используешь?
0
 Аватар для Кателевский ВН
0 / 0 / 1
Регистрация: 23.04.2014
Сообщений: 94
24.04.2014, 09:48  [ТС]
На самом деле, Я решил задачу немного другим способом...Но мне не понятно, отчего(в этом варианте решения) вместо положенного количества чисел получается в массиве больше. Если конкретно, на вопрос ответить: то планировалась функция, для того, чтобы разобраться в элементарном шифровании по сдвигу и для этого и использовалась. Я не понимаю, откуда эти дополнительные элементы в массиве появляются? Вот во воложении Я поместил результат пробы этой кодировки:
Миниатюры
Не хватает опыта для того, чтобы понять ошибку в задаче циклического побитового сдвига  
0
 Аватар для Кателевский ВН
0 / 0 / 1
Регистрация: 23.04.2014
Сообщений: 94
24.04.2014, 09:59  [ТС]
Да! Newbie666 поясните что значит "Г. код" это качество моего кода))) или определение какое-то?
0
Заблокирован
24.04.2014, 10:53
Цитата Сообщение от Кателевский ВН Посмотреть сообщение
Да! Newbie666 поясните что значит "Г. код"
это гавно код , ты прав

Давай весь проект в архиве сюда, тогда гляну.
0
 Аватар для Кателевский ВН
0 / 0 / 1
Регистрация: 23.04.2014
Сообщений: 94
24.04.2014, 11:29  [ТС]
Вот ловите, не судите строго, Я пока ещё чайник)
Вложения
Тип файла: 7z kodirovka.7z (182.5 Кб, 5 просмотров)
0
 Аватар для Кателевский ВН
0 / 0 / 1
Регистрация: 23.04.2014
Сообщений: 94
24.04.2014, 11:32  [ТС]
Хотя нет, как можно строже, больше знать буду)))
0
Заблокирован
24.04.2014, 11:52
О.о.о какой же мусор в твоём исходнике, у меня ваще твоя так сказать программа вылетает с экзепшеном, даже разбираться не хочу в таком мусоре...
Ты скажи, что ты хочешь сделать? Закодировать строку какой то другой строкой? Зачем тебе какая - то мутохрень? Нельзя побайтово XOR-м байты закодить и потом также раскодить? Код в две строки будет.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
24.04.2014, 12:05
Цитата Сообщение от Кателевский ВН Посмотреть сообщение
while(in[l])
а что это за условие цикла? кто сказал что
а) в массиве не хранится нулей до последнего числа?
б) в массиве последнее число именно нуль?
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
24.04.2014, 14:59
Кателевский ВН, в смысл всего этого не вдавался, остается на твоей совести. Но вот вроде бы то, что должно быть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void lrotate(unsigned char ch[], int n)
{
    unsigned int in[80];
    size_t j;
    for(j = 0; ch[j]; ++j)
    {
        in[j] = static_cast<unsigned int>(ch[j]);
        for(int i = 0; i < n; ++i)
        {
            in[j] <<= 1;
            if(in[j] & 256)
            {
                in[j] |= 1;
            }
        }
    }
    for(size_t i = 0; i < j; ++i)
    {
        cout << in[i] << " ";
    }
}
0
 Аватар для Кателевский ВН
0 / 0 / 1
Регистрация: 23.04.2014
Сообщений: 94
25.04.2014, 09:42  [ТС]
Ты скажи, что ты хочешь сделать? Закодировать строку какой то другой строкой?
Там, в задании у Шилдта, вторая строка выполняет роль количества сдвигов, поэтому только её размер и нужен.
Зачем тебе какая - то мутохрень?
Это задание, Я его решил по своему, не так как в архиве который скинул. Но мне интересно откуда лишние данные берутся в этой попытке решения программы?
Нельзя побайтово XOR-м байты закодить и потом также раскодить? Код в две строки будет.
Я же говорил, Я начинающий...
а что это за условие цикла?
а) в массиве не хранится нулей до последнего числа?
б) в массиве последнее число именно нуль?
Это для того, чтобы выводить данные из заполненного массива пока 0 не обозначит завершение.
По условию задания нулей нет, кроме, как в конце строки.

Добавлено через 7 минут
DrOffset поясните пожалуйста это место "in[j] = static_cast<unsigned int>(ch[j]);", что-то мне подсказывает здесь проблема у меня и была. Почему именно такое приведение типов Вы использовали? Может быть лишние данные именно от того и появлялись у меня, из за неправильного приведения типов? Тогда почему они появляются?
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
25.04.2014, 13:32
Лучший ответ Сообщение было отмечено Кателевский ВН как решение

Решение

Цитата Сообщение от Кателевский ВН Посмотреть сообщение
поясните пожалуйста это место "in[j] = static_cast<unsigned int>(ch[j]);"
Это не играет роли. Вообще-то расширение char->int - это автоматическое преобразование (оно у тебя и было), но я посчитал, что в алгоритме присутствует определенная неочевидность, и обозначил явно намерение это сделать.
Цитата Сообщение от Кателевский ВН Посмотреть сообщение
что-то мне подсказывает здесь проблема у меня и была.
Нет. Проблема была из-за неправильного чтения массива in (последний цикл while). Массив не обязан заканчиваться нулем, поэтому условие срабатывало значительно большее количество раз, чем требовалось, выводя мусор из памяти. Ноль мог встретиться и позже, тогда мусорных "элементов" было бы еще больше. Я же просто немного сократил твой алгоритм, добавил некоторой четкости формулировок и убрал ошибку выведения данных массива in.

Добавлено через 2 минуты
Цитата Сообщение от Кателевский ВН Посмотреть сообщение
По условию задания нулей нет, кроме, как в конце строки.
В конце строки ноль есть. Но он в конце строки. А в конце массив in нет нуля, потому что его туда никто не пишет. Массив in - это уже не строка.

Добавлено через 6 минут
Цитата Сообщение от Кателевский ВН Посмотреть сообщение
Почему именно такое приведение типов Вы использовали?
Вообще, С++-касты задумывались в том числе и для того, чтобы внести определенную декларативность в исходный код. Чтобы было сразу видно, что тут происходит, чтобы, в том числе, можно было найти такой каст поиском по тексту.
В общем, чем четче обозначены намерения программиста в исходном коде, тем меньше ему придется писать комментариев (они, как известно, имеют свойство устаревать и рассинхронизироваться с кодом), и тем проще будет другому программисту сходу разобраться.
1
 Аватар для Кателевский ВН
0 / 0 / 1
Регистрация: 23.04.2014
Сообщений: 94
27.04.2014, 10:19  [ТС]
Я понял, благодарю за помощь, очень помогли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2014, 10:19
Помогаю со студенческими работами здесь

Определить функцию для циклического сдвига списка вправо на один элемент
Дан список. Определить функцию для циклического сдвига списка вправо на один элемент. Использовать только базис Лиспа. Самым простым...

Напишите программу для выполнения циклического сдвига массива вправо на 4 элемента
напишите программу для выполнения циклического сдвига массива вправо на 4 элемента

Оператор побитового сдвига
как называется этот оператор и что он делает ?

Операция побитового сдвига
Задача состоит в том,что нужно введенное число (unsigned char) перевести в двоичную, а затем проверить биты полученного числа (тоесть, что...

Перегрузка оператора побитового сдвига <<
Здравствуйте, подскажите, пожалуйста, как правильно перегрузить оператор побитового сдвига?public static Set&lt;T&gt; operator &lt;&lt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru