Добавление последовательных целых чисел из ввода (переведено с Python на C ++) - PullRequest
0 голосов
/ 11 мая 2011

Я бы хотел попросить помочь с моим HW. Я думаю, что я действительно близок к тому, чтобы понять это. Наш класс CompSci в настоящее время переходит от изучения Python к (вводному) C ++. Поскольку они смутно похожи, нам посоветовали, начиная с новичков, кодировать проблему в Python (с которой мы очень хорошо знакомы) и перевести ее на C ++ с использованием основ, которые мы только что узнал. Задача, которую нужно решить, - это просто «добавить последовательные целые числа от 1 к этому числу, учитывая положительное целочисленное значение». Так что пример будет:

>>Enter a positive integer: 10
>>1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

Код Python (который был успешным), который я пытаюсь перевести на C ++:

num = int(raw_input("Enter a positive integer: "))
sum = 0
for i in range(1, num):
    sum += i
    print i, "+",
print num, "=", sum+num

И мой неудачный код C ++:

#include <iostream>
using namespace std;

int main()
{
    int num;
    int sum;
    int i;
    sum = 0;
    cout << "Please enter a positive integer: " << endl;
    cin >> num;
    for (i=0; 1 <= num; i++)
        {
        sum = sum + i;
        cout << i << "+" << endl;
        }
    cout << num << "=" << sum + num << endl; 
    return 0;
}

Но вывод - это просто бесконечная, бесконечная последовательность сложения от 0 до бесконечности, идущая сверху вниз. Еще хуже то, что он печатался не по прямой линии, как я хочу. Как видите, я буквально пытался перевести это слово в слово; Я думал, что это будет надежно. Что-то должно быть не так с моим циклом. Так как в C ++ нет собственного класса для «range», как в Python, я думал, что оператор среднего условия («1 <= num;») будет действовать как диапазон. Почему мой знак "=" не распечатан? И я не понимаю, почему это не закончится, когда оно достигнет «числа». Думаешь, ты сможешь помочь? Заранее благодарю за ответы. </p>

Ответы [ 5 ]

1 голос
/ 11 мая 2011

Фиксированный код:

#include <iostream>
using namespace std;

int main()
{
    int num;
    int sum;
    int i;
    sum = 0;
    cout << "Please enter a positive integer: " << endl;
    cin >> num;
    // Here you had 1 <= num which was always true for positive num
    // and it did not depend on value of i.
    for (i = 1; i < num; ++i)
        {
        sum = sum + i;
        cout << i << "+";  // Here you had endl which produced newline characters.
        }
    cout << num << "=" << sum + num << endl;-
    return 0;
}
0 голосов
/ 11 мая 2011
Цикл

в c ++ является наиболее простым, чем python, цикл for более прост, он основан на трех выражениях: выражении инициализатора, выражении test цикла и выражении подсчета. В частности, что не так в вашем коде - это тестовое выражение. Помните, что цикл выполняется, если тестовое выражение истинно. Вы должны выполнить цикл, если условие i<num истинно. Ваш цикл никогда не заканчивается, потому что num всегда >= 1 или, как вы написали 1 <= num всегда.

Для печати всех строк не используйте endl

0 голосов
/ 11 мая 2011

попробуйте это.

#include <iostream>
using namespace std;

int main()
{
    int num;
    int sum;
    int i;
    sum = 0;
    cout << "Please enter a positive integer: ";
    cin >> num;
    for (i=0; i < num; i++)
        {
        sum = sum + i;
        cout << i << " + ";
        }
    cout <<num << " = " << sum+num << endl; 
    return 0;
}
0 голосов
/ 11 мая 2011

Я действительно не знаю Python, но код

for i in range(1, num): 

выглядит очень похоже на

for (int i=1; i <= num; ++i) 

или возможно

for (int i=1; i != num; ++i) 

что больше похоже на C ++?

0 голосов
/ 11 мая 2011

Это:

for (i=0; 1 <= num; i++)

должно быть:

for (i=0; i <= num; i++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...