F4 (5): Datastrukturer (kap. 6 7)

Relevanta dokument
F4: Datastrukturer (kap. 6 7) Komplexa tal Ö3: 5.2, 5.7, 5.14, 5.20

Komplexa tal. F4 (5): Datastrukturer (kap. 6 7)

Föreläsning 12: Datastrukturer & filer

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 8 december 2015 Sida 1 / 22

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

Introduktion till MATLAB

Börja programmera. Kapitel 4 i kompendiet Jämförande uttryck Villkorssatser Loopar (slingor) Funktioner. Läs inte avsnitt 4.2.3

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. save

Enkla datatyper minne

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

HI1024 Programmering, grundkurs TEN

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

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

Föreläsning 13. Träd

Föreläsning 3. Stack

Villkor if, switch. F2: Styrstrukturer, programmeringsteknik (kap. 3 4) If-kommando forts. If-kommando forts.

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

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Övning 1 - Abstrakta datatyper

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

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

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Användning av stack: evaluera uttryck i RPN

TDDC74 Programmering: Abstraktion och modellering Datortenta

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

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

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Klassdeklaration. Metoddeklaration. Parameteröverföring

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Matlabövning 1 Funktioner och grafer i Matlab

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 4 december 2015 Sida 1 / 26

TANA17 Matematiska beräkningar med Matlab

Datalogi, grundkurs 1

Beräkningsverktyg HT07

TDIU01 - Programmering i C++, grundkurs

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Datalogi för E Övning 3

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Datastrukturer och algoritmer

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

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 13:e januari klockan

F4. programmeringsteknik och Matlab

Föreläsning 3. Stack

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

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

Pythons standardbibliotek

Villkor, if, switch. F2: Styrstrukturer, programmeringsteknik (kap. 3 4) If-kommando forts. If-kommando forts.

Matriser och Inbyggda funktioner i Matlab

F2: Styrstrukturer, programmeringsteknik (kap. 3 4)

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Tentamen i Algoritmer & Datastrukturer i Java

Matlabövning 1 Funktioner och grafer i Matlab

TDIU01 - Programmering i C++, grundkurs

Exempel ( )

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

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

Grundkurs Programmering

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

Villkor if, switch. F2: Styrstrukturer, programmeringsteknik (kap. 3 4) If-kommando forts. If-kommando forts.

Repetition C-programmering

Tentamen Grundläggande programmering

Skizz till en enkel databas

Mer om funktioner och grafik i Matlab

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Datastrukturer och algoritmer

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Introduktion C-programmering

Rekursion och induktion för algoritmkonstruktion

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

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

Exempelsamling Assemblerprogrammering

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

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

TANA17 Matematiska beräkningar med Matlab

Lösningar till tentamen i EIT070 Datorteknik

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

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

TAIU07 Matematiska beräkningar med Matlab

PROGRAMMERING-JAVA TENTAMINA

Erfarenheter från labben

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

SMD 134 Objektorienterad programmering

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Transkript:

F4 (5): Datastrukturer (kap. 6 7) komplexa tal strängar och textbehandling posttabeller glesa tabeller celltabeller logisk tabell och mask GUI nästa F? formelbehandling p 1 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Komplexa tal Den imaginära enheten skrivs i eller j om man inte har gjort om i eller j till vanlig variabel. Kommandot clear i j återställer. Kommandot isreal undersöker om alla element har imaginärdelen 0. Funktioner som är definierade i matematiken för komplexa argument eller kan ge komplexa resultat fungerar så i Matlab. Exempel: Skriv en funktion som ritar bilden av +/-s kvadraten z = s (1+t i, t+i, 1 t i, t i) för 1<=t<=1 under avbildningen w=f(z) Im w = f(z) z = x+iy Re w = u+iv Im Re p 2 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

function ritakomplex(fun,s,step) % rita bild av "+/- s" kvadrat i komplexa z-planet if nargin < 3 step = 0.02; if nargin < 2 s = 1; t = [-1:step:1]; z = s*[1+t*i -t+i -1-t*i t-i]; % varför denna ordning % på de fyra delarna? w = feval(fun,z); % fun är : namn på funktion myplot(w,'-'); % tjocka kurvor & stort % typsnitt p 3 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Testa med ritakomplex('exp'); exp(x+i*y)= exp(x)*(cos y+i*sin y) De 4 delarna blir: (t: -1 1) 1: e*(cos t+i*sin t) 2: exp(-t)*(cos 1+i*sin 1) 3: (1/e)*(cos t-i*sin t) 4: exp(t)*(cos 1-i*sin 1) 2 1 0-1 -2 2 3 1 4-1 0 1 2 3 4 p 4 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Funktioner som har med komplexa tal att göra är: real(z) realdelen imag(z) imaginärdelen isreal(z) imaginärdelen är 0 abs(z) beloppet angle(z) argumentet conj(z) komplex-konjugat, negera imaginärdelen Exempel: Julia-mängd the Julia set consists of values such that an arbitrarily small perturbation can cause drastic changes in the sequence of iterated function values Gaston Maurice Julia (February 3, 1893 March 19, 1978) p 5 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Studera Newton-iteration med polynom 3 3 z z + 1 = 0: n + 1 zn+ 1 = zn 2 3z n π i(2k 1) Vi färgar komplexa talet z 0 efter den rot rk = e 3, k = 1,2, 3 som Newton-iterationen med start i z 0 konvergerar mot. Hur ser en sådan karta ut? Vi vet, att Newton-iteration konvergerar mot en rot om man startar tillräckligt nära, så det måste finnas små cirklar med färg k omkring r k. Julia-mängden är punkterna mellan olika färger. I matlab-programmet itererar vi med alla punkter i en kvadrat samtidigt. p 6 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

n = 500; x = linspace(0,2,n)-1; y = x'; z = 1i*y*ones(1,n)+ones(n,1)*x; % n x n kvadrat av komplexa tal nit = 0; root = exp((2*(1:3)-1)*1i*pi/3); % rötterna while 1 % oändlig while slinga clf % sudda z = z - (z.^3 + 1)./(3*z.^2); % Newton-iteration nit = nit + 1; % räkna iterationer f = zeros(size(z)); % initiera bild-tabell f for k = 1:3 % 3 rötter ind = abs(z-root(k)) < 0.1; % punkter nära en rot f(ind) = k; % logisk indicering (mask) surf(x,y,f); shading interp, view(2), axis equal % plotta 3D title (['Efter ',num2str(nit),' iter.']) pause p 7 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

2 iterationer. 6 iterationer. 17 iterationer. p 8 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Strängar och textbehandling Lagring, utskrift, operatorer, funktioner, ischar, double/int16/abs, char, [ ; ], char(' ',' '), deblank, strcat, strvcat (med utfyllnad), strcmp, strcmpi, strncmp, strncmpi, findstr, lower, upper, strings, tecken enligt Latin1 konverteras ok, strtok, p 9 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Strängar forts. En sträng är en radvektor med teckenelement. Konkatenera (sammanfoga) strängar horisontellt: t = ['abc' 'def ' 'ghi '] inklusive avslutande blanktecken (och andra»vittecken») i delarna, t = strcat('abc','def ','ghi ') ignorera avslutande»vittecken» i delarna. Konkatenera vertikalt: t = ['12345';'67890'] raderna måste vara lika långa t = strvcat('123',' ','45678') alla rader fylls med blanka till längsta radens längd, tomma strängar ignoreras. p 10 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

t = char('123',' ','45678') som strvcat men tomma strängar ignoreras ej. Man konverterar mellan tal och tecken med char och t.ex. abs. Man testar om tecken är bokstav med isletter och om ett tecken är»vittecken» med isspace. Man konverterar mellan versaler och gemena med lower och upper. Det finns olika sätt att söka och jämföra texter: findstr(text1, text2) ger de index i text1 där text2 börjar, strcmp(text1, text2) ger sant om texterna är lika, strcmpi(text1, text2) fungerar som strcmp(upper(text1), upper(text2)) dvs. ignorerar skiftläge strncmp(text1, text2, n) jämför de första n tecknen i texterna, p 11 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

[t,r] = strtok(s,d) letar nästa»token» (symbol) i s. Hoppa över inledande tecken ur d (delimiters, avskiljare), t är följande tecken som inte finns i d och r är resten av s. p 12 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

RPN och evaluering av uttryck RPN Reverse Polish Notation parentes-fri evaluering av uttryck EX 2+3: 2 3 + : 5 2 + 3*5: 2 3 5 * + : 17 2*(3+5): 2 3 5 + * : 16 (3+5)*2: 3 5 + 2 * : 16 Uppgift: Matlab-function som evaluerar en sträng innehållande ett korrekt RPN-uttryck med tal och operatorerna +,-,*,/,^ Lösning Som mini-räknare (HP) utan = -tangent. Ett register x, och en stack: Stack: Ett Last In, First Out minne där man ser bara sista elementet; som en tallriks-stapel. push(y): lägg y på stacken; p 13 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

y = pop: ta bort sista el. i stacken och lägg i y. Aritmetisk enhet (maskininstruktioner) som gör y = pop; x = y op x; Initiering: töm stack, NaN-> stack inmatning: tal eller operator. 1: Om inmatning = tom goto 2 annars om inmatning = operator op, y = POP % ta sista elementet ur stacken x = y op x % annars inmatning -> x, x -> stack, goto 1 2: x innehåller värdet. p 14 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

function x = myeval2(expr) clearstack; % empty stack x = NaN; % will never be used for non-empty expression while ~isempty(expr) [z,expr] = strtok(expr,' '); % z is next token, a string switch z case '+' x = pop+x; % STACK holds numbers, case '-' x = pop-x; case '*' x = pop*x; case '/' x = pop/x; case '^' x = pop^x; otherwise push(x); x = str2double(z); % so convert p 15 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

function x = pop global STACK K try % pops the stack x = STACK(K); K = K-1; catch x = NaN; disp('attempt to pop empty STACK') function push(x) global STACK K KMAX if isempty(stack) % pushes x onto STACK KMAX = 10; STACK = NaN(KMAX,1); K = 0; K = K+1; if K <= KMAX, STACK(K)=x; else disp(['stack overflow ',num2str(x)]) STACK %test-utskrift p 16 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

function clearstack % clears STACK global STACK STACK = []; p 17 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Posttabeller - struct I vanliga tabeller och celltabeller når man elementen med index. I posttabeller använder man namn för att nå elementen (=posterna). Vi kan använda en posttabell för att lagra information om bankkonton. Beskrivningen av ett konto är en»post», ett element i posttabellen. Varje post har samma uppsättning fält med varsitt namn. fältnamnen namn, konto, ranta och saldo funktionen trans, gör en transaktion trans har en lokal funktion regfind för att hitta en post med givet kontonummer. p 18 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Hur lagra konto-registret, säg 50000 st. konton, hur komma åt det från de olika funktionerna? Lösning: REG som global posttabell. Registret kan ju inte vara inparameter: de ändringar som görs av funktionen ska märkas utanför. Vi kan ha registret både som in- och utparameter men det innebär alltför mycket kopiering. function saldo = trans(accountno,amount) % Utför en banktransaktion. % saldo = trans(accountno,amount) % Om amount >=0 insättes amount på kontot. % Om amount<0 kontrolleras saldot och % om saldo+amount<0 skrivs ett varningsmeddelande % annars ändras saldo till saldo+amount. p 19 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Bankexempel forts. global REG index = regfind(accountno); % hitta kontot if index<=0 disp('kontonumret är okänt.'); saldo = -1; return; else % obs! utan ; ger fyra raders utskriften... strvcat(['transaktion med belopp ',num2str(amount)],... ['på konto ' num2str(accountno) ' med '],... ['innehavare ' REG(index).namn ' och ],... [ saldo före: ' num2str(reg(index).saldo) '.']) if REG(index).saldo+amount<0 % ingen täckning disp('övertrassering. Transaktionen utförs ej.'); saldo = REG(index).saldo; p 20 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

else % OK, utför saldo = REG(index).saldo+amount; REG(index).saldo = saldo; %----------------------------------------- function index = regfind(accountno) global REG index = -1; for no = 1:numel(REG) % är detta effektivt? (Nej) if REG(no).konto==accountno index = no; p 21 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Bankexempel forts. global REG REG.konto = 12357; REG.namn = 'Kloker'; % obs strängparenteser behövs REG.ranta = 2.2; REG.saldo = 200; REG(2).konto = 314159; REG(2).namn = 'Trötter'; REG(2).ranta = 1.9; REG(2).saldo = 10500; >>trans(12357,100) Transaktion med belopp 100 på konto 12357 med innehavare Kloker och saldo före: 200. ans = 300 p 22 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

>>trans(12357,100) Transaktion med belopp 100 på konto 12357 med innehavare Kloker och saldo före: 300. ans = 400 >>trans(12358,100) Kontonumret är okänt. ans = -1 >>trans(12357,-1000) Transaktion med belopp -1000 på konto 12357 med innehavare Kloker och saldo före: 300. Övertrassering. Transaktionen utförs ej. ans = 300 p 23 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Alt: läs från fil function readreg % program to read bank file % Reg(k).namn %.konto %.ranta %.saldo %-------------------------------------------- clear all global REG fname = uigetfile('*','bank file'); fid = fopen(fname,'r'); % filreferens % kan det misslyckas? %if fid==-1,disp( misslyckat! ), nacs = 0; % while 1 line = fgetl(fid); % nästa rad från filen if line == -1 % of file break p 24 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

nacs = nacs + 1; [nam,accno,ran,sald] = strread(line, '%s%d%f%f','delimiter',' '); REG(nacs).namn = nam; % text REG(nacs).konto = accno; % heltal REG(nacs).ranta = ran; % ranta i %, flyttal REG(nacs).saldo = sald; % saldo, flyttal fclose(fid); % p 25 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Mask logical indices Man kan välja ut vissa element i en tabell så att ast dessa element påverkas av en operation och övriga element lämnas opåverkade. För detta använder man en»logisk tabell». Användningen liknar användningen av masker i Photoshop o.d. Se också indicering av bild-tabellen f i Julia.m Ex. Fördubbla de positiva elementen i A. >>A = [0 1-7;-2 4 8;3-5 -17]; >>m = A>0; m ( ) >>A(m) = 2*A(m) A = 0 2-7 -2 8 16 6-5 -17 p 26 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Radplanering längre exempel Skriv en funktion som radplanerar en text, t, till angiven radlängd. t = ['Här har vi ett exempel på en text '... 'som ska radplaneras. Jag hoppas att det '... 'går bra.']; paragraph(t,12) Algoritm: Hitta alla blanktecken (findstr( )). Ord kan börja efter ett blanktecken och kan sluta med textens sista tecken, lägg därför till 0 före och numel(t)+1 efter Antag att nästa ord börjar efter nästa blanktecken och slutar före följande blanktecken. Ignorera tomma ord (flera blanka i rad). Om ordet ryms på raden lägg till blanktecken och ordet och håll reda på radens längd. p 27 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Om ordet inte ryms, lägg till raden i textmatrisen och lägg det nya ordet först på raden. När texten är slut, lägg sista raden till textmatrisen. function text = paragraph(t,llength) % Radplanerar texten t till radlängden llength. bpos = [0 findstr(t,' ') numel(t)+1]; % Index för blanka text = ''; % Det blivande stycket (textmatris), tom line = ''; % Aktuell rad, tom lpos = llength+1; % Antalet använda platser på aktuell rad: % se till att ny rad startas omedelbart for bno = 1:numel(bpos)-1 % För varje möjligt ord % Sök nästa ord, deblank ignorerar avslutande blanka word = deblank(t(bpos(bno)+1:bpos(bno+1)-1)); if ~isempty(word) % kunde ju vara bara blanka if llength<lpos+1+numel(word); p 28 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

% Ordet ryms ej, initiera ny rad text = strvcat(text,line); line = word; lpos = numel(word); else % Ordet ryms, % lägg en blank och ordet till aktuell rad line = [line ' ' word]; lpos = lpos+1+numel(word); % Hantera ev. icke-fylld slutrad if ~isempty(line) text = strvcat(text,line); p 29 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Radplanering forts. Testkör: >>t = ['Här har vi ett exempel på en text '... 'som ska radplaneras. Jag hoppas att det '... 'går bra.']; >>paragraph(t,12) ans = Här har vi ett exempel på en text som ska radplaneras. Jag hoppas att det går bra. p 30 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Radplanering testversion function text = paragraphdb(t,llength) % Radplanerar stycken till given radlängd. bpos = [0 findstr(t,' ') numel(t)+1] % Index för blanka text = ''; % Det blivande stycket line = ''; % Aktuell rad lpos = llength+1; % Antalet använda platser på raden % Så länge ord återstår for bno = 1:numel(bpos)-1 % Sök nästa ord it = bpos(bno)+1:bpos(bno+1)-1 % skriv ut! word = t(it); if ~isempty(word) if llength<lpos+1+numel(word) disp('ordet ryms ej'); % Initiera ny rad text = strvcat(text,line) line = word lpos = numel(word) else disp('ordet ryms'); % Lägg odet till aktuell rad p 31 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

line =[line ' ' word] lpos = lpos+1+numel(word) % Hantera ev. icke-fylld slutrad if ~isempty(line) text = strvcat(text,line); Testkör: t = ['Här har vi ett exempel på en text '... 'som ska radplaneras. Jag hoppas att det '... 'går bra.']; >> paragraphdb(t,12) bpos = Columns 1 through 13 0 4 8 11 15 16 24 27 30 31 32 33 38 Columns 14 through 26 42 43 47 60 61 62 66 73 74 78 82 p 32 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

86 91 it = 1 2 3 Ordet ryms ej text = '' line = Här lpos = 3 it = 5 6 7 Ordet ryms line = Här har lpos = 7 it = 9 10 Ordet ryms line = Här har vi lpos = 10 it = 12 13 14 p 33 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Ordet ryms ej text = Här har vi line = ett lpos = 3 it = Empty matrix: 1-by-0 it = 17 18 19 20 21 22 23 Ordet ryms line = ett exempel p 34 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Datarepresentation Talet sjutton kan representeras som strängen '17'; lagras som (ascii) koden för '1' som är 49 följt av koden för '7' som är 55 (8 bits binärt: 00110111, oktalt: 67, sedecimalt: 37) eller som heltal 17; lagras som binärt heltal 0 010001 (int64: 64 bits) eller som flyttal 1.7e1; lagras som ett annat bitmönster med delarna t1 m t2 e t1*m*2^(t2*e). Man kan konvertera mellan strängform och intern binär form med num2str, str2num och andra funktioner. p 35 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Glesa tabeller sparse arrays I vissa sammanhang använder man tabeller där de flesta elementen är 0. Man kan ange att tabeller ska lagras som glesa tabeller dvs. som en följd tripler (i,j,aij): i = radnummer, j = kolumnnummer och aij = värde för de element som inte är 0. Många numeriska metoder använder glesa matriser (Lab 5). Grafer kan beskrivas med glesa matriser t.ex. för att hitta billigaste väg eller gå igenom en labyrint. Ex. A = rand(100); m = A<0.95; % obs logisk indicering % m är 1D vektor A(m) = 0; % de flesta blir noll A = sparse(a) % spara bara icke-nollor spy(a) % visa var icke-nollor finns p 36 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

Celltabeller cell arrays I vanliga tabeller har alla element samma typ. I celltabeller kan elementen ha olika typ. Ett 2 x 2 exempel >>a = [ {[1 3 7;2 0 6;0 5 1]}, {'This is a text.'}; {[3+4*i 5;-10*i 3-4*i]},{[]} ]; >>a(1,1) % cellen med index (1,1) ans = [3x3 double] >>a{1,1} % KRULLparentes! innehåll i cell index (1,1) ans = [1 3 7 2 0 6 0 5 1] p 37 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12

En celltabell är en tabell med celler som element. Varje cell är en variabel. Man kan använda ett förenklat skrivsätt: a = {[1 3 7;2 0 6;0 5 1],'This is a text.';... [3+4*i 5;-10*i 3-4*i],[]}; En cell kan innehålla en celltabell. p 38 (38) JOp,Staffan Romberger, CSC, KTH, 2011-09-12