Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10

Условный оператор

20.04.2017, 12:30. Показов 1136. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скажите, будет ли следующий код работать, как подразумевается - в зависимости от значения флага индексировать один или другой массив?
C++
1
2
3
    int aa[10], bb[10];
    bool f = ...;
    ( f ? aa : bb )[i] = ...;
Мне выдаёт предупреждения
Code
1
2
D:\Projects\cyberforum\tests\main.cpp|56|warning: second operand of conditional expression has no effect [-Wunused-value]|
D:\Projects\cyberforum\tests\main.cpp|56|warning: third operand of conditional expression has no effect [-Wunused-value]|
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.04.2017, 12:30
Ответы с готовыми решениями:

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли определённые трудности. Будьте добры, помогите решить. Буду...

Условный оператор
Помогите решить задачу: Даны четыре целых числа a, b, c и d. Найти наименьшее из максимумов первой и второй пар чисел. Решить задачу,...

Условный оператор if else
Что не так? #include <stdio.h> #include <conio.h> #include <iostream> int main() { int x,y,z,max; cout<<"Введите число...

10
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.04.2017, 12:44
GoldenId, будет.
Флаг -Wunused-value выдаёт предупреждения если переменная объявлена и не используется.
0
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
20.04.2017, 14:29  [ТС]
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Fraction
{
    // ...
private:
    digit_type* int_;
    digit_type* frac;
    // ...
};
 
    //...
    Fraction q( intlen, fraclen );  // частное; примем, что по цифрам оно совпадаем с делимым
    // ...
    q.( ( u <= dh ) ? int_ : frac )[( ( u <= dh ) ? dh - u ??: u - dh??] += 1;  // (327) прибавляем единицу к соотв цифре частного

Build log
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
||=== Build: Debug in Fraction (compiler: GNU GCC Compiler) ===|
D:\Projects\cyberforum\Fraction\frac.cpp||In member function 'Fraction Fraction::operator/(const Fraction&) const':|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected unqualified-id before '(' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected primary-expression before '?' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected primary-expression before '?' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected primary-expression before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected ':' before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected primary-expression before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected ':' before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected primary-expression before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected ':' before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected primary-expression before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected ':' before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected primary-expression before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected ')' before ']' token|
D:\Projects\cyberforum\Fraction\frac.cpp|327|error: expected ']' before ';' token|
||=== Build failed: 14 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|



Добавлено через 16 минут
C++
1
    ( ( u <= dh ) ? q.int_ : frac )[( u <= dh ) ? dh - u : u - dh - 1] += 1;
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.04.2017, 14:33
GoldenId, такой код очень неудобно читать. Если вы запишите промежуточные результаты в переменные, хуже от этого не станет (они всё равно заинлайнятся 99.99%)
1
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
20.04.2017, 15:16
C++
1
2
3
int aa[10], bb[10];
    bool f = ...;
    ( f ? aa : bb )[i] = ...;
]

C++
1
2
3
4
5
6
7
8
int aa[10], bb[10];
    bool f = ...;
 
 
if (f)
    aa[i] = ...;
else
    bb[i] = ...;
\\

??
0
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
20.04.2017, 16:32  [ТС]
MrGluck разве так кратко писать, не есть одна из целей программирования? К тому же, когда пишешь операцию, отправляться в место выше и заводить переменную - разве не неудобство программиста?


dailydose, да это понятно.. откуда взялось-то..

Добавлено через 2 минуты
К тому же в той функции и так уже с полтора десятка локальных переменных (s, t, dh, ih1, fh2...)

Добавлено через 41 секунду
И сама функция под сотню строк..

Добавлено через 46 минут
Победил std::transform с std::reverse_iterator:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    // копирование целой части из буфера в экземпляр нашего класса с преобразованием типа
    // из char_t в digit_type;
    // т.к. целая часть хранится по убыванию индексов, то применяется обратный итератор
    //std::reverse_iterator<Fraction::digit_type*> ri( f.int_ + intlen - 1 );
    std::transform(
        buf.c_str(),
        buf.c_str() + intlen,
        std::reverse_iterator<Fraction::digit_type*>( f.int_ + intlen - 1 ),
        [] ( auto ch ) { return Fraction::to_digit( ch ); } );
 
    // копирование дробной части
    std::transform(
        buf.c_str() + intlen + 1,
        buf.c_str() + intlen + 1 + fraclen,
        f.frac,
        [] ( auto ch ) { return Fraction::to_digit( ch ); } );
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.04.2017, 16:34
Цитата Сообщение от GoldenId Посмотреть сообщение
разве так кратко писать, не есть одна из целей программирования?
Цитата Сообщение от GoldenId Посмотреть сообщение
разве не неудобство программиста?
Код большую часть времени читается, а не пишется.
Он, конечно, должен выполнять поставленную задачу. Но не менее важно то, как он был написан.
В вашем коде должно быть легко разбираться, иначе можно будет наделать ошибок.
Я думаю, вам следует ознакомиться с "Совершенным кодом" Макконнелла.
1
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
21.04.2017, 11:56  [ТС]
MrGluck, благодарю.

Добавлено через 2 минуты
Кстати, может быть, это программирование в стиле другого языка? Например Ruby или Haskell?
C++
1
( ( u <= dh ) ? q.int_ : frac )[( u <= dh ) ? dh - u : u - dh - 1] += 1;
Ведь STL предполагает "гробы":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    // копирование целой части из буфера в экземпляр нашего класса с преобразованием типа
    // из char_t в digit_type;
    // т.к. целая часть хранится по убыванию индексов, то применяется обратный итератор
    //std::reverse_iterator<Fraction::digit_type*> ri( f.int_ + intlen - 1 );
    std::transform(
        buf.c_str(),
        buf.c_str() + intlen,
        std::reverse_iterator<Fraction::digit_type*>( f.int_ + intlen /*- 1*/ ),
        [] ( auto ch ) { return Fraction::to_digit( ch ); } );
        // учитываем, что reverse_iterator при обращении прямого итератора указывает на один элемент перед ним, поэтому 1 не вычитаем
 
    // копирование дробной части
    std::transform(
        buf.c_str() + intlen + 1,
        buf.c_str() + intlen + 1 + fraclen,
        f.frac,
        [] ( auto ch ) { return Fraction::to_digit( ch ); } );
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.04.2017, 12:18
Цитата Сообщение от GoldenId Посмотреть сообщение
Кстати, может быть, это программирование в стиле другого языка?
Это программирование без стиля.
Матан какой-то, так можно на любом языке написать.
0
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
21.04.2017, 12:45  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Это программирование без стиля.
Матан какой-то, так можно на любом языке написать.
Как же быть тогда с цепочными вызовами и последним приведённым примером?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.04.2017, 12:50
Цитата Сообщение от GoldenId Посмотреть сообщение
Как же быть тогда с цепочными вызовами
Всегда можно сохранить промежуточный результат в переменную с осмысленным названием (можно даже использовать ссылку или указатель, если это необходимо).
Цитата Сообщение от GoldenId Посмотреть сообщение
последним приведённым примером?
Если честно, я так до конца и не понял, что вам требуется. Вы мало конкретной информации предоставили.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2017, 12:50
Помогаю со студенческими работами здесь

Условный оператор if
Добрый день! есть следующий код программы на C++: #include&lt;cmath&gt; #include&lt;iostream&gt; int main(){ l: double a; ...

Условный оператор
Добрый день,нужна помощь в написании кода по заданию. Составить систему неравенств на основании графической схемы: Пока что...

условный оператор IF
Даны три вещественных числа. Возвести в квадрат те, которые положительные.

Условный оператор IF
Содержание: 1+d sin d/a (i-1)i+{a}^{2} i+2/3x ...

Условный оператор.
Даны три действительных числа. Выбрать из них те, которые принадлежат интервалу (1, 3).


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru