Forelæsning 1.1 Kursusintroduktion Introduktion til programmering Greenfoot
Hvad kan I forvente at lære på kurset? Simpel programmering til husbehov I vil lære nogle grundliggende ting omkring programmering Efter kurset vil I kunne lave simple programmer og forstå de vigtigste principper bag programmering. Men I bliver ikke verdensmestre i at programmere på 7 uger. Det kræver masser af træning gennem flere år Sammenlign med at lære at spille guitar eller fodbold Programmering kræver masser af praktisk øvelse I lærer ikke at programmere ved at læse bøger eller se videoer I lærer det ved at øve jer igen og igen Der er masser af basale ting som skal sidde på rygmarven og som I skal kunne gøre i søvne Sammenlign med guitar/fodbold og en køreprøve Sudoku.2
Bemanding Kurt Jensen (Aud. F) Michael E. Caspersen (Aud. E) Benjamin Blankholm, Casper Benjamin Freksen, Christoffer Skovgaard, Christopher Riis Bubeck Eriksen, Helene Flyvholm Haagh, Joakim Gregersen Quach, Jon Bjerrum Jacobsen, Jonathan Ahlers Marino, Kenneth Kaiser Kudsk, Kristoffer Theis Skalmstang, Marcus Flyvholm Haagh, Markus Andreassen, Martin Toldam Torp, Mathias Kraft Mathiasen, Mikkel Brun Jakobsen, Morten Bech, Morten Birk, Rasmus Lunding Henriksen, Sune Ohrt Sørensen, Thor Bagge
Indhold Hvad er programmering? Eksemplificeret med sudoku-løser Info om kurset Hvad skal I lære? Hvordan lærer I det? Hvordan tester vi at I har lært det? Kursets web-sider cs.au.dk/dintprog
Hvad er programmering?
Oprindelsen af Sudoku Opfundet af Leonhard Euler Schweizisk matematiker, 1707-1783 Største matematiker på sin tid Latinske kvadrater: Sudoku.6
Moderne udgave af Sudoku Spillepladen har 9 rækker 9 søjler 9 blokke (3 x 3) Hver blok, række og søjle har 9 felter Udfylde de manglende felter Hver række, søjle og blok har tallene 1..9 præcis en gang. Sudoku.7
Moderne udgave Introduceret af Howard Garnes, 1979 Amerikansk puslespilsblad (Math Puzzles and Logic Problems, Dell Magazines) Under navnet Number Place Blev enormt populær i Japan (og andre steder) fra 1984 og frem Sudoku, som er en forkortelse af Suji wa dokushin ni kagir som betyder tallene må kun forekomme én gang Stort hit fra 1986 (registreret varemærke) I dag udgives der fem Sudoku-blade hver måned i Japan Sudoku.8
GADs bestsellerliste, 14. oktober 2005 1. Litas: Sudoku 1 2. Litas: Sudoku 2 3. Litas: Sudoku 3 4. Sudoku for begyndere 5. Sudoku 6. Su Doku 7. Su Doku 2 8. Flere Sudoku 9. Junior Sudoku 10. Mange flere Sudoku Sudoku.9
Sudoku og computerprogrammer Wayne Gould Startede i 1997 på et program der kunne konstruere Sudoku-spil Det tog ham efter sigende over seks år... waynegouldpuzzles.com/sudoku/ Levereandør til engelske aviser... Debut i The Times, 12. november 2004... og danske Politiken, 12. juni 2005 Jyllands-Posten, 13. juni 2005 Ekstra Bladet, 15. juni 2005... Sudoku.10
Strategi med udgangspunkt i værdi 1 1 1 1 1 Sudoku.11
Strategi med udgangspunkt i felt 3 Sudoku.12
Hvis man har muskler nok Rå kraft (brute force) Afprøv systematisk alle lovende muligheder 1 2 3 4 a b c d e f g h i 3 9 2 7 8 1 7 9 2 3 9 9 2 7 8 7 8 a1 c1 e1 g1 5 8 i1 6 7 8 9 1 4 7 9 a2 b2 e2 2 4 h2 i2... Sudoku.13
Hvis man har muller nok Rå kraft (brute force) Afprøv systematisk alle lovende muligheder 1 2 3 4 a b c d e f g h i 3 9 2 7 8 1 7 9 4 3 9 9 2 7 8 7 8 a1 c1 e1 g1 5 8 i1 6 7 8 9 1 4 7 9 a2 b2 e2 2 4 h2 i1... Sudoku.14
Hvis man har muller nok Rå kraft (brute force) Afprøv systematisk alle lovende muligheder a b c d e f g h i 3 9 a1 1 2 3 4 3 9 2 7 8 4 9 2 7 8 7 8 c1 e1 g1 5 6 7 8 9 8 1 4 7? 9 2 4 i1 a2 b2 e2 h2 i1... Sudoku.15
Algoritmen prøvallemuligheder() { if <alle felter er udfyldt> { <udskriv grid> } else { <husk felt> <gå til næste frie felt> for <hvert ciffer c> { if <c er lovende> { <fastfrys feltværdi> prøvallemuligheder() } } a b c d e f g h i 3 9 2 7 8 1 7 9 4 1 2 3 4 5 6 7 8 9 } } // backtrack to previous field <fortryd fastfrosne værdi> <gå tilbage til forrige felt> Sudoku.16
Hvad har vi brug for at kunne på et Grid prøvallemuligheder() { if <alle felter er udfyldt> { <udskriv grid> } else { <husk seneste felt> <gå til næste frie felt> for <hvert ciffer c> { if <c er lovende> { <fastfrys feltværdi> prøvallemuligheder() } } // tryall() // allfilled() // printgrid() // Previous = currentfield() // advancetonextunfilled() // promissing(c) // setfieldvalue(c) // tryall() } } // backtrack to previous field <fortryd fastfrosne værdi> <gå tilbage til forrige felt> // clearcurrentfield() // settofield() Sudoku.17
Java-version public void tryall() { if ( g.allfilled() ) { g.printgrid(); } else { // try all promissing values at next field Field previous = g.currentfield(); g.advancetonextunfilled(); for ( int c = 1; c <=9; c++ ) { if ( g.promissing(c) ) { g.setfieldvalue(c); tryall(); } } } } // backtrack to previous field g.clearcurrentfield(); g.settofield(previous); Sudoku.18
Klassemodel void tryall() Solver 1 Grid boolean allfilled() void printgrid() Field currentfield() void advancetonextfield() boolean promissing(int c) void setfieldvalue(int v) void clearcurrentfield() void settofield(field f) Sudoku.19
Mennesket mod maskinen... (hjerne) 1997 Deep Blue vinder matchen 3,5 2,5 Sudoku.20
Mennesket mod maskinen... (muskler) Kasper Dyb Gul Dyb Gul løfter 187,5 kg mod Kaspers 180 kg Sudoku.21
Computere og intelligens... En computer der spiller skak udviser menneskelige træk i samme grad som en gaffeltruck der løfter gods... Sudoku.22
Computerens styrke At kunne foretage simple beregninger lynhurtigt På kort tid at kunne lagre store datamængder søge i store datamængder bearbejde store datamængder afsøge et stort antal muligheder og kombinationer Informations-Repræsentations-Transformations- Maskine hurtig og sikker i detaljen skal programmeres! Sudoku.23
Computer og program En computer er en generel maskine, men uden program(mer) er den intet værd! Computer + X-program = X-maskine X = Windows, Linux, OS X, skak, sudoku, tekst, musik, studieadministration, social interaktion, flykontrol, strålebehandling, DNA-forskning, kommunikation, spil, læse, regne, undervise, motorstyring, bremsestyring, bolighandel, bilhandel, dagligvarehandel, billeddeling, videodeling, søge, oversættelse, Program Program Program Program Computer Sudoku.24
En Sudoku-maskine Sudoko-løser Java Java VM C++ Computer Sudoku.25
En Sudoku-maskine Sudoko-løser: Solver Grid Java Java VM C++ Computer Sudoku.26
Programmering Programmering = + Problemløsning Kodning (i Java) Sudoku.27
Problemløsning Kodning (i Java) Sudoku.28
Om programmering Programmering Anderledes Svær tankegang Faser Motivation Begejstring Tvivl Frustration Eksistentiel krise Heureka! Fascination Kompetencer Indsigt Magt over teknologien Begejstring Tid Human beings are not accustomed to being perfect, and few areas of human activity demand it. Adjusting to the requirement for perfection is, I think, the most difficult part of learning to program. F. Brooks, The Mythical Man-Month, pp. 7-8
Time Magazine, 1984 In 1984, TIME magazine quoted the chief editor of a certain software publication as saying: "Put the right kind of software into a computer, and it will do whatever you want it to. There may be limits on what you can do with the machines themselves, but there are no limits on what you can do with software. Sludder! Der er grænser masser af grænser men ufatteligt mange ting kan lade sig gøre. Sudoku.30
Greenfoot Info om kurset
Programmeringsomgivelser Greenfoot
Afleveringsopgave 1.1: Solnedgang I opgave 1.1-1.14 i BlueJ bogen laver I et lille program, der kan tegne nedenstående billede. I afleveringsopgaven skal I udvide programmet, således at solen går ned.
Hvad skal I lære? Og hvordan tjekker vi at I har lært det?
Mål og valg af prøveform Deltagerne skal ved afslutning af kurset kunne anvende grundlæggende konstruktioner i et sædvanligt programmeringssprog identificere og forklare arkitekturen af simple programmer identificere og forklare betydningen af simple specifikationsmodeller implementere simple specifikationsmodeller i et sædvanligt programmeringssprog anvende standardklasser ved realisering af programmer. Mundtlig prøve Skriftlig prøve Multiple choice Praktisk prøve Det obligatoriske program checker lidt bredere ift. læringsmålene
Undervisningsformer i dintprog Forelæsninger overblik, begreber, principper og eksempler (forud) detaljer (bagud) Øvelser (vigtigst!) praktisk arbejde under vejledning styret refleksion (efter behov) Videoer alternativ præsentation af centralt stof tilgængeligt når som helst Afleveringsopgaver holde jer til ilden (kærligt spark bagi) feedback (til jer og til os) Hjemmearbejde læs bogen og lav opgaverne samtidig med (se video) forbered øvrige opgaver Projekt (uge 6) bringer mange ting sammen højdetræning inden eksamen
Studieformer Par-programmering (driver og navigator) øvelser afleveringsopgave studier Disciplin lav jeres ting til tiden kurset er tilrettelagt ud fra den forudsætning Kreativitet find selv på udvidelse af opgaverne udfordr jeres forståelse og kompetencer Spørg vent ikke! brug hinanden, jeres instruktor, os, webboardet,...
Vejledende timeforbrug Forelæsninger: Øvelser: Hjemmearbejde : < 4 timer 4 timer > 7 timer Ialt ~15 timer
cs.au.dk/dintprog