Python ile Tek Bilinmeyenli Denklem Çözme

Bugünüme mal olan çalışma oldu aslında. Regular expressions ile biraz sıkıntı yaşamamı sağlamış olsa da sonunda çalıştığını görmek gerçekten mutlu etti. Tabii sorunlar olabilir çok fazla test edemedim bildirirseniz becerebildiğim kadarıyla düzeltirim. Basit olarak nasıl çalıştığını söyleyeyim.

tekbilinmeyen() fonksiyonuna tek veya ilk parametre olarak denklemi yazıyoruz. Mesela tekbilinmeyen(“3x+5=43227x-4377″) şeklinde. Bunun dışında tekbilinmeyen fonksiyonuna  2 parametre daha atama şansımız var. Bunların ikisi de işlem sırasında ayıklanan öğeleri gösteriyor. Biri yanında x olanları diğeri ise sabit değerleri. Bunları aktifleştirmek için de 2. ve 3. parametreler yerine g1=”1″ ve g2=”2” yazmamız yeterli.

#-*-coding:cp1252-*-
from __future__ import division
'''
Created on 11 Eyl 2011

@author: guray
'''
import re

class birbir(object):
    '''
    Birinci dereceden bir bilinmeyenli denklem çözebilmeyi amaçlayan
    program denemesi. birbir sınıfı örneklenerek alttaki yönergeler takip edilir.
    '''

    def __init__(self):
        '''
        Constructor
        '''
    def esittir(self,denklem):
        self.denklem=denklem

        try:
            self.bolum=re.split("=", self.denklem)

        except:
            print "Lütfen Tek = İşareti İçeren Geçerli Bir Denklem Giriniz."
    def xler(self,g1):
        self.sol=self.bolum[0]
        self.sag=self.bolum[1]
        self.solx=re.search("-?[0-9]*x", self.sol).group()
        self.sagx=re.search("-?[0-9]*x", self.sag).group()
        if g1=="1":
            print self.solx, self.sagx

    def sabitler(self,g2):
        # Integer haline çevirmiş şekilde sabitleri alalım.
        self.sols=int(re.search("-?[0-9]*$", self.sol).group())
        self.sags=int((re.search("-?[0-9]*$", self.sag).group()))
        if g2=="1":
            print self.sols, self.sags

    def hesapla(self):
        self.sonucs=(self.sols-self.sags)*(-1)
        self.sonucx=int(re.sub("x","",self.solx))-int(re.sub("x", "", self.sagx))
        self.xdeger=(self.sonucs/self.sonucx)
        print "x = ", self.xdeger

def tekbilinmeyen(gelen,g1="0",g2="0"):
    calistirdene=birbir()
    calistirdene.esittir(gelen)
    calistirdene.xler(g1)
    calistirdene.sabitler(g2)
    calistirdene.hesapla()
tekbilinmeyen("5x-10=3x+2")
 
comments powered by Disqus