Læringsmål og pensum. Oversikt. Læringsmål Forstå og bruke cell array og strukturer. Pensum Matlab, Chapter 8

Like dokumenter
Læringsmål og pensum. Oversikt

TDT4110 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

TDT4105 Informasjonsteknologi grunnkurs: Uke 43: Datastrukturer (kap. 8)

Datastrukturer (kap. 8)

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre,

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

TDT4105 Informasjonsteknologi grunnkurs: Uke 42 Strenger og strenghåndtering

TDT4105 Informasjonsteknologi grunnkurs Øvingsforelesning 2. Iver Dihle Skjervum Vit.ass. ITGK

Læringsmål og pensum. Tekststrenger Læringsmål Skal kunne forstå og programmere med tekststrenger. Pensum Matlab, Chapter 7

Binærfiler versus tekstfiler

Del 4 Noen spesielle C-elementer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

TDT4105 Informasjonsteknologi, grunnkurs MatLab: Filbehandling - load, save, type - fopen, fgetl, feof, fprintf, fclose

Læringsmål og pensum. Oppgave

Noen innebygde funksjoner - Vektorisering

Noen innebygde funksjoner - Vektorisering

TDT4105 Informasjonsteknologi, grunnkurs

Tall, vektorer og matriser

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Største primtallsfaktor i tall

Læringsmål og pensum

Oppsummering fra sist

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

TDT4110 Informasjonsteknologi grunnkurs: Uke 41: «Matlab programs» (kapittel 6)

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

TDT4105 Informasjonsteknologi, grunnkurs. Mer om funksjoner: - rekursive funksjoner

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

ITGK - H2010, Matlab. Repetisjon

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Øvingsforelesning TDT4105 Matlab

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Læringsmål og pensum. Forberdring vha preallokering. Oversikt

Del 1 En oversikt over C-programmering

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Forelesningsinfo. Tider Mandag Tirsdag Onsdag Torsdag Fredag

TDT4110 IT Grunnkurs Høst 2015

Læringsmål og pensum. if (be): else (not_to_be):

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler. - 3rd edition: Kapittel 7. Professor Alf Inge Wang

UNIVERSITETET I OSLO

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

TDT4110 Informasjonsteknologi grunnkurs: Programmering: En større case. Professor Alf Inge Wang

Læringsmål og pensum. En større case. Mål Lære å lage større og sammensatte programmer Pensum Kapitlene 1-9 og 12.

Norsk informatikkolympiade runde

Øvingsforelesning i Matlab TDT4105

Programmering Høst 2017

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Øvingsforelesning TDT4105 Matlab

Øvingsforelesning TDT4105 Matlab

TDT4105 Informasjonsteknologi, grunnkurs. Matlab 5: Løkker (FOR og WHILE) Matlab 6: Problemløsning / Algoritmer

Obligatorisk oppgave 1 INF1020 h2005

TDT4105 IT Grunnkurs Høst 2016

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

løsningsforslag-uke5.txt

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

TDT4105 Informasjonsteknologi, grunnkurs. Matlab 5: Løkker (FOR og WHILE) Matlab 6: Problemløsning / Algoritmer

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Læringsmål og pensum. Designe et program

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Informasjon Eksamen i IN1000 høsten 2017

Tirsdag 21/11. Onsdag 24/11. Tirsdag 12/12. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case

TDT4110 IT Grunnkurs Høst 2016

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Oblig 4Hybelhus litt mer tips enn i oppgaven

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

Kapittel 1 En oversikt over C-språket

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

UNIVERSITETET I OSLO

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Visual Basic. Repetisjon fra onsdag

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

O-notasjon og kompleksitet

Transkript:

1 2 Læringsmål og pensum Læringsmål Forstå og bruke cell array og strukturer TDT4105 Informasjonsteknologi grunnkurs: Uke 42 Cell arrayer og strukturer Pensum Matlab, Chapter 8 Asbjørn Thomassen, IDI 3 Oversikt Cell array Strukturer Programeksempel: Teatersal 4 Forskjellige datatyper hittil Enkle verdier (skalarer) lagret i variable: K = 1.34; %double evt single heltall = int32(20); % int32 evt. int8, int16 etc bokstav = a ; % char logiskvar = true; %logical Arrrayer av disse ovenfor (vektor/matrise): tv = mangebokstaver ; % char tekststreng er vektor Kv = [ 33.5 12 67 11] lv = logical([ 0 1 0 0 1 1]) tabell = [ 1 6 ; 8 7] Merk at alle elementene i et array er av samme type/ting I matriser av tekst må rekkene ha samme lengde Indekserering: tabell(2,1) eller lv(3) Elementene er som enkle variable: Kv(3)= 45

5 6 Tekst i vanlig matrise >> t = [ 'ok';'dette er en tekst']; >> whos Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== t 2x17 34 char Rekkene må være like lange. Matlab fyller inn blanke. Når størrelsen er satt kan du ikke re den: >> t(1,1:3)= hei %feiler Men kan legge til eller slette/re hele rekker (men husk riktig lengde!): >> t(2,:) ='ok ' % blanke er nødvig! Datastrukturer - cell array En datastruktur er en variabel som en lagrer mer enn en verdi. et element i et array (vektor,matrise) er også en variabel Et array er en datastruktur som inneholder logisk relaterte elementer - Alle array vi har sett på tidligere har måtte ha elementer av lik type Med cell array kan en ha elementer med verdier av ulik type Brukes ofte til lagre tekst av ulik lengde Husk i vanlig matrise måtte rekkelengden være den samme Gjør det mulig å referere til dataene med rekke- og kolonnenotasjon, enn ved felt navn (se senere om strukturer) Lagrer internt en peker til data 7 Lage Cell Arrays 8 RAM 4 bytes ord Cell array og tekst Samme måte som tidligere for vektorer og matriser MEN må bruke krøll-parentes { } cv cv{1} cv{2}.. cv = cell(1,10); cv{4} = ok ; cv{5} = 32; cv{10} = dette er en tekst ; cvec = { tdt4015, 500, false, 1:2:10} cmat = { tdt4015, 500; false, 1:2:10} Kan preallokere vha av funksjonen cell Vanlig parentes her fordi dette er et funksjonskall cmat = cell(3,2) Merk at dette lager en 3x2 cell-matrise med tomme elementer Mmmerk blanding av ulike typer som char, double og logical o d t e e n e S k 32 e t r e t k t cv{10} Workspace >> whos Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== cv 1x10 27 cell peker

9 10 Hente ut data cell array Nøstede cell array Elementene aksesseres tilsvare som tidligere array men med { } rundt indekser: cmat{1,2} Dersom et element er en vektor, kan vi hente ut elementene med å legge til indeks i vektoren i parentes: cmat{1,2}(4) % henter 4 element i vektor lagret i cmat{1,2} Som før gir f.eks cvec{1:2} element 1 til 2 etc. [a b c] = cellmat{1:3} En kan ikke slette et element i et cell array ved å bruke [] Dette setter bare elementet til den tomme vektor Men en kan slette en hel rekke eller kolonne vha [] cv cv{4}{1} cv{4}(2} cv{4}{3} cv{4}{4} O a N r a n 34 l o m n 7020 1 cv{1} cv{2}... Workspace cv = cell(1,10); %vektor type cell array cv{4} = cell(1,4); %alder, navn, postnr,gift cv{4}{1}= 34; cv{4}{2}= Ola Normann ; cv{4}{3}= 7020; cv{4}{4}= true; Må selv huske hva cell arrayet inneholder cv{4}{2}(1) kan være første bokstav i navnet på en person etc. 8 byte 4 byte (32 bit ordlengde) 2 byte 11 12 Utskrift Oversikt celldisp skriver ut alle elementene i et cell array disp skriver ut hele cell-array strukturen fprintf kan ikke skrive ut et cell array, men kan håndtere enkeltelementer som er av vanlig type som char, logical, double, int etc. Cell array Strukturer Programeksempel: Teatersal fprintf( Navnet er:%s, cv{4}{2})

13 Struktur Samling av dataelementer (verdier) som hører sammen (ting, arkivkort etc) Dataelementene i en struktur har navn (feltnavn) og verdi: Eks: personer i et arkiv for billetter til et teater har feltene: navn, adresse, alder, sesongkort, gruppeid Eksempelarkiv teaterkunde: navn: Ola Normann navn: navn: adresse: Ola Normann Ola Normann Trondhjemsv 12 adresse: adresse: alder: Trondhjemsv 12 alder: Trondhjemsv 32 32 12 alder: sesongkort: sesongkortt: 32 Ja Ja sesongkortnent: gruppeid: gruppeid: (tomt) Ja (tomt) gruppeid: (tomt) 14 Lage strukturer bruk den innebygde funksjonen struct etterfulgt av felt - verdi par: teaterkunde = struct( navn, Ola Normann, adresse, Trondhjemsv 2, alder, 32, abonnent, true, gruppid,0); eller bruk dot-operatoren. som lager et nytt felt dersom feltet ikke eksisterer fra før (vanlig tilordning ellers) : teaterkunde.navn = Ola Normann ; teaterkunde.alder = 32; tilordning med strukturvariabel kopierer hele strukturen person = teaterkunde; datafeltene hentes ved å bruke dot-operatoren. på strukturvariabelen: if teaterkunde.alder > 30 bolig = teaterkunde.adresse 15 16 Innebygde strukturfunksjoner Strukturvektorer rmfield returner en ny struktur med oppgitt felt fjernet Den gamle er uret isstruct returner true hvis innvariabelen er en struktur isfield returner true hvis feltet er en del av strukturen fieldnames returner et cell array med feltnavnene isempty returnerer true hvis feltet er tomt (brukes også på cell array) Hvert element i vektoren er en struktur Lages ved: Enkel struktur-variabel som utvides til vektor teaterkunde = struct( navn, Ola Norman.); teaterkunde(2) = struct( navn, Kari Skuespiller.); Bruke vektor av type struct med en gang teaterkunde(1) = struct( navn, Ola Norman.); teaterkunde(2) = struct( navn, Kari Skuespiller.); For begge alternativer over utvides vektor ved referanse til nye indekser (som før)

17 18 Strukturvektorer (2) Utskrift av strukturer Mer effektiv med plassallokering Begynn med siste element (Matlab lager elementene fra en og opp) Eller bruk repmat til å lage elementene og deretter sette inn ønskede verdier i strukturelementenes felter. disp kan skrive ut hele strukturen eller et felt disp(teaterkunde) disp(teaterkunde.alder) A = struct( navn,?, alder, 23); % Lager en enkel struktur B = repmat(a, 1,15) %lager en vektor med 15 strukt-elementer tabell = repmat(a, 10,15) % 10x15 matrise fprintf kan bare skrive ut individuelle felter (ikke en en hel struktur) 19 Eksempeluttrykk for (deler av) strukturer teaterkunde gir hele vektoren av strukturer teaterkunde(1) gir første element i en vektor, som er en struktur teaterkunde(1).alder er aldersfeltet i strukturen som er av type double teaterkunde(1).navn gir navnefeltet/bool etc. registrerkunde(teaterkunde) gir inn strukturen til funksjonen (kopi dvs call-by-value) 20 Nøstede strukturer Er strukturer som inneholder substrukturer (lag felter på vanlig måte men med verdier som er strukturer): vakt = struct( ansvarlig, struct( navn, Ola Normann, tlf, 53455),... avdeling, b2, startid, 1515,... slutt_tid, 2230); Setter verdier ved: vakt.ansvarlig.navn = kari sjef ; vakt.ansvarlig.tlf = 77451; vakt.avdeling = hjertea7 ;

21 22 Tips Oversikt Bruk array når verdiene er samme type og representerer på en måte samme ting Bruk cell array eller strukturer når verdiene er logisk relaterte, men ikke er samme type eller ting Cell array Strukturer Programeksempel: Teatersal Bruk cell arrays når du skal lagre tekststrenger av ulik lengde vil gå gjennom data i en løkke Bruk strukturer når du vil bruke navn for aksessering 23 Programeksempel Teatersal Lag enkel versjon for reservering av plass (skript) - 1a pseudokode datastruktur Utvid skriptet til å håndter pris, antall billetter og salgsinntekt -1b 24 Eksempel 1a I denne oppgaven betrakter vi en teatersal som består av 10 rader. I hver rad er det 15 stoler. Du skal lage et program i Matlab som reserverer plasser i salen. Programmet skal fungere på følge måte: En tilskuer fremmer ønske om hvilken plass (rad og stol) hun eller han ønsker å reservere. Dersom plassen er ledig blir den reservert (teksten : Plassen blir reservert skrives ut), dersom plassen er opptatt skrives teksten : Plassen er opptatt ut. Lag egen funksjon for prisberegning 1-c Programmet skal kunne gjentas for et vilkårlig antall reservasjoner. Lag egne funksjoner for å lese inn lovlig stolnr. og skrive ut bildet av reserverte seter i salen (matrise) 1d Når plassregistreringen er avsluttet skal programmet skrive ut en oversikt som viser hvilke av plassene som er reservert og hvilke som ikke er det. Utvid programmet til å lagre person, rabatt etc. for hvert sete 1e Kan senere utvides til å tolke fleksible kommandoer Øverst på neste foil er et eksempel på utskrift vist.

25 Eksempel 1a 26 Løsningsstrategi : - skriv programmet i pseudokode - velg datastruktur - skriv programmet i Matlab - Test ut programmet 27 1 2 3 4 5 6 7 8 9 10 Eksempel 1b Programmet i Eksempel 1 a skal nå res. Det skal beregne og skrive ut hvor mange billetter som er reservert og den totale billettinntekt. Figuren under viser prisene i kr. for de forskjellige stolsetene i teatersalen. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 200 400 200 300 500 300 100 300 100 28 if rad <= 3 if stol > 4 && stol <=11 pris = 400; else pris = 200; elseif rad <= 7 if stol > 4 && stol <=11 pris = 500; else pris = 300; elseif stol > 4 && stol <=11 pris = 300; else pris = 100; 1 3 7 1 4 11 200 300 100 antall = antall + 1; inntekt = inntekt + pris; 400 200 500 300 300 100

29 30 Legg inn initiering av en tellevariabel (antall billetter) og en summeringsvariabel (inntekter) Fyll inn programkode her som finner korrekt pris og som oppdaterer antall og inntekt 31 Eksempel 1c 32 Den delen av programmet som bestemmer prisen for en plass skal nå skilles ut i en egen funksjon. Funksjonen skal motta rad og stol og skal returnere prisen på den aktuelle plass. Funksjonskallet får dette utsee: finnpris(rad, stol)

33 Eksempel 1d 34 Nå er det programmet i Eksempel 1c som skal res. Den delen av programmet som skriver ut oversikten over reserverte plasser skal nå skilles ut som egen funksjon. I tillegg ønsker vi å forsikre oss om at stol-nr som leses inn ikke skal være mindre enn 1 eller større enn 15. Initier Les rad gjenta så lenge lovlig rad les inn stolnr. hvis stol ledig Reserver plass Beregn pris på billett Oppdater inntekter og antall ellers Plass er opptatt slutthvis sluttgjenta skriv ut seteoversikt sluttprog function res = lesstolnr(m) res = -1; while res < 1 res > m res = input('skriv inn stolnr. : '); function skrivutmatrise(s) [antrekker antkolonner] = size(s); for n = 1 : antrekker for m= 1 : antkolonner fprintf('%3.0f, s(n,m)); fprintf('\n'); fprintf('\n'); 35 36 Eksempel 1e Nå skal programmet utvides til å registrere persondata om hver kunde som kjøper billett. Det skal være valgfritt hvilke felter som skal fylles inn. Forbokstaven for hver kunde skal nå også skrives ut på seteplassen.

37 Valg av datastruktur En person representeres som en struktur med feltene: 38 navn: Ola Normann adresse: Trondhjemsv 12 sesongkort: Ja gruppeid: (tomt) Gjør om salen til et array av struct og setter inn personene forløpe Siden salens størrelse er kjent preallokerer vi plass Antar at dersom feltet navn er (tomt) så er plassen ledig. Når ledig sete er funnet, spør programmet etter (deler av) feltene og legger de inn i valgfri rekkefølge. Velger forbokstaven til feltene som kommando (f for ferdig). 39