Ontwerp van Algoritmen 2 ======= === ========== = Het is belangrijk om veel te OEFENEN en kritisch naar je eigen uitwerkingen te (laten) kijken. Ken de stof van Ontwerp van Algoritmen 1. Met name ook hoe je berekeningen presenteert (phi-schema, staartinvariant). Begin altijd met het geven van een formele specificatie, waarin * de preconditie, * de uitvoer(variabelen) en * de postconditie expliciet zijn aangegeven. Bij lussen ALTIJD expliciet invariant en variante functie vermelden. De enige uitzondering: Toepassing van Linear Search Theorema, maar dat moet dan wel expliciet vermeld worden. Let bovendien op verificatie van preconditie. Bij recursieve routines altijd pre- en postconditie vermelden, alsmede een variante functie. Direct voor elke recursieve aanroep dient de preconditie te gelden en de variante functie voor die recursieve aanroep dient kleiner te zijn dan bij aanvang van de body. Werk bij recursie het gehele stappenplan af: * eerst een formele specificatie, * dan afleiding van geschikte recurrente betrekkingen, * vervolgens een "abstract" programma, * en tenslotte de implementatie. Index out of bounds (i.o.o.b.) leidt i.h.a. tot 0 punten. Programma waarin niet alle invoervariabelen voorkomen leidt i.h.a. tot 0 punten. Programma zonder afleiding levert 0 punten. Afleiding waarin (belangrijke delen van) de preconditie niet expliciet bij de relevante stappen wordt aangehaald leidt i.h.a. tot enig puntverlies. Verwarring van binnen- en buitenlussen leidt tot (flinke) aftrek. Refereren aan variabelen buiten hun scope ook. Declareer variabelen zo lokaal mogelijk (lokale variabelen van een binnenlus mogen niet in de invariant van een buitenlus voorkomen). Inefficiente programma's leiden i.h.a. tot puntenverlies, afhankelijk van de aard van de opgave en de mate van inefficiency. Laat bij formules duidelijk blijken wat hun status/rol is door er tekst bij te schrijven: * Definitie * Gegeven * Preconditie * Postconditie * Stelling * Aanname * Te bewijzen * Invariant * Variante functie * Guard * Berekening * Bewijs