Flow controle Keuzes maken
Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){ /* voer iets uit */ } else{ /* voer iets anders uit */ }
Logische constructies Een voorwaarde voor een ‘if’ opdracht moet aan regels voldoen ‘true’ als a kleiner dan b a < b ‘true’ als a kleiner dan b ‘true’ als a groter dan b a > b ‘true’ als a groter dan b ‘true’ als a gelijk is aan b a == b ‘true’ als a gelijk is aan b NB: dit werkt alleen voor de typen int en char !!! ‘true’ als a niet gelijk is aan b a != b ‘true’ als a niet gelijk is aan b Meerdere logische voorwaarden kunnen gekoppeld worden: levert waar op als a < b < c (a < b) && (b < c) levert waar op als a < b < c levert waar als b c (a > b) || (c c
Een voorbeeld De absolute waarde van een getal: int a = -4; if(a < 0){ a = -a; } else{ a = a; } kan uiteraard ook korter if(a < 0){ a = -a; } aangezien a = a niets doet…
Een meervoudige if Soms heb je meer ‘takken’ nodig float p; int bin = 0; /* Halen p ergens van buiten */ if(1.0 < p && p < 1.2){ bin = 1; } else if(p < 1.6){ bin = 2; } else{ bin = 3; } gebruik hiervoor else if
Herhaling N keer (bijna) hetzelfde doen bv: i, voor i =1, 100 bv: i, voor i =1, 100 Niet met de hand: som = 1; som = som + 2; som = som + 3; … som = 1; som = som + 2; som = som + 3; … Maar de for-loop int i, som; for (i = 0; i <= 100; i++){ som = som + i; }
De for-loop int i, som; for (i = 0; i <= 100; i++){ som = som + i; } Initialisatie – bij de eerste keer binnen gaan van de for-loop controle – begrenzing van de loop bijwerken van de loop-variabele (tellertje) ( i++ is hetzelfde als i = i + 1 )
Rijen getallen opslaan Vaak is het resultaat niet één getal maar bv een functie verloop f(x i-1 ), f(x i ), f(x i+1 ) f(x i-1 ), f(x i ), f(x i+1 ) Om deze getallen op te slaan zou men kunnen doen: f1,f2,….fn – maar dat schiet niet op! f1,f2,….fn – maar dat schiet niet op! Vandaar het concept arrays: int sum[N], float fx[N], etc int sum[N], float fx[N], etc
Een voorbeeld met een array int i; int som[100]; som[0] = 0; for (i = 1; i <= 100; i++){ som[i] = som[i-1] + i; } Declaratie van de array van integers De groote van bij compilatie bekend zijn! De loop is recursief en moet daarom bij 1 beginnen. Initialisatie van het 0 de element moet buiten de for-loop gebeuren. Array indices moeten voldoen aan 0 <= i < 100
De while-loop De while-loop draait door totdat aan een conditie is voldaan float a,b,dx; a = 0; b = 1; dx = 0.333; while(a < b){ a += dx; } printf(“a = %f\n”,a); zolang a niet groter is dan b.. tel op bij a a = 1.332
Mind the gap! De oneindige loop: float a,b,dx; a = 0; b = 1; dx = ; while(a < b){ a += dx; } printf(“a = %f\n”,a); de ‘fout’ altijd waar… a wordt alleen maar kleiner! De loop zal eeuwig door gaan!!
De do-while loop De do-while is een subtiele variant op de while-loop De loop wordt minimaal 1x uitgevoerd float a,b,dx; a = 1; b = 0; dx = 0.333; while(a < b){ a += dx; } printf(“a = %f\n”,a); float a,b,dx; a = 1; b = 0; dx = 0.333; do{ a += dx; } while(a < b); printf(“a = %f\n”,a); Resultaat: Resultaat: a = Resultaat: Resultaat: a = vergeet de ‘;’ niet!
Grafische resultaten visualiseren Fysische resultaten zijn vaak ‘functies’ BV veranderingen over tijd BV veranderingen over tijd Functionele vorm in een ruimtelijke parameter Functionele vorm in een ruimtelijke parameter etc etc Visualisatie is een noodzaak! Hiervoor is gplot Hiervoor is gplot Een ‘wrapper’ rond gnuplot voor dit practicum Een ‘wrapper’ rond gnuplot voor dit practicum
Een gplot-voorbeeld #include “gplot.h” int main(void){ /* declaraties e.d. */ for(i = 0; i < 100; i++){ x[i] = i*dx; y[i] = sin(x[i]); } gpl_style(LINES); gpl_data(100,x,y,”Voorbeeld sinus”); gpl_show(); return 0; } Stop de data in arrays – zowel x als y! Vertel gplot hoe de data geplot moet worden (continue lijn) Aantal punten, x & y waarden Titel voor het plaatje Geeft de opdracht de data op het scherm te plotten Introductie gplot-bibliotheek