C Werte aus Array summieren

Dani012

Grünschnabel
Hey,
ich komm absolut nicht weiter und hab hin und her probiert. Vielleicht kann mir jemand helfen :)

Ich möchte aus Scanf eingebene Zahlen aufsummieren. Mein Code sieht dazu so aus:

C:
int main()
{
   int Null=0;
   int Zahl, i;
   int summe;
   int Anzahl = 999;
   int Punkte[999];
 



   printf("Bitte Zahl eingeben:\n\n");
   printf("Zahl 1:  ");
   scanf("%d", &Zahl);


    if(Zahl>Null){

    for(i=2; i<Anzahl; i++){
        printf("Zahl %d:  ", i);
        scanf("%d", &Punkte[I][I][I]);

 if(Punkte[i][I][I][I]==Null){
          
     
    printf("Summe lautet: \n");
}
 
Zuletzt bearbeitet von einem Moderator:

vfl_freak

Premium-User
Moin,

nutze bitte die Code-Tags.
Zudem fehlen Fehlermeldungen oder ggf. eine Beschfreibung des Fehlverhaltens

Hier mal ein grundlegender Link: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/004_c_ein_ausgabe_001.htm

C++:
if(Punkte==Null)
Die Deklaration von "int Null = 0" ist überflüssig, da Du jeden int-Wert direkt vergelichen kannst.
Und Punkte ist ist ein Array, also musst Du auch entsprechend drauf zugreifen.
Also:
C++:
if( Punkte[i] == 0)

Gruß Klaus
 
Zuletzt bearbeitet von einem Moderator:

cwriter

Erfahrenes Mitglied
Hi

ich komm absolut nicht weiter
Das kann vorkommen. :)
und hab hin und her probiert
Das hingegen sollte nicht vorkommen. Überlege dir zuerst, wie du glaubst, dass es funktionieren würde, dann schreibe den Code, dann suche Fehler in diesem Code und verbessere sie. Durch trial & error Code zu schreiben ist sehr ineffizient.

Gehen wir mal durch, was du eigentlich willst: Du willst Zahlen addieren (sagst du zumindest). Das heisst, dass du solange in einer Schleife bleiben willst, wie Zahlen eingegeben werden. Momentan hast du in deinem Code geschrieben, dass du abbrechen willst, falls eine 0 eingegeben wird. Wieso? Ist das keine Zahl?
Zudem hast du ein recht grosses Array der Eingaben definiert. Brauchst du die Eingaben später noch? Die Fragestellung verlangt das zumindest nicht.

Also, aus den grundlegenden Aufgaben
1. Lese Zahlen, solange neue kommen
2. Berechne die Summe aus allen EIngaben

lassen sich folgende Grundbausteine erkennen:
1.
C++:
int tmp = 0;
while(scanf("%d", &tmp)) {

}
(Siehe Definition von scanf(): Der Rückgabewert besagt, wie viele Werte gelesen wurden. Die Schleife wiederholt also, bis ein ungültiger oder gar kein Wert gelesen werden konnte)

2.
C++:
int sum = 0;
//...

sum += tmp;

Und jetzt muss das nur noch zusammengesetzt werden - wie, sollte aber klar sein.

Damit du dennoch ein bisschen Feedback zu deinem Code hast:

C++:
int main()
{
int Null=0; //Hat vfl_freak ja schon gesagt: Macht keinen Sinn. Zudem, wenn schon, dann bitte const int Null = 0. Ansonsten kann man 0 verändern, was mathematisch definitiv nicht erlaubt ist.
int Zahl, i; //i ist nicht initialisiert und wird unten dennoch verwendet - das führt zu Fehlern / undefiniertem Verhalten.
int summe; //Auch diesen Wert solltest du auf 0 setzen.
int Anzahl = 999;
int Punkte[999]; //Du darfst (und solltest) hier int Punkte[Anzahl]; schreiben, damit es keine Probleme gibt, wenn du die Anzahl veränderst.




printf("Bitte Zahl eingeben:\n\n");
printf("Zahl 1: "); //Der gesamte Block ist überflüssig und könnte im Loop stehen.
scanf("%d", &Zahl); //Du speicherst diese Zahl nirgends.


if(Zahl>Null){ //Erlaubst du keine negativen Zahlen? Dann unsigned int verwenden.

for(i=2; i<Anzahl; i++){ //Wenn du die Anzahl tatsächlich limitieren willst, ist das ok. Ginge aber auch ohne Limit direkt (siehe meinen Vorschlag oben)
printf("Zahl %d: ", i);
scanf("%d", &Punkte[i]); //Damit schreibst du immer an Punkte[0]. Nimm stattdessen &Punkte[i].

if(Punkte==Null){ //Ebenso: Punkte[i]


printf("Summe lautet: \n"); //Also die Summe hättest du schon ausgeben können...
}

Alles in allem liegt mir noch etwas am Herzen, was schon im Anfangstext steht: Ich glaube nicht, dass du dich sehr eingehend mit der Aufgabenstellung befasst hast. Es gibt einen Unterschied zwischen "Ich komme nicht weiter" und -"Ich habe mal irgendwas hingeklatscht und es geht nicht, gebt mir mal Tips".
Wir sind eine Community, die sehr gerne hilft, wenn jemand nicht weiterkommt, und klar ist alles als Anfänger manchmal schwierig. Aber bitte: Beschäftige dich in Zukunft ein bisschen mehr mit der Planung. Und während du gerne Fragen stellen darfst, wenn etwas unklar ist, so gilt doch als Grundregel: Erstmal googlen. Damit käme man z.B. auf http://www.c-howto.de/tutorial-arrays-felder-uebungen-loesung-teil1.html als erstes(!) Resultat.

Siehst du: Wir finden so ganz einfache Aufgaben wie deine auch nicht besonders prickelnd: Sie sind wirklich zu basic. Wenn du eine Frage zu einzelnen Funktionen hast, Frage zu generellen Stilrichtungen, Fragen zu Aufgaben, deren Lösung du nicht findest, ist das alles ok. Aber ein Mindestmass an eigenem Aufwand dürfen wir schon erwarten, meinst du nicht?
Denn schlussendlich sollst du ja etwas lernen, und eine der vielen Grundregeln beim Programmieren ist, dass man lernen muss, wie man sucht (googlet) und findet. Wie gesagt: Bei Unklarheiten darfst du immer nachfragen, aber Fragestellungen à la "Hier ist mein allererster Versuch, der nicht funktioniert" sind hier eher unerwünscht.

Gruss
cwriter
 

Dani012

Grünschnabel
Hey,

dankesoweit erstmal.

Ich hab meinen code etwas überarbeitet und abgespeckt. Das mit der Summe bekomm ich aber ehrlich gesagt noch immer nicht hin. Ich hab das Lösungsbeispiel dabei miteinbezogen.
Könntet ihr dabei vielleicht noch einen tipp geben? -.-
wäre super nett :)

Hier der Code
C++:
#include <stdio.h>
#define Anzahl 50
int main()
{

   int Zahl;
   int array[Anzahl], i;
    int summe=0;

    printf("Bitte geben Sie ihre Zahlen ein...\n");
    for(i=0; i<Anzahl; i++){
        printf("Zahl %d:  ", i+1);
        scanf("%d", &array[i]);


    if(array[i]==0){

        printf("Anzahl aller Eingaben:%d\n", i );

        printf("Summe:\n" );







    return 0;
}
}
}
 

vfl_freak

Premium-User
Moin,

womit wir wieder bei Thema "Hinklatschen" wären ... :(
Hast Du mal versucht, diesen Code auszuführen? :rolleyes:

C++:
#include <stdio.h>
#define Anzahl 50
int main()
{
   int Zahl;
   int array[Anzahl], i;  // was mag hier wohl 'Anzahl' sein ??
    int summe=0;

    printf("Bitte geben Sie ihre Zahlen ein...\n");
    for(i=0; i<Anzahl; i++)   // siehe oben !!
    {
        printf("Zahl %d:  ", i+1);  // ??
        scanf("%d", &array[i]);
        if(array[i]==0)
        {
            printf("Anzahl aller Eingaben:%d\n", i );
            printf("Summe:\n" );
            return 0;
        }
    }
}
Woher soll ein Benutzer wissen, dass das Programm mit '0' beendet wird?

Gruß Klaus
 
Zuletzt bearbeitet von einem Moderator:

Dani012

Grünschnabel
Hey Klaus,

Bedingung zum Programm.
Das Programm läuft so lange bis eine 0 einegeben wird.
Zum Schluss soll die Anzahl der eingaben und die Summer derer angezeigt werden.

p.s. Klar hab ich es ausprobiert. Es läuft doch 0o?!?

MfG
 

vfl_freak

Premium-User
Habe jetzt erst das #define Anzahl 50 entdeckt
Sowas solltest Du Dir ganz schnell wieder abgewöhnen!

Java:
int main()
Das geht auch gar nicht
Das muss so ausschauen:
Java:
public static void main(String[] args)

und dann danach:
Java:
public static void main( String[] args )
{
    int anzahl = 50;     // !!!

Gruß Klaus
 
Zuletzt bearbeitet von einem Moderator:

Dani012

Grünschnabel
Ok,
das werde ich zukünftig beachten ;)

Aber wo liegt der Fehler da oben, dass er nicht summiert? 0o
ich finde ihn wirklich nicht und ich gucke schon den halben Tag -.-
Könnt ich vielleichtz einen Tipp haben?
 

cwriter

Erfahrenes Mitglied
Das muss so ausschauen:
Äh? Nein? Haben wir zwischenzeitlich zu C#/Java gewechselt?

das werde ich zukünftig beachten ;)
Wehe. Dein Code ist schon "korrektes" C. (Anführungszeichen daher, dass "korrekt" ein recht weit gefasster Begriff ist).

Ich hab meinen code etwas überarbeitet und abgespeckt.
Ja, hast du. Aber warum fehlt da noch immer das Wichtigste: Die Summe?

Das mit der Summe bekomm ich aber ehrlich gesagt noch immer nicht hin.
Klar. Denn
Ich hab das Lösungsbeispiel dabei miteinbezogen.
stimmt nicht so ganz. Ich habe dir eigentlich mehr als genug gegeben, um das Problem / die Aufgabe zu lösen.

Warum hast du noch immer einen Array, in dem du die Zahlen zwischenspeicherst?

Könntet ihr dabei vielleicht noch einen tipp geben? -.-
Muss ich sagen, dass man in C per '+=' addiert?
Also
C++:
for(i=0; i<Anzahl; i++){
        printf("Zahl %d:  ", i+1);
        scanf("%d", &array[i]);
        summe += array[i];

    if(array[i]==0){

        printf("Anzahl aller Eingaben:%d\n", i );

        printf("Summe: %d\n", summe ); //Hier noch den Wert angeben

    return 0;
    }
}

Und fertig. Ich weiss zwar noch immer nicht, warum du alle Werte zwischenspeichern willst (zumal dies definitiv schlechter ist, wenn du die Werte nicht brauchst, denn du limitierst damit stark die maximale Anzahl Summanden).

Am besten ignorierst du seine bisherigen Hinweise - er ist irgendwie vom rechten Weg abgekommen. Und ich wage mal zu behaupten: Auch vom guten Ton. Dafür bitte ich im Namen der gesamten Community um Entschuldigung.

Bedingung zum Programm.
Das Programm läuft so lange bis eine 0 einegeben wird.
Zum Schluss soll die Anzahl der eingaben und die Summer derer angezeigt werden.
Ok. Warum teilst du uns diese Bedingungen erst jetzt mit?
Wenn du einfach nur die ANZAHL wissen willst, kannst du ja i ganz normal inkrementieren und dann entsprechend ausgeben - die einzelnen WERTE musst du immer noch nicht speichern.
Zudem ist die Bedingung komisch. Eine 0 ist eine gültige Zahl. Aber wenn es die (Haus-)aufgabenstellung erfordert, halt auch inkorrekt.

Ich bewundere deine Standhaftigkeit und "Unverwüstlichkeit" - und bedaure deinen an Mangel Eigeninitiative. Die Aufgabe liesse sich mit ein bisschen googlen lösen. Und du darfst immer fragen - aber ich prophezeihe dir, dass du keine Antworten mehr bekommen wirst, wenn dein Code (und da stimme ich Klaus zu) weiterhin unsauber formatiert ist (die Closing brackets '}' sollten gleich eingerückt sein wie ihre öffnenden Gegenstücke) und du die Antworten nicht genau studierst.
Ich gebe mir grosse Mühe, Erklärungen ausführlich und gut lesbar zu schreiben - wenn dies dann mit einem "Gefällt mir" gewürdigt wird, freut mich das. Es würde mich aber noch viel mehr freuen, wenn es mit der Aufmerksamkeit und liebevoller Mühe gewürdigt werden würde, wie ich aufgewendet habe, um mich in dich hineinzuversetzen und den Text zu schreiben.
Ich hoffe, du verstehst du das.

Gruss
cwriter
 
Zuletzt bearbeitet:

Dani012

Grünschnabel
@cwriter
vielen Dank für deine Hilfe und Mühe. Weiß ich zu schätzen ;) <3

Mein Problem war nicht, dass ich nicht wüsste wie man summiert, sondern nicht wusste an welcher stelle im code es hin musste. Ich hatte es die ganze Zeit an falscher Stelle und deswegen ging es nicht.

Das es ohne Array genauso geht, war mir vorher nicht bewusst. Habs geändert.

Danke nochmal für deine Geduld :D
 
Zuletzt bearbeitet: