Monomien kertolasku
Monomien kertolasku

Tämä simulaatio havainnollistaa monomien kertolaskua. Ohjelman koodi on seuraava. Kopioi tämä koodi kokonaisuudessaan ohjelmointiympäristöön ja suorita koodi. Sinun ei tarvitse tehdä koodiin mitään muutoksia.
// Ohjelman tehnyt e-Oppi Oy
// 21.3.2018
int a = 450; // Laskurin alkuarvo (ikkunan keskellä)
int b = 150; // Laskurin alkuarvo (ikkunan keskellä)
int c = 450; // Laskurin alkuarvo (ikkunan keskellä)
int d = 150; // Laskurin alkuarvo (ikkunan keskellä)
void setup () {
size(850,750); // ikkunan koko
}
void draw() {
background(255); // Tyhjennä tausta
stroke(0); // Musta viivan väri
strokeWeight(2);
textSize(30);
fill(255,255,0); // Keltainen täyttöväri
rect(0,0,849,40); // Piirrä keltainen suorakulmio
rect(0,40,849,40); // Piirrä keltainen suorakulmio
rect(0,80,849,40); // Piirrä keltainen suorakulmio
rect(0,120,849,40); // Piirrä keltainen suorakulmio
fill(255,100,100); // Punainen täyttöväri
rect(a,0,50,40); // Piirrä punainen neliö
rect(b,40,50,40); // Piirrä punainen neliö
rect(c,80,50,40); // Piirrä punainen neliö
rect(d,120,50,40); // Piirrä punainen neliö
stroke(0);
int x1 = mouseX; // Selvitä hiiren vaakakoordinaatti
int y1 = mouseY;
if (mousePressed == true) {
if ((y1 > 0) && (y1 < 40)) {
if ((x1>a) && (a < 800)) { // Jos hiiri on oikealla puolen
a++; // niin kasvata laskuria
}
if ((x1<a) && (a > 0)) { // Jos hiiri on vasemmalla puolen
a--; // niin pienennä laskuria
}
}
if ((y1 > 40) && (y1 < 80)) {
if ((x1>b) && (b < 800)) { // Jos hiiri on oikealla puolen
b++; // niin kasvata laskuria
}
if ((x1<b) && (b > 0)) { // Jos hiiri on vasemmalla puolen
b--; // niin pienennä laskuria
}
}
if ((y1 > 80) && (y1 < 120)) {
if ((x1>c) && (c < 800)) { // Jos hiiri on oikealla puolen
c++; // niin kasvata laskuria
}
if ((x1<c) && (c > 0)) { // Jos hiiri on vasemmalla puolen
c--; // niin pienennä laskuria
}
}
if ((y1 > 120) && (y1 < 160)) {
if ((x1>d) && (d < 800)) { // Jos hiiri on oikealla puolen
d++; // niin kasvata laskuria
}
if ((x1<d) && (d > 0)) { // Jos hiiri on vasemmalla puolen
d--; // niin pienennä laskuria
}
}
}
fill(0); // Musta tekstin väri
strokeWeight(2);
int a2 = round((map(a,0,800,-9,9)));
int b2 = round((map(b,0,800,1,9)));
int c2 = round((map(c,0,800,-9,9)));
int d2 = round((map(d,0,800,1,9)));
text(""+a2,a+4,33);
text(""+b2,b+4,73);
text(""+c2,c+4,113);
text(""+d2,d+4,153);
if (a2 >= 0) {
text(a2+"x",10,210);
text(b2,43,190);
} else {
text(a2+"x",10,210);
text(b2,63,190);
}
if (c2 >= 0) {
int dx = 0;
if (a2 < 0) {dx = 20; }
text("\u00B7 "+c2+"x",80,210);
text(d2,135,190);
text(" = "+a2+"\u00B7"+c2+"\u00B7x",190,210);
text(b2+"+"+d2,305+dx,190);
} else {
int dx = 0;
if (a2 < 0) {dx = 20; }
text("\u00B7 ("+c2+"x )",80,210);
text(d2,165,190);
text(" = "+a2+"\u00B7 ("+c2+")\u00B7x",190,210);
text(b2+"+"+d2,350+dx,190);
}
text("= "+(a2*c2)+"x",440,210);
int dz = 0;
if (abs(a2*c2) > 9) { dz = dz + 20; }
if ((a2 != 0) && (d2 != 0)) {
if ((a2 < 0) && ( c2 != 0)) { dz = dz + 20; }
if ((c2 < 0) && ( a2 != 0)) { dz = dz + 20; }
if ((a2 < 0) && (c2 < 0)) { dz = dz - 40; }
}
text((b2+d2),510+dz,190);
if (a2*c2 ==0) { text(" = 0",540,210); }
fill(100,100,255,50);
rect(100,300,430,430);
fill(0,0,255);
stroke(0);
strokeWeight(2);
for (int t=1; t <= abs(a2); t++) {
monikulmio(3+t*1.5,9,1,b2,30,a2);
}
for (int u=1; u <= abs(c2); u++) {
monikulmio(2,0.5+9+u*1.5,1,d2,30,c2);
}
for (int r=1; r <= abs(a2); r++) {
for (int m=1; m <= abs(c2); m++) {
monikulmio(3+r*1.5,0.5+9+m*1.5,1,(b2+d2),30,a2*c2);
}
}
}
void monikulmio(float x, float y, float sade, float lukumaara, float alkukulma, int pos) {
if (lukumaara > 0) {
if (lukumaara == 4) { alkukulma = 0; }
if (lukumaara == 5) { alkukulma = 18; }
if (lukumaara == 7) { alkukulma = 18; }
if (lukumaara == 8) { alkukulma = 20; }
if (pos >= 0) {
fill(255,100,100);
} else {
fill(100,100,255);
}
float x2 = map(x,-10,10,-300,300);
float y2 = map(y,-10,10,-300,300);
if (lukumaara == 1) {
ellipse(x2,y2,5,5);
} else {
float lisays = 360.0/lukumaara;
float kulma = alkukulma+lisays;
beginShape();
for (int s = 0; s<=lukumaara; s++) {
float x1 = sade*20.0*cos(radians(kulma));
float y1 = sade*20.0*sin(radians(kulma));
vertex(x2+x1,y2+y1);
kulma = kulma+lisays;
}
endShape();
fill(255);
textSize(15);
if (lukumaara > 2) {
int sd = 0;
if ((lukumaara) > 9) { sd = 5; }
text(round(lukumaara),x2-5-sd,y2+5);
}
}
}
}