Höchsten Wert einer Liste
Übersicht

![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja solltest du, wenn du so etwas nicht begreifst wird es bei komplexeren Codes sehr sehr schwer werden ![]() und zitiere keine beiträge, ist nur sinnvoll wenn du auf was antwortest das schon ein paar posts vorher geschrieben wurde mfg Edit: @Midimaster es wurden schon Lösungswege gezeigt, wenn man jetzt die Lösung aufm Silberteller präsentiert ist der Lerneffekt ziemlich klein, das soll jetzt nicht gemein sein, aber es hilft dem Threadhersteller viel mehr ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
- Zuletzt bearbeitet von ozzi789 am Mi, Nov 25, 2009 22:46, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
also, die sind ja wieder alle super hilfsbereit....
hier mal die tipps ein wenig didaktisch zubereitet: solche listen wie deine... stadion5 = stadion/100*zuschauer5*5 .... ..sind bei längeren listen sehr unpraktisch. Dafür gibt es Felder (DIM). Damit kannst Du das besser organisieren, behältst die Übersicht und kannst sie mit FOR-NEXT-Schleifen auch noch alle der Reihe nach durchlaufen lassen. Dein Stadion5 heißt dann Stadion(5) und Dein Zuschauer5 ist jetzt Zuschauer(5). Damit dies in BlitzBasic erlaubt ist, dimensioniertst Du vorneweg die Felder für 30 Werte: DIM Stadion(30) DIM Zuschauer(30) Die Werte kannst Du erst mal so füllen, wie Du es vorhattest: stadion(5) = StadionPlaetze/100*zuschauer(5)*5 stadion(6) = StadionPlaetze/100*zuschauer(6)*6 ..... Allerdings kannst Du statt der 5 oder 6 nun auch eine Variable verwenden: i=5 stadion(i) = StadionPlaetze/100*zuschauer(i)*i das kommt auf das gleiche raus. Und nun kannst Du ganz geschickt alle 30 Werte mit einer Schleife füllen. Die FOR/NEXT-Schleife sorgt dafür, dass der darin stehende Befehl 30x ausgeführt wird und i jeden Wert von 1 bis 30 annimmt. Statt deinen 30 Zeilen genügt nun: For i=5 to 30 stadion(i)=StadionPlaetze/100*zuschauer(i)*i Next wenn Du das verstanden hast, ist es nicht mehr weit bis zum dem Finden des größten Wertes: for i=5 to 30 if Stadion(i)>MaxWert MaxWert=Stadion(i) WoIstMax=i endif Next ergebnis: " Größter Wert beim Preis von: " + WoIstMax + " EUR Einnahmen dann dort: "+MaxWert + "EUR" Was Dir aber jetzt noch fehlt sind die sinkenenden Zuschauerzahlen, die lassne sich auch ganz toll in die erste FOR(NEXT-Schleife einfügen: zuschauer(i)=50-i Code: [AUSKLAPPEN] DIM Stadion(30) DIM Zuschauer(30) For i=5 to 30 zuschauer(i)=50-i stadion(i)=StadionPlaetze/100*zuschauer(i)*i Next For i=5 to 30 If Stadion(i)>MaxWert MaxWert=Stadion(i) WoIstMax=i Endif Next Print "Größter Wert beim Preis von: " + WoIstMax + " EUR " Print "Einnahmen dann dort: "+MaxWert + "EUR" |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lions Antwort war doch schon mehr als ausreichend... | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
an mwp87:
jetzt hat sich Dein neuer Beitrag mit meinem zeitlich überschnitten und ich sehe schon, dass Du das meiste schon selbst erarbeitet hast. Dies ist mir an Deinem Code aufgefallen: es ist gar nicht nötigt, jeden Wert mit jedem Wert zu vergleichen. Durchlaufe die Shleife nur 1x und merke Dir dabei das Maximum und wo es war. |
||
- Zuletzt bearbeitet von Midimaster am Do, Nov 26, 2009 1:38, insgesamt einmal bearbeitet
BBPro2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du hast ne liste von n vielen elementen, die alle einen wert haben
überlege dir wie du am besten (und schnellsten!) rausfindest welcher der größte ist. was würdest du als MENSCH tun ? du würdest vermutlich der reihe nach durchgehen und dir immer merken welcher der größte wert war, den du bisher gesehen hast. d.h. du hast eine variable "TemporaeresMaximum" diese setzt du am anfang auf den wert des 1. elements (wenn du beginnst ist das erstmal das größte, da du ja sonst noch keine gesehen hast) dann vergleichst du es mit dem 2. element ist das 2. größer ersetzt du TemporaeresMaximum durch den wert deiner 2. variable ansonsten belässt du sie wie sie war. dann fährst du fort - mit dem 3. , 4., 5., ..., n. element wenn du jedes element einmal betrachtet hast steht am ende der größte wert aller werte in "TemporaeresMaximum" und du kannst es einfach auslesen. versuche dir immer vorzustellen wie DU das machen würdest, wenn du der PC wärst. und dann bring das gleiche dem pc bei. das ist in sehr sehr vielen fällen ein algorithmus der 1. korrekt und 2. ne sehr gute Laufzeit hat (in dem fall sogar die absolut bestmögliche) |
||
mwp87 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BBPro2 hat Folgendes geschrieben: du hast ne liste von n vielen elementen, die alle einen wert haben
überlege dir wie du am besten (und schnellsten!) rausfindest welcher der größte ist. was würdest du als MENSCH tun ? du würdest vermutlich der reihe nach durchgehen und dir immer merken welcher der größte wert war, den du bisher gesehen hast. d.h. du hast eine variable "TemporaeresMaximum" diese setzt du am anfang auf den wert des 1. elements (wenn du beginnst ist das erstmal das größte, da du ja sonst noch keine gesehen hast) dann vergleichst du es mit dem 2. element ist das 2. größer ersetzt du TemporaeresMaximum durch den wert deiner 2. variable ansonsten belässt du sie wie sie war. dann fährst du fort - mit dem 3. , 4., 5., ..., n. element wenn du jedes element einmal betrachtet hast steht am ende der größte wert aller werte in "TemporaeresMaximum" und du kannst es einfach auslesen. versuche dir immer vorzustellen wie DU das machen würdest, wenn du der PC wärst. und dann bring das gleiche dem pc bei. das ist in sehr sehr vielen fällen ein algorithmus der 1. korrekt und 2. ne sehr gute Laufzeit hat (in dem fall sogar die absolut bestmögliche) das hat mir sehr geholfen danke ![]() |
||
![]() |
Valnar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: und zitiere keine beiträge, ist nur sinnvoll wenn du auf was antwortest das schon ein paar posts vorher geschrieben wurde |
||
[url][/url] |
mwp87 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
tut mir leid kommt nicht mehr vor ![]() |
||
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Will nur zur Vollständigkeit noch eine rekursive Variante hier zum Besten geben ![]() Code: [AUSKLAPPEN] Dim testArray(50)
For I = 0 To 50 testArray(I) = Rand(50) Next testArray(27) = 55 Notify max(0) Function max(stelle) Local erstes = testArray(stelle) If stelle = 50 Then Return stelle End If Local rest = max(stelle+1) If erstes > testArray(rest) Then Return stelle Else Return rest End If End Function Ich finds nur schade, dass Rekursion in Blitz nicht so schön umzusetzen ist. |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group