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

Оператор =. Не могу найти объяснение ситуации - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ подробно объяснить каждое действие программы http://www.cyberforum.ru/cpp-beginners/thread571733.html
#include "stdafx.h" #include <iostream> #include <string> using namespace std; int main() { fstream f; f.open("text.txt", ios::in); if (!f.is_open())
C++ Проверить является ли слово палиндромом Символьная строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т.е. является ли оно палиндромом). есть наброски кода: void main() { int i,j=0; string s,s2; cout<<"vvedite slovo\n"; getline(cin,s); for (i=s.length()-1;i>=0;i--) s2=s; http://www.cyberforum.ru/cpp-beginners/thread571731.html
Матрицы. Удаление строк. C++
Помогите решить задачку Описать процедуру RemoveRows(A, M, N, K1, K2), удаляющую из вещественной матрицы A размера M × N строки с номерами от K1 до K2 включительно (предполагается, что 1 < K1 ≤ K2). Если K1 > M, то матрица не изменяется; если K2 > M, то удаляются строки матрицы с номерами от K1 до M. Двумерный массив A и числа M, N являются входными и выходными параметрами. Используя процедуру...
В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N C++
В таблице из N строк и N столбцов клетки заполнены цифрами от 0 до 9. Требуется найти такой путь из клетки (1, 1) в клетку (N, N), чтобы сумма цифр в клетках, через которые он пролегает, была минимальной; из любой клетки ходить можно только вниз или вправо. Ограничения: 2 <= N <= 250. Ввод: В первой строке находится число N. В следующих N строках содержатся по N цифр без пробелов. Вывод:...
C++ Разработать иерархию классов http://www.cyberforum.ru/cpp-beginners/thread571700.html
Подъемный кран. Необходимо разработать иерархию классов.В каждом классе иерархии нужно предусмотреть: 1)Наличие не менее 3х конструкторов 2)Виртуальный деструктор 3)Перезагрузка операции. Обязательно перезагрузить операции: присвоение, инкременты и дискремента в обеих формах, поместить в поток , взять из потока, любую из бинарных и любую из унарных операций. 4)Виртуальная функция ...
C++ Error C2109: для индекса требуется массив или указатель #include <stdio.h> #include <conio.h> int const max_widht=3; int const max_height=3; int minmax (int min, int max, int val, int max_height, int max_widht, int* m) { int i,max_w, min_w; for (int i=0; i<max_widht; i++) { подробнее

Показать сообщение отдельно
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
11.05.2012, 21:56     Оператор =. Не могу найти объяснение ситуации
вот этот код работает безошибочно и выдаёт всегда верные результаты
C++
1
2
3
4
5
6
7
8
            qDebug() << "oX[0] = " << pixelToRealX(zoomRect.x() + ( zoomRect.width() < 0 ) * zoomRect.width());
            qDebug() << "oX[1] = " << pixelToRealX(zoomRect.x() + ( zoomRect.width() > 0 ) * zoomRect.width());
            GLfloat cnt = pixelToRealX(zoomRect.x() + ( zoomRect.width() > 0 ) * zoomRect.width());
            *oX = pixelToRealX(zoomRect.x() + ( zoomRect.width() < 0 ) * zoomRect.width());
            oX[1] = cnt;
            oX[2] = 0.;
            qDebug() << "oX[0] = " << *oX;
            qDebug() << "oX[1] = " << oX[1] << cnt << oX[1] - cnt;
а этот, в свою очередь, всегда работает не так как можно ожидать...
C++
1
2
3
4
5
6
7
            qDebug() << "oX[0] = " << pixelToRealX(zoomRect.x() + ( zoomRect.width() < 0 ) * zoomRect.width());
            qDebug() << "oX[1] = " << pixelToRealX(zoomRect.x() + ( zoomRect.width() > 0 ) * zoomRect.width());
            *oX = pixelToRealX(zoomRect.x() + ( zoomRect.width() < 0 ) * zoomRect.width());
            oX[1] = pixelToRealX(zoomRect.x() + ( zoomRect.width() > 0 ) * zoomRect.width());
            oX[2] = 0.;
            qDebug() << "oX[0] = " << *oX;
            qDebug() << "oX[1] = " << oX[1];
гипотезы? предположения? какие числа выпадут в консоль если pixelToRealX - константный метод не меняющий аргументы
Код
oX[0] =  -0.508466 
oX[1] =  0.508466 
oX[0] =  -0.508466 
oX[1] =  1.61194 

oX[0] =  -3.01448 
oX[1] =  2.52417 
oX[0] =  -3.01448 
oX[1] =  2.53666 

oX[0] =  -2.02176 
oX[1] =  -0.484253 
oX[0] =  -2.02176 
oX[1] =  0.161972

oX[0] =  -2.00282 
oX[1] =  -0.397635 
oX[0] =  -2.00282 
oX[1] =  -0.392783
вот несколько примеров чисел попадающих в отладочную консоль... первая пара чисел всегда расчитана верно и всё путём... третье число, соответственно тоже. четвёртое - всегда ошибочно
oX объявлено как GLfloat oX[3]
pixelToRealX - функция inline GLfloat pixelToRealX(GLuint p) const { return XBegin() + ( XWidth() / linePlant.width() ) * (p - linePlant.x()); }
zoomRect и linePlant - надёжные библиотечные структуры данных.

Помогите разобраться в различиях между приведенными кодами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru