• No results found

Indexerade variabler

N/A
N/A
Protected

Academic year: 2022

Share "Indexerade variabler"

Copied!
33
0
0

Loading.... (view fulltext now)

Full text

(1)

Indexerade variabler

(2)

Vad har vi lärt oss så här långt…

Den första sammansatta (compound) datatypen: matris.

Att arbeta med 1-dimensionella matriser.

Att arbeta med flerdimensionella matriser.

Matriser med variabel dimension.

Att generera slumptal.

En till skalär (basic, built-in) datatyp: boolean

Sortering, en första introduktion.

En till operator: sizeof()

Vad har vi lärt oss i dag…

(3)

• Varför vill någon skriva ett program?

(4)

• Varför vill någon skriva ett program?

Automatisera en manuell process…

Arbetsintensiv Monoton

Farlig Felkänslig

Läs av trycket…

Beräkna korrigering…

Ställ in korrigering…

Börja om!

Sekvens (Imperative) Procedurer (Functional) Struktur (Structual)

(5)

• Varför vill någon skriva ett program?

OTROLIGT

C

Java

Ada

LISP

…använd ett språk som gör det

”lätt” att skriva ett program som speglar verkligheten!

(6)

• Varför vill någon skriva ett program?

• Programmet består av instruktioner som styr i vilken ordning

som olika operationer utförs på programmets variabler. Vad är variabler?

Automatisera en manuell process… Arbetsintensiv Monoton Farlig Felkänslig

(7)

• Varför vill någon skriva ett program?

• Programmet består av instruktioner som styr i vilken ordning

som olika operationer utförs på programmets variabler. Vad är variabler?

Automatisera en manuell process…

0x00 0x01 0xFD

temp

MINNE

CPU

”temp=37”

37

Ett namn på en plats i minnet…

…vars innehåll kan vara kopplad till något i verkligheten.

Arbetsintensiv Monoton Farlig Felkänslig

P R O G R A M V A R I A B L E R

(8)

• Varför vill någon skriva ett program?

• Programmet består av instruktioner som styr i vilken ordning

som olika operationer utförs på programmets variabler. Vad är variabler?

• Varför är en variabel av en viss typ?

Automatisera en manuell process…

Ett namn på en plats i minnet…

…vars innehåll kan vara kopplad till något i verkligheten.

Arbetsintensiv Monoton Farlig Felkänslig

(9)

• Varför vill någon skriva ett program?

• Programmet består av instruktioner som styr i vilken ordning

som olika operationer utförs på programmets variabler. Vad är variabler?

• Varför är en variabel av en viss typ?

Automatisera en manuell process…

Ett namn på en plats i minnet…

…vars innehåll kan vara kopplad till något i verkligheten.

Arbetsintensiv Monoton Farlig Felkänslig

Styr minnesbehov och hjälper kompilatorn hitta fel!

(10)

• Varför vill någon skriva ett program?

• Programmet består av instruktioner som styr i vilken ordning

som olika operationer utförs på programmets variabler. Vad är variabler?

• Varför är en variabel av en viss typ?

• Så här långt har vi lärt oss använda några skalära (basic, built- in, ”ett värde”) datatyper…

Automatisera en manuell process…

Ett namn på en plats i minnet…

…vars innehåll kan vara kopplad till något i verkligheten.

Arbetsintensiv Monoton Farlig Felkänslig

Styr minnesbehov och hjälper compilatorn hitta fel!

0xFD temp

37 0xFA

tryck 2.0

0xFF mod

’N’

(11)

• Varför vill någon skriva ett program?

• Programmet består av instruktioner som styr i vilken ordning

som olika operationer utförs på programmets variabler. Vad är variabler?

• Varför är en variabel av en viss typ?

• Så här långt har vi lärt oss använda några skalära (basic, built- in, ”ett värde”) datatyper…

Automatisera en manuell process…

Ett namn på en plats i minnet…

…vars innehåll kan vara kopplad till något i verkligheten.

Arbetsintensiv Monoton Farlig Felkänslig

Styr minnesbehov och hjälper compilatorn hitta fel!

0xFD temp

37 0xFA

tryck 2.0

0xFF mod

’N’

float int char

(12)

0xFD fr

0 0xFA

tu

0xFF su 0xF9

mo

0xFB we

0xFC th

0xFE sa

0 0

0 0 0

0

int mo=0,tu=0,we=0,th=0;

int fr=0,sa=0,su=0;

Skriv ut askens innehåll:

printf(”%d\n”,mo);

printf(”%d\n”,tu);

printf(”%d\n”,we);

printf(”%d\n”,th);

printf(”%d\n”,fr);

printf(”%d\n”,sa);

printf(”%d\n”,su);

0 0 0 0 0 0 0

(13)

0xFD w[4]

0 0xFA

w[1]

0xFF w[6]

0xF9 w[0]

0xFB w[2]

0xFC w[3]

0xFE w[5]

0 0

0 0 0

0

int w[7]={0,0,0,0,0,0,0};

Skriv ut askens innehåll:

for (int i=0;i<7;i++)

printf(”%d\n”,w[i]); 0

0 0 0 0 0 0

Alla element har samma typ!

Antal element!

OBS: Elementen numreras från 0!

W[1] är det andra elementet!

(14)

0xFD w[4]

0 0xFA

w[1]

0xFF w[6]

0xF9 w[0]

0xFB w[2]

0xFC w[3]

0xFE w[5]

0 0

0 0 0

0

int w[7]={0,0,0,0,0,0,0};

Skriv ut askens innehåll:

for (int i=0;i<7;i++)

printf(”%d\n”,w[i]); 0

0 0 0 0 0 0

Alla element har samma typ!

Antal element!

OBS: Elementen numreras från 0!

W[1] är det andra elementet!

INDEX UTANFÖR FÄLTET!

(15)

0xFD w[4]

0 0xFA

w[1]

0xFF w[6]

0xF9 w[0]

0xFB w[2]

0xFC w[3]

0xFE w[5]

0 0

0 0 0

0

int w[7]={0,0,0,0,0,0,0};

Skriv ut askens innehåll:

for (int i=0;i<7;i++)

printf(”%d\n”,w[i]); 0

0 0 0 0 0 0

Alla element har samma typ!

Antal element!

OBS: Elementen numreras från 0!

W[1] är det andra elementet!

INDEX UTANFÖR FÄLTET!

#define SIZE 7

Byt 7 till SIZE

(16)

#include <stdio.h>

#define SIZE 7

int main(void) {

int w[SIZE];

printf(”Tabletter per veckodag?\n”);

for(int i=0;i<SIZE;i++) scanf("%d",&w[i]);

printf(”Kontrollutskrift!\n”);

for(int i=0;i<SIZE;i++) printf(”%d\n",w[i]);

return 0;

}

Tabletter per veckodag?

2 1 2 1 2 1 1

Kontrollutskrift!

2 1 2 1 2 1 1

(17)

int w[4][7]={{1,2,3,4,5,6,7}, {1,2,3,4,5,6,7}, {1,2,3,4,5,6,7}, {1,2,3,4,5,6,7}};

Skriv ut askens innehåll:

for (int r=0;r<4;r++){

for (int c=0;c<7;c++) printf(”%d ”,w[r][c]);

printf(”\n”);

}

1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7

Alla element har samma typ!

Antal element per dimension!

OBS: Elementen numreras från 0!

”rader”

”kolumner”

(18)

int w[7]={0,0,0,0,0,0,0};

I normalfallet är ett fälts längd alltid en konstant…

int size;

scanf(”%d”, &size);

int w[size];

I den ”nya” C-standarden (C99) kan det vara en variabel, något som är mycket ovanligt, utom i ett specialfall som vi

återkommer till i en senare föreläsning!

(19)

#include <stdio.h>

#define SIZE 7

int main(void) {

int w[SIZE];

int average=0;

printf(”Temperatur per veckodag?\n”);

for(int i=0;i<SIZE;i++) scanf("%d",&w[i]);

printf(”Medelvärde!\n”);

for(int i=0;i<SIZE;i++) average=average+w[i];

printf(”%d\n”,average/SIZE);

return 0;

}

Temperatur per veckodag?

15 16 17 18 19 20 21

Medelvärde!

18

(20)

En dator kan inte generera slumptal då den är helt deterministisk, däremot kan den generera pseudo- slumptal som kan fås att upplevas som slumptal:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main(void) {

srand(time(NULL)); //Anropas EN gång för att sätta frö int tarning1 = rand()%6+1; //blir slumptal 1-6

int tarning2 = rand()%6+1;

printf("du fick %d och %d",tarning1, tarning2);

return 0;

}

rand() beräknar nästa slumptal i serien. Resultatet blir mellan 0 och RAND_MAX

(21)

C saknaren speciell typ för att representera sant och falskt (de flesta språk har det) och använder istället 1 och 0. I C99 har man lagt till en header som delvis fixar detta. Boken använder detta så därför går vi igenom det nu:

#include <stdio.h>

#include <stdbool.h>

int main(void) {

bool flag;

flag = true;//eller false if(flag)

{

printf("Sant!");

}

return 0;

}

flag är egentligen en int men kan bara anta värdet 0 och 1. flag=5 ger flag värdet 1

(22)

• Codeblocks > Settings > Compiler…

(23)

Drivkraften att skapa datorer var ursprungligen behovet att felfritt utföra en stor mängd komplicerade beräkningar…

…i dag används datorer till allt från smarta eltandborstar till att styra farkoster till främmande planeter…

…att sortera en sekvens tal är något som en programmerare dagligen stöter på, vilket har inneburit att vedertagna sätt att lösa problemet har arbetats fram!

Det finns ett antal vedertagna strategier att ta till beroende på

”när” informationen kan bearbetas samt en avvägning mellan komplexitet och snabbhet i vald algoritm…

(24)

Vi ska börja med att titta på hur man kan sortera data med en metod som kallas ”bubbelsortering”. Andra sorteringsalgoritmer tas upp i senare kurser.

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).Ex:

12 8 14 9 2

(25)

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. Jämför tal 0 och 1:

Talet till vänster är större så vi byter plats!

Nu jämför vi tal 1 och 2:

Talet till vänster är mindre så ingen åtgärd. Nu jämför vi tal 2 och 3:

Talet till vänster är större så vi byter plats:

Nu jämför vi tal 3 och 4:

Talet till vänster är större så vi byter plats:

12 8 14 9 2

8 12 14 9 2

8 12 14 9 2

8 12 14 9 2

8 12 9 14 2

8 12 9 14 2

8 12 9 2 14

BYT!

BYT!

BYT!

OK!

(26)

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.

(27)

Jämför tal 0 och 1:

Ingen åtgärd. Nu jämför vi tal 1 och 2:

Talet till vänster är större så vi byter plats:

Nu jämför Vi tal 2 och 3:

Talet till vänster är större så vi byter plats:

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.

8 9 12 2 14

8 9 2 12 14

8 12 9 2 14

8 12 9 2 14

8 9 12 2 14

BYT!

OK!

BYT!

”klart!”

(28)

Steg 3: Jämför tal 0 och 1:

Ingen åtgärd. Nu jämför vi tal 1 och 2:

Talet till vänster är större så vi byter plats:

Steg 4: Jämför tal 0 och 1:

Talet till vänster är större så vi byter plats:

Vi kan nu vara säkra på att alla tal är i nummerordning!

8 9 2 12 14

8 9 2 12 14

8 2 9 12 14

8 2 9 12 14

2 8 9 12 14

BYT!

OK!

”klart!”

”klart!”

BYT!

(29)

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 Den inre loopen bubblar upp ett tal.

För varje varv bubblar ett nytt tal upp.

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;

} }

}

Varför fungerar inte:

tal[j]=tal[j+1]

tal[j+1]=tal[j]

0 1 n-2 n-1

(30)
(31)

• sizeof-operatorn svarar på hur många bytes (1 byte är 8 bitar, en bit är 1 eller 0) en typ eller variabel är

sizeof(char); //ger alltid 1

sizeof(int);//kan variera på 32-bitars dator oftast 4 int j;

sizeof(j);//går också bra

• Vad ska man ha detta till? Tex:

int i,a[5];

for(i=0;i<sizeof(a)/sizeof(a[0]);i++) a[i]=1;

(32)

• Matriser (array)

• Introduktion sortering

• Tentafrågor…

int a[]={1,2,3,4};

Int b[]={1,2,3,4};

a[4]=-4;

b=a;

printf(”%d\n”, a[b[2]]);

(1-dim matriser som parameter, föreläsning 5.) (2-dim matriser som parameter, föreläsning 8.)

(33)

Skriv ett program som läser in 10 siffror från användaren till en array och som sedan kontrollerar hur många åttor arrayen innehåller och skriver ut detta

Skriv ett program som lagrar 2 slumptal i en array och sedan sorterar dessa

Försök att förstå sorteringsalgoritmen och ändra sedan koden så att den sorterar med störst först

Läs 7.6 och Boolean Values in C99 sid 85 i 5.2

Läs 8.1

Gör K8 P1, P2, P3

Börja med att sätta dig in i programmet!

Vad gör n%10? 234%10 ger 4 Vad gör n/=10? 234/=10 ger 23

Läs 8.2 och 8.3

Gör K8 P7

Gör P9 om du hinner

E-excercises, P-programming projects

References

Related documents

De ska även ges möjlighet att utveckla ett kritiskt och ansvarsfullt förhållningssätt till digital teknik, för att kunna se möjligheter och förstå risker samt kunna

I Nero StartSmart har du möjlighet att välja ljudfiler från hårddisken och bränna dem på en ljud-cd-skiva som kan spelas upp på alla vanliga uppspelningsenheter.. Innan du bränner

Här finns flikar för de olika omslags- element som hör till den valda dokumenttypen, vare sig det är ett dokument av standardtyp eller ett egendefinierat dokument, samt linjaler

Detta gör att man kan använda cobotarna i många olika branscher och innebär att de på ett flexibelt sätt kan ställas om för att användas till olika uppgifter. Företaget, som

Till en telefonväxel ankommer i genomsnitt 90 anrop per timme. Vi antar att ankomster är Poissonfördelade. Bestäm sannolikheten att exakt 2 anrop kommer under ett tidsintervall som

Såväl den kognitiva funktionen, som den sociala funktionen i elevtexterna fungerar bäst i uppgift ett, vilket kan förklaras med att eleverna i den fria uppgiften hade sig själva

En stokastisk variabel ξ ¨ar normalf¨ordelad med parametrarna µ och σ &gt; 0 om den har t¨atheten (se fig. Bj¨orup &amp; Ed´en: Analys i en och flera dimensioner s.. En

Teknik för att på ett effektivt sätt tillverka, torka och distribuera knubbved/storflis har utvecklats sedan 1970-talet och maskiner för att tillverka bränslet finns att köpa,