William Sandqvist Är Du bra på for-loopar? Ge triangelns höjd: 12 1> * > *** > ***** > ******* > ********* > *********** >......************* >.....*************** >....***************** >...*******************... 11>..*********************.. 12>.***********************. Utmaning vid laborationen: en stjärntriangel på prickad bakgrund.
William Sandqvist while() och for() x = 0; while ( x < 5 ) { sum += x*2; x ++; } x = 0; do { sum += x*2; x ++; } while ( x < 5 ); Avbrottsvilkoret x<5 Det är do while – slingan som passar PIC-processorns instruktionsuppsättning bäst. for ( x = 0 ; x < 5 ; x++ ) sum += x*2; Startvärde x =0 varje varv x++
William Sandqvist C:s for-loop Vi tar hjälp av Achilles (Brad Pitt)
William Sandqvist Zenons paradox och for-loopen Den snabbfotade Achilles ska tävla mot en sköldpadda. Zenon säger att Achilles aldrig kan hinna ifatt sköldpaddan om denna får en meters försprång …
William Sandqvist Varför skulle Achilles inte kunna hinna ikapp sköldpaddan? När Achilles hunnit ifatt försprånget på 1 m, har sköldpaddan redan hunnit ytterligare en bit, och när Achilles väl hunnit fram till den punkten så har ju sköldpaddan gått vidare … Resonemanget kan sedan fortsättas i det oändliga!
William Sandqvist Matematikerns svar Achilles, A hastighet 1 m/s Sköldpaddan, S hastighet ½ m/s försprång 1 m ikapp efter ett oändligt antal iterationer vid sträckan : = S ikapp!
William Sandqvist Vi tar hjälp av C:s for-loop for (s=0, x=1, count=1; count<=limit; count++, x*=2) { s += 1.0/x ; } C:s kommaoperator gör att vi direkt kan initiera sträcka och iterationsnummer. Vi kan även räkna fram 2-potensen och uppdatera iterationsnumret varje varv. I for-loopens ”kropp” räknas den aritmetiska serien fram.
William Sandqvist Programmet zeno.c /* zeno.c -- series sum */ #include #include int main(void) { int count; float s, x; int limit; printf("How many terms do you want?\n"); scanf("%d", &limit); for( s=0, x=1, count=0; count<=limit; count++, x*=2) { s += 1.0/x; printf(”S = %f at count = %d.\n", s, count); } system("PAUSE"); return 0; } Exemplet är från: C Primer Plus, Stephen Prata ISBN
William Sandqvist Programkörning Programkörningen gör det troligt att Achilles hinner ikapp sköldpaddan inom 2 meter från startlinjen. Achilles har hastigheten 1 m/s, så detta kommer att ske efter två sekunder.
William Sandqvist C:s for-loop är flexibel En nedräkning … for( secs = 5 ; secs > 0 ; secs--) Öka i steg om 13 … for( n = 2 ; n < 60 ; n +=13) Räkna bokstäver i stället för siffror … for( ch = ’A’ ; ch <= ’Z’ ; ch++)
William Sandqvist C:s for-loop är flexibel Procentuell ökning … for(skuld=100.0;skuld<150.0;skuld*=1.1) Evighets-slinga … for( ; ; )
William Sandqvist Achilles springer … Fysik i Lund Achilles och Sköldpaddan