Föreläsningar 9, 10 (okt 01, okt 03 v 40). delvis DD Chapter 7.

Relevanta dokument
Föreläsningar 11, 12 (okt 08, okt 12 v 40). Poster och Abstrakta datatyper.

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

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

Del A (obligatorisk för alla)

Tentamen i Grundläggande Programvaruutveckling, TDA548

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Objektorienterad programmering i Java

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

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

Tentamen i Objektorienterad programmering

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

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

Malmö högskola 2007/2008 Teknik och samhälle

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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 2, vecka 8: Repetition

Malmö högskola 2008/2009 CTS

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

Tentamen. Lösningsförslag

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

Föreläsning REPETITION & EXTENTA

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Föreläsning 3-4 Innehåll

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

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]

DD1342 Programkonstruktion för F1,

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

Laboration A Objektsamlingar

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Instuderingsfrågor, del D

Saker du ska kunna Föreläsning 13 & 14

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

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

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

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

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

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Del A (obligatorisk för alla)

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Tentamen , Introduktion till Java, dtaa98, dtea53

Introduktion till Datalogi DD1339. Föreläsning 4 7 okt 2014

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

OOP Objekt-orienterad programmering

SMD 134 Objektorienterad programmering

JAVAUTVECKLING LEKTION 7

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Språkkonventioner och redigering av tal.

Typkonvertering. Java versus C

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

Malmö högskola 2007/2008 Teknik och samhälle

Tentamen i Programmeringsteknik I

Föreläsnings 9 - Exceptions, I/O

JAVAUTVECKLING LEKTION 4

Tentamen i Programmering

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

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

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

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

Tentamen OOP

Introduktion till Datalogi DD1339. Föreläsning 5 13 okt 2014

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

(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

Metoder - en funktion: medel

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

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

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

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

Laboration 13, Arrayer och objekt

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Tentamen i Programmeringsteknik I

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Den som bara har en hammare tror att alla problem är spikar

Presentation av trafiksimuleringsprojektet

Transkript:

Föreläsningar 9, 10 (okt 01, okt 03 v 40). delvis DD Chapter 7. Vad som menas med arrayer, element och [] se DD 7.1, 7.2, 7.3. Arrayer som parametrar DD 7.5, 7.6. Jag kommer att förklara samma sak med nedanstående exempel, som mycket liknar den viktigaste hemuppgiften. DD 7.4 innehåller en massa andra exempel. Komplexa tal som arrayer Vi ska implementera algebra för komplexa tal i en klass Comp med hjälpa av tvåkomponentsarrayer. I klassen skall finnas definitioner för de statiska metoder som finns i detta diagram: double (64 bit) 23.67-890.78-45.89 3.0 4.0 mkcomplex re im modulus conjugate double [] (komplexa tal) 3.0 + 4i isequal tostring add sub mult div boolean true false String "3.0 + 4.0i" Detta kan göras på detta vis: En komplext tal är i vår lösning (vi ska kommande veckor göra på många andra sätt, bättre sätt) en tvåkomonetsarray med realdelen i komponent [0] och imaginärdelen i [1]. public class Comp { public static double [] mkcomplex(double re, double im) { double [] result = new double [2]; result[0] = re; result[1] = im; // BILD NEDAN HUR DET SER UT HÄR return result; public static boolean isequal(double [] z1, double [] z2){ return (z1[0] == z2[0]) && (z1[1] == z2[1]);

public static double [] add(double [] z1, double [] z2){ /* double [] result = new double [2]; result[0] = z1[0] + z2[0]; result[1] = z1[1] + z2[1]; return result; */ return mkcomplex( z1[0] + z2[0], z1[1] + z2[1]); public static double [] sub(double [] z1, double [] z2){ return mkcomplex( z1[0] - z2[0], z1[1] - z2[1]); public static double [] mult(double [] z1, double [] z2){ return mkcomplex(z1[0]*z2[0] - z1[1]*z2[1], z1[0]*z2[1] + z1[1]*z2[0]); public static double [] conjugate(double [] z1){ return mkcomplex( z1[0], - z1[1]); public static double modulus(double [] z1){ return Math.sqrt(z1[0]*z1[0] + z1[1]*z1[1]); public static double [] div(double [] z1, double [] z2){ if (isequal(z2, mkcomplex(0,0))) { throw new RuntimeException("Tried to divid by 0 + 0i"); else { double mo = modulus(z2); double dd = mo*mo; double [] zz = mult(z1, conjugate(z2)); return mkcomplex( zz[0]/dd, zz[1]/dd); public static double re(double [] z1){ return z1[0]; public static double im(double [] z1){ return z1[1]; public static String tostring(double [] z1) { return z1[0] + " + " + z1[1] + "i";

Vi kan nu göra beräkningar på komplexa tal på detta vis : public class TestComplex { public static void main(string [] iargs) { System.out.println(" (3+4i)= " + Comp.toString(Comp.mkComplex(3, 4))); System.out.println(" (3+4i)/(1-2i) = " + Comp.toString( Comp.div(Comp.mkComplex(3, 4), Comp.mkComplex(1, -2)))); System.out.println(" (3+2i)(4+5i) = " + Comp.toString( Comp.mult(Comp.mkComplex(3, 2), Comp.mkComplex(4, 5)))); System.out.println(" Ex 10.2.14 = " + Comp.toString( Comp.sub( Comp.div(Comp.mkComplex(1, -2), Comp.mkComplex(3, 4)), Comp.div(Comp.mkComplex(2, 1), Comp.mkComplex(0, 5))))); Om vi i en metod gör denna deklaration double [] result händer detta: Datorns primärminne lokala variabler parametrar objekt metoder result null Om vi i en metod gör detta: eller (samma sak): double [] result; result = new double [2]; double [] result =new double [2]; händer detta: Datorns primärminne lokala variabler parametrar objekt arrayobjektets två komponenter metoder result [0] 0.0 [1] 0.0

I resten av metoden kan vi i uttryck använda resultat[0] och resultat[1] för att räkna på komponternas värden, och resultat[0] =.. och resultat[1] =.. för att ge komponeterna nya värden. Så här ser det ut i datorn just före return result; i metoden mkcomplex när main gjort anropet Comp.mkComplex(3, 4)). Datorns primärminne statiska variabler lokala variabler parametrar frame : main iargs frame :mkcomplex re im result 3.0 4.0 objekt [0] 3.0 [1] 4.0 metoder TestComplex main Comp mkcomplex isequal add sub... Körresultat när vi kör TestComplex : (3+4i)= 3.0 + 4.0i (3+4i)/(1-2i) = -0.9999999999999998 + 1.9999999999999996i (3+2i)(4+5i) = 2.0 + 23.0i Ex 10.2.14 = -0.4 + 0.0i Matriser Matriser se avsnitt DD 7.9. Ett exmpel på matrisaddition: public class Matrisalgebra1 { public static void main(string [] iargs) { double [][] ma = { {0, 0, {2, 4, {5, 2 ; double [][] mb = { {1, 1, {1, 1, {1, 2 ;

System.out.println("mA : "); print(ma); System.out.println("mB "); print(mb); System.out.println("mA + mb "); print(add(ma, mb));... print(... public static double [][] add(double [][] m1, double [][] m2 ) { if ((m1.length!= m2.length) && ((m1[0]).length!= (m2[0]).length)) { throw new RuntimeException("felaktiga matrisstorlekar"); double [][] newm = new double [m1.length] [(m1[0]).length]; for(int i = 0; i < m1.length; i = i+1) { for(int j = 0; j < (m1[0]).length; j = j+1) { newm[i][j] = m1[i][j] + m2[i][j]; return newm; /*Körresultat : ma : 0.0, 0.0 2.0, 4.0 5.0, 2.0 mb 1.0, 1.0 1.0, 1.0 1.0, 2.0 ma + mb 1.0, 1.0 3.0, 5.0 6.0, 4.0 */

Hemuppgifter redovisning v41. 1. CBA-hemuppgift : Linjär-algebra-vektorer som arrayer. Implementera i en klass Vect vektoralgebra i planet på liknade sätt som vi implementerade algebra för komplexa tal på föreläsningen/i föreläsningsanteckningarna. I klassen skall finnas definitioner för de statiska metoder som finns i detta diagram: double (64 bit) 23.67-890.78-45.89 3.0 4.0 mkvector px py norm dotproduct scalarmultiple double [] (vektor i planet) (3.0, 4.0) isequal tostring sum difference boolean true false String "(3.0, 4.0)" Namnen på metoderna i bilden är tagna från kapitel 3 i Linjär-algebra-boken. IsEqual returnerar om två vektorer är är identiska, px returnerar vektorns x-komponent, py returnerar vektorns y-komponent, scalarmultiple returnerar resultatet vi d multiplikation med skalär, dotproduct skalärprodukten, norm normen, sum summan av två vektorer, difference skillnaden av två vektorer. mkvector "tillverkar" en vector, tostring returnerar en sträng som vektorer i planet brukar skrivas i matteböcker, (x, y). Testkör klassen Vect med detta program (finns på /info/inda01/): public class TestVector { public static void main(string [] iargs) { System.out.println(" (3, 4)= " + Vect.toString(Vect.mkVector(3, 4))); System.out.println(" (1, -2) + (7, 6) = " + Vect.toString( Vect.sum(Vect.mkVector(1, -2), Vect.mkVector(7, 6)))); System.out.println(" 3*(4,5) = " + Vect.toString( Vect.scalarMultiple(3, Vect.mkVector(4, 5)))); System.out.println(" (3, 4) = " + Vect.norm(Vect.mkVector(3, 4))); System.out.println(" (3, 4) o ( 2, 2) = " + Vect.dotProduct(Vect.mkVector(3, 4), Vect.mkVector(2, 2))); System.out.println(" xkomponeten i (3, 4) = " + Vect.px(Vect.mkVector(3, 4))); System.out.println(" ykomponeten i (3, 4) = " + Vect.py(Vect.mkVector(3, 4))); // Körresultat : Se nästa sida!

/*Körresultat : (3, 4)= (3.0, 4.0) (1, -2) + (7, 6) = (8.0, 4.0) 3*(4,5) = (12.0, 15.0) (3, 4) = 5.0 (3, 4) o ( 2, 2) = 14.0 xkomponeten i (3, 4) = 3.0 ykomponeten i (3, 4) = 4.0 */ Utöka också TestVector med fler uttryck som testar Vect. 2. C-hemuppgift :Tärningsstatisik. Lös uppgift 7.15 sid 359 i DD. Det är OK att istället för en applet skriva en applikation som bara startar och gör 36 000 slag och använda System.out för utskrift. Exempel på körresultat: Program som kastar två tärningar 36000 gånger och skriver statistik för tärningarnas summa Täningarnas summa 2 : 1037 Täningarnas summa 3 : 1999.. osv Täningarnas summa 12 : 1045 3. BA-hemuppgift : Matrismultiplikation. Skriv en applikation som kan skriva ut två matriser och deras produkt. De två matiserna initieras i main-programmmet (det vill säga ingen inmatning krävs vid körningen). Programmet skall innehålla en metod för matris-multiplikation public static double [][] mult(double [][] m1, double [][] m2 ) och en metod för att skriva ut en matris. Exempel på körresultat: ma : 0.0, 2.0, 0.0 0.0, 2.0, 1.0 1.0, 3.0, 1.0 0.0, 0.0, 1.0 mb 1.0, 1.0 1.0, 1.0 1.0, 2.0 ma * mb 2.0, 2.0 3.0, 4.0 5.0, 6.0 1.0, 2.0

4. B-hemuppgift : Game of -life Implementera följande spel : The Game-of -life, invented by J. H. Conway, takes place on an rectangular grid of cells, each of which can contain an organism. Each cell has eight neighbours, and we use occ(int j, int j, int [] [] biotope) to denote the number of cells adjacent to cell at row j column j that are occupied by an organism. The configuration opf a new generation of organisms is obtained from the previos generation by applying two simple rules. a) An organisk in cell [i][j] survives to the next generation if 2 <= occ(i,j, oldbiotope) <= 3, otherwise it dies. b) An organism is born in un emty cell [i][j] if occ(i,j, oldbiotope) = 3, otherwise the cell remains empty. Write a program that reads an inital configuration of occupied cells, calculatees a series of generation acording to the rules, and prints each configuration. because all changes occur simultaneously, the program must maintain two copies of the configuration. Test your program with a seven-cell, U-shaped pattern. Lösningen skall innehålla en klassmetod för att skriva ut "biotopen", en klassmetod för att givet en generation av biotopen räkna ut nästa generation, klass-metoden occ ovan och main-metoden. Exempl på körning av U-biotopen,, se nästa uppgift. Märk dock att för B- uppgiften krävs ingen inmatning, utan startbiotopen initieras i programmet. 5. A-hemuppgift : Game of -life med inmatning av startbiotop. Samma uppgift som uppgift 4, men vid körningen skall startbiotopens storlek och startbiotopen matas in från tangentbordet: Ge antalet rader i startbiotop : 6 Ge antalet kolonner i startbiotop : 6 Rad 1 : Rad 2 : * * Rad 3 : * * Rad 4 : *** Rad 5 : Rad 6 : * * * * *** Fortsätta ge 1 : 1 ** ** * * * (forts nästa sid)

Fortsätta ge 1 : 1 ** ** ** ** * Fortsätta ge 1 : 0 Tips: Följande program läser in de fem första tecknen från en rad från tangentbordet och skriver ut dessa tecken. Är raden för kort fylls den ut med - : import java.io.*; public class Radinmatning { static BufferedReader indata = new BufferedReader(new InputStreamReader(System.in)); public static void main(string [] iargs) throws IOException { char [] r = readrow(); System.out.print("Inläst rad : "); for ( int i =0; i < r.length; i = i+1) { System.out.print(r[i]); public static char [] readrow() throws IOException{ char [] result = new char [5]; System.out.print("Rad : "); String row = indata.readline(); int rowends = Math.min(row.length(), 5); for (int j = 0; j <rowends; j = j+1) { result [j] = row.charat(j); for (int j = rowends; j <5; j = j+1) { result [j] = - ; return result;