Polynomien kertolasku

Polynomien kertolasku



Tämä simulaatio havainnollistaa algebralaattojen avulla polynomien 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
// 20.3.2018
int a = 450; // Laskurin alkuarvo (ikkunan keskellä)
int b = 450; // Laskurin alkuarvo (ikkunan keskellä)
int c = 450; // Laskurin alkuarvo (ikkunan keskellä)
int d = 450; // 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,-6,6)));
 int b2 = round((map(b,0,800,-6,6)));
 int c2 = round((map(c,0,800,-6,6)));
 int d2 = round((map(d,0,800,-6,6)));
 
 text(""+a2,a+4,33);
 text(""+b2,b+4,73);
 text(""+c2,c+4,113);
 text(""+d2,d+4,153);
 fill(100,100,255,50);
 rect(80,220,480,480);
 alaatat(a2,b2,c2,d2);
}

void alaatat(int a3, int b3, int c3,int d3) {
 int [][] taulu = new int[13][13];
 for (int aa = 0; aa < 10; aa++) {
 for (int bb = 0; bb < 10; bb++) {
 taulu[aa][bb] = 0; 
 }
 }
 fill(0);
 if (d3>=0) {
   if ((c3 == 0) && (d3 > 0)) {
     text("\u00B7 "+d3+" = ",135,190);
   } else if ((c3 > 0) && (d3 == 0)) {
     text("\u00B7 "+c3+"x = ",135,190);
   } else if ((c3 < 0) && (d3 == 0)) {
     text("\u00B7 ("+c3+"x) = ",135,190);
   } else if ((c3 == 0) && (d3 == 0)) {
      text("\u00B7 0 = ",135,190);
   } else {
     text("\u00B7 ("+c3+"x +"+d3+") = ",135,190);
   }
 }
 if (d3<0) {
   if (c3 == 0) {
     text("\u00B7 ("+d3+") = ",135,190);
   } else {
     text("\u00B7 ("+c3+"x "+d3+") = ",135,190);
   }
 }

 if (b3>=0) {
   if ((a3 == 0) && (b3 > 0)) {
      text(b3,110,190);
   } else if ((a3 > 0) && (b3 == 0)) {
       text(""+a3+"x",90,190);
   } else if  ((a3 < 0) && (b3 == 0)) {
      text(""+a3+"x",80,190);
   } else if ((a3 == 0) && (b3 == 0)) {
        text("0",110,190);
   } else {
     text("("+a3+"x +"+b3+")",10,190);
   }
 }
 if (b3<0) {
   if (a3 == 0) {
      text(b3,100,190);
   } else {
     text("("+a3+"x "+b3+")",10,190);
   }
 }
if ((a3*d3 >= 0) && (b3*c3 >= 0) && (b3*d3 >= 0)) {
   if ((a3*d3 == 0) && (b3*c3 > 0) && (b3*d3 > 0)) {
        if (a3*c3 == 0) {
           text(b3*c3+"x +"+b3*d3,320,190);
        } else {
          text(a3*c3+"x\u00B2 +"+b3*c3+"x +"+b3*d3,320,190);
        }
   } else if ((a3*d3 > 0) && (b3*c3 == 0) && (b3*d3 > 0)) {
       if (a3*c3 == 0) {
          text(a3*d3+"x +"+b3*d3,320,190);
        } else {
         text(a3*c3+"x\u00B2 +"+a3*d3+"x +"+b3*d3,320,190);
        }
   } else if ((a3*d3 > 0) && (b3*c3 > 0) && (b3*d3 == 0)) {
      if (a3*c3 == 0) {
          text(a3*d3+"x +"+b3*c3+"x ",320,190);
        } else {
          text(a3*c3+"x\u00B2 +"+a3*d3+"x +"+b3*c3+"x ",320,190);
        }
   } else if ((a3*d3 == 0) && (b3*c3 == 0) && (b3*d3 > 0)) {
      if (a3*c3 == 0) {
          text(b3*d3,320,190);
        } else {
          text(a3*c3+"x\u00B2 +"+b3*d3,320,190);
        }
   } else if ((a3*d3 == 0) && (b3*c3 > 0) && (b3*d3 == 0)) {
      if (a3*c3 == 0) {
         text(b3*c3+"x ",320,190);
        } else {
         text(a3*c3+"x\u00B2 +"+b3*c3+"x ",320,190);
        }
   } else if ((a3*d3 > 0) && (b3*c3 == 0) && (b3*d3 == 0)) {
      if (a3*c3 == 0) {
           text(a3*d3+"x ",320,190);
        } else {
          text(a3*c3+"x\u00B2 +"+a3*d3+"x ",320,190);
        }
   } else if ((a3*d3 == 0) && (b3*c3 == 0) && (b3*d3 == 0)) {
      if (a3*c3 == 0) {
              text("0",320,190);
        } else {
          text(a3*c3+"x\u00B2 ",320,190);
        }
   } else {
      if (a3*c3 == 0) {
          text(a3*d3+"x +"+b3*c3+"x +"+b3*d3,320,190);
        } else {
          text(a3*c3+"x\u00B2 +"+a3*d3+"x +"+b3*c3+"x +"+b3*d3,320,190);
        }
   }
}
if ((a3*d3 < 0) && (b3*c3 >= 0) && (b3*d3 >= 0)) {
  if ((b3*c3 == 0) && (b3*d3 > 0)) {
      if (a3*c3 == 0) {
         text(a3*d3+"x +"+b3*d3,320,190);
      } else {
         text(a3*c3+"x\u00B2 "+a3*d3+"x +"+b3*d3,320,190);
      }
  } else if ((b3*c3 > 0) && (b3*d3 == 0)) {
        if (a3*c3 == 0) {
        text(a3*d3+"x +"+b3*c3+"x ",320,190);
      } else {
       text(a3*c3+"x\u00B2 "+a3*d3+"x +"+b3*c3+"x ",320,190);
      }
  } else if ((b3*c3 == 0) && (b3*d3 == 0)) {
        if (a3*c3 == 0) {
         text(a3*d3+"x ",320,190);
      } else {
        text(a3*c3+"x\u00B2 "+a3*d3+"x ",320,190);
      }
  } else {
        if (a3*c3 == 0) {
        text(a3*d3+"x +"+b3*c3+"x +"+b3*d3,320,190);
      } else {
        text(a3*c3+"x\u00B2 "+a3*d3+"x +"+b3*c3+"x +"+b3*d3,320,190);
      }
  }
}
if ((a3*d3 >= 0) && (b3*c3 < 0) && (b3*d3 >= 0)) {
  if ((a3*d3 == 0) && (b3*d3 > 0)) {
     if (a3*c3 == 0) {
        text(b3*c3+"x +"+b3*d3,320,190);
     } else {
       text(a3*c3+"x\u00B2 "+b3*c3+"x +"+b3*d3,320,190);
     }
  } else if ((a3*d3 > 0) && (b3*d3 == 0)) {
        if (a3*c3 == 0) {
         text(a3*d3+"x "+b3*c3+"x ",320,190);
     } else {
        text(a3*c3+"x\u00B2 +"+a3*d3+"x "+b3*c3+"x ",320,190);
     }
  } else if ((a3*d3 == 0) && (b3*d3 == 0)) {
        if (a3*c3 == 0) {
         text(b3*c3+"x ",320,190);
     } else {
       text(a3*c3+"x\u00B2 "+b3*c3+"x ",320,190);
     }
  } else {
        if (a3*c3 == 0) {
       text(a3*d3+"x "+b3*c3+"x +"+b3*d3,320,190);
     } else {
      text(a3*c3+"x\u00B2 +"+a3*d3+"x "+b3*c3+"x +"+b3*d3,320,190);
     }
  }
}

if ((a3*d3 >= 0) && (b3*c3 >= 0) && (b3*d3 < 0)) {
  if ((a3*d3 == 0) && (b3*c3 > 0)) {
     if (a3*c3 == 0) {
      text(b3*c3+"x "+b3*d3,320,190);
     } else {
      text(a3*c3+"x\u00B2 +"+b3*c3+"x "+b3*d3,320,190);
     }
  } else   if ((a3*d3 > 0) && (b3*c3 == 0)) {
     if (a3*c3 == 0) {
      text(a3*d3+"x "+b3*d3,320,190);
     } else {
      text(a3*c3+"x\u00B2 +"+a3*d3+"x "+b3*d3,320,190);
     }
  } else   if ((a3*d3 == 0) && (b3*c3 == 0)) {
     if (a3*c3 == 0) {
      text(b3*d3,320,190);
     } else {
      text(a3*c3+"x\u00B2 "+b3*d3,320,190);
     }
  } else {
     if (a3*c3 == 0) {
      text(a3*d3+"x +"+b3*c3+"x "+b3*d3,320,190);
     } else {
      text(a3*c3+"x\u00B2 +"+a3*d3+"x +"+b3*c3+"x "+b3*d3,320,190);
     }
  }
 
}

if ((a3*d3 < 0) && (b3*c3 < 0) && (b3*d3 >= 0)) {
  if (b3*d3 == 0) {
    if (a3*c3 == 0) {
      text(a3*d3+"x "+b3*c3+"x ",320,190);
    }  else {
      text(a3*c3+"x\u00B2 "+a3*d3+"x "+b3*c3+"x ",320,190);
    }
  } else {
    if (a3*c3 == 0) {
      text(a3*d3+"x "+b3*c3+"x +"+b3*d3,320,190);
    } else {
      text(a3*c3+"x\u00B2 "+a3*d3+"x "+b3*c3+"x +"+b3*d3,320,190);
    }
  }
 
}

if ((a3*d3 < 0) && (b3*c3 >= 0) && (b3*d3 < 0)) {
  if (b3*c3 == 0) {
    if (a3*c3 == 0) {
      text(a3*d3+"x "+b3*d3,320,190);
    } else {
      text(a3*c3+"x\u00B2 "+a3*d3+"x "+b3*d3,320,190);
    }
  } else {
    if (a3*c3 == 0) {
      text(a3*d3+"x +"+b3*c3+"x "+b3*d3,320,190);
    } else {
       text(a3*c3+"x\u00B2 "+a3*d3+"x +"+b3*c3+"x "+b3*d3,320,190);
    }
  }
}
if ((a3*d3 >= 0) && (b3*c3 < 0) && (b3*d3 < 0)) {
  if (a3*d3 == 0) {
       if (a3*c3 == 0) {
          text(b3*c3+"x "+b3*d3,320,190);
       } else {
          text(a3*c3+"x\u00B2 "+b3*c3+"x "+b3*d3,320,190);
       }
  } else {
    if (a3*c3 == 0) {
         text(a3*d3+"x "+b3*c3+"x "+b3*d3,320,190);
       } else {
         text(a3*c3+"x\u00B2 +"+a3*d3+"x "+b3*c3+"x "+b3*d3,320,190);
       }
  }
}
if ((a3*d3 < 0) && (b3*c3 < 0) && (b3*d3 < 0)) {
   if (a3*c3 == 0) {
      text(a3*d3+"x "+b3*c3+"x "+b3*d3,320,190);
   } else {
     text(a3*c3+"x\u00B2 "+a3*d3+"x "+b3*c3+"x "+b3*d3,320,190);
   }
}
textSize(14);
 for (int r=1; r <= abs(a3); r++) {
 if (a3 >=0) {
 fill(255,100,100);
 taulu[r][0]=2;
 }
 if (a3 < 0) {
 fill(100,100,255);
 taulu[r][0]=-2;
 }
 rect(20+r*60,200,60,20); 
 fill(0);
 if (a3 > 0) {
 text("x",42+r*60,215);
 }
 if (a3 < 0) {
 text("-x",40+r*60,215);
 }
 
 }
 for (int r=1; r <= abs(b3); r++) {
 
 if (b3 >=0) {
 fill(255,100,100);
 taulu[abs(a3)+r][0]=1;
 }
 if (b3 < 0) {
 fill(100,100,255);
 taulu[abs(a3)+r][0]=-1;
 }
 rect(60+abs(a3)*60+r*20,200,20,20);
 fill(0);
 if (b3 > 0) {
 text("1",65+abs(a3)*60+r*20,215);
 }
 if (b3 < 0) {
 text("-1",63+abs(a3)*60+r*20,215);
 }
 
 }
 for (int r=1; r <= abs(c3); r++) {
 if (c3 >=0) {
 fill(255,100,100);
 taulu[0][r]=2;
 }
 if (c3 < 0) {
 fill(100,100,255);
 taulu[0][r]=-2;
 }
 rect(60,160+r*60,20,60);
 fill(0);
 if (c3 > 0) {
 text("x",65,195+r*60);
 }
 if (c3 < 0) {
 text("-x",62,195+r*60);
 }
 }
 for (int r=1; r <= abs(d3); r++) {
 
 if (d3 >=0) {
 fill(255,100,100);
 taulu[0][abs(c3)+r]=1;
 }
 if (d3 < 0) {
 fill(100,100,255);
 taulu[0][abs(c3)+r]=-1;
 }
 rect(60,200+abs(c3)*60+r*20,20,20);
 fill(0);
 if (d3 > 0 ) {
 text("1",65,217+abs(c3)*60+r*20);
 }
 if (d3 < 0 ) {
 text("-1",62,217+abs(c3)*60+r*20);
 }
 }
 for (int aa = 1; aa < 13; aa++) {
 for (int bb = 1; bb < 13; bb++) {
 if ((taulu[aa][0]==-2) && (taulu[0][bb]==2)) { taulu[aa][bb] = -3; } 
 if ((taulu[aa][0]==2) && (taulu[0][bb]==-2)) { taulu[aa][bb] = -3; } 
 if ((taulu[aa][0]==-2) && (taulu[0][bb]==-2)) { taulu[aa][bb] = 3; } 
 if ((taulu[aa][0]==2) && (taulu[0][bb]==2)) { taulu[aa][bb] = 3; } 
 if ((taulu[aa][0]==-1) && (taulu[0][bb]==1)) { taulu[aa][bb] = -1; } 
 if ((taulu[aa][0]==1) && (taulu[0][bb]==-1)) { taulu[aa][bb] = -1; } 
 if ((taulu[aa][0]==-1) && (taulu[0][bb]==-1)) { taulu[aa][bb] = 1; } 
 if ((taulu[aa][0]==1) && (taulu[0][bb]==1)) { taulu[aa][bb] = 1; } 
 if ((taulu[aa][0]==-2) && (taulu[0][bb]==1)) { taulu[aa][bb] = -2; } 
 if ((taulu[aa][0]==2) && (taulu[0][bb]==-1)) { taulu[aa][bb] = -2; } 
 if ((taulu[aa][0]==-2) && (taulu[0][bb]==-1)) { taulu[aa][bb] = 2; } 
 if ((taulu[aa][0]==2) && (taulu[0][bb]==1)) { taulu[aa][bb] = 2; }
 if ((taulu[aa][0]==1) && (taulu[0][bb]==2)) { taulu[aa][bb] = 1; } 
 if ((taulu[aa][0]==-1) && (taulu[0][bb]==2)) { taulu[aa][bb] = -2; } 
 if ((taulu[aa][0]==1) && (taulu[0][bb]==-2)) { taulu[aa][bb] = -2; } 
 if ((taulu[aa][0]==-1) && (taulu[0][bb]==-2)) { taulu[aa][bb] = 2; } 
 if ((taulu[aa][0]==1) && (taulu[0][bb]==2)) { taulu[aa][bb] = 2; } 
 }
 }
 int vaaka = 0;

 for (int aa = 1; aa < 13; aa++) { 
 if (taulu[aa][0] == 2 ) { vaaka = vaaka+60; }
 if (taulu[aa][0] == -2 ) { vaaka = vaaka+60; }
 if (taulu[aa][0] == 1 ) { vaaka = vaaka+20; }
 if (taulu[aa][0] == -1 ) { vaaka = vaaka+20; }
 int pysty = 0;
 for (int bb = 1; bb < 13; bb++) {
 if (taulu[0][bb] == 2 ) { pysty = pysty+60; }
 if (taulu[0][bb] == -2 ) { pysty = pysty+60; }
 if (taulu[0][bb] == 1 ) { pysty = pysty+20; }
 if (taulu[0][bb] == -1 ) { pysty = pysty+20; }
 if (taulu[aa][bb] == 3) {
 fill(255,100,100);
 rect(20+vaaka,160+pysty,60,60);
 fill(0);
 text("x\u00B2",45+vaaka,195+pysty);
 }
 if (taulu[aa][bb] == -3) {
 fill(100,100,255);
 rect(20+vaaka,160+pysty,60,60);
 fill(0);
 text("-x\u00B2",40+vaaka,195+pysty);
 }
 if ((taulu[aa][bb] == 2) && (taulu[0][bb]== 2)) {
 fill(255,100,100);
 rect(60+vaaka,160+pysty,20,60);
 fill(0);
 text("x",67+vaaka,195+pysty);
 }
 if ((taulu[aa][bb] == -2) && (taulu[0][bb]== 2)) {
 fill(100,100,255);
 rect(60+vaaka,160+pysty,20,60);
 fill(0);
 text("-x",62+vaaka,195+pysty);
 }
 if ((taulu[aa][bb] == 2) && (taulu[aa][0]== 2)) {
 fill(255,100,100);
 rect(20+vaaka,200+pysty,60,20);
 fill(0);
 text("x",45+vaaka,215+pysty);
 }
 if ((taulu[aa][bb] == -2) && (taulu[aa][0]== 2)) {
 fill(100,100,255);
 rect(20+vaaka,200+pysty,60,20);
 fill(0);
 text("-x",40+vaaka,215+pysty);
 }
 if ((taulu[aa][bb] == 2) && (taulu[0][bb]== -2)) {
 fill(255,100,100);
 rect(60+vaaka,160+pysty,20,60);
 fill(0);
 text("x",67+vaaka,195+pysty);
 }
 if ((taulu[aa][bb] == -2) && (taulu[0][bb]== -2)) {
 fill(100,100,255);
 rect(60+vaaka,160+pysty,20,60);
 fill(0);
 text("-x",62+vaaka,195+pysty);
 }
 if ((taulu[aa][bb] == 2) && (taulu[aa][0]== -2)) {
 fill(255,100,100);
 rect(20+vaaka,200+pysty,60,20);
 fill(0);
 text("x",45+vaaka,215+pysty);
 }
 if ((taulu[aa][bb] == -2) && (taulu[aa][0]== -2)) {
 fill(100,100,255);
 rect(20+vaaka,200+pysty,60,20);
 fill(0);
 text("-x",40+vaaka,215+pysty);
 }
 if (taulu[aa][bb] == 1) {
 fill(255,100,100);
 rect(60+vaaka,200+pysty,20,20);
 fill(0);
 text("1",65+vaaka,217+pysty);
 }
 if (taulu[aa][bb] == -1) {
 fill(100,100,255);
 rect(60+vaaka,200+pysty,20,20);
 fill(0);
 text("-1",62+vaaka,217+pysty);
 }
 }
 }
 
}