Eksamessett Høst 2009 Robin Sværen og Simen Arvesen

Like dokumenter
EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

EKSAMEN (Konvertert fra en gammel PHPeksamen)

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

EKSAMEN ITF Webprogrammering 1 Dato: Eksamenstid: Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

Oblig 4. Alternativ A: Alternativ B: Denne obligen har 3 ulike alternativ: Alternativ A: For de som har lyst til å gjøre et eget prosjekt

Her er eksamenssett fra Vår '09. Av Robin Sværen og Simen Arvesen.

Høgskoleni østfold EKSAMEN. Emne: Innføring i programmering

Høgskoleni østfold EKSAMEN

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

Hjelpemidler: 4 A4-sider (2 to-sidige ark eller 4 en-sidige ark) med egenproduserte notater (håndskrevne/maskinskrevne)

EKSAMEN (Konvertert fra en gammel PHPeksamen)

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

SVARFORSLAG : Eksamen i IBE102 Webutvikling Våren 2017.

Høgskoleni østfold EKSAMEN

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

HØGSKOLEN I SØR-TRØNDELAG

Dinesh Jeyabalasingam. Oppgavesett 9. Gruppeoppgave 2. Eksamenssett DEL 1. Oppgave 1.1. IF 1 Hvis $a er mindre eller lik $b stemmer

EKSAMEN Eksamenstid: Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

HØGSKOLEN I SØR-TRØNDELAG

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

HØGSKOLEN I SØR-TRØNDELAG

TDT4110 IT Grunnkurs Høst 2012

HØGSKOLEN I SØR-TRØNDELAG

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Bygg et Hus. Introduksjon. Steg 1: Prøv selv først. Skrevet av: Geir Arne Hjelle

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

Oblig 5 Webutvikling. Av Thomas Gitlevaag

EKSAMEN ITF Innføring i programmering Dato: Eksamenstid: 11/

TDT4110 IT Grunnkurs Høst 2016

Øvingsforelesning 5 Python (TDT4110)

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

Dersom noen oppgaver er så vanskelige at du ikke vet hvordan du skal løse de, gjør forenklinger og forklar nøye hva du har forenklet/tatt bort.

Innføring i bruk av CGI4VB

INF Ekstrainnlevering

Mattespill Nybegynner Python PDF

Eksamen i Internetteknologi Fagkode: IVA1379

Øvingsforelesning 5 Python (TDT4110)

Finne ut om en løsning er helt riktig og korrigere ved behov

Øvingsforelesning 1 Python (TDT4110)

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Programmering Høst 2017

Innføring i bruk av CGI4VB

Eksamen i IBE102 Webutvikling Våren 2017.

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

TDT4110 IT Grunnkurs Høst 2014

Oblig 4 Undervisningshefte i grunnleggende JavaScript programmering

Høgskoleni østfold EKSAMEN

Oppsummering - Til nå... (1/ )

HØGSKOLEN I SØR-TRØNDELAG

Web-programmering med JSP Løsningsforslag leksjon 3

TDT4105 IT Grunnkurs Høst 2016

Repetisjon, del 2. TDT 4110 IT Grunnkurs Professor Guttorm Sindre

INF Innleveringsoppgave 6

Joly. Brukerdokumentasjon for foreleser/administrator

JS: Grunnleggende JavaScript

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

JS: Grunnleggende JavaScript Nybegynner

UNIVERSITETET I OSLO

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

UNIVERSITETET I OSLO

PXT: Flasketuten peker på

UNIVERSITETET I OSLO

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

INF Obligatorisk innlevering 5

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG

GJØVIK INGENIØRHØGSKOLE

K O N T I N U A S J O N S E K S A M E N

Læringsmål og pensum. Oversikt

Oppsummering - Kurset (10/ )

Tilgjegelighet av XHTML-forms

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

Testsituasjon Resultat Kommentar. Fungerer som det skal!

I dag skal vi ved hjelp av ganske enkel Python-kode finne ut om det er mulig å tjene penger på å selge og kjøpe en aksje.

HØGSKOLEN I SØR-TRØNDELAG

TDT4110 IT Grunnkurs Høst 2016

IN1000 Obligatorisk innlevering 7

Løsningsforslag Kontinuasjonseksamen i TDT4110 Informasjonsteknologi - grunnkurs

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Et større case. Terje Rydland - IDI/NTNU. Lære å lage større og sammensatte programmer

Når en bruker skriver sitt navn ("Ole") i et form-element med name="fornavn" som attributt. klikker på submit-knappen

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

UNIVERSITETET I OSLO

TDT4110 IT Grunnkurs Høst 2016

Noen innebygde funksjoner - Vektorisering

Løse reelle problemer

TDT4110 IT Grunnkurs Høst 2015

UNIVERSITETET I OSLO

Transkript:

Eksamessett Høst 2009 Robin Sværen og Simen Arvesen 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 = 2 + 4; $b = 2 + $a; $a = 3; $c = $a + $b; $c += $c; echo $a. " ". $b. " ". $c; 3 8 22 Oppgave 1.2 (2 %) $a = 23; $b = 15; if($a < 40) echo "A"; if($b <30) echo "B"; else echo "C"; AB Oppgave 1.3 (2 %)

$a = (3<7); $b =!$a; if($a==true && $b==true) echo "A"; if($a==true $b==true) echo "B"; if($a!= $b) echo "C"; BC Oppgave 1.4 (2 %) for($i=2;$i<4;$i++) echo "A"; AA Oppgave 1.5 (2 %) for($i=0;$i<7;$i++) if($i<3) echo "A"; else echo "B";

AAABBBB Oppgave 1.6 (2 %) $t = 0; for($i=4;$i>=0;$i-=2) $t+=$i*2; echo $t; 12 Oppgave 1.7 (2 %) $h = array(3,5,2,6,7); $p=0; foreach($h as $e) $p = $e; echo $p; 7 Oppgave 1.8 (2 %) function test($liste) $a = 0; foreach ($liste as $e) if($e > $a) $a = $e; return $a; $arr = array(3,5,2,3);

echo test($arr); 5 Oppgave 1.9 (2 %) function tull($u) return $u+$u; function ball($p,$q) return $p-$q; echo tull(ball(8,3)); 10 Oppgave 1.10 (2 %) function magisk($tall) if($tall%2==0) return $tall; else return 0; for($i=1;$i<5;$i++) echo magisk($i); 0 2 0 4 Slutt Del 1 Del 2 Grunnleggende programmering (15 %)

Oppgave 2.1 (9 %) Skriv ferdig følgende funksjoner: a) En funksjon som returnerer om et tall er partall eller ei function partall($tall) function partall($tall) return (($tall%2)==0?true:false); b) En funksjon som returnerer summen av en liste function sum($liste) function sum($liste) $sum=0; foreach($liste as $d) $sum += $d; return $sum; c) En funksjon som returnerer om to lister (parameterne) har samme sum (Tips: Benytt funksjonen fra deloppgave b) function sammesum($listea,$listeb) function sammesum($listea, $listeb) return (sum($listea)==sum(listeb)?true:false); Oppgave 2.2 (6 %) Gå ut i fra at du har følgende variabler definert i et program (verdiene er eksempelverdier) som forteller om ulike sider ved været for foregående time (gjennomsnittsverdier). $temperatur = 12.3; // i C $vindhastighet = 4.6; // i m/s $vindretning = "NØ" // forkortelse for NordØstlig $nedbor = 3.7 // i antall mm Skriv logiske uttrykk for følgende påstander: a) Det regner og er vindstille

($nedbor >0 && $vindhastighet==0) b) Det blåser nord-, nordøst- eller nordvestlig vind ($vindretning==''n'' $vindretning==''nø'' $vindretning == ''NV'') c) Det regner mer enn 5 mm ELLER det er frost og sørøstlig vind $nedbor > 5.0 ($temperatur < 0 && $vindretning == ''SØ'') d) Det er kuling (13.9-17.1 m/s) ELLER orkan (over 32.6 m/s) ($vindhastighet >= 13.9 && $vindhastighet <=17.1) $vindhastighet > 32.6) Slutt Del 2 Del 3 Databaser og PHP (15 %) Oppgave 3.1 (8 %) En foreleser ønsker å ha en oversikt over sine "Top Gear"-klipp som benyttes til "pauseunderholdning". Han har registrert klippene i følgende databasetabell med navn klipp, men trenger litt hjelp til å lage spørringer: klipp: id tittel morsomhet lengde 1 Reliant Robin space shuttle 10 590 2 Car Dart 6 319 Her er morsomhet en skala fra 1 til 10 (10=morsomst), og lengde er tid målt i antall sekunder. Lag følgende spørringer (SELECT-setninger): a) Tittel og lengde på klipp som er morsommere enn 5. SELECT tittel, lengde FROM klipp WHERE morsomhet > 5; b) All informasjon om klipp som vi rekker å vise i en pause (maks 900 sekunder) sortert slik at de morsomste kommer først. SELECT * FROM klipp WHERE SUM(lengde)<901 ORDER BY morsomhet DESEC; c) Total lengde på alle "Top Gear"-klipp (dvs. hvor mye videomateriale har foreleseren).

SELECT SUM(lengde) FROM klipp; d) Total lengde for hvert morsomhetsnivå (dvs. hvor mye videomateriale har foreleseren på hvert av nivåene 1-10). SELECT morsomhet, SUM(lengde) FROM klipp GROUP BY morsomhet ORDER BY morsomhet; Oppgave 3.2 (7 %) Ved hjelp av et PHP-script, list ut informasjon om alle klipp på en webside med følgende form, der klippene er sortert synkende på morsomhet: Reliant Robin space shuttle(590) 10 Car Dart (319) 6 osv... Databasen har følgende tilkoblingsinformasjon: Kjøres på "localhost" i forhold til PHP-scriptet. Brukernavn: foreleser Passord: drossap Databasenavn: topgear <?php $tilkobling = mysql_connect(''localhost'', ''foreleser'', ''drossap''); mysql_select_db(''topgear'', $tilkobling); $sql=''select * FROM klipp ORDER BY morsomhet DESC''; $resultat = mysql_qaury($sql, $tilkobling); while($record = mysql_fetch_array($resultat)) echo $record[''tittel'']. '('. $record[''lengde'']. ')'. $record[''morsomhet'']. '<br />'; mysql_free_result($resultat): mysql_close($tilkobling);?> Slutt Del 3 Del 4 Skjemaer og filbehandling (50 %) En foreleser skulle prøve ut et nytt system for innleveringer i faget sitt. Dette innebar at studentene skulle evaluere hverandres oppgaver. Etter hvert innså foreleseren at mye av hans arbeidstid gikk med til å behandle dette systemet, så han ønsket å automatisere det.

Det er her du kommer inn i bildet, da du (heldig som du er) har fått i oppgave å lage deler av dette systemet. Hovedelementet i systemet vil være en webside som presenterer status for ukesoppgavene. Denne statussiden kan se slik ut: Uke 1 Uke 2 Uke 3 Uke 4 Uke 5 Uke 6 Uke 7 Uke 8 Uke 9 Uke 10 Gruppe 1 Gruppe 2 Gruppe 3 Foreleseren har imidlertid sagt at han selv skal lage denne statussiden. Det du skal gjøre er å lage omkringliggende funksjoner. Dette består i tre oppgaver der du først skal lage et registreringsskjema for å registrere status, så lage en hjelpefunksjon for statussiden og til slutt lage en side som automatisk genererer lister over hvilke grupper som skal evaluere hvilke. Disse tre oppgavene kan løses uavhengig av hverandre. Merk deg at godkjent/ikke godkjent registreres på gruppenivå. Tross dine iherdige forsøk på å overbevise foreleseren om at en database ville være en bedre løsning for dette, tviholder han på at du skal benytte filer til å lagre statusen for de ulike gruppene. NB! Hver av oppgavene vil inneholde mange opplysninger om løsningen. Pass på å lese oppgavene så grundig at du løser alle de problemene som oppgaveteksten ber deg om. NB! Informasjon som gis i en deloppgave kan være viktig også i påfølgende deloppgaver. Oppgave 4.1 (20 %) Foreleseren ønsker et webbasert skjema, der gruppene selv kan registrere godkjenningene. Dette skjemaet skal se ut som følger (enkel layout): Registreringen foregår ved at en fil med navnet gruppenummer.ukenummer.dat blir opprettet. Typisk kan filnavnet være 7.4.dat, dersom registreringen gjelder gruppe 7 i uke 4. Innholdet i denne fila vil være G eller IG for hhv. godkjent og ikke godkjent. Systemet bygger i stor grad på tillitt, men en gruppe skal ikke kunne registrere noe på seg selv (dvs. gruppenummer og evaluert av må være ulike). Derfor krever websiden en kontroll av evaluert av mot passord. Logisk sett blir denne sjekken da som følger: Dersom gruppenummer er det samme som evalueringsgruppe => Feilmelding Dersom evaluert av ikke stemmer med passord => Feilmelding I alle andre tilfeller => Utfør skriving til fil

Kontrollen av passord foregår ved å kalle funksjonen passordok i funksjonsbiblioteket hjelpefunksjoner.inc. Denne funksjonen returnerer en boolsk verdi: function passordok($gruppenummer,$passord) Husk å ta stilling til hvordan du åpner fila for skriving, da en gruppe skal kunne endre sin oppfatning av godkjent/ikke godkjent dersom besvarelsen blir forbedret. Du kan gå ut i fra at skjemaet er definert med følgende kode, og dermed kun skrive koden i fila skjemabehandler.php: <form action="skjemabehandler.php" method="post"> Gruppenummer: <input type="text" name="gruppenummer" /><br /> Godkjent: <input type="radio" name="godkjent" value="ja" checked="true">ja</input> <input type="radio" name="godkjent" value="nei" >Nei</input><br /> Ukenummer: <input type="text" name="ukenummer" /><br /> Evaluert av: <input type="text" name="evalgruppe" /><br /> Passord: <input type="password" name="passord" /><br /> <input type="submit" name="registrer" value="registrer" /> </form> <?php require ''hjelpefunksjoner.inc''. If( isset($_post [''register''])) $gnr = $_POST[''gruppenummer'']; $godkj = $_POST[''godkjent'']; $ukenr = $_POST[''ukenummer'']; $ev = $_POST[''evalueringsgruppe'']; $pw = $_POST[''passord'']; if($gnr!=$ev passordok($ev, $pw)==false) if($gnr!=$ev) echo ''Dere kan ikke evaluere dere selv!''; if(passordok($ev, $pw)==false) echo ''Feil passord!''; else $f = gnr. ''. ''. $ukenr. ''. ''. ''dat''; $peker = fopen($f, ''w''); $tekst = '' ''; if($godkj == ''ja'')

$tekst = ''Ja''; else $tekst = ''Nei''; fwrite$peker, $tekst); fclose($peker);?> Oppgave 4.2 (20 %) Foreleseren har sagt at han skal lage opplistingen av statusen til ukesoppgavene selv, men trenger hjelp av deg til å lage en bestemt funksjon for funksjonsbiblioteket hjelpefunksjoner.inc. Denne funksjonen skal benyttes for å hente ut status for en bestemt gruppe på en bestemt ukesoppgave: function hentstatuskode($gruppenummer,$ukenummer) Skriv derfor en funksjon som returner følgende tallverdier: 1 dersom oppgaven er godkjent 2 dersom oppgaven ikke er godkjent 3 dersom det ikke finnes informasjon om oppgaven (dvs. fila gruppenummer.ukenummer.dat ikke finnes) Funksjonen ordner med andre ord alt av fillesing osv. Tips 1: Siden du vet at det kun er én linje i fila du skal lese, kan du droppe while-løkka og kun skrive noe lignende dette: $data = fgets($filreferanse); Tips 2: For å sjekke om en fil eksisterer kan du benytte koden: if(file_exists($filnavn)==true)... Tips 3: For enklest mulig kode, kan det være lurt å starte med sjekken på om fila ikke finnes (utfall 3), og deretter sjekke utfall 1 og 2 dersom fila fantes. Side 11 av 12 <?php function hentstatuskode($gruppenummer, $ukenummer) $fil = $gruppenummer. ''. ''. $ukenummer. ''. dat''; if(file_exists($fil)==false)

return 3; else $tekst = $sum(file_get_contents($fil)); if($tekst==(''g'') return 1; else if ($tekst == ''16'') return 2;?> Oppgave 4.3 (10 %) En kjedelig side av dette innleveringssystemet er å hver uke generere nye "rettelister" slik at hvem som evaluerte hvem blir rotert. Du skal derfor automatisere dette. Hver retteliste er bestemt ved å "forskyve" gruppene et visst antall plasser (en såkalt offset). Selve genereringen foregår gjennom en parameter som gir en nettadresse lik dette: http://www.it.hiof.no/webprog1/retteliste.php?offset=1 Websiden vil med denne parameterverdien og 6 grupper, der gruppe 4 er blitt borte i løpet av året, bli seende slik ut: Gruppe 1 vurderer gruppe 2 Gruppe 2 vurderer gruppe 3 Gruppe 3 vurderer gruppe 5 Gruppe 5 vurderer gruppe 6 Gruppe 6 vurderer gruppe 7 Gruppe 7 vurderer gruppe 1 Sentralt i systemet vil en fil kalt grupper.dat være. Denne fila inneholder alle aktive gruppenummer, og kan se slik ut: 1 2 3 5 6 7 Merk deg altså at gruppenumrene ikke nødvendigvis er en kontinuerlig liste med tall,

men snarere en registrering av "aktive" grupper. Du må derfor håndtere hver linje i fila som et "element" og ikke som et siffer. I teorien kunne vi gitt gruppene navn istedenfor nummer, og systemet skulle fungert like bra. Du kan med andre ord også gå ut i fra at fila inneholder elementene i samme rekkefølge som de skal listes opp (og forskyves). Ingen sortering er altså nødvendig. MERK: Du trenger kun ta høyde for en positiv offset i denne oppgaven. NB! Fortsetter neste side Du skal få noen tips til en mulig løsning på denne oppgaven: 1. Les inn alle linjene (gruppenumrene) i en array 2. Iterer gjennom denne arrayen og skriv ut elementet, samtidig som du skriver ut elementet som er "offset" elementer unna. Her kan det lønne seg å benytte en forløkke, slik at du har tilgang til index. 3. Håndter flippingen rundt listen (f.eks. gruppe 7 evaluerer gruppe 1) ved å teste om indeksen går utenfor gyldige indekser i arrayen, og gjør i så tilfelle et fratrekk i indeksen tilsvarende listens lengde. Eksempel med offset=1 og den samme grupper.dat-fila Index Element i array Index med offset Element i array 0 $array[0]: 1 0+1 = 1 $array[1]: 2 1 $array[1]: 2 1+1 = 2 $array[2]: 3 2 $array[2]: 3 2+1 = 3 $array[3]: 4 3 $array[3]: 5 3+1 = 4 $array[4]: 6 4 $array[4]: 6 4+1 = 5 $array[5]: 7 5 $array[5]: 7 5+1 = 6 NB! Trekk fra lengde(6) = 0 $array[0]: 1 Tips: Følgende kode leser inn alle linjer i en fil som en array (trenger ingen lukking osv.): $grupper = file("grupper.dat"); <?php $of = $_GET[''offset'']; $array = file(''grupper.dat''); for($i=0;$i<count($array);$i++) echo '' Gruppe ''. $array[$i]. '' '';

echo '' Vurderer gruppe ''; $ok=0; if(($i+$of) count($array); else $ok = $i + $of; cho $array[$ok]; echo ''<br />'';?> Slutt Del 4