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

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

Войти
Регистрация
Восстановить пароль
 
 
siemdi
4 / 4 / 0
Регистрация: 18.01.2010
Сообщений: 30
#1

(+ - % / *) ошибка математики компилятора? - C++

10.03.2014, 13:11. Просмотров 609. Ответов 15
Метки нет (Все метки)

Всем привет!
Мне нужно мнение общественности, чтобы разобраться с одной непонятной, для меня, ситуацией.
Среда разработки - Arduino studio
Язык- C/C++
Суть происходящего такова, нужно разбить двухзначное число на цифры. Задача не нова поэтому решил не изобретать велосипед и воспользоваться общепринятыми решениями.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
......
int variable=0;
int var=0;
int main()
{
        variable=53;
        var=variable/10;
        cout<<"variable/10: "<<var<<endl; //выводим 5;
        var=variable%10;
        cout<<"variable%10: "<<var<<endl; //выводим 0;
        
 
        return 0;
}
по сути переменная variable обнуляется
Возможно я чего то не понимаю в программирование но очень сомневаюсь что можно так взять и перевернуть основы программирования с ног на голову.
Вопрос: Почему после любыx математических действий данные в переменной становятся равны 0?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 13:11     (+ - % / *) ошибка математики компилятора?
Посмотрите здесь:

ошибка компилятора - C++
Всем привет! Я пытаюсь скомпилировать код, но компилятор выдает ошибку! class fileParser { private: int * fBuff; ...

Ошибка компилятора - C++
Всем привет. Начну с самого конца. Есть некий файл SpellItemEnchantment.dbc - это просто хранилище значений (массив), его структура описана...

Ошибка компилятора - C++
#include &lt;iostream&gt; using namespace std; class ss { public: static bool progress; void changeProgress()

Ошибка компилятора - C++
Пишет на последнюю строчку, что требуется while и синтаксическая ошибка } #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace...

Непонятная ошибка компилятора - C++
Писал программу, вроде бы все должно быть правильно, но вот только компилятор VS2010 выдает такую ошибку: 1&gt;MSVCRTD.lib(crtexe.obj) :...

Ошибка компилятора C2784 - C++
Код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(void) { cout &gt;&gt; &quot;Hello, world&quot; &gt;&gt;...

Ошибка и краш компилятора - C++
Здраствуйте. Пытаюсь скомпилировать скачанный проект с boost`ом, при компиляции появляется окно &quot;Прекращена работа программы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aloir
217 / 217 / 13
Регистрация: 17.12.2010
Сообщений: 689
10.03.2014, 13:22     (+ - % / *) ошибка математики компилятора? #2
при делении - у нас получается не целочисленный тип, а у вас int

и
операция нахождения остатка от деления определена только для множества натуральных чисел, и результатом операции являются так же два натуральных числа. Поэтому операция нахождения остатка от деления дробных чисел не определена.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
10.03.2014, 13:27     (+ - % / *) ошибка математики компилятора? #3
siemdi, именно в этом примере такого не должно происходить. Что-то тут не то, это точно тот самый пример?

Добавлено через 1 минуту
Цитата Сообщение от Aloir Посмотреть сообщение
при делении - у нас получается не целочисленный тип, а у вас int
Вообще именно это и требуется. У него 53, он делит на десять, 3 обрезается, получается 5. Так и должно быть.

Добавлено через 1 минуту
Цитата Сообщение от Aloir Посмотреть сообщение
Поэтому операция нахождения остатка от деления дробных чисел не определена.
у него обе переменные int.
Aloir
217 / 217 / 13
Регистрация: 17.12.2010
Сообщений: 689
10.03.2014, 13:28     (+ - % / *) ошибка математики компилятора? #4
не внимательно прочитал.. мой косяк.
а пример рабочий +: сначала 5, потом 3.
может вы где то обнуляете переменную перед взятием остатка?
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
10.03.2014, 13:29     (+ - % / *) ошибка математики компилятора? #5
Aloir, скорее всего он нам показывает не то, что компилировал у себя.
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
10.03.2014, 13:35     (+ - % / *) ошибка математики компилятора? #6
siemdi,
Цитата Сообщение от siemdi Посмотреть сообщение
нужно разбить двухзначное число на цифры
Если преследуете эту цель, то ваш код неверен(Вы делением на 10, сразу выкидываете 3).
Цитата Сообщение от siemdi Посмотреть сообщение
после любыx математических действий данные в переменной становятся равны 0
При каких любых математических действиях?
Вам нужно разбить число на цифры(все операции проводятся при целочисленном типе данных):
1. Берете остаток от числа, к примеру 453. % - взятие остатка. 453 % 10, остаток 3
2. Далее вы должны снова взять остаток(5), но как, ведь 5 не последняя. Мы просто делим 453 на 10. При нашем типе данных, 453 / 10 = 45.
3. И вот когда остается 4 в нашем заданном числе, мы ее просто выводим.
Если вы делите 4 на 10 в целых числах, то это 0, т.к. при делении в числах с плавающей точкой это 0,4.
siemdi
4 / 4 / 0
Регистрация: 18.01.2010
Сообщений: 30
10.03.2014, 15:16  [ТС]     (+ - % / *) ошибка математики компилятора? #7
В gcc код работает правильно, а вот в ARDUINO студии работает не верно.

Код
Цитата Сообщение от Ryuk Посмотреть сообщение
Если преследуете эту цель, то ваш код неверен(Вы делением на 10, сразу выкидываете 3).
Сообщение от siemdi
после любыx математических действий данные в переменной становятся равны 0
Все что вы написали верно, но мой код работает правильно в двух средах разработки VisualStudio 2010-2013 и gcc.
И я не согласен что мой подход не верен, в данном случае у меня фиксированное количество цифр в числе -2. Тот код что вы привели аналогичен.
Но суть не в этом, я преследую цель, разобраться почему происходит именно то что происходит. Чудес не бывает.
При выполнении действий * / % происходит обнуление переменной, я не перезаписываю в переменную ничего, не обнуляю ее.
Есть у кого-то мысли на этот счет???
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
10.03.2014, 15:27     (+ - % / *) ошибка математики компилятора? #8
Цитата Сообщение от siemdi Посмотреть сообщение
происходит обнуление переменной
какой именно? variable или var?
siemdi
4 / 4 / 0
Регистрация: 18.01.2010
Сообщений: 30
10.03.2014, 15:37  [ТС]     (+ - % / *) ошибка математики компилятора? #9
variable обнуляется
C++
1
2
3
4
        variable=53;
        var=variable/10;
        cout<<var<<endl; //выводим 5;
        cout<<variable<<endl; //выводим 0;
после того как используется переменная variable в ней оказывается записан 0
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.03.2014, 15:51     (+ - % / *) ошибка математики компилятора? #10
Цитата Сообщение от siemdi Посмотреть сообщение
после того как используется переменная variable в ней оказывается записан 0
Возможно просто где-то идет сёр в память. Приведите минимальный код, в котором проблема проявляется.
siemdi
4 / 4 / 0
Регистрация: 18.01.2010
Сообщений: 30
10.03.2014, 21:33  [ТС]     (+ - % / *) ошибка математики компилятора? #11
тот код что вверху и есть минимальным
Мне кажется что некто не читает то что я пишу. Среда разработки АРДУИНО, программа запускается на ардуино (АРДУИНО -микроконтроллер) в нем нет "сера в память", не нужно придумывать небылиц, если есть стоящие идеи озвучьте их а если просто включаете умников то не стоит.
Причины типа
Цитата Сообщение от Aloir Посмотреть сообщение
при делении - у нас получается не целочисленный тип, а у вас int
Цитата Сообщение от DrOffset Посмотреть сообщение
Aloir, скорее всего он нам показывает не то, что компилировал у себя.
Цитата Сообщение от Ryuk Посмотреть сообщение
Если преследуете эту цель, то ваш код неверен(Вы делением на 10, сразу выкидываете 3).
, а еще я не студент, я работаю программистом 3 года, пишу на плюсах достаточно давно и уверяю Вас всех что я знаю что я делаю.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
10.03.2014, 21:46     (+ - % / *) ошибка математики компилятора? #12
Попробуйте внести переменные внутрь main.
Возможно, что ARDUINO не очень дружит с глобальными переменными.
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
10.03.2014, 22:23     (+ - % / *) ошибка математики компилятора? #13
Цитата Сообщение от siemdi Посмотреть сообщение
(АРДУИНО -микроконтроллер) в нем нет "сера в память"
Ну это сильно сказано конечно. Расстрел памяти может быть где угодно. Например, записали данные за пределами массива - расстреляли память. Но лично я не думаю, что тут дело в этом.
Цитата Сообщение от siemdi Посмотреть сообщение
Мне кажется что некто не читает то что я пишу
Мы читаем. Ты все-таки скинь код, из которого собираешь образ. Вряд ли кто-то тут поверит, что ты код с std::cout зашиваешь в атмегу.
Цитата Сообщение от siemdi Посмотреть сообщение
а еще я не студент, я работаю программистом 3 года, пишу на плюсах достаточно давно и уверяю Вас всех что я знаю что я делаю.
Это хорошо. Лично я тебе помочь хочу, а ты огрызаешься.
Еще раз скажу, кидай сюда весь код, который ты шьешь, а не синтетику с std::cout.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.03.2014, 22:31     (+ - % / *) ошибка математики компилятора? #14
Есть ещё предложение попробовать другие имена переменных.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 11:38     (+ - % / *) ошибка математики компилятора?
Еще ссылки по теме:

Ошибка компилятора wxDev-C++ - C++
Помогите, написал пример из книги Дейтела Как программировать на С++. Написал все как в примере, при компиляции выдает ошибки: undefined...

Ошибка компилятора C2360 - C++
Здравствуйте,форумчане) Я тут переделываю загрузчик модели,чтобы мог не один начальный меш загрузить,а все,которые есть на сцене.В итоге...

Непонятная ошибка компилятора - C++
http://s2.ipicture.ru/uploads/20131215/cH0nj1v0.png в чом ошибка???

ошибка компилятора как исправить - C++
компилятор видает ошибку (Stack around the variable &quot;pt2&quot; was corrupted) з чем может бить связана данная ошибка, компилятор Microsoft...

Ошибка компилятора С2064 в алгоритме - C++
#include &lt;iostream&gt; #include &lt;set&gt; #include &lt;algorithm&gt; #include &lt;iterator&gt; using namespace std; int I = 3; bool...


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

Или воспользуйтесь поиском по форуму:
siemdi
4 / 4 / 0
Регистрация: 18.01.2010
Сообщений: 30
16.03.2014, 11:38  [ТС]     (+ - % / *) ошибка математики компилятора? #15
Всем спасибо!
Проблема оказалась в том что ГЛОБАЛЬНЫЕ переменные работают по своему,не понятному, принципу.
Оказалось достаточно внести переменную внутрь в функцию
Yandex
Объявления
16.03.2014, 11:38     (+ - % / *) ошибка математики компилятора?
Ответ Создать тему
Опции темы

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