Ohjelmointi 1/2010, demo 3 vastauksia
1. Tiedon esittäminen tietokoneessa
e) f) g) h)
a) 11 111
0101 1111 = 95 95
0001 1111 = 31 31
-----------
0111 1110 = 126 126 OK OK
b) 1 11 111
0101 1111 = 95 95
0101 1111 = 95 95
-----------
1011 1110 = 190 -66 <= 0100 0001 +1 = 0100 0010 OK ylivuoto
c)11111 111
0000 0001 = 1 1
1111 1111 = 255 -1 <= 0000 0000 +1 = 0000 0001
-----------
0000 0000 = 0 0 ylivuoto OK
d)11111 111
1111 1111 = 255 -1
1111 1111 = 255 -1
-----------
1111 1110 = 254 -2 <= 0000 0001 +1 = 0000 0010 ylivuoto OK
i)1
1000 0001 = 129 -127 <= 0111 1110 +1 = 0111 1111
1111 1110 = 254 -2
-----------
0111 1111 = 127 127 ylivuoto ylivuoto
j)
Tulos on oikein jos
- positiivisilla luvuilla ei tule ylimääräistä musitinumeroa
- 2-komplementtiesityksessä vasemman puoleiseen bittiin
tuleva ja lähtevä muistinumero ovat samoja.
2. Muuttujien esittely
1 package demo3;
2
3
8 public class MuuttujatJaTyypit {
9
10
13 public static void main(String[] args) {
14 double tyomatkanPituusPolkupyorallaKm = 9.7;
15 int suoritettujenOpintopisteidenMaara = 3;
16 int kokoTutkinnonLaajuusOp = 300;
17 double tehtyjaDemoja = 7.5;
18 char kirjanEnsimmainenKirjain = 'A';
19 double juoksu100mVoittoAika = 9.69;
20
21 System.out.printf("Työmatka: %3.1f km%n",tyomatkanPituusPolkupyorallaKm);
22 System.out.printf("Opintopisteitä: %d op%n",suoritettujenOpintopisteidenMaara);
23 System.out.printf("Tutkinto: %d op%n",kokoTutkinnonLaajuusOp);
24 System.out.printf("Demoja: %3.1f%n",tehtyjaDemoja);
25 System.out.printf("Kirja alkaa kirjaimella %c%n",kirjanEnsimmainenKirjain);
26 System.out.printf("Usain Bolt: %4.2f s%n",juoksu100mVoittoAika);
27 }
28
29 }
30
3. Muuttujien kelpoisuus
int mansikanKiloHinta; // parempi olisi double
double first,second,final; // ei ihan kuvaavia, final varattu sana
char omaNimi; // nimi ei mahdu char-muuttujaan
double metriMm; // voisi olla myös int
double tuntejaVuorokaudessa; // voisi olla myös int
real nopeus; // tyyppiä ei ole (toki voi tehdä, mutta silloin nimi alkaisi isolla
double AuringonEtaisyys; // nimen olisi hyvä alkaa pienellä
int kuukaudenKeskiLampo: // tyyppi pitäisi olla double
int kissoja,2_kanaa,kolmeKoiraa; // 2_kanaa väärin. Muut voivat olla käyttöyhteydestä riippuen ok.
int i,j,l,I; // i ja j kelpaa silmukkaan, l joskus pituutta kuvaamaan, I ei miellellään.
4. Muunnoksia
1 package demo3;
2
8 public class Muunnokset {
9
10
22 public static double fahrenheitToCelsius(double f) {
23 return (f - 32.0) * 5.0 / 9.0;
24 }
25
26
27
37 public static double paunatGrammoiksi(double painoLb) {
38 return painoLb*453.59237;
39 }
40
41
45 public static void main(String[] args) {
46 double lampotilaF = 13;
47 double lampotilaC;
48 lampotilaC = fahrenheitToCelsius(lampotilaF);
49 System.out.printf("%3.1f F = %3.1f C %n",lampotilaF,lampotilaC);
50
51 double painoLb = 9.3;
52 double painoG;
53 painoG = paunatGrammoiksi(painoLb);
54 System.out.printf("%5.3f lb = %5.3f g %n",painoLb,painoG);
55
56 }
57
58
59 }
60
5. Lisää lumiukkoja
1 package demo3;
2
3 import fi.jyu.mit.graphics.EasyWindow;
4
5
10 public class Lumiukot3 {
11
12
13
22 public static void lumiukko(EasyWindow window, double x, double y, double isonpallonSade,
23 double keskipallonSade, double paanSade) {
24 double keskipallonY = y-keskipallonSade-isonpallonSade;
25 double paanY = y-2*keskipallonSade-isonpallonSade-paanSade;
26 window.addCircle(x,y,isonpallonSade);
27 window.addCircle(x,keskipallonY,keskipallonSade);
28 window.addCircle(x,paanY,paanSade);
29 }
30
31
39 public static void lumiukko(EasyWindow window, double x, double y, double isonpallonSade,
40 double keskipallonSade) {
41 lumiukko(window,x,y,isonpallonSade,keskipallonSade,10);
42 }
43
44
51 public static void lumiukko(EasyWindow window, double x, double y, double isonpallonSade) {
52 lumiukko(window,x,y,isonpallonSade,15,10);
53 }
54
55
61 public static void lumiukko(EasyWindow window, double x, double y) {
62 lumiukko(window,x,y,20);
63 }
64
65
66
67
71 public static void main(String[] args) {
72 EasyWindow window = new EasyWindow();
73
74 lumiukko(window,20,100,30);
75 lumiukko(window,30,300,40,20);
76 lumiukko(window,274,190,50,40,30);
77 lumiukko(window,124,150);
78 lumiukko(window,190,130);
79
80 window.showWindow();
81
82 }
83
84 }
85
6. Lausekkeita
1 package demo3;
2
13 public class Lausekkeet {
14
15
16 public static final int SEKUNTEJAVUOROKAUDESSA = 24*60*60;
17
18
19 public static final double VUODENPITUUSVRK = 365.2425;
20
21
22 public static final double MAASTAAURINKOONKM = 149597871;
23
24
25 public static final double VALONNOPEUSMS = 299792458;
26
27
31 public static void main(String[] args) {
32 double tuntejaVuodessa = 24 * VUODENPITUUSVRK;
33 double valoMaahanSekuntia = MAASTAAURINKOONKM * 1000 / VALONNOPEUSMS;
34 double valovuosiKm = VALONNOPEUSMS * tuntejaVuodessa * 60 * 60 / 1000;
35
36 System.out.printf("Vuorokaudessa on %d sekuntia.%n",SEKUNTEJAVUOROKAUDESSA);
37 System.out.printf("Vuodessa on %3.1f tuntia%n",tuntejaVuodessa);
38 System.out.printf("Valolla kestää %4.1f sekuntia auringosta maahan%n",valoMaahanSekuntia);
39 System.out.printf("Valovuosi on %.0f km%n",valovuosiKm);
40
41 }
42
43 }
44
7. Aliohjelmakutsuja
1 package demo3;
2
3 import fi.jyu.mit.Music.MidiPlayer;
4
5
10 public class UkkoNoaTempo {
11
12
16 private static void soitaUkkoNoanSakeisto(MidiPlayer mp) {
17 mp.play("EEEE");
18 mp.play("GF",0.5);
19 mp.play("DDDD");
20 mp.play("FE",0.5);
21 }
22
23
27 private static void soitaUkkoNoanKertoSae(MidiPlayer mp) {
28 mp.play("CCCEDDDFEEDD");
29 mp.play("C",0.5);
30 }
31
32
36 public static void soitaUkkoNoa(MidiPlayer mp) {
37 soitaUkkoNoanKertoSae(mp);
38 soitaUkkoNoanSakeisto(mp);
39 soitaUkkoNoanKertoSae(mp);
40 }
41
42
43
46 public static void main(String[] args) {
47 MidiPlayer mp = new MidiPlayer();
48 int tempo = 150;
49 mp.setTempo(tempo); soitaUkkoNoa(mp);
50 tempo = (int)(tempo*1.5);
51 mp.setTempo(tempo); soitaUkkoNoa(mp);
52 tempo = (int)(tempo*1.5);
53 mp.setTempo(tempo); soitaUkkoNoa(mp);
54
55 }
58
59
60 }
61
B1. Merkkijonon metodeja
1 package demo3;
2
3 import java.util.Scanner;
4
5
10 public class IsoPieni {
11
12 private static final Scanner lukija = new java.util.Scanner(System.in);
13
14
15
19 public static void main(String[] args) {
20 System.out.print("Anna merkkijono >");
21 String jono = lukija.nextLine();
22
23 System.out.println("Jono isona : " + jono.toUpperCase());
24 System.out.println("Jono pienenä : " + jono.toLowerCase());
25
26 int pituus = jono.length();
27 if ( pituus > 3) pituus = 3;
28 System.out.println("Jonon 3. ekaa: " + jono.substring(0,pituus));
29
30 }
31
32 }
33
G1-2. Lumiukot heiluu
1 package demo3;
2 import fi.jyu.mit.graphics.Axis;
3 import fi.jyu.mit.graphics.Circle;
4 import fi.jyu.mit.graphics.DrawableCollection;
5 import fi.jyu.mit.graphics.EasyWindow;
6 import fi.jyu.mit.graphics.MouseFollower;
7 import fi.jyu.mit.graphics.Rotator;
8
9
14 public class Lumiukot4 {
15
16
21 public static class Lumiukko extends DrawableCollection {
22
30 public Lumiukko(double x, double y, double isonpallonSade,
31 double keskipallonSade, double paanSade) {
32 super();
33 double keskipallonY = -keskipallonSade-isonpallonSade;
34 double paanY = -2*keskipallonSade-isonpallonSade-paanSade;
35 move(x,y,0);
36 add(new Circle(0,0,isonpallonSade));
37 add(new Circle(0,keskipallonY,keskipallonSade));
38 add(new Circle(0,paanY,paanSade));
39 }
40
41
48 public Lumiukko(double x, double y, double isonpallonSade,
49 double keskipallonSade) {
50 this(x,y,isonpallonSade,keskipallonSade,10);
51 }
52
53
59 public Lumiukko(double x, double y, double isonpallonSade) {
60 this(x,y,isonpallonSade,15,10);
61 }
62
63
68 public Lumiukko(double x, double y) {
69 this(x,y,20,15,10);
70 }
71 }
72
73
76 public static void main(String[] args) {
77 EasyWindow window = new EasyWindow();
78
79 Lumiukko ukko1 = new Lumiukko(30,100,30);
80 Lumiukko ukko2 = new Lumiukko(40,300,40,20);
81 Lumiukko ukko3 = new Lumiukko(274,190,50,40,30);
82
83 window.add(ukko1);
84 window.add(ukko2);
85 window.add(ukko3);
86
87 new Rotator(ukko1,Axis.Z,3,200);
88 new Rotator(ukko1,Axis.Y,2,200);
89 new Rotator(ukko2,Axis.X,4,200);
90 new Rotator(ukko3,Axis.Z,5,200);
91
92 new MouseFollower(window.getPanel(),ukko2,0,0,0,true);
93
94 window.setTitle("Lumiukot heiluu");
95 window.showWindow();
96 }
97
98 }
99