Tp 3 Maipulatios de foctio Rappels sur la créatio d ue foctio avec Pytho Méthode: défiir et utiliser ue foctio O commece par le mot clé def, suivi du om de la foctio et évetuellemet de ses paramètres etre parethèses. Le bloc d istructios ou corps de la foctio doit être ideté Lorsque la foctio à pour sortie ue valeur celle-ci est doit être revoyée par la commade retur pour pouvoir être esuite utilisée das le programme pricipal. Si aucue valeur est revoyée, la valeur par défaut est Noe. Les argumets formels sot directemet affectés par l appel de la foctio doc pas d affectatio de ces argumets ou de iput das le corps de la foctio. Remarque : Vous pouvez documeter votre foctio : Isérer e 2 ème lige du programme: détermie le maximum d ue liste Puis taper help(maximum) das l iterpréteur. Exercice : Etude d ue suite O doe la suite u défiie par : u0 = 2 et, u u O pose égalemet, S u et k 0 k *, M uk k O souhaite calculer plusieurs valeurs de ces suites pour faire ue cojecture sur leurs limites évetuelles. Questio : # foctio f: x f(x) def f(x): retur y(x) défiir la foctio f : x y( x) x Comme vous avez pas ecore vue e cours les otios de liste et de tableau, ous vous proposos u tracé poit à poit (abscisse, ordoée) de la courbe. Pour cela, vous devrez das votre script importer le module suivat et écrire ces quelques liges que ous commeteros lors du Tp. # lige de commade pour afficher u graphique poit à poit import matplotlib.pyplot as plt # importatio du module matplotlib.pyplot pour réaliser des graphiques plt.plot([i/00 for i i rage(00,25) ],[f(i/00) for i i rage(00,25)],color='b') poits show() # lace le trace de la courbe Questio 2 : Tracer la représetatio graphique de la foctio f. Questio 3 : Défiir ue foctio terme de paramètre calculat u. Remarque : pour tracer u seul poit, il suffit de predre la commade plt.plot(, u, '.',color='r') # calcule et prépare le tracé des # etre et 2.5
Questio 4 : Questio 5 : Questio 6 : Questio 7 : tracer e foctio u, la valeur de u pour variat de à 0 sur le graphe précédet. Compléter le graphique pour obteir ue costructio permettat d imagier la limite de u lorsque ted vers. Défiir ue foctio somme de paramètre calculat S. Défiir ue foctio moyee de paramètre calculat M. Ecrire u programme permettat de répodre au problème posé. Exercice 2 : Algorithme de Collatz et cojecture de Syracuse. Algorithme de Collatz : p Etat doé u etier p o ul, o remplace p par lorsque p est pair et par 3. p lorsque p est impair. 2 O réitère esuite le procédé avec le ouvel etier obteu. O défiit la suite u par u0, puis o calcule les termes suivats avec l algorithme précédet. Questio 8 : Que se passe-t-il si u =? Questio 9 : Ecrire ue foctio syracuse(a,) doat le terme u de la suite de premier terme a, puis écrire u programme testat aléatoiremet 0 valeurs de u0 et mettat e évidece qu il existe u rag N tel que un =, pour toutes valeurs de u0. O pourra utiliser la foctio radit(a,b) du module radom qui revoie u etier au hasard etre a et b. Ce résultat est cou sous le om de cojecture de Syracuse. Il a été vérifié pour tous les etiers iférieurs à.25.2 62 (2009). Il a pas été démotré, il est possible qu il s agisse d u problème idécidable. O appelle temps ou durée de vol associé à u0 l idice du premier terme égal à. Questio 0 : Ecrire ue foctio vol(a) qui doe le temps de vol de la suite défiie par u0 = a. Questio : Ecrire u programme qui doe le plus grad temps de vol pour a etre et 000. Questio 2 : O dit que l etier a à ue durée de vol record lorsque vol(a) est supérieur aux vols des etiers précédets, vérifier que 7 a ue durée de vol record et doer la liste des etiers iférieurs à 000 ayat cette propriété. Questio 3 : Ecrire u programme qui doe la moyee et l écart type des temps de vol de la suite pour u0 variat de à 000. Pour u0 >, o appelle durée de vol e altitude l idice tel que k, uk u0. Questio 4 : Ecrire ue foctio altitude(a) qui doe la durée de vol e altitude pour u0 = a Questio 5 : Afficher et altitude() pour variat de à 00. Que costatez-vous? Commet l expliquer? O appelle altitude maximale la plus grade valeur etière atteite par la suite Questio 6 : Ecrire ue foctio altitude_max(a), qui doe l altitude maximale pour u0 = a. Questio 7 : Ecrire u programme qui détermie l altitude maximale la plus haute pour a variat de à 00 et les valeurs de a qui permettet de l obteir. Référece : http://www2.lifl.fr/~delahaye/sime/cours/syracuse.pdf
Correctio : # Questio def f(x): y=+/x retur y # Questio 2 x=[i/00 for i i rage(00,25)] y=[(f(i/00)) for i i rage(00,25)] plt.plot(x,y,color='b') plt.show() # Questio 3 o écrit ue foctio valable pour toute suité récurrete def terme(): u=2 for k i rage(): #o fait itératios u=f(u) retur u # Questio 4 for i i rage(0): plt.plot(i, terme(i),'.',color='r') plt.show() # Questio 5 def somme(): s=0 for k i rage(+): #la somme somporte (+) termes s=s+terme(k) retur s # Questio 6 def moyee(): retur somme()/ # Questio 7 prit("termes de la suite u") for i rage(,0): prit(,terme()) prit("termes de la suite S") for i rage(,0): prit(,somme()) prit("termes de la suite M") for i rage(,0): prit(,moyee()) # Questio 8 # Si U=, alors U+=4, U+2=2 et U+3= ous e sortos plus de ce cycle... #Questio 9 def syracuse(a,): # a valeur iitiale de la suite # Iitialisatio de la suite for i i rage(): # Boucle pour obteir U avec =0 iitialemet if U%2 == 0: U=U//2 else: U=3*U+ retur U # Retour de la valeur de U
# Programme de test sur 0 valeurs iitiales for i i rage(0): a=radit(,5) N= while U!=: U=syracuse(a,N) N+= #autre sytaxe pour N=N+ prit('pour la valeur iitiale %i, U= pour N=%i'%(a,N-) ) # ous pouvos costater qu'il existe u rag N tel que U= # Questio 0 def vol(a): N= while U!=: U=syracuse(a,N) N+= retur N- # Questio et 2 for a i rage(,00): itermediaire=vol(a) if itermediaire>maxi: maxi=itermediaire prit(" le vol record est de %i pour ue valeur iitiale de %i"%(maxi,a)) # Questio 3 # Calcul de la moyee des temps de vol somme=0 for a i rage(,00): somme=somme+vol(a) moyee=somme/a prit('la moyee est :',moyee) # Calcul de l'écart type somme=0 for a i rage(,00): somme+=(vol(a)-moyee)**2 ecart_type=sqrt(somme/a) prit('ecart type :',ecart_type) # Questio 4 def altitude(a): N= while syracuse(a,n)>a: N+= retur N- # Questio 5 for i rage(,0): prit("valeur de ",,"Valeur de l'altitude",altitude()) # pour les ombres pairs ous avos immédiatemet l'altitude, le ombre suivat est iférieur à uo # Questio 6 def altitude_max(a): for i i rage(vol(a)): if syracuse(a,i)>maxi: maxi=syracuse(a,i) retur maxi
prit("altitude maxi",altitude_max(27)) # Questio 7 for a i rage(,0): if altitude_max(a)>maxi: maxi=altitude_max(a) prit("la valeur maxi atteite est:",maxi) for a i rage(,0): if altitude_max(a)==maxi: prit("la valeur iitiale u0=",a,"doe l'altitude max de",maxi) #------------------------------------------------------------------------------ # Fi #------------------------------------------------------------------------------