Øvingsforelesning TDT4105 Gjennomgang øving 9, intro øving 10. Eksamensoppgaver. Benjamin A. Bjørnseth 10. november 2015
2 Oversikt Praktisk Gjennomgang øving 9 Introduksjon sudoku Oppgave 4 Kont-eksamen 2014
3 Resterende øvingsforelesninger Tre forelesninger igjen. Uke Tema > 46 Øving 9, sudoku, eksamensoppgaver 47 Basert på avstemning 48 Basert på avstemning Stem over tema for de to siste forelesningene (link også på piazza): Tirsdag: http://goo.gl/forms/xtk9diy6dy Onsdag: http://goo.gl/forms/j5mb2ebe0u Torsdag: http://goo.gl/forms/hx3y9exoyk
4 Innlevering av øving 10 Teller dobbelt hvis godkjent. Må godkjennes hos studass innen fristen. Kan ikke sende epost og få godkjenning i etterkant.
5 Oversikt Praktisk Gjennomgang øving 9 Introduksjon sudoku Oppgave 4 Kont-eksamen 2014
6 Persondatabase: Tekst- og filbehandling serialize_person(person)
6 Persondatabase: Tekst- og filbehandling serialize_person(person) person name date_of_birth phone day month year serialize_person() <name>#<date>#<phone>
7 Persondatabase: Tekst- og filbehandling serialize_person(person) person name date_of_birth phone day month year serialize_person() <name>#<date>#<phone> = %s#%s#%d
8 Persondatabase: Tekst- og filbehandling serialize_person(person) person name date_of_birth phone day month year <name>#<date>#<phone> = %s#%s#%d
9 Persondatabase: Tekst- og filbehandling serialize_person(person) person name date_of_birth phone day month year <name>#<date>#<phone> = %s#%s#%d
10 Persondatabase: Tekst- og filbehandling serialize_person(person) person name date_of_birth phone day month year as string <name>#<date>#<phone> = %s#%s#%d
11 Persondatabase: Tekst- og filbehandling serialize_person(person) person name date_of_birth phone day month year <name>#<date>#<phone> = %s#%s#%d
12 Persondatabase: Tekst- og filbehandling serialize_person(person) person name date_of_birth phone day month year as string = serialize <name>#<date>#<phone> = %s#%s#%d
13 Persondatabase: Tekst- og filbehandling deserialize_person(person)
13 Persondatabase: Tekst- og filbehandling deserialize_person(person) <name>#<date>#<phone> deserialize_person() person name date_of_birth phone day month year
14 Persondatabase: Tekst- og filbehandling deserialize_person(person) <name>#<date>#<phone> person name date_of_birth phone day month year
15 Persondatabase: Tekst- og filbehandling deserialize_person(person) <name>#<date>#<phone> person name date_of_birth phone day month year
16 Persondatabase: Tekst- og filbehandling deserialize_person(person) <name>#<date>#<phone> person name date_of_birth phone day month year
17 Persondatabase: Tekst- og filbehandling deserialize_person(person)? <name>#<date>#<phone> person name date_of_birth phone day month year
18 Persondatabase: Tekst- og filbehandling deserialize_person(person)? <name>#<date>#<phone> - strsplit() - strtok() - sscanf() person name date_of_birth phone day month year
19 Persondatabase: Tekst- og filbehandling store(filename, persons)
19 Persondatabase: Tekst- og filbehandling store(filename, persons) Person 1 Person 2... Person n <filnavn> <filnavn> <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2> store()......... <navnn>#<daton>#<tlfn>
20 Persondatabase: Tekst- og filbehandling store(filename, persons) Person 1 Person 2... Person n <filnavn> <fil-id> åpne fil <filnavn> <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <navnn>#<daton>#<tlfn>
21 Persondatabase: Tekst- og filbehandling store(filename, persons) Person 1 Person 2... Person n <filnavn> <fil-id> åpne fil skriv linje <filnavn> <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <navnn>#<daton>#<tlfn>
22 Persondatabase: Tekst- og filbehandling store(filename, persons) Person 1 Person 2... Person n <filnavn> <fil-id> åpne fil serialize_person() skriv linje <filnavn> <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <navnn>#<daton>#<tlfn>
23 Persondatabase: Tekst- og filbehandling store(filename, persons) Person 1 Person 2... Person n <filnavn> <fil-id> åpne fil serialize_person() skriv linje <filnavn> <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <navnn>#<daton>#<tlfn>
24 Persondatabase: Tekst- og filbehandling store(filename, persons) Person 1 Person 2... Person n <filnavn> <fil-id> åpne fil serialize_person() skriv linje <filnavn> <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <navnn>#<daton>#<tlfn>
25 Persondatabase: Tekst- og filbehandling store(filename, persons) Person 1 Person 2... Person n <filnavn> <fil-id> åpne fil serialize_person() <filnavn> skriv linje <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2> Husk å lukke filen!......... <navnn>#<daton>#<tlfn>
26 Persondatabase: Tekst- og filbehandling loadfile(filename)
26 Persondatabase: Tekst- og filbehandling loadfile(filename) <filnavn> <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2> <filnavn>......... loadfile() <navnn>#<daton>#<tlfn> Person 1 Person 2... Person n
27 Persondatabase: Tekst- og filbehandling loadfile(filename) <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <filnavn> <fil-id> <filnavn> åpne fil <navnn>#<daton>#<tlfn>
28 Persondatabase: Tekst- og filbehandling loadfile(filename) <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <filnavn> les linje <fil-id> <filnavn> åpne fil <navnn>#<daton>#<tlfn> Person 1
29 Persondatabase: Tekst- og filbehandling loadfile(filename) <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <filnavn> les linje <fil-id> <filnavn> åpne fil <navnn>#<daton>#<tlfn> deserialize_person() Person 1
30 Persondatabase: Tekst- og filbehandling loadfile(filename) <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <filnavn> les linje <fil-id> <filnavn> åpne fil <navnn>#<daton>#<tlfn> deserialize_person() Person 1 Person 2
31 Persondatabase: Tekst- og filbehandling loadfile(filename) <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <filnavn> les linje <fil-id> <filnavn> åpne fil <navnn>#<daton>#<tlfn> deserialize_person() Person 1 Person 2... Person n
32 Persondatabase: Tekst- og filbehandling loadfile(filename) <navn1>#<dato1>#<tlf1> <navn2>#<dato2>#<tlf2>......... <filnavn> <navnn>#<daton>#<tlfn> <filnavn> <fil-id> åpne fil les linje deserialize_person() Husk å lukke filen! Person 1 Person 2... Person n
33 Personprogram Programmet skal vise en meny til brukeren og la brukeren velge hva den vil gjøre. Altså et program som lar brukeren behandle en personsdatabase. Demonstrerer hvordan man lager et større program ved å sette sammen mange mindre funksjoner. Som vi må i Sudoku! Jeg antar at det vanskeligste med oppgaven er omfanget. Vi starter derfor med å se på hvordan vi ser overordnet på problemløsning ved komposisjon av funksjoner.
34 Personprogram: Angående funksjoner function res = tverrsum(n) %... end Hva var tanken bak funksjoner, igjen?
34 Personprogram: Angående funksjoner function res = tverrsum(n) %... end Hva var tanken bak funksjoner, igjen? De lar oss gjenbruke kode.
35 Personprogram: Angående funksjoner function res = tverrsum(n) %... end Hva var tanken bak funksjoner, igjen? De lar oss gjenbruke kode. For forskjellige input-verdier % Kommandovindu %... >> tverrsum(143) ans = 8 >> tverrsum(884) ans = 20 >> tverrsum(59) ans = 14 Kan variere
36 Personprogram: Angående funksjoner function res = tverrsum(n) %... end Hva var tanken bak funksjoner, igjen? De lar oss gjenbruke kode. For forskjellige input-verdier På tvers av prosjekt/oppgaver. Brukes flere steder, men må lages bare én gang function res = delelig(n, k) %... if k == 3 res = delelig(tverrsum(n), k) %... elseif k == 9 res = delelig(tverrsum(n), k) %... end %... end
37 Personprogram: Angående funksjoner Hva var tanken bak funksjoner, igjen? De lar oss gjenbruke kode. For forskjellige input-verdier På tvers av prosjekt/oppgaver. De lar oss dele opp koden. function res = tverrsum(n) %... end
38 Personprogram: Angående funksjoner function res = tverrsum(n) sifre = del_i_sifre(n) res = summer(sifre); end Hva var tanken bak funksjoner, igjen? De lar oss gjenbruke kode. For forskjellige input-verdier På tvers av prosjekt/oppgaver. De lar oss dele opp koden. function res = del_i_sifre(n) %... end function res = summer(sifre) %... end
38 Personprogram: Angående funksjoner function res = tverrsum(n) sifre = del_i_sifre(n) res = summer(sifre); end Hva var tanken bak funksjoner, igjen? De lar oss gjenbruke kode. For forskjellige input-verdier På tvers av prosjekt/oppgaver. De lar oss dele opp koden. Å dele opp koden er å dele opp problemet. Jo mindre, jo enklere Jo mer eksplisitt, jo enklere function res = del_i_sifre(n) %... end function res = summer(sifre) %... end
39 Personprogram: Angående funksjoner Konklusjon: Når vi løser problem, er det naturlig å bryte det ned i mindre biter For å få mindre å tenke på av gangen. Som vi så, brukes funksjoner til å dele opp problem. Ergo: det er naturlig å løse problem ved å kombinere funksjoner som løser delproblem.
40 Personprogram: Programløsning Vi ser for oss hvordan vi kan tenke oss at programmet skal fungere. Basert på våre ønsker, finner vi ut hvilke delproblem som må løses. Lag en funksjon for disse Fyll den med ingenting først - en stubfunksjon. Med stubfunksjoner kan vi lage løsningen på det overordnede problemet før delproblemløsningene er på plass. Hovedfordel: del opp problemet, og behold oversikt over det store bildet.
41 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** person_program
42 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** person_program print_header()
43 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet print_header() person_program
44 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet print_header() person_program print_header()
45 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 print_header() person_program print_header()
46 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 person_program valg = input( > ) print_header() print_header()
47 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. print_header() person_program print_header()
48 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. person_program print_header() print_header() process(p, choice)
49 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. person_program print_header() print_header() process(p, choice) process_list_persons(p)
50 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. Velg handling fra menyen: 1. Hent database fra fil 2....... > 1 person_program print_header() print_header() process(p, choice) process_list_persons(p)
51 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. Velg handling fra menyen: 1. Hent database fra fil 2....... > 1 Skriv inn databasefil: personer.txt person_program print_header() print_header() process(p, choice) process_load() filnavn = input( >, s ) process_list_persons(p)
52 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. Velg handling fra menyen: 1. Hent database fra fil 2....... > 1 Skriv inn databasefil: personer.txt person_program print_header() print_header() process(p, choice) process_load() Returner ny P loadfile() process_list_persons(p)
53 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. Velg handling fra menyen: 1. Hent database fra fil 2....... > 1 Skriv inn databasefil: personer.txt 2 personer lastet inn. person_program print_header() print_header() process(p, choice) process_load() fprintf( %d personer lastet inn., length(p)) process_list_persons(p)
54 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. Velg handling fra menyen: 1. Hent database fra fil 2....... > 1 Skriv inn databasefil: personer.txt 2 personer lastet inn. print_header() process_load() person_program process(p, choice) Returner ny P Returner ny P print_header() process_list_persons(p)
55 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. Velg handling fra menyen: 1. Hent database fra fil 2....... > 1 Skriv inn databasefil: personer.txt 2 personer lastet inn. Velg handling fra menyen: > 4 Hva heter du? Urgolf Hvilken dato er du født? Ny person lagt til. Returner ny P print_header() process_load() person_program process(p, choice) Returner ny P print_header() process_new_person() Returner ny person prompt_person() process_list_persons(p)
56 Personprogram: Tenkt programflyt % I kommandovindu %... >> person_program ** Velkommen til personprogram! *** Velg handling fra menyen: 1. Hent database fra fil 2. Lagre database til fil 3. List alle personer 4. Legg inn ny person 5. Endre en person 0. Avslutt programmet > 3 Ingen personer i databasen. Velg handling fra menyen: 1. Hent database fra fil 2....... > 1 Skriv inn databasefil: personer.txt 2 personer lastet inn. Velg handling fra menyen: > 4 Hva heter du? Urgolf Hvilken dato er du født? Ny person lagt til. Velg handling fra menyen: > 3 Person 1: Lynx lynx, 20.05.1990, 33 Person 2: Lynx lynx lynx, Person 3: Urgolf, person_program print_header() print_header() process(p, choice) process_load() process_new_person() prompt_person() process_list_persons(p)
57 Personprogram: Implementasjon 1. Lag stub-funksjonene vi har identifisert. 2. Implementer person_program ved å bruke dem. 2.1 Ha en personlistevariabel P 2.2 Les inn et brukervalg. 2.3 Gjør operasjon med listen P ved å kalle funksjonen process. 2.4 Repeter til brukeren går lei. 3. Implementer de enkle print-funksjonene 4. Implementer generell logikk for process-funksjonen 5. Programmet kan nå utvides (fullføres) ved å 5.1 Lage en ny funksjon for hver ekstra funksjonalitet. 5.2 Legge inn støtte i process for å kalle denne funksjonen.
58 Oversikt Praktisk Gjennomgang øving 9 Introduksjon sudoku Oppgave 4 Kont-eksamen 2014
59 Krav til funksjonalitet Skriv tall i rute.
59 Krav til funksjonalitet Skriv tall i rute. Med gyldighetssjekk etter sudoku-regler.
59 Krav til funksjonalitet Skriv tall i rute. Med gyldighetssjekk etter sudoku-regler. Slette tall (altså angre)
59 Krav til funksjonalitet Skriv tall i rute. Med gyldighetssjekk etter sudoku-regler. Slette tall (altså angre) Pen utskrift
59 Krav til funksjonalitet Skriv tall i rute. Med gyldighetssjekk etter sudoku-regler. Slette tall (altså angre) Pen utskrift Laste inn brett fra tekstfil.
59 Krav til funksjonalitet Skriv tall i rute. Med gyldighetssjekk etter sudoku-regler. Slette tall (altså angre) Pen utskrift Laste inn brett fra tekstfil. Lagre brett til fil.
59 Krav til funksjonalitet Skriv tall i rute. Med gyldighetssjekk etter sudoku-regler. Slette tall (altså angre) Pen utskrift Laste inn brett fra tekstfil. Lagre brett til fil. Oppdage seier.
59 Krav til funksjonalitet Skriv tall i rute. Med gyldighetssjekk etter sudoku-regler. Slette tall (altså angre) Pen utskrift Laste inn brett fra tekstfil. Lagre brett til fil. Oppdage seier. Brukervennlig grensesnitt.
59 Krav til funksjonalitet Skriv tall i rute. Med gyldighetssjekk etter sudoku-regler. Slette tall (altså angre) Pen utskrift Laste inn brett fra tekstfil. Lagre brett til fil. Oppdage seier. Brukervennlig grensesnitt. Menybasert valg.
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall.
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg:
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku.
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett.
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett. 1.3 Lagre brett.
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett. 1.3 Lagre brett. 1.4 Avslutt.
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett. 1.3 Lagre brett. 1.4 Avslutt. Basert på valg, kaller enten:
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett. 1.3 Lagre brett. 1.4 Avslutt. Basert på valg, kaller enten: brett = spill_sudoku(brett)
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett. 1.3 Lagre brett. 1.4 Avslutt. Basert på valg, kaller enten: brett = spill_sudoku(brett) brett = last_brett()
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett. 1.3 Lagre brett. 1.4 Avslutt. Basert på valg, kaller enten: brett = spill_sudoku(brett) brett = last_brett() lagre_brett(brett)
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett. 1.3 Lagre brett. 1.4 Avslutt. Basert på valg, kaller enten: brett = spill_sudoku(brett) brett = last_brett() lagre_brett(brett) Skriv ut brettet ved å kalle skriv_ut_brett(brett)
60 Forslag til rekkefølge 1. Overordnet arkitektur: lag funksjonen sudoku(), som Først lager en variabel brett, som holder spillets tilstand som en 9x9-matrise med tall. Lar brukeren velge mellom tre meny-valg: 1.1 Spill sudoku. 1.2 Last brett. 1.3 Lagre brett. 1.4 Avslutt. Basert på valg, kaller enten: brett = spill_sudoku(brett) brett = last_brett() lagre_brett(brett) Skriv ut brettet ved å kalle skriv_ut_brett(brett) 2. Lag tomme funksjoner for spill_sudoku, last_brett og lagre_brett som alle kaller error( Ikke laget enda )
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett)
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall.
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden.
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke:
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer:
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall>
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne>
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando:
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen.
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall).
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall). Hvis slett, kall lokal funksjon brett = slett(brett, rad, kolonne).
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall). Hvis slett, kall lokal funksjon brett = slett(brett, rad, kolonne). Skriv ut brettet.
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall). Hvis slett, kall lokal funksjon brett = slett(brett, rad, kolonne). Skriv ut brettet. 3. Lag brett = sett(brett, rad, kolonne, tall)
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall). Hvis slett, kall lokal funksjon brett = slett(brett, rad, kolonne). Skriv ut brettet. 3. Lag brett = sett(brett, rad, kolonne, tall) Anta først at rad, kolonne og tall er gyldige.
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall). Hvis slett, kall lokal funksjon brett = slett(brett, rad, kolonne). Skriv ut brettet. 3. Lag brett = sett(brett, rad, kolonne, tall) Anta først at rad, kolonne og tall er gyldige. Legg så til sjekker:
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall). Hvis slett, kall lokal funksjon brett = slett(brett, rad, kolonne). Skriv ut brettet. 3. Lag brett = sett(brett, rad, kolonne, tall) Anta først at rad, kolonne og tall er gyldige. Legg så til sjekker: rad, kolonne og tall er gyldige verdier (heltall mellom 1 og 9).
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall). Hvis slett, kall lokal funksjon brett = slett(brett, rad, kolonne). Skriv ut brettet. 3. Lag brett = sett(brett, rad, kolonne, tall) Anta først at rad, kolonne og tall er gyldige. Legg så til sjekker: rad, kolonne og tall er gyldige verdier (heltall mellom 1 og 9). Ingenting satt på plassen fra før.
61 Forslag til rekkefølge for selve spillet 1. Pen utskrift: skriv_ut_brett(brett) Anta at parameteren er en 9x9-matrise med tall. Start med noe enkelt, kan gjøres penere siden. 2. Overordnet løsning: brett = spill_sudoku(brett). I while-løkke: Les kommando, og reager. Kommandoer: sett <rad> <kolonne> <tall> slett <rad> <kolonne> avslutt Sjekk kommando: Hvis avslutt, returner fra funksjonen. Hvis sett, kall lokal funksjon brett = sett(brett, rad, kolonne, tall). Hvis slett, kall lokal funksjon brett = slett(brett, rad, kolonne). Skriv ut brettet. 3. Lag brett = sett(brett, rad, kolonne, tall) Anta først at rad, kolonne og tall er gyldige. Legg så til sjekker: rad, kolonne og tall er gyldige verdier (heltall mellom 1 og 9). Ingenting satt på plassen fra før. Tallet finnes ikke i raden, kolonnen eller kvadratet fra før.
62 Kommentar til lagring og lasting Det er gunstig om man kan laste inn spill man har lagret før. Man må laste inn fra tekstfil. Start med å skrive lagre_brett(brett), som lagrer brett i tekstformat. Lag så brett = last_brett(), som laster inn et brett fra fil med samme format.
63 Oversikt Praktisk Gjennomgang øving 9 Introduksjon sudoku Oppgave 4 Kont-eksamen 2014
64 Bridge!
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V 13 kort pr. spiller
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst)
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf>
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding Få for mange stikk: overstikk.
65 Oppgave pre-a): Forstå domenet To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding Få for mange stikk: overstikk. Få for få stikk: beit.
66 Oppgave a) To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding Få for mange stikk: overstikk. Få for få stikk: beit.
66 Oppgave a) To inn, en ut. To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding Få for mange stikk: overstikk. Få for få stikk: beit.
66 Oppgave a) To inn, en ut. Returner har man klart meldingen To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding Få for mange stikk: overstikk. Få for få stikk: beit.
66 Oppgave a) To inn, en ut. Returner har man klart meldingen Melding: forventet antall stikk oppgitt som trekk. To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding Få for mange stikk: overstikk. Få for få stikk: beit.
66 Oppgave a) To inn, en ut. Returner har man klart meldingen Melding: forventet antall stikk oppgitt som trekk. Å klare en melding: få minst det forventede antall stikk. To lag: N/S og Ø/V 13 kort pr. spiller Meld forventet antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding Få for mange stikk: overstikk. Få for få stikk: beit.
67 Oppgave b) To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*.
67 Oppgave b) To inn, én ut To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*.
67 Oppgave b) To inn, én ut Returner er det en utgang laget har klart? To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*.
67 Oppgave b) To inn, én ut Returner er det en utgang laget har klart? To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter
67 Oppgave b) To inn, én ut Returner er det en utgang laget har klart? Er utgang meldt? To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter
67 Oppgave b) To inn, én ut Returner er det en utgang laget har klart? Er utgang meldt? Er meldingen klart? To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter
68 Oppgave c) To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter
68 Oppgave c) To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter I beit: -50*<antall trekk unna>
68 Oppgave c) To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter I beit: -50*<antall trekk unna> Ellers: <poeng pr trekk>*<antall trekk> + <bonus>
68 Oppgave c) To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter I beit: -50*<antall trekk unna> Ellers: <poeng pr trekk>*<antall trekk> + <bonus> <poeng per trekk> varierer med trumf
68 Oppgave c) To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter I beit: -50*<antall trekk unna> Ellers: <poeng pr trekk>*<antall trekk> + <bonus> <poeng per trekk> varierer med trumf <bonus> varierer med utgangstype og grand
69 Oppgave d) To lag: N/S og Ø/V 13 kort pr. spiller Meld antall stikk (et tall) og trumf (en tekst) Gyldige meldinger: 1 kløver - 7 grand Antall stikk = antall trekk + 6 Meldingsformat: <trekk> <trumf> Kontrakt: høyeste melding For mange stikk: overstikk. For få stikk: beit*. Utgang: 3+ grand, 4+ spar/hjerter, 5+ kløver/ruter I beit: -50*<antall trekk unna> Ellers: <poeng pr trekk>*<antall trekk> + <bonus> poeng per trekk varierer med trumf bonus varierer med utgangstype og grand