Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera.

Slides:



Advertisements
Liknande presentationer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Advertisements

Visual Basic - Genomgång
PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Villkor Booelska operatorer Villkorsatser Switchsatser Villkor och annat.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Programstruktur: C för enchipsdatorer
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Logikprogrammering Ons, 25/9
Operatorer.
2D1311 Programmeringsteknik med PBL
Föreläsning 2. Operatorer Tilldelning Kodblock { } if – satsen Logiska uttryck Att programmera.
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Presupposition gemensam kunskap som inte behöver påstås eller förklaras förutsatt information - bakgrundsantaganden konventionaliserade bärare av implicit.
Iteration i C ”upprepa”
Programmering B PHP Lektion 2
INTRODUKTION TILL PROGRAMMERING
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Programmeringsbegrepp
Programmering B PHP Lektion 3
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Föreläsning 3 Programmeringsteknik och Matlab DD1312
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
Internet A Javaskript.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
Grundläggande programmering
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska operatorer och logiska uttryck -Referenstyper.
1 Flödeskontroll Sekvens Val Upprepning. 2 Logiska operatorer Relationsoperatorer > =
F. Drewes, Inst. f. datavetenskap1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax Flertydighet i kontextfri.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 3. Flödesscheman while For Max/min-algoritm Datatyper Konvertering Dubbelloop (m. For)
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
2D1311 Programmeringsteknik med PBL
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Anders Sjögren Deklarationsområde och funktioner.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 3 Operatorer Flödeskontroll Primitiva datatyperKlasser i API och egna klasser int double byte float char boolean short long String BufferedReader.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
OOP&M - teori1 OOP&M – Föreläsning 3 kap 2-4 Repetition Föreläsning-datayper-syntax-tilldelning.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax.
Selektion jämförande och logiska operatorer
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
KPP053, HT2015 MATLAB, Föreläsning 4
Lektion 4.
Föreläsning 2 Programmeringsteknik DD1310
Föreläsning 3: Booleans, if, switch
Presentationens avskrift:

Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera flödet om ett villkor är uppfyllt eller om vi vill upprepa flera satser. Med if, if-else och switch-satser så kan ett val bland alternativ göras. Med while, for och do-while så kan vi åstadkomma upprepningar i vårt program. Eftersom operatorer ofta används för att göra valen så börjar vi med en genomgång av dom. Cache-minne

Relation, likhet och logiska operatorer Relationsoperatorer mindre än < större än > mindre än eller lika med <= större än eller lika med >= Likhetsoperatorer lika med == inte lika med != Logikoperatorer negation ! logiskt ”och” && logiskt ”eller” || Visa OH med operator precedence and associativity!

Relationsoperatorer Alla relationsoperatorer är binära, dvs de tar två uttryck som operander. Som resultat av operatorerna får vi int värdet 0 (falskt) eller 1 (sant). Exempel a < 3 a > b -1.3 >= (2.0 * x + 3.3) a < b < 3 /* syntaktiskt korrekt men förvirrande. Varför? */ Däremot så är inte följande korrekt: a =< b /* fel ordning på = och < */ a < = b /* mellanslag är inte tillåtna */ a >> b /* bitvis shiftning */ Tabell på s. 150, rita på tavlan

Likhetsoperatorer Likhetsoperatorerna är == och != Exempel: c == ’A’ k != -2 x + y == 3 * z - 7 Men däremot så är inte följande korrekt a = b /* tilldelning */ a = = b - 1 /* extra mellanslag ej tillåtet */ (x + y) =! 44 /* syntax error: samma som (x + y) = (!44) Tabell s. 153 Vanligt nybörjarfel: if (a = 1) /* syntaktiskt korrekt! */ printf(”a är 1”);

Logiska operatorer Logiska operatorer är !, && och || !a !(x + 7.7) !(a < b || c < d) a && b a || b !(a < b) && c 3 && (-2 * a + 7) Men däremot så är inte följande korrekt a && /* en operand saknas */ a | | b /* extra mellanslag */ a & b /* bitwis operation, INTE samma som && */ &b /* minnesadressen till variabeln b */ Tabell s. 155

Semantik I C betecknar heltalsvärdet noll falskt och ickenoll sant. expr1 expr2 expr1 && expr2 expr1 || expr2 noll noll 0 0 noll icke noll 0 1 icke noll noll 0 1 icke noll icke noll 1 1 Tabell s. 156 I C betecknar heltalsvärdet noll falskt och ickenoll sant. Alltså är t.ex. 532 och -345 sant.

”Kortslutning” När datorn utvärderar sanningen i ett uttryck så slutar evalueringen så snart utkomsten är känd Om vi har expr1 && expr2, så kommer inte expr2 att utvärderas om expr1 är falskt. int cnt = 0; while (++cnt <= 3 && (c = getchar()) != EOF) /* do something */ När uttrycket ++cnt <= 3 är falskt så kommer inte nästa tecken att läsas från stdin.

Block Ett block är en mängd deklarationer eller uttryck som är omgivna av krullparenteser {}. Där man kan sätta in ett uttryck så är det tillåtet att lägga in ett block. Blocket är i sig själv ett uttryck. Ett vanligt användningsområde för block är för att åstadkomma den rätta flödet i en if, for eller while-sats. int a = 1, b = 2; if (a > b) printf(”Jaså?”); printf(”a > b!!!”); /* indentering korrekt? */ Exempel på sid. 158

if och if-else Generella formen är if (expr) statement Om expr är ickenoll (dvs. sant) så utförs statement, annars hoppas statement över och kontroll ges till nästa sats. if (grade >= 90) printf(”Congratulations!\n”); printf(”Your grade is %d.\n”, grade); Om grade >= 90 så skrivs ett gratulationsmeddelande ut innan betyget skrivs.

if och if-else if (y != 0.0) /* question: why must we check this? */ x /= y; if (j < k) min = j; printf(”j is smaller than k\n”); if (j < k) { } Rita fler exempel s. 160-162 på tavlan

while Repetition av sekvenser är en av fördelarna med datorer. En dator blir, till skillnad från en människa, aldrig less på att upprepa samma saker hela tiden. while (i++ < n) factorial *= i; while ((c = getchar()) != EOF) { if (c >= ’a’ && c <=’z’) ++lowercase_letter_cnt; ++total_cnt; } Exempel s. 164

cnt_char.c

for for (expr1; expr2; expr3) statement next statement är semantiskt samma sak som expr1; while (expr2) { expr3; }

Exempel for (i = 1; i <= n; i++) factorial *= i; for (j = 2; k % j == 0; ++j) { printf(”%d is a divisor of %d\n”, j, k); sum += j; } Men däremot så är inte följande korrekt: for (i=0, i < n, i += 3) /* semikolon fattas */ sum += i;

Exempel 2 i = 1; sum = 0; for (; i <= 10; ++i) sum += i; gör samma sak som for (; i <= 10; ) sum += i++; Tavlan: i = 1; sum = 0; for ( ; ; ) { sum += i; } oändlig loop men inte följande: i = 1; for ( .... ) sum = 0; for ( .... ) for ( ; ; ) { for ( .... ) if (i > 10) break;

Komma-operator Lägst prioritet av alla operatorer i C har kommaoperatorn , Den är vänster-höger associativ så i ett uttryck av formen expr1 , expr2 så kommer expr1 att utvärderas först och sedan utvärderas expr2 En vanlig användning av kommaoperatorn är i for-loopar for (sum = 0, i = 1; i <= n; ++i) sum += i; for (sum = 0, i = 1; i <= n; sum += i, ++i) /* samma som for ovan */ ; /* tom sats */ for (sum = 0, i = 1; i <= n; ++i, sum += i) /* ej samma resultat! */ ; Bortse från - tecken innan expr1, expr2!!!!

do-while Istället för att göra test i början som while, så gör do-while sitt test i slutet. do { i++; if (i > 10) finished = 1; /* flagga, ej bra programmeringsstil! */ } while (!finished); printf(”Mata in din ålder!\n”); scanf(”%d”, &age); } while (age < 0); En do-while loop kommer alltid att utföras minst ett varv!

break och continue För att bryta det normala flödet, så kan break och continue användas. break bryter den innersta loopen eller switchen. while (1) { /* 1 is always true */ scanf(”%lf”, &x); if (x < 0.0) break; printf(”%f\n”, sqrt(x)); } /* break jumps to here */ Exempel i mitten på sid 180

switch switch är en ”multi-konditions if”. switch (c) { case ’a’: ++a_cnt; break; case ’b’: case ’B’: ++b_cnt; default: ++other_cnt; }

Konditionsoperatorn Konditionsoperatorn ?: är ovanlig då den är en tertiär operator (den tar tre uttryck som operatorer). if (y < z) x = y; else x = z; x = (y < z) ? y : z;