Ergebnis 1 bis 4 von 4

Thema: [C++] Summe der Elemente eines eindimensionalen Arrays

  1. #1

    [C++] Summe der Elemente eines eindimensionalen Arrays

    Hallo alle zusammen, ich hab eine Frage bezüglich des Addierens der Elemente eines eindimensionalen Arrays. Eine der Wochenünungen in meinem Studium bezüglich des Einstiegs in Java war, in Java eine Methode zu schreiben, die die Elemente eines Arrays addiert und deren Summe zurückgibt. In Java hatte ich das Ding innerhalb weniger Minuten geschrieben, und es sieht wie folgt aus:

    Code (Java):
     
    public static int sumArray(int[] arr) {
    int sum = 0;
    int soa = arr.length;
    for(int i = 0; i < soa; i++) {
    sum = sum + arr[i]; }
    return sum; }


    Ich habe spaßeshalber auch mal versucht, die gesamte Übung (waren 5 Aufgaben, diese hier war eine davon) in C++ umzusetzen, was bis auf diese Aufgabe hier auch geklappt hat.

    Hier ist die Methode in C++:

    Code (C++):
     
    static int sumArray(int arr[]) {
    int sum = 0;
    int soa = sizeof(arr)/sizeof(int);
    for(int i = 0; i < soa; i++) {
    sum = sum + arr[i]; }
    return sum; }


    Für den Array int bb[3] = { 1, 2, 3 }; gibt diese Methode seltsamerweise aber nur die Zahl 1 aus. Ich habe bereits überprüft, ob sizeof(arr)/sizeof(int) das richtige Ergebnis liefert, aber das tut es, floglich muss es an etwas anderem liegen. Dahingehen bräuchte ich jetzt Hilfe. Ich hab das Programm sowol mit dem gcc, als auch mit dem Visual Studio 13-Compiler compiliert, und bei beiden tritt der selbe Fehler auf.

  2. #2
    Du kannst die Anzahl der Elemente des Arrays nicht in einer Funktion ermitteln, weil lediglich nur der Zeiger des ersten Elements übergeben wird, und nicht eine Kopie des Arrays.
    Demnach ermittelt sizeof(arr) auch die größe des Zeigers, und der ist 4 Bytes groß (32 Bit). Ein Integer ist ebenfalls 32 Bit groß. Deswegen spuckt sizeof(arr)/sizeof(int) auch 1 aus. Eine Möglichkeit wäre, einen zusätzlichen Parameter mit der Elementenanzahl mit zugeben. Also:
    Code:
    static int sumArray(int arr[], int count)
    Meine C-Kenntnisse sind aber auch recht eingerostet. Vielleicht gibt es da auch noch eine elegantere Lösung.

    PS:
    In Java geht es noch einfacher:
    Code:
    int[] arr = {1, 2, 3};
    
    int sum = 0;
    for (int i : arr)
        sum += i;

    Geändert von Whiz-zarD (05.01.2014 um 22:24 Uhr)

  3. #3
    Wenn du c++ nutzen willst (und nicht 'nur' c), wäre es ein stückweit eleganter, gleich die vector Klasse der std ( Referenz: http://www.cplusplus.com/reference/vector/vector/ ) zu verwenden. Dann geht es auch ohne die Länge anzugeben.

    Code (c++):
     
    #include <vector>
     
    int sumVector( const std::vector<int> &vec )
    {
    	int sum = 0;
    	for( int i = 0; i < vec.size(); ++i )
    		sum += vec[i];
    	return sum;
    }
     

  4. #4
    Vielen Dank euch beiden. Das mit den Vektoren ist mir so noch gar nicht in den Sinn gekommen, aber dann werde ich mich mal mit denen näher auseinandersetzen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •