EKSAMEN Emnekode: Emne: ITM20606 Webprogrammering med PHP Dato: Eksamenstid: 11/12-2007 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 vedlegg, og er inndelt i 4 deler med henholdsvis 10, 4, 2 og 3 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. Riktig god jul til dere alle, og takk for et veldig hyggelig semester :-) Lykke til! Sensurdato: 14/01-2008 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%) $tall = 5; if($tall > 3) echo $tall; if($tall > 0) echo ($tall-3); else echo ($tall-5); Oppgave 1.2 (2%) $tall = 5; if($tall > 3) echo $tall; else if($tall > 0) echo ($tall-3); else echo ($tall-5); Oppgave 1.3 (2%) for($i = 6; $i < 10 ; $i++) echo ($i - 1); Side 2 av 10
Oppgave 1.4 (2%) $i = 1; while($i > 0) echo "A"; $i--; Oppgave 1.5 (2%) Hvilken boolsk verdi får variablene $v1 og $v2, dersom $a=0, $b=7, $c = false og $d = true? $v1 =!($c!= $d); $v2 = ( ($a <= $b) && ($b!= $b) ) ($b 7 == $a); Oppgave 1.6 (2%) function magisk($tall1,$tall2,$valg) if($valg==true) return $tall1; else return $tall2; echo magisk(3,6,false). " ". magisk(4,7, (4<8)); Oppgave 1.7 (2%) function tull($tall1,$tall2) return $tall1+$tall2; echo tull( tull(4,5), tull(6,4) ); Side 3 av 10
Oppgave 1.8 (2%) for($i=10; $i>0; $i--) echo $i; if($i%4==0) break; Oppgave 1.9 (2%) $t = array(4,7,3,2,5); for($i = 0; $i < count($t) ; $i++) if($i>2) echo "A"; else echo $t[$i]; echo " - "; Oppgave 1.10 (2%) for($teller=0;$teller<5;$teller++) echo ($teller%2==0? "A" : "B" ); Slutt Del 1 Side 4 av 10
Del 2 Koding (30%) Innebygde funksjoner i PHP, som kan være nyttige på noen av oppgavene, ligger vedlagt som utdrag av manualsider. Alle fire oppgavene i denne delen kan løses uavhengig av hverandre. Oppgave 2.1 (9 %) Skriv ferdig følgende funksjoner, og inkluder ett eksempel på bruk. Husk at du kan skrive eksempelet på bruk selv om du ikke klarer å gjøre ferdig selve funksjonen. a) Funksjon som returnerer det minste av to tall. function minimum($tall1,$tall2) b) Funksjon som konverterer en verdi fra grader Celsius til grader Fahrenheit. Formelen for dette er som følger: F = (9/5)*C + 32. function tilfahrenheit($c) c) Funksjon som finner ut hvordan to tall forholder seg til hverandre. Er tall1 mindre enn tall2 skal -1 returneres, er de like skal 0 returneres og er tall1 større enn tall2 skal 1 returneres. function sammenlign($tall1,$tall2) Oppgave 2.2 (9 %) Vi har en array med tallverdier som for eksempel kan være definert som følger: $talliste = array(4,5,6,-2,3,-4,5,7,-4); Skriv kode som gjør følgende operasjoner med arrayen: a) Skriver ut summen av alle positive tall. b) Skriver ut antallet negative tall. c) Skriver ut det største partallet. Oppgave 2.3 (4%) Skriv kode som sørger for at teksten i en variabel med navn $tekst ikke er lenger enn 100 tegn. Er den det, skal teksten kortes ned til 97 tegn og tre prikker skal legges til på slutten. Oppgave 2.4 (8%) Forklar kort (gjerne i stikkordsform/punktliste) følgende. Meningen her er å skrive nok til å overbevise sensor om at du har god forståelse for temaet. a) Hva er en funksjon, og hvorfor ønsker man å benytte funksjoner? b) Om vi sender data til et PHP-script kan vi velge mellom metodene GET og POST. Hva er forskjellen på disse metodene, og hvilke fordeler og ulemper ser du ved hver av dem? Slutt Del 2 Side 5 av 10
Del 3 Filbehandling (25%) Resultatene fra en test med tre ja/nei-spørsmål ligger lagret i en fil med navn resultater.dat på følgende format: deltakernummer;svara;svarb;svarc Et utdrag av fila kan derfor se ut som følger: 3;ja;nei;nei 4;ja;nei;ja 5;nei;ja;ja Riktige svar på spørsmålene er A=ja, B=ja og C=nei. For å bestå testen må man ha to eller flere riktige svar. Oppgave 3.1 (15%) Skriv kode som leser inn fila, og skriver ut en resultatliste på følgende form. Det som vises her er basert på det samme utdraget av fila som ble vist i innledningen til oppgaven. 3: 2 rette (Bestått) 4: 1 rett (Ikke Bestått) 5: 1 rett (Ikke Bestått) NB! Legg merke til entall/flertallsformen i utskriften (2 rette/1 rett). Oppgave 3.2 (10%) Hvilke endringer må du gjøre på koden fra oppgave 3.1, for å få følgende oppsummering til slutt i utskriften. Det som vises her er basert på det samme utdraget av fila som ble vist i innledningen til oppgaven. Antall bestått: 1 Antall ikke bestått: 2 Strykprosent: 66 % Tips: Formelen for å finne strykprosenten er: (antall stryk/antall besvarelser)*100 I utskriften av strykprosenten kan du benytte funksjonen round for å avrunde svaret. Denne funksjonen tar som argument den verdien som skal avrundes, og returnerer denne verdien i avrundet form. Et utdrag av manualsiden til round finnes i vedlegget. Husk at du ikke trenger skrive all koden fra oppgave 3.1 på nytt, kun indikere godt hvor endringene skal stå. Slutt Del 3 Side 6 av 10
Del 4 SQL (og kobling mot databaser med PHP) (25%) I alle påfølgende oppgaver tar vi utgangspunkt i følgende tabell (med navn Vaerdata) med måledata for været på flere målestasjoner. Merk deg at under vises kun et utdrag av data fra denne tabellen. Den vil inneholde mange flere rader. Vaerdata tidspunkt maalestasjon grader vindstyrke vindretning nedboer tekst 2007-10-13 10:17:00 Halden -2.4 5.5 NNØ 0.1 Overskyet 2007-10-13 10:17:11 Sarpsborg -1.7 7.2 ØNØ 0.0 Lettskyet 2007-10-13 10:18:02 Halden -3.6 5.4 NØ 0.2 Overskyet, snø Oppgave 4.1 ( 10 %) Skriv SQL-spørringer som henter ut følgende data: a) Alle data for målestasjonen i Halden. b) Tidspunkt, målestasjon og antall grader for de målingene med en temperatur lavere enn -15.0 grader. c) Tidspunkt og antall grader for målinger gjort i Halden, sortert etter tidspunktet i stigende rekkefølge (eldste først, nyeste til slutt). d) Antall målinger vi har for Halden. e) Gjennomsnittstemperaturen av målingene gjort i Sarpsborg. Oppgave 4.2 (12 %) Lag et PHP-script som gjør følgende operasjoner mot databasen. Du velger selv om du vil løse dette som tre atskilte oppgaver, eller som én. a) Kobler til databasen. Brukernavnet er "vidar", passordet er "theisen", databasenavnet er "meteo", og databasen ligger på "localhost" i forhold til scriptet. b) Skriver ut alle målingene gjort i Halden med tidspunkt og antall grader. Du kan her velge om du vil formatere utskriften i tabellformat eller som vanlig tekst. Tabellformatet vil imidlertid gi litt bedre uttelling på oppgaven. c) Skriver ut laveste, høyeste og gjennomsnittstemperaturen for Halden på følgende format: Laveste: XXºC Høyeste: XXºC Gjennomsnitt: XXºC Oppgave 4.3 ( 3 %) Forklar kort (gjerne i stikkordsform/punkliste) fordelene og ulempene ved å benytte en database i forhold til filer. Meningen her er å skrive nok til å overbevise sensor om at du har god forståelse for temaet. Slutt Del 4 Side 7 av 10
Vedlegg PHP funksjoner Her følger en nedskalert utgave av diverse manualsider. strlen Get string length Description int strlen ( string $string ) Returns the length of the given string. Example $str = 'abcdef'; echo strlen($str); // 6 $str = 'ab cd'; echo strlen($str); // 5 split Split string into array by regular expression Description array split ( string $pattern, string $string [, int $limit] ) Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by the case-sensitive regular expression pattern. If limit is set, the returned array will contain a maximum of limit elements with the last element containing the whole rest of string. If an error occurs, split() returns FALSE. Example $date = "04/30/1973"; $ar = split("/", $date); echo "M: ". $ar[0]. " D: ". $ar[1]. " Y: ". $ar[2]; // M: 04 D: 30 Y: 1973 Side 8 av 10
trim Strip whitespace (or other characters) from the beginning and end of a string Description string trim ( string $str [, string $charlist] ) This function returns a string with whitespace stripped from the beginning and end of str. Example $text = " These are a few words :)... "; echo trim($text); // "These are a few words :)..." substr Return part of a string Description string substr ( string $string, int $start [, int $length] ) Returns the portion of string specified by the start and length parameters. Parameters string The input string. start If start is non-negative, the returned string will start at the start'th position in string, counting from zero. For instance, in the string 'abcdef', the character at position 0 is 'a', the character at position 2 is 'c', and so forth. length If length is given and is positive, the string returned will contain at most length characters beginning from start (depending on the length of string). If string is less than or equal to start characters long, FALSE will be returned. Example echo substr('abcdef', 1); // bcdef echo substr('abcdef', 1, 3); // bcd echo substr('abcdef', 0, 4); // abcd echo substr('abcdef', 0, 8); // abcdef Side 9 av 10
round Rounds a float float round ( float $val [, int $precision ] ) Returns the rounded value of val to specified precision (number of digits after the decimal point). precision can also be negative or zero (default). Parameters val The value to round precision The optional number of decimal digits to round to, defaults to 0 Example echo round(3.4); // 3 echo round(3.5); // 4 echo round(3.6); // 4 echo round(3.6, 0); // 4 echo round(1.95583, 2); // 1.96 echo round(1241757, -3); // 1242000 echo round(5.045, 2); // 5.05 echo round(5.055, 2); // 5.06 Side 10 av 10