/* feedback BIS bij reeks 9 * PROBLEEM : quickSort * INHOUD FEEDBACK : enkele 'algemeenheden' */ OPM 1 Gelezen: De code "srand(time(0));" in een functie. Bedenking: Dat kan absoluut de bedoeling niet zijn!! Telkens je binnen dezelfde 'tijdspanne' deze functie aanroept, zal de randomgenerator weer op hetzelfde startgetal geijkt worden. Dan is er helemaal niets random aan de reeks getallen die je verkrijgt: er gaan zeeeer veel dubbels tussenzitten. Oplossing: Aanroep van srand gebeurt EENMALIG, in het main-gedeelte. (Wat is het effect als je srand helemaal NIET oproept? Dan krijg je bij elke run van je programma dezelfde getallen! Probeer uit.) OPM 2 Gelezen: index = rand()%v.size(); Bedenking: Indien je hier een randomindex zoekt TUSSEN DE GRENZEN 'links' en 'rechts', ben je niet goed bezig!! index = l + rand()%(r-l+1); is beter! (Zie je waarom die +1 er moet staan?) OPM 3 Foutmelding: maakMeetFunctie, v); geeft als foutmelding ongeveer dit: no matching function for call to `maakMeetFunctie(,...)' Reden en oplossing: je kan een functie niet doorgeven als parameter, als deze functie ergens overloaded werd (dus als er verschillende versies bestaan die telkens een andere parameterlijst nemen). Waarschijnlijk was er een "quicksort(v);" voorzien om een hele vector te sorteren; en een recursieve versie "quicksort(v,links,rechts);" om een deeltje van de vector te sorteren. Geef die recursieve functie een andere naam (bvb "quicksort_recursief(v,links,rechts);" ). OPM 4 Onuitgesproken verzuchting: Hoe vinden we nu ZELF onze fouten, als het om 'tricky' dingen gaat zoals onrechtmatige oproep van functoren, templates die niet willen meewerken,...? Enkele hints: 1. Probeer de functie-oproepen na te bootsen aan de hand van 'geschetste' functies (dus geen (of praktisch geen) werking geven aan de functie; tenzij misschien cout<<- of cerr<<-opdrachten). En dan stapsgewijze nagaan hoe je compiler reageert. Wat pikt hij wel, wat pikt hij niet meer? Voorbeeld voor het probleem dat in OPM 3 aan bod kwam: Blijkbaar vond de 'maakMeetFunctie' de functie 'quicksort' niet. Probeer nu 'n dummy functie aan te maken, die qua vorm op 'quicksort' lijkt, en kijk na wat er bij aanroep van die functie gebeurt. In eerste instantie pikt je compiler dit WEL. Als je echter de dummy functie overloadt, dan werkt het niet meer. (Alternatief voor aanmaak van een dummy functie: verderwerken met de functies van je huidige code, maar alle functionaliteit uitcommentarieren; behalve "cerr<<"-opdrachten en eventuele returns.) void foo(){ cout<<"foo()"< void schrijf(T functie){ functie(); //+/ ga na wat er gebeurt als je gewoon "functie;" intikt! cout<<"schrijf()"<