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

Вычислить сумму всех целых чисел, лежащих между двумя целыми числами, выбранными пользователем - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить значения ряда с определенной точностью http://www.cyberforum.ru/cpp-beginners/thread1215756.html
Помогите с задачей пожалуйста Задача 2 Пусть y0=0; yk = (yk-1+1)/(yk-1+2), k=1, 2, … Дано действительное eps>0. Найти первый член yn, для которого выполнено yn-yn-1 < eps.
C++ Выход из бесконечного цыкла Проблема с выходом из бесконечного цикла. Если для выхода вводить exit, программа виснет и бесконечно выводит, то, что записано в cout. Если использовать для выхода q всё работает нормально. /* Разработать программу, которая выводит на экран горизонтальную линию из символов. Число символов, какой использовать символ, и какая будет линия - вертикальная, или горизонтальная - указывает... http://www.cyberforum.ru/cpp-beginners/thread1215747.html
C++ Создать текстовый файл
создать текстовый файл 1.txt, имя файла вводится с клавиатуры.
Посчитать число Pi используя разложения с заданной точностью C++
Посчитать число Pi используя разложения с заданной точностью Pi=3+4*(1/(2*3*4)-1/(4*5*6)+1/(6*7*8)-...) Выводит около 2.9 #include <stdio.h> #include <conio.h> #include <math.h> void main() {
C++ Запись массивов в бинарные файлы http://www.cyberforum.ru/cpp-beginners/thread1215709.html
Добрый день. Пытаюсь написать программу для записи массива в бинарный файл. Выдаёт ошибку: что-то не так с буффером. int main() { char buf; ofstream fp("bla.dat", ios::binary|ios::out); int Mass={1,2,3,4,5}; for(int i=0; i<5; i++) { Mass>>buf;
C++ Из класса "Дата" с полями день, месяц, год создать класс "Время" с дополнительными полями час, минута, секунда в общем .надо класс дата полями день, месяц год.теперь мне надо создать класс "Время" з дополнительными полями часов,минут,секунд и определить разницу между двумя датами в годах, месяцах, днях,часах,минутах и секундах ....буду благодарна если кто то быстренько отзовется и поможет) подробнее

Показать сообщение отдельно
gru74ik
Модератор
 Аватар для gru74ik
3116 / 1342 / 167
Регистрация: 20.02.2013
Сообщений: 3,808
Записей в блоге: 17
24.06.2014, 14:51     Вычислить сумму всех целых чисел, лежащих между двумя целыми числами, выбранными пользователем
Прата, кто ж ещё. Решал сидел простенькую вроде задачку, а весь мозг себе взорвал. Почти решил, но где-то закралась ошибка. Что не так - не могу понять, мозги уже кипят:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//  sp_Ch5P255_Exercise01
/// Занятия по книге Стивена Праты "Язык программирования С++" (2012, 6-е издание).
/// Упражнения по программированию. Глава 5, страница 255, упражнение 1.
/*
Напишите программу, запрашивающую у пользователя ввод двух целых чисел.
Затем программа должна вычислить и выдать сумму всех целых чисел, лежащих
между этими двумя целыми. Предполагается, что меньшее значение вводится
первым. Например, если пользователь ввел 2 и 9, программа должна сообщить,
что сумма всех целых чисел от 2 до 9 равна 44.
*/
 
#include <iostream>
#include <vector>
#include <windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int varX;   // первое число
    int varY;   // второе число
 
    tryagain:   // метка для перехода на эту строку
    cout << "Введите два целых положительных числа, так, чтобы "
            "второе число было больше первого." << endl;
    cout << "Ваше первое число: ";
    cin >> varX;    // пользователь вводит первое число и оно
                    // сохраняется в переменной varX
    cout << "Ваше второе число: ";
    cin >> varY;    // пользователь вводит второе число и оно
                    // сохраняется в переменной varY
 
//==== Блок проверки правильности введённых пользователем значений ====
    if ((varX <= 0) || (varY <= varX))
    {
        cout << "Вы ошиблись в выборе чисел. Попробуйте ещё раз." << endl;
        goto tryagain; // возвращаемся к метке tryagain
    }
//====================================================================
 
// Допустим, пользователь ввёл корректные значения, например 2 и 6. Тогда:
    int n = (varY-varX)+1;      // В переменную n записывается результат вычисления
                                // выражения (varY-varX)+1, то есть в нашем случае 5.
 
    vector<int>myVector(n);     // Создадим контейнер класса вектор из n-ого
                                // количества элементов типа int и обзовём его
                                // myVector. Количество элементов должно вмещать все
                                // целые числа начиная с varX до varY включительно.
                                // В нашем случае нам понадобится пять
                                // элементов для чисел 2, 3, 4, 5, 6.
    vector<int>::iterator myIterator; // создаём итератор
 
    int a = varX; // сохраняем значение переменной varX в переменную a,
            // потому что потом varX будет изменено, а её значение ещё понадобится
            // для вывода в самом конце (интересно, можно это как-то элегантнее сделать?)
    int b = varY; // то же самое для переменной varY
    --varY; // Декрементируем varY. Теперь varY равна 5.
 
    while (varX <= n+1)
    {
    // Если varX не больше n+1, то
        myVector[varY-1] = varX; // записать в элемент вектора (varY-1) значение varX
        ++varX;
        --varY;
    }
 
 
//======= Первый виток цикла.
// Цикл проверяет условие (varX <= n+1). 2 <= 6. Истина.
// В элемент вектора myVector[4] записывается 2.
// Инкремент varX и декремент varY
// Таким образом varX становится равен 3, а varY равен 5.
// Первый проход завершён.
 
//======= Второй виток цикла.
// Цикл проверяет условие (varX <= n+1). 3 <= 6. Истина.
// В элемент вектора myVector[3] записывается 3.
// Инкремент varX и декремент varY
// Таким образом varX становится равен 4, и varY равен 4.
// Второй проход завершён.
 
//======= Третий виток цикла.
// Цикл проверяет условие (varX <= n+1). 4 <= 6. Истина.
// В элемент вектора myVector[2] записывается 4.
// Инкремент varX и декремент varY
// Таким образом varX становится равен 5, а varY равен 3.
// Третий проход завершён.
 
//======= Четвёртый виток цикла.
// Цикл проверяет условие (varX <= n+1). 5 <= 6. Истина.
// В элемент вектора myVector[1] записывается 5.
// Инкремент varX и декремент varY
// Таким образом varX становится равен 6, а varY равен 2.
// Четвёртый проход завершён.
 
//======= Пятый виток цикла.
// Цикл проверяет условие (varX <= n+1). 6 <= 6. Истина.
// В элемент вектора myVector[0] записывается 6.
// Инкремент varX и декремент varY
// Таким образом varX становится равен 7, а varY равен 1.
// Пятый проход завершён.
 
//======= Шестой виток цикла.
// Цикл проверяет условие (varX <= n+1). 7 <= 6. Ложь.
// Выход из цикла.
//================================================
 
 
//======= Вычисляем сумму всех элементов вектора:
    for (int i=0; i < 10; i++) {
        myVector.push_back(i);
    }
    int total = 0;
    myIterator = myVector.begin();
    while (myIterator != myVector.end())
    {
      total += *myIterator;
      ++myIterator;
    }
    cout << "Cумма всех целых чисел от " << a
         << " до " << b << " равна " << total << endl;
 
    return 0;
}
Через пять минут после того как решил (ну, почти решил), на форуме нашёл простое решение без извращений:

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
25
26
27
#include <iostream>
#include <windows.h>
using namespace std;
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int Num_1, Num_2, Count;
 
    cout << "Введите первое(меньшее) число: "; cin >> Num_1;
    cout << "Введите второе(большее) число: "; cin >> Num_2;
    Count = Num_2 - Num_1;
 
    int np, summ = 0;
    for (np = 0 ; np <= Count; np++)
    {
        summ += Num_1 + np;
    }
 
    cout << "Cумма всех целых чисел от " << Num_1
         << " до " << Num_2 << " равна " << summ << endl;
    system("pause");
    return 0;
}
Самое обидное, что пока я два дня мучился, пытаясь такую смешную задачку решить.
Так что мне теперь охота свой вариант до рабочего состояния домучать.
Может кто подскажет, где я там напортачил?

Добавлено через 15 минут
Всё, нашёл ошибку. Блин, глупость какая, всё-таки
Надо было в условии цикла i < n сделать (а я как из вики скопировал i < 10, так у меня и осталось).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//======= Вычисляем сумму всех элементов вектора:
    for (int i=0; i < n; i++) {
        myVector.push_back(i);
    }
    int total = 0;
    myIterator = myVector.begin();
    while (myIterator != myVector.end())
    {
      total += *myIterator;
      ++myIterator;
    }
    cout << "Cумма всех целых чисел от " << a
         << " до " << b << " равна " << total << endl;
 
    return 0;
}
Добавлено через 2 часа 13 минут
А вот интересно, как посчитать всю сумму вектора, кроме его самого первого элемента?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru