[C++] dmv een input file stop criteria veranderen

Pagina: 1
Acties:

  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 06:37
Ik zit met het volgende probleem:
Ik ben een algoritme aan het schrijven dat aan de hand van een input file een bepaald probleem moet oplossen. Nou kan het zijn dat ik de ene keer bv:

code:
1
2
3
4
while(waarde > waarde_uit_input)
{
     ....
}


en voor een ander probleem

code:
1
2
3
4
while(waarde < waarde_uit_input)
{
     ....
}


moet hebben (en ook op andere plekken in mijn code wil moet ik de ene keer < en de andere keer > gebruiken).
Op dit moment los ik dit op door in de input file een variabele op 1 of 0 te zetten en daar tijdens mijn programma op te checken en dan de goede if's en while's gebruik. Ik zat er al over te denken om de check te vervangen door een functie aanroep, zodat ik maar op een plek hoef te checken, maar helaas verschillen de voorwaardes van de if 's en while's soms.
Nou vroeg ik mij dus af of dit misschien op een andere manier op te lossen valt...

Alvast bedankt!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Je vertelt ons de oplossing, maar niet het (bovenliggende) probleem?
Wat is het algoritme en wat wil je bereiken?

  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 06:37
Een echt bovenliggend probleem is er niet. Ik geef aan hoe ik het op dit moment oplos, maar ik vraag me gewoon af hoe het eleganter kan (altijd leuk om overzichtelijkere c++ code te kunnen produceren).
Het betreft trouwens een evolutionair algoritme dat een aantal parameters voor een ander programma probeert te optimaliseren. De output van dat andere programma gebruik ik dan weer om die parameters verder te 'evolueren'. Het vervelnde is dus dat ik misschien op dit moment een zo laag mogelijke waarde wil uit dat programma en straks misschien wel een zo hoog mogelijke... dan moet ik dus ofwel in mijn code alle <'s vervangen door >'s of dus (zoals nu) met een hele berg if's en while's die verder precies hetzelfde doen maar dan onder andere voorwaarden

  • 12_0_13
  • Registratie: April 2004
  • Laatst online: 12-02 13:19
je kan compare (nu met de mooie naam "isMoreOptimalThan()") gebruiken, en de methode waarop je wil vergelijken als een functie-object oid meegeven

C++:
1
if (object_one.isMoreOptimalThan( object_two, Criterion(currentstate)));

waarbij Criterion ook weer gebaseerd kan zijn op een bepaalde state

zoiets?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Dit kun je oplossen met functor objects, callbacks, inheritance van specialized classes, en natuurlijk een simpele if of switch-constructie. Welke van deze methodes de beste is hangt 100% af van wat je ermee wilt: en "ik wil soms een andere while doen dan anders" is daarbij allesbehalve voldoende informatie.

Leg je probleem dus eens uit, want zo schiet het niet op :)

Professionele website nodig?


Verwijderd

Coca-Cola schreef op 08 april 2004 @ 13:07:
Een echt bovenliggend probleem is er niet. Ik geef aan hoe ik het op dit moment oplos, maar ik vraag me gewoon af hoe het eleganter kan (altijd leuk om overzichtelijkere c++ code te kunnen produceren).
Geen echt antwoord op de vraag, maar als erg geinteresseerd bent in het schrijven van elegante code, zou ik je aanraden om Design Patterns aan te schaffen, als je die nog niet bezit. Voor mij een van de beste (programmeer)boeken die bestaan. Bezit je hem wel, dan moet je 'em net zo lang lezen tot je alles uit je hoofd kent >:)

Intuitief denk ik hier aan een Flyweight patroon, die een State gebruikt om de huidige Strategy te kiezen, maar ik moet toegeven dat ik nog steeds nieuwe dingen leer/moet leren uit D.P. en verder dat ik niet weet wat jij precies wilt... Zelf lezen, en zelf kiezen is het beste ;)

[ Voor 5% gewijzigd door Verwijderd op 08-04-2004 14:06 . Reden: url toegevoegd ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
DP klinkt leuk, maar je wil je performance graag aan de goede kant van glaciaal houden.

Een alternatief wat wel snel zou kunnen zijn : in plaats van > en < om te wisselen, vermenigvuldig alle waardes met -1 als je een file opnieuw inleest. 2 > 1, en -2 < -1.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 06:37
Bedankt voor jullie reacties, ik heb idd zo'n soort oplossing gebruikt (MSalters)
Pagina: 1