Inleiding Informatica

advertisement
Hoofdstuk 3:
Werken met
numerieke gegevens
Inleiding Informatica
Prof. Dr. O. De Troyer
Gehele getallen
• Geen voorgedefinieerde klasse maar
ingebouwd data type
int
– Gehele getallen
– Voorziet in een basis van rekenkundige
operaties +, -, * , /, , % (rest bij gehele deling)
Vb: 5 + 12
-9 * 4 * 3
– Afdrukken door print en println
System.out.println( 14) ;
System.out.println( 89 * 67) ;
Inleiding Informatica
Prof. Dr. O. De Troyer
2
Data typen
• Zijn geen klassen
• Hebben geen methoden of instantie
variabelen
• Er is geen constructor nodig
Inleiding Informatica
Prof. Dr. O. De Troyer
3
Primitieve data typen
• Zijn ingebouwd in de programmeertaal
Inleiding Informatica
Prof. Dr. O. De Troyer
4
Data typen & Variabelen
• Kunnen direct aan een variabele
toegekend worden
int i ;
i = 3;
Inleiding Informatica
i
3
Prof. Dr. O. De Troyer
5
Data typen
• Referentie variabele versus data type variabele
x
lijn
5
“youhouu”
een object
• data type variabele dienen vóór het gebruik
een waarde te krijgen
int x ;
x
?
x = 5;
x
5
Inleiding Informatica
Prof. Dr. O. De Troyer
6
Data typen
• Kunnen geen ontvanger zijn (zijn geen
objecten)
• Kunnen wel gebruikt worden als
argument van een methode
mijnAuto.rijden(90)
• Kunnen wel gebruikt worden als
“return” waarde van een methode
Inleiding Informatica
Prof. Dr. O. De Troyer
7
Literals
2 * ( x + y) - ( z / 73)
literals
• hun naam is een representatie van hun
waarde
Inleiding Informatica
Prof. Dr. O. De Troyer
8
Constanten
• Variabelen waarvan de waarde niet
wijzigt
• Aangeduid door sleutelwoord final
final int gridGrootte = 10 ;
• Constanten te verkiezen boven literals
plaats = 10 * afstand ;
Beter:
final int gridGrootte = 10 ;
plaats = gridGrootte * afstand ;
Inleiding Informatica
Prof. Dr. O. De Troyer
9
Voorrangsregels en haken
5+3*2
8 * 2 of 5 + 6 ?
Eerst * en / dan + en • Haakjes gebruiken maakt alles
duidelijker en voorkomt fouten
(5 + 3) * 2
5 + (3 * 2)
Inleiding Informatica
Prof. Dr. O. De Troyer
10
Afkortingen
salaris = salaris * 1.20 ;
Verkorte notatie
salaris *= 1.20 ;
// 20% opslag
x=x+5;
Verkorte notatie
x += 5 ;
Idem
-=
/=
• Voorkomt fouten:
i = j + 1;
Inleiding Informatica
i.p.v.
Prof. Dr. O. De Troyer
%=
i = i + 1;
11
Afkortingen (2)
• Meervoudige toekenning
x=y=z=0;
Verkorte notatie voor
x= 0;
y= 0;
z= 0;
Inleiding Informatica
Prof. Dr. O. De Troyer
12
Afkortingen (3)
of
x=x+1;
Of
x ++ ;
Idem x -- ;
Fout:
6 ++ ;
x += 1 ;
6 is een literal;
kan men niet wijzigen
(x + y)++;
x + y is een uitdrukking, geen veranderlijke;
kan men niet wijzigen
Inleiding Informatica
Prof. Dr. O. De Troyer
13
Afkortingen (4)
Opgelet in expressies!
++ variabele telt 1 op bij de waarde en geeft resultaat terug
variabele ++ geeft waarde terug en telt er dan 1 bij op
-- variabele trekt 1af van de waarde en geeft resultaat terug
variabele -- geeft waarde terug en trekt er dan 1 van af
Voorbeeld
telkens kost == 100
++kost
kost ++
--kost
kost -Inleiding Informatica
Prof. Dr. O. De Troyer
-> 101
-> 100
-> 99
-> 100
waarde kost = 101
waarde kost = 101
waarde kost = 99
waarde kost = 99
14
Opgelet
string1 + string2
Is een afkorting voor
string1.concat(string2)
Inleiding Informatica
Prof. Dr. O. De Troyer
15
Andere data typen voor gehele getallen
• int voor gehele getallen tussen -2 147 483 647
en 2 147 483 647 (231)
– Gebruikt 32 bits
• long voor gehele getallen tussen -263 en 263
(meer dan 1018)
– Gebruikt 64 bits
• short voor gehele getallen tussen -32 767 en
32 767
– Gebruikt 16 bits
• byte voor gehele getallen tussen -127 en 127
– Gebruikt 8 bits
Inleiding Informatica
Prof. Dr. O. De Troyer
16
Data typen voor gehele getallen
• Meer bits nodig
 meer computer geheugen nodig
• Mengen van typen
byte  short  int  long



long l1, l2;
int i1 = 55 , i2 ;
short s ;
byte b =10;
Inleiding Informatica
Prof. Dr. O. De Troyer
l1 = 98 ;
l2 = i1 ;
l1 = 2 * i1 ;
i2 = l2 ;
s=b;
s = i2 ;
l2 = s ;
b = i2 ;
b = l1 ;
17
Converteren van typen
• Voorbeeld:
long x ;
int i ;
x = 10 ;
i = x ; ----> niet toegelaten!
Maar waarde van x is klein genoeg voor int!
Oplossing
i = (int) x ;
Dwingt een omzetting (van de waarde van x)
naar int af.
x blijft van het type long!
Inleiding Informatica
Prof. Dr. O. De Troyer
18
Reële getallen
• float voor reële getallen met 7 cijfers van
precisie
– Getallen tussen 1.4012985 x 10-45 en
3.4028235 x 1038
• double voor reële getallen met 15 cijfers van
precisie
– Getallen tussen 2.22507385072014 x 10-308 en
1.79769313486231570 x 10308
• Niet alle getallen; enkel deze met resp. 7 , 15
cijfers of precisie
– Bv. niet 1 234 567 089 maar 1 234 567 000
Inleiding Informatica
Prof. Dr. O. De Troyer
19
Reële getallen - notatie
• Wetenschappelijke notatie
– 3.4028235 x 1038
wordt 3.4028235E38
• Om onderscheid te maken tussen float en
double en andere int literals
– float:
3.4028235E38f
3.14115f
38f
– double:
3.4028235E38d
3.14115d
38d
Inleiding Informatica
Prof. Dr. O. De Troyer
20
Voorbeeld
double oppervlakte, straal, pi = 3.14159d;
straal = 12.0 ;
oppervlakte = pi * straal * straal ;
int j = 1222333444;
float
x = 1222333444.0f;
System.out.println(“j =“ + j);
System.out.println(“x =“ + x);
j += 1;
x += 1.0 ;
System.out.println(“j =“ + j);
System.out.println(“x =“ + x);
j = 1222333444;
x = 1.222333444E9;
j = 1222333445;
x = 1.222333444E9;
Enkel 7 cijfers precisie!
Inleiding Informatica
Prof. Dr. O. De Troyer
21
Mixen van float en double
float  double

int  float/double

long  float/double
betekenen
maar kan verlies aan precisie

Hier ook conversie mogelijk: (int) (float) ...
Inleiding Informatica
Prof. Dr. O. De Troyer
22
De klasse Math
• Math is klasse met wiskundige functies
als (klasse) methoden
Voorbeeld:
static int abs( int a) { …} // geeft de absolute waarde van a terug
int i = -2 ;
int j = Math.abs(i) ;
Inleiding Informatica
Prof. Dr. O. De Troyer
23
De klasse Math (2)
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
final double E
waarde van e
final double PI
waarde van pi
double cos(double x) cosinus van hoek x in radialen
double sin(double x) sinus van hoek x in radialen
double tan(double x) tanginus van hoek x in radialen
… abs(… x)
absolute waarde van x
… min(… x, … y)
het kleinste van x en y
… max(… x, … y)
het grootste van x en y
... round(... x)
x float wordt afgerond naar integer; double naar long
double log(double x) natuurlijk logaritme van x
double random()
random getal tussen 0.0 en 1.0
double sqrt(double x) positieve vierkantswortel van x
double pow(double x, y) xy
double exp(double x) ex
e.a.
Inleiding Informatica
Prof. Dr. O. De Troyer
24
“Enveloppe” klassen
• Met elk primitief data type correspondeert
een klasse
– Klasse Integer correspondeert met int
– Klasse Byte, Short, Long, Float, Double
correspondeert met byte, short, long, float, double
• Laten toe om een data type element om te
zetten naar een object en omgekeerd
int i = 10 ;
Integer object = new Integer(i);
i = object.intValue() ;
Inleiding Informatica
Prof. Dr. O. De Troyer
25
“Enveloppe” klassen (2)
• Laten conversie van getal naar string toe
– Klasse methode: toString
int i = 10 ;
String s = Integer.toString(i) ;
float f = 12.34f ;
String s = Float.toString(f) ;
//s wordt “10”
//s wordt “12.34”
• Twee nuttige constanten
Long.MIN_VALUE
Long.MAX_VALUE
Idem voor de andere numerieke klasse
Inleiding Informatica
Prof. Dr. O. De Troyer
26
Download