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



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

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

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

Tilgjegelighet av XHTML-forms

Introduksjon til beslutningsstrukturer

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

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

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

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

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

Et forsøk på definisjon. Eksempel 1

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

Et forsøk på definisjon

Verdier, variabler og forms

Et forsøk på definisjon

Et forsøk på definisjon. Eksempel 1

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

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

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

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

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

Aritmetiske operasjoner. Litt om forrige times øvelsesoppgaver

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

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

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

Repetisjon Novice Videregående Python PDF

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

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

Oppsummering fra sist

1.2 Dynamiske, tjenerbaserte og interaktive nettsteder

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

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

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

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

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

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

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

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

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

Læringsmål og pensum. Oversikt

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

Kapittel 1. Innledning og motivasjon. 1.1 Innledning. 1.2 Dynamiske, tjenerbaserte og interaktive nettsteder Dynamiske nettsider

Kanter, kanter, mange mangekanter

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

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

Programmering i C++ Løsningsforslag Eksamen høsten 2005

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

Kontrollstrukturer (valg og løkker)

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

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

1. Kontrollstrukturer og løkker

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.

Sprettball Erfaren ComputerCraft PDF

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

Oblig 4Hybelhus litt mer tips enn i oppgaven

Programmering Høst 2017

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

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

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

Leksjon 3. Kontrollstrukturer

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

Oblig 5 Webutvikling. Av Thomas Gitlevaag

Eksempel: Body Mass Index (BMI)

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

INF1000. Marit Nybakken 10. februar 2004

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

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

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

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

INF1000 : Forelesning 3

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

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

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

Forelesning inf Java 3

Informasjon Eksamen i IN1000 høsten 2017

Leksjon 3. Kontrollstrukturer

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

Programmeringsspråket C Del 2

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 (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

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

Kap 2: Løkker og lister

2 Om statiske variable/konstanter og statiske metoder.

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

Introduksjon til objektorientert programmering

JS: Grunnleggende JavaScript Nybegynner

Løsningsforslag. Innlevering i BYFE/EMFE 1000 Oppgavesett 1 Innleveringsfrist: 14. september klokka 14:00 Antall oppgaver: 3.

HØGSKOLEN I SØR-TRØNDELAG

løsningsforslag-uke5.txt

Kodetime for Nordstrand barneskole

Programmeringsspråket C

Programmeringsspråket C Del 2

TDT4110 IT Grunnkurs Høst 2014

Hangman. Level. Introduksjon

Transkript:

while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt [Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hioa.no) 15/09-15 En liten repetisjon Løkker Arrayer (tabeller) Løkker og arrayer Avkryssingsbokser 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: 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. 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 <!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 ){ 5. $i = $i + 1;//oppdatering av $i - variabelen 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 15.09.2015 15:28 2 of 12 15.09.2015 15:28

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 ){ 5. $i = $i + 2;//oppdatering av $i - variabelen 7. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); 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). for-løkker gjentar instruksjonene et gitt antall ganger. for-løkkens oppbygging: Eksempel 3: en enkel for-løkke <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". 2. print("<p>her kommer en for-løkke</p>"); 3. for ( $i = 0 ; $i < 5 ; $i = $i + 1 ){ 5. } 6. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); 7.?> Linje 3 kontrollerer løkkens gang i = 0 oppstart - tellervariabelen $i (testvariabelen) tilordnes en startverdi $i < 5 forsettelsesbetingelsen - et logisk uttrykk. Løkken slutter når denne er true. $i = $i + 1 oppdatering - for hver omgang, oppdateres testvariabelen. Her vokser verdien av $i med 1. Det logiske uttrykket testes hver omgang, for å beslutte om løkken skal utføres en omgang til. resulterer i at følgende skrives til nettleseren: Her kommer en for-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 3 of 12 15.09.2015 15:28 4 of 12 15.09.2015 15:28

En for-løkke er strukturert. All styringen ligger mellom klammene (Oppstart, fortsettelsesbetingelse, oppdatering) er konsentrert i for-parentesen. bare nyttekoden mellom { og }. "Parentesen" i en while-løkke oppgir bare en fortsettelsesbetingelse. Oppstart ordnes før løkkekoden starter (se linje 2 nedenfor) oppdatering ordnes som en del av løkkens "nyttekode" (mellom { og } ). 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. Begge løkketyper kan, i prinsippet, brukes i alle situasjoner som krever løkker Vi bruker ofte for-løkker når vi vet hvor mange ganger løkken skal kjøres. Vi bruker while-løkker når antallet ganger løkken kjøres avhenger av ting som skjer underveis i løkkekoden. En kommentar: Dere kommer stort sett til å bruke while-løkker i deres arbeid. for-løkken er viktig å kjenne til for de av dere som skal programmere senere. Eksempel 4:(Gjentar eksempel 2 med begge former) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". <h1> Enda en enkel while-løkke </h1> 2. $i=0;//oppstart 3. while( $i < 10 ){ 5. $i = $i + 2;//oppdatering 7. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN". <h1> Enda en enkel for-løkke </h1> 2. //oppstart og oppdatering i parentesen 3. for ( $i = 0 ; $i < 10 ; $i = $i + 2 ){ 5. } 6. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); 7.?> 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 5 : 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 " ); for-løkken er lettere å programmere med, men vanskeligere å forstå. Dette fordi mange av detaljene, som programmereren selv må holde styr på i og rundt while-løkker, "abstraheres vekk" i for-løkken. " Arne " blir $studenter[0], " Gerd " $studenter[1] og " Mona " $studenter[2] 5 of 12 15.09.2015 15:28 6 of 12 15.09.2015 15:28

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 6 : 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]). Arrayer kan behandles systematisk i løkker. Eksempel 7: 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 : 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 10: 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. Her kommer student-utskriften: 0: Arne 1: Gerd 2: Mona ingen flere studenter i arrayen. 7 of 12 15.09.2015 15:28 8 of 12 15.09.2015 15:28

*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 11: 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 ){ 5. $i++ ;//oppdatering av $i 7. print ("<p>nå er løkken slutt, fordi dollar-i er lik $i</p>"); Eksempel 12: 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.?> 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. lilla bakgrunn på linje 5 (over) og 8. OBS!! Det heter $i++ (ikke $i = $i++) 9 of 12 15.09.2015 15:28 10 of 12 15.09.2015 15:28

Eksempel 13 : 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 Dette utelates fra forelesningsstoffet. Interesserte kan lese i kompendiet, avsn. 4.5.1. Følgende skal øves inn: while-løkker for-løkker (*) arrayer basert på avkryssingsbokserbokser Horgen, S. A.(2014). Webprogrammering i PHP. (4. utg.). Trondheim:Tisip Gyldendal akademisk. Sist oppdatert 08/09-15 av Michael Preminger, michael.preminger@jbi.hio.no 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 24 6 8 1012141618 36 9 121518212427 4 8 12 16 20 24 28 32 36 51015202530354045 61218243036424854 71421283542495663 81624324048566472 91827364554637281 11 of 12 15.09.2015 15:28 12 of 12 15.09.2015 15:28