1 INF5110 – 23. april, 2013 Svar på noen oppgaver til kap. 8 Beklager noe trykkfeil og rot på forelesningene Håper dette er bedre (lagt ut 24/4) Nå fredag.

Slides:



Advertisements
Liknende presentasjoner
Kombinatorikk for lærerstudenter
Advertisements

Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Høgskolen i Oslo Webprogrammering Tilstandsbevaring Sessions og cookies.
© 2006 IFS AB. All rights reserved.
En innføring i spillet: Lag En Setning
Kontoinnstillinger Slik kommer du til «Kontoinnstillinger»:
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
Hva er PRIMTALL?.
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
Høgskolen i Oslo Webprogrammering Grunnleggende PHP.
Gjenfinningssystemer og verktøy II
TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Kristian Veøy
Kontrollstrukturer (Kapittel 3)
En innføring i spillet: Dobbeltkrig – Grønn
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Høgskolen i Oslo Webprogrammering Introduksjon til Java-scripting.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
- Fast tilbud om brukertester som støtte til smidig – prosessen!
IS-102 Klassedefinisjoner
Kapittel F Kjemisk likevekt.
Eksempel AOA (Activity On Arc)
Øvingsforelesning 12 Redusering av problemer,
Transformasjoner Men hva hvis relasjonen er kurvelinjær?
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
Operativsystemer.  Tilstandsmaskiner kalles på engelsk Finite State Machines.  Tilstandsmaskiner er en metode til å beskrive systemer med logisk og.
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Utvider eksemplet om biler fra forrige gang med mer feilsjekk Tid og Dato.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Gjennomgang av prøven Tidsangivelse. Prøven deles ut Vi fyller ut øvelsen sammen.
Klargjøring fra forrige gang
INF150 Programmering mandag 11.9
PHP oversikt. Basis egenskaper Grensesnitt med web tjener Skripttaggene Kommentartegn Ikke case sensitiv Avslutningstegn for instruksjoner.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
PowerPoint laget av Bendik S. Søvegjarto Konsept, tekst og regler av Skage Hansen.
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
Høgskolen i Oslo Web-programmering Feilhåndtering i PHP.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
XSLT The Candy Community. Fiktivt community Godteri-relatert og sukkersøt musikk. To typer metadata: Candy factor Sugar level.
Oblig 2: The Candy-community. Om XML, XSLT, Sablotron og HTML.
Hvordan kan foreldre bruke de vangligste funksjonene i Itslearning.com
NÅ SKAL VI LÆRE OM LIKNINGER.
HUMIT 1750 Høsten 2005 Løsningsforslag med utfyllende kommentarer til Obligatorisk oppgave 1 Vi hadde gitt de tre setningene A: Regntøyet er hjemme eller.
INF 4130 Eksamen 2008 Gjennomgang.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
Magnus Haug Algoritmer og Datastrukturer
Er uglen smart? Vi har forsket litt og her er svarene.
Eksamen 2005, oppgave 2 Eksamen 2006, oppgave 2 Stein Krogdahl INF5110 – V2007.
1 INF5110 – 23. april, 2013 Noen oppgaver til kap. 8 Dette er en bedre utgave av oppgavene, lagt ut 24. april Nå fredag (26/4): Det blir ikke undervisning.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1800 Logikk og Beregnbarhet. Lærebok: Discrete Structures, Logic, and Computability Utdrag blir pensum. Obs: Første opplag inneholder mange feil, andre.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
1 INF oktober 2010 Stein Krogdahl Foreløpige foiler Dagens program: –Første time: Kap 23.5: Trær og strategier for spill med to spillere –Andre.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
HUMIT1731 Hypermedier Introduksjon til XSL Transformation (XSLT)
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 5 Vilkårssetningar og løkker. 5.1 Boolske uttrykk George Boole ( ), britisk matematikar Utvikla teori om logikk ved bruk av symbol i.
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 14.9 Ulike måter for å lese inn og skrive ut data. Kap. 3.5 mer om if – setninger Ferdige.
A (12) B (10) C (12) D (9) E (18) F (11) H (10) G (11) I (7) FF3 SS8 FF5 FF7FS0 SF21 SS8 FF3 SS3 FF5SF12FS0 FS7 Vi har gitt et.
Lokale variable Hvis vi trenger å ta vare på en verdi, inne i en metode kan vi definere en lokal variabel: int amount = 0; vi må fortelle hvilken type.
INF5110 – 23. april, 2013 Svar på noen oppgaver til kap
Møtestruktur i Altinnsamarbeidet (Operativt)
INF5110 – 5. og 7. mai 2015 Stein Krogdahl, Ifi, UiO
IS-102 Interaksjon med objekter
IN1000-seminar høsten 2017 Henrik H. Løvold
Spillutvikling Introduksjon til spillutvikling i Processing
Utskrift av presentasjonen:

1 INF5110 – 23. april, 2013 Svar på noen oppgaver til kap. 8 Beklager noe trykkfeil og rot på forelesningene Håper dette er bedre (lagt ut 24/4) Nå fredag (26/4): Det blir ikke undervisning Oblig 2: Merk at den må levers før fristen (senest 1/5). Dersom den ikke aksepteres får man den tilbake for retting.

SVAR: Oppgave 8.1.c pluss litt Lag for hånd TA-kode for følgende uttrykk: a * b + a * b * c Du skal ikke prøve å optimalisere koden. Velg variabelnavn på temporære som t1, t2, osv. : t1 = a * b Lages av node x t2 = a * b Lages av node z t3 = t2 * c lages av node y t4 = t1 + t3 lages av node r Og node r skal melde «oppover» at svaret ligger i t4 + * ** a ab b c Her er et ADT for uttrykket, og det er en metode i hver node. Angi i hvilken node de forskjellige deler av TA-koden blir produsert. x z y r Det lages altså ikke kode i blad- nodene!

SVAR: Oppgave 8.1.c, med optimalisering Lag for hånd TA-kode for følgende uttrykk: a * b + a * b * c Du skal nå prøve å optimalisere koden, ved ikke å beregne samme subuttrykk om igjen: t1 = a * b t2 = t1 * c t3 = t1 + t2 For å kunne lage slik kode må kompilatoren: Oppdage om det er subtrær som er like, og hvor. Dette må gjøres med et slags søk, som vi ikke går inn på her. I vårt tilfelle kan dette markeres med en peker fra node y til node x i treet over (alternativt sette z.left til å peke direkte til x) Kodegeneratoren må ta hensyn til dette ved å markere i x når det er generert kode for subtreet x, og angi i x i hvilken tempoærvariabel verdien ligger. + * ** a ab b c Her er et ADT for uttrykket, og det er én kodegen.-metode i hver node. Tenk på hvordan en kompilator skulle kunne gjøre slike optimaliseringer. x y z

SVAR: Oppgave 8.2.c P-kode Lag for hånd P-kode for følgende uttrykk: a * b + a * b * c Du skal her ikke prøve å optimalisere koden. lod a lages av x lod b lages av w muli lages av y lod a lages av q lod b lages av r muli lages av v lod c lages av p muli lages av u addi lages av z + * ** a ab b c Her er et ADT for uttrykket, og det er én metode i hver node. Angi i hvilken node de forskjellige deler av P-koden blir produsert. x u z y r p v q w Ved P-kode lages det alstå kode fra alle noder

SVAR: Oppgave 8.2.c, P-kode med optimalisering Lag for hånd P-kode for følgende uttrykk: a * b + a * b * c Du skal nå prøve å optimalisere koden, ved ikke å beregne samme uttrykket om igjen. Foreslå en ekstra P-instruksjon slik at dette går an. Vi foreslår: en «dup»-instruksjon som dupliserer toppen av stakken. Koden kan da skrives lod a lod b mul lod a lod b muli lod c muli addi Erstattes av dup Koden blir da: lod a lod b muli dup lod c muli addi

Oppgave: If-setninger oppg. 1. P-kode I den følgende if-setning er b, c og d boolske variable if (b and c or d) a = x else x = a ; Bet. tolkes slik: ((b and c) or d) Lag P-kode for denne pr. hånd der betingelsen ikke er kortsluttet, og slik at betingelsen blir beregnet til en logisk verdi: lod b lod c and lod d or jfalse L1 lda a Load adressen til a! lod x sto Begge forsvinner jmp L2 label L1 lda x Load adresse! lod a sto label L2

SVAR: If-setninger oppg. 2. P-kode med kortslutning I den følgende if-setning er b, c og d boolske variable if (b && c || d) a = x else x = a ; Lag P-kode for denne der betingelsen blir kortsluttet og slik at alle hopp går så direkte som mulig lod b jfalse Ld lod c Her er b true jfalse Ld jmp Lstart Her er b&&c true label Ld Her er b&&c altså false lod d jfalse Lelse Betingelsen er false fordi også d er false label Lstart lda a lod x sto jmp Lslutt label Lelse lda x lod a sto label Lslutt Det kan her virke som denne koden blir laget på helt ad.hoc.-basis, men, se i pensum-filene at det er greit nok å produsere slik kode. Trikset er å gi med til hver kodegen- metode i uttrykks-noder (to String-parametere) hvilken label det skal hoppes til så fort man vet at svaret blir hhv. true eller false.

SVAR: Oppgave: If-setninger oppg. 3, TA-kode I den følgende if-setning er b, c og d boolske variable if (b and c or d) a = x else x = a ; Lag TA-kode for denne der betingelsen ikke er kortsluttet og slik at den blir beregnet til en logisk verdi t1 = b and c t2 = t1 or d jfalse Lelse a = x jmp Lslutt label Lelse x = a label Lslutt

Oppgave: If-setninger oppg. 4, Med kortslutning I den følgende if-setning er b, c og d boolske variable if (b && c || d) a = x else x = a ; Lag TA-kode for denne der betingelsen blir kortsluttet og slik at alle hopp går så direkte som mulig. Kodegenereings-metode diskuteres i pensum- foilene. Det blir altså lite vanlige TA-instruksjoner her! jfalse b Ld jfalse c Ld jmp Lstart // Hopp om hele b && c er true label Ld // Hele b && c er false jfalse d Lelse // Hopp om hele (b && c || d) er false label Lstart a = x jmp Lslutt label Lelse x = a label Lslutt

Lag OO-versjon av program som genererer TA- kode med kortslutning for betingelser Et program fra pensumfoilene som gjør dette ligger på neste foil. Oppgaven er å skrive det i en objektorientert stil. Oppsett for svar ligger på foilen deretter.

11 Genere TA-kode for boolske uttrykk void genBoolCode(String labT, labF) { … case ”||”: { String labx = genLabel(); left.genBoolCode(labT, labx); emit2(”label”, labx); right.genBoolCode(labT, labF); } case ”&&”: { String labx = genLabel(); left.genBoolCode(labx, labF); // som over emit2(”label”, labx); right.genBoolCode(labT, labF); // som over } case ”not”: { // Har bare ”left”-subtre left.genBoolCode(labF, labT); // Ingen kode lages!!! } case ”<”: { String temp1, temp2, temp3; // temp3 skal holde den boolsk verdi for relasjonen temp1 = left.genIntCode(); temp2 = right.genIntCode(); temp3 = genLabel(); emit4(temp3, temp1, «lt», temp2); // temp3 får (det boolske) svaret på relasjonen emit3(«jmp-false», temp3, labF); emit2(«ujp», labT); // Denne er unødvendig dersom det som følger etter er labT // Dette kan vi oppdage med en ekstra parameter som angir labelen bak } } // den konstrusksjonen man kaller kodegenererings-metoden for. labT true false labx labT true false labF left right For ”||”: Men heller ikke denne vil lage helt god kode! Hvorfor?? (se helt nederst) Vi bryr oss ikke med retur-navnet, siden de alltid vil hoppe ut

GenBoolCode genererer riktig TA-kode på OO-maner Merk: noen av navnene er her forandret fra forrige foil abstract class Expression { abstract String genBoolCode(String LabT, LabF); } class OrOp extends Expression { String genBoolCode (String LabT, LabF){ String labx = genNewLabel(); left.genBoolCode(labT, labx); emit2(”label”, labx); right.genBoolCode(labT, labF); } class AndOp extends Expression { String codeGen (String LabT, LabF){ String labx = genNewLabel(); left.genBoolCode(labx, labF); emit2(”label”, labx); right.genBoolCode(labT, labF); } } Svar: Dette må stå i Expression-klassen! NB: Selv om alle metoder her leverer en String (altså navnet på variablen der svaret ligger) så bruker vi ikke dette, fordi alt foregår med hopp! Unntaket er LessThanOp (”<”).

Fortsettelse fra forrige foil class NotOp extends Expression { String genBoolCode (String LabT, LabF){ expr.genBoolCode(labF, labT); // «expr» er peker til subtreet i Not-noder } class LessThanOp extends Expression { String genBoolCode (String LabT, LabF){ String temp1, temp2, temp3; // temp3 skal holde verdi av relasjonen temp1 = left.genIntCode(); temp2 = right.genIntCode(); temp3 = genNewLabel(); emit4(temp3, temp1, «lt», temp2); emit3(«fjmp», temp3, labF); emit2(«ujp», labT); }