Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » summenfunktion c++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.12.2006, 16:08 Uhr
carlotta



Hallo,

gibt es eine Summenfunktion in c++, die das gleiche macht wie summe() bei Excel?

Mein Problem:
Um Parameter ausrechnen zu können, müsste ich die Summe von uI * uI' bilden. Die uI und uI' sind in verschiedenen Feldern gespeichert. Geht das irgendwie, dass ich über den Index aufsummiere? und trotzdem die Multiplikation gleichzeitig durchführen kann?

Danke.

Carlotta
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.12.2006, 16:39 Uhr
0xdeadbeef
Gott
(Operator)


Umm...ich muss da jetzt ein bisschen raten, aber wenn ich das richtig verstehe:

C++:
#include <iostream>

template<typename iter_t> int range_sum(iter_t const &start, iter_t const &end) {
  int summe = 0;
  for(iter_t ptr = start; ptr != end; ++ptr)
    summe += *ptr;

  return summe;
}

int main() {
  int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

  std::cout << "Summe: " << range_sum(&array[0], &array[10]) << std::endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.12.2006, 19:08 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hmm, die Funktion funktioniert einwandfrei. Aber was ich nicht verstehe, was wird für das template eingesetzt ? Du benutzt es in der for scheife und in der Parameterliste, aber range_sum wird nichts ala range_sum<int> übergeben. Wieso funktioniert es dann ?
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2006, 13:11 Uhr
0xdeadbeef
Gott
(Operator)


Damit

C++:
std::vector<int> v(10, 2);
int sum = range_sum(v.begin(), v.end());


und vergleichbares auch funktionieren. Wobei zugegeben

C++:
#include <iostream>

template<typename sum_t, typename iter_t>
sum_t range_sum(iter_t const &start, iter_t const &end) {
  sum_t summe(0);
  for(iter_t ptr = start; ptr != end; ++ptr)
    summe += *ptr;

  return summe;
}

int main() {
  int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

  std::cout << "Summe: " << range_sum<int>(&array[0], &array[10]) << std::endl;
}


ne Ecke eleganter ist.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.12.2006 um 13:13 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.12.2006, 15:50 Uhr
Braunstein



Hallo,

Was gefällt euch an accumulate nicht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.12.2006, 16:06 Uhr
0xdeadbeef
Gott
(Operator)


...dass ich sie nicht kannte. Aber du hast natürlich recht, std::accumulate ist dann besser.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.12.2006, 16:45 Uhr
~carlotta
Gast


Hallo,

aber der Vorschlag sieht ja schon ganz gut aus, aber so weit ich das verstehe kann ich da keine Multiplikation einbauen. Ich muss ja in der Summe noch multiplizieren und dann bei beiden Elementen den Index weiterlaufen lassen. Geht das mit einer der beiden genannten Funktionen?

Vielen Dank schon mal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.12.2006, 17:04 Uhr
0xdeadbeef
Gott
(Operator)


Willst du auf Vektormultiplikation hinaus? Dann im Zweifel so:

C++:
#include <algorithm>
#include <vector>

// ...

std::vector<double> vec1, vec2, vec_tmp;
double scalar_product;

// vec1 und vec2 füllen

std::transform(vec1.begin(), vec1.end(), vec2.begin(), std::back_inserter(vec_tmp), std::multiplies<double>());
scalar_product = std::accumulate(vec_tmp.begin(), vec_tmp.end(), 0.0);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.12.2006 um 17:04 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
08.12.2006, 20:05 Uhr
stephanw
localhorst


Zumindest für die Summe ist std::valarray besser, oder ?


C++:
std::valarray<double> v;
// fill it
double sum = v.sum();


--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
09.12.2006, 14:35 Uhr
0xdeadbeef
Gott
(Operator)


Ich Depp. Natürlich,

C++:
#include <iostream>
#include <valarray>

int main() {
  static double const foo[] = { 1.0, 2.0, 3.0 };

  std::valarray<double> v(foo, 3);

  std::cout <<  (v * v).sum() << std::endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: