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);
 } 
}