Wątek przeniesiony 2014-10-24 15:11 z C/C++ przez ŁF.

Suma kilku elementów z tablicy.

0

Cześć. Mam do napisania program, który w skrócie ma utworzyć x-elementową tablicę, następnie zsumować y-zakresów (a i b w kodzie) z tej tablicy. Tu pojawia się problem, wydaję mi się, że resztę programu mam dobrze już napisaną, tylko nie wiem w jaki sposób napisać tę sumę tylko kilku elementów tablicy, zamiast wszystkich. No i na koniec ma wypisać te sumy.

#include <iostream>
using namespace std;
int main ()
{
	int x, y, a, b, suma=0;
	int tab[1000];
	cin >> x;
	for (int i=0; i<x; ++i)
	{
		cin >> tab[i];
	}
	cin >> y;
	for (int i=0; i<y; ++i)
	{
		cin >> a >> b;
	}
	for (int i=0; i<x; ++i)
	{

		suma+=tab[i];

	}
	for (int i=0; i<y; ++i)
	{
		cout << suma << endl;
	}		
	return 0;
}
 

Jakby ktoś był zainteresowany to mogę podać całą treść zadania, jest po prostu dość długa ;d. Jeśli są tutaj jakieś rażące błędy to przepraszam, ale dopiero zaczynam :) Dzięki z góry za pomoc

0

wczytujesz 100 elementow

chcesz zsumowac od 10 do 50 elementu wiec robisz

for (int i = 10 ; i < 50 ; i++)
{
//sumowanie
}
//wyswietlenie sumowania

wszystkie te liczby (100, 10, 50) zmiennymi ;)

edit zle zrozumialem zadanie

1

Zakładając, że a < b

for (int i=0; i<y; ++i)
{
    cin >> a >> b;
    suma = 0;
    for (int j = a; j <= b; ++j)   // zakladamy, ze zakresy liczymy wlacznie i sa dobre
        suma += tab[j];
    cout << suma << endl;
}
2
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <numeric>
#include <functional>
using namespace std;

struct Range {
  unsigned x, y;
  Range(): Range(0, 0) {}
  Range(unsigned x, unsigned y): x(x), y(y) { ; }
  friend istream& operator>>(istream& in, Range& r) {
    return in >> r.x >> r.y;
  }
};

int main() {
  unsigned x, y;
  vector<int> tab;
  vector<Range> ranges;
  vector<unsigned> sums;
  cin >> x;
  copy_n(istream_iterator<int>(cin), x, back_inserter(tab));
  cin >> y;
  copy_n(istream_iterator<Range>(cin), y, back_inserter(ranges));
  transform(ranges.begin(), ranges.end(), back_inserter(sums), [&](const Range& r) {
    return accumulate(tab.begin() + r.x, tab.begin() + r.y, 0);
  });
  copy(sums.begin(), sums.end(), ostream_iterator<unsigned>(cout, "\n"));
}
0

Dzięki wielkie. W sumie to miałem bardzo podobny zamysł jak @twonek ale inaczej to pisałem i nie chciało działać. @n0name_l trochę nie mój poziom ;d nawet nie próbuję tego kodu jeszcze zrozumieć, za dużo obcych mi rzeczy :D

3

to przynajmniej spróbuj użyć

std::accumulate(tab+a, tab+b+1,0);

+1 jeśli ma być włącznie do b-tego elementu.

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