Föreläsning 12: Datastrukturer & filer

Relevanta dokument
Föreläsning 5: Grafiska användargränssnitt

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

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

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

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

Programmeringsteknik med C och Matlab

Matematisk Modellering

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

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

Textsträngar från/till skärm eller fil

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

Beräkningsvetenskap föreläsning 2

Filer och structer Del 2

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

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

Matematisk Modellering

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

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

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

TANA17 Matematiska beräkningar med Matlab

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

2 februari 2016 Sida 1 / 23

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

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

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

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

Introduktion till MATLAB, med utgångspunkt från Ada

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

Föreläsning 13. In- och utmatning

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Objektorienterad Programmering (TDDC77)

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Introduktion till MATLAB

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

Strängar. Strängar (forts.)

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

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

Deklarera en struct som kan användas för att representera en rät linje

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

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

Översikt över Visual Basic

Enkla datatyper minne

729G04 Programmering och diskret matematik. Föreläsning 7

Föreläsning 2, vecka 8: Repetition

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

4.3. Programmering i MATLAB

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

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

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

Funktioner forts. F3: Funktioner (kap. 5) Parametrar. findgear.m forts

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

Datastrukturer. föreläsning 3. Stacks 1

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

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

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

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

TANA17 Matematiska beräkningar med Matlab

Filer. DA2001 (Föreläsning 16) Datalogi 1 Hösten / 19

2 Pekare och dynamiska variabler.

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

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

TMV166 Linjär algebra för M. Datorlaboration 2: Matrisalgebra och en mekanisk tillämpning

Lösningar Datastrukturer TDA

Medicinska Bilder, TSBB31. Lab: Mätvärden på Medicinska Bilder

MMA132: Laboration 1 Introduktion till MATLAB

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 3.1: Datastrukturer, en översikt

Tentamen *:58/ID100V Programmering i C Exempel 3

Introduktion HTML och PHP 732G16 Databaser design och programmering

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

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

Föreläsning REPETITION & EXTENTA

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

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

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

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,

Tentamen i Programmering grundkurs och Programmering C

Planering Programmering grundkurs HI1024 HT TIDAA

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

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

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

Matriser och Inbyggda funktioner i Matlab

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Svensk Matlab-terminologi

4 Sammansatta datatyper

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

Matematisk Modellering

Algoritmer, datastrukturer och komplexitet

Transkript:

1 11 februari 2016 SF1520 Num Met och grundl prog, del 1 för K, HT2015/VT2016 Föreläsning 12: Datastrukturer & filer Kap 6-8 i PEng Idag: Komplexa tal Strängar Glesa matriser Posttabeller Biblioteket igen, nu med funktioner och data Celltabeller Celltabell som parameter Komplexa tal Den imaginära enheten skrivs i eller j Funktioner kan ha komplexa parametrar real och imag ger real resp imaginärdel Exempel: >> ko = sqrt(-1)+5 ko = 5.0000 + 1.0000i Strängar En sträng lagras som en vektor med tecken. Använd strcmp för att jämföra två strängar. Fler strängfunktioner finns i Tabell 6.3 i PEng (sid 284 i upplaga 3). if strcmp(namn1,namn2) disp( Namnen är lika ) end Posttabeller (structure arrays) I vektorer når man element med index. I posttabeller använder man namn. Exempel: >>vara.namn= potatis ; >>vara.pris=5.90;

2 function bibliotek; % Biblioteksprogrammet, nu med funktioner och posttabeller lasinbocker; fortsatt = 1; disp( Välkommen! ); anvandare = input( Skriv ditt användarnamn:, s ); while fortsatt visameny; val = input( Vad vill du göra?, s ); valbokstav = upper(val(1)); switch(valbokstav) case V visa; case S sok(); case L lana(anvandare); case R returnera; case A fortsatt=0; avsluta; otherwise disp( Felaktigt val, försök igen. ); function lasinbocker(); % Inte klar - ska egentligen läsa böckerna från fil boklista(1).titel = Neuromancer ; boklista(1).forfattare = Gibson, William ; boklista(1).lanadav = ingen ; boklista(2).titel = The Left Hand of Darkness ; boklista(2).forfattare = LeGuin, Ursula K ; boklista(2).lanadav = ingen ; boklista(3).titel = Fahrenheit 451 ; boklista(3).forfattare = Bradbury, Ray ; boklista(3).lanadav = ingen ; function visameny(); % Visar alla menyalternativ disp( ------------------- ); disp( V: Visa alla böcker ); disp( S: Söka efter bok ); disp( L: Låna böcker ); disp( R: Återlämna böcker ); disp( A: Avsluta ); function visa(); % Visa alla böcker for i = 1:length(boklista)

3 disp(boklista(i)) function plats = sok(); % Söker i fälten titel och forfattare % Utparameter är platsen där boken hittades, noll annars plats = 0; sokstrang = input( Ange titel eller författare:, s ); for nr = 1:length(boklista) if strncmpi(sokstrang,boklista(nr).titel,5) disp( Sökt titel funnen: ); disp(boklista(nr)); plats = nr; elseif strncmpi(sokstrang,boklista(nr).forfattare,5) disp( Sökt författare funnen: ); disp(boklista(nr)); plats = nr; if plats == 0 disp( Tyvärr, hittade ingen sådan bok. ); function lana(anvandare); % Hanterar utlåning av bok % Ändrar boklista disp( Vilken bok vill du låna? ); boknr = sok(); if boknr ~= 0 namn = boklista(boknr).lanadav; if strcmp(namn, ingen ) == 1 boklista(boknr).lanadav = anvandare; disp( Du har nu lånat boken. ); else disp([ Boken är redan utlånad till namn]); function returnera(); % Hanterar återlämning av bok % Ändrar boklista disp( Vilken bok vill du återlämna? ) boknr = sok(); if boknr ~= 0 boklista(boknr).lanadav = ingen ; disp( Du har nu återlämnat boken. ); function avsluta(); % Inte klar - ska spara boklistan på fil

4 Glesa matriser Glesa matriser (sparse matrices) innehåller mest nollor Vanliga i tillämpningar, se t ex randvärdesproblemet i labb 8. Effektivare lagring av en gles matris fås med sparse Omvandla tillbaka med full Undersök om matrisen är gles med issparse >> a=17*eye(1000); >> glesa = sparse(a); >> whos Name Size Bytes Class a 1000x1000 8000000 double array glesa 1000x1000 16004 sparse array Vanliga matrisoperationer fungerar även för sparse-lagrade matriser Celltabeller I vanliga matriser och vektorer har alla element samma typ I en celltabell kan cellerna innehålla värden av olika typ, t ex tal och tecken En cell kan även innehålla sammansatta data, t ex en vektor >> tabell = { krokodil,[1 0 0],pi,sqrt(-1)} tabell = krokodil [1x3 double] [3.1416] [0+ 1.0000i] Måsvingeparenteser används för att hänvisa till innehållet i en cell >> tabell{2} ans = 1 0 0 För att komma åt element i en vektor i en cell sätter man vanliga indexparenteser sist: >> tabell{2}(3)=5; >> tabell{2} ans = 1 0 5 Celltabell som parameter Om man som inparameter i en funktion anger varargin får man en funktion som kan ta emot ett godtyckligt antal anropsinparametrar function persondata(varargin) disp( Dina persondata är: ); for nr = 1:nargin disp(varargin{nr}); if ~ischar(varargin{nr}) disp( Är det här din ålder eller ditt skonummer? );

5 Enklaste filhanteringen i Matlab Kommandot save choklad sparar rubbet på filen choklad save choklad x y sparar bara variablerna x och y Kommandot load choklad laddar in all information från filen choklad Filerna går att flytta mellan olika datorer men inte till andra program än Matlab (och är svårlästa för mänskliga ögon). save choklad -ascii skriver ut på textformat load choklad -ascii läser in och tolkar filen som en textfil Öppna och stänga filer Öppna filen med filnummer = fopen(filnamn) Om nåt fel uppstår blir filnummer = -1 Variant för felhantering: [filnummer, felmeddelande]= fopen(filnamn) Skapa ny utfil med: filnummer = fopen(filnamn, w ) Utfil på textformat: filnummer = fopen(filnamn, wt ) Kommandot uigetfile öppnar ett fönster där användaren kan välja fil Stäng filen med fclose(filnummer) och alla filer med fclose( all ) Binärfiler Talen lagras med den binära representation som används i Matlab Fördelar: Effektivt minnesutnyttjande, snabbt att läsa in och skriva ut Nackdelar: Går inte att titta på, överföringsproblem mellan datorer och program som lagrar på olika sätt fwrite(filnummer,skalbagge) skriver ut värdet av variabeln skalbagge Olika lagringsformat kan användas, t ex fwrite(filnummer,skalbagge, float32 ) elefant = fread(filnummer) läser in och lagrar i variabeln elefant elefant = fread(filnummer,5) läser fem värden (till elefant) elefant = fread(filnummer,inf) läser alla värden (till elefant)

6 Textfiler Textfiler kallas i boken formatted files Varje siffra i ett tal lagras som ett tecken, vilket innebär att...... ett 64-bitars flyttal lagras med 21 tecken, dvs i 21*16=336 bitar Fördelar: Människoläsbart, går att flytta mellan olika program och olika datorer Nackdelar: Tar mer plats, tar längre tid att läsa in och skriva ut fprintf(filnummer, format, variabler) skriver ut precis som printf lokomotiv = fscanf(filnummer, format) läser in till variabeln lokomotiv Se formatkoder i tabell 8.7 (sid 374) och 8.10 (sid 381) i PEng rad = fgetl(filnummer) läser in en hel rad, fgets returnerar även radslutstecknet feof(filnummer) undersöker om filen är slutläst Bibliotekets filhantering function lasinbocker(filnamn); % Läser in böckerna från fil infil = fopen(filnamn, r ); nr = 1; while ~feof(infil) boklista(nr).titel = fgetl(infil); boklista(nr).forfattare = fgetl(infil); boklista(nr).lanadav = fgetl(infil); fgetl(infil); nr = nr + 1; fclose(infil); function sparabocker(filnamn); % Sparar den ändrade boklistan på fil utfil = fopen(filnamn, w ); for nr = 1:length(boklista) fprintf(utfil, %s\n, boklista(nr).titel); fprintf(utfil, %s\n, boklista(nr).forfattare); fprintf(utfil, %s\n, boklista(nr).lanadav); fprintf(utfil, \n ); fclose(utfil); /NC, 2016-02-11