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

Relevanta dokument
Indicerade variabler

Blandat. Föreläsning 5

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

Arrays (indicerade variabler) Föreläsning 6

Arrays (indicerade variabler) Föreläsning 4

Indexerade variabler

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

översiktskurs (5DV031)

Programmering i C, 7,5 hp

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Detta är andra problemlösningsföreläsningen, vi diskuterar problemen ur Problem II.

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

En kort text om programmering i C.

Loopar och datatyper. Föreläsning 3

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

Loopar och datatyper. Föreläsning 3

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

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

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

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

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Enkla datatyper minne

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

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

Programmering Grundkurs (HI1900) Teoridel

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

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

Funktioner och programstruktur. Föreläsning 5

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.

Uttryck och villkor. Föreläsning 2

Uttryck och villkor. Föreläsning 2

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

TDIU01 - Programmering i C++, grundkurs

F4. programmeringsteknik och Matlab

Data, typ, selektion, iteration

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

Funktioner och programstruktur. Föreläsning 5

Planering Programmering grundkurs HI1024 HT 2014

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

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

Enkla uppgifter. Uppgift 1. Uppgift 2

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

Föreläsning 11. Strängar

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Objektorienterad programmering Föreläsning 10. Copyright Mahmud Al Hakim Sorteringsalgoritmer

Imperativ programmering. Föreläsning 2

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Skizz till en enkel databas

Belopp Belopp > procent

Föreläsning 9. Repetition och exempelproblem

*Pekarvärden *Pekarvariabler & *

Magnus Nielsen, IDA, Linköpings universitet

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

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

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

1,3,5,7,9,...,99. Skriv ett program som genererar en multiplikationstabell med följande utseende

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

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

TDIU01 - Programmering i C++, grundkurs

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

GPT- föreläsning 10. För en vecka sedan Problemlösning på lägre nivå kan sortera funktioner Förra gången

Sökning och sortering

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

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

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

C++ Slumptalsfunktioner + switch-satsen

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Planering Programmering grundkurs HI1024 HT TIDAA

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

2.1 Variabler. 2.2 Regler för namngivning i C. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 2

Uppgifter till praktiska tentan, del A. (7 / 27)

4 Sammansatta datatyper

SORTERING OCH SÖKNING

Pseudokod Analys av algoritmer Rekursiva algoritmer

Planering Programmering grundkurs HI1024 HT data

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

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

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

C++ Lektion Tecken och teckenfält

Hantering av textsträngar och talsträngar. William Sandqvist

OOP Tentamen

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

Programmeringsteknik med C och Matlab

Föreläsning 10. Pekare (Pointers)

7 Programmeringsteknik

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,

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

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

Visual Basic, en snabbgenomgång

Heltal(int) Programmeringsteknik 54

Att använda pekare i. C-kod

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Fråga 5. Vad krävs av funktionen undersok(a) för att b ska ökas med 1 respektive minskas med 1?

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

OBS!! Detta är DEL 2 av tentan. För att få ut denna måste du ha lämnat in del 1. Om du inte fått ut del 1 bör du meddela skrivningsvakten. OBS!!

Transkript:

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

switch int weekday; printf("mata in veckodagnummer 1-7: "); scanf("%d", &weekday); switch(weekday) case 1: printf("monday\n"); break; case 2: printf("tuesday\n"); break; case 3: printf("wednesday\n"); break; case 4: printf("thursday\n"); break; case 5: printf("friday\n"); break; default: printf("weekend!\n"); jmf: if(weekday==1) printf("monday\n"); else if(weekday==2) printf( Tuesday\n"); else if(weekday==3) printf( Wednesday\n"); else if(weekday==4) printf( Thursday\n"); else if(weekday==5) printf( Friday\n"); else printf( Weekend! \n ");

break Skrivs inuti en switch, for, while eller do-while sats När den exekveras hoppar programmet genast ut ur den sats (switch, for, while, dowhile) den står i Med undantag för switchsatsen behöver den normalt inte användas int i=1,summa=0,tmp; for(i=0;i<10;i++) printf("skriv in tal %d:",i); scanf("%d",&tmp); if(tmp==0) break; else summa = summa+tmp; printf("summa:%d",summa);

continue Skrivs inuti en for, while eller do-while sats När den exekveras påbörjas ett nytt varv Finns egentligen aldrig en bra anledning att använda denna

goto Använd aldrig under några omständigheter denna sats! Om ni någon gång använder goto se då till att följa regeln ovan Möjligen kan användandet av goto tillfälligt under debugging vara motiverat men jag tycker att även här använder vi regel ett för att reglera användandet Den sammanlagda kostnaden för världen pga goto hann innan användandet begränsades överstiga kostnaden för NASA och CERN tillsammans! (källa: ingen alls men jag känner på mig att det stämmer)

Sammansatta tilldelningar a+=4 motsvarar a=a+4 a-=4 motsvarar a=a-4 a*=4 motsvarar a=a*4 a/=4 motsvarar a=a/4 -fungerar även med andra tal än 4

Kommentarer Finns av två typer: //resten av raden ignoreras av kompilatorn /*kan löpa över flera rader och avslutas vid*/ OBS att den senare inte kan nästlas! Skall förklara koden men inte förklara sådant som man förstår om man förstår C. Man ska ha lagom många kommentarer! Endast genom övning lär man sig vilka kommentarer som behövs och vilka som är överflödiga. Nästa lab försök skriva de kommentarer du tror du behöver för att enkelt förstå koden om två veckor. Läs koden två veckor senare och se om det hade behövts fler kommentarer och om några var överflödiga.

Preprocessor (förprocessor) #include <stdio.h> #define MOMS 25 #define RABATT 10 int main(void) int antal=10; float tpris; const float pris=3.25; tpris=antal*pris*(1+moms/100.0)*(1-rabatt/100.0); printf("%6.2f kr\n",tpris); getch();

Indicerade variabler- Fält -Array Används för att lagra flera instanser av samma sorts data, tex tärningskast, personnummer, namn Med en for-loop kan man sedan enkelt utföra samma operation på alla variabler i en array, tex summera, beräkna ålder, jämföra Är det sista verktyget vi behöver bemästra innan vi kan skriva riktiga program!

Ett menlöst exempel int a[3]; a[0]=2; a[1]=7; a[2]=9; printf("test: %d, %d, %d",a[0],a[1],a[2]); OBS! första platsen har index 0 och sista har index 2 om antalet platser är 3

Array med for int langd=8; Pa plats: 0 har vi 1 int a[langd]; Pa plats: 1 har vi 2 Pa plats: 2 har vi 3 int i; Pa plats: 3 har vi 4 for(i=0;i<langd;i++) Pa plats: 4 har vi 5 Pa plats: 5 har vi 6 Pa plats: 6 har vi 7 a[i]=i+1; Pa plats: 7 har vi 8 for(i=0;i<langd;i++) printf("pa plats: %d har vi %d\n",i,a[i]);

Ett till exempel Antal 2: 318. Andel: 3.18% #include <stdio.h> Antal 3: 505. Andel: 5.05% int main(void) Antal 4: 854. Andel: 8.54% Antal 5: 1129. Andel: 11.29% int s[13],kast,k; Antal 6: 1395. Andel: 13.95% srand(time(0)); Antal 7: 1704. Andel: 17.04% for(k=2;k<=12;k++) Antal 8: 1365. Andel: 13.65% s[k]=0; Antal 9: 1112. Andel: 11.12% for(k=1;k<=10000;k++) Antal 10: 823. Andel: 8.23% Antal 11: 516. Andel: 5.16% kast=rand()%6+rand()%6+2; Antal 12: 279. Andel: 2.79% s[kast]++; for(k=2;k<=12;k++) printf("antal %2d: %d. Andel: %.2f%%\n",k,s[k],100*s[k]/10000.);

Sortering Även om datorer idag används till väldigt mycket olika saker är fortfarande två av de viktigaste funktionerna att lagra data och att tillhandahålla valda delar av dessa data. Mycket forskning har gjorts i hur detta skall göras på bästa/effektivast sätt.

Målet är att man så fort som möjligt ska kunna få tag på valda delar av lagrade data. För att hitta rätt data behöver man söka igenom tillgänglig data. Detta kan effektiviseras med bra sökalgoritmer och genom sortering av data i förväg. (Allra effektivast blir det om man använder nycklar och tabeller för att organisera data relations-databaser)

Bubbelsortering Vi ska börja med att titta på hur man kan sortera data. I exemplet tittar vi på hur man sorterar heltal men metoden fungerar lika bra på alla sorters data som kan ordnas i en bestämd sekvens, t.ex decimaltal, bokstäver, ord. Algoritmen vi ska titta på kallas bubbelsortering eftersom de större talen tillåts bubbla upp (till höger).

Steg 1 (14 bubblar upp) Jämför talen två och två från vänster till höger. Om talet till vänster är större byter man plats.1. Jämför tal 0 och 1: 12 8 14 9 2 Talet till vänster är större så vi byter plats! 8 12 14 9 2 Nu jämför vi tal 1 och 2: 8 12 14 9 2 Talet till vänster är mindre så ingen åtgärd. Nu jämför vi tal 2 och 3: 8 12 14 9 2 Talet till vänster är större så vi byter plats: 8 12 9 14 2 Nu jämför vi tal 3 och 4: 8 12 9 14 2 Talet till vänster är större så vi byter plats: 8 12 9 2 14

Resultat: Steg 1 Vad har vi då åstadkommit? Jo vi kan vara säkra på att det största talet befinner sig längst till höger. Detta gäller oberoende hur det såg ut från början. Övertyga gärna dig själv om detta! Vad gör vi nu? Jo samma sak med fältet utom den sista platsen.

Steg 2 (12 bubblar upp) Jämför tal 0 och 1: 8 12 9 2 14 Ingen åtgärd. Nu jämför vi tal 1 och 2: 8 12 9 2 14 Talet till vänster är större så vi byter plats: 8 9 12 2 14 Nu jämför Vi tal 2 och 3: 8 9 12 2 14 Talet till vänster är större så vi byter plats: 8 9 2 12 14 Vi kan nu vara säkra på att det näst sista talet är det näst högsta. Nu behöver vi bara upprepa algoritmen två gånger till för att vara säkra på att alla tal kommer i nummerordning.

Steg 3 och 4 Steg 3: Jämför tal 0 och 1: 8 9 2 12 14 Ingen åtgärd. Nu jämför vi tal 1 och 2: 8 9 2 12 14 Talet till vänster är större så vi byter plats: 8 2 9 12 14 Steg 4: Jämför tal 0 och 1: 8 2 9 12 14 Talet till vänster är större så vi byter plats: 2 8 9 12 14 Vi kan nu vara säkra på att alla tal är i nummerordning!

Algoritm i pseudokod: Sortera fält f med antal element n: För i från 0 till n 2: För j från 0 till n 2 i: Om f[j]>f[j+1] byt plats Varför fungerar inte: tal[j]=tal[j+1] tal[j+1]=tal[j] För varje varv bubblar ett nytt tal upp. Den inre loopen bubblar upp ett tal. for(i=0;i<antal-1;i++) for(j=0;j<antal-1-i;j++) if(tal[j]>tal[j+1]) tmp=tal[j]; tal[j]=tal[j+1]; tal[j+1]=tmp;

int main() int antal=10; int tal[antal]; srand(1); int i; for(i=0;i<antal;i++) tal[i]=rand()%20; skrivut(tal,antal); printf("\n"); int j,tmp; for(i=0;i<antal-1;i++) for(j=0;j<antal-1-i;j++) if(tal[j]>tal[j+1]) tmp=tal[j]; tal[j]=tal[j+1]; tal[j+1]=tmp; skrivut(tal,antal); void skrivut(int x[],int langd) int i; for(i=0;i<langd;i++) printf("%d,",x[i]);

Matriser int rad=3,kolumn=4; int a[rad][kolumn]; int i,j; int plats=1; for(i=0;i<rad;i++) for(j=0;j<kolumn;j++) a[i][j]=plats; plats++; 1, 2, 3, 4 5, 6, 7, 8 9,10,11,12

Sista ord En av de svåraste delarna av kursen Jobba hårt med att förstå array och sortering Gör många uppgifter på kap 6 i boken