EKSAMEN Emnekode: Emne: ITF10208 Webprogrammering 1 Dato: Eksamenstid: 09/12-2008 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 inklusiv denne forsiden, og er inndelt i 4 deler med henholdsvis 10, 2, 2 og 2 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. Det alltid er bedre å svare noe, om så bare hvordan du ser for deg at oppgaven kunne vært løst, enn å ikke skrive noe i det hele tatt på en oppgave. God jul, og takk for et hyggelig semester! Lykke til! Sensurdato: 07/01-2009 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 (20%) 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%) $a=6; $b=7; if($a<=$b) if($a>5) echo "A"; else echo "B"; else if($b>5) echo "C"; else echo "D"; Side 2 av 10
Oppgave 1.2 (2%) $a=10; $b=20; if($a>$b &&!($b/2==$a)) echo "A"; elseif($a==$b $a!=$b) echo "B"; else echo "C"; Oppgave 1.3 (2%) for($i=0;$i<=5;$i++) echo $i; Oppgave 1.4 (2%) $a=15; $i=0; while($i<$a) $i++; echo $i; Side 3 av 10
Oppgave 1.5 (2%) $a=10; while($a!=5) echo "A"; $a--; while($a==5) echo "B"; $a++; Oppgave 1.6 (2%) for($i=0;$i<5;$i++) echo ($i%2==1?"a":"b"); Oppgave 1.7 (2%) $a = array("a"=>1,"b"=>2,"c"=>3); $b = array("c","b","a"); foreach($b as $c) echo $a[$c]; Side 4 av 10
Oppgave 1.8 (2%) $listami = array(45,67,23,45,43,23,12); $min=$listami[0]; foreach($listami as $element) if (($element<=$min)==false) $min = $element; echo $min; Oppgave 1.9 (2%) $bokstaver = array("a","b","c","d","e"); $b = count($bokstaver); foreach($bokstaver as $bokstav) if($bokstav!=$bokstaver[$b-3]) echo $bokstav; Oppgave 1.10 (2%) $bokstaver = array("a","b","c","d","e"); for($i=1;$i<count($bokstaver);$i++) echo $bokstaver[$i].$bokstaver[$i-1]." "; Slutt Del 1 Side 5 av 10
Del 2 Grunnleggende programmering (15%) Oppgave 2.1 (10 %) Skriv ferdig følgende funksjoner: a) En funksjon som sjekker om tre tall er like, og returnerer true/false. function erlike($a,$b,$c) b) En funksjon som skriver ut (echo) en array bakvendt. function skrivutbakvendt($minarray) c) En funksjon som regner om (og returnerer) en verdi fra NOK til en bestemt valuta. Dersom omregningen ikke lot seg gjøre (ugyldig/ukjent valuta), skal funksjonen returnere verdien 0. Parameteret belop vil her inneholde verdien i NOK som skal regnes om, mens valuta inneholder navnet på valutaen (f.eks SEK) som beløpet skal regnes om til. function regnom($belop,$valuta) TIPS: Du kan gå ut i fra at du har følgende array til rådighet i funksjonen, med et ukjent antall valutakurser: $kurser = array("usd"=>6.91, "SEK"=>0.89,..., "EURO"=>8.21) Oppgave 2.2 (5 %) Gå ut i fra at du har følgende variabler definert i et program $alder -> alder i hele år $hoyde -> høyden i hele cm $fornavn -> fornavnet til personen som en string $etternavn -> etternavnet til en person som en string $medlem -> true=er medlem / false=er ikke medlem Skriv logiske uttrykk for følgende påstander: a) Heter "Per" til fornavn og er mer enn 18 år gammel. b) Et medlem som heter "Per" til fornavn ELLER et ikke-medlem som heter "Hansen" til etternavn og er eksakt 150 cm høy. c) Heter "Per Hansen", "Per Olsen" eller "Per Nilsen". Slutt Del 2 Side 6 av 10
Del 3 Skjemaer og filbehandling (30%) Du skal nå lage ferdig et register for matoppskrifter. Systemet baserer seg på filer som har følgende format: ingrediens;mengde;enhet ingrediens;mengde;enhet ingrediens;mengde;enhet En lang linje med beskrivelsen av hvordan maten lages Merk deg at det er et ukjent antall linjer med ingredienser, og så én linje med beskrivelse til slutt. F.eks vil en fil med navn "Kladdekaker.dat" inneholde følgende (her er linja med beskrivelsen brukket pga. sidebredden på arket): Mel;4;dl Smør;100;gram Gjær;50;gram Egg;4;stykk Bland sammen alle ingrediensene. La deigen ese litt, og så lager du små runde boller. Stek disse i panna i 40 minutter, til de blir brune og fine. Oppgave 3.1 (10%) a) Lag et skjema som sender data til websiden visoppskrift.php. Skjemaet skal inneholde tekstfelter for navn på matrett og for antall porsjoner. b) Forklar kort hvorfor du har valgt å sende dataene til visoppskrift.php via hhv. GET eller POST. Side 7 av 10
Oppgave 3.2 (20%) Skriv ferdig koden til fila visoppskrift.php Skriptet/koden skal gjøre følgende: Hente ut parameterne. Sjekke om det finnes en fil med navn <oppskrift>.dat i samme katalog ved hjelp av funksjonen file_exists(filnavn), der <oppskrift> da er navnet på oppskriften. o Finnes ikke fila skal brukeren få meldingen "Beklager finner ikke oppskriften" o Finnes fila skal den åpnes og så leses. Mens du leser fila skal følgende rapport genereres: Navnet på oppskriften i <h1>-format Antall porsjoner i parentes Liste ut alle ingrediensene med riktig mengde basert på antall porsjoner brukeren oppgav. Skriv ut teksten på den linja som ikke inneholder ingredienser. TIPS: Om en linje lar seg splitte i tre på semikolon er det en ingrediens, ellers en beskrivelse. TIPS: Split-funksjonen har følgende "signatur" i manualsidene: array split ( string $pattern, string $string [, int $limit] ) Dersom vi tar utgangspunkt i eksempeloppskriften (Kladdekaker.dat), skulle utskriften blitt som følger for 4 porsjoner: Kladdekaker (4 porsjoner) 16 dl Mel 400 gram Smør 200 gram Gjær 16 stykk Egg Bland sammen alle ingrediensene. La deigen ese litt, og så lager du små runde boller. Stek disse i panna i 40 minutter, til de blir brune og fine. Slutt Del 3 Side 8 av 10
Del 4 Databaser og PHP (35%) Vegvesenet har startet målinger av bilpasseringer langs alle riks- og fylkesveier i landet. Alle disse målingene lagres i en database. Databasen er plassert på samme maskin som PHP-koden du skal skrive. Brukerkontoen som PHP-koden skal benytte har brukernavnet "webgrensesnitt" og passordet "dettegjettesaldri". Selve databasen heter "trafikkovervaaking". I databasen ligger det to tabeller: Maaling: tidspunkt stasjon hastighet 2008-11-12 14:05:10 RV110-B114 52 2008-11-12 14:05:15 RV110-B114 61 2008-11-12 14:05:16 E6-A12 117 2008-11-12 14:05:21 RV110-B114 57 2008-11-12 14:05:21 E6-A11 89 Forklaringer til tabellen: Feltet tidspunkt angir når en bil passerte målestasjonen. Feltet stasjon angir hvilken målestasjon bilen passerte. Navnet består av veinavnet (f.eks RV110) sammensatt med en id på målestasjonen (f.eks B114). Feltet hastighet angir hastigheten til bilen som passerte. Fartsgrense: stasjon grense E6-A11 90 E6-A12 110 RV110-B114 60 Forklaringer til tabellen: Feltet stasjon angir hvilken målestasjon fartsgrensen gjelder for. Dette er de samme stasjonsbetegnelsene som hastighetsmålingene i tabellen Maaling blir rapportert for. Feltet grense angir hva fartsgrensen på stedet er. Side 9 av 10
Oppgave 4.1 (10 %) Det viser seg at målestasjonen "RV110-B114" har hatt problemer med sensoren for hastighetsmåling. Feilen er nå fikset, men alle målingene i databasen skulle vært 7% høyere. Skriv PHP-kode som kobler seg til databasen og oppdaterer dataene. Koden skal være så generell at den også kan benyttes for å oppdatere målerfeil ved andre stasjoner. Skriptet/websiden skal derfor kunne kalles på følgende måte: justerhastighetsmaalinger.php?stasjon=rv110-b114&justeringsfaktor=1.07 Oppgave 4.2 (25 %) Denne oppgaven består av to deloppgaver. Du velger selv om du ønsker å løse de som én eller to atskilte oppgaver. Du kan også velge om du vil formatere utskriften i tabellformat(html) eller som vanlig tekst. Tabellformatet vil imidlertid gi litt bedre uttelling på oppgaven. a) List ut alle målinger gjort for E6 (dvs. målestasjoner som starter med "E6-") med tidspunkt, målestasjon og hastighet. Merk deg at det er flere målestasjoner langs en vei. Utskriften skal være sortert stigende på tidspunkt. b) Det er også interessant å ha med fartsgrensen forbi målestasjonen i rapporten. Disse fartsgrensene ligger lagret i tabellen med navn Fartsgrense. Legg derfor til to ekstra kolonner i utskriften, der du i den ene skriver hva virkelig fartsgrense var, og i den andre en melding om: "Kødannelser" (hastighet 10% mindre fartsgrensen) "Normal flyt" (hastighet lik fartsgrensen pluss/minus 10%) "Råkjøring"(hastighet 10% større enn fartsgrensen) TIPS: I deloppgave b kan du velge om du benytter uthenting fra begge tabeller samtidig (dette har vi kun sett på raskt i et par forelesninger), eller om du kjører en ny spørring mot tabellen Fartsgrense for hver rad i tabellen Maaling. TIPS 2: Det er ikke noe krav, men det kan nok være lurt for oversiktens skyld å dele programmet inn i funksjoner. MERK: For oppkobling mot databasen kan du henvise til oppgave 4.1, om du fikk til dette der. Det er ikke noe poeng i å skrive disse instruksjonene om igjen. Slutt Del 4 Side 10 av 10