Finde Fehler nicht in Programm das Min und Max ausgibt und Balkendiagramm aus Messwerten zeichnet
-
Bitte helft mir und probiert diesen Programmcode aus und sagt mir was hier falsch ist(Bin für jeden Tipp dankbar und weiß einfach nicht mehr weiter):
#include <iostream>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
int einlesen (float * );
void diagramm (float *,int );
float min_und_max (float *);
using namespace std;
const int LAENGE = 20;
int anzahl;
int main ()
{
float messwerte[LAENGE];
char auswahl;do
{
system("cls");
cout << "Luftdruckverteilung in bar \n\n";
cout << "Eingabe der Messwerte \t(E)\n";
cout << "Balkendiagramm \t\t(B)\n";
cout << "Minimum und Maximum \t(M)\n";
cout << "Ende \t\t\t(Q)\n";auswahl=getch();
switch(auswahl)
{
case 'E':
anzahl = einlesen(messwerte);
break;
case 'e':
anzahl = einlesen(messwerte);
break;
case 'B':
diagramm(messwerte,anzahl);
break;
case 'b':
diagramm(messwerte,anzahl);
break;
case 'M':
min_und_max(messwerte);
break;
case 'm':
min_und_max(messwerte);
break;
case 'q':
break;
default :
;
}
}
while (auswahl != 'q');
cout << "Q \t Programmende";
getch();
return 0 ;
}
int einlesen (float *messw )
{
cout << endl << endl;
cout << "Eingabe: " << endl<<endl;
for (int i = 0; i < LAENGE; i++)
{
cout << i+1<<". Messwert (-1 = Ende) : ";
cin >>messw[i];
cout << endl;
if (messw[i] == -1 )
return i-1;
}
return LAENGE-1;
}void diagramm (float *messw,int laenge)
{
cout << endl << endl;
cout << "Balkendiagramm:" << endl<<endl;
double anzahl = 0;
for (int i = 0; i < laenge ; i++)
{
cout << i+1<<". Messwert\t";
if (messw[i] > 0)
{
anzahl=messw[i]/0.1;
for (int j=0;j<=anzahl;j++)
cout <<"X";
}
cout << endl;
}
cout <<"\nDruecken sie eine beliebige Taste um zum Hauptprogramm zurueckzukehren";
getch();
}float min_und_max (float *messw)
{
float min=0;
float max=0;
for(int i=0;i<LAENGE;i++)
{
if(i=0)
{
max=messw[i];
min=messw[i];
}
if(messw[i]>max)
max=messw[i];
else if(messw[i]<min)
min=messw[i];
};
cout<<"Der Maximalwert betraegt: "<<max<<endl<<endl;
cout<<"Der Minimalwert betraegt: "<<max<<endl<<endl;
}
-
Hallo
Du könntest Codetags verwenden und sagen, was nicht stimmt bei deinem Programm.
chrische
-
Naja, compilieren tut es nicht. Schon alleine nicht wegen der letzten 4 Zeilen im Code

-
fehlt nur ein return ..; in min_und_max
@threadersteller, wieso liest du nicht die fehlermeldung?
-
ASDASDASDASDASD schrieb:
Bitte helft mir und probiert diesen Programmcode aus und sagt mir was hier falsch ist(Bin für jeden Tipp dankbar und weiß einfach nicht mehr weiter):
#include <iostream> #include <conio.h> // #include <math.h> // diese Includes sind überflüssig // #include <time.h> // #include <stdlib.h> int einlesen (float * ); void diagramm (float *,int ); float min_und_max (float *); // Return-Typ void reicht hier aus using namespace std; // usw. // statt:: switch(auswahl) { case 'E': anzahl = einlesen(messwerte); break; case 'e': anzahl = einlesen(messwerte); break; // usw. // besser: case 'E': case 'e': anzahl = einlesen(messwerte); break; int einlesen (float *messw ) { cout << endl << endl; cout << "Eingabe: " << endl<<endl; for (int i = 0; i < LAENGE; i++) { cout << i+1<<". Messwert (-1 = Ende) : "; cin >>messw[i]; cout << endl; if (messw[i] == -1 ) return i-1; // richtig wäre return i; } return LAENGE-1; } float min_und_max (float *messw) { float min=0; float max=0; for(int i=0;i<LAENGE;i++) { if(i=0) // und hier ist if( i == 0 ) richtigGruß
Werner
-
Ja Danke jetzt habe ich die kleinen Fehler gesehen und Danke für die kleinen Tipps,
aber irgendwie gibt es Probleme bei der Ausgabe von Min und Max:
Wenn ich für die ersten 5 Messwerte die Zahlen 1,2,3,4,5 eingebe und dann mit dem wert -1 die eingabe beende, erhalte ich ja logischerweise -1 als min und als max bekomme ich auch irgendwas komisches raus.[cpp]
Findet ihr vielleicht den Fehler in der Formel:void min_und_max (float *messw)
{
float min=0;
float max=0;
for(int i=0;i<LAENGE;i++)
{
if(i==0)
{
max=messw[i];
min=messw[i];
}
if(messw[i]>max)
max=messw[i];
else if(messw[i]<min)
min=messw[i];
};
cout<<endl<<endl;
cout<<"Der Maximalwert betraegt: "<<max<<endl<<endl;
cout<<"Der Minimalwert betraegt: "<<min<<endl<<endl;
getch();
}
-
für min darf nicht -1 sondern 1 rauskommen da -1 nur der abbruchwert ist, und für max müsste 5 rauskommen aber bei mir kommt irgendwie 5.34649e+036
-
Du hast nur 5 Elemente in dem Array mit sinnvollen Werten gefüllt, die übrigen Elemente enthalten nur Müll. Und da deine Funktion das komplette Array abtastet, findet sie recht wahrscheinlich "bessere" Minimal- und Maximalwerte in diesem Müll-Bereich. Als Lösung solltest du der Funktion mitteilen, wie lang der benutzte Teil deines Arrays tatsächlich ist (entweder indem du die Anzahl mit übergibst wie bei diagramm oder indem du einen ungültigen Wert als Endemarke setzt (z.B. -1 oder NaN).