TDT4105 Informasjonsteknologi grunnkurs: Uke 42 Strenger og strenghåndtering

Like dokumenter
Læringsmål og pensum

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

TDT4105 Informasjonsteknologi, grunnkurs

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

Læringsmål og pensum. Oversikt

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

TDT4110 Informasjonsteknologi grunnkurs: Eksempler. Mangekanter

TDT4110 IT Grunnkurs Høst 2016

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

TDT4105 Informasjonsteknologi, grunnkurs

TDT4110 IT Grunnkurs Høst 2016

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

Kapittel september Institutt for geofag Universitetet i Oslo. GEO En Introduksjon til MatLab. Kapittel 7.

TDT4110 Informasjonsteknologi grunnkurs: Tema: Mer om strenger. - 3rd edition: Kapittel 8. Professor Alf Inge Wang

ITGK - H2010, Matlab. Repetisjon

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Læringsmål og pensum. Oppgave

Binærfiler versus tekstfiler

Del 2 Tabeller, arrays, strenger

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

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4105 IT Grunnkurs Høst 2014

Del 1 En oversikt over C-programmering

TDT4105 IT Grunnkurs Høst 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016

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

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

TDT4105 IT Grunnkurs Høst 2014

INF1000 Behandling av tekster

Datastrukturer (kap. 8)

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

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

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

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

TDT4110 IT Grunnkurs Høst 2015

Obligatorisk oppgave 1 INF1020 h2005

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

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

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

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

Øvingsforelesning TDT4105 Matlab

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

Norsk informatikkolympiade runde

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

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

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

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

O-notasjon og kompleksitet

TDT4110 Informasjonsteknologi grunnkurs: Python: Repetisjon. Professor Alf Inge Wang

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

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

INF Ekstrainnlevering

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Python: Strenger 3. utgave: Kapittel 8

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

Palindrom - iterativt

Noen innebygde funksjoner - Vektorisering

Norsk informatikkolympiade runde

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

Designe et program. TDT4110 Informasjonsteknologi grunnkurs: Kapittel 2 Python: Bruk av funksjoner, variabler og input/output. Mål.

Noen innebygde funksjoner - Vektorisering

Øvingsforelesning 1 Python (TDT4110)

UNIVERSITETET I OSLO

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

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Øvingsforelesning 7 i Python (TDT4110)

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

Bruk piazza for å få rask hjelp til alles nytte!

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

Øvingsforelesning 5 Python (TDT4110)

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

TDT4110 IT Grunnkurs Høst 2012

Testlig og binær form

Løse reelle problemer

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

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

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

UNIVERSITETET I OSLO

Objektorientert programmering i Python

Øvingsforelesning 5 Python (TDT4110)

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

Oppsummering fra sist

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

Eksamensforelesning TDT4105

START MED MATLAB. Når du starter Matlab, kommer du inn i kommandovinduet. Dersom du har versjon 6.1, ser du dette :

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2015

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

Oppgave 1 JK-flip-flop (Total vekt 20%)

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

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

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.

Kapittel 1 En oversikt over C-språket

Læringsmål og pensum. Algoritmeeffektivitet

Transkript:

1 TDT4105 Informasjonsteknologi grunnkurs: Uke 42 Strenger og strenghåndtering Anders Christensen anders@idi.ntnu.no Rune Sætre satre@idi.ntnu.no

2 Læringsmål og pensum Læringsmål Skal kunne forstå og programmere med tekststrenger Funksjoner: blanks, double, char, deblank, ischar, isletter, isspace, length, lower, num2str, size, str2num, strcat, strcmp, strfind, strncmp, strrep, strtok, strtrim, upper, Pensum Matlab, Kapittel 7 2

3 Tekststrenger Består av et hvilket som helst antall bokstaver (tegn) omsluttet av enkel apostrof: 'dette er en streng' '2a@.' 'c' Behandles som vektorer der hver enkelt bokstav er et element Mange av vektoroperasjonene kan derfor anvendes på strenger >>length('hus') Ans= 3 3

4 Behandling av tekst i Matlab Alle tegn som kan benyttes i forbindelse med behandling av data er representert i datamaskinens tegntabell De første 128 tegnene i tegntabellen utgjør ASCII tabellen. Her finner vi de tegnene vi vanligvis trenger Lenke til ASCII tabellen: http://www.asciitable.com/ Fra tabellen kan vi lese at tegnet A ligger på plass 65 i ASCIItabellen Ved sortering av tekst er det bokstavenes plass i ASCII tabellen (datamaskinens tegn-tabell) som avgjør rekkefølge Problemet med norsk tekst er Æ, Ø, Å, æ, ø og å

5 Behandling av tekst i Matlab 24327 24326 24325 24324 24323 24322 24321 24320 24319 24318 24317 24316 24315 Tegnet A lagret i primærlager (RAM) A 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 2 7 + 1 2 6 + 0 2 5 + 0 2 4 + 0 2 3 + 0 2 2 + 0 2 1 + 1 2 0 = 65 Tegnets desimale tegnkode Hver byte er bygd opp av åtte bits. Matlab benytter to byte for å lagre et tegn (Octave 1 byte) Den siste byten gir ASCII-kode Tegnets binære tegnkode (tall i to-talls systemet)

6 ASCII - tabellen 01000001 = 0 2 7 + 1 2 6 + 0 2 5 + 0 2 4 + 0 2 3 + 0 2 2 + 0 2 1 + 1 2 0 = 65 69 68 67 66 65 64 63 62 61 E D C B A @? > = Utsnitt av datamaskinens tegntabell Tegnet A sin binære tegnkode : 01000001 Tegnet A sin desimale tegnkode : 65 Tegnkoden angir tegnets plass i tegntabellen (tabellen starter med element 0 på første plass)

7 Tre Forskjellige Variabeltyper (så langt) bryter=true tall = 5 (talltekst='5') tekst = 'Fem'

8 Strengoperasjoner Konkatenering (sammensetting) horisontalt: >>start = 'heia'; >>slutt = 'RBK'; >>[start slutt] ans= heiarbk vertikalt: >>char( start, slutt ) ans= heia RBK 8

9 Flere funksjoner for generering av tekststrenger Med blank streng: blanks >>[start blanks(5) slutt] Ans= heia RBK lage matrise av strenger: char >> melding = char( 'God dag', 'Studenter ) melding = God dag Studenter >> size(melding) ans = 2 9 skrive til en streng: sprintf >> tekst = sprintf('tilfeldig tall er %d', randi(9) ); >> strcat(tekst, '!!!') ans = Tilfeldig tall er 8!!! 9

10 Noen andre nyttige strengfunksjoner >>melding = ' AbCdeFgHi ' Fjerne blanke i slutten av strenger: deblank >>deblank( melding ) ans = AbCdeFgHi Fjerne blanke i både start og slutt av streng: strtrim >>strtrim( melding ) ans = AbCdeFgHi Forandre til små bokstaver lower >> lower( melding ) ans= abcdefghi Forandre til store bokstaver upper >>upper( melding ) ans = ABCDEFGHI 10

11 Sammenligning av tekst Sammenligning av tegn i strenger: strcmp >>ord1= 'hus'; >>ord2= 'hud'; >>ord3= 'hustru'; >>strcmp(ord1,ord1) ans= 1 >>strcmp(ord1,ord2) ans= 0 >>strncmp( ord1, ord3, 3 ) ans= 1 11

12 Finn, erstatt og splitt tekst Finn den 2. strengen i den 1., og returner indeksen(e) / posisjonen(e) >>strfind( 'abcd abcd', cd') ans = 3 8 Merk rekkefølge på parameterne: strfind( høystakk, nål ) Ingen forekomster -> [] returneres Erstatte tekst i en streng: >>strrep('abcd abcd','a','x') ans= xbcd xbcd Splitt tekst i to : >>[start rest] = strtok( 'heia RBK' ) start= heia rest= RBK 12

13 Konvertering mellom tekst og tall Tekst til tall: str2num >> nummer = str2num('123.456') nummer = 123.456 >> nummer2 = str2num('1 2 3'); nummer2 = 1 2 3 >> num2str(123) ans = 123 13

14 Funksjonene is Returner en boolsk vektor med samme lengde som strengen og som indikerer om is-betingelsen er oppfylt: >>isletter('rbk23') ans= 1 1 1 0 0 >>isspace('rbk 23') ans= 0 0 0 1 0 0 >>vektor = 'RBK' >>ischar(vektor) ans= 1 14

15 Quiz etter pausen Les på strengfunksjoner 15

16 Eksempel 1 Lag et program i Matlab som leser inn et tegn og som skriver ut tegnets desimale tegnkode tegn = input('skriv inn et tegn (# avslutter) :, s ); while (tegn ~= '#') kode = double(tegn); fprintf('innlest tegn %2s\n',tegn); fprintf('desimal tegnkode %3.0f\n',kode); tegn = input('skriv inn et tegn (# avslutter) :, s ); end Funksjonen double( ) mottar tegn og returnerer tegnkode (10-tallsystem)

17 Eksempel 2 Lag et program i Matlab som leser inn en desimal tegnkode og som skriver ut det tegn som ligger på tegnkodens plass i tegntabellen kode = input('skriv inn et tegnkode (-1 avslutter) : '); while (kode > 0) tegn = char(kode); fprintf('innlest tegnkode %3.0f\n',kode); fprintf('aktuelt tegn %2s\n',tegn); kode = input('skriv inn et tegnkode (-1 avslutter) : '); end Funksjonen char( ) mottar en tegnkode og returnerer det tilhørende tegn

18 Eksempel 3 Lag et program som leser inn en tekst fra tastaturet Les også inn to tall som angir start- og sluttindeks for en deltekst i teksten Til slutt skrives delteksten ut på skjerm. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 D e t t e e r e n t e k s t 17 ind1 ind2 e r e n

19 finndelstreng() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 D e t t e e r e n t e k s t 17 ind1 ind2 delstreng = tekst( ind1:ind2 ); delstreng = [ tekst(ind1) tekst(ind1+1) tekst(ind2) ] Logisk tolking while ( strcmp( svar, 'ja ) ) Funksjonen strcmp( ) mottar to tekststrenger. Dersom de er identiske returneres true, ellers returneres verdien false

20

21 Eksempel 4 Lag et program som leser inn en (hoved-) tekst fra tastaturet. Deretter leses det inn en ny (del-) tekst. Programmet skal sjekke om delteksten finnes i hovedteksten. Melding skal skrives ut. tekst = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 D e t t e e r e n t e k s t 17 deltekst = e r e n length(tekst) Funksjonen length( ) mottar en tekst og returnerer lengden av denne (antall tegn i teksten)

22 tekst = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 D e t t e e r e n t e k s t 17 deltekst = e r e n resultat = 'nei'; for (m = 1 : lengdetekst - lengdedeltekst + 1) delstreng = tekst( m : m+lengdedeltekst-1 ); if ( strcmp(deltekst, delstreng) ) resultat = 'ja'; end end Bygger delstreng som er like lang som deltekst, fra indeks m Sjekker om nåværende delstreng er lik den deltekst som vi leter etter

23

24 Formatet : %-32s reserverer 32 plasser for en tekst. Minustegnet gjør at teksten venstre-justeres innen plassen. Dette er en tekst D e t t e e r e n t e k s t

25 Eksempel 5 Vi skal lage to funksjoner for «hemmelig kommunikasjon» i Matlab krypter() leser inn en tekst og returnerer en kryptert versjon (ASCII +1) dekrypter() leser inn en kryptert melding, og returnerer den opprinnelige teksten (ASCII -1) Eksempel på innlest tekst og kryptering >> krypter('jeg heter Rune Sætre') ans = Kfh!ifufs!Svof!Tçusf Eksempel på dekryptering >> dekrypter(ans) ans = Jeg heter Rune Sætre

26 Binær-koding?