PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Protable Python 2.6.1.



Thunder Wolf
22.03.2011, 15:28
Hallo werte User des Programmierforums,

ich arbeite derzeit mit Portable Phyton und habe folgendes Problem:
Hier erstmal der bisherige Code
# -*- coding: cp1252 -*-
# (c) Mattes
class Bruch:
def __init__(self, zaehler,nenner):
self.zaehler = zaehler
self.nenner = nenner

def gibZaehler(self):
return self.zaehler

def gibNenner(self):
return self.nenner

def toString(self):
return str(self.zaehler) + "/" + str(self.nenner)

def clone(self):
return Bruch(self.zaehler, self.nenner)

def add(self, bruch2):
zaehler = self.zaehler * bruch2.nenner + bruch2.zaehler*self.nenner
nenner = self.nenner * bruch2.nenner
ergebnis = Bruch(zaehler, nenner)
return ergebnis

def sub(self, bruch2):
zaehler = self.zaehler * bruch2.nenner - bruch2.zaehler*self.nenner
nenner = self.nenner * bruch2.nenner
ergebnis = Bruch(zaehler, nenner)
return ergebnis

def mul(self, bruch2):
zaehler = self.zaehler * bruch2.zaehler
nenner = self.nenner * bruch2.nenner
ergebnis = Bruch(zaehler, nenner)
return ergebnis


def div(self, bruch2):
zaehler = self.zaehler * bruch2.nenner
nenner = self.nenner * bruch2.zaehler
ergebnis = Bruch(zaehler, nenner)
return ergebnis

def erweitern(self, faktor):
self.zaehler = self.zaehler * faktor
self.nenner = self.nenner * faktor


def ggT(self, a, b):
# ggT für positive Zahlen ermitteln:
if a<0:
a=-a
if b<0:
b=-b
# teiler auf kleinere der beiden Zahlen setzen
if a<b:
teiler = a
else:
teiler = b
# teiler herunterzählern, bis Teiler von beiden
while (a%teiler!=0 or b%teiler!=0):
teiler = teiler - 1
return teiler

def kuerzen(self):
ggT = self.ggT(self.zaehler,self.nenner)
self.zaehler = self.zaehler / ggT
self.nenner = self.nenner / ggT

def kehrWert(self):
return Bruch(self.nenner, self.zaehler)


class EffizienterBruch(Bruch):
def __init__(self, zaehler, nenner):
Bruch.__init__(self, zaehler, nenner)
self.kuerzen()

## def ggT(self, a, b):
## ergebnis = a
## if b==0:
## return a
## elif a>b:
## return self.ggT(b,a-b)
## else:
## return self.ggT(a,b-a)

def ggT(self, a, b):
if a<0:
a=-a
if b<0:
b=-b
if b==0:
return a
else:
return self.ggT(b,a%b)


def kgV(self,a,b):
return a*b/self.ggT(a,b)

def add(self, bruch2):
hauptNenner = self.kgV(self.nenner,bruch2.nenner)
erweiterungsFaktor1 = hauptNenner//self.nenner
erweiterungsFaktor2 = hauptNenner//bruch2.nenner
zaehler = self.zaehler * erweiterungsFaktor1 + bruch2.zaehler * erweiterungsFaktor2
ergebnis = EffizienterBruch(zaehler, hauptNenner)
ergebnis.kuerzen()
return ergebnis

def sub(self, bruch2):
hauptNenner = self.kgV(self.nenner,bruch2.nenner)
erweiterungsFaktor1 = hauptNenner//self.nenner
erweiterungsFaktor2 = hauptNenner//bruch2.nenner
zaehler = self.zaehler * erweiterungsFaktor1 - bruch2.zaehler * erweiterungsFaktor2
ergebnis = EffizienterBruch(zaehler, hauptNenner)
self.kuerzen()
return ergebnis

def mul(self, bruch2):
zaehler = self.zaehler * bruch2.zaehler
nenner = self.nenner * bruch2.nenner
ergebnis = EffizienterBruch(zaehler, nenner)
ergebnis.kuerzen()
return ergebnis


def div(self, bruch2):
zaehler = self.zaehler * bruch2.nenner
nenner = self.nenner * bruch2.zaehler
ergebnis = EffizienterBruch(zaehler, nenner)
ergebnis.kuerzen()
return ergebnis


class KettenBruch(EffizienterBruch):
def __init__(self, zaehler, nenner):
EffizienterBruch.__init__(self,zaehler, nenner)


def __init__(self, faktorenListe):
a = self.ketteAufloesenIterativ(faktorenListe)
self.zaehler = a.zaehler
self.nenner = a.nenner
self.kuerzen()

def ketteAufloesenIterativ(self, faktorenListe):
length = len(faktorenListe)
b = EffizienterBruch(faktorenListe[length-1],1)
print("Faktor "+str(length-1)+" ist "+ str(faktorenListe[length-1])+", b = "+b.toString())
for i in range(length-1):
b = b.kehrWert()
b = b.add(EffizienterBruch(faktorenListe[length-(i+2)],1))
#print("Faktor "+str(length-(i+2))+" ist "+ str(faktorenListe[length-(i+2)])+", b = "+b.toString())
return b





def ketteAufloesenRekursiv(self, faktorenListe):
if len(faktorenListe)==1:
return EffizienterBruch(faktorenListe[0],1)
else:
b = EffizienterBruch(faktorenListe[0],1)
c = self.ketteAufloesenRekursiv(faktorenListe[1:len(faktorenListe)])
c = c.kehrWert()
return b.add(c)

def ketteAufloesen(self, faktorenListe):
if len(faktorenListe)==1:
return EffizienterBruch(faktorenListe[0],1)
else:
b = EffizienterBruch(faktorenListe[0],1)
c = self.ketteAufloesenRekursiv(faktorenListe[1:len(faktorenListe)])
c = c.kehrWert()
return b.add(c)


def eggT(self, a, b, liste):
if b==0:
return a
else:
liste.append(a//b)
return self.eggT(b,a%b,liste)

def toString(self):
liste = self.toFaktorenListe()
st = "["
for i in liste:
st = st + str(i) + ", "
if len(st)>1:
st = st[0:len(st)-2]
st = st+"]"
return st

def toFaktorenListe(self):
liste = []
self.eggT(self.zaehler,self.nenner,liste)
return liste


##t1 = Bruch(3,4)
##print t1.toString()
##t2 = Bruch(1,4)
##print t2.toString()
##b1 = t1.add(t2)
##print b1.toString()
##b2 = t1.sub(t2)
##print b2.toString()
##b3 = t1.mul(t2)
##print b3.toString()
##b4 = t1.div(t2)
##print b4.toString()
##
##b2gekuerzt = b2.clone()
##b2gekuerzt.kuerzen()
##print b2.toString() + " = "+b2gekuerzt.toString()
##
##print "*****************************************"
##
##t1 = EffizienterBruch(3,4)
##print t1.toString()
##t2 = EffizienterBruch(1,4)
##print t2.toString()
##b1 = t1.add(t2)
##print b1.toString()
##b2 = t1.sub(t2)
##print b2.toString()
##b3 = t1.mul(t2)
##print b3.toString()
##b4 = t1.div(t2)
##print b4.toString()
##
##b2gekuerzt = b2.clone()
##b2gekuerzt.kuerzen()
##print b2.toString() + " = "+b2gekuerzt.toString()
##
##liste = [1]
##for i in range(2,10):
## liste.append(i)
## k = KettenBruch(liste)
##
##print k.toString()

Ich verstehe nicht, was es mit dem sogenannten Kettenbrauch auf sich hat und mein Lehrer ist einfach zu stolz um uns das zu erklären, da er meint, dass wir dies schon können müssten, obwohl wir es noch nie dran genommen haben.
Kann mir jemand bei diesem Problem helfen und mir auch erklären, was es mit dem Kettenbruch auf sich hat?

R.F.
22.03.2011, 19:07
http://de.wikipedia.org/wiki/Kettenbruch

Oder kurz: Eine gemischte Zahl, die im Nenner wieder eine gemischte Zahl beinhaltet, z.B. 1+\frac{2}{1+\frac{4}{1+\frac{1}{2}}}

Das Programm dürfte nichts anderes machen, als mit solchen Zahlen so einfache Sachen wie eine Addition durchzuführen, bzw. zu rechnen.

Thunder Wolf
22.03.2011, 19:20
http://de.wikipedia.org/wiki/Kettenbruch

Oder kurz: Eine gemischte Zahl, die im Nenner wieder eine gemischte Zahl beinhaltet, z.B. 1+\frac{2}{1+\frac{4}{1+\frac{1}{2}}}

Das Programm dürfte nichts anderes machen, als mit solchen Zahlen so einfache Sachen wie eine Addition durchzuführen, bzw. zu rechnen.

Jetzt versteh ich es!!!
Warum kann unser Lehrer es nicht so erkären, wie du?

StareR
25.03.2011, 13:00
Hi,

Lehrer sind mal nur Lehrer. Wenn die alles können würde niemand schlechte Noten haben.

Thunder Wolf
25.03.2011, 19:48
Trauriges Argument, aber du hast recht.
Aber da ich ein Optimist bin, glaube ich,
ich hab die Arbeit schon gut gemacht :D

MasterLee
19.04.2011, 19:18
Ich weiß nicht wie aktuell das Problem ist aber im CheeseShop gibt es dazu ein Modul:
http://pypi.python.org/pypi/continued/1.0