Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program



Relevanta dokument
Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Klassdeklaration. Metoddeklaration. Parameteröverföring

Programmering A. Johan Eliasson

Programmeringsteknik med C och Matlab

SMD 134 Objektorienterad programmering

Parameteröverföring. Exempel. Exempel. Metodkropp

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Heltal(int) Programmeringsteknik 54

TDIU01 - Programmering i C++, grundkurs

Enkla datatyper minne

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Data, typ, selektion, iteration

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Föreläsning 1 & 2 INTRODUKTION

TDIU01 - Programmering i C++, grundkurs

F4. programmeringsteknik och Matlab

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Tentamen OOP

Övning2. Variabler. Data typer

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

1 Funktioner och procedurell abstraktion

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Föreläsning 3: Booleans, if, switch

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Programmering i C, 7,5 hp

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Grunderna i stegkodsprogrammering

Grundläggande programmering med C# 7,5 högskolepoäng

Skizz till en enkel databas

Variabler och konstanter

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Loopar och datatyper. Föreläsning 3

OOP Objekt-orienterad programmering

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Loopar och datatyper. Föreläsning 3

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Språket Python - Del 1 Grundkurs i programmering med Python

Uttryck och villkor. Föreläsning 2

Föreläsning 2: Avlusning och antilustekniker

TAIU07 Matematiska beräkningar med Matlab

Objektorienterad Programmering (TDDC77)

Pseudokod. Arbetets gång

Iteration while-satsen

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Exempel på ett litet Ada-program

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 4. Val, boolska värden, läsbarhet, osv

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Villkor och tester. Utförande satser bygger upp metoderna, man brukar finindela detta i: sekvenser. Ett program består i princip av: selektioner (val)

Lathund. C för inbyggda system

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Objektorienterad programmering Föreläsning 4

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Att använda pekare i. C-kod

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Introduktion till PHP

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Föreläsning 3. Iteration while-satsen

"if"-satsen. Inledande programmering med C# (1DV402)

4 Sammansatta datatyper

OOP Objekt-orienterad programmering

Beräkningsvetenskap föreläsning 2

C konstruerades i början på sjuttiotalet av Dennis Ritchie vid Bell Laboratories.

Visual Basic, en snabbgenomgång

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

DD1314 Programmeringsteknik

Grunderna i SQL del 1

Testning. 1. Inledning

Föreläsning 2 Programmeringsteknik och C DD1316

Repetition C-programmering

Uttryck och villkor. Föreläsning 2

Lektion 4. Datateknik A, Java I, 5 poäng

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

C-programmering, föreläsning 1 Jesper Wilhelmsson

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Programmeringsteknik I

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Objektorienterad programmering Föreläsning 2

Introduktion C-programmering

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

översiktskurs (5DV031)

Objektorienterad programmering i Java

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret L0 - Grunder i C++

Programmering för språkteknologer I, VT2012. Rum

Instuderingsfrågor till Steg 1

Föreläsning 3-4 Innehåll

Transkript:

Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik för ingenjörer, VT06 2 Repetition Repetition - Programmering i C Vad innehåller ett programspråk? Syntax - Språkets grammatik Ord: int, main symboler: +=,& Regler: datatyp identifierare = uttryck ; Semantik - Vad språket betyder Programmeringsteknik för ingenjörer, VT06 3 Programmeringsteknik för ingenjörer, VT06 4 Repetition Ett första C-program Repetition - Vad C består av /* Skriver ut "Hello world!" på skärmen*/ printf("hello world!\n"); Preprosessordirektiv Mainfunktion Kommentar funktionsanrop Avslutar programmet Identifierare min_variabel, test123, _namn, _namn Operatorer Aritmetiska + - * / % Tilldelning och beräkning += = ++? Avdelare { ( ;, Konstanter 77, textsträng 3.45, a Nyckelord void, return, int... Programmeringsteknik för ingenjörer, VT06 5 Programmeringsteknik för ingenjörer, VT06 6 1

Repetition - Variabler datatyp identifierare ; int t; datatyp identifierare, identifierare,..., identifierare; float x, y, z; datatyp identifierare = uttryck ; int test = 3 + 5; Datatyper En datatyp har en grupp värden samt en grupp operationer som är giltiga för dess värden. C har ett antal primitiva datatyper som är fördeklarerade. Dessa är heltal, flyttal och tecken. datatyp identifierare = uttryck, identifierare = uttryck ; char a = a, b = b, c = c ; Programmeringsteknik för ingenjörer, VT06 7 Programmeringsteknik för ingenjörer, VT06 8 Datatyper för heltal Hur stora heltal kan bli beror på hur mycket utrymme datorn reserverar till datatypen. Typ storlek minimum maximum short 2 byte -32,768 32,767 int 4 byte -2,147,483,648 2,147,483,647 long 8 byte -9 x 10 18 9 x 10 18 Heltal (forts) En variabel som deklareras med typen int kan lagra värden i det intervallet som datorn avsett. De operatorer som är giltiga på heltal är främst de aritmetiska operatorerna, dvs + - * / % Eftersom variabler har begränsad lagringskapacitet kan man drabbas av overflow, t.ex. om man försöker multiplicera två variabler vars produkt blir större än det maximala värdet som en variabel kan lagra. Programmeringsteknik för ingenjörer, VT06 9 Programmeringsteknik för ingenjörer, VT06 10 Exempel på overflow /* Variabeldeklarationer */ int my_int; short my_short; // -32,768 till 32,767 /* Variabeltilldelningar */ my_int = 50000; // Ok my_short = 50000; // Overflow För värden större än 65,535 (om short): warning: overflow in implicit constant conversion Programmeringsteknik för ingenjörer, VT06 11 Positiva heltal unsigned framför en heltalstyp (ex. unsigned int) innebär att enbart positiva tal kan lagras. Detta innebär också att intervallet för tal (positiva) som kan lagras fördubblas. Program short s; // -32,768 till 32,767 unsigned short u_s; // 0 till 65,535 s = 40000; u_s = -500; printf("%d\n%d\n",s,u_s); Utskrift -25536 40000 10 = 10011100 01000000 2 -> -1100011 10111111 2-1 = -25536 10 65036-500 10 = -0000001 11110100 2 -> 11111110 00001011 2-1 = 65036 10 Programmeringsteknik för ingenjörer, VT06 12 2

Tecken Datatypen char representerar individuella tecken. a Z 3 9 * \n Varje tecken representeras av ett heltalsvärde. a är 97 b är 98 osv. ASCII är en standard för vilka tecken som motsvarar vilket tal. Appendix A i boken. http://www.ascii-table.com Tecken Att tecken har en motsvarighet i siffror kan ses i följande exempel: printf("%c %c %d %d\n", A, 65, A, 65); Vilket ger utskriften: A A 65 65 Programmeringsteknik för ingenjörer, VT06 13 Programmeringsteknik för ingenjörer, VT06 14 Specialtecken Name Skrivet i C Heltalsvärde null character \0 0 alert \a 7 backspace \b 8 horizontal tab \t 9 newline \n 10 vertical tab \v 11 formfeed \f 12 carriage return \r 13 double quote \ 34 single quote \ 39 backslash \\ 92 Datatyper för flyttal Det finns tre flyttalstyper: float, double och long double. Variabler av denna typ kan innehålla reella värden som 0.001, 2.0, 3.14159 eller 0.45e2 (= 45.0). Typ storlek värden (ca) precision float 4 byte +/- 3.4 x 10 38 6 tecken doube 8 byte +/- 1.7 x 10 308 15 tecken long double 16 byte +/- 10 4932 19 tecken Programmeringsteknik för ingenjörer, VT06 15 Programmeringsteknik för ingenjörer, VT06 16 Exempel på precision float x1 = 1.0001, x2 = 1.000000001, // Mer än 6 signifikanta y = 1.0; printf("utan förlust: %.7f\n",y-x1); printf("med förlust: %.7f\n",y-x2); printf("y==x2: %d\n",y==x2); Skriver ut: Utan förlust: -0.0001000 Med förlust: 0.0000000 y==x2: 1 Heltal på flyttalsform 3.0. Flyttalskonstanter 1.234567e5 motsvarar 1.234567 10 5 float double 44.5f 44.5L 44.5F 44.5l 0.445e2f 0.445e2 Programmeringsteknik för ingenjörer, VT06 17 Programmeringsteknik för ingenjörer, VT06 18 3

Uttryck Ett uttryck (expression) är en programkonstruktion som producerar (evalueras till) ett resultatvärde av en viss datatyp. Ett uttryck kan (bl a) vara: 1: En konstant -5, 1.23e2, c 2: En variabel mitt_heltal, Pi 3: Ett funktionsanrop sqrt(16.0) 4: En tilldelning height = newheight Uttryck (forts) Ett uttryck är en syntaktiskt korrekt kombination av konstanter, variabler, funktionsanrop, tilldelningar och operatorer. (a + b) / (c + d) a = 5.7 + 9.7 * 0.4 b = sqrt(3.5 0.5) Programmeringsteknik för ingenjörer, VT06 19 Programmeringsteknik för ingenjörer, VT06 20 Uttryck och konverteringar Datorn beräknar vilken typ ett uttryck får beroende på de ingående delarna variabler uttryck datatyp värde int a=3, b=4; a + b int 7 short c=1, d=2; c + d int 3 int e = 1; e + f double 3.0 double f = 2.0; int g = 0; g = 34.5 int 34 Typkonvertering Kan själva gå in och styra typ på ett uttryck (explicit). Konvertering av konstant. double x = (double)5; // x = 5.0 Konvertering binder hårt, paranteser behövs kring uttryck. double y = (double)(5+8); // y = 13.0 Går bra konvertera värdet av en variabel. int i = 4; double z = (double) i; // z = 4.0, i = 4 Programmeringsteknik för ingenjörer, VT06 21 Programmeringsteknik för ingenjörer, VT06 22 Heltalsdivision och rest Operatorn / beräknar heltalsdivision 3 / 15 = 0 15 / 3 = 5 16 / 3 = 5 17 / 3 = 5 18 / 3 = 6 Operatorn % beräknar heltalsrest 3 % 15 = 3 15 % 3 = 0 16 % 3 = 1 17 % 3 = 2 18 % 3 = 0 Programmeringsteknik för ingenjörer, VT06 23 Relations och logikoperatorer Relationsoperatorer < mindre än > större än <= mindreänellerlikamed >= större än eller lika med == lika med!= inte lika med Logikoperatorer! negation && logiskt och logiskt eller Programmeringsteknik för ingenjörer, VT06 24 4

Relationsoperatorer Alla relationsoperatorer är binära, dvs de tar två uttryck som operander. Som resultat av uttrycket fås en int med värde 0 (falskt) eller 1 (sant). 2 < 3 2 > 3-1.3 >= (x - -1.2) a < b < 3 /* syntaktiskt rätt, men oväntat resultat, Varför? */ Felaktiga: a =< b /* Fel ordning på = och < */ a < = b /* Mellanslag ej tillåtet */ Likhetsopreatorer Likhetsoperatorerna är == och!=. c == A k!= -2 x + y == 3 * z -7 Felaktiga a = b /* tilldelning istf jämför */ a = = b /* mellanslag ej tillåtet */ (x + y) =! 44 /* Fel ordning på! och =*/ Programmeringsteknik för ingenjörer, VT06 25 Programmeringsteknik för ingenjörer, VT06 26 Logiska operatorer Logiska operatorer är!, && och.!a!(x + 7.7)!(a < b c < d) a && b a b Felaktiga a && /* operand saknas */ a b /* extra mellanslag */ a & b /* bitvis operation (se kap 7) */ & b /* minnesadressen till b */ Logik uttryck1 uttryck2 u1 && u2 u1 u2 noll noll 0 0 noll icke noll 0 1 icke noll noll 0 1 icke noll icke noll 1 1 Programmeringsteknik för ingenjörer, VT06 27 Programmeringsteknik för ingenjörer, VT06 28 Kortslutning När datorn utvärderar sanningen i ett uttryck så slutar evalueringen så snart utkomsten är känd. Om vi har uttryck1 && uttryck2, så kommer inte uttryck2 att utvärderas om uttryck1 är falskt. int a = 0, b = 1, c = 0; c = (a && (b=7)); printf("%d\n",b); Skriver ut: 1 Satser Satserna (statements) är grundinstruktionerna i ett programspråk. Block används för att gruppera satserna. { Deklaration eller uttryck. OBS! Varje sats kan i sin tur vara ett block. Programmeringsteknik för ingenjörer, VT06 29 Programmeringsteknik för ingenjörer, VT06 30 5

Ordning på satserna Sekvens: Satserna exekveras en efter en. Standard Urval: Man väljer om satser ska exekveras eller ej. If-sats, if--sats, switch-sats Repetition: Satsen exekveras ett visst antal gånger while-loop, do-loop, for-loop Syntax: if (villkor) sats1; If -satsen Villkoret måste evalueras till sant eller falskt. sats1 utförs endast om villkoret är icke noll, d.v.s sant. Exempel på villkor: i == j!(a > b) && (i == j+5-k) Programmeringsteknik för ingenjörer, VT06 31 Programmeringsteknik för ingenjörer, VT06 32 Syntax: if (villkor) sats1; sats2; If- -satsen Om villkoret är sant (icke noll) utförs sats1, annars utförs sats2. Programmeringsteknik för ingenjörer, VT06 33 Exempel int a = 42; if (a==0) printf("a är noll: %d\n",a); printf("a är inte noll: %d\n",a); /* Igen, nu med fel */ if (a=0) printf("a är noll: %d\n",a); printf("a är inte noll: %d\n",a); Skriver ut: a är inte noll: 42 a är inte noll: 0 Programmeringsteknik för ingenjörer, VT06 34 switch (uttryck){ case value1: sats1; case value2: sats2; default: /* kan satsn; utlämnas */ Switch -sats Uttrycket måste vara heltal eller tecken. Motsvarar nästade if-satser int x; printf("skriv 1 eller 2:"); scanf("%d",&x); switch(x){ case 1: printf("du skrev en etta\n"); case 2: printf("du skrev en tvåa\n"); default: printf("du skulle skriva 1 eller 2!\n"); Skriv 1 eller 2:2 Du skrev en tvåa Skriv 1 eller 2:3 Du skulle skriva 1 eller 2! Programmeringsteknik för ingenjörer, VT06 35 Programmeringsteknik för ingenjörer, VT06 36 6

While -sats Syntax: while (villkor) Gå runt i varv. Villkoret evalueras på nytt före varje varv. Satsen utförs inte en gång till. Villkoret testas inte kontinuerligt. Satsen utförs alltid helt. double x=11; while(x>1.0){ printf("%5.3f\n",x); x/=2.0; 11.000 5.500 2.750 1.375 Programmeringsteknik för ingenjörer, VT06 37 Programmeringsteknik för ingenjörer, VT06 38 Syntax: For -sats for(initialisering; villkor; förändring) sats1; motsvarar: Fast loop. initialisering; Initialisering, villkor while (villkor) { och förändring brukar referera till samma förändring; variabel. Denna bör ej ändras i satsen. Programmeringsteknik för ingenjörer, VT06 39 int i; int j; for (i = 0; i < 3; i++) { printf("hej!\n"); for (i = 1, j = 1; i < 5; i++, j = i*i) { printf("talet är %d och dess kvadrat %d\n",i,j); Hej! Hej! Hej! Talet är 1 och dess kvadrat 1 Talet är 2 och dess kvadrat 4 Talet är 3 och dess kvadrat 9 Talet är 4 och dess kvadrat 16 Programmeringsteknik för ingenjörer, VT06 40 #define NUM 3 #define LINE "\n" int main(void){ int in,sum=0,i; for(i=0;i<num;i++){ printf("\nskriv ett heltal <%d av %d>:\t",i+1,num); scanf("%d",&in); sum+=in; printf(line); printf("summa: \t\t\t\t%2d\n",sum); printf("medelvärde (1): \t\t%2d\n",sum/(i+1)); printf("medelvärde (2): \t\t%5.2f\n",(double)sum/((double)i+1)); printf(line); return(0); Skriv ett heltal <1 av 3>: 1 Summa: 1 Medelvärde (1): 1 Medelvärde (2): 1.00 Skriv ett heltal <2 av 3>: 9 Summa: 10 Medelvärde (1): 5 Medelvärde (2): 5.00 Skriv ett heltal <3 av 3>: 3 Summa: 13 Medelvärde (1): 4 Medelvärde (2): 4.33 Programmeringsteknik för ingenjörer, VT06 41 Programmeringsteknik för ingenjörer, VT06 42 7

Syntax: Do-while - loop do while (villkor); char siffra; do { printf("ange en siffra: "); scanf(" %c",&siffra); while (siffra < '0' siffra > '9'); printf("du angav %c\n",siffra); Motsvarar omvänd while-sats. Villkoret evalueras på nytt efter varje varv. Satsen utförs minst en gång. Ange en siffra: s Ange en siffra: c Ange en siffra: 4 Du angav 4 Programmeringsteknik för ingenjörer, VT06 43 Programmeringsteknik för ingenjörer, VT06 44 Break och continue För att bryta det normala flödet, kan break och continue användas: break bryter den innersta loopen eller en switchsats. continue hoppar ur ett loop-block och påbörjar nästa varv i loopen. double tal = 0.0; while(1) { scanf("%lf", &tal); if (tal < 0.0) printf("%f %f\n", tal, sqrt(tal)); Villkorsoperatorn? : if (a < b) x = a; x = b; kan skrivas som: Villkorsoperatorn x = a < b? a : b; (tar tre uttryck som operander) Om uttrycket före? är sant returneras uttrycket mellan? och : annars returneras uttrycket efter :. Programmeringsteknik för ingenjörer, VT06 45 Programmeringsteknik för ingenjörer, VT06 46 int tal, absolut; printf("skriv in ett heltal: "); scanf("%d",&tal); printf("absolutbeloppet av %d är %d\n",tal,tal >= 0? tal : -tal); Kort om algoritmer En algoritm är en noggrann plan, en metod för att stegvis göra något som har följande kännetecken: Skriv in ett heltal: -4 Absolutbeloppet av -4 är 4 Skriv in ett heltal: 5 Absolutbeloppet av 5 är 5 Programmeringsteknik för ingenjörer, VT06 47 Programmeringsteknik för ingenjörer, VT06 48 8

Algoritmer Satser utförs sekventiellt, en rad i taget. Raderna numreras och indenteras. 1. Läs in tal 1 2. Läs in tal 2 3. Beräkna tal 1 + tal 2 4. Skriv ut summan Val och villkor Ett val definierar två möjliga vägar för algoritmen att ta beroende på ett villkor. 1. Läs in tal 1. 2. Läs in tal 2. 3. Om tal 1 och tal 2 0. 3.1 Beräkna tal 1 / tal 2. 3.2 Skriv ut kvoten. 4. Annars 4.1 Skriv ut felmeddelande. 4.2 Avsluta. Programmeringsteknik för ingenjörer, VT06 49 Programmeringsteknik för ingenjörer, VT06 50 Repetition Vid upprepning, upprepas en eller flera satser allt medan ett villkor är uppfyllt. 1. läs in tal 1. 2. läs in tal 2. 3. så länge som tal 2 = 0. 3.1 skriv ut Tal 2 får inte vara 0. 3.2 läs in tal 2. 4. beräkna tal 1 / tal 2. 5. skriv ut kvoten. Största gemensamma delare Euklides algoritm : bestäm största gemensamma delare till a och b Så länge a b om a > b så a := a b annars b := b a Programmeringsteknik för ingenjörer, VT06 51 Programmeringsteknik för ingenjörer, VT06 52 int A,B,a,b; printf("ange ett heltal: "); scanf("%d",&a); printf("ange ett annat heltal: "); scanf("%d",&b); a=a; b=b; while(a!=b){ if (a>b) a-=b; b-=a; Ange ett heltal: 236 Ange ett annat heltal: 12 Största gemensamma delare till 236 och 12 är 4 printf("största gemensamma delare till %d och %d är %d\n",a,b,a); return(0); Programmeringsteknik för ingenjörer, VT06 53 9