Funktion die Array-Werte zusammen zählt



  • Hallo,

    bin blutiger Anfänger und sitze seit ein paar Stunden an einer Programmieraufgabe.
    Ein Teil der Aufgabe besteht darin, eine Funktion zu schreiben die die Werte eines Arrays zusammen zählt und zurück gibt.

    Ich hab mich probiert, aber es klappt nicht 😞

    #include <iostream>
    using namespace std;
    
    int main ()
    
    {
    
    	int durchInt(int[])
    
    	{
    		int summe;
    		int a=int[];							  // Array als Variable zugewiesen
    		int arraygroesse= sizeof(a)/ (sizeof a[0]) ;
    
    		for (int i=0; i<arraygroesse; i++)
    
    		{
    			summe+=a[i]  ;
    		}
    
    		return summe;
    	}
    
    }
    

    Leider ist nicht bekannt wie groß das Array ist. Daher mein Versuch mit sizeof.

    Hat jemand einen Tipp?

    Grüße



  • Dieser sizeof-Trick funktioniert nur an der Stelle, wo das Array auch übergeben wird - bei deinem Parameter ist 'int a[]' äquivalent zu 'int* a'. Das heißt, der Aufrufer muß deiner Funktion schon verraten, wie groß das Array ist (entweder indem er explizit die Länge oder den Endpunkt angibt oder indem er als letztes Element einen speziellen Wert verwendet).

    Noch einige Anmerkungen zu deinem Code:
    - du hast deinem Parameter keinen Namen gegeben, damit kannst du ihn auch nicht ansprechen 😉
    - die Definition der Variable a ist so nicht erlaubt
    - du hast vergessen, die Variable summe zu initialisieren

    (PS: Es gibt schon std::accumulate() für diese Aufgabe ;))



  • ...außerdem ist diese Funktionsdefinition innerhalb der main nicht zulässig. Pack deine Funktion über die main.



  • Nur so für die Zukunft: Nutze die C/C++-Tags statt den Code-Tags. Das dadurch resultierende Syntaxhighlighting hilft bei langen oder komplizierten Codes.



  • Habe die Funktion etwas abgeändert.
    Die Größe des Arrays weiß ich jetzt.

    Wie definiere ich a richtig?
    bzw. was wäre ein guter Weg?

    int durchInt(int b[])
    
    	{
    		int summe;
    		int a=int b[];							  // Array als Variable zugewiesen
    
    		for (int i=0; i<5; i++)			
    			{
    				summe+=a[i]
    			}
    
    		return summe;
    	}
    


  • Hi,

    Zeile 5 geht so gar nicht, aber ich weiß auch nicht, was die für einen Zweck hat.

    Du kannst in Zeile 9 direkt auf b zugreifen, da fehlt übrigens ein Semikolon.

    Und summe solltest Du mit 0 initialisieren, das geschieht in C++ nämlich nicht automatisch.

    Außerdem wäre es noch etwas schlauer die Größe der Funktion mitzugeben anstatt diese nur fix einzustellen.

    Und schließlich kannst Du eine Funktion nicht innerhalb einer anderen Funktion deklarieren -> int durchInt(int b[]) {...} außerhalb von int main() {...} verschieben. 🙂

    Man könnte Dir den Code auch direkt schreiben, aber probier's besser selbst anhand der Aussagen hinzubasteln.



  • Potkol schrieb:

    int durchInt(int b[])
    
    	{
    		int summe;
    		int a=int b[];
    

    Wenn schon, dann = b; . Aber a und b haben nicht den selbern Datentyp. a ist ein int und b ein int* . Eigentlich kannst du die Variable a ganz weglassen und einfach mit b arbeiten. Zudem solltest du die Grösse der Arrays als Parameter übergeben. Im letzten Code gehst du strikt davon aus, dass dein Array 5 Elemente besitzt. Wenn du jetzt ein Array übergibst, dessen Grösse < 5 ist hast du undefiniertes Verhalten und wenn es > 5 zählst du nicht alle Elemente zusammen.



  • Okey,

    Summe mit 0 explizit deklariert.
    In Zeile neun hab ich Semikohlon dazu und gleich b verwendet.

    Ich weiß noch nicht, wie ich die Größe übergebe.
    Daher vorerst kein Problem. Das Array ist genau 5 bzw. 4 elemente groß.

    Habe ich Zeile 1 überhaupt richtig definiert so? War mir net sicher, wie ich ein Array "erwarte".

    int durchInt(int b[])
    
    	{
    		int summe=0;
    
    		for (int i=0; i<5; i++)			
    			{
    				summe+=b[i] ;
    			}
    
    		return summe;
    	}
    


  • Der Code sieht schon besser aus!

    Potkol schrieb:

    Habe ich Zeile 1 überhaupt richtig definiert so?

    Nein, eben das Array (besser gesagt der Pointer) ist schon korrekt aber die Funktion sollte noch einen zweiten Parameter haben. Nämlich die Grösse des Arrays.



  • Und Semikohlon kommt nicht von Halbkohle, sondern von halbem Kolon (Doppelpunkt).

    Jetzt reiße Dich von Deinen Fesseln der Unterjochung los und übergebe Deiner Funktion feierlich die Größe des Arrays durch einen zweiten Parameter! 👍


  • Mod

    Eisflamme schrieb:

    Jetzt reiße Dich von Deinen Fesseln der Unterjochung los und übergebe Deiner Funktion feierlich die Größe des Arrays durch einen zweiten Parameter! 👍

    Darf ich als besseren Weg zur Weltrevolution vorschlagen, eine Arrayklasse zu erstellen, die sich ihre Größe merkt? Man könnte sie, z.B. vector nennen 😉 .



  • Das ist natürlich noch revolutionärer, vor allem, da es auch noch die beste Lösung ist!

    Aber ich glaube, er sollte erstmal hinbekommen, mehr als einen Parameter zu übergeben. Das finde ich zum gegebenen sogar noch etwas wichtiger als vector zu verwenden.


Anmelden zum Antworten