EKSAMEN (Konvertert fra en gammel PHP-eksamen) Emnekode: Emne: ITF10208 Webprogrammering 1 Dato: Eksamenstid: 30/05-2012 09.00-13.00 Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne) Faglærer: Tom Heine Nätt Eksamensoppgaven: Oppgavesettet består av 10 sider inkludert denne forsiden, og er inndelt i 4 deler med henholdsvis 5, 2, 3 og 1 oppgaver. Du er selv ansvarlig for å kontrollere at oppgavesettet er komplett. Det er på hver del og oppgave angitt hvor mye disse teller av totalen. Karakter fastsettes dog på basis av en helhetsvurdering av besvarelsen. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad. MERK: Du trenger ikke skrive opp hele kodestrukturen til et HTML-dokument på de oppgavene der du skal lage en webside. Skriv kun det som ville stått mellom <body> og </body> Lykke til! Sensurdato: 21/06-2012 Karakterene er tilgjengelige for studenter på studentweb senest 2 virkedager etter oppgitt sensurfrist. Følg instruksjoner gitt på: www.hiof.no/studentweb Side 1 av 10
Del 1 Kodeforståelse (10 %) Her skal du kun svare på selve spørsmålet, og du trenger ikke forklare hvordan du kommer frem til svaret. NB! Les koden og selve spørsmålet nøye, for det kan være mange feller å gå i her... Oppgave 1.1 (2 %) Hva blir utskriften fra følgende kode? var a = 2; var b = a+1; var a = 3; if(b === a+1){ console.log("a"); else{ console.log("b"); Oppgave 1.2 (2 %) Hva blir utskriften fra følgende kode? for(i=3; i<5; i++){ console.log(i + " "); Oppgave 1.3 (2 %) Hva blir utskriften fra følgende kode? var arr = [1,2,3,4,5]; var str = ""; for(e in arr){ str = arr[e] + " " + str; console.log(str); Oppgave 1.4 (2 %) Hva blir utskriften fra følgende kode? Side 2 av 10
function test(arr){ if(arr.length > 5){ return arr[1]; else{ return 4; minarr = [3,2,1,3,2,34]; console.log(test(minarr)); Oppgave 1.5 (2 %) Hva blir utskriften fra følgende kode? function a(tall){ return tall+1; function b(tall){ return tall-1; console.log(a(b(a(a(4))))); Side 3 av 10
Del 2 Grunnleggende programmering (30 %) Oppgave 2.1 (15 %) a) Lag en funksjon som finner og returnerer BMI-tallet til en person. Formelen for BMI er vekt/(høyde*høyde). Vekt måles i kg, høyde i meter. Du kan anta at input til funksjonen er i riktig format: function bmi(vekt,hoyde) b) Lag en funksjon som finner og returnerer om en array er tom eller ikke (dvs. ikke har noen elementer): function tomarray(array) c) Lag en funksjon som finner og returnerer summen av elementene i en array: function sumarray(array) Side 4 av 10
Oppgave 2.2 (15 %) Skriv kode som gjør om en tallverdi til en tekstlig verdi. F.eks. vil: 34 bli trettifire 2 bli to 99 bli nittini 14 bli fjorten 28 bli tjueåtte osv.. Koden skal fungere for alle tall mellom 0 og 99, og det skal benyttes så få if-tester (/switch) som mulig. Koden skal anta at tallet som skal omgjøres alt ligger i variabelen tall, og resultatet skal skrives ut ved hjelp av én console.log (altså én utskrift til slutt, ikke flere console.log underveis) Du kan gå ut i fra at du har følgende arrayer til rådighet: var enere = {0:"null",1:"en",2:"to",3:"tre",4:"fire", 5:"fem", 6:"seks", 7:"syv", 8:"åtte", 9:"ni"; var titilnitten = {10:"ti",11:"elleve",12:"tolv",13:"tretten",14:"fjorten", 15:"femten",16:"seksten",17:"sytten",18:"atten",19:"nitten"; var tiere = {2:"tjue",3:"tretti",4:"førti",5:"femti",6:"seksti", 7:"sytti",8:"åtti",9:"nitti"; MERK: I arrayen tiere er nøkkelen antall tiere. Dersom du heller ønsker at nøkkelen skulle være 20,30 osv kan du skrive et tydelig notat om dette og bruke arrayen på den måten isteden. Side 5 av 10
Del 3 Programmeringsprosjekt (45 %) I denne oppgaven skal du utvikle et filbasert bildegalleri. Dette bildegalleriet skal benytte mappestrukturen på serveren for å avgjøre hvilke bilder som er i hvilke gallerier, samt hva tittelen på gallerier og bilder er. Under katalogen bilder på serveren vil det være ett nivå med mapper som representerer galleriene. I hver av disse mappene er det bildefiler som hører til galleriet. Filnavnet gir deg tittelen på bildet (ved å fjerne.jpg) Følgende er et eksempel på mappestrukturen (Fet angir mappenavn, kursive angir filnavn): bilder ---- Sommeren 2010 ----- Ole og Kari.jpg ----- Liten båt.jpg ----- Stemning.jpg ----- Vinteren 2011 ----- Snømann.jpg ----- Snøball.jpg MERK: Du skal ikke benytte CSS i dette bildegalleriet. MERK: Du kan programmere ut i fra at mappen bilder er en underkatalog til mappen der scriptene ligger. Med andre ord kan du bruke relative referanser. TIPS: Du kan få bruk for img-taggen som f.eks. ser slik ut: <img src="bilder\sommeren 2010\Ole og Kari.jpg" width="500" height="200"/> MERK: Ved å importere fila stottefunksjoner.inc, som ligger i samme katalog, vil scriptet ditt ha tilgang på følgende: funksjonen hentjpeginfo($fil) som returnerer en assosiativ array med alle egenskaper til bildefila (såkalt EXIF-data). Denne assosiative arrayen har blant annet nøklene: manufacturer model datetime gir firmanavnet til kameratilvirkeren gir modellnavnet på kameraet gir deg datoen og tidspunktet da bildet ble tatt (på samme format som du skal benytte i oppgavene) funksjonen henttittel($fil) gir tilbake filnavnet (såkalt basename) der filsti og filetternavn er fjernet. funksjonen bildefinnes($fil) tar i mot en bildefil og gir tilbake true/false om bildet finnes eller ikke. Side 6 av 10
funksjonen hentbilder($gallerinavn)tar i mot et gallerinavn og gir deg tilbake en array med filnavn (inkl. filetternavn) for alle JPEG-filer i denne mappen. function hentgallerier() gir deg en array med alle mappenavn/gallerinavn under mappa bilder. Oppgave 3.1 (15 %) I denne oppgaven skal du lage en webside med navn visbilde.php Denne websiden tar som parameter et gallerinavn og en bildetittel, og skal vise dette bilde samt utvalgt info. Eksempel på URL: http://www.domene.no/visbilde.php?galleri=sommeren 2010&bilde=Stemning Visningen skal være som følger. Klammeparenteser skal erstattes med faktisk informasjon: [Tittel] Galleri: [Gallerinavn] Dato: [Dato og tidspunkt for da bildet ble tatt] Kamera: [Kameramerke] [Kameramodell] MERK: Du kan vise bildet i original størrelse (dvs. ikke noen width/height i img-taggen). MERK: Du skal gi en feilmelding i stedet for informasjonen over dersom bildet ikke finnes. MERK: Overskriften er i størrelsen H1. Ledetekstene til informasjonen er i bold (bruk <strong> eller <b>) Oppgave 3.2 (15 %) I denne oppgaven skal du lage en webside med navn listbilder.php som lister alle bildene i et galleri. PHP-scriptet skal ta gallerinavnet som parameter: Eksempel på URL: http://www.domene.no/listbilder.php?galleri=sommeren 2010 MERK: Hvert av bildene skal være klikkbare og sende deg til visbilde.php som ble skissert i oppgave 3.1 med riktige parametere satt. Visningen skal være som følger. Klammeparenteser skal erstattes med faktisk informasjon. (For illustrasjonen brukes samme bilde flere ganger): Side 7 av 10
[Gallerinavn] MERK: Alle bilder skal vises med 100 px bredde som skalering. Dette gjøres ved å kun sette width-atributten i img-taggen MERK: Det skal være et linjebrudd for hvert 5. bilde som vises. MERK: Det virkelige systemet må kunne håndtere alle antall av bilder i et galleri, også 0 ved å gi meldingen "tomt galleri" MERK: Overskriften er i størrelse H1 Side 8 av 10
Oppgave 3.3 (15 %) I denne oppgaven skal du lage en webside, listgallerier.php, som lister opp alle gallerier, samt velger ett tilfeldig bilde å vise fra hvert galleri. Eksempel på URL: http://www.domene.no/listgallerier.php MERK: Bildet og teksten skal være klikkbart og sende deg til listbilder.php med riktig parameter satt. Visningen skal være som følger. Klammeparenteser skal erstattes med faktisk informasjon. (For illustrasjonen brukes samme bilde for alle galleriene. Husk at 3 gallerier kun er et eksempel): Mine bilder [Gallerinavn] [Gallerinavn] [Gallerinavn] MERK: Alle bilder skal vises med 100 px bredde som skalering. MERK: Overskriften er i størrelse H1. Side 9 av 10
Del 4 Databaser (15%) En foreleser sitter med en databasetabell (navn: resultat) med resultatene fra eksamen. kandidatnummer del1 del2 del3 del4 1 85 75 90 35 2 35 5 100 0 3 45 50 0 0 Hver del kan gi fra 0 til 100 poeng, der 100 er maks. Delene er vektet på følgende måte Del1 teller 20 % Del2 teller 30 % Del3 teller 40 % Del4 teller 10 % Foreleseren ønsker at du skal lage et PHP-script som kobler seg til databasen og presenterer følgende webside med karakterer og totalpoengsum for hver kandidat: Resultater Kandidat 1: C (79) Kandidat 2: E (48.5) Kandidat 3: F (24) MERK: Kandidatene skal presenteres i stigende rekkefølge på kandidatnummer. Du kan ikke basere deg på at de ligger lagret i denne rekkefølgen, selv om eksempeldataene viser dette. Totalpoengsummen beregnes ved å vekte de ulike delpoengene, og summere. Eksempel for kandidat 3: 45*0.20 + 50*0.30 + 0*0.40 + 0*0.10=24. Karakteren fastsettes ut i fra følgende skala: <40: F <50: E <60: D <80: C <90: B <=100: A Med andre ord går E fra og med 40 til 50, D fra og med 50 til 60 osv. Databasen heter eksamen og ligger på localhost. Brukernavn er foreleser og passord er gjettmeg. Side 10 av 10