[PIPython] Approssima
Luigi Pantano
luigi.pantano
Sab 5 Feb 2005 12:39:01 CET
Ops! Ho in viato per sbaglio la versione vecchia del programma...ecco
quella nuova.
La funzione approssima č stata migliorata. Adesso si puņ scegliere la
cifra decimale k alla quale approssimare.
-------------- parte successiva --------------
# Teorema
from math import *
from string import *
from os import system
c_centesimi = 1.11111111111
def licenza():
'''Mostra i termini della licenza'''
print '''Teorema v1.2.20050205 c1
Copyright (C) 2005 Luigi Pantano
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\n'''
def approssima(num, k=4):
b = str(num - int(num))[2:2+1+k]
if int(b[-1]) > 5 :
incremento = (10 - int(b[-1])) * pow(10,-(k+1))
num = num + incremento
return str(num).split(".")[0] + "." + str(num).split(".")[1][:k] + (" (Valore reale: " + str(num) + ")").upper()
def Centesimi_Gradi_Radianti(valore) :
if valore == 0 or valore == 200 or valore == 400 or valore == 600 or valore == 800:
print "\t\t** Angolo immesso di dimensioni errate!\n\t\t** Dimensione consentita diversa da k200 centesimali\n\t\t** Ripetere l\'immissione del dato..."
return "errato"
else :
return radians(valore / c_centesimi)
def Radianti_Gradi_Centesimi(valore) :
valore = (degrees(valore) * c_centesimi)
if valore >= 200 :
print "\t\t** Hai ottenuto un angolo PIATTO!\n\t\t** In un triangolo qualsiasi un tale risultato non e\' corretto\n\t\t** Controlla i dati immessi siano corretti."
if valore == 0 :
print "\t\t** Hai ottenuto un angolo NULLO!\n\t\t** In un triangolo qualsiasi un tale risultato non e\' corretto\n\t\t** Controlla i dati immessi siano corretti."
return valore
class Teorema(object) :
def __init__(self):
self.menu=['Teorema di Carnot',
'Teorema dei Seni (lato incognito)',
'Teorema dei Seni (angolo incognito)',
'Esci'
]
self.implementors=[self.TeoremaDiCarnot,
self.TeoremaDeiSeni1,
self.TeoremaDeiSeni2,
self.stop
]
self.numbers={}
self.running=True
def run(self):
while self.running:
s=self.menuSelection('Scegli un numero compreso tra')-1
self.implementors[s]()
def stop(self):
print "\n*** PROGRAMMA TERMINATO ***\n*** Vi auguro una Buona Giornata ***"
self.running=False
def printMenu(self):
system("cls")
licenza()
for idx,value in enumerate (self.menu):
print idx+1,'-',value
def menuSelection(self,message='Select'):
self.printMenu()
m=len(self.menu)
selection=m+1
while selection >m:
selection=input (message+' (1-%i):' % m)
return selection
def TeoremaDiCarnot(self):
risposta = True
while (risposta == True) :
print "\nApplicazione del Teorema di Carnot\n".upper()
B = input("\tlato triangolo (B) : ")
C = input("\tlato triangolo (C) : ")
a = "errato"
while a == "errato":
a = Centesimi_Gradi_Radianti(input("\tangolo compreso (a) : "))
print "\n\tLa misura del lato incognito e\' %s" % approssima(sqrt(pow(B,2) + pow(C,2) -2*B*C*cos(a)))
if lower(raw_input("\n\tVuoi ripetere un altro calcolo? (s/n) : ")) != 's' : risposta = False
def TeoremaDeiSeni1(self) :
risposta = True
while (risposta == True) :
print "\nApplicazione del Teorema di Seni\n".upper()
print "Calcolo del lato incognito\n".upper()
A = input("\tImmetti la misura del lato noto: ")
a = "errato"
while a == "errato":
a = Centesimi_Gradi_Radianti(input("\tImmetti la misura dell\'angolo opposto al lato noto: "))
b = "errato"
while b == "errato":
b = Centesimi_Gradi_Radianti(input("\tImmetti la misura dell\'angolo opposto al lato incognito: "))
B = A * sin(b) / sin(a)
print "\n\t\tLa misura del lato incognito e\' %s" % approssima(abs(B))
if lower(raw_input("\n\tVuoi ripetere un altro calcolo? (s/n) : ")) != 's' : risposta = False
def TeoremaDeiSeni2(self) :
risposta = True
while (risposta == True) :
print "\nApplicazione del Teorema di Seni\n".upper()
print "Calcolo dell\'angolo incognito\n".upper()
a = "errato"
while a == "errato":
a = Centesimi_Gradi_Radianti(input("\tImmettere angolo noto: "))
l1 = input("\tImmettere lunghezza del lato oppsosto all'angolo noto: ")
l2 = input("\tImmettere lunghezza del secondo lato: ")
try :
risultato = Radianti_Gradi_Centesimi(asin(sin(a) * l1/l2))
print "\n\tLa misura dell'angolo e\' di %s gradi centesimali" % approssima(risultato)
except :
print "\n\t\t** Non \'e stato possibile effettuare il calcolo!\n\t\t** I dati immessi non appartengono ad un triangolo!"
if lower(raw_input("\n\tVuoi ripetere un altro calcolo? (s/n) : ")) != 's' : risposta = False
if __name__ == '__main__':
a=Teorema()
a.run()
-------------- parte successiva --------------
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.8.5 - Release Date: 03/02/2005
More information about the Python
mailing list