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



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

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

Omdirigering. Omdirigering

Funktioner. Programmering. Egendefinierade funktioner i Java. En Java-funktions anatomi. hh.se/db2004. Statiska metoder. Funktioner. resultatvärde.

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

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

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

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

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

Typkonvertering. Java versus C

Föreläsning 3-4 Innehåll

Input. Programmering. Andra källor

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

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

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

SMD 134 Objektorienterad programmering

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

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

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

JAVAUTVECKLING LEKTION 8

TDDC77 Objektorienterad Programmering

Instuderingsfrågor, del D

Objektorienterad Programmering (TDDC77)

Tentamen , Introduktion till Java, dtaa98, dtea53

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

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

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

OOP Objekt-orienterad programmering

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

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

(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

OOP Objekt-orienterad programmering

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

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

Tentamen OOP

Föreläsning 1 & 2 INTRODUKTION

Föreläsning REPETITION & EXTENTA

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

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

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

JAVAUTVECKLING LEKTION 4

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

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

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.

[] Arrayer = Indexerad variabel

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

Tentamen FYTA11 Javaprogrammering

Föreläsning 2, vecka 8: Repetition

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

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

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Övning2. Variabler. Data typer

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

Föreläsning 5-6 Innehåll

Chapter 3: Using Classes and Objects

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

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Tentamen i Algoritmer & Datastrukturer i Java

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

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Undervisning. Examination

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

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

Tentamen. Lösningsförslag

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

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

Iteration while-satsen

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg)

Tentamen , Grundläggande programmering i Java

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Programmering A. Johan Eliasson

Föreläsning 1 & 2 INTRODUKTION

2D1339 Programkonstruktion för F1, ht 2004

Undervisning. Examination

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Objektorienterad programmering i Java

F4. programmeringsteknik och Matlab

Föreläsning 3. Iteration while-satsen

TDDC77 Objektorienterad Programmering

Föreläsningsmaterial (Syntax och variabler)

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

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

Läsanvisning: Dessa OH bilder samt kap 1-3

Programmering för språkteknologer I, VT2012. Rum

2D1342 Programkonstruktion för F1, ht 2006

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

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

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

Anteckningar 1: Grundläggande saker

Transkript:

Programmering hh.se/db2004 Föreläsning 4: Fält samt Input/Output Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Lite om reella tal Vad kan man göra med reella tal? Utöver de vanliga aritmetiska operationerna, finns det ett antal funktioner i en bibliotek-klass som heter Math. Avståndet till origo Givna två reella tal som står för (x, y) - koordinater av en punkt räkna ut avståndet till origo. Pytagoras sats säger: alltså är x 2 + y 2 = d 2 Center for Research on Embedded Systems IDE-sektionen 1 / 30 d = x 2 + y 2 2 / 30 I java Om operatorers associativitet och prioritet Avstånd till origo public class Distance{ public static void main(string[] cmdln){ double x = Double.parseDouble(cmdLn[0]); double y = Double.parseDouble(cmdLn[1]); System.out.println(Math.sqrt(x*x+y*y)); Uttryck Man använder variabler, literaler, operatorer och funktionsanrop för att bilda uttryck. Uttrycket står för ett värde som beräknas utifrån variablernas innehåll, literalers värde och vad operatorer och funktioner betyder. Men även i vilken ordning man räknar ut delar av uttrycket! Utdrag från Math Math.PI 3.141592653589793 Math.E 2.718281828459045 Math.sin(Math.PI/2)) 1.0 Math.cos(Math.PI)) -1.0 Math.log(Math.E)) 1.0 3 / 30 Några uttryck och dess värde Skall 3+4*5 räknas som 7+5 eller som 3+20? Java använder samma prioritet för operatorer som ni använder i matte: först räknar man * och / och sedan + och -. Då blir det i vårt fall 3+20 alltså 23. 4 / 30

Om operatorers associativitet och prioritet Fält Jag kommer troligen att uttala detta arrayer Att lagra och hantera stora mängder data. Några uttryck och dess värde Skall 5-3+7 räknas som 2+7 eller som 5-10? Java använder samma associativitet som ni använder i matte: man räknar från vänster (vänster associativitet). Då blir det i vårt fall 2+7 alltså 9. Flera variabler av samma typ 5 / 30 Flera variabler av samma typ Fält En indicerad följd av värden av samma typ. Exempel 52 kort i en kortlek. 1 miljon tecken i en bok. 10 miljoner ljudelement i en MP3-fil. 73 miljarder Google-frågor per år. 6 / 30 10 variabler av samma typ double a0, a1, a2, a3, a4, a5, a6, a7, a8, a9; a0 = 0.0; a1 = 0.0; a2 = 0.0; a3 = 0.0; a4 = 0.0; a5 = 0.0; a6 = 0.0; a7 = 0.0; a8 = 0.0; a9 = 0.0; a4 = 3; double x = a4 + a8; Trist och felbenäget! Skalar inte så lätt till stora antal! 10 variabler av samma typ double[] a = new double[10]; for(int i = 0; i<10; i++){ a[i] = 0.0; a[4] = 3; double x = a[4] + a[8]; Observera deklarationen! Detaljer kommer strax! Skalar upp! 7 / 30 8 / 30

Flera variabler av samma typ Javas stöd för fält 1000000 variabler av samma typ double[] a = new double[1000000]; for(int i = 0; i<1000000; i++){ a[i] = 0.0; a[4] = 3; double x = a[1234] + a[987654]; Observera deklarationen! Detaljer kommer strax! Skalar upp! Fältdeklaration double[] a; eller String[] sentence; Alltså kan man deklarera fält med element av godtycklig typ type[] var; Att skapa ett fält a = new double[10]; eller sentence = new String[100]; Alltså skapar man ett fält av en viss storlek var = new type[size]; new är ytterligare ett reserverat ord i Java, så som class, public, for, while, if och else. Fälttyper, på samma sätt som String, är en referenstyp. 9 / 30 10 / 30 Javas stöd för fält Exempel: fält för att lagra beräknade värden Att initiera ett fält for(int i = 0; i<10; i++){ a[i] = 0.0; eller for(int i = 0; i<100; i++){ sentence[i] = ""; Alltså var[i] = värdeavrätttyp; För att tillverka ett fält skall man deklarera det, skapa det och initiera det! För att komma åt enskilda element i ett fält använd var[index]. Alla dessa är variabler! Indicering börjar med 0. 11 / 30 Summor Vi betraktar igen problemet med att beräkna n i Men nu vill vi veta alla värden på denna summan för olika värden av n. 1 i = 1 2 i = 3 3 i = 6 4 i = 10 5 i = 15 6 i = 21 12 / 30

Exempel: fält för att lagra beräknade värden Om man behöver använda n i för olika värden av n kan man beräkna dem en gång, lagra värden i ett fält där man använder n som index och sedan är det bara att kolla vad som finns i fältet på plats n. 13 / 30 Exempel: fält för att lagra beräknade värden Exempel: fält för att lagra beräknade värden Summor public class Sums{ public static void main(string[] cmdln){ int size = Integer.parseInt(cmdLn[0]); int[] sums = new int[size + 1]; int sum; sums[0]=0; for(int n = 1; n < size + 1; n++){ sum = 0; for(int i = 1; i <= n; i++){ sum=sum+i; sums[n]=sum; Kodfragment 14 / 30 Om man behöver använda n i för olika värden av n kan man beräkna dem en gång och sedan är det bara att kolla vad som finns i fältet sums[n]. Ett fält med slumptal double[] a = new double[size]; a[i] = Math.random(); Skriv ut alla element System.out.println(a[i]); Medelvärdet double sum = 0.0; sum = sum + a[i]; double average = sum/size; 15 / 30 16 / 30

Kodfragment Kort i en kortlek Vi kan använda två fält för att modellera kort i en kortlek: Kopiera ett fält till ett annat double []b = new double[size]; b[i] = a[i]; String[] rank = {"2","3","4","5","6","7","8","9","10", "Jack","Queen","King","Ace"; String[] suit = {"Clubs","Diamonds","Hearts","Spades"; Observera initieringen, den sker under kompilering! Ett slumpmässigt kort int i = (int) (Math.random() * 13); int j = (int) (Math.random() * 4); System.out.println(rank[i]+" of "+suit[j]); 17 / 30 18 / 30 Kortlek En kortlek är ett fält med kort Vi kan tänka oss att använda strängar för att modellera kort: "2 of Clubs" "4 of Diamonds" då är en kortlek ett fält av strängar: String[] deck = new String[52]; Hur initierar vi det? Hur lägger vi ut korten i arrayen? for(int i = 0; i<13; i++){ for(int j = 0; j<4; j++){ deck[4*i+j]=rank[i] + " of " + suit[j]; Eratosthenes såll Att stödja beräkningar Man kan använda fält för att skriva program som kan räkna fortare än annars. En metod för att hitta primtal 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2 3-5 - 7-9 - 11-13 - 15-17 - 19-21 2 3-5 - 7-9 - 11-13 - 15-17 - 19-21 2 3-5 - 7 - - - 11-13 - - - 17-19 - - 2 3-5 - 7 - - - 11-13 - - - 17-19 - - 2 3-5 - 7 - - - 11-13 - - - 17-19 - - 19 / 30 20 / 30

Eratosthenes såll Eratosthenes såll - kodfragment Man kan använda ett fält för att markera vilka som är primtal: fältets indices är heltalen och fältets element är boolska värden! Startvärden boolean[] isprime = new boolean[bound+1]; isprime[0] = false; isprime[1] = false; for(int i = 2; i<bound+1; i++){ isprime[i] = true; Man kan kalla fältet för isprime. Tanken är att när sållningen är klar så skall isprime[i] vara sann bara om i är ett primtal. 21 / 30 22 / 30 Eratosthenes såll - kodfragment Inför nästa vecka Sållet for(int i = 2;i<=bound/i;i++){ if(isprime[i]){ for(int k = i; k<=bound/i; k++){ isprime[i*k] = false; Programmet och datorn (Nu) Vi kan generera massvis med utdata! Programmet och datorn Vi vill även använda massvis med indata och använda andra möjligheter hos datorn. 23 / 30 24 / 30

Kommandoraden Standard output Sammanfattning Alla klasser har en metod main() som tar ett fält av strängar som argument. Fältet består av de kommandoradsargument vi skriver. Dessa förmedlas till Java av operativsystemet. Det är en konvention att både OS och Java hanterar dessa argument som strängar. Om vi vill betrakta ett argument som ett tal måste vi använda metoder som Integer.parseInt() för att konvertera argumentet. Sammanfattning För att skriva ut värden från Java-program använder vi System.out.println() och System.out.print(). Java skickar dessa värden till en ström av tecken känd som standard output. Operativsystemet brukar koppla standard output till terminalen. I Unix kan vi dirigera om standard output till en fil med >. 25 / 30 26 / 30 Ett exempel Flera möjligheter Experiment med tärningkast public class Dice{ public static void main(string[] cmdln){ int samplesize = Integer.parseInt(cmdLn[0]); int dice; for(int i = 0;i<sampleSize; i++){ dice = (int)(math.random()*6)+1; System.out.print(dice+" "); Standard input kommer att låta oss skriva program som interagerar med användaren genom tangentbordet. Man kan även dirigera om standard input så att programmet läser in från en fil. Program kan då hantera större mängder data. Små experiment % java Dice 10 6 2 3 4 2 4 5 6 3 4 Stora experiment % java Dice 10000 > dice10000 27 / 30 28 / 30

Flera möjligheter Flera möjligheter Standard audio kan användas för att spela upp och manipulera ljudfiler. Vi kommer att kunna spela.wav-filer, kunna skriva program som hanterar fält av double samt läsa och skriva dem i.wav-filer. Standard draw kan användas för att presentera utdata i grafisk form och även för enkla animeringar. 29 / 30 30 / 30