732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Relevanta dokument
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Klassdeklaration. Metoddeklaration. Parameteröverföring

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Objektorienterad Programmering (TDDC77)

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

F4. programmeringsteknik och Matlab

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

TDIU01 - Programmering i C++, grundkurs

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

TENTAMEN OOP

Anteckningar 1: Grundläggande saker

Parameteröverföring. Exempel. Exempel. Metodkropp

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Programmering A. Johan Eliasson

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsning 3-4 Innehåll

TDDC77 Objektorienterad Programmering

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Objektorienterad Programmering (TDDC77)

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Typkonvertering. Java versus C

Tentamen FYTA11 Javaprogrammering

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

SMD 134 Objektorienterad programmering

TENTAMEN OOP

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 2, vecka 8: Repetition

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Programmering för språkteknologer II, HT2011. Rum

Grundläggande programmering med C# 7,5 högskolepoäng

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

PROGRAMMERING-Java Omtentamina

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Att skriva till och läsa från terminalfönstret

2D1339 Programkonstruktion för F1, ht 2004

C++ Slumptalsfunktioner + switch-satsen

OOP Objekt-orienterad programmering

PROGRAMMERING-JAVA TENTAMINA

Tentamen , Introduktion till Java, dtaa98, dtea53

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Föreläsning 6: Metoder och fält (arrays)

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Tentamen OOP

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Skillnader mellan Python och Java

Programmeringsteknik I

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

OOP Objekt-orienterad programmering

Föreläsning 8: Exempel och problemlösning

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Användarhandledning Version 1.2

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Objektorienterad Programmering (TDDC77)

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Arrayer. results

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Språket Python - Del 2 Grundkurs i programmering med Python

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Funktionens deklaration

Språket Python - Del 1 Grundkurs i programmering med Python

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

OOP Tenta

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Transkript:

732G11 Linköpings universitet 2011-02-15

1 2 3 4

Extrapass Extrapass håller på att bokas. Blir 3-4 st. och öppet för alla. Mer info på kursmailen när bokningen är klar.

i Java En funktion i Java... public static int f( int x){ return (3 * x + 4); }... Kallas även metoder. Kan ha sidoeffekter. (Kan påverka variabler utanför funktionen, förutom att returnera ett värde.) Kan vara icke-deterministiska. (Samma argument ger inte alltid samma resultat.)

Tydligare kod En metod har alltid ett namn. Ofta är det enklare att förstå vad som händer när man ser namnet än när man ser den kod som faktiskt körs. Namnet kan vara mer allmänt (abstrakt), och underlättar en översiktlig läsning av programmet. Tydlighet... if ( grade >= 3 && grade < 5) { grade ++; }... grade = increasegradebyone ( grade );

Kortare kod Eftersom man kan använda koden igen så behöver man inte upprepa sig så ofta. Arbetsbesparande public static int getinteger ( int min, int max int n; do{ n = in. nextint (); } while ( n < min n > max ); return n; }

Att skapa en metod En metod... // Ökar ett tal med ett public static int increasebyone ( int value ){ int bigvalue = value + 1; return bigvalue ; } public static void main ( String [] args ){ System. out. println ( increasebyone (41)); }...

Parametrar Fungerar som variabler, men de måste tilldelas ett värde när funktionen körs. Man brukar säga att man skickar med värden till tunktionen. Precis som vanliga variabler måste de ha både typ och namn. Efter att metoden är slut glöms parametrar och lokala variabler bort. Primitiva typer kopieras, medan referenstyper (läs Arrayer) delar på samma värde.

Resultatet av att köra en funktion. Kan vara void: (inget resultat genereras). Returvärden Anges med nyckelordet return: ex: return värde; När return körs avslutas funktionen (även om man inte kört färdigt den. För funktioner som inte returnerar något värde kan man fortfarande köra return; för att avsluta funktionen.

Metodanrop En metod anropas genom att skriva funktionsnamnet(parameter1, parameter2,...) Om funktionen returnerar ett värde av rätt typ kan funktionsanropet användas som det värdet: int a = beräkna(3, 7) + 4; Om du vill anropa metoder i andra filer (klasser) måste du ange var de ligger: Klass.metod(...) exempelvis Math.random().

Javakod Rövarspråket String word ; do { word = in. nextline (); for ( int i =0; i< word. length (); i ++){ char letter = word. charat ( i); if ( letter == a letter == e letter == i letter == o letter == u letter == y letter == å letter == ä letter == ö ) { print ( letter ); } else { print ( letter + "o" + letter ); } } while (! word. equals (" quit " ));

Rövarspråket Javakod med metoden isvowel() do{ String word = in. nextline (); for ( int i =0; i< word. length (); i ++){ char letter = word. charat ( i); if ( isvowel ( letter )) { print ( letter ); } else { print ( letter + "o" + letter ); } } while (! word. equals (" quit " ));

Rövarspråket Metoden isvowel() static boolean isvowel ( char letter ) { return letter == a letter == e letter == i letter == o letter == u letter == y letter == å letter == ä letter == ö ; }

Punktnotation class Prog { static String text = " ABCDEF "; } public static void main ( String [] args ) { String text = " 123456 "; System. out. println ( text. charat (5)); System. out. println ( Prog. text. charat (5)); }

I vilken ordning sker det? Evalueringsordning class Prog { static int square ( int a) { return a*a; } static int average ( int a, int b) { return (a+b )/2; } public static void main ( String [] args ) { println ( square (5*4-15)* average (8+2, 2*2)) } }

Evalueringsordning println(square(5*4-15)*average(8+2, 2*2)); println(square(20-15)*average(8+2, 2*2)); println(square(5)*average(8+2, 2*2)); println(25*average(8+2, 2*2)); println(25*average(10, 2*2)); println(25*average(10, 4)); println(25*7); println(175);

Evalueringsordning foo(3*2+3).substring(0, 6).substring(2, 3*(5+3)/6) foo(6+3).substring(0, 6).substring(2, 3*(5+3)/6) foo(9).substring(0, 6).substring(2, 3*(5+3)/6) 012345678.substring(0, 6).substring(2, 3*(5+3)/6) 012345.substring(2, 3*(5+3)/6) 012345.substring(2, 3*8/6) 012345.substring(2, 24/6) 012345.substring(2, 4) 23

En snabbgenomgång av exempelduggan.

Förklara vad kompilator-steget gör. Vilka filer används/skapas av java-kompilatorn (javac) och vad är de olika filerna till för? (2p) a)

Rita även en översiktsbild över kompilerings-/körningsprocessen (1p). b)

Ordna följande datatyper i storleksordning, minst först. (1p) byte long int short a)

Är följande tilldelning giltig? Motivera ditt svar med hjälp av de ingående datatyperna (2p). Tilldelningen float a = 2. 0; b)

Förklara varför följande kod antagligen är felaktig (1p). (funktionen gettext() existerar och.) fel? String s = " Hej "; String t = gettext (); if (s == t) { // Gör något } c)

Skriv kod för att skapa en array (fält) av exakt 300 int. (1p) d)

Skriv kod som avrundar en float-variabel som heter a till närmaste heltal. (1p) e)

Förklara vard nyckelordet break gör generellt. Förklara även varför det nästan alltid används i switch-satser. (1p) a)

Skriv en for-loop som itererar igenom och skriver ut alla float i arrayen (fältet) som heter values. (2p) b)

Förklara tydligt vad ett block är och hur det används (1p). c)

Förklara vad main-metoden är och hur den används (1p). d)

Förklara begreppet överlagring och ge ett praktiskt kodexempel (1p). a)

Måste alla funktioner innehålla satsen return? red ut begreppen och förklara kort och koncist i vilka fall det gäller / inte gäller. (2p) b)

Förklara tydligt de olika delarna i funktionshuvudet (3p). c)

Ett riktigt program Ett betydligt större exempel än vad ni sett tidigare, men gärna ett koncept ni känner igen. Den enda önskningen på områden att repetera har varit tvådimensionella fält, så jag har valt exempel efter det. Alla gillar spel.

En tom spelplan med rutor. Spelarna turas om att sätta ut X och 0 för att markera tagna rutor. Den spelare som först tar 5 rutor i rad (horizontellt, vertikalt eller diagonalt) vinner. Del av luffarschack-spel ----------- X ----------- X 0 0 ----------- X -----------

Spela ett snabbparti luffarschack. Men, ingen får fylla i sina egna drag. Indexera rutorna från 0 till m kolumner och från 0 till n rader. Förklara för motspelaren vilket drag du vill göra genom att ange koordinaterna för rutan du vill ta, ex. (3, 5).

Skriva ut en spelplan till skärmen. Läsa in ett drag, läsa om ifall ogiltigt. Avgöra om ett inläst drag är giltigt. Funktionalitet Automatiskt växla mellan X och 0 under spelets gång. Antal rader/kolumner ska kunna väljas fritt utan att resten av koden påverkas. Avgöra om någon har vunnit. Tydliga textmeddelanden som instruerar användaren vad hon ska göra.

Hur representerar vi spelets data i datorn? Hur representerar vi spelets data när vi skriver ut till skärmen? Kan man återanvända och ha samma representation i de båda fallen? Vad är en bra/dålig representation?

, idé 1 En variabel per ruta: rutar0c0, rutar0c1, rutar0c2... Bra / dåligt? När datorn jobbar med data? När data ska skrivas ut? Hur väljer man vilken variabel man ska tilldela utifrån inmatade koordinater? Hur avgör man vilka rutor som ligger intill varnadra? Hur hanterar man ändrad storlek på spelplanen?

, idé 2 En enda lång textsträng innehållande X, 0, mellanslag och nyrad? Bra / dåligt? När datorn jobbar med data? När data ska skrivas ut? Nu kan vi direkt räkna ut vilken position som ska hämtas utifrån givna koordinater. Men det blir lite klutigt att lägga in nya drag. Hur avgör man vilka rutor som ligger intill varnadra? Hur hanterar man ändrad storlek på spelplanen?

, idé 3 Tvådimensionellt fält av char, innehållande X, 0, mellanslag? Bra / dåligt? När datorn jobbar med data? När data ska skrivas ut? Nu kan vi direkt räkna ut vilken position som ska hämtas utifrån givna koordinater, och ändra värdet utan problem. Hur avgör man vilka rutor som ligger intill varnadra? Hur hanterar man ändrad storlek på spelplanen?

, idé n+1 Det finns många fler sätt att representera spelplanen.

Här valdes char. För/nackdelar? Går att skriva ut som de är! av drag

2D-Arrayer På samma sätt som man kan skapa en array med en dimension (värden på rad) kan man skapa arrayer med två dimensioner (flera rader). Fungerar på precis samma sätt, men man måste använda två set av hakparenteser för att ange de två koordinaterna. Jämför med koordinaterna i luffarschack-spelet tidigare.

Spelet drivs av en sk. spel-loop. en är egentligen två loopar. Den yttre låter användaren spela spelet flera gånger. Den inre repeterar lägg-drag-funktionaliteten inom ett spel. Skissa din egen spel-loop.

Initieraing Den första delen av koden är mest till för att göra inställningar och se till att allt är i ett bra startläge. Här styrs storleken på spelplanen. Här finns även en funktion för att tömma spelplanen.

Skärmutskrift - printgame() Använder nästlade loopar för att iterera över indexen i båda dimensionerna. Bugg: Hitta den!... hur blir det med index > 10?

Läsa in drag - putmove() Hämtar ett drag från användaren (flera gånger om så behövs). Lägger draget på spelplanen. Kontrollerar om draget var ett vinnande drag.

Kontrollera om spelaren vunnit - winningmove() Utgår från den lagda brickan. Den är alltid 1 i rad. Summerar sedan den nyss lagda brickan med alla brickor av samma typ åt två motsatta håll (exempelvis uppåt och nedåt). Om summan blir 5 så har spelaren vunnit. Bygger nästan helt på funktionen countmarkers(row, column, deltarow, deltacolumn).

Räkna brickor - countmarkers() Utgår från den lagda brickan och delta, dvs förändring i x- och y-led. Om punkten p+delta är spelarens bricka så returneras 1 + antalet brickor som följer. Att låta en funktion anropa sig själv kan vara väldigt användbart. Det kallas rekursion.