Mit array Zahlen einlesen Mittelwert ausgeben



  • 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;
    
    }
    


  • markuswenczel schrieb:

    SeppJ schrieb:

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

    ...
    

    Daran solltest du arbeiten. Eine einheitliche Einrückung ist extrem wichtig für die Lesbarkeit und Wartbarkeit!


  • Mod

    markuswenczel schrieb:

    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,

    Oh, hatte gar nicht gesehen, dass es immer noch falsch ist, auf den ersten BLick sah es richtig aus. Überleg mal, welche und wieviele Zahlen du für die Summe addierst. Und versuch mal mit einem Debugger nach solchen Fehlern zu suchen, du bist auf der falschen Fährte mit dem sum. Geh das Programm Schritt für Schritt durch und achte da drauf, wann die Variablen andere Werte annehmen als sie sollten.

    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.

    Eine Schleife führt eine Anweisung immer wieder aus. Diese Anweisung kann auch ein Anweisungsblock sein oder auch eine leere Anweisung.



  • SeppJ schrieb:

    Dein Programm bis hier hin ist ... nicht so toll. Da sollten wir Schritt für Schritt durchgehen.

    Als ersten Schritt wollen wir die Werte einlesen. Das geht bei dir gründlich schief, in jedweder Hinsicht.

    Zunächst einmal überlege dir, ob du wirklich beliebig viele Werte aufnehmen möchtest. Das wäre in C++ sehr einfach, aber Arrays sind das falsche Mittel, da würde man einen std::vector nehmen. Das ist so ähnlich wie ein Array, aber mit veränderlicher Größe.
    Was derzeit bei dir beim Einlesen schiefgeht: z ist immer gleich. Du schreibst immer an die gleiche Stelle. Du musst das z irgendwie erhöhen. Und falls du bei statischen Arrays bleibst, dann pass auf, dass du nicht über die Länge des Arrays hinaus schreibst. Wenn du deinen Code ausbessern möchtest, achte auf diese Punkte. Falls du vector benutzen möchtest (würde ich empfehlen, ist insgesamt einfacher), dann guck in deinem Lehrbuch mal dazu.

    Danke für deine großartige Geduld
    hoffe das passt jetzt so habe die Lösung gepostet und den Titel nicht verändert
    LG
    Markus


  • Mod

    markuswenczel schrieb:

    Danke für deine großartige Geduld
    hoffe das passt jetzt so habe die Lösung gepostet und den Titel nicht verändert

    Jetzt reißt mir aber die Geduld. Zum x-ten Male verunstaltest du mit Absicht den Thread, so dass ihn niemand mehr lesen kann. Hilf dir in Zukunft doch alleine.



  • SeppJ schrieb:

    Ich kann dir helfen, aber nur wenn du versprichst, dass du dieses mal deinen Eröffnungsbeitrag nicht sinnentstellend veränderst, nachdem die Frage beantwortet wurde. Das stört den Forenbetrieb ungemein, wenn du das machst.

    sorry
    habe es jetzt wieder auf die originalmeldung umgestellt,
    wohin soll ich die lösung denn dann schreiben einfach am Schluss nehme ich mal an.
    lg
    markus



  • SeppJ schrieb:

    markuswenczel schrieb:

    Danke für deine großartige Geduld
    hoffe das passt jetzt so habe die Lösung gepostet und den Titel nicht verändert

    Jetzt reißt mir aber die Geduld. Zum x-ten Male verunstaltest du mit Absicht den Thread, so dass ihn niemand mehr lesen kann. Hilf dir in Zukunft doch alleine.

    ich mache das nicht mit Absicht aber ich soll doch wenn ich die Lösung habe das Ergebnis posten ich dachte am Anfang ist das am besten dann sieht es jeder
    verstehe ich darf den ersten Thread nicht verändern

    sorry benutze zum ersten mal ein forum
    lg
    markus



  • markuswenczel schrieb:

    hoffe das passt jetzt so habe die Lösung gepostet ...

    markuswenczel schrieb:

    #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;
    
        ergebnis=((1/(double)anzahl)*(double)sum);
        s=sqrt(ergebnis);
        cout<<"Standardabweichung= "<<s<<endl;
    
        cin>>zahl;
    }
    

    die Berechnung von Standardabweichung und Median ist grob falsch.


Anmelden zum Antworten