Loopar och datatyper. Föreläsning 3

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

Föreläsning 9. Repetition och exempelproblem

Programmering i C, 7,5 hp

Data, typ, selektion, iteration

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

Arrays (indicerade variabler) Föreläsning 4

Arrays (indicerade variabler) Föreläsning 6

Enkla datatyper minne

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

Tecken & Strängar. Kapitel 7

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

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

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

Föreläsning 11. Strängar

Uttryck och villkor. Föreläsning 2

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Indicerade variabler

Heltal(int) Programmeringsteknik 54

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

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

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

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

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

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.

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

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

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

En kort text om programmering i C.

Uttryck och villkor. Föreläsning 2

TDIU01 - Programmering i C++, grundkurs

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

Indexerade variabler

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

Övning2. Variabler. Data typer

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

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

Funktioner och programstruktur. Föreläsning 5

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

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

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

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

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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

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

Objektorienterad Programmering (TDDC77)

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Programmeringsteknik I

Belopp Belopp > procent

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,

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

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

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 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?

Funktioner och programstruktur. Föreläsning 5

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

Variabler och konstanter

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

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

TDIU01 - Programmering i C++, grundkurs

F4. programmeringsteknik och Matlab

JAVAUTVECKLING LEKTION 4

översiktskurs (5DV031)

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

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

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

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

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

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

Iteration while-satsen

Programmeringsteknik med C och Matlab

Planering Programmering grundkurs HI1024 HT TIDAA

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012

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

Föreläsning 8: Aritmetik och stora heltal

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

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

Programmering Grundkurs (HI1900) Teoridel

Planering Programmering grundkurs HI1024 HT 2014

Planering Programmering grundkurs HI1024 HT data

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

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

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

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl

Föreläsning 10. Pekare (Pointers)

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

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

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

4 Sammansatta datatyper

Visual Basic, en snabbgenomgång

Enkla uppgifter. Uppgift 1. Uppgift 2

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, sum=0; while(n!= 0) scanf("%d",&n); sum = sum + n; printf("summa:%d \n", sum); 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, bra ändå? 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 sum = 0; for(k=1;k<=7;k=k+1) sum = sum + 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", sum);

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,number; printf("tal nr 1: "); scanf("%d",&number); min=number; max=number; for(k=2;k<=5;k++) printf("tal nr %d: ",k); scanf("%d",&number); if (number<min) min=number; if (number>max) max=number; 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