Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Witek
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 33
1

Переменной типа int при первой итерации цикла приписывается значение меньше на 1

20.04.2017, 22:53. Просмотров 154. Ответов 4
Метки нет (Все метки)

Доброго времени суток.
Возникла проблема которую видно на скриншоте. Получаеться что если выводить значение переменной то получаем неправильное число, но если я вывожу непосредственно результат без приписывания его к переменой то всё нормально. Что тут сделано не так? Код тоже прикреплю.
P.S. Вообще это код чтобы объеденить элементы масива в одно число типа int(то есть имеем несколькоо ячеек памяти где хранятся разные числа 1 2 и 3, но я хочу полуучить число 123).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
#include <cmath>
 
using namespace std;
 
int main()
{
    vector<int>vv;
    vv.push_back(1);
    vv.push_back(2);
    vv.push_back(3);
    int a=0;
    int b=0;
    for(int i=0; i<vv.size(); i++)
    {
        a=vv[i]*pow(10, vv.size()-(i+1));
        cout <<"vv[i]*pow(10, vv.size()-(i+1)) = "<<vv[i]*pow(10, vv.size()-(i+1)) << " ||| " << "a= " << a << endl;
        b=b+a;
    }
 
    cout << endl <<  "Objedenenoe czyslo: " << b;
    return 0;
}
0
Миниатюры
Переменной типа int при первой итерации цикла приписывается значение меньше на 1  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2017, 22:53
Ответы с готовыми решениями:

Как присвоить значение одного из элементов массива типа char переменной типа int?
С++ начал буквально только что так что буду благодарен за терпение и понимание...

Значение переменной типа int
Я хочу присвоить переменной типа int значение 2147483648, а в gdb я посмотрел...

Максимальное значение переменной типа int
Если тип long в 2 раза больше чем int. Сколько максимум в int? В чём они...

Присвоить переменной Char значение третьего байта переменно типа Int
всем привет, на одном собеседовании передо мной поставили следующую задачу,...

Напишите перегруженную функцию power (), которая принимает два целочисленных параметра типа int и возвращает целочисленное значение типа int
Операции над целыми числами осуществляются быстрее, чем над числами с плавающей...

4
DU3
281 / 233 / 115
Регистрация: 07.09.2016
Сообщений: 587
20.04.2017, 23:06 2
вот тут все ок:
http://cpp.sh/2e6l2

пока что имею только одну слабую теорию того, как это можетбыть:
pow возвращает число с плавающей точкой, которое может быть близко к сотне, но меньше.
при приравнивании к a оно кастится к целому 99, а не к сотне. но наверно так бы было и в случае,
когда результат pow сразу выводится на экран, но там сотня. поэтому теорию считаю слабенькой.
попробуйте поменять код следующий у себя и скажите, что получится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    vector<int>vv;
    vv.push_back(1);
    vv.push_back(2);
    vv.push_back(3);
    int a=0;
    int b=0;
    for(int i=0; i<vv.size(); i++)
    {
        const auto proxyRes = vv[i]*pow(10, vv.size()-(i+1));
        cout <<"proxyRes = " << proxyRes << endl;
        a=proxyRes;
        cout <<"vv[i]*pow(10, vv.size()-(i+1)) = "<<proxyRes << " ||| " << "a= " << a << endl;
        b=b+a;
    }
 
    cout << endl <<  "Objedenenoe czyslo: " << b;
    return 0;
}
0
nmcf
6277 / 5578 / 2539
Регистрация: 14.04.2014
Сообщений: 23,479
20.04.2017, 23:11 3
У меня твой пример выдаёт одинаковые результаты. Повтори сборку проекта.

Добавлено через 2 минуты
Да, pow() может влиять. Лучше исключить, умножая на 10 в каждой итерации целое.
0
Witek
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 33
21.04.2017, 00:17  [ТС] 4
proxyRes does not name a type. Ругается.

Добавлено через 2 минуты
Это 3я попытка так сделать. Первая с pow тоже неудачная была, потом как-то раз покзало правильно. Но после всё переделал и вот опять. Пробовал создавать проект заново, тоже не помогло.

Добавлено через 14 минут
Может ещё и удасться понять в чем проблема, а пока придумал ещё такой вариант(«Если хочешь сделать что-то хорошо - сделай это сам...»). Функция которая возводет в степень. Ну и в самом коде только надо "pow" на "exponentiation" поменять.
C++
1
2
3
4
5
6
7
int exponentiation(int base, int exponent)
{
    if(exponent==0)
        return 1;
    else
        return base*exponentiation(base, exponent-1);
}
0
nmcf
6277 / 5578 / 2539
Регистрация: 14.04.2014
Сообщений: 23,479
21.04.2017, 00:18 5
Компилятор, значит, древний.
Замени pow() на умножение.
0
21.04.2017, 00:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2017, 00:18

Пропуск вызова cin.getline в первой итерации цикла
В цикле заполнения массива значениями консоль выводит два раза &quot;В цикле&quot;, а...

Создать динамический массив, собирающий значения переменной на каждой итерации цикла
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt;...

Записать адрес переменной произвольного типа в переменную типа int
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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