Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для CyberPaladin
18 / 16 / 8
Регистрация: 27.05.2017
Сообщений: 118

Слишком громоздкий цикл

06.04.2018, 12:14. Показов 1075. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, господа форумчане! Я сейчас работаю с чужим кодом, анализируя его, и все бы хорошо, но вот есть вот такой проблемный участок кода, суть которого это перебор вариантов для формирования выражения в соответствии с заранее определенным результатом типа, 35 =((1?2)?3)?4)?5)?6:
C++
1
2
3
4
5
6
for (int j = 0; j - 1024; j++)// 1024 итерации
    {
        for (r = t - u, *((unsigned*)&r) &= 0x7FFFFFFF, k = j * 4, t = 1, l = 0; l - 5; l++) 
           t = p[((k /= 4) % 4)](t, l + 2);
        if (r > 1e-10) continue;// r - очень малое,но не нулевое
//далее идут функции вывода на консоль...
Я не могу никак понять в последнем цикле смысл выражения:
C++
1
*((unsigned*)&r) &= 0x7FFFFFFF;// 0x7FFFFFFF == макс. значению типа int
Как я понимаю, r - ссылка на указатель, и она я так понимаю изменяет адрес указателя который в ней хранится...но а зачем там преобразование к беззнаковому типу указателя??
Логика таких действий не совсем ясна...
Вот список объявителей:
C++
1
2
3
4
char c[4];
float t = 0, r; 
int k, l, u = 35;
float(*p[4])(float, float) = { pl,mn,ml,dv };// массив указателей на функции которые производят простые арифм. операции
help...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2018, 12:14
Ответы с готовыми решениями:

Как упростить громоздкий синтаксис?
Я понимаю, что это ООП ради ООП. Это моя первая программа, поэтому мне хочется задействовать полиморфизм, наследование, инкапсуляцию. Вот...

Оптимизировать громоздкий код потока
Значит написал такой громозкий (но рабочий код) потока и загрузки в поток из Тстринг-листа, можно ли его как оптимизировать? Или может...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать учесть особенности получения квадратного...

3
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
06.04.2018, 15:19
Это не ссылка. Это адрес. Это какой-то е..аный в анус индус писал этот код.
берет адрес переменной, преобразовывает ее к указателю на unsigned и затем разыменовывает его с присвоением результата.
В общих чертах можете читать как:
C++
1
(unsigned)r &= 0x7FFFFFFF;
Очень забавно будет, если размер r меньше размера unsigned...

Смысл операции - избавление от знака и отрицательных значений. Но при таком подходе результат сложения может оказаться меньше стартового значения, хоть и положительным.
0
 Аватар для CyberPaladin
18 / 16 / 8
Регистрация: 27.05.2017
Сообщений: 118
06.04.2018, 16:15  [ТС]
Цитата Сообщение от Pink_Pank Посмотреть сообщение
Смысл операции - избавление от знака и отрицательных значений. Но при таком подходе результат сложения может оказаться меньше стартового значения, хоть и положительным.
Пошагал отладчиком по программе, действительно убедился что эта страшная конструкция по сути преобразует значение в беззнаковое число. И неужели нету более понятного способа?
Мое решение оказалось до боли простое:
Заменил
C++
1
for (r = t - u, *((unsigned*)&r) &= 0x7FFFFFFF, k = j * 4, t = 1, l = 0; l - 5; l++)
на простую конструкцию
C++
1
for (r = u - t, k = j * 4, t = 1, l = 0; l - 5; l++)
по идее значение t не должно быть больше чем u
Но теперь на вывод поступают лишние конструкции типа 35 =((1?2)?3)?4)?5)? естественно что неправильные, хотя до этого тоже не все результаты были верны!
Есть ли другой способ превратить значение в беззнаковое?
0
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
09.04.2018, 14:46
А что вам мешает сразу объявить r как беззнаковое?
Вообще, не видя весь код - гадать сложно.

Вообще, я думаю, проблема в том, что r у вас типа float, а вы ее насильно преобразуете в unsigned. Форматы хранения данных несколько иные. Низя так делать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2018, 14:46
Помогаю со студенческими работами здесь

Pascal N-IDE, оператор function, ошибка "слишком мало или слишком много аргументов передаются функции arccos"
program gg; uses crt; var x1,x2,x3,x4,y1,y2,y3,y4: integer; a,b,c,d,n,k,l,m:real; L1,L2,L3,L4:real; ...

Цикл с предусловием, цикл с постусловием и цикл с параметром
Объясните пожалуйста как делать эти циклы. У меня не получается. Можете сделать как на фото, или на подобии. Заранее спасибо)

Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор?
Допустим есть цикл: while (1) { ... } Как сделать так, чтобы бесконечный цикл не грузил процессор. Избавиться от...

Написать в турбо паскале, Цикл с параметром, Цикл, с постусловием, и с предусловием пожалуйста

Цикл: Используя цикл while, выведите на экран для числа 2 его степени от 0 до 20
Используя цикл while, выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как **. Фрагмент...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru