Kanalnetz (Funktion)
-
ZetaGamma schrieb:
,,int hmin = Hoehe[0];"
Diese Schreibweise sehe ich zum ersten Mal. Deshalb bin ich etwas irritiert.Was für eine Schreibweise denn?
Das deklariert eine ganz normale int-Variable und initialisiert sie mit dem Wert von Hoehe[0].
-
Stimmt, ich hatte irgendwie die ganze Zeit eine Reihe im Kopf. Ich habe da noch eine Frage. Ist
if(Bedingung){ Anweisung 1; }else{ Anweisung2; }äquivalent zu
if(Bedingung1){} if(Bedingung2){} ...Ich sehe nämlich das erste Mal zwei if Schleifen nacheinander aufgeführt.
// Edit: Ich kann es ja selbst ausprobieren!! Tut mir leid, braucht nicht antworten!!
-
Natürlich ist das NICHT equivalent, das steht ja quasi schon da.
ZetaGamma schrieb:
Ich sehe nämlich das erste Mal zwei if Schleifen nacheinander aufgeführt.
Ich glaub, dein Denken bezüglich Programmierung ist noch ein wenig starr.
Wenn morgen jemand mit diesem Code kommen würde:
if(Bedingung1){} if(Bedingung2){} if(Bedingung3){}Würde dich das dann überraschen, weil du nicht wusstest, dass man auch drei if-Anweisungen nacheinander schreiben kann?
Code verändert seine Bedeutung normalerweise nicht, nur weil er in einem anderen Kontext oder wiederholt auftritt. Also einfach ein wenig offen an die Sache rangehen.
-
Ich muss nun leider doch fragen. Es geht um die Lösung. Ich habe mal meine Gedanken dazukommentiert.
int HoehenDifferenz() { int hmin = Hoehe[0]; //deklariere hmin mit initialisierten Wert Hoehe[0] int hmax = Hoehe[0]; //Analog wie obene for (int i=1; i<N; i++) //deklariere Zählvariable i mit Startwert 1, ist i<N zähle +1 { if (Hoehe[i] < hmin) hmin = Hoehe[i]; // Welche hoehe wird hier gemeint ? if (Hoehe[i] > hmax) hmax = Hoehe[i]; //Siehe oben } return hmax – hmin; //Rückgabewert an Hauptprogramm }Ich habe nun Probleme die if Bedingungen nachzuvollziehen. Kann es sein das Hoehe[i] meine Hoehe[N] von der Aufgabe darstellen?
Edit: @qwas Ich denke ich hab es bzgl den Doppelif nun verstanden. Wenn die erste if Bedingung nicht erfüllt ist dann wird die übersprungen und darauf die zweite überprüft. Wird die auch nicht erfüllt geht es zurück zum Anfang der Schleife. Bis irgendwann eine if-Bedingung zutrifft.
Und ja ich bin etwas neu in C++.
-
ZetaGamma schrieb:
Ich habe nun Probleme die if Bedingungen nachzuvollziehen. Kann es sein das Hoehe[i] meine Hoehe[N] von der Aufgabe darstellen?
Natürlich. Du hast ein globales Array namens Hoehe (und weil es global ist, kannst du es auch in der Funktion verwenden) mit N Elementen und die for-Schleife geht da einmal komplett durch. Für jedes Element des Arrays (Hoehe[i]) wird überprüft, ob es kleiner als der kleinste bisher gefundene Wert ist, sowie ob es größer ist als der größte bereits gefundene Wert.
-
Ich überlege seit einer Stunde konstant und ich verstehe es trotzdem immer noch nicht viel besser. Die for Schleife ist mir bekannt. Sollte ich irgendwelche anderen wichtigen Dinge kennen ? Ich habe im Internet noch einmal mir for Schleifen angeschaut, aber diese verstehe ich...
Mich bringen einfach die i, das N und
int hmin = Hoehe[0]
int hmax = Hoehe[0]durcheinander. Kannst du bitte Kommentare schreiben neben dem origenellen Code der sagt was jede Variable macht. Ich denke wenn ich erst einmal ein Beispiel verstehe dann ist es besser nachvollziehbar.
Wieso kann ich zb. es nicht wie folgt lösen:
int HoehenDifferenz()
{
int hmin = 11;
int hmax = 26return hmax – hmin;
}
-
doppelpost
-
doppelpost
Tut mir leid, ich hatte zweimal den editier Button mit dem zittier Button verwechselt.
-
ZetaGamma schrieb:
if (Hoehe[i] < hmin) hmin = Hoehe[i]; // Welche hoehe wird hier gemeint ?
Hoehe[i] natürlich. Steht doch da.
Wenn i == 1, dann Hoehe[1], wenn i == N-1, dann Hoehe[N-1]. Und er geht alle i's von 1 bis N-1 durch.Die Deklaration von Hoehe hast du nicht gezeigt, aber es ist bestimmt ein int array. Also ein Haufen Zahlen hintereinander hingeschrieben. Hoehe[i] ist die i'te Zahl im Array Hoehe.
-
ZetaGamma schrieb:
Sollte ich irgendwelche anderen wichtigen Dinge kennen ?
Ja, Arrays. Vermutlich hapert es daran noch.
Oder hast du vielleicht dein Hoehe-Array nicht mit den in der Tabelle angegeben Werten initialisiert und wunderst dich, woher die Werte hergezaubert werden sollen?ZetaGamma schrieb:
Wieso kann ich zb. es nicht wie folgt lösen:
Naja, du sollst ja eine Funktion schreiben, welche die Differenz für beliebige Höhe-Arrays ausrechnen kannst. Klar kannst du hinschreiben "Die Antwort ist 15", aber dann hast du dich nur als Rechenknecht betätigt und keinerlei Programmierarbeit geleistet. Programmierer sind nicht dazu da, Dinge auszurechnen, sondern dazu, dem Computer beizubringen, wie man Dinge ausrechnet.
-
Sei N = 5 int Hoehe[N] = {11,13,4,5,2}; int HoehenDifferenz() { int hmin = Hoehe[0]; //deklariere hmin mit initialisierten Wert Hoehe[0] int hmax = Hoehe[0]; //Analog wie obene for (int i=1; i<N; i++) //deklariere Zählvariable i mit Startwert 1, ist i<N zähle +1 { if (Hoehe[i] < hmin) hmin = Hoehe[i]; // Welche hoehe wird hier gemeint ? if (Hoehe[i] > hmax) hmax = Hoehe[i]; //Siehe oben } return hmax – hmin; //Rückgabewert an Hauptprogramm }Ich setzte mal die Werte für die Variablen ein. Du kannst ja vergleichen.
hmin = 11 hmax = 11 Schleife i = 1 13 < 11 ist falsch 13 > 11 ist wahr -> hmax = 13 Schleife i = 2 4 < 11 ist wahr -> hmin = 4 4 > 13 ist falsch Schleife i = 3 5 < 4 ist falsch 5 > 13 ist falsch Schleife i = 4 2 < 4 ist wahr -> hmin = 2 2 > 13 ist falsch Schleife i = 4 Schleife, fertig #Du hast jetzt hmax = 13 und hmin = 2 return 13 - 2
-
Das davor ein Array vorhanden ist macht nun einiges klarer, vielen dank! Ich werde mir trotzdem nochmal alle Grundlagen bzgl. Funktionen ansehen, damit ich mit sowas besser umgehen kann. Ich bin noch nicht ganz reif dafür (denke ich), deshalb antworte ich wieder wenn es soweit ist!
-
Ich habe mir jetzt noch einmal alle Grundlagen + Beispiele angeschaut, die es mir eigentlich jetzt ermöglichen sollten, diese Aufageb lösen zu können. Trotzdem will ich es irgendwie nicht verstehen.
Sei N = 5 int Hoehe[N] = {11,13,4,5,2}; //delariere Array mit 5 Variablen & direkt Initliasierungen int HoehenDifferenz() //erstelle Unterprogramm ohne Parameterübergabe, wobei Ausgabe ein int Wert sein wird { int hmin = Hoehe[0]; //Was wird hier gemacht ? Ich denke es werden zwei int hmax = Hoehe[0]; //Variablen initialisiert (mit demselben Wert(11)) for (int i=1; i<N; i++) //I deklarieren mit initialisierten Wert 1 und dabei +1 nach jedem Durchgang aufzählen, wobei die for schleife eintrifft wenn i kleiner ist als N und das ist sie für jedes N!!! { if (Hoehe[i] < hmin) hmin = Hoehe[i]; // ab hier verstehe ich nicht wieso man einfach hoehe[i] setzten darf und wohin das eigentlich führen soll. Wie hätte man selbst darauf kommen können ? if (Hoehe[i] > hmax) hmax = Hoehe[i]; } return hmax – hmin; //Gebe an Hauptprogramm Rückgabewert hmax – hmin }Kann man das irgendwie ganz einfach erklären ? Vlt. denke ich nur zu abstrakt. Ich weiss es ehrlich gesagt nicht.
-
Die Funktion ermittelt das Maximum und das Minimum aus dem Array.
Angefangen wird mit dem ersten Wert aus dem Array für min und max. Das hat den Vorteil, dass man sich um den Wertebereich keine Gedanken machen muss.
Dann wird jedes weitere Element mit den beiden Extrema verglichen. Liegen sie Drüber bzw drunter, werden diese Werte als neue Extrema benutzt.Und am Ende wird die Differenz daraus berechnet.
... und das ist sie für jedes N!!
Nein. Für N = 1 gilt das nicht. für N < 1 ist die Funktion nicht ausgelegt.
Bedenke auch, dass i bei jedem Schleifendurchlauf weiter gezählt wird. Somit wird irgendwann N erreicht und die Schleife bricht ab.Wie hätte man selbst darauf kommen können ?
Indem man sich selber genau dabei beobachtet, wie man das mit Zettel und Stift per Hand macht.
Oder du versuchst das einem Grundschüler zu erklären.~Normalerweise würde man das Array und die ANzahl als Paramter an die Funktion übergeben.~
-
vielleicht verwirrt dich die codeformatierung etwas.
if (Hoehe[i] < hmin) { hmin = Hoehe[i]; } if (Hoehe[i] > hmax) { hmax = Hoehe[i]; }ist es so klarer?
und ansonsten: wenn man den kleinsten und größten wert des Hoehe-arrays bestimmen will, muss man eben alle durchlaufen.
die laufvariable i geht von 0 bis N-1. also werden nacheinander hoehe[0], hoehe[1], hoehe[2], ..., hoehe[N-1] untersucht und geschaut ob der wert kleiner (bzw. größer) als der bisher kleinste (bzw. größte) ist.