Python ile Tek Bilinmeyenli Denklem Çözme
- September 11, 2011
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")