วันพฤหัสบดีที่ 25 กรกฎาคม พ.ศ. 2556

Binary display (การบวกเลขฐานสอง)





CODE

size(280,150);
background(250);

int num1 = 10;          //ค่าตัวเลข1
int num2 = 2;          //ค่าตัวเลข2
int [] n1 = new int [4];          //สร้าง Array ชื่อ n1 ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่าเลขฐานสองของ num1
int i1 = 3;          //ให้ตัวแปร i1 เท่ากับ 3 (ลำดับที่ 3 ใน Array)
int [] n2 = new int [4];          //สร้าง Array ชื่อ n2 ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่าเลขฐานสองของ num2
int i2 = 3;          //ให้ตัวแปร i2 เท่ากับ 3 (ลำดับที่ 3 ใน Array)
          //แสดงตัวเลขที่นำมาบวก
fill(0);
textSize(20);
text(num1+" + "+num2+" = ",10,30);

          //ค่าเลขฐานสอง ของ num1
while(i1>=0){          //ถ้าค่าตัวแปร i1 มากกว่าหรือเท่ากับ 0
   n1[i1] =  num1%2;          //Array ชื่อ n1 ลำดับที่ i1 มีค่าเท่ากับ เศษเหลือของ num1 หาร 2
   if(num1%2!=0){          //ถ้าเศษเหลือของ num1 หาร 2 ไม่เท่ากับ 0
   num1 = num1-1;          //ให้ num1 มีค่าลดลง 1
   }
   else if(num1==1){          //แต่ถ้า num1 เท่ากับ 1
   num1 = 2;         //ให้ num1 เท่ากับ 2
   }
*สร้างเงื่อนไข if(num1%2!=0) และ else if(num1==1)  เนื่องจากถ้าหาร 2 ไม่ลงตัวจะทำให้ num1/2 ในบรรทัดล่างติดค่าทศนิยม  และเมื่อทำซ้ำต่อไปก็จะได้ค่าเศษเหลือเป็นเลขทศนิยม
   num1 =  num1/2;          //ให้ num1 มีค่าเท่ากับ num1 หาร 2 เพื่อนำค่ามาทำซ้ำเพื่อหาเศษเหลือในลำดับต่อไป
   i1 = i1 - 1;          //ให้ i1 ลดลง 1 เพื่อเลื่อนลำดับใน Array
}

          //ค่าเลขฐาน2 ของnum2
while(i2>=0){          //ถ้าค่าตัวแปร i2 มากกว่าหรือเท่ากับ 0
   n2[i2] =  num2%2;          //Array ชื่อ n2 ลำดับที่ i2 มีค่าเท่ากับ เศษเหลือของ num2 หาร 2
   if(num2%2!=0){          //ถ้าเศษเหลือของ num2 หาร 2 ไม่เท่ากับ 0
   num2 = num2-1;          //ให้ num2 มีค่าลดลง 1
   }
   else if(num2==1){          //แต่ถ้า num2 เท่ากับ 1
   num2 = 2;         //ให้ num2 เท่ากับ 2
   }
*สร้างเงื่อนไข if(num2%2!=0) และ else if(num2==1)  เนื่องจากถ้าหาร 2 ไม่ลงตัวจะทำให้ num2/2 ในบรรทัดล่างติดค่าทศนิยม  และเมื่อทำซ้ำต่อไปก็จะได้ค่าเศษเหลือเป็นเลขทศนิยม
   num2 =  num2/2;          //ให้ num2 มีค่าเท่ากับ num2 หาร 2 เพื่อนำค่ามาทำซ้ำเพื่อหาเศษเหลือในลำดับต่อไป
   i2 = i2 - 1;          //ให้ i2 ลดลง 1 เพื่อเลื่อนลำดับใน Array
}
          //แสดงตัวเลขฐานสองที่นำมาบวก
fill(0);
textSize(20);
text(n1+" + "+n2+" = ",100,30);

          //ตัวทด
int []c = new int [4];          //สร้าง Array ชื่อ c ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่าเลขฐานสองของ c (ตัวทด)
int ic = 0;          //ให้ตัวแปร ic เท่ากับ 0 (ลำดับที่ 0 ใน Array)
while(ic<c.length){          //ถ้าค่าตัวแปร ic น้อยกว่าความยาวของ Array ชื่อ c (ซึ่งเท่ากับ 4)
  if((n1[ic]==0)&&(n2[ic]==0)){          //ถ้าค่าของตัวแปร n1,n2 ในลำดับที่ ic เท่ากับ 0
    c[ic-1] = 0;          //ให้ค่าตัวแปรใน Array ชื่อ c ในลำดับที่ ic - 1 เท่ากับ 0
  }
  else if((n1[ic]==1)&&(n2[ic]==0)){          //ถ้าค่าของตัวแปร n1 ในลำดับที่ ic เท่ากับ 1,n2 ในลำดับที่ ic เท่ากับ 0
    c[ic-1] = 0;          //ให้ค่าตัวแปรใน Array ชื่อ c ในลำดับที่ ic - 1 เท่ากับ 0
  }
  else if((n1[ic]==0)&&(n2[ic]==1)){          //ถ้าค่าของตัวแปร n1 ในลำดับที่ ic เท่ากับ 0,n2 ในลำดับที่ ic เท่ากับ 1
    c[ic-1] = 0;          //ให้ค่าตัวแปรใน Array ชื่อ c ในลำดับที่ ic - 1 เท่ากับ 0
  }
  else if((n1[ic]==1)&&(n2[ic]==1)){          //ถ้าค่าของตัวแปร n1,n2 ในลำดับที่ ic เท่ากับ 1
    c[ic-1] = 1;          //ให้ค่าตัวแปรใน Array ชื่อ c ในลำดับที่ ic - 1 เท่ากับ 1
  }
  ic = ic + 1;          //เพิ่มค่า ic ทีละ 1 เพื่อเลื่อนลำดับใน Array
}
*boolean เป็นชนิดของตัวแปรที่มี 2 ค่า คือ true และ false
          //เปลี่ยนค่าเลขฐานสองของ num1 เป็น true,false
boolean []b1 = new boolean [4];          //สร้าง Array ชื่อ b1 ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่า true,false ของ num1
int ib1 = 0;          //ให้ตัวแปร ib1 เท่ากับ 0 (ลำดับที่ 0 ใน Array)
while(ib1<b1.length){          //ถ้าค่าตัวแปร ib1 น้อยกว่าความยาวของ Array ชื่อ b1 (ซึ่งเท่ากับ 4)
  if(n1[ib1]==0){         //ถ้าค่าของตัวแปร n1 ในลำดับที่ ib1 เท่ากับ 0
    b1[ib1] = false;          //ให้ใน Array ชื่อ b1 ในลำดับที่ ib1 เท่ากับ false
  }
  else if(n1[ib1]==1){         //ถ้าค่าของตัวแปร n1 ในลำดับที่ ib1 เท่ากับ 1
    b1[ib1] = true;          //ให้ใน Array ชื่อ b1 ในลำดับที่ ib1 เท่ากับ true
  }
  ib1 = ib1 + 1;          //เพิ่มค่า ib1 ทีละ 1 เพื่อเลื่อนลำดับใน Array
}
          //เปลี่ยนค่าเลขฐานสองของ num2 เป็น true,false
boolean []b2 = new boolean [4];          //สร้าง Array ชื่อ b2 ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่า true,false ของ num2
int ib2 = 0;          //ให้ตัวแปร ib2 เท่ากับ 0 (ลำดับที่ 0 ใน Array)
while(ib2<b2.length){          //ถ้าค่าตัวแปร ib2 น้อยกว่าความยาวของ Array ชื่อ b2 (ซึ่งเท่ากับ 4)
  if(n2[ib2]==0){         //ถ้าค่าของตัวแปร n2 ในลำดับที่ ib2 เท่ากับ 0
    b2[ib2] = false;          //ให้ใน Array ชื่อ b2 ในลำดับที่ ib2 เท่ากับ false
  }
  else if(n2[ib2]==1){         //ถ้าค่าของตัวแปร n2 ในลำดับที่ ib2 เท่ากับ 1
    b2[ib2] = true;          //ให้ใน Array ชื่อ b2 ในลำดับที่ ib2 เท่ากับ true
  }
  ib2 = ib2 + 1;          //เพิ่มค่า ib2 ทีละ 1 เพื่อเลื่อนลำดับใน Array
}
          //เปลี่ยนค่าเลขฐานสองของตัวทด เป็น true,false
boolean [] bc = new boolean [4];          //สร้าง Array ชื่อ bc ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่า true,false ของตัวทด
int ibc = 0;          //ให้ตัวแปร ibc เท่ากับ 0 (ลำดับที่ 0 ใน Array)
while(ibc<bc.length){          //ถ้าค่าตัวแปร ibc น้อยกว่าความยาวของ Array ชื่อ bc (ซึ่งเท่ากับ 4)
  if(c[ibc]==0){         //ถ้าค่าของตัวแปร c ในลำดับที่ ibc เท่ากับ 0
    bc[ibc] = false;          //ให้ใน Array ชื่อ bc ในลำดับที่ ibc เท่ากับ false
  }
  else if(c[ibc]==1){         //ถ้าค่าของตัวแปร c ในลำดับที่ ibc เท่ากับ 1
    bc[ibc] = true;          //ให้ใน Array ชื่อ bc ในลำดับที่ ibc เท่ากับ true
  }
  ibc = ibc + 1;          //เพิ่มค่า ibc ทีละ 1 เพื่อเลื่อนลำดับใน Array
}

          //ผลลัพธ์ที่ยังไม่รวมตัวทด
เป็น true,false
boolean [] r = new boolean [4];          //สร้าง Array ชื่อ r ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่า true,false ของผลลัพธ์ที่ยังไม่รวมตัวทด
int ir = 0;          //ให้ตัวแปร ir เท่ากับ 0 (ลำดับที่ 0 ใน Array)
while(ir<r.length){          //ถ้าค่าตัวแปร ir น้อยกว่าความยาวของ Array ชื่อ r (ซึ่งเท่ากับ 4)
   r[ir] = ((!b1[ir])&&b2[ir])||(b1[ir]&&(!b2[ir]));          //หาค่าตัวแปรใน Array ชื่อ r ที่ลำดับ ir โดยจะเท่ากับ b1[ir] XOR b2[ir]
   ir = ir + 1;          //เพิ่มค่า ir ทีละ 1 เพื่อเลื่อนลำดับใน Array
}

          //ผลลัพธ์ที่รวมตัวทดเป็น true,false

boolean [] r1 = new boolean [4];          //สร้าง Array ชื่อ r1 ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่า true,false ของผลลัพธ์ที่รวมตัวทด
int ir1 = 0;          //ให้ตัวแปร ir1 เท่ากับ 0 (ลำดับที่ 0 ใน Array)
while(ir1<r1.length){          //ถ้าค่าตัวแปร ir1 น้อยกว่าความยาวของ Array ชื่อ r1 (ซึ่งเท่ากับ 4)
   r1[ir1] = ((!bc[ir1])&&r[ir1])||(bc[ir1]&&(!r[ir1]));          //หาค่าตัวแปรใน Array ชื่อ r1 ที่ลำดับ ir1 โดยจะเท่ากับ bc[ir1] XOR r[ir1]
   ir1 = ir1 + 1;          //เพิ่มค่า ir1 ทีละ 1 เพื่อเลื่อนลำดับใน Array
}

          //ผลลัพธ์ที่รวมตัวทดเป็นตัวเลข
int [] r2 = new int [4];          //สร้าง Array ชื่อ r2 ที่มีข้อมูล 4 ตัว(4 bit) เพื่อเก็บค่าของผลลัพธ์ที่รวมตัวทดเป็นตัวเลข
int ir2 = 0;          //ให้ตัวแปร ir2 เท่ากับ 0 (ลำดับที่ 0 ใน Array)
while(ir2<r2.length){          //ถ้าค่าตัวแปร ir2 น้อยกว่าความยาวของ Array ชื่อ r2 (ซึ่งเท่ากับ 4)
   if(r1[ir2]==true){          //ถ้าตัวแปรใน Array ชื่อ r1 ลำดับที่ ir2 มีค่าเท่ากับ true
      r2[ir2] = 1;          //ให้ค่าตัวแปรใน Array ชื่อ r2 ลำดับที่ ir2 มีค่าเท่ากับ 1
   }
   if(r1[ir2]==false){          //ถ้าตัวแปรใน Array ชื่อ r1 ลำดับที่ ir2 มีค่าเท่ากับ false
      r2[ir2] = 0;          //ให้ค่าตัวแปรใน Array ชื่อ r2 ลำดับที่ ir2 มีค่าเท่ากับ 0
   }
ir2 = ir2 + 1;          //เพิ่มค่า ir2 ทีละ 1 เพื่อเลื่อนลำดับใน Array
}
          //แสดงค่าผลลัพธ์เลขฐานสอง
fill(0);
textSize(20);
text(r2,width/2-40,53);
          //แสดงภาพผลลัพธ์ของเลขฐานสอง
int ir2 = 0;          //ให้ตัวแปร ir2 เท่ากับ 0 (ลำดับที่ 0 ใน Array)
while(ir2<r2.length){          //ถ้าค่าตัวแปร ir2 น้อยกว่าความยาวของ Array ชื่อ r2 (ซึ่งเท่ากับ 4)
   if(r2[ir2]==1){          //ถ้าตัวแปรใน Array ชื่อ r2 ลำดับที่ ir2 มีค่าเท่ากับ 1 ให้แสดงรูปวงกลมสีแดง(หลอดไฟติด)
     fill(252,3,19);
     ellipse(width/4*ir2+35,height/2,30,30);
   }
   if(r2[ir2]==0){          //ถ้าตัวแปรใน Array ชื่อ r2 ลำดับที่ ir2 มีค่าเท่ากับ 0 ให้แสดงรูปวงกลมสีดำ(หลอดไฟดับ)
     fill(0);
     ellipse(width/4*ir2+35,height/2,30,30);
   }
   ir2 = ir2 + 1;          //เพิ่มค่า ir2 ทีละ 1 เพื่อเลื่อนลำดับใน Array
}


จากโค้ด  ถ้าเปลี่ยนค่าตัวเลข1 และตัวเลข2 จะทำให้ได้ผลลัพธ์ที่แตกต่างกันออกไปตามการคำนวณของเลขฐานสอง
ตัวอย่าง  เปลี่ยนค่าตัวเลข1 เท่ากับ 5 จะได้ดังรูป



ไม่มีความคิดเห็น:

แสดงความคิดเห็น