Luftdruck-Verteilung

AHBL

Grünschnabel
Hallo :)
Wir behandeln gerade in der Schule das Thema eindimensionale Arrays. Nun haben wir eine Aufgabe bekommen, wo ich so gar nicht weiter komme um ehrlich zu sein.

Zur Aufgabe:
Es sollen maximal 20 float Messwerte eingegeben werden können und dann anhand der eingegebenden Zahlen als Beispiel 1,23 ein Balkendiagramm ausgegeben werden (natürlich zu jedem Messwert den ich eingegeben habe). Dann soll noch wenn ich eine 0 eingebe die Eingabeaufforderung gestopt werden. Ich gebe Wert 1 ein mit 1,23, Wert 2 mit 3,21, Wert 3 mit 2,00, Wert 4 mit 0 und dann soll es keine weitere Eingabe mehr geben. Wenn ich nie eine 0 eingebe sollen alle 20 Messwerte eingegeben werden.

Ich habe angefangen mein Programm zu erstellen und es sieht bis jetzt so aus

C++:
#include <iostream>

using namespace std;

int main ()
{
	float Luftdruck[20], max=0, min=0;
	int Eingabe=0;
	/*char Balken;*/

	do{
	cout << "Bitte geben Sie den Messerwet ein ";
	cin >> Luftdruck[Eingabe];
	Eingabe++;
	}while(Eingabe < 20 || Eingabe != 0);


return 0;
}

So nun komme ich nicht weiter uns suche hier nach Hilfe wie ich das ganze nun machen kann da ich so im Netz und hier nichts hilfreiches gefunden habe vielleicht habe ich auch nach dem falschen gesucht.

MFG
AHBL
 
Hi und Willkommen bei tutorials.de,

Schaut ja schon nicht schlecht aus.

Paar stilistische Kritikpunkte:
a) Man sollte sich eine systematische Groß/Kleinschreibung angewöhnen.
Variablennamen Groß oder klein beginnen, nicht mischen.
b) Zeileneinrückung durchziehen hilft (vor allem bei größeren) Programmen auch sehr.
c) Die Variable max wirst du später für die Balken noch brauchen, aber min? Sinnlos, weg damit.
d) float-Variablen sollten auch Kommazahlen bekommen. "0.0" statt "0". Ist aber meistens egal.
e) In eingabe kommt doch nie eine EIngabe rein. Nenns doch anzahl.

Ein kleiner Fehler:
Bei der while-Bedingung gehört statt Oder || ein Und &&
Mit || reiht auch, wenn ein Teil der Bedingung wahr ist, um in der Schleife zu bleiben.
Dh. Wenn 0 eingegeben wird, das aber noch nicht die 20. Zahl war, wird weitergemacht.
Und wenn es 20 Zahlen sind, die letzte aber nicht 0 wahr,wird auch weitergemacht.
Also && nehmen.

C++:
#include <iostream>
 
using namespace std;
 
int main ()
{
    float luftdruck[20], max = 0.0;
    int anzahl = 0;
 
    do
    {
        cout << "Bitte geben Sie den Messerwet ein ";
        cin >> luftdruck[eingabe];
        anzahl++;
    }while(anzahl < 20 && anzahl != 0);

    return 0;
}

Dann zum Balken...zeichnen kann man in der Konsole ja nicht wirklich.
Man kann aber aus einem Buchstaben, - oder sonstwas oft hintereinander "Balken" bilden.
So irgendwas:
Code:
-----
----------
--
-------

Da die Konsole ja nur eine begrenzte Breite hat, zuerst mal eine Maximallänge ausdenken.
zB. der längste Balken soll 20 - lang sein.

Als Nächstes: Den Maximalwert der Eingaben ermitteln.
In einer Schleife alle wieder durchgehen, von 0 bis anzahl
(dafür ist ein weiteres int zum Zählen notwendig).
Wenn der aktuelle Wert größer als max ist, diesen Wert in max speichern.
C++:
int i;
...
for(i = 0; i < anzahl; i++)
{
    if(luftdruck[i] > max)
        max = luftdruck[i];
}

Nächster Schritt: Wenn max 0.0 ist, hats keinen Sinn weiterzumachen.
Balken wird man dann sowieso keine sehen.
Und mit einem Dividieren durch 0 (später) wird es auch Probleme geben.
Also mit einem if abfangen und ggf. das Programm beenden, ohne Balkenzeug.

Ab hier wirds etwas schulmathematisch, Prozentrechnungen.
Der Maximalwert soll gleichbedeutend mit 20 Strichen sein.
Das bedeutet, pro Strich max/20.0 Bar

Fast zum Schluss,wieder eine Schleife durch alle eingegebenen Werte.
Darin noch eine Schleife, die mehrere Striche für jeden zeichnet
(und danach einen Zeilenwechsel).

Wieviel Striche?
Druckwert / (Max / 20.0)
Wäre es theoretisch zumindest. Da können abe auch kommazahlen rauskommen.
Weil es nur ganze Striche gibt, abrunden bzw. Kommastellen abschneiden.
Ganz einfach, indem man die float-Kommazahl zu einem int umformt (castet).
Sieht man unten.

Komplett:
C++:
#include <iostream>
 
using namespace std;
 
int main ()
{
    float luftdruck[20], max = 0.0;
    int anzahl = 0, i, j;
 
    do
    {
        cout << "Bitte geben Sie den Messerwet ein ";
        cin >> luftdruck[eingabe];
        anzahl++;
    }while(anzahl < 20 && anzahl != 0);

    for(i = 0; i < anzahl; i++)
    {
        if(luftdruck[i] > max)
            max = luftdruck[i];
    }

    if(max > 0.0)
    {
        for(i = 0; i < anzahl; i++)
        {
            for(j = 0; j < ((int)(luftdruck[i] / (max / 20.0))); j++)
            {
                 cout << "-";
            }
            cout << endl;
        }
    }
    return 0;
}
Ungetestet.

Gruß
 
Zurück