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

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

Войти
Регистрация
Восстановить пароль
 
Witek
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 33
#1

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

20.04.2017, 22:53. Просмотров 132. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Переменной типа int при первой итерации цикла приписывается значение меньше на 1 (C++):

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

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

Максимальное значение переменной типа int - C++
Если тип long в 2 раза больше чем int. Сколько максимум в int? В чём они измеряются в памяти? в цифрах вывода?

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

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

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

4
DU3
281 / 233 / 80
Регистрация: 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
6082 / 5393 / 1878
Регистрация: 14.04.2014
Сообщений: 22,374
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
6082 / 5393 / 1878
Регистрация: 14.04.2014
Сообщений: 22,374
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
Привет! Вот еще темы с ответами:

Записать адрес переменной произвольного типа в переменную типа int - C++
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; uint32 sNo; uint16 tNo; uint32 reserv; };

Создать динамический массив, собирающий значения переменной на каждой итерации цикла - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; using namespace std; int main() { int t, i, ...

Значение типа "int*" нельзя присвоить сущности типа int - C++
#include &lt;iostream&gt; using namespace std; int sort(int k, int p, int b, int n) { int min = 0; // для вставки задач int sum;...

МАССИВЫ: динамические мас.значение типа "int *" нельзя присвоить сущности типа "int" - C++
МАССИВЫ: динамические массива ОШИБКА:значение типа &quot;int *&quot; нельзя присвоить сущности типа &quot;int&quot; #include &lt;iostream&gt; using...


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

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

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