Palmclub forum

Palmclub Forum

alles over je Palm Treo smartphone of PalmOS pda

 
Ga terug   Palmclub forum > PalmOS - Algemeen > Softwareontwikkeling

Registreer FAQ Ledenlijst Kalender Zoeken Berichten van vandaag Markeer forums als gelezen
  #1  
Oud 21 augustus 2006, 09:30
djunclesam djunclesam is offline
Lid
Model: Palm T|X
 
Geregistreerd: 11 juli 2006
Berichten: 39
[HB++] Grootste waarde vinden

Weet iemand hoe ik in HB++ uit een serie getallen de grootste waarde kan vinden. Dat kan natuurlijk met een hele lap 'If, Else en ElseIf' maar toen ging hij zeuren dat mijn form groter is dan 64kb (blijkbaar maximum).

En het moet vast in een paar regeltjes kunnen...
Met citaat reageren
  #2  
Oud 21 augustus 2006, 10:38
Bram's schermafbeelding
Bram Bram is offline
Forumbikkel
Model: Palm Treo 650
 
Geregistreerd: 24 januari 2003
Locatie: onder het tapijt
Berichten: 5.302
Hoe staan de waarden opgeslagen?
__________________
Lezen is ook een FAQ - Freeware PalmOS
Met citaat reageren
  #3  
Oud 21 augustus 2006, 10:49
djunclesam djunclesam is offline
Lid
Model: Palm T|X
 
Geregistreerd: 11 juli 2006
Berichten: 39
Het wordt een programmatje voor een Online voetbal spelletje en ik sla de gegevens van mijn spelers op in een table.

Elke speler heeft verschillende vaardigheden zoals keepen (k) conditie (c) etc... Ik bereken middels volgende formules hun sterkte voor elke positie en stuur deze naar een betreffend veld (dus fldkeeper geeft de keepersterkte van de speler):

FldKeeper.Text=1*k
fldVerdediger.Text=0.1*c+0.03*p+0.87*v
fldVVerdediger.Text=0.33*w+0.67*v
fldMiddenvelder.Text=0.2*c+0.15*t+0.5*p+0.15*v
fldVleugelspeler.Text=0.07*c+0.26*p+0.15*t+0.39*w+0.13*v
fldAanvaller.Text=0.1*c+0.58*s+0.29*t+0.03*p

Nu wil ik de vaardigheid met de grootste waarde (dus waarin de speler volgens deze formules het beste in is) vet gedrukt maken. aangezien ik in de help en op internet (misschien verkeerde zoektermen (?)) niet vond hoe dit moest, heb ik dit gedaan middels de welbekende if, else en elseif functies maar toen werd het dus te groot. Dat zag er dan ongeveer als volgt uit (en zal jullie de hele reeks besparen)

If fldkeeper.Tekst>fldVerdediger.Tekst Then
If fldkeeper.Tekst>fldVVerdediger.Tekst Then
If fldkeeper.Tekst>fldMIddenvelder.Tekst Then
If fldkeeper.Tekst>fldVleugelspeler.Tekst Then
If fldkeeper.Tekst>fldAanvaller.Tekst Then
fldkeeper.Font = hbFontBold 'keepers waarde is grootste
Else
fldAanvaller.Font = hb FontBold 'Aanvaller waarde is grootste
EndIf
ElseIf fldVleugelspeler.Tekst>fldAanvaller.Tekst Then
fldVleugelspeler.Font = hbFontBold 'Vleugelspeler waarde is grootste
Else
fldAanvaller.Font = hbFontBold 'Aanvaller waarde is grootste
EndIf

etc...

Het plan is om misschien nog 1 of 2 posities toe te voegen maar dan wordt het helemaal een onoverzichtelijke bende op deze manier (en dientengevolge ook nog meer data)
Met citaat reageren
  #4  
Oud 21 augustus 2006, 11:06
Bram's schermafbeelding
Bram Bram is offline
Forumbikkel
Model: Palm Treo 650
 
Geregistreerd: 24 januari 2003
Locatie: onder het tapijt
Berichten: 5.302
Ik weet niet hoe statisch die sterkte is, maar als je die in dezelfde tabel opslaat kun je met max werken.
Een andere mogelijkheid is om alle velden in een array zetten waar je makkelijk doorheen kunt lopen.
__________________
Lezen is ook een FAQ - Freeware PalmOS
Met citaat reageren
  #5  
Oud 21 augustus 2006, 12:05
ghia's schermafbeelding
ghia ghia is offline
Senior Palmer
Voornaam: Gerard
Model: Palm Tungsten|W
 
Geregistreerd: 22 juni 2004
Locatie: Ottenburg (B)
Berichten: 2.254
Een andere mogelijkheid is je algebraboek uit de kast te halen voor het vereenvoudigen en oplossen van x vergelijkingen met y onbekenden en het te berekenen.
Maar een subroutine die de waarde met de andere 5 vergelijkt zal wel het eenvoudigst zijn.
bool sub (ref, a, b, c, d, e)
if ref > a and ref > b and ref > c and ref > d and ref > e then ret true else ret false
__________________
Keep on Palming !
Gerard
FFII News
Met citaat reageren
  #6  
Oud 22 augustus 2006, 10:22
fransbr's schermafbeelding
fransbr fransbr is offline
FBTV: Palm TV Gids
Voornaam: Frans
Model: Palm Treo 650
 
Geregistreerd: 22 oktober 2003
Locatie: Sleen
Berichten: 1.450
Form > 64k: Op de Palm mag een resource (bijv een form) of een datablok niet groter zijn dan 64k. Daarom moet je je code een beetje verdelen en dit soort rekenregels niet in een form maar in een module zetten (die je dan weer een andere segmentnaam geeft). If then else is niet altijd fout of inefficient (HB++ zou het even efficient compileren als een ingewikkelde boolean constructie) maar ik heb ook het idee dat een max() fu¤
Met citaat reageren
  #7  
Oud 22 augustus 2006, 10:32
djunclesam djunclesam is offline
Lid
Model: Palm T|X
 
Geregistreerd: 11 juli 2006
Berichten: 39
dat is ook een idee natuurlijk. Maar heb bij nog andere functies nodig om een serie data uit mijn database te kunnen sorteren van groot naar klein dus dan zou ik alsnog van het if then else af moeten.

Ach en zo lang programmee rik nog niet met Basic en lange 'if-construsties' zijn wel bevordelijk voor het overzichtelijk programmeren dus het is zowieso niet voor niets geweest
Met citaat reageren
  #8  
Oud 22 augustus 2006, 15:21
djunclesam djunclesam is offline
Lid
Model: Palm T|X
 
Geregistreerd: 11 juli 2006
Berichten: 39
Citaat:
Oorspronkelijk geplaatst door Bram
Ik weet niet hoe statisch die sterkte is, maar als je die in dezelfde tabel opslaat kun je met max werken.
Geprobeerd maar werkt niet... Waarden opgeslagen in de tabel en dan met de volgende code probeer ik bijvoorbeeld de naam van de beste keeper (vkeeper is de naam in de tabel waar de keepersvaardigheid wordt opgeslagen) in field1 te zetten:

Dim db as New tblSpelers
db.OpenTable hbModeOpenExisting+hbModeReadOnly
db.Max("vKeeper")
Field1.Text=dbAuto.Naam
db.Close

Zo staat het ook (ongeveer) in de help file maar dan geeft hij niet de juiste waarde

Laatst gewijzigd door djunclesam; 22 augustus 2006 om 15:39.
Met citaat reageren
  #9  
Oud 22 augustus 2006, 15:40
Bram's schermafbeelding
Bram Bram is offline
Forumbikkel
Model: Palm Treo 650
 
Geregistreerd: 24 januari 2003
Locatie: onder het tapijt
Berichten: 5.302
Waarom gebruik je ergens dbAuto?
__________________
Lezen is ook een FAQ - Freeware PalmOS
Met citaat reageren
  #10  
Oud 22 augustus 2006, 15:45
djunclesam djunclesam is offline
Lid
Model: Palm T|X
 
Geregistreerd: 11 juli 2006
Berichten: 39
omdat ik (hopelijk) na db.Max de juiste speler heb en dan met dbAuto zijn naam uit de tabel kan halen. Maar heb het ook zonder dbAuto geprobeerd en met een message box zoals in de help staat en dan kwam er ook niet de goede waarde uit... Enige verschil dat zijn op recordset zoeken en ik op Table... dus misschien werkt db.Max alleen in een recordset??
Met citaat reageren
  #11  
Oud 22 augustus 2006, 15:51
Bram's schermafbeelding
Bram Bram is offline
Forumbikkel
Model: Palm Treo 650
 
Geregistreerd: 24 januari 2003
Locatie: onder het tapijt
Berichten: 5.302
Met db.max heb je alleen de maximale waarde. Aan dbAuto wordt niets veranderd. Je moet nu nog zoeken welke naam bij die maximale waarde hoort.
__________________
Lezen is ook een FAQ - Freeware PalmOS
Met citaat reageren
  #12  
Oud 23 augustus 2006, 11:03
djunclesam djunclesam is offline
Lid
Model: Palm T|X
 
Geregistreerd: 11 juli 2006
Berichten: 39
Zo werkt het wel

dim iMax as integer, iTemp as integer, iNamed1 as String

iMax = 0
db.MoveFirst
While Not db.EOF
iTemp = db.vkeeper
if iTemp > iMax then iNamed1 = db.Named
if iTemp > iMax then iMax = iTemp
db.MoveNext
Wend

Field1.Text=iNamed1

Nu eens kijken of we er dan ook de een na grootste uit kunnen krijgen
Met citaat reageren
Reageren

Favorieten/bladwijzers


Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)
 
Discussietools
Weergave

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit


Alle tijden zijn GMT +1. Het is nu 15:00.


Apple iPhone en iPad
(c) Nederlandse Palmclub Stichting 1999-2023