Forelsning Uge 1 Mandag Hvad er programmering Eksempel

  • Slides: 31
Download presentation
Forelæsning Uge 1 – Mandag • Hvad er programmering? – Eksempel: program, der kan

Forelæsning Uge 1 – Mandag • Hvad er programmering? – Eksempel: program, der kan løse sudoku opgaver – Programmering og problemløsning • d. Int. Prog kurset – – Hvad kan I forvente at lære Undervisningsprincipper Plagiering Demo af programmeringsomgivelser • Afleveringsopgave: Solnedgang Greenfoot

● Program til at løse Sudoku opgaver • Opgaven er at udfylde de manglende

● Program til at løse Sudoku opgaver • Opgaven er at udfylde de manglende felter, således at, – hver af de 9 rækker – hver af de 9 søjler – hvert af de 9 kvadrater indeholder hvert af cifrene 1 -9 præcis én gang 2

Sudokus • Sudoku er inspireret af latinske kvadrater – Introduceret af schweizeren Leonhard Euler,

Sudokus • Sudoku er inspireret af latinske kvadrater – Introduceret af schweizeren Leonhard Euler, som var den største matematiker på sin tid 1707 -1783 • Sudoku blev enormt populær fra 1984 og frem – Specielt i Japan, men også i resten af verden – Navnet ”Sudoku”, er en forkortelse af den japanske sætning ”Suji wa dokushin ni kagir” som betyder ”tallene må kun forekomme én gang” – Mange danske aviser har Sudoku opgaver • Computere og Sudoku – Sudoku opgaver kan konstrueres ved hjælp af computere – Her skal vi i stedet se på, hvordan Sudoku opgaver kan løses ved hjælp af computere – dvs. ved hjælp af programmering 3

Strategi med udgangspunkt i ciffer 1 1 1 4

Strategi med udgangspunkt i ciffer 1 1 1 4

Strategi med udgangspunkt i felt 3 5

Strategi med udgangspunkt i felt 3 5

Algoritme til løsning af soduku opgaver • Afprøv systematisk alle muligheder 1 2 3

Algoritme til løsning af soduku opgaver • Afprøv systematisk alle muligheder 1 2 3 a b c d e f g h i a 1 3 9 1 7 c 1 2 9 7 8 2 g 1 5 i 1 2 7 9 1 a 2 b 2 7 e 2 9 h 2 7 8 8 8 7 8 9 9 e 1 4 6 3 2 4 4 i 2. . . Vi kan ikke komme videre frem (vejen er blokeret) Vi må gå tilbage af den sti vi kom (indtil vi kan tage et andet valg) Det kaldes backtracking 6

Algoritme til løsning af soduku opgaver • Afprøv systematisk alle muligheder 1 2 3

Algoritme til løsning af soduku opgaver • Afprøv systematisk alle muligheder 1 2 3 a b c d e f g h i a 1 3 9 1 7 c 1 2 9 7 8 4 g 1 5 i 1 2 7 9 1 a 2 b 2 7 e 2 9 h 2 7 8 8 8 7 8 9 9 e 1 4 6 3 2 4 4 i 2. . . 7

Algoritme til løsning af soduku opgaver • Afprøv systematisk alle muligheder 1 2 3

Algoritme til løsning af soduku opgaver • Afprøv systematisk alle muligheder 1 2 3 a b c d e f g h i a 1 3 9 1 7 c 1 2 9 7 8 4 g 1 5 i 1 2 7 9 1 a 2 b 2 7 e 2 9 h 2 7 8 8 8 7 8 9 9 e 1 4 6 3 2 4 4 i 2. . . 8

Algoritme til løsning af soduku opgaver • Afprøv systematisk alle muligheder 1 2 3

Algoritme til løsning af soduku opgaver • Afprøv systematisk alle muligheder 1 2 3 a b c d e f g h i a 1 3 4 c 1 9 2 7 8 g 1 5 i 1 2 7 9 1 a 2 b 2 7 e 2 9 h 2 i 2. . . Vores ”vejvalg” udgør et træ Roden er foroven, grenene i midten og bladene forneden 7 8 8 8 7 8 9 9 e 1 4 6 3 2 4 4 Enten finder vi en løsning (i et af del-træerne) eller også har vi vist, at der ikke findes en løsning 9

Algoritmen – pseudokode – Java-kode prøv. Alle. Muligheder() { HVIS alle felter er udfyldt

Algoritmen – pseudokode – Java-kode prøv. Alle. Muligheder() { HVIS alle felter er udfyldt { udskriv løsning } ELLERS{ husk felt gå til næste frie felt } // try. All() // all. Filled() // print. Grid() // previous = current. Field() // advance. To. Next. Unfilled() FOR hvert ciffer c { HVIS c kan bruges { indsæt c i felt prøv. Alle. Muligheder() } } // promissing(c) // set. Field. Value(c) // try. All() fjern indsatte værdi gå tilbage til forrige felt // clear. Current. Field() // set. To. Field() } 10

Java-version public void try. All() { if ( g. all. Filled() ) { g.

Java-version public void try. All() { if ( g. all. Filled() ) { g. print. Grid(); } else { // try all values at next field Field previous = g. current. Field(); g. advance. To. Next. Unfilled(); for ( int c = 1; c <= 9; c++ ) { if ( g. promissing(c) ) { g. set. Field. Value(c); try. All(); } } o m De // backtrack to previous field g. clear. Current. Field(); g. set. To. Field(previous); } } "games/jp. X. sud" 11

Klassemodel Grid Solver void try. All() 1 boolean all. Filled() void print. Grid() Field

Klassemodel Grid Solver void try. All() 1 boolean all. Filled() void print. Grid() Field current. Field() void advance. To. Next. Field() boolean promissing(int c) void set. Field. Value(int v) void clear. Current. Field() void set. To. Field(Field f) 12

● Programmering og problemløsning • Computerens styrker – At kunne foretage simple beregninger lynhurtigt

● Programmering og problemløsning • Computerens styrker – 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 – Laver ingen fejl (hvis den er programmeret korrekt) 13

Programmering • En computer er en generel maskine, der kan programmeres til at gøre

Programmering • En computer er en generel maskine, der kan programmeres til at gøre forskellige ting • Computer + X-program = X-maskine Program … X = skak, sudoku, tekstbehandling, kasseapparat, Facebook, Google, Dropbox, i. Tunes, Windows, Linux, OS X, … Program Computer 14

En Sudoku-maskine Sudoko-løser Solver Grid Java VM C++ … Java Computer 15

En Sudoku-maskine Sudoko-løser Solver Grid Java VM C++ … Java Computer 15

Programmering og problemløsning Identificer problemet Evaluer resultatet Analyser løsningsmuligheder Implementer idéen via et program

Programmering og problemløsning Identificer problemet Evaluer resultatet Analyser løsningsmuligheder Implementer idéen via et program (f. eks. i Java) Programmering Vælg den bedste idé 16

● Information om d. Int. Prog kurset • Simpel programmering til husbehov – I

● Information om d. Int. Prog 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 17

Læringsmål • Deltagerne skal ved afslutning af kurset kunne – anvende grundlæggende konstruktioner i

Læringsmål • 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 • Eksamen er en praktisk prøve i programmering – 30 minutters varighed – svarer til køreprøve – eneste tilladte hjælpemidler er: • Java. Doc for Javas klassebibliotek (API) • Blue. J editoren (eller en anden Java editor) 18

Aktiviteter på kurset • Øvelser • Hjemmearbejde – praktisk arbejde under vejledning af instruktorer

Aktiviteter på kurset • Øvelser • Hjemmearbejde – praktisk arbejde under vejledning af instruktorer • Afleveringsopgaver – praktisk træning – feedback (til jer og til os) • Større projekt i uge 5 – bringer mange ting sammen – Intensiv træning inden eksamen Forelæsninger Øvelser Hjemmearbejde 3 timer 4 timer 5 -8 timer I alt 12 -15 timer – gennemgå materiale – forberede opgaver • Videoer (30 stk) – præsentation af centralt stof – tilgængeligt når som helst • Forelæsninger – overblik, begreber, principper og eksempler Studerende, der på forhånd kender til programmering, kan klare kurset med lavere belastning For dem er forelæsningerne ikke så vigtige, men øvelserne er 19

bb. au. dk 20

bb. au. dk 20

Undervisningsprincip • I møder de samme begreber og teknikker mange gennem kurset (spiral-metoden) –

Undervisningsprincip • I møder de samme begreber og teknikker mange gennem kurset (spiral-metoden) – – – Introduktion ved forelæsning Selvstudie via video eller bogkapitel Praktisk træning ved en eller flere øvelsesgange Repetition i senere forelæsning Mere praktisk træning – osv. • Kursets forløb – Der introduceres rigtigt meget forskelligt stof i de første 3 -4 uger – Derefter kommer der ikke så meget nyt – i stedet arbejdes der videre med de begreber og teknikker, som I allerede er stødt på • Vær med fra start – De første 3 -4 uger kan være overvældende og svære – Men hold ud og klø på – kommer I bagud i denne fase, er det meget vanskeligt at indhente 21

Par-programmering • Ved øvelserne arbejdes i par (på 2 personer) – Gælder også afleveringsopgaver

Par-programmering • Ved øvelserne arbejdes i par (på 2 personer) – Gælder også afleveringsopgaver (bortset fra uge 6 og 7) – I må også gerne lave hjemmearbejde og forberedelse i par/grupper – Ved at arbejde i par hjælper I hinanden, så I ikke så let går i stå på grund af småproblemer – Det træner jer i at kunne arbejde sammen med andre – Derudover er det en praktisk foranstaltning, således at instruktorerne kan nå at komme rundt på hele holdet (skal kun se og kommentere 12 besvarelser i stedet for 24) 22

Når I ikke kan få jeres kode til at virke • Ved øvelserne 1.

Når I ikke kan få jeres kode til at virke • Ved øvelserne 1. 2. 3. 4. 5. Spørg dig selv Spørg din makker Spørg et andet par Kig i slides og Java. Doc Spørg jeres instruktor • Så sparer i tid og øver jer • Ved forelæsningerne – Jeg kigger ikke på jeres detaljerede kode i pauserne – Det kan jeg simpelthen ikke nå – Brug webboardet, så andre kan få gavn af spørgsmålet/svaret – Men jeg svarer meget gerne på (næsten) alle andre spørgsmål • Uden for øvelserne Brug webboardet – I får meget hurtigere svar – Svaret kan hjælpe mange andre • Læg ikke hele jeres løsning på webboardet – Kun den metode, udtryk, sætning eller lignende som ikke virker – Ellers kan andre "stjæle" jeres kode – Instruktorerne får for meget kode at kigge på 23

Plagiering • Enhver form for plagiering er uacceptabelt og sidestilles med eksamenssnyd, som er

Plagiering • Enhver form for plagiering er uacceptabelt og sidestilles med eksamenssnyd, som er en alvorlig forseelse – Det er forbudt at kopiere andre studerendes afleveringsopgaver, og det samme er tilfældet for opgaver, som man finder på nettet eller andet steds – Det gælder både hele opgaver og dele af opgaver (med mindre der eksplicit er gjort opmærksom på, at dele af en opgave er lånt/inspireret andetsteds fra) – Det er både en forseelse at aflevere kopi af andres opgaver og at lade andre aflevere kopi af ens egen opgave – Kurset har nul-tolerance over for plagiering – Studerende, der bliver grebet i plagiering, får ikke godkendt deres obligatoriske opgaver, og kan derfor først komme til eksamen det efterfølgende år 24

Programmering er svært • Programmering – Anderledes – Svær tankegang • Faser – –

Programmering er svært • Programmering – Anderledes – Svær tankegang • Faser – – – – – Motivation Begejstring Tvivl? Frustration Eksistentiel krise Heureka! Fascination Indsigt Magt over teknologien Begejstring Tid 25

Programmeringssprog og -omgivelser Objektorienteret programmeringssprog Greenfoot o m e D 26

Programmeringssprog og -omgivelser Objektorienteret programmeringssprog Greenfoot o m e D 26

● Afleveringsopgave: Tegninger I Blue. J skal I lave nogle simple børnetegninger ved hjælp

● Afleveringsopgave: Tegninger I Blue. J skal I lave nogle simple børnetegninger ved hjælp af kvadrater, trekanter og cirkler I afleveringsopgaven skal I få solen til at gå ned 27

● Opsummering • Hvad er programmering? – Eksempel: program, der kan løse sudoku opgaver

● Opsummering • Hvad er programmering? – Eksempel: program, der kan løse sudoku opgaver – Programmering og problemløsning • d. Int. Prog kurset – – Hvad kan I forvente at lære Undervisningsprincipper Plagiering Demo af programmeringsomgivelser • Afleveringsopgave: Tegninger 28

CS Challenge • Henvender sig til alle 1. års studerende, der følger den introducerende

CS Challenge • Henvender sig til alle 1. års studerende, der følger den introducerende datalogiundervisning – Det er et tilbud, og derfor på ingen måde obligatorisk • Der stilles seks sjove udfordringer inden for programmering – De skal løses hen over efteråret (første aflevering 6. september) – Hver udfordring illustrerer universelle principper om algoritmer og programmer – Det handler mere om at tænke end at knokle. • Deltagerne får detaljeret feedback på deres løsninger • "Fantastiske præmier" til dem, der gennemfører alle seks • Mere information: cs. au. dk/Challenge LINK 29

Studiestartsprøve • Der er fra i år indført studiestartsprøve for alle nye bachelorstuderende –

Studiestartsprøve • Der er fra i år indført studiestartsprøve for alle nye bachelorstuderende – Prøvens hovedformål er hurtigt at finde de studerende, der ikke har påbegyndt studiet, så de kan udmeldes inden det officielle sommeroptag opgøres den 1. oktober • Prøven indeholder to opgaver: – Du skal logge ind på selvbetjeningen mit. au. dk og tjekke, at dine oplysninger er korrekte – Du skal udfylde et tilsendt spørgeskema, hvor der spørges ind til baggrund, studievalg og hvordan introdagene har været • Hvis du ikke gennemfører de ovennævnte opgaver, dumper du studiestartsprøven og vil blive udmeldt – Studiestartsprøven stilles 31. august med svarfrist 4. september 30

Det var alt for nu…. . … spørgsmål 31

Det var alt for nu…. . … spørgsmål 31