Suma liczb bez użycia tablicy

0

Cześć,

mam zupełnie podstawowe pytanie... Mianowicie mam zapytać użytkownika ile ma wprowadzić liczb, wprowadzić te liczby, a później program ma wypluć ich sumę, z tym, że nie powinienem używać do tego celu tablicy. Napisałem mniejszą część, natomiast z samą sumą nie mogę sobie poradzić... Uprzedzając, w google znalazłem tylko odpowiedzi na to jak ją wyliczyć z użyciem tablicy :( mógłbym prosić o wskazówkę?

#include <iostream>
using namespace std;

int main()
{
	int ile_liczb;
	int liczby;
	int suma;
	
	cout << "Ile liczb chcesz wprowadzic?" << endl;
	cin >> ile_liczb;
	cout << "Podaj te liczby" << endl;
	cin >> liczby;
}



 
4

Tablicy nie potrzebujesz, bo do sumy po prostu dodajesz ostatnio wczytaną liczbę, którą potem możesz nadpisać, aby do sumy dodać ostatnio wczytaną liczbę... Wystarczy tyle pomocy? :)

0

suma = 0
suma += input

3
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;

int main(){
	cout << accumulate(istream_iterator<int>(cin), istream_iterator<int>(), 0);
}
5

Wersja poprawniejsza: http://ideone.com/whiToh

#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
 
template<class InputIt, class T, class Size>
T accumulate_n(InputIt first, Size n, T init)
{
    while(n --> 0) {
        init = init + *(first++);
    }
    return init;
}

int main(){
    cout << "\nSum-n:";
    int ile_liczb;
    cin >> ile_liczb;
    cout << accumulate_n(istream_iterator<int>(cin), ile_liczb, 0);
}

Sorry, takie mamy STL.

0
kq napisał(a):

Tablicy nie potrzebujesz, bo do sumy po prostu dodajesz ostatnio wczytaną liczbę, którą potem możesz nadpisać, aby do sumy dodać ostatnio wczytaną liczbę... Wystarczy tyle pomocy? :)

Teoretycznie powinno pomóc aczkolwiek niestety nie do końca :( co do powyższych, to ma być w założeniu zrobione najprościej, bez użytych zewn. bibliotek. Mam coś takiego, tylko to jest do... Sami wiecie do czego. Co jest nie tak?

 #include <iostream>
using namespace std;

int main()
{
	int ile_liczb;
	int liczby;
	int suma = 0;
	
	cout << "Ile liczb chcesz wprowadzic?" << endl;
	cin >> ile_liczb;
	cout << "Podaj te liczby" << endl;
	cin >> liczby;

	for(int i = 0; i >= ile_liczb; i++)
	{
		suma += liczby;
		cout << suma << endl;
	}


}
1

Zły warunek pętli, sumę powinieneś wypisywać raz, a nie dla każdej liczby.

A rozwiązania kolegów nie używają żadnych "zewnętrznych" bibliotek.

1
cout << "Podaj te liczby" << endl;
cin >> liczby;

Przecież wczytujesz tylko raz, czyli jedną liczbę. Potem w pętli dodajesz do sumy tę samą liczbę wielokrotnie. Ten kawałek powinien być wewnątrz pętli.

1

@vpiotr

vpiotr napisał(a):

Wersja poprawniejsza: http://ideone.com/whiToh

#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
 
template<class InputIt, class T, class Size>
T accumulate_n(InputIt first, Size n, T init)
{
    while(n --> 0) {
        init = init + *(first++);
    }
    return init;
}

int main(){
    cout << "\nSum-n:";
    int ile_liczb;
    cin >> ile_liczb;
    cout << accumulate_n(istream_iterator<int>(cin), ile_liczb, 0);
}

Sorry, takie mamy STL.

Sprawdziłem proposale C++1z i nie widziałem tam algorytmu accumulate_n, co jest dużym wtfkiem biorąc pod uwagę to, że będzie np. for_each_n.

No dobra ale i tak będzie można/można napisać rozwiązanie tego zadania o wiele zwięźlej przy użyciu ranges (kod pisany z głowy, więc może nie działać ; p):

int n;
std::cin >> n;
std::cout << ranges::v3::accumulate(ranges::v3::istream_range<int>(std::cin) | ranges::view::take(n), 0);

1 użytkowników online, w tym zalogowanych: 0, gości: 1