Enligt studiehandboken är det meningen att man skall lägga ner i
genomsnitt ca 3-4 timmars självstudietid för varje övningspass,
utöver övningstiden. Om det finns någon ledig plats i en övningssal
under något annat övningspas än ditt eget så får du gärna gå dit
också (de studenter vars grupp har schemalagd övningstid får dock
förtur för hjälp) -- du kan se vilken grupp du tillhör genom att i
kommandofönstret skriva ptgroup
.
emacs
Den som använder emacs
som texteditor kan använda ett
antal snabb-kommandon som underlättar en del av arbetet under
övningarna:
Alt-4
: frågar efter ett programnamn, och skapar
ett huvudprogram med det givna namnet.
Alt-2
: ger en import-sats -- du får själv fylla
i sista delen.
Alt-p
: ger System.out.print
Alt-k
: ger Keyboard.next
Det enda sättet att verkligen lära sig programmera är att skriva program - på denna sida finns ett antal uppgifter som du kan öva på.
Skriv ett program som läser in en fil med namnen på ett antal orter (leta upp namnen på nätet - leta exempelvis upp alla orter i ett givet landskap). Programmet skall sedan gå igenom orterna och skriva ut dem med bokstäverna omkastade - användaren skall på kort tid som möjligt försöka gissa vilken ort det är.
Exempel på utskrift när man kör programmet:
DSTABÅ: båstad Rätt! (2.2 s) ÖLMAM: malmö Rätt! (2.0 s) ILAOTLLME: tomelilla Rätt! (6.3 s) VBJU: bjuv Rätt! (2.1 s) ROSÅPT: åstorp Rätt! (5.8 s) PFSARNOTSFAT: staffanstorp Rätt! (3.8 s)
Lösningsförslag finns här.
Spelplanen i "Inverso" består av ljusa och mörka prickar, och ser ut så här:
Användaren kan ändra färgen på prickarna genom att klicka på dem - ett klick på en prick gör att pricken, och dess närmaste grannar byter färg (dvs en ljus prick blir mörk, och vice versa).
Målsättningen med spelet är att se till att alla prickar blir ljusa.
Du kan rita prickarna i ett DotWindow
, och använda
useCircularDots
för att få cirklar:
w = new DotWindow(3,3,40); w.useCircularDots(backgroundColor);
Skriv ett program som låter användaren spela inverso.
Lösningsförslag finns här.
Skriv ett program som låter en eller flera användare spela
"Memory" i ett DotWindow
(med cirkulära prickar, så att
man lättare ser de enskilda prickarna). På spelplanen finns från
början ett (jämnt) antal gömda prickar i olika färger, där varje färg
förekommer två gånger - uppgiften för användarna är att hitta alla par
av prickar med samma färg. När spelet startar kan spelplanen se ut så
här (alla prickar är gömda):
Spelarna turas om att 'dra', och i varje drag klickar spelaren i två icke avklarade rutor. Efter ett klick visas färgen i den aktuella rutan, och när användaren i en omgång lyckas klicka på två rutor som har samma färg tas de aktuella rutorna bort. Efter ett par omgångar kan spelplanen se ut så här (den spelare som klickade senast lyckades inte hitta något par av prickar i samma färg):
Första gången användaren klickar vänds alltså en ruta, andra gången vänds en annan ruta, och tredje gången vänds båda rutorna tillbaka - om användaren inte lyckades klicka på två rutor av samma färg, för då tas de bort (ritas i bakgrundsfärg).
Du kan välja färger helt slumpmässigt (om två färger blir lika varandra så är det bara ytterligare en svårighet för spelarna!).
Skriv ett program som låter användaren spela "sänka skepp".
Programmet skall gömma ett antal skepp, och låta användaren klicka
sig fram i ett DotWindow
:
I figuren ovan har användaren klickat i de rutor som är lite
mörkare blå -- dessutom har hon träffat på två skepp. Använd gärna
den mall (SimpleGame
) som vi skrev under föreläsning
18.
Ett lösningsförslag finns här (men tjuvkika inte förrän du har försökt!).
Mata in ett tal: 1 Talet var ett Mata in ett tal: 14 Talet var fjorton Mata in ett tal: 312 Talet var trehundratolv Mata in ett tal: 44634 Talet var fyrtiofyratusensexhundratrettiofyra Mata in ett tal: 424154213 Talet var fyrahundratjugofyramiljoneretthundrafemtiofyratusentvåhundratretton
Programmet skall avslutas när användaren matar in 0, eller ett negativt tal.
Lösningsförslag finns här.
(Denna uppgift är hämtad från den svenska uttagningen till programmeringsolympiaden 2004). Fikonspråket och rövarspråket är två 'språk' som är avsedda att göra det möjligt att prata med vänner utan att utomstående skall förstå -- fillerekon firstårfökon fidukon finnadekon finingmekon? Ett så enkelt ord som kvartalsrapport blir i rövarspråket kokvovarortotalolsosrorapoppoporortot.
Översättning från ett svenskt ord till motsvarande ord på fikonspråket: Dela upp ordet efter dess första vokal, sätt ihop delarna i omvånd ordning, lägg till "fi" i början av ordet, och "kon" i slutet av ordet. Ordet student blir fidentstukon (fi-dent-stu-kon).
Översättning från ett svenskt ord till motsvarande ord på rövarspråket: Gå igenom bokstav för bokstav, efter varje bokstav som är en konsonant lägger vi till ett o och bokstaven en gång till, dvs ordet student blir sostotudodenontot (sos-tot-u-dod-e-non-tot).
Skriv programkod för att översätta från svenska till dessa båda språk, och skriv även programkod för att översätta från rövarspråk till fikonspråk:
Ange mening: fitdekon firhäkon firäkon finekon fittignykon fivningökon Översättning: dodetot hohäror äror enon nonytottotigog övovnoninongog
Denna uppgift var sistauppgift vid tentamen i mars 2003.
I tärningsspelet Yatzy använder man fem vanliga sexsidiga speltärningar. I varje omgång kastar en spelare först alla fem tärningar en gång, därefter får hon två gånger plocka upp 0-5 av tärningarna och kasta om (tärningarna kastas samtidigt, och man måste välja alla tärningar som skall kastas innan man kastar). Om en spelare efter tre kast har 5 tärningar som visar samma värde har hon fått 'Yatzy'.
Det är inte särskilt stor chans att få 'Yatzy' på tre kast, vi vill undersöka ungefär hur många kast som behövs för att alla tärningar skall visa samma värde, om vi efter varje kast behåller de tärningar som har det vanligaste värdet (om det finns flera värden som är 'vanligast' kan vilket av dem som helst sparas).
Skriv ett program som kastar de fem tärningarna tills de visar samma värde, genom att efter varje kast behålla det vanligaste värdet. Skriv ut hur många kast som behövdes.
För att räkna hur många 1:or, 2:or, etc som visas, kan du använda en heltalsvektor, där värdet i index k anger hur många av tärningarna som visar värdet k.
Implementera spelet "Tetris" med hjälp av en
DotWindow
. Uppgiften är ganska mycket svårare än "Snake"
och "Pong", så arbeta gärna tillsammans i en mindre grupp.