Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26

Инкремент в произведении

29.10.2015, 21:14. Показов 1352. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, на ерунде запнулся, допустим:
n = 2000;
тогда в какой последовательности нужно решать вот это выражение:
--n*n*n = ?
собственно в компиляторе ответ -601928593, не могу повторить его на калькуляторе
знаю что у инкремента более высокий приоритет, но вот всё ли выражение попадает под инкремент мне не совсем ясно, умножив 1999 *2000 * 2000 не выходит результат, а тем более отрицательный, умножив 1999*1999*1999 тоже не получается.., что интересно выражение:
--n*n = 3996001 (среда вычисляет)
что соответствует выражению:
1999*1999
то-есть получается инкремент сработал на обе "n", хотя три "n" того же ответа, что и компилятор, не дают.
Короче говоря, я уверен ответ будет очень короткий и простой ))) тем не менее подскажите пожалуйста в какой последовательности выполняется данное выражение
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2015, 21:14
Ответы с готовыми решениями:

Найти минимальное в произведении чисел
Ребята помогите, т. к. что то не пойму! Нужно найти минимальное в произведении чисел!!!! # include <iostream> # include...

Определить количество членов в произведении в зависимости от погрешности
Здравствуйте! У меня такой вопрос. Есть задача: Необходимо найти кол-во членов произведения, чтобы равенство выполнялось с...

Найти индексы и произведении, минимального и максимального элементов массива
Создать массив с элементами akn=n f (k) + sin (k) g (n), где k,n=1,2,3,4; f(k)=sinkcosk2sin(k+1,4)+5,14 g(n)=|sin(2n-1,5)+3sinn2|+2,38 ...

9
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
29.10.2015, 21:35
Gloat, короткий ответ: Порядок вычисления операндов операторов и порядок вычисления аргументов функции не определен. Поэтому вопрос
Цитата Сообщение от Gloat Посмотреть сообщение
в какой последовательности выполняется данное выражение
не имеет однозначного ответа.
Подробнее тут: http://ru.cppreference.com/w/c... eval_order
1
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
29.10.2015, 21:36
Gloat, у меня в Студии вывод: 7.98801е+09
1
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
29.10.2015, 22:52  [ТС]
kalonord,
n=2000
-601928593
--n*n*n=-601928593
Для продолжения нажмите любую клавишу . . .

вот что вывел у меня компилятор

Добавлено через 29 минут
DrOffset, Пробежал глазами статью, правильно я понял, что надо смотреть по контексту как работает.., ладно, вот чуть более полный код:
while (--n*n*n % 1000 == k ? b = a, a = n : n);
короче говоря, задание звучит так, "k" это некое число состоящее из трёх цифр, нужно найти такое число, которое при возведении в третью степень будет иметь на конце три цифры равными "k",
собственно, в одном из решений, которые я там увидел была вот эта строка, хотя о чем это я.., эта строка и есть решение (если быть точным, там надо найти два числа, минимальное, и максимальное(максимальное должно соответствовать ряду условий, не буду вдаваться в подробности)) ну так вот, ну так о чем я...
вот этот инкремент, модифицирует "n", уменьшая его от 2000, но вопрос-то в том, что я не могу получившееся выражение из --n*n*n (первое, когда n ещё равно 2000) вычислить на калькуляторе, как он это сделал
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iterator>
#include <cmath>
#include <algorithm>
#define PR(x) cout << #x "=" << x << "\n";
 
using namespace std;
int main(){
int n = 2000;
PR(--n*n*n);
system("pause");
return 0;
}
Начинаю подозревать, что я проверяю чему равно, написав не корректную программу проверки, вот код если что...
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
29.10.2015, 23:51
Gloat,
вообще максимум знакового int составляет 2147483647, если больше, то переполнение и, соответственно, отрицательное значение.
1
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
30.10.2015, 10:48
Лучший ответ Сообщение было отмечено Gloat как решение

Решение

Цитата Сообщение от Gloat Посмотреть сообщение
Пробежал глазами статью
Нельзя такое пробегать. Это надо читать вдумчиво и желательно несколько раз.

Цитата Сообщение от Gloat Посмотреть сообщение
правильно я понял, что надо смотреть по контексту как работает.., ладно, вот чуть более полный код:
C++
1
while (--n*n*n % 1000 == k ? b = a, a = n : n);
Этот код некорректный. Потому что зависит от положения звезд на небе.
Переписывай его так, чтобы исключить UB. Не надо гоняться за однострочниками - это блажь.
Например, если необходимо, чтобы сначала был выполнен декремент, то так и пиши:
C++
1
2
--n;
r =  n * n * n;
Кроме того, как верно выше сказали, у тебя тут еще и переполнение. Используй более вместительный тип.
1
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
30.10.2015, 13:01  [ТС]
DrOffset, я просто хотел понять закономерность исполнения этой строки компилятором,
C++
1
while (--n*n*n % 1000 == k ? b = a, a = n : n);
Этот код некорректный. Потому что зависит от положения звезд на небе.
скажим так, для расширения кругозора, вообще, то, что код должен быть читаем, это я знаю, и сам я так писать бы не стал, просто интересно стало как это работает...
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
30.10.2015, 13:16
Цитата Сообщение от Gloat Посмотреть сообщение
для расширения кругозора
Скажем так, твой кругозор будет оценен по достоинству любым вменяемым работодателем, если ты сможешь ему показать, что умеешь писать код без UB
Цитата Сообщение от Gloat Посмотреть сообщение
понять закономерность исполнения
В стандарте языка сказано, что подобный код приводит к неопределенному поведению. Т.е. закономерность тут если и удасться найти, то в рамках одной версии компилятора с какими-то конкретными настройками. Но эта закономерность уже будет вне рамок С++.
1
0 / 0 / 0
Регистрация: 17.10.2015
Сообщений: 26
30.10.2015, 13:23  [ТС]
на самом деле, такое сокращение решения было вызвано поставленными условиями (задание надо было сделать как можно меньшим количеством символов).., но я понял наставления, что так делать нельзя ))) спасибо.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.10.2015, 20:22
Цитата Сообщение от Gloat Посмотреть сообщение
задание надо было сделать как можно меньшим количеством символов
C++
1
while (--n, n*n*n % 1000 == k ? b = a, a = n : n);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.10.2015, 20:22
Помогаю со студенческими работами здесь

Рекурсия: количество возможных расстановок скобок в произведении n чисел
Написать на языке С рекурсивную функцию вычисляющую количество полных расстановок скобок в произведении n чисел

Сколько сомножителей надо взять в произведении, чтобы равенство выполнялось с точностью ε
Известно равенство.Определить, сколько сомножителей надо взять в произведении, чтобы равенство выполнялось с точностью ε.C++

Задан одномерный массив,вычислить сумму произведении всех пар соседних чисел
Задан одномерный массив,вычислить сумму произведении всех пар соседних чисел

Инкремент и преинкремент
Здравствуйте. Я вот решил протестить в чем разница между инкрементом и преинкрементом, и как-то не увидел разницы... В чем же разница? :) ...

Инкремент переменной
в задании сказано, что пользователь вводит строку и программа выводит ее, но если пользователь вводит еще и цифру, то программа должна...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru