Frage von Angrodo, 46

Kleine Programmierung, kann mir wer helfen?

Hallo ihr Lieben, ich habe Probleme bei einer Aufgabe, die ich mit Orwell Dev-C++ lösen muss.

Hier ist die Aufgabe:

Wiederholungsanweisung

Es sollen N Messwerte eingelesen und verarbeitet werden. Bei jeder Eingabe soll angegeben werden, der wievielte Messwert eingegeben wird. Nach der Eingabe soll der aktuelle Messwert, der größte Messwert, der kleinste Messwert und der Mittelwert der Messwerte berechnet und angezeigt werden.

Welche Wiederholungsanweisung eignet sich für diese Aufgabe besonders?

Ich weiß einfach nicht, wie ich das programmieren soll, sitze schon 4 stunden daran und das ist echt traurig ;( Bitte, kann mir einer helfen? "

Ich wäre euch ewig dankabar!!!

Antwort
von dieLuka, 46

Pseudocode:

i = zähler

n = anzahl

M[i] = array aller messwerte

 für i=1 i<=n i++

    Ausgabe messwert nr i

    if i = 1 dann ist m[i] = m_min=m_max=m_mittel

    if i> 1 dann prüfe if m[i] < m:min dann m_min=m[i] , if m[i] > m_max dann m_max = m[i] M_mittel = M-Mittel+m[i] ausgegeben wird m_mittel/i

next;

Kommentar von Angrodo ,

Oh, das muss ich quasi so aufschreiben, natürlich muss ich noch am Anfang diese Grundlegenden Befehle geben, richtig`? Ich versuche es mal, einen Moment.  ;)

Und danke bis hier hin, ich will programmieren lernen, und danke, dass du mich dabei unterstützst, so lerne ich viel effektiver

Kommentar von Angrodo ,

Also, es würde anfangs so aussehen:

#include <iostream>

int main (void)

{

 ....................

}

std: :cin.get();

return0;

Ich habe zwar die Informationen , aber wie füge ich das zwischen diesen geschweiften klammern ein?

Kommentar von dieLuka ,

Du bennötigst nur zwei Werte von "außen" oder halt mit vorgabewert und das ist die Anzahl der Messwerte und die Messwerte selbst.

Must du die tatsächlich irgendwo einlesen oder stehen die bei deiner Übung dabei?

Davon ausgehend das sowohl die anzahl N als auch die Messwerte bekannt sind musst du zuerst alle Variablen bekannt machen.

also i=1

n=??

m[1]=????

m[2]=????

Wenn die nicht bekannt sind must du die einlesen. Da ist dann die Frage was für eine Vorgabe ihr habt. Du könntest die Werte über eine schleife einlesen z.B.

Sobald die Variablen bekannt sind kannst du sie verwenden. Wie steht ja schon in meinem Pseudocode.

Kommentar von dieLuka ,

using namespace std;

int main(){

int n=10;

int m[n];

int i;

int M_min=0;

int M_max=0;

int M_average=0;

for (i=1;i<=n;i++){

   cin >> m[i];

}

for(i=1;i<=n;i++){

  if(i==1) {

     M_min=m[i];    

     M_max=m[i]; 

     M_average=m[i];

  }

  if(i>1){

        if(M_min > m[i])

             M_min=m[i];

        if(M_max < m[i])

             M_max=m[i];

       M_average=M_average+m[i];

  }

}

cout << " Min:  "<<M_min;

cout << " Max  "<<M_max;

cout << " Average: "<<M_average/n;

}

Kommentar von Angrodo ,

Aha, danke bis hier hin.

Dieser Quelltext ist das mit dem einlesen oder? Weil die Variablen sind nicht bekannt. Die Aufgabe lautete nur so ohne irgend welche Werte.

Kommentar von dieLuka ,

Das ist alles. Das einesen ist

for (i=1;i<=n;i++){

   cin >> m[i];

}

hier kannst du es außprobieren

http://cpp.sh/4ce6p

Kommentar von Angrodo ,

Danke, ich muss nochmal nachdenken über alles und ich komme dann heute so gegen 17 Uhr auf dich zurück, du wirst auf jeden Fall gut bewertet von mir. Und bitte nachsicht haben, bin noch ein Neuling, und Anfänger.

Aber du machst das gut bis jetzt!!

Kommentar von Angrodo ,

Und ich fange an, dich bisschen auszufragen, wenn du nichts dagegen hast. ;)

Warum hast du in der 10 Zeile : int n=10;?

Ich dachte, dass es keine Werte gibt, wie kommst du dann auf 10?

---------------

Warum ist :   int M_max=0?

Das heißt doch, dass die größte Zahl 0 ist. Wie kann denn das sein?

Die kleinste Zahl ist doch 0, wie darf ich das verstehen?

Kommentar von dieLuka ,

Ich initialisiere die mit 0. Ist in diesem fall nicht wirklich notwendig da ich ja als erste anweisung immer m[i] rein schreibe.

Es ist aber sauberer.

http://www.c-howto.de/tutorial-variablen-deklaration.html

M_max bekommt 0 als ausgangswert. Im ersten durchlauf i=1 bekommt es den ersten Messwert egal wie hoch. der gleiche Messwert geht auch in m_min den bei einem Messwert sind min und max gleich.

Beim zweiten messwert wird dann geguckt. Ist er größer als der letzte ersätzt er M-Max ist er kleiner ersetzt er m_min. Jeder weitere messwert wird immer geprüft ob er größer als der bekannte größte wert oder kleiner als der bekannte kleinste ist. ist das  der fall überschreibt er ist das nicht der fall wird er ignoriert.

Kommentar von Angrodo ,

Super danke danke. ich habe da noch eine kleine Erweiterung zu der aufgabe 4, wenn ich die noch hätte, dann würde ich erstmal für 1 Woche am nachdenken sein und würde nochmal alles ordentlich lernen.

Erweitern Sie Ihr Programm zu Einlesen von N Messwerten um eine sichere Eingabe. D.h. bei der Eingabe der Zahl der Messwerte soll nur eine positive ganze Zahl akzeptiert werden. Fehleingaben sollen zu einem Hinweis und zu einer weiteren Eingabemöglichkeit führen.Zählen Sie außerdem mit, wie viele positive und negative Werte eingegeben wurden.Die Ermittlung des größten und kleinsten eingegebene Wertes soll bereits ab dem ersten Wert und ohne eine Sonderbehandlung für diesen Wert erfolgen. Wie belegt man die Werte für den Größten und kleinsten Wert sinnvoll vor?

Kommentar von dieLuka ,

Erweitern Sie Ihr Programm zu Einlesen von N Messwerten um eine sichere Eingabe. D.h. bei der Eingabe der Zahl der Messwerte soll nur eine positive ganze Zahl akzeptiert werden. Fehleingaben sollen zu einem Hinweis und zu einer weiteren Eingabemöglichkeit führen.

int n=0;

do{

cout << "Anzahl n groesser 0 angeben";

cin >> n;

} while (n<1);

Zählen Sie außerdem mit, wie viele positive und negative Werte eingegeben wurden. (hier erweitern wir die einleseroutine)

int m_neg=0;

int m_pos=0;

for (i=1;i<=n;i++){

   cin >> m[i];

   if (m[i]>=0) M-pos=m_pos+1;

  if(m[i]<0)M_neg=M_neg+1;

}

Die Ermittlung des größten und kleinsten eingegebene Wertes soll bereits ab dem ersten Wert und ohne eine Sonderbehandlung für diesen Wert erfolgen.Wie belegt man die Werte für den Größten und kleinsten Wert sinnvoll vor?

Der If i=1 teil entfällt.

for(i=1;i<=n;i++){

        if(M_min > m[i])

             M_min=m[i];

        if(M_max < m[i])

             M_max=m[i];

       M_average=M_average+m[i];

  }

Die vorbelegung ist ein andere Thema. Man kann nicht mit 0 vorbelegen da bei messwerten über 0 M-min ie unterschritten wird. Man kann jedoch M_max mit dem minimalen integer wert vorbelegen und m_min mit dem Maximalen, m_average wird mit 0 vorbelegt.

Jeder Messwert muss größer oder gleich dem minimalen interger und kleiner oder gleich dem maximalen sein.

Kommentar von Angrodo ,

Verstehe,  hmm... Ich merke gerade, also bei der Aufgabe 4_

Er sollte bei jedem Messwert, den ich gerade eingebe. Hier hat es jemand so gemacht, und das soll richtig sein irgendwie.

Schau mal

#include <stdio.h>

#include <stdlib.h>

int main (){

float eingabe;

float summe =0;

float mittelwert;

int zaehler = 0;

float min ;

float max;

do{

printf( "\Bitte geben Sie einen Messwert ein \n \n");

scan ("%f", & eingabe);

zaehler = zaehler +1;

summe = summe + eingabe;

printf("\n Anzahl der eingegebenen Messwerte:%i \n", zaehler);

printf("\ n Aktueller Messwert:%f \n", eingabe);

if (zaehler == 1) {

max= eingabe ;

min= eingabe;

}

else if (eingabe < min){

min=eingabe;

}

else if ( eingabe > max) {

max= eingabe;

}

printf("\n Minimaler Messwert : %f \n", min);

printf("\n Maximaler Messwert: %f \n", max);

mittelwert= summe/zaehler;

printf("\n Mittelwert:              %\n", mittelwert),

}

while (1==1=;

}

----------------------------------

Das wäre richtig, sagte einer, der das auch macht.

Das unterscheidet sich von deinem aber. Wer hat jetzt recht? ; (

Kommentar von Angrodo ,

Verbesserung           while(1==1);

Kommentar von dieLuka ,

Das ist einfah ein etwas anderer ansatz.

Float anstelle von int macht sinn. Würde ich übernehmen.

if (zaehler == 1) {

max= eingabe ;

min= eingabe;

} wiederspricht der anforderung keine sonderregelung für den ersten eingabewert. das hatte ich in der ersten version ja auch.

Diese Lösung ließt mindestens einen Wert 1 aber ohne ende und gibt für jeden Wert min max und average an. Meine Lösng fragt erst nach der Anzahl der Werte, ließt diese dann ein und gibt einmalig min, max und average ein.

Das erfüllt so wie ich das sehe beides die anforderung.

Kommentar von Angrodo ,

Denn da steht bei der Aufgabe 4 ,,Bei jeder Eingabe soll angegeben werden....''

Kommentar von dieLuka ,

Interpretation. Hier hst du geschrieben:

"Erweitern Sie Ihr Programm zu Einlesen von N Messwerten um eine sichere Eingabe. D.h. bei der Eingabe der Zahl der Messwerte soll nur eine positive ganze Zahl akzeptiert werden." Die Anzahl der Messwerte soll abgefragt werden while 1==1 ist daher unpassend.

Fehleingaben sollen zu einem Hinweis und zu einer weiteren Eingabemöglichkeit führen.Zählen Sie außerdem mit, wie viele positive und negative Werte eingegeben wurden.Die Ermittlung des größten und kleinsten eingegebene Wertes soll bereits ab dem ersten Wert und ohne eine Sonderbehandlung für diesen Wert erfolgen. " Das steht nichts von ausgabe. Das kann aber durch ein einfaches cout erweitert werden. If(zaehler==1) ist aber eine Sonderbehandlung

"Wie belegt man die Werte für den Größten und kleinsten Wert sinnvoll vor?"

Kommentar von Angrodo ,

Ich weiß es nicht, aber ich meine DAMIT die AUFGABE 4  also die erste aufgabe, nicht die weiterführende.

Kommentar von Angrodo ,

Man muss da ohne Arrays arbeiten habe ich gehört

Kommentar von dieLuka ,

Langsam wird es unübersichtlich.

Ich hab den code noch einmal zusammen geschrumpft. Ohne Array, mit angabe der anzahl pos und neg Werte und ohne sonderbehandlung für den ersten Fall und mit Ausgabe.

http://cpp.sh/6p7r

Kommentar von Angrodo ,

Danke, das reicht hier erstmal, hehe. Wird zu unübersichtlich. Danke dir viel mals!!!!

Kommentar von Angrodo ,

Ah so der zeigt mir irgendwie fehler bei zeile 12

Kommentar von dieLuka ,

#include <limits> nicht vergessen. Wenn du es auf der webseite mit run ausführst läuft es fehlerfrei (bei mir zumindest)

Kommentar von Angrodo ,

Hmm.... bezieht sich jetzt deine Letzte Aufgabe auf die 1. oder die 2. Aufgabe?  : )

http://cpp.sh/6p7r

Kommentar von Angrodo ,

Ich benutze ja Dev-C++

Wenn ich den Quellcode kopiere, dann sagt er, dass in zeile 12 etwas nicht stimmt.

Kommentar von dieLuka ,

Das sind alle bisher gestellten anforderungen in einem Programm.

Probier es online aus dann siehst du wie es funktioniert und poste mal die Fehlermeldung hier rein. Ggf. must du das mit den Limits anders machen aber das kann ich dir ohne Fehlermeldung nicht sagen.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten