Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Зеленый1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 100
#1

Непонятка со скобками - C++

19.02.2012, 12:58. Просмотров 488. Ответов 6
Метки нет (Все метки)

У меня такой вопрос: есть два куска кода, по сути одинаковых, в одном есть дополнительные скобки, которые по-моему не влияют ни на что, но результат получается разный. Прикрепил два скрина, может кто объянит, просто интересно в чем оказалась проблема))
0
Миниатюры
Непонятка со скобками   Непонятка со скобками  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2012, 12:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятка со скобками (C++):

непонятка - C++
на парах нам учитель дает зделаную прогу как пример (скорей всего на студия-08) и в компютерном класе оно все работает (там тоже студия...

Непонятка с указателями - C++
Как так что если указатель на int он покажет свой адрес а на char покажет символ свой. int * pointerInt = new int; char *...

Непонятка с кодировкой - C++
Есть следующий код: #include "stdafx.h" #include <iostream> #include <string> using std::wstring; using std::getline; using...

Непонятка с float - C++
float s = (123 * 100 / 360000); cout << fixed << setprecision(3) << s; По идее, в консоли должно вывести "0,034", но видимо с++ не...

fstream непонятка - C++
скажите,плз,правильно ли я открываю файл с fstream, и где должен лежать сам файл? #include <fstream> #include <iostream> #include...

Непонятка с заголовочными файлами - C++
game.h #ifndef _GAME_H_ #define _GAME_H_ #include <gl\gl.h> #include <gl\glu.h> #pragma comment (lib,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 14:31 #2
C математической точки зрения разницы нет! ну по крайней мере я не заметил!

Значение переменных у Вас одинаковы в обоих примерах??
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
19.02.2012, 14:45 #3
C++
1
2
3
4
5
6
7
8
9
  const double d = 5;
  const int i1 = 5;
  const int i2 = 2;
 
  const double res1 = d * i1 / i2;
  const double res2 = d * (i1 / i2);
 
  cout << res1 << endl; // 12.5
  cout << res2 << endl; // 10.0
В случае без скобочек порядок выполнения такой:
переменная типа дабл умножается на переменную типа инт. результат - значение типа дабл. потом дабл делится на инт.
5 * 5 / 2 = 12.5

Во втором случае сперва вычисляется выражение в скобках:
переменная типа инт делится на переменную типа инт. результат выражение - интовое значение.
т.е. 5 / 2 = 2 т.к. интовые значение - это целые числа.
далее дабл умножается на этот результат, т.е. 5 * 2 = 10;

Вот в вашем примере тоже самое. Все переменные, которые взяли в дополнительные скобки похоже имеют тип инт. Отсюда погрешность при целочисленной арифметике.
2
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
19.02.2012, 14:51 #4
Del, пропустил скобку
0
Зеленый1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 100
19.02.2012, 17:19  [ТС] #5
DU, благодарю за пояснение, теперь все ясно!)
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.02.2012, 17:23 #6
Цитата Сообщение от Infinity3000 Посмотреть сообщение
Значение переменных у Вас одинаковы в обоих примерах??
Дело не в них, надо проверить типы, так как от перестановки операции округления результат меняется:
2*1.4+2*1.8=2*1+2*1=2+2=4, 2*(1.4+1.8)=2*(3.2)=2*3.2=2*3=6.
1
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.02.2012, 17:28 #7
Цитата Сообщение от taras atavin Посмотреть сообщение
Дело не в них, надо проверить типы
Думал. что ТС это учел!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 17:28
Привет! Вот еще темы с ответами:

непонятка в связном списке - C++
есть 2 конструктора - list(const str&amp;) и list() если в main использую 1ый конструктор, то всё работает, если 2ой - ошибка, всякие там...

Непонятка с постфиксами в VS 2013 - C++
#include &lt;iostream&gt; using namespace std; int main() { int a = 10; a = a++ + a++; cout &lt;&lt; a &lt;&lt; endl; system(&quot;pause&quot;); ...

Непонятка с минусами в double - C++
такая шляпа вот, почему-то, если if(9.8 - 7.6 == 2.2) cout &lt;&lt; &quot;TRUE&quot; &lt;&lt; endl; else cout &lt;&lt; &quot;FALSE&quot; &lt;&lt; endl; выводит FALSE,...

Непонятка при работе с файлом - C++
Есть проблема при работе с файлом. Нужно удалить гласные из текстового файла. Непонятно, почему без file.seekg(pos) он зацикливается ; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.02.2012, 17:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru