Höchsten Wert einer Liste

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

ozzi789

BeitragMi, Nov 25, 2009 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja solltest du, wenn du so etwas nicht begreifst wird es bei komplexeren Codes sehr sehr schwer werden Smile

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 Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
  • Zuletzt bearbeitet von ozzi789 am Mi, Nov 25, 2009 22:46, insgesamt einmal bearbeitet

Midimaster

BeitragMi, Nov 25, 2009 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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"

Xeres

Moderator

BeitragMi, Nov 25, 2009 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Midimaster

BeitragMi, Nov 25, 2009 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Nov 26, 2009 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Nov 26, 2009 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

Valnar

BeitragDo, Nov 26, 2009 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Nov 26, 2009 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
tut mir leid kommt nicht mehr vor Smile

Hip Teen

BeitragDo, Nov 26, 2009 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Will nur zur Vollständigkeit noch eine rekursive Variante hier zum Besten geben Smile
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"

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group