Wednesday, July 10, 2019

สร้างโปรแกรมเปลี่ยนเลขฐาน 2 เป็น 10

วันนี้เราจะลองมาทำโปรแกรมเปลี่ยนเลขฐาน

จาก 2 เป็น 10 กันนะครับ 

. 

   .   

โดยในครั้งนี้เราจะสร้างโปรแกรมด้วย Kivy ที่เป็น Python library
โค้ดต่อไปนี้คือโค้ดโดยรวมทั้งหมดเราจะทำการแบ่งช่วงเพื่อแยกอธิบาย

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.core.window import Window

Window.size = (400, 150)
class Interface(Widget):
    def __init__(self,**kwargs):
        super(Interface, self).__init__(**kwargs)
        self.btn1 = Button(text='2b to 10b', pos=(200,50),                  on_press=self.calculate,height=40,width=100)
        self.textin2= TextInput(hint_text='write here',pos=(100,50),height=40)
        self.label3= Label(text='0',pos=(300,50),height=40)
        self.label4= Label(text='Number :',pos=(0,50),height=40)
        self.add_widget((self.label4))
        self.add_widget(self.btn1)
        self.add_widget(self.textin2)
        self.add_widget(self.label3)

    def calculate(self,btn1):
        result=0
        for i in range(len(self.textin2.text)-1,-1,-1):
            result= result + ((2**(i))*int(self.textin2.text[len(self.textin2.text)-(i+1)]))
        self.label3.text=str(result)


class Myapp(App):
    def build(self):
        return Interface()
Myapp().run()

.

.

.

 มาเริ่มต้นอธิบายโค้ดในแต่ละช่วงกัน

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
เริ่มด้วยทำการ import module_name ที่จำเป็นต้องใช้ในการสร้างโปรแกรมมาก่อน

 . 

.


Window.size = (400, 150)
เริ่มด้วยการปรับขนาด resolution ของโปรแกรมเป็น กว้าง 400 สูง 150

.


class Interface(Widget):
    def __init__(self,**kwargs):
        super(Interface, self).__init__(**kwargs)
        self.btn1 = Button(text='2b to 10b', pos=(200,50),                  on_press=self.calculate,height=40,width=100)
        self.textin2= TextInput(hint_text='write here',pos=(100,50),height=40)
        self.label3= Label(text='0',pos=(300,50),height=40)
        self.label4= Label(text='Number :',pos=(0,50),height=40)
        self.add_widget((self.label4))
        self.add_widget(self.btn1)
        self.add_widget(self.textin2)
        self.add_widget(self.label3)

สร้างคลาส Interface (เป็น subclass ของ Widget class) ขึ้นมา 
ภายในคลาสนี้ประกอบไปด้วย Object คือ
  • ปุ่มกด  1 อัน  ชื่อ btn1
  • ช่องใส่ข้อความ 1 อัน ชื่อ textin2
  • ช่องแสดงข้อความ 2 อัน ชื่อ  label3, label 4
 btn1 : Text '2b to 10b', Positon X:200 Y:50, On press a button : 
                                                                 run function calculate
 textin2 : Hint_text 'write here', Height : 40, Position X:100 Y:50
 label3 : Text '0', Height : 40, Position X:300 Y:50
 label4 : Text 'Number :', Height : 40, Position X:0 Y50

.


def calculate(self,btn1):
        result=0
        for i in range(len(self.textin2.text)-1,-1,-1):
            result= result + ((2**(i))*int(self.textin2.text[len(self.textin2.text)-(i+1)]))
        self.label3.text=str(result)

ส่วนของ function ของ Interface class ที่ใช้ในการคำนวณเพื่อเปลี่ยนเลขฐาน 2 ไป 10 
เริ่มด้วยสร้างตัวแปร result มาเก็บค่าของ 0 type : integer
สร้างลูป for ที่จะวนโดยเริ่มจากให้ i คือ จำนวนสมาชิกของข้อความของ textin2 ถึง -1โดย   ลดทีละ 1
  โดยให้ result เป็นผลรวมของ 
        (2^i)*(ข้อมูลตำแหน่งใน textin2.text โดยเริ่มจาก 0 ถึง จำนวนมากสุดของข้อความ)
แทนค่า label3.text ด้วย result type : string 

.

.

class Myapp(App):
    def build(self):
        return Interface()
Myapp().run()

จบด้วยการ การสร้างคลาส Myapp (เป็น subclass ของ App class)
ทำการเขียนฟังก์ชัน Build ทับอันเก่าเพื่อ return Interface()
สั่งให้ Myapp() ทำงานด้วย run method



 จะได้หน้าตาของโปรแกรมออกมาแบบนี้


ใส่ตัวเลข 11110 เข้าไปในช่องว่าง 


ได้คำตอบออกมาเป็น 30 
ทำการตรวจคำตอบ 
(2^4 * 1)+(2^3 * 1)+(2^2 * 1)+(2^1 * 1)+(2^0 * 0)
= 30
คำตอบถูกต้อง
เช็คกันอีกสักรอบ


ใส่ตัวเลข 1000001 ลงในช่องว่าง และได้คำตอบคือ 65 
ทำการตรวจคำตอบ
(2^6 * 1)+(2^0 * 1) = 65 
คำตอบถูกต้อง
.

.

.

ก็จบกันแล้วนะครับสำหรับการทำโปรแกรมเปลี่ยนเลขฐานจาก 2 ไป 10
ขอบคุณสำหรับการติดตามอ่านนะครับ

No comments:

Post a Comment