06A.1 größten Wert in Array bestimmen
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 35 | |
Author | ||
License | CC Attribution - NonCommercial - ShareAlike 3.0 Germany: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/9589 (DOI) | |
Publisher | ||
Release Date | ||
Language | ||
Producer |
Content Metadata
Subject Area | |
Genre |
1
4
30
31
34
00:00
InformationIntegerZahlNumberHidden surface determinationRow (database)MittelungsverfahrenPointer (computer programming)InformationForm (programming)Bus (computing)InternetVariable (mathematics)AerodynamicsFunction (mathematics)Maximum (disambiguation)HilfsvariablePhysical quantityMAX <Programm>C++BitProgrammer (hardware)Iterated function systemInequality (mathematics)Computer animation
Transcript: German(auto-generated)
00:00
Angenommen, ich habe dieses Array aus ganzen Zahlen und ich wüsste schon, was drinnen steht. Typischerweise wird so ein Array natürlich nicht ab Werk gefüllt sein, sondern ich lese die Zahlen, die da drinnen stehen, ein. Das könnten
00:24
Messwerte sein, das könnten Eingaben sein, die könnte ich aus dem Internet gesammelt haben zu einer Datensammlung. In diesem Fall ein dimensionales Array namens A aus ganzen Zahlen und jetzt stehen dann hier schon mal sofort diese sieben ganzen Zahlen drin. Wenn Sie das so hinschreiben,
00:47
wenn Sie das so hinschreiben, müssen Sie auch nicht sagen, wie groß das Array wird. C und C++ suchen sich das dann zusammen. Die sehen, das sind sieben Sachen, dann muss es wohl sieben groß sein. Der erste Job für
01:03
Leute, den größten Wert darin finden, den größten Wert in A finden. Wie können Sie da dran gehen? Ein Gedanke wäre, ich nehme einen IF um festzustellen, ob die erste größer ist als die zweite, die zweite größer
01:22
als die dritte und so weiter. Sie brauchten natürlich ziemlich viele einzelne IFs, weil Sie müssen auch wissen, ob die erste größer ist als die vorletzte und die größer ist als die. Was würde ich erst mal machen, bevor ich mit IFs anfange? Wie kann ich das Ganze ein bisschen effizienter machen? Der Gedanke wäre, also der folgende, Sie vergleichen die ersten
01:46
beiden Zahlen und merken sich, welche größer war, die 23 und dann vergleichen Sie mit der 65 und merken sich, welche größer war, 65, dann vergleichen Sie mit der 32, welche ist größer, 65 oder 32, 65, 65 mit
02:00
87 vergleichen, die 87 ist größer, 87 mit der 32 vergleichen, die 32 ist kleiner, 87 mit der 76 vergleichen. Weiterhin gewinnt die 87. Der Trick ist, ich merke mir immer, was die bis jetzt größte Zahl war. Bis dahin war die größte Zahl die 12, bis dahin war sie die 23, bis dahin die 65, bleibt 65,
02:23
dann die 87, bleibt 87, bleibt 87. Ich gehe eins nach dem anderen durch und merke mir, was die bis dahin größte Zahl war. Merken heißt, ich brauche irgendeine Hilfsvariable, das muss ich gleich mal drüber unterhalten, auf was man die
02:47
sinnvollerweise initialisiert und dann gehe ich mit einer Vorschleife dadurch, mal gerade gucken, 0, 1, 2, 3, 4, 5, 6, also i kleiner 7, i++, so und der
03:11
Job in der Vorschleife ist, das bisherige Maximum mit dem nächsten Wert zu vergleichen. Bis dahin ist das bisherige Maximum 65, das vergleiche ich mit dem
03:25
nächsten Wert und behalte den größeren als das Maximum für die ersten vier. Also vergleichen mit, das heißt, ich müsste wieder einen if haben, Wundeklammern habe, dann brauche ich hier auch die Schweifklammern schönerweise. So, ich möchte vergleichen ob der nächste im Array,
03:48
das wäre ja A und jetzt in eckigen Klammern, i, ich zähle ja durch, 0, 1, 2, ob der nächste im Array größer ist als das, ob der größer ist als das bisherige Maximum, was
04:12
machen sie dann, wenn der größer ist als das bisherige Maximum, wenn der nächste größer ist als das Maximum, was ich bisher hatte, dann ist das wohl
04:22
das neue Maximum. Ich setze also dieses Maximum auf den nächsten hier, A von i und ansonsten, was ist wenn der nächste nicht größer wäre oder wenn er gleich
04:40
wäre, dann gehen sie die Schleife von oben wieder durch. In der Tat lohnt sich gar nicht, das else hier zu machen, das ist schon alles. Max soll der größte Wert bisher sein. Ich vergleiche den größten Wert bisher mit dem nächsten Wert aus der Liste und wenn der nächste Wert größer ist, das if, also wenn das if
05:03
reingegangen wird, wenn der nächste Wert größer ist, toll, dann merke ich mit dem nächsten Wert als den größten. Wenn der nicht größer oder wenn er gleich war, dann war ja der Wert den Max steht schon der richtige, ich muss den gar nicht anfassen, das hier reicht. Letzte Geschichte ist, wie ich denn das jetzt initialisieren sollte, da steht für Max noch kein Anfangswert.
05:23
Das hatte ich schon gesagt, in C kann man nicht häufig genug sagen, in C und C++ ist das so, wenn sie keinen Wert angeben zu Beginn, steht das auf irgendwelchen Fantasiewerten. Auf diese Weise kriegt man wunderschöne Probleme mit seinen Programmen. Wenn da 100 mal der richtige Fantasiewert steht, aber dann beim 100 und 1. Mal nach Auslieferung an den Kunden der
05:42
falsche Fantasiewert steht, wird das ganz schön peinlich. Also man sollte unbedingt immer initialisieren, die modernen Sprachen erlauben das gar nicht anders, C und C++ sind ein bisschen großzügig, zu großzügig. Ich sollte dieses Ding initialisieren. Auf welchen Wert setze ich das? Was
06:03
schreiben Sie hier rein? Wie gesagt, wenn Sie nichts reinschreiben, steht da ein Zufallswert, den gibt es nicht. Es muss tatsächlich in diesen 16 Bit, 32, nein in den 16 Bit, in diesen 16 Bit muss was drinstehen. Da kann nicht
06:24
void oder sowas stehen. Diese Bits sind entweder 0 oder 1. Es gibt nichts anderes. Es gibt an der Stelle nur Zahlen. Ich möchte einfach hier nach dieser Definition für A sagen können, max array von und möchte dann 780 raushaben. Was muss ich dieser Funktion dazu mitgeben an Informationen?
06:48
Okay, ich brauche auf jeden Fall was mit A. Der Zeiger sagt, wo
07:04
dieses Array anfängt. Wo es aufhört, genau. Gibt es noch ein paar Sachen, die ich jetzt ändern muss? Genau. Wunderbar. Die Namen der Variablen
07:34
lerne ich gerade, dass ich dazu noch was sagen muss. Dieses A des
07:42
Array namens A steht innerhalb dieser Schweifklammern und ist außerhalb dieser Schweifklammern außerhalb der Main Funktion nicht sichtbar, nicht bekannt. Wenn hier oben auch noch ein A steht, ist das ein ganz anderes A, das erst mal deklariert werden muss. Hier habe ich es ja X genannt, X, X, X und so
08:05
weiter. Dieses X ist jetzt in diesen Schweifklammern hier oben verborgen und das Max ist in diesen Schweifklammern hier oben verborgen. Sie könnten das Max hier oben auch A nennen. Wir sehen, das hat eine ganz andere Bedeutung als unten das A. Verwirrt alle Leute. Geht durch.
08:24
Dieses A hier oben, formerly known as Max, dieses A hier oben hat den größten, bisher größten Wert und zum Schluss den insgesamt größten Wert. Eine ganz eigene Variable. Dieses A hier unten ist ein Array. Die beiden haben nichts miteinander zu tun. Die leben in verschiedenen Welten.
08:42
Stellen sich vor, das wäre anders. Da müsste man, wenn man eine Bibliothek schreibt, immer darauf achten, dass man Variablennamen hat, die sonst nirgendwo vorkommen. Dann vielleicht immer sagen, oh das ist meine Bibliothek, dann nenne ich den jetzt mal JLA und klar zu machen, das ist mein Name oder so. Das wäre ja ganz fürchterlich. Bei Funktionsnamen oder Klassennamen hat man solche
09:02
Phänomene später, aber dann gibt es dann auch Mittel und Wege, das zu verhindern. Also vorsichtig, was in Schweifklammern eingeführt ist, ist auch nur in diesen Schweifklammern sichtbar und ansonsten nicht. Es kann
09:20
vielleicht länger leben, wenn Sie Static davor schreiben, kann es bis zum nächsten Mal wieder leben. Wenn Sie nicht mal Static davor schreiben, ist es nach den Schweifklammern sogar weg, wie dieses Max. Das ist dann einfach weg. Wenn Sie hier vorne Static davor schreiben, wenn Sie es beim nächsten Mal wieder, wäre an dieser Stelle natürlich blödsinnig. Ich will jedes Mal ein neues Maximum
09:40
berechnen.