while-løkker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Like dokumenter
En enkel while-løkke. 1 of :28. 2 of :28. while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt

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

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

Tilgjegelighet av XHTML-forms

$i < 5 forsettelsesbetingelsen - false => Løkken slutter.

}?> <!DOCTYPE... <html xmlns=" <head>... </head> <body> <p>nå skal vi printe hallo:</p> <?php //funksjonskall

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

Utvikling av dynamiske nettsteder med PHP og databaser, våren 2009

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

Webprogrammering høsten 2017

Et forsøk på definisjon

$antall_maaneder =12; Variablene $pris og $antall_maaneder i eksemplet ovenfor har

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Introduksjon til beslutningsstrukturer

Et forsøk på definisjon

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/ Vi holder orden på verdier med hjelp av variabler

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

Et forsøk på definisjon. Eksempel 1

Verdier, variabler og forms

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

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

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

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

Et forsøk på definisjon. Eksempel 1

</html> </head> <form action= rtkst.php > <p> Fornavn? <input type= text name= fornavn <input type= submit />

Oppsummering fra sist

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

SELECT DISTINCT Fornavn, Etternavn, Programtittel FROM Program P, Medvirkende M, Deltagelse D. SELECT Tilgjengelighet FROM Program

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

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Læringsmål og pensum. Oversikt

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Leksjon 3. Kontrollstrukturer

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

Læringsmål og pensum. if (be): else (not_to_be):

Programmering Høst 2017

Med løkke: Læringsmål og pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker/Sløyfer Utgave 3: Kap. 4 Utgave 2: Kap. 5. Mål.

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Leksjon 3. Kontrollstrukturer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Eksempel: Body Mass Index (BMI)

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 : Forelesning 3

Body Mass Index (BMI) INF1000 : Forelesning 3. Ferdig program (forts.) Ferdig program

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Visual Basic. Repetisjon fra onsdag

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

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.

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

TDT4110 Informasjonsteknologi grunnkurs: Tema: Løkker. - 3rd edition: Kapittel 4. Professor Alf Inge Wang

En liten rekap. Spørrespråk. I dag SELECT

1. Kontrollstrukturer og løkker

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

TDT4105 Informasjonsteknologi grunnkurs Øvingsforelesning 2. Iver Dihle Skjervum Vit.ass. ITGK

Læringsmål og pensum. Intro løkker. Mål Lære om begrepet løkker Lære om bruk av while-løkke Lære om bruk av for-løkke Pensum. Kapittel 4.

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

Klasser. Webprogrammering høsten Objekter. Eksempelklasser og -objekter. 2 of :56. 1 of :56

Repetisjon Novice Videregående Python PDF

INF1000 Uke 4. Innlesning fra terminal. Uttrykk og presedens. Oversikt

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

INF1000 Uke 3. Innlesning fra terminal. Uttrykk og presedens. Oversikt. Litt repetisjon Blokker og forgreininger

C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18

INF1000 : Forelesning 4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

TDT4110 IT Grunnkurs Høst 2016

Forelesning inf Java 5

Forelesning inf Java 5

TDT4110 IT Grunnkurs Høst 2015

Oblig 4Hybelhus litt mer tips enn i oppgaven

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Algoritmer og datastrukturer E Løkker i Java

Høgskoleni østfold EKSAMEN

Øvingsforelesning 1 Python (TDT4110)

Notat 2, ST januar 2005

INF uke 2. Inputt, beslutninger, kontrollflyt og prosedyrer

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

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

Informasjon Eksamen i IN1000 høsten 2017

Løse reelle problemer

Kanter, kanter, mange mangekanter

Notat 2, ST Sammensatte uttrykk. 27. januar 2006

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Hangman. Level. Introduksjon

Oblig 4 Undervisningshefte i grunnleggende JavaScript programmering

HØGSKOLEN I SØR-TRØNDELAG

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

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

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Transkript:

while-løkker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt [Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hioa.no) 01/09-17 En liten repetisjon Løkker Arrayer (tabeller) Løkker og arrayer Avkryssingsbokser Repetisjon fra forrige gang: Betinget utføring Programmet beslutter hvilke kodebiter skal og skal ikke utføres, ved å teste på betingelser. Slike betingelser er mer eller mindre kompliserte logiske uttrykk som koker ned til true eller false. Løkker Med løkker kan vi gjenta en sekvens av instruksjoner flere ganger. Ofte trenger vi gjenta handlinger for alle studenter i en klasse alle tekstlinjer i en fil alle filer i en mappe Løkker gir oss mulighet til å skrive programkode for en handling (vi skriver den bare én gang) få handlingen gjentatt det nødvendige antallet ganger Ser på to typer løkker. while-løkke for-løkke Ordet "while" er semantisk litt misvisende: på norsk kan man si : "Så lenge $i er mindre enn 5, gjenta disse instruksjonene" Eksempel 1: en enkel while-løkke En enkel while-løkke skrives på følgende vis: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" <h1> En enkel while-løkke </h1> 2. $i=0;//oppstart (også: initiering eller initialisering) 3. while( $i < 5 ){ 4. print ("<p>dollar-i er nå lik $i</p>"); 5. $i = $i + 1;//oppdatering av $i - variabelen 6. } 7. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); linje 4 og 5 utføres gjentatte ganger, så lenge fortsettelsesbetingelsen (det logiske uttrykket) stemmer med virkeligheten. Linje 5 oppdaterer variabelen $i for hver omgang. Uten denne linjen blir betingelsen aldri usann (false), og løkken går evig. En enkel while-løkke dollar-i er nå lik 0 dollar-i er nå lik 1 dollar-i er nå lik 2 dollar-i er nå lik 3 dollar-i er nå lik 4 Nå er løkken slutt fordi dollar-i er lik 5 1 of 12 01.09.2017, 12:46 2 of 12 01.09.2017, 12:46

Eksempel 2: Enda en enkel while-løkke Nedenstående eksempel skiller seg lite fra det forrige. (linje 3 og 5). <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". <h1> Enda en enkel while-løkke </h1> 2. $i=0;//oppstart (også: initiering eller initialisering) 3. while( $i < 10 ){ 4. print ("<p>dollar-i er nå lik $i</p>"); 5. $i = $i + 2;//oppdatering av $i - variabelen 6. } 7. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); Arrayer (norsk: tabeller eller matriser) En array er flere variabler som deler et variabelnavn. Flere variabler som er gruppert sammen under sammen navn. Enhver slik variabel kaller vi en array-innførsel ("array item" eller "array entry" på engelsk). Hvorfor trenger vi arrayer? Behandle grupper av studenter, tall, matvarer osv. på en systematisk måte. Nummer-indekserte arrayer (= sekvensielle arrayer): enhver innførsel har et nummer. Enda en enkel while-løkke dollar-i er nå lik 0 dollar-i er nå lik 2 dollar-i er nå lik 4 dollar-i er nå lik 6 dollar-i er nå lik 8 Nå er løkken slutt fordi dollar-i er lik 10 Bruk av logiske uttrykk i if-tester og while-løkker Legg merke til at if-tester og while-løkker bruker nøyaktig samme type logiske uttrykk if-tester, for å finne ut om en gruppe med instruksjoner skal utføres while-løkke for å finne ut om noen linjer skal utføres én gang til (og én gang til og én gang til). arrayinnførslene skrives på følgende måte: $studenter[0], $studenter[1], $studenter[2] osv. Enhver array-innførsel kan få tilordnet en verdi, uavhengig av de andre innførslene: Eksempel 3 : Fyll noen verdier i arrayen $studenter $studenter[0]="arne"; $studenter[1]="gerd"; $studenter[2]="mona"; En kort notasjon for å befolke en array med verdier Følgende kode befolker en array med noen f å verdier, uten å oppgi indeksene. Verdiene får automatisk indekser fra 0 og oppover. Eksemplet lager samme array som forrige eksempel. $studenter = array ( " Arne ", " Gerd ", " Mona " ); " Arne " blir $studenter[0], " Gerd " $studenter[1] og " Mona " $studenter[2] 3 of 12 01.09.2017, 12:46 4 of 12 01.09.2017, 12:46

PHP-kommandoen count ( $array_navn ) Kommandoen count(argument) sørger for at PHP beregner antallet innførsler i arrayen hvis navn oppgis som argument. PHP- legger så resultatet i returvariabelen. I eksempelet nedefor heter denne $hvormangestudenter. Eksempel 4 : Finn ut størrelsen på arrayen $studenter (argumentet her er $studenter) $hvormangestudenter=count($studenter); print("$hvormangestudenter studenter er registrert i arrayen"); Resultat: 3 studenter er registrert i arrayen Legg merke til at når arrayen har 3 innførsler, er det høyeste innførselnummer 2, og ikke 3. ([0], [1] og [2]). Nyttig: Legge array-inførsler i en lang, mellomrom-separert streng. Funksjonen join(" ", $array) kan brukes til å slå sammen array-innførsler til en mellomrom-separert streng Det neste eksemplet bruker arrayen som er også brukt i de forrige eksemplene. Eksempel 5: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". 2. $strengarray[0] = "Michael"; 3. $strengarray[1] = "Jens"; 4. $strengarray[2] = "Arne"; 5. $strengarray[3] = "Rita"; 6. $langstreng = join(" ", $strengarray); 7. print("langstreng = $langstreng") ; Arrayer og løkker Arrayer kan behandles systematisk i løkker. Eksempel 6: Legger inn, og skriv ut tre innførsler i arrayen $studenter. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". 2. $studenter=array("arne", "Gerd", "Mona"); 3. print("<p>her kommer student-utskriften:</p>\n"); 4. $i = 0; 5. $antall = count($studenter); // "count" teller antall inf ørsler i arrayen 6. while ($i < $antall){ 7. print("<p>$i: $studenter[$i]</p>\n"); 8. $i = $i + 1;//øk verdien til $i med èn (inkrementering) 9. } 10. print("<p>ingen flere studenter i arrayen.</p>\n"); 11.?> I nettleservinduet : Her kommer student-utskriften: 0: Arne 1: Gerd 2: Mona ingen flere studenter i arrayen. Resultatet: langstreng=michael Jens Arne Rita 5 of 12 01.09.2017, 12:46 6 of 12 01.09.2017, 12:46

Form-elementer som bruker arrayer Kortform for inkrementering* Avkryssingsbokser- ikke utelukkende verdier som kan henge sammen Avkryssingsboks ligner på radioknapper, men innførslene her er ikke gjensidig utelukkende. Eksemplet nedenfor har 3 avkryssingsbokser som angir matretter det kan velges blant. Eksempel 7: Arrayen $_GET['mat'] i php-programmet respons_cb.php får like mange innførsler som det antallet avkryssingsbokser vi krysser av på. Hvis vi krysser av 2 av matrettene, får arrayen $_GET['mat'] i php-programmet 2 innførsler: $_GET['mat'][0] og $_GET['mat'][1]. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". <form action="respons_cb.php"> Hva spiser du helst? <p>hva spiser du helst? </p> Fisk <p><input type="checkbox" name="mat[]" value="fisk" /> Fisk</p> Lam <p><input type="checkbox" name="mat[]" value="lam" /> Lam</p> Ris <p><input type="checkbox" name="mat[]" value="ris" /> Ris</p> <input type="submit" /> </form> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". 1. <h1> Hva studenten spiser</h1> 2. <?php 3. $i = 0; 4. $antall = count($_get['mat']); 5. print("<p>arrayen dollar-mat har $antall innførsler:</p>"); 6. while ($i < $antall){ 7. print ("<p>$i: {$_GET['mat'][$i]}</p>\n"); 8. $i = $i + 1; 9. } 10.?> Linje 2 og 10 omslutter PHP-blokken Linje 3 tilordner variabelen $i en starverdi 0 (arrayer har 0 som første innførsel). På linje 4 finner programmet antallet avkryssingsbokser brukeren har krysset av Linje 7 og 8 gjentas s å lenge fortsettelsesbetingelsen i linje 6 holder. *Inkrementering (på dataspråket) = det å øke et tall med 1. ++ operatoren brukes istedenfor den litt lengre formen $i = $i + 1 $i = $i + 1 (inkrementering) er en meget vanlig handling i php (og andre språk). Den kan også skrives slik: $i++; ++ brukes både i while og for-løkker Eksempel 8: gjentagelse av eksempel 1, men med den nye operatoren <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". 2. $i=0;//oppstart 3. while( $i < 5 ){ 4. print ("<p>dollar-i er nå lik $i</p>"); 5. $i++ ;//oppdatering av $i 6. } 7. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); Eksempel 9: gjentagelse av et tidligere eksempel, men med den nye operatoren <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". 2. $studenter=array("arne", "Gerd", "Mona"); 3. print("<p>her kommer student-utskriften:</p>\n"); 4. $i = 0; 5. $antall = count($studenter);// kommandoen count teller antall inførsler i arrayen 6. while ($i < $antall){ 7. print("<p>$i: $studenter[$i]</p>\n"); 8. $i++ //øk verdien til $i med èn (inkrementering) 9. } 10. print("<p>ingen flere studenter i arrayen.</p>\n"); 11.?> lilla bakgrunn på linje 5 (over) og 8. OBS!! Det heter $i++ (ikke $i = $i++) 7 of 12 01.09.2017, 12:46 8 of 12 01.09.2017, 12:46

Nøsting av løkker Vi kan nøste løkker inn i hverandre for å behandle nøstede strukturer. Anta en høgskole. Går gjennom alle klasser. Innenfor hver klasse skriver ut navnene på alle studenter. studentløkken (8-12) nøsted inn i en klasseløkken (5-14) <?php 1. $antall_klasser=30; 2. //anta at alle klasser er like tallrike 3. $antall_elever_i_klassen=28; 4. $i=0; 5. while ( $i < $antall_klasser ){ //ytre løkke 6. $j=0; 7. skriv ut navnet til den $i te klassen 8. while ( $j < $antal_elever_i_klassen ){ //indre løkke 9. ( innrykk ) skriv ut fornavnet og etternavnet 10. til den $j te eleven 11. $j++; 12. } 13. $i++; 14. }?> Ser slikt ut i utskrift: Klasse 1A Joakim Hansen Harald Jensen Anita Strøm Klasse 1B Bernt Myhre Et enklere eksempel på nøsting (om enn ikke så nyttig) er multiplikasjonstabellen. 9 of 12 01.09.2017, 12:46 10 of 12 01.09.2017, 12:46

Eksempel 10 : multiplikasjonstabellen i PHP (fritt etter Horgen (2005)) Klikk her for en version som kan brukes direkte i øvelsesoppgave 4 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". <h1>multiplikasjonstabellen</h1> 2. print( "<table>"); 3. $ytre_teller = 1;//oppstart på første rad 4. while ($ytre_teller <= 9) { 5. print("<tr>"); //starter en rad 6. $indre_teller = 1; //oppstart: første kolonne i raden 7. while ($indre_teller <= 9) { //indre, nøstet løkke (kolonnene) 8. $tall = $indre_teller * $ytre_teller; 9. print("<td>$tall</td>"); 10. $indre_teller++; 11. }//lukker den indre, nøstede løkken 12. //er nå ferdig med å lage neste rad 13. print ( "</tr>");//avslutter en rad 14. $ytre_teller++; 15. }//lukker ytre løkke 16. /*ferdig med alle radene, kan avsutte tabellen*/ 17. print ( "</table>"); 1 Programmet går gjennom alle radene i multiplikasjonstabellen. (ytre løkke) I hver rad går programmet gjennom alle kolonnene (indre løkke) avslutter hver rad med </tr> (linje 13) 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 36 9 121518212427 4 8 12 16 20 24 28 32 36 51015202530354045 61218243036424854 71421283542495663 81624324048566472 91827364554637281 Avbryte en løkke med break Dette utelates fra forelesningsstoffet. Interesserte kan lese i kompendiet, avsn. 4.5.1. Ukens lab-oppgaver Følgende skal øves inn: If setninger while-løkker for-løkker (*) arrayer basert på avkryssingsbokserbokser Referanser Horgen, S. A.(2014). Webprogrammering i PHP. (4. utg.). Trondheim:Tisip Gyldendal akademisk. Sist oppdatert 01/09-17 av Michael Preminger, michael.preminger@jbi.hio.no 11 of 12 01.09.2017, 12:46 12 of 12 01.09.2017, 12:46