INF5110 – 23. april, 2013 Svar på noen oppgaver til kap

Slides:



Advertisements
Liknende presentasjoner
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.
Advertisements

Internett for nybegynnere
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Høgskolen i Oslo Webprogrammering Tilstandsbevaring Sessions og cookies.
C++ for Java-programmerere
Kontrollstrukturer (Kapittel 3)
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objektorientert programmering i PHP del 2
IS-102 Klassedefinisjoner
C# for javaprogrammerere
Korrekt dybde først-søk
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.
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.
Kap 10 Graf.
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 8 Trær Hans Fr. Nordhaug (Ola Bø)
INF 295 Forelesning 18 - kap 9 Aktivitetsgrafer
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.
Høgskolen i Oslo Webprogrammering Ajax og PHP. I dag l Hvordan få en bedre brukeropplevelse via Ajax- script l Gjennomgang av kode l Oppgaveløsning på.
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.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
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,
Testing av objektorienterte systemer Testplanlegging
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.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Java 5 Litt mer om løkker Arrayer Metoder Ole Christian Lingjærde
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.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
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.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
Matematikk 1 årskurs 26. oktober 2009
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.
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.
Kom i gang med Python Pål Hellesnes SYSTEMUTVIKLER
Nyttige kommandoer $df -h Viser diskbruk $lspci Lister pci kortene $cd
Brøk Regneartene.
TDT4105 Informasjonsteknologi, grunnkurs
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
INF1300 Introduksjon til databaser
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
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
For, While, prosedyrer m/ parametere, funskjoner
Utskrift av presentasjonen:

INF5110 – 23. april, 2013 Svar på noen oppgaver til kap 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 + y x * * z a b * c Det lages altså ikke kode i blad-nodene! a b 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.

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. + x z * * y a b * c a b 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.

SVAR: Oppgave 8.2.c P-kode z y u p x v w q r + y u 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 * * p x v w a b * c q r a b Ved P-kode lages det alstå kode fra alle noder 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.

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 muli lod c addi Koden blir da: lod a lod b muli dup lod c addi Erstattes av dup

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 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 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 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. NB: Svar ikke lagt ut ennå (24/4)

Genere TA-kode for boolske uttrykk Men heller ikke denne vil lage helt god kode! Hvorfor?? (se helt nederst) 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 ”&&”: { left.genBoolCode(labx, labF); // som over 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. Vi bryr oss ikke med retur-navnet, siden de alltid vil hoppe ut For ”||”: true left labT false labx true right labT false labF

Oppsett for kortsluttet kode: Metoden for et slikt uttrykk blir kalt fra while-stm eller if-stm, med labler den vet det skal hoppes til ved true eller false betingelse abstract class Expression { // Hvordan skal «String codeGen(…)» se ut her? } class OrOp extends Expression { String codeGen (String LabT, LabF){ ... } class AndOp extends Expression { String codeGen (…){ … } class NotOp extends Expression { class LessThanOp extends expression { Merk at disse metodene kalles «langs» pekere typet med Expression. Spørsmål: Hva må da stå i Expression-klassen?