[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