Indicerade variabler

Relevanta dokument
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

Indexerade variabler

översiktskurs (5DV031)

Föreläsning 9. Repetition och exempelproblem

Loopar och datatyper. Föreläsning 3

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

Planering Programmering grundkurs HI1024 HT 2014

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

Loopar och datatyper. Föreläsning 3

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

Planering Programmering grundkurs HI1024 HT TIDAA

Planering Programmering grundkurs HI1024 HT data

Funktioner och programstruktur. Föreläsning 5

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

Enkla uppgifter. Uppgift 1. Uppgift 2

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

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

Uttryck och villkor. Föreläsning 2

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

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

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

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

Funktioner och programstruktur. Föreläsning 5

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

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

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Magnus Nielsen, IDA, Linköpings universitet

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

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

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Repetition C-programmering

Föreläsning 11. Strängar

Typkonvertering. Java versus C

TDIU01 - Programmering i C++, grundkurs

Programmering B med Visual C

*Pekarvärden *Pekarvariabler & *

Föreläsning 8: Exempel och problemlösning

C++ Slumptalsfunktioner + switch-satsen

Programmering i C, 7,5 hp

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Enkla datatyper minne

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

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

Introduktion C-programmering

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

Datastrukturer. Typdeklarationer. Ny datastruktur i C- struct. exempel. Ofta bra att kunna fšra ihop information av olika datatyper till en enhet.

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

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

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

En kort text om programmering i C.

Data, typ, selektion, iteration

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

Föreläsning 5 Innehåll

Inledande programmering med C# (1DV402) Summera med while"-satsen

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

samt lite algoritmer en kortfattad introduktion för studenter på Intro:DV

TDDC77 Objektorienterad Programmering

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

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

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

HI1024 Programmering, grundkurs TEN

Lektion 7. Datateknik A, Java I, 5 poäng

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

Programmering Grundkurs (HI1900) Teoridel

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

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

Funktioner. Jan Erik Moström,

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

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

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

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 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 13. Dynamisk programmering

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

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

tentamensdags och lab 3

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

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

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

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.

Visual Basic, en snabbgenomgång

Tentamen Grundläggande programmering

Parameteröverföring. Exempel. Exempel. Metodkropp

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Uttryck och villkor. Föreläsning 2

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

Att använda pekare i. C-kod

Transkript:

Indicerade variabler

ARRAYER kan vara VEKTORARRAYER eller MATRISARRAYER Deklaration och användning av array (=vektorarray) Array och for-loop Slumptal Arrayer i två dimensioner (= matrisarray, matris) s izeof bool i c99 Sortering

int a[3]; a[0]=2; a[1]=7; a[2]=9; printf("test: %d, %d, %d",a[0],a[1],a[2]); Resultat: Test: 2, 7, 9 a[0] a[1] a[2] a 2 7 9

#include <stdio.h> #define LANGD 5 int main(void) int a[langd]; Pa plats: 0 har vi 1 int i; Pa plats: 1 har vi 2 for(i=0;i<langd;i++) Pa plats: 2 har vi 3 Pa plats: 3 har vi 4 a[i]=i+1; Pa plats: 4 har vi 5 for(i=0;i<langd;i++) printf("pa plats: %d har vi %d\n",i,a[i]); return 0;

#include <stdio.h> #define LANGD 5 int main(void) int a[langd]; int i; for(i=0;i<langd;i++) scanf("%d",&a[i]); int sum=0; for(i=0;i<langd;i++) sum = sum+a[i]; printf("summan blir: %d \n",sum); return 0;

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

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

1, 2, 3, 4 5, 6, 7, 8 9,10,11,12 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++; Observera att det går att ha arrayer med ännu fler dimensioner!

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;

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

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

Sortering (forts) 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)

Vi ska börja med att titta på hur man kan sortera data med en metod som kallas bubbelsortering. Andra sorteringsalgoritmer tas upp i kommande föreläsningar. 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 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

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 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: 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!

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 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=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; for(i=0;i<antal;i++) printf("%d,",x[i]); 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; for(i=0;i<antal;i++) printf("%d,",x[i]); printf("\n");

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, observera att vi inte gått igenom initialisering alls men det ingår absolut 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 (8.3 har vi inte heller gått igenom!) Gör K8 P7 Gör P9 om du hinner E-excercises, P-programming projects