Loopar och datatyper. Föreläsning 3

Relevanta dokument
Loopar och datatyper. Föreläsning 3

Programmering i C, 7,5 hp

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 3

Planering Programmering grundkurs HI1024 HT 2014

Planering Programmering grundkurs HI1024 HT TIDAA

Föreläsning 9. Repetition och exempelproblem

Data, typ, selektion, iteration

Uttryck och villkor. Föreläsning 2

Arrays (indicerade variabler) Föreläsning 4

Planering Programmering grundkurs HI1024 HT data

Enkla datatyper minne

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Arrays (indicerade variabler) Föreläsning 6

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

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

Indicerade variabler

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

Tecken & Strängar. Kapitel 7

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Funktioner och programstruktur. Föreläsning 5

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

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

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Indexerade variabler

Föreläsning 11. Strängar

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

En kort text om programmering i C.

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

Uttryck och villkor. Föreläsning 2

Funktioner och programstruktur. Föreläsning 5

Föreläsning 3. Programmering, C och programmeringsmiljö

Att komma igång. Föreläsning 1

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

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

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Switch, Array (fält) switch break, continue, goto (scary) Sammansatta tilldelningar Kommentarer Array Sortering

Övning2. Variabler. Data typer

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

Variabler använder man sig av för att under programkörningen spara data eller information i primärminnet. En variabel har typ, namn och värde.

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

#include <stdio.h> #include <string.h>

Heltal(int) Programmeringsteknik 54

TDIU01 - Programmering i C++, grundkurs

Övningsuppgifter till föreläsning 2 Variabler och uttryck

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

Några småsaker. switch break, continue, goto Kommentarer

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

Föreläsning 3. Programmering, C och programmeringsmiljö

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

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

Objektorienterad Programmering (TDDC77)

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

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

TDIU01 - Programmering i C++, grundkurs

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

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

F4. programmeringsteknik och Matlab

Programmeringsteknik I

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011,

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

En sammansatt sats eller block är en sekvens av satser, sammanslagna till en enhet med hjälp av ett matchande par av klamrar, { }.

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

Övning från förra gången: readword

3 Styrning av programflöde. Här exekveras satserna enligt först sats1 sedan sats2 och sist sats3.

Föreläsning 10. Pekare (Pointers)

Belopp Belopp > procent

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

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

Programmeringsteknik med C och Matlab

översiktskurs (5DV031)

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

Objektorienterad Programmering (TDDC77)

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

Variabler och konstanter

Programmering för språkteknologer II, HT2011. Rum

Följande, ur problemsynpunkt enkla uppgifter, är till för att nöta in dagens teori.

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

Iteration while-satsen

Föreläsning 8: Aritmetik och stora heltal

JAVAUTVECKLING LEKTION 4

Programmering Grundkurs (HI1900) Teoridel

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

Lösningsförslag till övningsuppgifter till föreläsning 6 Funktioner

Fråga 11. Vad skrivs ut? Fråga 12. Vad skrivs ut? Fråga 13. Vad skrivs ut? x=x+y; y=x-y; x=x-y;

Objektorienterad programmering Föreläsning 2

Att komma igång. Föreläsning 1

Visual Basic, en snabbgenomgång

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

Arduinokurs. Kurstillfälle 4

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

SMD 134 Objektorienterad programmering

Programmering i C. Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg

Transkript:

Loopar och datatyper Föreläsning 3

Dagens kluringar int x; printf("ange x:"); scanf("%d",&x); if(/*fyll i kod*/) printf("du angav x mellan 7 och 14"); int i=0; if(i++) i++; printf("%d",i++); //vad skrivs ut?

Loopar och datatyper Flödesscheman while for Datatyper Konvertering

Sekvens sats sats sats

Selektion (if) sant villkor falskt sats sats

Iteration (for, while) villkor falskt sats sant

while while betyder medans eller så länge while(villkor) sats1 sats2 -satserna upprepas så länge villkor är sant

Några exempel while(1) printf(" det roliga tar aldrig slut\n "); //ctrl-c i terminal, build->abort i codeblocks int i = 0; while(i<10) OBS! ej: while(i<10); printf("%d, ", i); i=i+1;

#include <stdio.h> int main(void) int n=1; while(n!= 0) scanf("%d",&n); printf("du skrev:%d \n", n); return 0;

Summa-exempel //Summera heltal #include <stdio.h> int main(void) printf("summera heltal\n"); printf("skriv in heltal, avsluta med 0\n"); int n=1, summa=0; while(n!= 0) scanf("%d",&n); summa = summa + n; printf("summa:%d \n", summa); return 0;

do - while do sats1 sats2 while(villkor); jämförelsen görs sist körs minst en gång ibland naturligare, tex i exemplen nyss

#include <stdio.h> int main(void) int n; //vi slipper initiera do scanf("%d",&n); printf("du skrev:%d \n", n); while(n!= 0); return 0;

for for emedan, så länge används främst när vi vet hur många gånger vi vill upprepa något

Exempel på for-slinga (loop) Startsats, utförs först och endast en gång int n; for (n = 0;n<10;n++) printf("%d, ", n); Utförs sedan och först i varje påföljande varv. Om resultatet blir true utförs. Utföres sist efter i varje varv. Används normalt för att stega upp eller ner n. Resultatet blir: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,

Fler exempel int n; for(n=10;n>0;n--) printf("%d, ", n); for(;1;) printf("evig loop\n");

int k; int summa = 0; for(k=1;k<=7;k=k+1) summa = summa + k; En körning ser ut så här: Summa hittills: 1 Summa hittills: 3 Summa hittills: 6 Summa hittills: 10 Summa hittills: 15 Summa hittills: 21 Summa hittills: 28 printf("summa hittills: %d\n", summa);

Nästlade loopar int i,j; for(i=1;i<=5;i=i+1) for(j=1;j<=3;j=j+1) printf("(%d,%d) ", i, j); printf("\n"); Resultat: (1,1) (1,2) (1,3) (2,1) (2,2) (2,3) (3,1) (3,2) (3,3) (4,1) (4,2) (4,3) (5,1) (5,2) (5,3)

Max/Min av heltal #include <stdio.h> int main(void) int max,min,k,tal; printf("tal nr 1: "); scanf("%d",&tal); min=tal; max=tal; for(k=2;k<=5;k++) printf("tal nr %d: ",k); scanf("%d",&tal); if (tal<min) min=tal; if (tal>max) max=tal; printf("%d %d\n",max,min); return 0; Resultat: Tal nr 1: 100 Tal nr 2: 50 Tal nr 3: -40 Tal nr 4: 2 Tal nr 5: 40 100-40

Grundläggande datatyper Vi har hitintills använt variabler av datatypen int (heltal) och float (decimaltal) för att lagra data. Även om vi främst ska använda dessa är det viktigt att veta att det finns fler datatyper om man tex behöver lagra större tal än som får plats i dessa. Vi ska också titta på datatypen char som används för att lagra bokstäver.

Heltal Hur många bitar och därmed hur stora tal som kan representeras med datatyper i C är implementationsberoende (varierar). Vanliga värden på en 32-bitars maskin för de olika heltalstyperna: Typ minsta värde största värde printf,scanf short int -32 768 32 767 %hd unsigned short int 0 65 535 %hu int -2 147 483 648 2 147 483 647 %d unsigned int 0 4 294 967 295 %u long int -2 147 483 648 2 147 483 647 %ld unsigned long int 0 4 294 967 295 %lu Med en header som heter <limits.h> kan man ta reda på dessa värden i ett program. Pröva gärna vad som händer om man försöker stoppa in ett för stort tal.

Decimaltal Decimaltal har både fördelen att de kan ha en decimaldel och att de har plats för större tal tack vare exponenten. Detta på bekostnad av att de inte är exakta. Det finns tre typer: float, double och long double. Typ Minsta positiva värde Största värde Presicion printf, scanf float 1.17549e-38 3.40282e38 6 siffror %f, %f double 2.22507e-308 1.79769e308 15 siffror %f, %lf Observera att 3,7 10-2 skrivs 3.7e-2

Bokstäver I datatypen char lagrar vi bokstäver. Egentligen lagras de som tal som tolkas som bokstäver enligt ASCII (sid 801 i King). char b1, b2; b1 = 'a'; b2 = 97; printf("b1: %c, %d; b2: %c, %d\n",b1,b1,b2,b2); Resultat: b1: a, 97; b2: a, 97 I utökad ASCII finns fler tecken såsom åäö. Vi kommer oftast nöja oss med de tecken som finns i ASCII.

Exempel Oftast struntar vi att char egentligen innehåller ett tal och tänker på char som att den lagrar en bokstav men ibland kan det vara användbart: Resultat: g G char ch; scanf("%c",&ch); if('a' <= ch && ch <= 'z') ch = ch - 'a' + 'A'; printf("%c",ch);

Ett subtilt problem När man ska läsa in bokstäver uppstår ett subtilt problem char ch='a'; while(ch!='p') printf("ange bokstav:"); scanf("%c",&ch); if('a' <= ch && ch <= 'z') ch = ch - 'a' + 'A'; printf("%c\n",ch); Ange bokstav:b B Ange bokstav: Ange bokstav:c C Ange bokstav: Ange bokstav:p P

Förklaring Problemet beror på att även <enter> är ett tecken, nämligen \n. När du slår in <a> <enter> läggs a och \n i en ström redo att läsas. scanf läser första tecknet a men \n ligger kvar och läses nästa varv när scanf exekveras. Detta har inte varit ett problem tidigare då scanf hoppar över whitespaces (enter, mellanslag, tab, ) när den läser in heltal eller decimaltal. Vi kommer senare att lära oss mer om inläsning. Här kommer ett förslag på primitiv lösning så länge: char ch='a',ch_tmp; while(ch!='p') printf("ange bokstav:"); scanf("%c",&ch); scanf("%c",&ch_tmp); if('a' <= ch && ch <= 'z') ch = ch - 'a' + 'A'; printf("%c\n",ch); En annan lösning som klarar att användaren dräller med mellanslag men som avslutar med att lämna ett enter: char ch='a',ch_tmp; while(ch!='p') printf("ange bokstav:"); scanf(" %c",&ch); //mellanslag före %c if('a' <= ch && ch <= 'z') ch = ch - 'a' + 'A'; printf("%c\n",ch);

Konvertering (typ) denna operator konverterar om möjligt talet till höger till datatypen typ. int i = (int) 3.45; Konverteringen sker dock automatiskt vid behov: int i = 3.45;//ger samma resultat float f = 3 / 2; //f blir 1.0 f = 3.0 / 2; //f blir 1.5 int i1 = 3; int i2 =2; f = i1 / i2; //f blir 1.0 f = (float) i1 / i2; //f blir 1.5

Studieanvisningar F3 Skriv tre while-loopar som skriver ut följande: a) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, b) 10,9,8,7,6,5,4,3,2,1, c) 1, 2, 4, 8, 16, Skriv tre for-loopar som skriver ut ovanstående. Läs 6.1-6.3 (testa på datorn samtidigt som du läser) Gör om cd-skivsprogrammet så att användaren efter att ha fått reda på priset får frågan om hon vill göra ett nytt köp eller avsluta. Om användaren vill göra ett nytt köp ska programmet köra igen. På så sätt kan man göra valfritt antal köp innan programmet avslutar. Gör K6 P1, P2, P3 (sid 122-123) Skumma igenom 7.1 och 7.2. Läs om oktala och hexadecimala tal sid 128 ordentligt om du inte kan detta. Läs 7.3 sid 134-135 och 7.3 andra halvan av sid 139 Gör K7 P15 (fakultet: 4! = 1 2 3 4) Gör fler uppgifter om du hinner Svara på instuderingsuppgifter E-excercises, P-programming projects