Indexerade variabler

Relevanta dokument
Indicerade variabler

Arrays (indicerade variabler) Föreläsning 4

Arrays (indicerade variabler) Föreläsning 6

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

Föreläsning 9. Repetition och exempelproblem

Föreläsning 6. Slumptal Testa slumptal Slumptal för olika fördelningar Grafer Datastrukturen graf

Loopar och datatyper. Föreläsning 3

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

översiktskurs (5DV031)

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

Loopar och datatyper. Föreläsning 3

Planering Programmering grundkurs HI1024 HT 2014

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

Planering Programmering grundkurs HI1024 HT TIDAA

Planering Programmering grundkurs HI1024 HT data

Funktioner och programstruktur. Föreläsning 5

Data, typ, selektion, iteration

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

*Pekarvärden *Pekarvariabler & *

4 Sammansatta datatyper

Uttryck och villkor. Föreläsning 2

En kort text om programmering i C.

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

Föreläsning 10. Pekare (Pointers)

Programmeringsteknik med C och Matlab

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

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

Föreläsning 11. Strängar

TDIU01 - Programmering i C++, grundkurs

Programmering i C, 7,5 hp

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Parameteröverföring. Exempel. Exempel. Metodkropp

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

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

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

Enkla datatyper minne

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

Att använda pekare i. C-kod

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Grundkurs Programmering

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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.

Introduktion C-programmering

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

Repetition C-programmering

Tentamen Grundläggande programmering

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

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

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

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

Funktioner och programstruktur. Föreläsning 5

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Arrayer. results

Föreläsning 2, vecka 8: Repetition

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

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Magnus Nielsen, IDA, Linköpings universitet

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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

HI1024 Programmering, grundkurs TEN

Datorteknik 2 (AVR 2)

Objektorienterad Programmering (TDDC77)

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

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

Tommy Färnqvist, IDA, Linköpings universitet

Tecken & Strängar. Kapitel 7

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

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

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

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,

Sökning och sortering

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Programmering B med Visual C

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

Föreläsning REPETITION & EXTENTA

Föreläsning 5 Innehåll

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

7 Programmeringsteknik

Visual Basic, en snabbgenomgång

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Värmedistribution i plåt

TDDC77 Objektorienterad Programmering

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

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

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

Objektorienterad Programmering (TDDC77)

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

Transkript:

Indexerade variabler

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

Varför vill någon skriva ett program?

Varför vill någon skriva ett program? Arbetsintensiv Monoton Automatisera en manuell process Farlig Felkänslig Läs av trycket Beräkna korrigering Ställ in korrigering Börja om! Sekvens (Imperative) Procedurer (Functional) Struktur (Structual)

OTROLIGT Varför vill någon skriva ett program? använd ett språk som gör det lätt att skriva ett program som speglar verkligheten! Java Ada C LISP

Varför vill någon skriva ett program? Arbetsintensiv Monoton Automatisera en manuell process Farlig Felkänslig Programmet består av instruktioner som styr i vilken ordning som olika operationer utförs på programmets variabler. Vad är variabler?

Varför vill någon skriva ett program? Automatisera en manuell process Programmet består av instruktioner som styr i vilken ordning som olika operationer utförs på programmets variabler. Vad är variabler? x x1 MINNE Arbetsintensiv Monoton Ett namn på en plats i minnet vars innehåll kan vara kopplad till något i verkligheten. P R O G R A M V A R I A B L E R Farlig Felkänslig xfd temp 37 temp=37 CPU

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? Arbetsintensiv Monoton Automatisera en manuell process Farlig Felkänslig Ett namn på en plats i minnet vars innehåll kan vara kopplad till något i verkligheten.

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? Arbetsintensiv Monoton Automatisera en manuell process Farlig Felkänslig Ett namn på en plats i minnet vars innehåll kan vara kopplad till något i verkligheten. Styr minnesbehov och hjälper kompilatorn hitta fel!

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? Arbetsintensiv Monoton Automatisera en manuell process Farlig Felkänslig Ett namn på en plats i minnet vars innehåll kan vara kopplad till något i verkligheten. Styr minnesbehov och hjälper compilatorn hitta fel! Så här långt har vi lärt oss använda några skalära (basic, builtin, ett värde ) datatyper 2. xfa tryck xfd temp 37 xff mod N

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? Arbetsintensiv Monoton Automatisera en manuell process Farlig Felkänslig Ett namn på en plats i minnet vars innehåll kan vara kopplad till något i verkligheten. Styr minnesbehov och hjälper compilatorn hitta fel! Så här långt har vi lärt oss använda några skalära (basic, builtin, ett värde ) datatyper float int char 2. xfa tryck xfd temp 37 xff mod N

Skriv ut askens innehåll: int mo=,tu=,we=,th=; int fr=,sa=,su=; xf9 mo xfa tu xfb we xfc th xfd fr xfe sa xff su 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);

Skriv ut askens innehåll: Alla element har samma typ! Antal element! OBS: Elementen numreras från! W[1] är det andra elementet! int w[7]={,,,,,,}; xf9 w[] xfa w[1] xfb w[2] xfc w[3] xfd w[4] xfe w[5] xff w[6] for (int i=;i<7;i++) printf( %d\n,w[i]);

Skriv ut askens innehåll: Alla element har samma typ! Antal element! OBS: Elementen numreras från! W[1] är det andra elementet! int w[7]={,,,,,,}; xf9 w[] xfa w[1] xfb w[2] xfc w[3] xfd w[4] xfe w[5] xff w[6] for (int i=;i<7;i++) printf( %d\n,w[i]); INDEX UTANFÖR FÄLTET!

Skriv ut askens innehåll: Alla element har samma typ! Antal element! OBS: Elementen numreras från! W[1] är det andra elementet! int w[7]={,,,,,,}; xf9 w[] xfa w[1] xfb w[2] xfc w[3] xfd w[4] xfe w[5] xff w[6] Byt 7 till SIZE for (int i=;i<7;i++) printf( %d\n,w[i]); INDEX UTANFÖR FÄLTET! #define SIZE 7

#include <stdio.h> #define SIZE 7 int main(void) { int w[size]; } printf( Tabletter per veckodag?\n ); for(int i=;i<size;i++) scanf("%d",&w[i]); printf( Kontrollutskrift!\n ); for(int i=;i<size;i++) printf( %d\n",w[i]); return ; Tabletter per veckodag? 2 1 2 1 2 1 1 Kontrollutskrift! 2 1 2 1 2 1 1

Skriv ut askens innehåll: Alla element har samma typ! Antal element per dimension! OBS: Elementen numreras från! rader int w[4][7]={{1,2,3,4,5,6,7}, kolumner {1,2,3,4,5,6,7}, {1,2,3,4,5,6,7}, {1,2,3,4,5,6,7}}; for (int r=;r<4;r++){ for (int c=;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

I normalfallet är ett fälts längd alltid en konstant int w[7]={,,,,,,}; 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! int size; scanf( %d, &size); int w[size];

#include <stdio.h> #define SIZE 7 int main(void) { int w[size]; int average=; printf( Temperatur per veckodag?\n ); for(int i=;i<size;i++) scanf("%d",&w[i]); Temperatur per veckodag? 15 16 17 18 19 2 21 Medelvärde! 18 printf( Medelvärde!\n ); for(int i=;i<size;i++) average=average+w[i]; printf( %d\n,average/size); } return ;

En dator kan inte generera slumptal då den är helt deterministisk, däremot kan den generera pseudoslumptal 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 ; } rand() beräknar nästa slumptal i serien. Resultatet blir mellan och RAND_MAX

C saknaren speciell typ för att representera sant och falskt (de flesta språk har det) och använder istället 1 och. 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 ; } flag är egentligen en int men kan bara anta värdet och 1. flag=5 ger flag värdet 1

Codeblocks > Settings > Compiler

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

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

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 och 1: BYT! 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: OK! 8 12 14 9 2 Talet till vänster är mindre så ingen åtgärd. Nu jämför vi tal 2 och 3: BYT! 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: BYT! 8 12 9 14 2 Talet till vänster är större så vi byter plats: 8 12 9 2 14

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.

Jämför tal och 1: klart! OK! 8 12 9 2 14 Ingen åtgärd. Nu jämför vi tal 1 och 2: BYT! 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: BYT! 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: Jämför tal och 1: OK! 8 9 2 12 14 Ingen åtgärd. Nu jämför vi tal 1 och 2: BYT! 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 och 1: klart! klart! BYT! 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!

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

sizeof-operatorn svarar på hur många bytes (1 byte är 8 bitar, en bit är 1 eller ) 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=;i<sizeof(a)/sizeof(a[]);i++) a[i]=1;

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

Skriv ett program som läser in 1 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%1? 234%1 ger 4 Vad gör n/=1? 234/=1 ger 23 Läs 8.2 och 8.3 Gör K8 P7 Gör P9 om du hinner E-excercises, P-programming projects