INF1040 Oppgavesett 3: Tegn og tekst

Like dokumenter
Albregtsen og Skagestein: Digital representasjon Løsningsforslag til kapittel 2 Representasjon av tegn og tekster

INF1040 Oppgavesett 1: Tallsystemer og binærtall

INF1040 Oppgavesett 6: Lagring og overføring av data

Læringsmål. INF1000: Forelesning 12. Hovedkilde. Kunne binærtall og heksadesimale tall og konvertering mellom ulike tallsystemer: Titallsystemet

Tegn og tekst. Posisjonssystemer. Logaritmer en kort repetisjon. Bitposisjoner og bitmønstre. Kapittel August 2008

INF1040 Oppgavesett 7: Tall og geometrier

INF1040 Oppgavesett 14: Kryptering og steganografi

Unicode. Unikt vakkert eller unisont håpløst? En vandring gjennom tegnkodingens historie. Dag Lamgmyhr, Ifi/UiO Ark 1 av 23

Oppsummering 2008 del 1

Oppsummering 2008 del 1

INF1040 Digital representasjon Oppsummering

INF1040 Oppgavesett 2: Nettsider og XHTML

Tegn og tekst. \yvind og ]se N{rb}? Læreboka kapittel August Institutt for informatikk 29. august 2007.

INF 1000 høsten 2011 Uke 11: 2. november

INF 1000 høsten Innhold uke 11. Digital representasjon av tekster, tall, former,

Tegn og tekst. \yvind og ]se N{rb}? Læreboka kapittel 2. Institutt for informatikk Gerhard Skagestein 30. august 2006.

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Digital representasjon

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

INF1020 Algoritmer og datastrukturer GRAFER

Obligatorisk oppgave 1 INF1020 h2005

INF Algoritmer og datastrukturer

INF 1040 høsten 2009: Oppgavesett 8 Introduksjon til lyd (kapittel 9 og 10)

ITGK - H2010, Matlab. Repetisjon

UNIVERSITETET I OSLO

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Digital representasjon

Ordliste 2. Byte (byte) En streng på 8 biter som behandles som en enhet.

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF 1040 høsten 2008: Oppgavesett 9 Sampling og kvantisering av lyd (kapittel 11)

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

Læreboken på 45 minutter

INF1040 Oppgavesett 5: XML

INF Ekstrainnlevering

Generelle Tips. INF Algoritmer og datastrukturer. Åpen og Lukket Hashing. Hashfunksjoner. Du blir bedømt etter hva du viser at du kan

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

UNIVERSITETET I OSLO

Kapittel 1 En oversikt over C-språket

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Tallsystemer. Tallene x, y, z og u er gitt ved x = 2, y = 2, z = 4 og u = 2. Dermed blir =

Digital representasjon

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

Gjenopprett slettede bilder

Husk å registrer deg på emnets hjemmeside!

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Øvingsforelesning i Python (TDT4110)

Alle hele tall g > 1 kan være grunntall i et tallsystem.

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

UNIVERSITETET I OSLO

Metoder med parametre, løkker og arrayer

Del 1 En oversikt over C-programmering

Oppgaver til kapittel 19 - Kryptering og steganografi

Bruk av OpenOffice.org 3 Writer

PGZ - Hangman Ekspert Python Lærerveiledning

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

TDT4110 IT Grunnkurs Høst 2014

Bytte til OneNote 2010

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

Kom i gang med micro:bit

Algoritmer og datastrukturer A.1 BitInputStream

Eksamensoppgaver 2014

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

Øvingsforelesning i Python (TDT4110)

Bytte til PowerPoint 2010

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Drosjesentralen. I-120: Obligatorisk oppgave 2, 2000

Programmeringsspråket C

Tallsystemer. Tallene x, y, z og u er gitt ved x = 2, y = 2, z = 4 og u = 2. Dermed blir =

MAT1030 Forelesning 13

Matematikk Øvingeoppgaver i numerikk leksjon 1 Å komme i gang

1. Gå inn på portalen:

IN Algoritmer og datastrukturer

Tall. Posisjons-tallsystemer. Representasjon av heltall. Tall positive, negative heltall, flytende tall. Tekst ASCII, UNICODE XML, CSS

Sist forelesning snakket vi i hovedsak om trær med rot, og om praktisk bruk av slike. rot. barn

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk

som blanker skjermen (clear screen). Du får en oversikt over alle kommandoene ved å skrive,

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

MAT1030 Diskret matematikk

Forelesning inf Java 5

Forelesning inf Java 5

Obligatorisk oppgave 2 i INF 4130, høsten 2009

IN 147 Program og maskinvare

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

UNIVERSITETET I OSLO

Generell informasjon

INF1000 Eksamen 2014 (modifisert)

Transkript:

INF1040 Oppgavesett 3: Tegn og tekst (Kapittel 2) Husk: De viktigste oppgavetypene i oppgavesettet er Tenk selv - og Prøv selv - oppgavene. Fasitoppgaver Denne seksjonen inneholder innledende oppgaver hvor det finnes fasit bakerst i oppgavesettet. Det er ikke nødvendigvis meningen at du skal gjøre alle disse oppgavene. Gjør gjerne noen oppgaver av hver type, og gå videre hvis du synes det går greit. Gjør flere oppgaver av samme type hvis du synes det er vanskelig og ønsker mer trening. 1. Bruk ISO 8859-1 (figur 2-9 i læreboken) og finn den binære representasjonen (bitmønsteret) til følgende tekster: (a) God dag (b) 10+10=20 2. Bruk ISO 8859-1 (figur 2-9 i læreboken) og finn ut hvilke tekster som skjuler seg her: (a) 0x 4A 65 67 20 65 72 20 66 6C 69 6E 6B 21 (b) 0x 38 A3 3D 31 30 A4 (c) 01001111 01110011 01101100 01101111 3. Prosent-tegnet % har kodepunkt U+0025 i Unicode. Hvordan representeres dette i (a) UTF-32? (b) UTF-16? (c) UTF-8? 1

4. Copyright-tegnet har kodepunkt U+00A9 i Unicode. Hvordan representeres dette i (a) UTF-32? (b) UTF-16? (c) UTF-8? 5. Euro-tegnet e har kodepunkt U+20AC i Unicode. Hvordan representeres dette i (a) UTF-32? (b) UTF-16? (c) UTF-8? 6. Domino-tegnet har kodepunkt U+1F059 i Unicode. Hvordan representeres dette i (a) UTF-32? (b) UTF-16? (c) UTF-8? 7. Gitt bitmønsteret 11011000 10011111 11011100 10111000. Hvilke(t) kodepunkt (heksadesimal verdi holder) tilsvarer dette (a) i UTF-16? (b) i UTF-8? 8. Hva er representasjonen for tegnet ç (c med cedilla) i (a) UTF-32 som forhåndssammensatt tegn? (b) UTF-16 som forhåndssammensatt tegn? (c) UTF-8 som forhåndssammensatt tegn? (d) UTF-32 på normaliseringsform D? (e) UTF-16 på normalingseringsform D? (f) UTF-8 på normaliseringsform D? 2

Flervalgsoppgaver I følgende oppgaver er det oppgitt fem alternativer der nøyaktig ett svar er riktig. 9. Hva ser vi her i henhold til Unicode-terminologi? H (latin), H (kyrillisk) (a) To like Unicode-tegn og to like glyfer (b) To like Unicode-tegn, men to ulike glyfer (c) To ulike Unicode-tegn, men to like glyfer (d) To ulike Unicode-tegn og to ulike glyfer (e) Ingen av delene 10. I hvilken av følgende kodetabeller finner vi de norske bokstavene Æ, Ø og Å i alfabetisk rekkefølge (dvs med stigende bitmønstre)? (a) ASCII (b) ISO 646-60 (c) ISO 8859-1 (d) ISO 8859-15 (e) Unicode 11. Med kodepunktene i ASCII, hva må vi legge til hvis vi skal konvertere en stor bokstav til en liten? (a) 0x10 (b) 0x20 (c) 0x30 (d) 0x40 (e) 0x50 12. Med kodepunktene i ASCII, hva må vi gjøre for å konvertere et siffertegn til den tilsvarende binære tallrepresentasjonen? (a) Trekke fra 0x30 (b) Trekke fra 0x20 (c) Ingenting (d) Legge til 0x20 (e) Legge til 0x30 3

13. Hvor mange biter brukes i Unicode UTF-16 for et tegn som inngår i BMP (Basic Multilingual Plane)? (a) 16 (b) 32 (c) 8 eller 16 (d) 16 eller 32 (e) 8, 16, 24 eller 32 14. Hvor mange biter brukes i Unicode UTF-16 for et tegn som IKKE inngår i BMP (Basic Multilingual Plane)? (a) 16 (b) 32 (c) 8 eller 16 (d) 16 eller 32 (e) 8, 16, 24 eller 32 15. Hvor mange biter brukes i Unicode UTF-8 for et tegn som inngår i ASCIIsettet? (a) 8 (b) 16 (c) 8, 16, 24 eller 32 (d) 16 eller 32 (e) 16, 24 eller 32 16. Hvor mange biter brukes i Unicode UTF-8 for et tegn som IKKE inngår i ASCII-settet? (a) 8 (b) 16 (c) 8, 16, 24 eller 32 (d) 16 eller 32 (e) 16, 24 eller 32 4

17. Anta at vi har et 8-biters tegnsett som vi utvider med escape -sekvenser ved at tegnet escape (fra det opprinnelige tegnsettet) etterfulgt av et annet tegn gir et nytt tegn (som ikke var med i det opprinnelige tegnsettet). Hvor mange ekstra tegn kan vi lage på denne måten? (a) 8 (b) 2 7 1 (c) 2 7 (d) 2 8 1 (e) 2 8 18. Tegnet å kan i Unicode representeres på ulike måter både som forhåndssammensatt tegn og på Normalform D. Hvilken av disse to representasjonene tar størst plass i Unicode UTF-8? (a) Det forhåndssammensatte tegnet. (b) Normalform D. (c) Begge tar like stor plass. (d) UTF-8 har ingen Normalform D. (e) Det er vanskelig å si, det kommer an på omstendighetene. Tenk selv -oppgaver 19. Hvorfor er kodingssystemer som skifter mellom to (eller flere) plan som Baudot mer sårbare overfor overføringsfeil enn systemer uten slik skifting? 20. (a) Hva er ASCII-representasjonen for tekststrengen Digital dersom vi spanderer en byte for hvert tegn? Skriv ned både i binær- og heksadesimal-notasjon. (b) Anta at du allerede har ASCII-representasjonen for tekststrengen Digital (en byte per tegn) og ønsker ASCII-representasjonen for tekststrengen DIGITAL. Hvilke endringer må gjøres i representasjonen? (Erstatte representasjonen for igital med representasjonen for IGITAL er naturligvis et korrekt svar. Men kan dette gjøres på en enkel måte ved å fikse litt på bitmønsteret?) 21. Av ukjente grunner har noen bestemt seg for å utvide standard ASCII ved å representere Æ, Ø, Å og æ, ø, å ved hjelp av escape-teknikken på følgende måte: Æ representeres som ESC A E Ø representeres som ESC O / 5

Å representeres som ESC A A æ representeres som ESC a e ø representeres som ESC o / å representeres som ESC a a (a) Hvorfor trengs det ikke noe avsluttende escape-symbol i denne representasjonen? (b) Hvordan ville du representere selve ESC-tegnet, hvis dette av en eller annen grunn skulle opptre som vanlig tegn, ikke som escape-symbol? (c) Hvorfor tror du man unnlot å ta dette prinsippet i bruk da ASCIItegnsettets utilstrekkelighet for skandinaviske språk begynte å bli et problem? 22. Hvis du sender SMS-er med GSM 03.38 vil du normalt få plass til 160 tegn i meldingen. Men hvis du har for eksempel euro-tegn eller hakeparenteser i meldingen, vil det bare bli plass til noe færre tegn. Hvorfor? 23. (a) Er representasjonen for bokstaven a den samme i Unicode UTF-8 som i ISO 8859-15? (b) Er representasjonen for bokstaven å den samme i Unicode UTF-8 som i ISO 8859-15? (c) Glyfen Å kan i Unicode oppfattes som tre ulike tegn eller tegnkombinasjoner. Hvilke? 24. Vis at bitmønsteret for Byte order mark (BOM) i Unicode UTF-8 er 0x EF BB BF. 25. Kan bitmønsteret 11010010 11010010 være den komplette UTF-16 representasjonen til et kodepunkt i Unicode? 26. Kan bitmønsteret 11010010 11010010 være den komplette UTF-8 representasjonen til et kodepunkt i Unicode? 27. Gitt bitmønsteret 0x C3 85 6C. Hvilken stasjon på Bergensbanen skjuler seg i dette bitmønsteret? Representasjonen er enten UTF-32, UTF-16 eller UTF-8. 28. Skriv en algoritme som finner n te tegnet i en (a) Unicode UTF-8-fil (b) Unicode UTF-16-fil (c) Unicode UTF-32-fil Algoritmen kan formuleres i pseudo-kode, f.eks. slik: 6

Sett løkketeller til 0. Så lenge løkketeller er mindre enn n, gjør følgende: Øk løkketeller med 1 Hent neste byte Hvis byten inneholder xxx, gjør dette... Hvis byten inneholder yyy, gjør dette... Ellers, gjør dette... slutt på løkke 29. (a) I følgende utsnitt av en Unicode UTF-8 fil er noen av bytene åpenbart ukorrekte. Hvilke, og hvorfor? 0x 41 C3 98 41 C3 41 41 C3 98 98 41 (b) I følgende utsnitt av en Unicode UTF-16 fil er noen av bytene åpenbart ukorrekte. Hvilke, og hvorfor? 0x 00 41 D8 00 DC 0F 00 41 D8 00 00 41 DC 0F 00 41 DC 0F D8 00 00 41 Prøv selv -oppgaver 30. Lag en liten tekstfil med litt uvanlige tegn (dvs. utenfor det latinske alfabetet) og med et par linjeskift. Lagre den i ulike formateringer som tekstbehandleren tillater, f.eks. ASCII (ANSI), Unicode, UTF-8, UTF-16- le, UTF-16-be. Skriv ut filen på heksadesimal form og sjekk følgende: (a) Har filen et Byte order mark (BOM)? (b) I så fall, med hvilken endian er filen formatert i henhold til Byte order mark? (c) Hvis filen er lagret i et format som tekstbehandleren hevder er unicode, hvilken Unicode-formatering dreier det seg om da? (d) Hvordan er ny linje representert? Som CR, LF eller som CR+LF? (e) Se på representasjonen av de uvanlige tegnene. Bruker formatet et fast eller variabelt antall biter per tegn? Hint Windows: Man kan få tak i uvanlige tegn ved å klippe og lime fra Start Programs Accessories System tools Character map. (I norsk versjon: Start Alle programmer Tilbehør Systemverktøy Tegnkart.) I Word kan du også bruke Insert Symbol (i norsk versjon: Sett inn Symbol), eller skrive den heksadesimale verdien til Unicodekodepunktet og trykke Alt+x etterpå. Lagre filen som Plain text (filtype txt). Hint emacs: Uvanlige tegn kan settes inn som heksadesimale tegn ved hjelp av kommandosekvensen M-x ucs-insert RET xxxx RET 7

der xxxx er det heksadesimale kodepunktet for tegnet. (M-x står for Meta x, som på Windows-tastatur fås ved å trykke Alt og x samtidig, eventuelt Esc etterfulgt av x. RET står for retur/enter-tasten.) Kodingen på en fil kan endres ved å skrive M-x set-buffer-file-coding-system eller C-x RET f og så angi den ønskede kodingen. Heksadesimal utskrift av en fil fås ved hjelp av Linux/Unix-kommandoen od -t x1 filename (od står for "octal dump", men vi gir beskjed til programmet om å skrive ut i heksadesimal med parameteren -t x1.) Det er langt fra sikkert at alle de uvanlige tegnene vises på skjermen eller skrives ut på skriveren. Dette er avhengig av hvilke drivere og tegnsett som er installert på maskinen. 31. Lag en nettside som (blant annet) inneholder navn på berømte forfattere og komponister. Her er noen navn (finn gjerne frem til flere selv): Göran Tunström Karel Čapek Gabriel Garcia Márques Béla Bartók Antonin Dvořaḱ Leoš Janáček Johan Strauß(Sohn) Prøv å lage nettsiden både med ISO-8859-1-tegnsett og med Unicode UTF- 8. Under arbeidet med denne øvingen kan du få bruk for Unicode kodetabellene på http://www.unicode.org/charts På nettet finnes mange hjelpemidler for å finne den heksadesimale representasjonen av uvanlige tegn, Se for eksempel http://pioneer.stereo.lu/converter.html http://www.mikezilla.com/exp0012.html http://code.cside.com/3rdpage/us/unicode/converter.html http://www.pinnacledisplays.com/unicode-converter.htm 8

Programmeringsoppgaver (for deg som tar/har tatt INF1000) 32. Lag et program som tar et ord som input og skriver det ut (a) med bare store bokstaver (b) med bare små bokstaver (c) med stor bokstav først i ordet Hint: Hvis du har en character-variabel med navn cvar, kan den gjøres stor ved hjelp av Character.toUpperCase(cvar) og liten ved hjelp av Character.toLowerCase(cvar) Alternativt: Hvis du har en string-variabel med navn tekst, kan den gjøres stor ved hjelp av tekst.touppercase() og liten ved hjelp av tekst.tolowercase() 33. Lag et program som leser en sekvens med ord og skriver ut disse i sortert rekkefølge. (Merk: Sortering er egentlig ikke tema før i INF1010/INF2220, så for å gjøre oppgaven enklere kan du f.eks. begrense deg til å sortere tre ord.) Klarer du også å sortere riktig ord som inneholder de norske bokstavene ÆØÅæøå? Hint: Hvis du har to String-variable med navn s1 og s2 kan disse sammelignes for eksempel ved hjelp av s1.compareto(s2) s1.compareto(s2) gir et negativt tall hvis s1 kommer før s2 i henhold til Unicode, et positivt tall hvis s2 kommer før s1, og 0 hvis de er like. 34. Lag et program som tar en tekst (for eksempel et ord) som input, og skriver den ut som de tilsvarende kodepunktene i Unicode. Hint: Hvis du har en character-variabel med navn cvar, får du tak i den heksadesimale kodepunkt-verdien til denne ved hjelp av Integer.toHexString((int) cvar) 35. Lag et program som leser en sekvens med heksadesimale verdier, og skriver ut de tilsvarende tegnene tolket som UTF-16 big endian. (For enkelhets skyld kan du anta at alle tegnene ligger i BMP, slik at UTF-16-verdiene kan tolkes direkte som kodepunkter.) Hint: Hvis du har et kodepunkt lagret (heksadesimalt) i en String-variabel med navn hexverdi, får du tak i tegnet med dette kodepunktet ved å skrive ((char) Integer.parseInt(hexverdi,16)) 9

Hint: Bruk noen av filene du lagret som UTF-16-be i oppgave 30, og bruk resultatet fra od-kommandoen som testfiler i denne oppgaven. 36. (Etter INF1000-forelesningen 16. september:) Programmer algoritmene fra oppgave 28. Hint: Bruk noen av filene du laget i oppgave 30, og bruk resultatet fra od-kommandoen som testfiler i denne oppgaven. 37. EN EKSTRA UTFORDRING: Skriv metodene touppercase, tolowercase og compareto selv! 10

Fasit til fasitoppgaver og flervalgsoppgaver Hvis du finner feil i fasiten er det fint om du gir beskjed om dette ved å sende en mail til ragnhilk@ifi.uio.no 1. (a) 0x 47 6F 64 20 64 61 67, dvs. 01000111 01101111 01100100 00100000 01100100 01100001 01100111 (b) 0x 31 30 2B 31 30 3D 32 30, dvs. 00110001 00110000 00101011 00110001 00110000 00111101 00110010 00110000 2. (a) Jeg er flink! (b) 8 =10e (c) Oslo 3. (a) 00000000 00000000 00000000 00100101 (b) 00000000 00100101 (c) 00100101 4. (a) 00000000 00000000 00000000 10101001 (b) 00000000 10101001 (c) 11000010 10101001 5. (a) 00000000 00000000 00100000 10101100 (b) 00100000 10101100 (c) 11100010 10000010 10101100 6. (a) 00000000 00000001 11110000 01011001 (b) 11011000 00111100 11011100 01011001 (c) 11110000 10011111 10000001 10011001 7. (a) 0011 01111100 10111000, dvs. U+37CB8 (b) 00000110 00011111 og 00000111 00111000, dvs. U+061F og U+0738 8. (a) Kodepunktet er 0x00E7, UTF-32 representasjonen blir da 00000000 00000000 00000000 11100111 (b) Kodepunktet er 0x00E7, UTF-16 representasjonen blir da 00000000 11100111 (c) Kodepunktet er 0x00E7, UTF-8 representasjonen blir da 11000011 10100111 (d) Kodepunktene er 0x0063 og 0x0327, UTF-32 representasjonen blir da 00000000 00000000 00000000 01100011 00000000 00000000 00000011 00100111 11

9. (c) 10. (b) 11. (b) 12. (a) 13. (a) 14. (b) 15. (a) 16. (e) 17. (d) 18. (b) (e) Kodepunktene er 0x0063 og 0x0327, UTF-16 representasjonen blir da 00000000 01100011 00000011 00100111 (f) Kodepunktene er 0x0063 og 0x0327, UTF-8 representasjonen blir da 01100011 11001100 10100111 12