dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 Rapport til a. 1

Størrelse: px
Starte visningen fra side:

Download "dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 Rapport til a. 1"

Transkript

1 dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 Rapport til a. 1 'TDD rytmen' Vi bruger gennem vores arbejde, rytmen fra Test Driven Development-paradigmet. Quickly add a test Run tests and see new test fail Make a little change Run tests and see all succed Refactor to remove duplication Tests og iterationer TDD har mantraet 'Clean code that works' - dette opnår vi ved at konstruere test-cases for alle tænkelige tilfælde hvorpå softwaren kunne tænkes at blive anvendt. Til at begynde med, har vi vores interface til Boardet - metoderne herfra laver vi den konkrete implementation af i klassen BoardImpl. Herefter skal vi teste at de forskellige implementationer virker som tiltænkt. Først tilføjer vi en test til iterator-metoden. Denne failer da den ikke returnere et Iterator-objekt. Det faker vi ved bare at returnere et sådan. Det giver grøn bar. Så skal de øvrige metoder implementeres... vi starter med getcount Test: antal brikker på B1 skal i standardopstillingen være 2 Rød bar Fake it: returner 2 Test: antal brikker på B1 skal i standardopstillingen være 2 Rød bar Fake it: returner 2 Test: farven på B1 skal i standardopstillingen være rød 1

2 Rød bar Fake it: returner Color.RED Test: inden yt skal der være 2 på B1 og 0 på B2, efter yt skal der være 1 på B1 og 1 på B2. Rød bar Kan ikke fake længere. Implementerer boardet som et HashMap<Location,int> Bruger obvious implementation til at resette boardet i konstruktoren. Move implementeret -> Får stadig red bar > Implementerer getcount rigtigt Rød bar! (boarded er ikke resat) Implementerer reset() Rød bar Implementerede move()! Test: Der skal være sorte brikker på R1 Rød bar Kan ikke fake, så implementerer getcolor() rigtigt.! Test: Vi forventer at getcount på Rød's BEAR OFF plads er 0 samt farven er NONE Rød bar! Why?!?! Fordi vi havde glemt at tilføje specialfelterne til iteratoren. Disse er nu implementeret! Hurrah! Test: Vi forventer at der konstant er 30 brikker på brættet også efter et yt 2

3 ========================== ALPHAMON ============ Vi implementerede metoderne fra board via "Obvious Implementation"pattern. Test: Når man starter spillet skal ingen spiller have turen. (farven = NONE) Rød bar Fake det hele: returnerer Color.NONE Test: Arrayet returneret skal have længden 2 og må ikke være null. Rød bar (nullpointerexception) Fake it: returnerer en tom array af størrelse 2 (begge værdier er 0) Test: Terningekastene er inden for grænsen [1-6] Rød bar Fake it: vi returnerer 2,2 istedet Test: winner() er altid NONE så længe spillet kører Rød bar (null) Fake it: Returnerer Color.NONE Test: Spillet er ikke igang endnu så playerinturn skal returnere Color.NONE Rød bar (null) Fake it: Returnerer Color.NONE Test: Første spiller er forventet BLACK efter første nextturn() grundet dicethrown implementationen (fast deneret). Rød bar: Vi kan ikke fake playerinturn længere Implementerer den.! 3

4 Test: Når spillet er igang: Alle moves er valid bortset fra hvis der er en modstanders brik på pladsen. n Flytter R1 til R2. (sort brik til tom plads) Forventer true da playerinturn er BLACK Test: Flytter B1 til B2. (rød brik til tom plads) Forventer false da playerinturn er BLACK men det er røde brikker vi forsøger yttet Test: Flytter B1 til B2 da det er røds tur. (rød brik til tom plads) Forventer true da det netop er røds tur Test: Vi gerne sikre os at spillet når til en afslutning og rød altid vinder. Rød bar: winner er ikke implementeret, det gør vi. Test: Fordelingen mellem terningernes værdier skal være nogenlunde fair Vi forventer at på kast vil der kun være en lille forskel. eektivt vil vi dividere med 2000 for at oprette fejlmargenen. Rød bar Vi kan ikke fake den længere. Derfor returnerer vi 2 tilfældige tal med Math.Random metoden. 4

5 Vores note om denne test. Vigtigheden af denne test kan diskuteres, da dens opførsel af natur er en anelse non-deterministisk. Men jo ere gange testen køres jo mere pålideligt er resultatet. Ved denne opførsel er vi også nød til at teste dicerange ere gange, men på grund af denne tests implementation så bliver dette testet implicit. Det er en advanceret test. men Vi synes den er god nok at have med. Denne test kan synes grotesk, da testkoden er markant større og mere kompleks end vores produktionskode, på den anden side kunne Danske Spil godt have brugt en sådan her for nyligt... 5

6 dsoftark E2007 Gruppe 14: Anders, Troels & Søren 23. november 2007 Rapport til a. 2 1

7 RFSE Øvelse Da vi skulle oprette en Betamon-udgave, undersøgte vi forskellene og hvad der varierede ifht. alphamon, og benyttede hermed metoden til at definere et interface, hvor forskellene bliver faktoriseret ud derfra. Vi omdøbte klassen AlphamonGame til den generelle HotGammonGame, som nu er den klasse som varetager ansvaret for de fælles metodesignaturer Alpha- og Betamon i mellem. Nu står vi så med to konkrete implementationer af vores interface som implementerer hhv. Alphamon og Betamon strategien. AlphamonStrategy og BetamonStrategy. En af disse giver, (eller en vilkårlig anden klasse) vi så med i konstruktøren til hotgammon, og den opfører sig derefter som ønsket, kun med de nødvendige signaturer for det pågældende spil. Vi har set på det som varierede mellem Alpha- og Betamon som reglerne for hvordan strukturen for spillet skulle opføre sig. Vi lagde to ansvarsområder ud, nemlig det at flytte spilleren rundt på pladen. Her skal Alphamon og Betamon nu selv afgøre hvorvidt det er et lovligt træk, og derefter flytte brikken. Derudover skal begge have en vinderstrategi, som nu også ligger i Alpha- og Betamon. Dette har vi gjort da vi så at det som de regler, der havde ændret sig mellem de to. - Igennem dette brugte vi TDD for på den måde at være sikker på en konsistent løsning, så man når en ny implementation giver 'Grøn Bar' kan man være sikker på at man har lavet en godt abstraktion til det nye niveau. Så langsomt begynder TDD fremgangsmåden at give mere og mere pote, så at sige. Man har undervejs slet ikke fornemmelsen af at sidde med et massivt ansvar, for at det hele stadig virker. Da man, hvis testforløbet går godt, ved at systemet er konsistent. Enkelte af de tilføjede testcases måtte vi refaktoriserer koden for at bringe til 'Grøn Bar' tilstanden, men det viste sig senere at være en rigtig god ting. For efter det, fejlede overraskende få af de nyoprettede testcases. - Da vi i processen undersøgte hvad det var som varierede ved vores produktionskode, kom vi frem til at det var reglerne for spillet der varierede (hvilket vi nu indser var forkert, da vi derved flyttede mange ansvarsområder ind i regelstrategien og dermed programmeret 'in anticipation of needs, not when need arise'

8 RFSE Øvelse Her skulle vi benytte flere forskellige terningstategier. Så vi brugte her processen, og vi identificerede terningeansvaret som vores varierende punkt. Det blev derefter faktoriseret ud i et interface for sig selv, DiceStrategy, som kan realiseres af de mulige spilkonfigurationer der måtte opstå. - Herfra har vi lavet 3 konkrete implementationer af interfacet: - FixedDiceStrategy: Som Alpha- og Betamon benytter, da denne har terningværdier der hele tiden forøges. - RandDiceStrategy: Denne klasse giver tilfældige tal i intervallet [1,6] men denne klasse kan vi ikke teste med automatiserede tests, da den bygger på Javas indbyggede tilfældighedsgenerator Math.random() som, ud fra Obvious Implemtation, bare virker. - TestStubDiceStrategy: Denne klasse ligger i modsætning til de andre, i test-mappen. Det gør den da vi kun bruger den som placeholder for den reelle tilfældige stategi, da denne ikke ellers lader sig teste. Vores test-stub virker således at vi inde fra testen beholder en reference til TestStubDiceStrategy objektet så vi kan kalde en metode der gemmer en serie af tal som terningen skal vise i rækkefølge. Derved kan vi fuldstændigt styre hvilke "tilfældige" tal som vores terning genererer. Med TDD lavede vi nogle nye tests for at kontrollere konsistensen af de nye regler som fulgte med Gammamon. Vi copy-pastede indtil videre den gamle kode for at teste om et move er gyldigt fra Alphamon, men vi ved godt at vi senere skal have ændret ansvarsområdet så Gammamon kan genbruge kode fra Alphamon stategien og bare bruge den nye tilfældige terning. Vi lavede en del fejl mht metoden underfejs men vi føler at vi nu står med et system som ikke er helt dumt længere. Der er stadig mange områder hvor abstraktionen kan gøres bedre, men vi føler selv vi er på rette vej igen nu. Gruppe 14.

9 Sekvens Diagram UML Diagram! #

10 dsoftark aflevering 3 Gruppe 14: Anders Riggelsen, Søren Løbner, Troels Hansen Vi har tænkt en del over hvordan vi har kunnet afkoble endnu mere funktionalitet fra strategierne, gøre dem simplere, og ikke mindst gøre det muligt at kunne kombinere dem på simpel vis. Vi har jo bunke af tests så vi kan roligt gå igang med af refactorisere og ændre. I sidste uge havde vi i vores Gamestrategy en metode der hed HasMoreValidMoves(Game, Color), da den på mange måder minder meget om vores move metode, og der iøvrigt kun reelt var en metode i HotgammonGame klassen der benyttede den, besluttede vi at smide den væk! Vores HasMoreValidMoves metode stod for et check som var meget tæt koblet med validering af 'move' metoder, så vi lavede en generel løsning istedet. For at opretholde en grønbar oprettede vi en metode isvalid i Gamestrategy, movemetoden kan så kan spørge derom et træk lovligt, en simpel refactoring. Nu kommer humlen så ved at have en isvalid, for at emulere HasMoreValidMoves er det blot at afprøve alle tænkelige træk, på en givenkonfiguration (game), det virker ved første øjekast tåbeligt, men den asymptotiske tid er O(1). Da der som tidligere nævnt kun reelt en metodeder benytter sig af denne funktionalitet, så derfor har vi ladet denne del synke ned i HotgammonGame klassen. Og vi har stadig grøn bar. Vi står nu med en move metode der altid synes at gøre det samme, så den har vi også ladet synke ned i HotgammonGame.. Tilbage i Gamestrategy er der blot 2 metoder, isvalid og determinewinner, disse har vi valgt at splitte op i 2 nye strategi typer, defineret ved interfacene MoveValidationStrategy og WinStrategy, da der giver mulighed for bedre at kunne kombinere disse og bygge nye varianter. Dette indebærer dog en Konstruktor ændring i HotgammomGame, samt lidt ændringer af variabel navne, men det er hurtigt overstået.. Vi vil nu kigge på MoveValidationStrategy implementationerne, for de har faktisk en del kode tilfælles, f.eks. at man ikke må flytte fjendens brikker osv. Dette bad næsten om at blive lavet om til at benytte composite patternet. Så vi factoriserede alle de små regler ud i mindre strategi implementationer der så kan kombineres med en CompositeMoveValidatorStrategy klasse.

11 Ideen med CompositeMoveValidatorStrategy er at man kan betragte de enkelte regler som Constraints, for at et træk er lovligt så skal alle constraints være opfyldt. En constraint i denne sammenhæng er en anden klasse der implementerer MoveValidationStrategy, CompositeMoveValidationStrategy er således blot en bunke af constraints der blot ligner en enkelt constraint. På denne her måde får vi nogle mindre byggesten som nemt kan kombineres og derved skabe et nyt regelsæt. Hvis man så ellers husker at tilføje de rigtige regler til Composite klassen så han man stadig grønbar. Deltamon er implementeret ved at oprette en CompositeMoveValidationStrategy der aggregerer de samme MoveValidationStrategy'er som Alphamon bruger, dog bruges der en "InnerTableWinStrategy" istedet for en "WinAfterSixMovesStrategy" samt at der er tilføjet den strategi kaldet "OnlyMoveRightDirectionStrategy" som oprindeligt kommer fra Gammamon og allerede er blevet testet. Da vi allerede har testet de andre strategier tilfører Deltamon kun få nye tests da der ikke er rigtig brug for at teste alle de foregående strategier igen. Vores tests tester først om begge farver kan vinde spillet efter at alle brikkerne er flyttet ind i deres inner-table. Derefter tester vi for en sikkerheds skyld at ingen endnu har vundet hvis vi flytter *næsten* alle brikkerne ind i spillernes inner-table. Ansvarsområder: HotgammonGame - Ansvarlig for at samle trådene. flytte brikker slå terninger, skiftetur, udregne tilbageværende træk. MoveValidationStrategy - har ansvaret for at bestemme om et givent træk, givet en tilstand, er gyldigt. DiceStrategy - er algoritmen der kaster terningen, og har ansvaret for at levere de udfald vi måtte ønske. WinStrategy - Har ansvaret for at afgøre hvem der har vundet, hvis nogen, givet en konfiguration. AlphamonFactory DeltamonFactory - Har ansvaret for at oprette en fuldt fungerende konkret Game implementation. Dette gør de i praksis ved at oprette/instansiere alle strategier relevant for deres respektive spiltype, men kunne principielt set godt have returneret en annonym klasse med strategierne hardcoded uden brug af andet.

12 Diagram: På de konkrete factories har vi ikke tegnet pile til HotGammonGame og til de andre konkrete MoveValidationStrategies da det hele ellers vil blive uoverskueligt. Vi har også kun nøjet med at tegne Alphamon og Betamon's factories for simplicitetens skyld. Roller: AbstractFactory bruger Abstract Factory pattern til at instantiere de strategier der skal bruges for det aktuelle spil. AlphamonFactory - DeltamonStrategy er alle konkrete fabrikker i Abstract Factory Pattern, hvor det abstrakte produkt fra fabrikkerne er Game. Det konkrete produkt er et HotGammonGame. Interfacet AbstractFactory leverer en fælles tilgang til instantiering af vores konkrete produkter, dvs. spilvarianter. Produktet er et Game, defineret ud fra game interfacet. Vores konkrete fabrikker, dvs. AlphamonFactory - DeltamonFactory, har ansvaret for at levere produkter af den konkrete variant. I praksis betyder dette blot en instatiering af HotgammonGame klassen med forsklellige parametre, svarende til forskellige strategier. WinStrategy, MoveValidationStrategy og DiceStrategy er en del af Strategy Pattern hvor NoMoveToEnemyOccupiedFieldsStrategy - ValidMoveStrategy er alle konkrete strategier af den abstrakte (ikke af forveksle med javas 'abstract') strategi (interfacet). Contexten i alle disse Strategy Patterns er HotgammomGame der aggregerer alle strategierne i en liste der kan indeholde en hvilket som helst strategi på grund af den løse kobling vi laver ved at programmere op mod et interface (pr. strategitype) frem for konkrete strategi-implementationer.

13 dsoftark Aflevering 5 Gruppe 14: Anders Riggelsen , Søren Løbner , Troels Hansen Opgave 1: Vi grublede en del over hvordan vi skulle gribe testning af dette an. Som sådan er det jo blot nogle byggeklodser der sættes sammen på en anden, og de er jo allerede testet. Sammensætningen grænser det åbenlyse, og ingen af komponenterne er afhængige af hinanden, de kender ikke engang til hinandens eksistens. Så vi lavede en enkelt simulering af fuldt spil, og vupti grønbar fra start. Testen er dog lavet med den forudsigelige terning, da alt andet næsten ville kræve en AI. Opgave 3: Shesh-Besh: I dette tilfælde vil vi nemt kunne indføre Shesh-Besh uden nogen form for ændringer nogen steder, kun ved at tilføje. En hurtig analyse vil vise at det eneste der ændrer sig for denne spil-type er en mængde MoveValidationStrategies baseret på om terningerne har slået (6,5) Shesh-besh beskrivelsen lægger op til at man også kan flytte modstanderens brikker og det er jo i sig selv også bare en MoveValidationStrategy som skal "slås" fra når den specielle tilstand opnåes. En løsning ville være at tilføje en klasse, der implementerer MoveValidationStrategy interfacet, som vælger hvilke MoveValidationStrategies der skal bruges ved at kigge på terningernes øjne (State pattern). Vi har en god kode-genbrug og vi ændrer ikke i vores eksisterende kode. Acey-Ducey: Denne spilvariant er desværre ikke helt ligetil da vi ikke kan implementere dette så hurtigt som Shesh-Besh da vi først er nødt til at refaktorisere. For det første så har vores nuværende spiltype en hård kobling på brikkernes start-position som nu skal til at variere. Brikkernes start-position bliver lige nu specificeret i BoardImpl's 'reset()' metode så en refaktorisering er nødvendig. En løsning til dette kunne være at lave et BoardSetupStrategy interface og lave to konkrete implementationer: StandardSetup og OffBoardSetup. Strategien kunne så gives med i BoardImpl's konstruktør. Lige nu er vores kobling på BoardImpl så stor at der ikke kan pilles ved den udefra overhovedet hvilket vi nu er interesseret i. I vores refaktorisering vil vi så flytte ansvaret for instansiering af et Board væk fra Game og over i vores AbstractFactory der opretter hele spillet. Vi får derved en højere grad fleksibilitet kun ved at flytte ansvaret en smule. Vores nuværende opdeling af Move-Validation regler er tilstrækkelig til at kunne udtrykke de fleste af Acey-deucy's regler på det område. Vi kommer dog i problemer når det gælder terningeslaget (1,2). For det første skal vi have tilføjet en interface-del der tillader spilleren at fortælle spillet hvilken terning han/hende vil vælge. (en sådan tilføjelse til MiniDraw

14 vil jeg ikke gå i detaljer med). Dernest har vores nuværende HotGammonGame implementation heller ikke support for "ekstra-tur" konceptet som vi også bliver nødt til at tilføje. Dette kunne gøres ved at tilføje en set-metode til Game-interfacet som i de konkrete implementationer vil sætte en "extra-turn" variabel. Er den over 0 vil nextturn() trække 1 fra variablen og lade den nuværende spiller få nyt slag. Denne metode skal så bruges af noget der holder øje med om nogle kriterier er opfyldt. Der er mange måder at gøre dette på, der kunne blandt andet bruges et nyt brug af strategy pattern med tilhørende interface. Der kan så laves konkrete implementation som f.eks. i dette tilfælde "12ExtraTurn" strategy eller i Backgammons tilfælde en "TwoEqualDicesExtraTurn" strategy. Opgave Hvis vi skal implementere SemiMon som et polymofisk design, så står vi med lidt af et dilemma, Vi kan arve fra enten Betamon, Gammamom eller Deltamon. Alle tre har elementer som vi skal bruge. Drejer sig primært om 3 metoder i game interfacet: nextturn() - som er korrekt i Gammamon move() - som er korrekt i Betamon winner() - som er korrekt i Deltamon med korrekt menes der at de er korrekte i forhold til Semimon. Desværre har vi kun et "skud i bøssen" når det kommer til arv, og valget om hvilken vi vælger at arve fra, skal bero på hvilken metode vi helst ikke vil implementere igen (eller copy paste for den sags skyld...). nextturn() er en relativ simpel metode at implementere, så der er ikke så meget ide i at arve fra Gammamon. move er en meget kompleks metode så den ville ikke være helt skidt at arve fra betamon. winner ligger lidt i mellem og er bestemt også en kandidat da vi skal skitsere 2 kandidater. Et andet problem er metoden getnumberofmovesleft(), der jo beror en del på om move vil tillade et træk eller ej. Den mest favorable løsning hvad angår arbejdsmængden er Betamon. Som pseudo kode vil den blive noget i den retning: class Semimon extends Betamon{ nextturn(){ /*implementationen fra Gammamon */ } } winner(){ /*implementationen fra Deltamon */ }

15 UML'en er da: hvis vi derimod vælger at arve fra Deltamon så ville den blive noget i den retning: class Semimon extends DeltaMon{ nextturn(){ /*implementationen fra Gammamon */ } } move(from, to){ /*implementationen fra Betamon */ } getnumberofmovesleft() { /*implementationen fra Betamon */ } UML'en er da: Opgave Som vi kunne se fra 4 så fik vi faktisk ikke ret meget kode genbrug ud af det, vi fik allerhøjst et multiple maintainence problem ud af det, og om muligt endnu værre, hvis en uforsigtig programmør pillede lidt i alphamon i forbindelse med en fejlrettelse, så kan der potentielt set opstå fejl i alle andre varianter. I polymofien stabler man alt ovenpå de nederste kasser. Hvis den nederste kasse går i stykker så vælter hele bundtet.. hårdt... Sammenlignet med vores kompositionelle design hvor vi kunne implementere ca. 7 linjers kode (hvis den komprimeres lidt), det er kodegenbrug af rang, og oven i det er koden ufattelig simpel kode, mod det polymorfiskedesigns mere komplekse kode som man rent faktisk skal tænke over.

16 Der er naturligvis en bagside ved medaljen, det polymorfiske design er meget nemt at overskue, der er ikke ret mange klasser, hvor vores kompositionelle design har en ti-fold flere klasser, hvilket gør det sværere at overskue. Navnene på klasserne bliver også langt mere komplekse hvilket i et stortset projekt gør codecompletion til en must. Der stilles således også visse editor krav. Ansvarsdelen i det polymorfiske design er på sin vis ret overskuelig set udefra ("Disse klasser har ansvar for alt") men det er i praksis én stor "blob" af ansvarsområder som er næsten umulig at håndtere når der kommer mange varianter af ens software. Det kompositionelle design har klart definerede ansvarsområder. Så hvis man kan overskue alle de mange klasser kompositionelt design giver, så er ansvarsområderne meget nemmere at overskue.

17 Sidste dsoftark aflevering Gruppe 14 December 19, Til validering af standard træk (dvs. der ikke er en checker i bar, for den respektive spiller, og han ikke vil flytte den til bear off). Vi betragter vores validering som en boolsk funktion med følgende parametre v( move, player, board-state, die-value), hvilket betyder at det er det vi har tilgængeligt at regne på. Vi startede med at definere en funktion dist(f,t) (from og to henholdsvis) der beregner afstanden mellem 2 felter. Som vores første slice i partitioneringen ligger de to tilfælde: dist(f, t) = dice value - Valid dist(f, t) dice value - Invalid f og t er afledt af move parametren. dist(f, t) = dice value dist(f, t) dice value Som en lille note så er en valid partitioner markeret med Som det næste definerede vi en color(c) funktion der giver farven på et felt, vi kan så opdele vores partitionering yderligere Med hensyn til color, så vil vi også gerne skelne mellem farven på spilleren, på den måde om han er none eller ej. vores første farve inddeling bliver derfor player = none som er invalid. Den næste måde som vi vil skelne mellem farver på, er om felt farven på from feltet er det samme som spilleren eller ej. det giver os 2 yderligere: color(f) player player none - Invalid color(f) = player player none - Valid 1

18 color(f) player player NONE color(f) = player player NONE player = NONE dist(f, t) = dice value dist(f, t) dice value Det sidste vi skal have checket er om et felt er blocked (om der står 2 af fjendens brikker der eller mere). I vores partitionering har vi nu lige præcis en partition der er valid, den vil vi arbejde videre med, og efterlade de andre som de er (I dette eksempel bliver de restende 5 partitioner ikke valid af at vi finindeler dem). Vi definerer en ny funktion isblocked(f, p) der afgør om et felt er blocked ud fra et felt og en player, lidt mere detaljeret kunne den beskrives således: isblocked(f, p) = count(f) >= 2 color(f) p læg mærke til at vi brugte funktionen count, den tæller antallet af brikker på et felt. vi opdeler nu den valide partition i 2 nye, defineret ud fra: isblocked(f, player) - Invalid isblocked(f, player) - Valid dist(f, t) = dice value dist(f, t) dice value color(f) player player NONE color(f) = player player NONE isblocked(t, player) isblocked(t, player) Udfra denne partionering er vi nu endt op med en masse ækvivalensklasser. De er intuitivt disjunkte da enhver slice vi har lavet har været mere eller mindre binær, og begge tilfælde er dækket, alle tilfælde er dækket og der er ingen ækvivalensklasser der overlapper hinanden. player = NONE 2

19 Udfra ækvivalensklasserne skal vi have følgende tests: en Hvor terningen ikke matcher distancen brikken flyttes, men derudover er alle regler overholdt, dette tester klassen behøver en test i og da de alligevel vil fejle.. Vi kan så argumentere for at vi ikke I samtlige af de næste tests lader vi terninge værdien matche distancen. I denne test lader vi player være none, og udfører derefter et ellers helt legalt træk, den skulle gerne fejle, vi har således testet klassen. I den næste test prøver vi at flytte på modstanderens brik, det svarer til at teste klassen, der skal naturligvis også melde false. I næste test vil vi prøve at flytte en brik hen på et felt hvor den står 2 af modstanderens brikker. Denne test giver klassen, og er invalid. i den sidste test prøver vi at udføre et fuldstændig legalt træk, der er valid, og så burde vi jo også få en true på den. Dette tester Det er diskutabelt om der burde have været en finere inddeling, f.eks. med blocked tilfældet, kunne man har haft mere end 2 brikker på feltet, netop 2 brikker på feltet og mindre en 2 brikker på feltet 2 Her skal vi lave en analyse af situatinen når en spiller har en brik på bar feltet. Det jo åbentlyst at vi ikke behøver at starte forfra men kan egentlig blot forfine vore nuværende partitionering, da regelsættet her blot er en stramning af det foregående. Vi vil derfor kun kigge på den valide partion fra det foregående, og så må man tænke sig til at den kan copy pastes oven på det tilsvarende felt fra opgave 1. Her kan vi igen bruge count funktionen, denne benytter vi til at tælle antallet af brikker i bar (vi har valgt ikke at skelne, det er nødagtig det samme hvadenten du er rød eller sort. vi har således 2 tilfælde: count(bar) = 0 og count(bar) > 0 Hvis vi er i det første tilfælde så er det egentlig blot reglerne fra opgave 1 der gælder (partitionen er altså lovlig) det andet tilfælde skal dog subinddeles lidt. Reglerne siger at hvis der ligger en brik på bar så skal den flyttes inden en anden må flyttes. Det giver jo anledning til 2 partionener: from = bar - Valid from bar - Invalid Vi ender således op med denne partition: count(bar) > 0 from = bar count(bar) > 0 from bar count(bar) = 0 Denne repartitionering giver kun anledning til 2 ekstra test: Et normalt valid move, hvor der dog ligger en brik i bar. Denne skal give false, og den tester. I den sidste test ligger der en brik på bar, og den flyttes helt legalt, Dette tester 3

20 . behøver vi ikke teste da den allerede er testet i opgave 1. 3 Ved sammenligning af vores eksisterende testcases blev det noget af en overraskelse, da det faktisk kun var 3-4 af ækvivalens klasserne der var dækket ind, af nye test s har vi fået følgende: playerisnonebutvalidmove - der dækker rightdistcolornotplayer1of2 - der dækker rightdistcolornotplayer2of2 - der dækker MoveFromColorNONE - der dækker MoveTooFar - der dækker MoveTooShort - der dækker resten var allerde dækket. Det er vores erfaring at denne tilgang både giver færre og betydeligt bedre testcases end den knopskydnings metode vi har brugt før. 4

dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 Rapport til a. 1 'TDD rytmen'

dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 Rapport til a. 1 'TDD rytmen' dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 'TDD rytmen' Rapport til a. 1 Vi bruger gennem vores arbejde, rytmen fra Test Driven Development-paradigmet. Quickly add a test Run tests

Læs mere

Spilstrategier. 1 Vindermængde og tabermængde

Spilstrategier. 1 Vindermængde og tabermængde Spilstrategier De spiltyper vi skal se på her, er primært spil af følgende type: Spil der spilles af to spillere A og B som skiftes til at trække, A starter, og hvis man ikke kan trække har man tabt. Der

Læs mere

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

Undo Jo flere jo bedre! 1/9

Undo Jo flere jo bedre! 1/9 Undo Jo flere jo bedre! + 1/9 Indholdsfortegnelse Målgruppen.... Side 3 Redegørelse for spillet...side 4 Produktionen..Side 6 Dokumentation for spiltest....side 7 Spilvejledning......Side 8 Regelhæfte.....Side

Læs mere

Spilstrategier. Indhold. Georg Mohr-Konkurrencen. 1 Vindermængde og tabermængde 2. 2 Kopier modpartens træk 4

Spilstrategier. Indhold. Georg Mohr-Konkurrencen. 1 Vindermængde og tabermængde 2. 2 Kopier modpartens træk 4 Indhold 1 Vindermængde og tabermængde 2 2 Kopier modpartens træk 4 3 Udnyt modpartens træk 5 4 Strategityveri 6 5 Løsningsskitser 7 Spilstrategier De spiltyper vi skal se på her, er primært spil af følgende

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

Spilstrategier, Kirsten Rosenkilde, september 2007 1. Spilstrategier

Spilstrategier, Kirsten Rosenkilde, september 2007 1. Spilstrategier Spilstrategier, Kirsten Rosenkilde, september 2007 1 1 Spilstrategier Spilstrategier De spiltyper vi skal se på her, er spil af følgende type: Spil der spilles af to spillere A og B som skiftes til at

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Hukommelsesspil. Introduktion. Scratch

Hukommelsesspil. Introduktion. Scratch Scratch 2 Hukommelsesspil All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

Mircobit Kursus Lektion 3 (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.)

Mircobit Kursus Lektion 3   (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.) Mircobit Kursus Lektion 3 http://microbit.org/ (Du skal her vælge Lets Code Og nederst Microsoft Block Editor.) I sidste lektion var der en opgave man selv skulle prøve at løse. Man skulle lave et tabel

Læs mere

Begreber om Godt Software

Begreber om Godt Software Begreber om Godt Software Maintainability (vedligeholdelse): Softwarens evne til at blive ændret (funktionalitet, rettet, forbedrelser, miljø, krav). - Analyserbart: Evnen til at blive fejldiagnosticeret,

Læs mere

Matematikken i kunstig intelligens Opgaver om koordinerende robotter

Matematikken i kunstig intelligens Opgaver om koordinerende robotter Matematikken i kunstig intelligens Opgaver om koordinerende robotter Thomas Bolander 2. juni 2018 Vejledning til opgaver Opgave 1 kan eventuelt springes over, hvis man har mindre tid. De resterende opgaver

Læs mere

Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER

Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER Thomas Bolander 25. april 2018 Vejledning til opgaver Opgave 1 kan eventuelt springes over, hvis man har mindre tid. De resterende

Læs mere

Indhold: Spillebræt 5 hære med 40 infanteri-, 12 kavaleri- og 8 artillerienheder i hver 43 kort 2 referencekort 5 terninger

Indhold: Spillebræt 5 hære med 40 infanteri-, 12 kavaleri- og 8 artillerienheder i hver 43 kort 2 referencekort 5 terninger REGLER FOR 2 TIL 5 SPILLERE, FRA 10 ÅR S P I L L E T O M V E R D E N S H E R R E D Ø M M E T 2010 Hasbro. Alle rettigheder forbeholdt. Produceret af: Hasbro SA, Route de Courroux 6, 2800 Delemont CH Repræsenteret

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

R15 PaSOOS (22/04-2008)

R15 PaSOOS (22/04-2008) HotTargui projektet - Kasper Bo Larsen & Martin Skov Test case Status Rækkefølge Spillet er slut efter 25 runder færdig (MSN) Rød spiller starter færdig (MSN) Grøn kommer efter rød, blå efter grøn, gul

Læs mere

Undersøgende aktivitet om primtal. Af Petur Birgir Petersen

Undersøgende aktivitet om primtal. Af Petur Birgir Petersen Undersøgende aktivitet om primtal. Af Petur Birgir Petersen Definition: Et primtal er et naturligt tal større end 1, som kun 1 og tallet selv går op i. Eksempel 1: Tallet 1 ikke et primtal fordi det ikke

Læs mere

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet Sikre Beregninger Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Introduktion I denne note skal vi kigge på hvordan man kan regne på data med maksimal sikkerhed, dvs. uden at kigge på de tal

Læs mere

Fang Prikkerne. Introduktion. Scratch

Fang Prikkerne. Introduktion. Scratch Scratch 2 Fang Prikkerne All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club. Introduktion

Læs mere

Lærervejledning. Beskriv ideen med spillet i plenum, herunder dets funktion og de tre vigtigste pointer med spillet:

Lærervejledning. Beskriv ideen med spillet i plenum, herunder dets funktion og de tre vigtigste pointer med spillet: Lærervejledning Få ord på trafikken! Har jeres skole en trafikpolitik? Hvis ikke, kan et spil TrafikPanik være det første skridt. Her kan du læse om spillet, og hvordan du bruger det i trafikundervisningen.

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Objekters tilstand og opførsel BlueJ og Greenfoot Java Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Forskellige slags variabler Afleveringsopgave:

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Hvorfor skal vi bruge objekt orienteret databaser?

Hvorfor skal vi bruge objekt orienteret databaser? OODBMS Vs. RDBMS 1 Indholdsfortegnelse Hvorfor skal vi bruge objekt orienteret databaser?... 3 OODBMS i erhvervslivet... 4 Bagsiden af medaljen... 5 OODBMS i praksis... 6 Konklusion... 8 2 Hvorfor skal

Læs mere

Systematisk testning af program til udregning af mellemskat

Systematisk testning af program til udregning af mellemskat Systematisk testning af program til udregning af mellemskat Indledning I denne opgave vil vi definere passende cases til systematisk black-box test af et program til beregning af mellemskat. Vi har valgt

Læs mere

Tip til 1. runde af Georg Mohr-Konkurrencen Kombinatorik

Tip til 1. runde af Georg Mohr-Konkurrencen Kombinatorik Tip til 1. runde af - Kombinatorik, Kirsten Rosenkilde. Tip til 1. runde af Kombinatorik Her er nogle centrale principper om og strategier for hvordan man tæller et antal kombinationer på en smart måde,

Læs mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere

Partners er et spil med mange klare regler og en masse uskrevne regler, som varierer alt efter, hvem man spiller sammen med.

Partners er et spil med mange klare regler og en masse uskrevne regler, som varierer alt efter, hvem man spiller sammen med. DM-GUIDEN 2. udgave Forord Velkommen til DM i Partners! Partners er et spil med mange klare regler og en masse uskrevne regler, som varierer alt efter, hvem man spiller sammen med. Ideen med spillet har

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13%

16/04/12 50% 50% Waveform Chart Waveform Graph XY Graph Indicator Graph 33% 17% 88% 13% Samuel Alberg Thrysøe, PhD, PostDoc, Kontakt info: Email: sat@iha.dk, Tlf: +45 25533552 2 4. 5 Waveform Chart Waveform Graph XY Graph Indicator Graph 4. 33% Waveform Chart Waveform Graph XY Graph Indicator

Læs mere

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot En kort introduktion til Programmering og Objekt-Orientering Greenfoot er et computer-program, som kan benyttes til at skrive andre computer-programmer, i et programmeringssprog kaldet Java.

Læs mere

Spillets formål og opsætning

Spillets formål og opsætning Steffen Benndorf og Reinhard Staupe Kun for sjov! Spillere: 2-6 Alder: 8 år og op Spilletid: ca. 15 minutter Spillets formål og opsætning Hver spiller for sit eget ark papir (der er seks forskellige ark)

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste Denne guide er oprindeligt udgivet på Eksperten.dk Indkøbsvogn i PHP I denne artikel vil jeg prøve at lave en indkøbskurv som let kan udvides, og som ikke er svær at forstå. Det er bedst med viden om OOP(klasser),

Læs mere

Løsning af simple Ligninger

Løsning af simple Ligninger Løsning af simple Ligninger Frank Nasser 19. april 2011 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk:

Læs mere

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge: Side 1 af 5 Ide med Diff. Min ide med differenertierings modulet er at lave et program som kan vise 3d objekter, og få lavede en konverter som kan konventer 3ds filer over til noget som flash kan bruge.

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Elasund Rules Forberedelse Marker byggeområdet

Elasund Rules Forberedelse Marker byggeområdet Elasund Rules År efter frygtløse søfarere opdagede og etablerede øen Catan voksede befolkningstallet konstant. Kolonister dukkede op på øen og langs kysten og der opstod en uundværlig handel mellem dem.

Læs mere

Michael Jokil 11-05-2012

Michael Jokil 11-05-2012 HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...

Læs mere

Programming Project Report. Programmeringsprojekt i PaSOOS fagpakken. 20097733 Bobby Nielsen; 20097626 Jon Rune Jørgensen

Programming Project Report. Programmeringsprojekt i PaSOOS fagpakken. 20097733 Bobby Nielsen; 20097626 Jon Rune Jørgensen Programming Project Report Programmeringsprojekt i PaSOOS fagpakken Underviser: Henrik Bærbak Christensen 08-06-2011 Indhold 1 Udvikling og test af binær søgning... 2 1.1 TDD på binær søgning... 2 1.1.1

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Lad os som eksempel se på samtidigt kast med en terning og en mønt:

Lad os som eksempel se på samtidigt kast med en terning og en mønt: SANDSYNLIGHEDSREGNING Stokastisk eksperiment Et stokastisk eksperiment er et eksperiment, hvor vi fornuftigvis ikke på forhånd kan have en formodning om resultatet af eksperimentet Til gengæld kan vi prøve

Læs mere

Computerspil Dokumentation

Computerspil Dokumentation Computerspil Dokumentation Vi startede med at læse om de forskellige typer af computerspil, hvorefter vi blev enige om enten at arbejde med RPG (Role- playing game) eller et spil lig flappybird (et platformer.spil,

Læs mere

Mircobit Kursus Lektion 4 (Du skal her vælge Lets Code Og herefter Block Editor.)

Mircobit Kursus Lektion 4   (Du skal her vælge Lets Code Og herefter Block Editor.) Mircobit Kursus Lektion 4 http://microbit.org/ (Du skal her vælge Lets Code Og herefter Block Editor.) I sidste lektion var der en opgave man selv skulle prøve at løse. I skulle lave et stop ur man kunne

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

π er irrationel Frank Nasser 10. december 2011

π er irrationel Frank Nasser 10. december 2011 π er irrationel Frank Nasser 10. december 2011 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold 1 Introduktion

Læs mere

Digital Choice 12 + MERE, MERE, MERE!

Digital Choice 12 + MERE, MERE, MERE! MERE, MERE, MERE! Digital Choice Gå ind på mytpchoice.dk for at downloade flere minikategorier. Der er mere end 100 minikategorier at vælge mellem, bl.a. Helte & Heltinder, Science Fiction & Fantasy, Rejser

Læs mere

Side 1 af 8. Vejledning

Side 1 af 8. Vejledning Side 1 af 8 Vejledning Art. nr. 2079006 Pedalo - Stort spillebræt - spilsamling Læs og opbevar venligst vejledningen De efterfølgende sider indeholder spilanvisning til disse spil: Generel Information:

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere

Udfordringer og problemstillinger. En liste over de udfordringer og problemstillinger, der er ved Java og JEE udvikling

Udfordringer og problemstillinger. En liste over de udfordringer og problemstillinger, der er ved Java og JEE udvikling Java og JEE 1 2 Udfordringer og problemstillinger En liste over de udfordringer og problemstillinger, der er ved Java og JEE udvikling 3 Generelt om Java og JEE 4 Generelt, I Man undervurderer hvor mange

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden. Programmering 1999 Forelæsning 5, tirsdag 14. september 1999 Oversigt Mere om klasser og objekter Klassefelter: static Konstante felter: final Indkapsling og synlighed: private og public Overlæsning af

Læs mere

Gennemsnit og normalfordeling illustreret med terningkast, simulering og SLUMP()

Gennemsnit og normalfordeling illustreret med terningkast, simulering og SLUMP() Gennemsnit og normalfordeling illustreret med terningkast, simulering og SLUMP() John Andersen, Læreruddannelsen i Aarhus, VIA Et kast med 10 terninger gav følgende udfald Fig. 1 Result of rolling 10 dices

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528)

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528) Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM58) Institut for Matematik & Datalogi Syddansk Universitet Torsdag den 7 Januar 010, kl. 9 13 Alle sædvanlige hjælpemidler (lærebøger,

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

Skak, backgammon & dam

Skak, backgammon & dam Skak, backgammon & dam da Spillevejledning Varenummer: 349 582 Made exclusively for: Tchibo GmbH, Überseering 18, 22297 Hamburg, Germany www.tchibo.dk Tchibo GmbH D-22290 Hamburg 92630AB6X6VII 2017-07

Læs mere

Bumser og Drager. Antal spillere: 3-5 Alder: 16+ Spilletid: 40min+

Bumser og Drager. Antal spillere: 3-5 Alder: 16+ Spilletid: 40min+ Bumser og Drager Antal spillere: 3-5 Alder: 16+ Spilletid: 40min+ Spillet indeholder: 1 Spilplade (T-shirt) 1 Figur 8 Røde terninger 60 Dårlig Ide kort 6 Karakterplader 6 Vinder emblemer 12 Eventyrkort

Læs mere

Flere ligninger med flere ukendte

Flere ligninger med flere ukendte Flere ligninger med flere ukendte Frank Villa 14. februar 2012 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her.

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

Læs mere

Baggrundsnote om logiske operatorer

Baggrundsnote om logiske operatorer Baggrundsnote om logiske operatorer Man kan regne på udsagn ligesom man kan regne på tal. Regneoperationerne kaldes da logiske operatorer. De tre vigtigste logiske operatorer er NOT, AND og. Den første

Læs mere

Du trækker 2 gange, hvis begge spillere bekender begge gange, så er der kun 1 trumf tilbage, og du vil ALTID vinde.

Du trækker 2 gange, hvis begge spillere bekender begge gange, så er der kun 1 trumf tilbage, og du vil ALTID vinde. Februar 2018. Spil 1. Løsning på quiz. Løsning på quiz fra januar 2018. 1. Spar es, hjerter 2, 3, 4, 5 og 6, ruder konge, dame og knægt. Begge dine modspillere har bekendt 1. udspil. 2. Spar es, klør 2,

Læs mere

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

Læs mere

Simulering af stokastiske fænomener med Excel

Simulering af stokastiske fænomener med Excel Simulering af stokastiske fænomener med Excel John Andersen, Læreruddannelsen i Aarhus, VIA Det kan være en ret krævende læreproces at udvikle fornemmelse for mange begreber fra sandsynlighedsregningen

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Dokumentation af programmering i Python 2.75

Dokumentation af programmering i Python 2.75 Dokumentation af programmering i Python 2.75 Af: Alexander Bergendorff Jeg vil i dette dokument, dokumentere det arbejde jeg har lavet i løbet opstarts forløbet i Programmering C. Jeg vil forsøge, så vidt

Læs mere

Lavet af Danni jensen og David Olsen

Lavet af Danni jensen og David Olsen Projekt Delfin Lavet af Danni jensen og David Olsen 19/5-2008 Indholdsfortegnelse. Side 1: Indholdsfortegnelse og forord. Side 2: Kravsliste. Side 3: Use Case Model. Side 4: Formandens aktørbeskrivelse

Læs mere

Rolf Fagerberg. Forår 2013

Rolf Fagerberg. Forår 2013 Forår 2013 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: DM536 og DM537 Timer: 50% forelæsninger, 50% øvelser Forudsætninger: DM536 og DM537 Eksamenform: Skriftlig eksamen: Timer: 50% forelæsninger,

Læs mere

Lederens ressourceoptimering

Lederens ressourceoptimering Lederens ressourceoptimering 44568 5S Sortere Sætte i orden Skure Standardisere Selvdisciplin 1 Derfor skal der indføres 5S Eksempler på forventede resultater ved succesfuld 5S implementering: Reducerede

Læs mere

Odder og Samsø biavl Nyhedsbrev om biavl for Odder og Omegns Biavlerforening Specialnummer 11. maj 2013 nr. 44

Odder og Samsø biavl Nyhedsbrev om biavl for Odder og Omegns Biavlerforening Specialnummer 11. maj 2013 nr. 44 Odder og Samsø biavl Nyhedsbrev om biavl for Odder og Omegns Biavlerforening Specialnummer 11. maj 2013 nr. 44 Emnerne: Specialnummer for nye biavlere Den nye bifamilie Gamle fodertavler Udvidelsen Honningmagasiner

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Collegetable.dk præsenterer. College Table grøn

Collegetable.dk præsenterer. College Table grøn Collegetable.dk præsenterer College Table grøn 1) Opstilling/udstyr 1.1) Der spilles 2 mod 2. 1.2) Der spilles med 10 kopper i pyramideform. 4 bagerst. 3 næst bagerst. Så 2 og én cup forrest. 1.3) 66 cl.

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Villa 2. maj 202 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold

Læs mere

Mircobit Kursus Lektion 2

Mircobit Kursus Lektion 2 Mircobit Kursus Lektion 2 I denne lektie skal vi arbejde videre med lille mini computer kaldt microbit. Du kan finde Simulatoren & Programmet til micobit her: http://microbit.org/ (Du skal her vælge Lets

Læs mere

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX IT -Eksamen Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX [Vælg en dato] Indhold Indledning... 2 Teori... 3 Hvorfor dette design... 4 Produktet... 4 Test og afprøvning... 9 Konklusion... 10 Indledning

Læs mere

Rekursion C#-version

Rekursion C#-version Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 20. april, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Projekt 9.5 Racefordomme i USA og Simpsons paradoks (B og A)

Projekt 9.5 Racefordomme i USA og Simpsons paradoks (B og A) Projekt 9.5 Racefordomme i USA og Simpsons paradoks (B og A) (Data er hentet fra M. Radelet, "Racial characteristics and imposition of death penalty", American Sociological Review, 46 (1981), pp 918-927

Læs mere

DM13-1. Obligatoriske Opgave - Kredsløbs design

DM13-1. Obligatoriske Opgave - Kredsløbs design DM13-1. Obligatoriske Opgave - Kredsløbs design Jacob Christiansen moffe42@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 1. Opgaven Opgaven består i at designe et kredsløb,

Læs mere

Lineære sammenhænge, residualplot og regression

Lineære sammenhænge, residualplot og regression Lineære sammenhænge, residualplot og regression Opgave 1: Er der en bagvedliggende lineær sammenhæng? I mange sammenhænge indsamler man data som man ønsker at undersøge og afdække eventuelle sammenhænge

Læs mere

Mattip om. Statistik 2. Tilhørende kopier: Statistik 3, 4 og 5. Du skal lære om: Faglig læsning. Chance og risiko. Sandsynlighed

Mattip om. Statistik 2. Tilhørende kopier: Statistik 3, 4 og 5. Du skal lære om: Faglig læsning. Chance og risiko. Sandsynlighed Mattip om Statistik Du skal lære om: Faglig læsning Kan ikke Kan næsten Kan Chance og risiko Sandsynlighed Observationer, hyppighed og frekvens Gennemsnit Tilhørende kopier: Statistik, og mattip.dk Statistik

Læs mere

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af)

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Nasser 9. april 20 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her.

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Scratch. - introduktionshæfte

Scratch. - introduktionshæfte Scratch - introduktionshæfte Opret bruger 2 Det første, du skal gøre er at oprette dig som bruger, så dine projekter bliver gemt. Gå ind på scratch.mit.edu/ Vælg knappen Meld dig ind i Scratch i den øverste

Læs mere

Daglig brug af JitBesked 2.0

Daglig brug af JitBesked 2.0 Daglig brug af JitBesked 2.0 Indholdsfortegnelse Oprettelse af personer (modtagere)...3 Afsendelse af besked...4 Valg af flere modtagere...5 Valg af flere personer der ligger i rækkefølge...5 Valg af flere

Læs mere

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Programmering C Eksamensprojekt Lavet af Suayb Köse & Nikolaj Egholk Jakobsen Indledning Analyse Læring er en svær størrelse. Der er hele tiden fokus fra politikerne på, hvordan de danske skoleelever kan

Læs mere

Spil Rapport. Spil lavet i GameMaker. Kevin, Mads og Thor 03-02-2011

Spil Rapport. Spil lavet i GameMaker. Kevin, Mads og Thor 03-02-2011 Spil Rapport Spil lavet i GameMaker Kevin, Mads og Thor 03-02-2011 Indholdsfortegnelse Indledning... 2 HCI... 2 Planlægning / Elementær systemudvikling... 2 Kravspecifikationer... 4 Spil beskrivelse...

Læs mere

Opgave: BOW Bowling. Rules of Bowling. danish. BOI 2015, dag 1. Tilgængelig hukommelse: 256 MB. 30.04.2015

Opgave: BOW Bowling. Rules of Bowling. danish. BOI 2015, dag 1. Tilgængelig hukommelse: 256 MB. 30.04.2015 Opgave: BOW Bowling danish BOI 0, dag. Tilgængelig hukommelse: 6 MB. 30.04.0 Byteasar er fan af både bowling og statistik. Han har nedskrevet resultaterne af et par tidligere bowling spil. Desværre er

Læs mere