Mit array Zahlen einlesen Mittelwert ausgeben


  • Mod

    Wenn dich ein Lehrbuch nichts lehrt, dann ist es ein schlechtes Lehrbuch. Noch viel mehr, wenn, wie du sagt, essentielle Dinge wie std::vector (mit dem diese Aufgabe um so vieles leichter wäre) nur am Rande erwähnt werden. Der Tipp mit dem Wegschmeißen oben war ernst gemeint.

    P.S.: Nachdem ich mal nachgeschlagen habe, was das für Bücher sind ist das kein Wunder: Der Wesley ist eine Kurzreferenz, kein Lehrbuch. Der Willms ist viel zu kurz und ein Buch das selbst auf amazon schon schlechte Kritiken bekommt kann nicht gut sein.



  • SeppJ schrieb:

    Oje. Zwei Dinge die dir konkret helfen sollten:
    1. Rück mal vernünftig ein, dann siehst du, dass da allerlei in der Logik nicht stimmt.
    2. Nimm mal vernünftige Namen für deine Variablen. Du benutzt das x in mindestens drei verschiedenen Bedeutungen wild durcheinander, daher geht das auch schief. Ebenso das i, welches bei dir in einer Zeile zwei verschiedene Bedeutungen hat. Die Namen der Variablen seien ganze deutsche oder englische Wörter.

    Und noch ein paar allgemeine Tipps:
    Du strauchest an den Grundlagen. Lass mal all die Mittelwertberechnungen weg und konzentrier dich auf das einfachste, das Einlesen, damit du da dran lernen kannst.

    Ich gebe dir mal drei Aufgaben. Du magst lachen, weil sie sich leicht anhören, aber ich glaube sie täten dir ganz gut:
    1. Lies überhaupt eine Zahl ein und gib sie wieder aus
    2. Lies eine Zahl ein und gib sie 10x aus. Benutze dazu eine Schleife.
    3. Lies 10 Zahlen ein und gib sie danach wieder aus. Keine Nebenbedingungen wie dass du prüfst ob die Zahl 0 war oder ob cin noch gut ist. Einfach 10 Zahlen lesen und ausgeben. Benutze dazu zwei Schleifen.

    int x;
    int arr[10];
    
    for(int i=0;i<10;i++){
    
    cout<<"Bitte Zahlen eingeben"<<endl;
    cin>>x;
    
           for(int j=0;j<10;j++){
                    arr[j]=x;
    
                          }
    
                          }           
    
    cout<<???;
    


  • SeppJ schrieb:

    Wenn dich ein Lehrbuch nichts lehrt, dann ist es ein schlechtes Lehrbuch. Noch viel mehr, wenn, wie du sagt, essentielle Dinge wie std::vector (mit dem diese Aufgabe um so vieles leichter wäre) nur am Rande erwähnt werden.

    Aber sowohl ein Array als auch ein vector sind absolut nicht das Mittel der Wahl. Wenn ich mich recht erinnere, fordert die Aufgabe aber, sowas zu verwenden. Zunächst gehört dem, der die Aufgabe gestellt hat, eine Handvoll Salz in den Frühstückskaffee.


  • Mod

    Immer noch ganz kalt 😞 . So kalt sogar, dass ich nicht einmal weiß, wo ich noch helfen soll. Rätst du nur? Das sieht aus als hättest du die von mir in der Aufgabenstellung schon genannten Zeilen (2 Schleifen, Eingabe, Ausgabe, Array) hingeschrieben und verschiebst nun so lange hin und her bis zufällig das richtige rauskommt.


  • Mod

    volkard schrieb:

    Aber sowohl ein Array als auch ein vector sind absolut nicht das Mittel der Wahl. Wenn ich mich recht erinnere, fordert die Aufgabe aber, sowas zu verwenden. Zunächst gehört dem, der die Aufgabe gestellt hat, eine Handvoll Salz in den Frühstückskaffee.

    Die Aufgabe ist sinnlos, ja. Aber an sich sind vectoren/Arrays wichtige Sprachelemente und dürfen in einem Lehrbuch nicht kurz kommen.

    @markuswenczel: Mal angenommen du hättest nicht die Anforderung, ein Array zu benutzen. Wüsstest du dann, was zu tun wäre?



  • Das ist wohl das, was SeppJ gemeint hat: Du solltest nicht einfach drauf los programmieren, sondern dir vorher ein paar Gedanken machen.

    Ein Stift + Zettel neben der Tastatur sind immer von Vorteil.

    Schreib mal auf diesen Zettel, wie der Ablaufplan aussehen soll. Ich denke, dir wird klar werden, dass es mit einer verschachtelten Schleife nicht funktioniert.



  • SeppJ schrieb:

    Wenn dich ein Lehrbuch nichts lehrt, dann ist es ein schlechtes Lehrbuch. Noch viel mehr, wenn, wie du sagt, essentielle Dinge wie std::vector (mit dem diese Aufgabe um so vieles leichter wäre) nur am Rande erwähnt werden. Der Tipp mit dem Wegschmeißen oben war ernst gemeint.

    P.S.: Nachdem ich mal nachgeschlagen habe, was das für Bücher sind ist das kein Wunder: Der Wesley ist eine Kurzreferenz, kein Lehrbuch. Der Willms ist viel zu kurz und ein Buch das selbst auf amazon schon schlechte Kritiken bekommt kann nicht gut sein.

    schwere Geburt

    #include <iostream> 
    
    using namespace std; 
    
    int main(){ 
    
    int x; 
    int arr[10]; 
    
    for(int i=0;i<10;i++){ 
    
    cout<<"Bitte Zahlen eingeben"<<endl; 
    cin>>x; 
    
    arr[i]=x; 
                        } 
    
    for(int j=0;j<10;j++){
            cout<<arr[j]; }
    
    }
    


  • markuswenczel schrieb:

    so jetzt habe ich es

    Nein. Gib verschiedene Zahlen ein und betrachte die Ausgabe.


  • Mod

    markuswenczel schrieb:

    so jetzt habe ich es

    Nein. Es funktioniert nicht. Und Zeile 22 bis 31 sind auch mehr als unschön



  • SeppJ schrieb:

    volkard schrieb:

    Aber sowohl ein Array als auch ein vector sind absolut nicht das Mittel der Wahl. Wenn ich mich recht erinnere, fordert die Aufgabe aber, sowas zu verwenden. Zunächst gehört dem, der die Aufgabe gestellt hat, eine Handvoll Salz in den Frühstückskaffee.

    Die Aufgabe ist sinnlos, ja. Aber an sich sind vectoren/Arrays wichtige Sprachelemente und dürfen in einem Lehrbuch nicht kurz kommen.

    @markuswenczel: Mal angenommen du hättest nicht die Anforderung, ein Array zu benutzen. Wüsstest du dann, was zu tun wäre?

    wäre einfacher ja



  • SeppJ schrieb:

    markuswenczel schrieb:

    so jetzt habe ich es

    Nein. Es funktioniert nicht. Und Zeile 22 bis 31 sind auch mehr als unschön

    ups gibt die letzte Zahl 10 mal aus

    Mit Zettel und Stift habe ich bisher immer gearbeitet aber danke für den Tip mit dem Buch das werde ich nicht brauchen können, obwohl ich die Prägungen jetzt erst mal aus dem Kopf bekommen muss,,, 🙄



  • yahendrik schrieb:

    Das ist wohl das, was SeppJ gemeint hat: Du solltest nicht einfach drauf los programmieren, sondern dir vorher ein paar Gedanken machen.

    Ein Stift + Zettel neben der Tastatur sind immer von Vorteil.

    Schreib mal auf diesen Zettel, wie der Ablaufplan aussehen soll. Ich denke, dir wird klar werden, dass es mit einer verschachtelten Schleife nicht funktioniert.

    jop danke



  • markuswenczel schrieb:

    Mit Zettel und Stift habe ich bisher immer gearbeitet aber danke für den Tip mit dem Buch das werde ich nicht brauchen können, obwohl ich die Prägungen jetzt erst mal aus dem Kopf bekommen muss,,, 🙄

    Viele Bücher sind toplastig auf bestimmte Dinge geschrieben, mit denen man erst nach eigenen Grundkenntnissen etwas anfangen kann. Diese Grundkenntnisse zur Ablaufsteuerung und zu Arrays fehlen dir aber noch und du brauchst sie dringend. Beginne also selbst mit kleinen Beispielen, zunächst mit if, dann mit for, und dann mit while etc. In diesen Beispielen fügst du mit cout Ausgaben ein, die zeigen was wo passiert, zugeordnet oder gerechnet wird.

    Jetzt setzt du dich bitte hin und machst deinen eigenen Lernprozess! 🙂 Bedenke, Foren und Bücher sind nur Hilfestellung zum Lernen. Ein fertiger Code für deine Fragestellung bringt dir nichst oder wenig! 😮



  • berniebutt schrieb:

    markuswenczel schrieb:

    Mit Zettel und Stift habe ich bisher immer gearbeitet aber danke für den Tip mit dem Buch das werde ich nicht brauchen können, obwohl ich die Prägungen jetzt erst mal aus dem Kopf bekommen muss,,, 🙄

    Viele Bücher sind toplastig auf bestimmte Dinge geschrieben, mit denen man erst nach eigenen Grundkenntnissen etwas anfangen kann. Diese Grundkenntnisse zur Ablaufsteuerung und zu Arrays fehlen dir aber noch und du brauchst sie dringend. Beginne also selbst mit kleinen Beispielen, zunächst mit if, dann mit for, und dann mit while etc. In diesen Beispielen fügst du mit cout Ausgaben ein, die zeigen was wo passiert, zugeordnet oder gerechnet wird.

    Jetzt setzt du dich bitte hin und machst deinen eigenen Lernprozess! 🙂 Bedenke, Foren und Bücher sind nur Hilfestellung zum Lernen. Ein fertiger Code für deine Fragestellung bringt dir nichst oder wenig! 😮

    #include <iostream> 
    
    using namespace std; 
    
    int main(){ 
    
    int zahl=1,sum=0, anzahl=0; 
    double ergebnis;
    int arr[50]; 
    
    for(int i=0;i<50 && zahl!=0;i++){ 
    
    cout<<"Bitte Zahlen eingeben"<<endl; 
    cin>>zahl; 
    
    arr[i]=zahl; 
    anzahl++;
                        } 
    
    for(int j=0;j<50;j++){ 
            sum=sum+arr[j]; } 
    
    ergebnis=sum/anzahl;
    
    cout<<ergebnis;
    cin>>zahl;
    }
    

  • Mod

    👍

    Darf ich aber vorsichtig fragen: Wirklich selbst gemacht, ganz ehrlich?



  • Ebenfalls 👍

    Und nun machst du zum weiteren Lernen folgendes:
    1. In der 2. Schleife statt 50 den Zähler anzahl einsetzen.
    2. Die 1. Schleife statt for mit while oder do-while realisieren.



  • SeppJ schrieb:

    Oje. Zwei Dinge die dir konkret helfen sollten:
    1. Rück mal vernünftig ein, dann siehst du, dass da allerlei in der Logik nicht stimmt.
    2. Nimm mal vernünftige Namen für deine Variablen. Du benutzt das x in mindestens drei verschiedenen Bedeutungen wild durcheinander, daher geht das auch schief. Ebenso das i, welches bei dir in einer Zeile zwei verschiedene Bedeutungen hat. Die Namen der Variablen seien ganze deutsche oder englische Wörter.

    Und noch ein paar allgemeine Tipps:
    Du strauchest an den Grundlagen. Lass mal all die Mittelwertberechnungen weg und konzentrier dich auf das einfachste, das Einlesen, damit du da dran lernen kannst.

    Ich gebe dir mal drei Aufgaben. Du magst lachen, weil sie sich leicht anhören, aber ich glaube sie täten dir ganz gut:
    1. Lies überhaupt eine Zahl ein und gib sie wieder aus
    2. Lies eine Zahl ein und gib sie 10x aus. Benutze dazu eine Schleife.
    3. Lies 10 Zahlen ein und gib sie danach wieder aus. Keine Nebenbedingungen wie dass du prüfst ob die Zahl 0 war oder ob cin noch gut ist. Einfach 10 Zahlen lesen und ausgeben. Benutze dazu zwei Schleifen.

    soweit bin ich heute gekommen, aber es läuft noch nicht korrekt

    #include <iostream> 
    #include <cmath>
    
    using namespace std; 
    
    int main(){ 
    
    int x,zahl=1,sum=0,anzahl=0; 
    double ergebnis,median,s;
    int arr[50]; 
    
    for(int i=0;i<50 && zahl!=0;i++){ 
    
    cout<<"Bitte Zahlen eingeben"<<endl; 
    cin>>zahl; 
    
    arr[i]=zahl; 
    anzahl++;
    
    for(int j=0;j<50 && j!='\0';j++){ 
            sum=sum+arr[j]; }
    
    ergebnis=sum/anzahl;
    }
    
    cout<<"Mittelwert= "<<ergebnis<<endl;
    
    if(anzahl%2!=0){
    median=(anzahl+1)/2;}
    else if(anzahl%2==0){
    median=0.5*((anzahl/2)+((anzahl/2)+1));}
    x=(int)median;
    cout<<"Median= "<<arr[x-1]<<endl;
    
    ergebnis=((1/anzahl)*sum);
    s=sqrt(ergebnis);
    cout<<"Standardabweichung= "<<s<<endl;
    
    cin>>zahl;
    
    }
    

  • Mod

    Wenn du meinen Tipp mit dem Einrücken berücksichtigen würdest, dann würdest du den Fehler finden.



  • SeppJ schrieb:

    👍

    Darf ich aber vorsichtig fragen: Wirklich selbst gemacht, ganz ehrlich?

    ja aber ich verstehe nicht was da wieder nicht stimmt,
    ich weiß das die Variable sum den Wert nicht behält aber wieso verstehe ich noch nicht,

    EIne Frage zum Semikolon ';', wenn ich es nach einer Schleife verwende wohin springt das Programm dann mir ist nur aufgefallen das wenn ich sie verwende und wenn nicht das Programm ein ganz anderes Verhalten hat.



  • SeppJ schrieb:

    Wenn du meinen Tipp mit dem Einrücken berücksichtigen würdest, dann würdest du den Fehler finden.

    #include <iostream> 
    #include <cmath>
    
    using namespace std; 
    
    int main(){ 
    
    int x,zahl=1,sum=0,anzahl=0; 
    double ergebnis,median,s;
    int arr[50]; 
    int i=0;
    
    do{
    
    cout<<"Bitte Zahlen eingeben"<<endl; 
    cin>>zahl; 
    
    arr[i]=zahl; 
    anzahl++;
    i++;
    
    }while(i<50 && zahl!=0);
    
                        for(int j=0;j<anzahl;j++){ 
                        sum=sum+arr[j];            
                        }
    
    ergebnis=sum/anzahl;
    
    cout<<"Mittelwert= "<<ergebnis<<endl;
    
    if(anzahl%2!=0){
                    median=(anzahl+1)/2;
                    }
    else if(anzahl%2==0){          
                    median=0.5*((anzahl/2)+((anzahl/2)+1));
                    }
    
    x=(int)median;
    cout<<"Median= "<<arr[x-1]<<endl;
    
    //bis hierher funktioniert es Aber s ist immer gleich 0 brauche ich da einen //Pointer um den Wert von sum zu holen???
    ergebnis=((1/anzahl)*sum);
    s=sqrt(ergebnis);
    cout<<"Standardabweichung= "<<s<<endl;
    
    cin>>zahl;
    
    }
    

Anmelden zum Antworten