Eine Fuktion, die ein Histogramm ausgibt.
-
Hallo zusammen,
ich bin gerade ein wenig am verzweifeln. Wir in einer Hausaufgabe folgende Aufgabe bearbeiten und nach drei Tagen lesen und probieren, brauche ich jetzt doch ganz dringend Hilfe.
Zunächst einmal die Aufgabenstellung.
Schreiben Sie eine Funktion, die ein Histogramm ausgibt.
Der Funktionskopf soll folgende Form haben:
void hist( int a[], int n)
Dabei ist a ein Array mit Werten und n die Gröÿe des übergebenen Arrays.
Hier sehen Sie ein Programmfragment und daneben die erwartete Ausgabe:int daten[] = { 3, 5, 1, 2 };
hist( daten, 4 );
*
*
**
** *
****Das habe ich soweit programmiert und kann es leider nicht Ausführen.
#include <stdio.h> void hist(int a[], int n) { // Allgemeine Funktion hist return hist(a, n); } int main(void) { int max = 5; int daten[] = {3, 5, 1, 2}; hist(daten, 4); if(max > daten[0]) { printf("\n"); } else { for(max; max <= daten[0]; max--) { printf("*\n"); } } /* int daten[] = {3, 5, 1, 2}; hist(daten, 4); printf("%i\n", daten); */ return 0; }
Wie muss ich bei der Aufgabe vorgehen und wo sind meine Fehler.
Ich bin für jede Hilfe dankbar...MfG
IB
-
programmiertechnisch recht einfach, nur muss man erstmal auf die Lösung kommen...
erstmal den größten Wert ermitteln
dann das Array durchlaufen
wenn der aktuelle Wert gleich oder größer dem maximalen Wert ist, Stern ausgeben, ansonsten ein Leerzeichen
wenn das Array einmal durchlaufen wurde, den Maximalwert um eins verringern
und nochmal durchlaufen
das ganze sooft, wie es der maximale Wert vorgibt
-
Wie greife ich denn auf die Funktion void hist( int a[], int n) in meiner main-Funktion zu? und wie sieht überhaupt die Funktion aus?
so vielleicht?
void hist(int a[], int n) {
return hist;
}
-
nein... da void als Rückgabewert vorgegeben zu sein scheint, kannst du dort mit return nichts zurückgeben.
Stattdessen würde ich die gesamte Ausgabe direkt in der Funktion hist(...) einbauen.void hist(int data[], int length) { //TODO: ausgeben } int main(void) { int data[] = {3,5,1,2}; int length = 4; hist(data, length); }
-
Vielen Vielen Dank...
Heißt das, dass ich die Anweisungen, die mein Programm durchlaufen muss, alle in meiner hist-Funktion unterbringen?
Und dann in meiner main-Funktion drauf zugreifen? Oder was ist mit TODO: ausgeben gemaint?
-
Heißt das, dass ich die Anweisungen, die mein Programm durchlaufen muss, alle in meiner hist-Funktion unterbringen?
Und dann in meiner main-Funktion drauf zugreifen? Oder was ist mit TODO: ausgeben gemaint?
Entweder das, oder eine zweite Funktion die alle Rechendurchläufe ausführt (die Ergebnisse ggf. in einem geeigneten Datentyp speichert) und diese(n) dann an die hist()-Funktion übergibt zur Ausgabe.
Funktionalität und Ausgabe sollten (im klassischen Sinne) strikt getrennt werden (lässt sich nicht "immer" vermeiden). In Deinem Fall wäre es sauberer/schöner, aber wenn darauf kein Wert gelegt wird, kannst Du Deine Funktionalitäten natürlich direkt in die Ausgabefunktion mit reinpacken.
Gruss
soylent_green