Potenssi
Simulaatio, jolla voidaan tutkia polynomin arvoja. Kantaluku voi saada arvoja väliltä [-10, 10] ja eksponentti voi saada arvoja väliltä [-8, 8]. Ylempi liukusäädin säätää kantalukua ja alempi liukusäädin säätää eksponenttia.
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
// 18.3.2018
int a = 400; // Laskurin alkuarvo (ikkunan keskellä)
int b = 400; // Laskurin alkuarvo (ikkunan keskellä)
void setup () {
size(850,500); // ikkunan koko
stroke(0); // Musta viivan väri
strokeWeight(3);
}
void draw() {
background(255); // Tyhjennä tausta
fill(255,255,0); // Keltainen täyttöväri
rect(0,0,849,50); // Piirrä keltainen suorakulmio
rect(0,50,849,50); // Piirrä keltainen suorakulmio
fill(255,100,100); // Punainen täyttöväri
rect(a,0,50,50); // Piirrä punainen neliö
rect(b,50,50,50); // Piirrä punainen neliö
int x1 = mouseX; // Selvitä hiiren vaakakoordinaatti
int y1 = mouseY;
if (mousePressed == true) {
if ((y1 > 0) && (y1 < 50)) {
if ((x1>a) && (a < 800)) { // Jos hiiri on oikealla puolen
a++; // niin kasvata laskuria
}
if ((x1<a) && (x1 > 0)) { // Jos hiiri on vasemmalla puolen
a--; // niin pienennä laskuria
}
}
if ((y1 > 50) && (y1 < 100)) {
if ((x1>b) && (b < 800)) { // Jos hiiri on oikealla puolen
b++; // niin kasvata laskuria
}
if ((x1<b) && (x1 > 0)){ // Jos hiiri on vasemmalla puolen
b--; // niin pienennä laskuria
}
}
}
fill(0); // Musta tekstin väri
int a2 = round(map(a,0,800,-10,10));
int b2 = round(map(b,0,800,-8,8));
textSize(30);
if (a2 < 0) {
text("("+a2+")",10,250);
} else {
text(a2,30,250);
}
if (a2 < 0) {
if (b2 == 0) {
text("= 1",90,250);
} else if (b2 >0) {
text("= ("+a2,90,250);
} else {
text("= ",90,250);
text("1",135,230);
line(120,240,170,240);
text("("+a2,115,270);
}
} else {
if (b2 == 0) {
text("= 1",90,250);
} else if (b2 > 0) {
text("= "+a2,90,250);
} else {
text("= ",90,250);
text("1",130,230);
line(120,240,150,240);
if (a2 == 10) {
text(a2,115,270);
} else {
text(a2,130,270);
}
}
}
if (b2 >0) {
float summa = a2;
for (int k=1; k<b2; k++) {
if (a2 == 10) {
text("\u00B7"+a2,110+50*k,250);
} else if (a2 < 0) {
if (a2 == -10) {
text(")\u00B7("+a2,100+88*k,250);
} else {
text(")\u00B7("+a2,100+68*k,250);
}
} else {
text("\u00B7"+a2,115+28*k,250);
}
summa = summa*a2;
}
if ( a2 <0) {
if (a2 == -10) {
text(")",100+88*b2,250);
} else {
text(")",100+68*b2,250);
}
}
text("= "+round(summa),90,300);
}
if (b2 <0) {
float summa = a2;
for (int k=-1; k > b2; k--) {
if (a2 == 10) {
text("1",125+58*(-k),230);
line(120+58*(-k),240,150+58*(-k),240);
text("\u00B7",100+58*(-k),250);
text(a2,115+58*(-k),270);
} else if (a2 < 0) {
if (a2 == -10) {
text("1",145+84*(-k),230);
line(120+84*(-k),240,185+84*(-k),240);
text("\u00B7",107+84*(-k),250);
text(") ("+a2,100+84*(-k),270);
} else {
text("1",140+68*(-k),230);
line(120+68*(-k),240,170+68*(-k),240);
text("\u00B7",107+68*(-k),250);
text(") ("+a2,100+68*(-k),270);
}
} else {
text("1",125+58*(-k),230);
line(120+58*(-k),240,150+58*(-k),240);
text("\u00B7",100+58*(-k),250);
text(a2,125+58*(-k),270);
}
summa = summa*a2;
}
if ( a2 <0) {
if (a2 == -10) {
text(")",100+84*(-b2),270);
} else {
text(")",100+68*(-b2),270);
}
}
if (a2 == 0) {
text("= \u221E",90,360);
} else {
if ((summa >= 0) && (summa < 10)) {
text("1",125,340);
line(125,350,145,350);
text(" = "+(1.0/summa),155,360);
}
if ((summa >= 10) && (summa < 100)) {
text("1",135,340);
line(125,350,165,350);
text(" = "+(1.0/summa),175,360);
}
if ((summa >= 100) && (summa < 1000)) {
text("1",145,340);
line(125,350,185,350);
text(" = "+(1.0/summa),195,360);
}
if ((summa >= 1000) && (summa < 10000)) {
text("1",155,340);
line(125,350,205,350);
text(" = "+(1.0/summa),215,360);
}
if ((summa >= 10000) && (summa < 100000)) {
text("1",165,340);
line(125,350,225,350);
text(" = "+(1.0/summa),235,360);
}
if ((summa >= 100000) && (summa < 1000000)) {
text("1",175,340);
line(125,350,245,350);
text(" = "+(1.0/summa),255,360);
}
if ((summa >= 1000000) && (summa < 10000000)) {
text("1",185,340);
line(125,350,265,350);
text(" = "+(1.0/summa),275,360);
}
if ((summa >= 10000000) && (summa < 100000000)) {
text("1",195,340);
line(125,350,285,350);
text(" = "+(1.0/summa),295,360);
}
if (summa >= 100000000) {
text("1",205,340);
line(125,350,305,350);
text(" = "+(1.0/summa),315,360);
}
if ((summa <= 0) && (summa > -10)) {
text("1",135,340);
line(135,350,155,350);
text(" = "+(1.0/summa),165,360);
}
if ((summa <= -10) && (summa > -100)) {
text("1",135,340);
line(135,350,175,350);
text(" = "+(1.0/summa),185,360);
}
if ((summa <= -100) && (summa > -1000)) {
text("1",145,340);
line(135,350,195,350);
text(" = "+(1.0/summa),205,360);
}
if ((summa <= -1000) && (summa > -10000)) {
text("1",155,340);
line(135,350,215,350);
text(" = "+(1.0/summa),225,360);
}
if ((summa <= -10000) && (summa > -100000)) {
text("1",165,340);
line(135,350,235,350);
text(" = "+(1.0/summa),245,360);
}
if ((summa <= -100000) && (summa > -1000000)) {
text("1",175,340);
line(135,350,255,350);
text(" = "+(1.0/summa),265,360);
}
if ((summa <= -1000000) && (summa > -10000000)) {
text("1",185,340);
line(135,350,275,350);
text(" = "+(1.0/summa),285,360);
}
if ((summa <= -10000000) && (summa > -100000000)) {
text("1",195,340);
line(135,350,295,350);
text(" = "+(1.0/summa),305,360);
}
if (summa <= -100000000) {
text("1",205,340);
line(135,350,315,350);
text(" = "+(1.0/summa),325,360);
}
text("=",90,360);
text(round(summa),125,390);
}
}
if (a2 == -10) {
textSize(20);
} else {
textSize(30);
}
text(a2,a+10,35);
textSize(30);
text(b2,b+10,85);
textSize(20);
if (a2 == -10) {
text(b2,80,230);
}
if ((a2 >= -9) && (a2 < 0)) {
text(b2,60,230);
}
if ((a2 >= 0) && (a2 < 10)) {
text(b2,50,230);
}
if (a2 == 10) {
text(b2,70,230);
}
}
