Initiation à la programmation, en python

Deuxième programme, construit et écrit pas à pas

Calcul d'aire et quadrature numérique du cercle




Avant de s'attaquer à des notions algorithmiques générales, et leur pendant en python, nous allons commencer par un premier exemple de programme, élaboré pas à pas.

Aire d'un disque

Le programme suivant permet de calculer l'aire d'un disque de rayon 2 (et en pensant que π = 3,14)
r=2
A=3.14*r*r
print("Aire A=",A)
On peut bien sûr exécuter autant de fois qu'on veut ce programme, en modifiant la valeur initiale de r.
On peut aussi rendre notre programme un peu plus interactif, en demandant à l'utilisateur (la personne qui exécute le programme) de saisir directement la valeur de r qu'il souhaite (sans avoir à modifier le programme lui-même):
r=float(input("Rayon ? r="))
A=3.14*r*r
print("Aire A=",A)
On peut (doit ?) aussi prendre garde à une éventuelle saisie farfelue de l'utilisateur: on teste si le nombre saisi est bien positif, sinon on affiche un message d'erreur et on quitte le programme sans rien faire de plus.
r=float(input("Rayon ? r="))
if (r<0):
	print("Erreur: r<0")
else:
	A=3.14*r*r
	print("Aire du disque A=",A)
Exécuter ce programme, et saisir -5 comme valeur pour r. Que se passe-t'il ?

Quadrature (numérique) du cercle

La quadrature du cercle est un des trois grands problèmes antiques de géométrie, avec la trisection de l'angle et la duplication du cube. Le problème est le suivant: déterminer le côté du carré dont l'aire est la même que celle d'un disque donné. La problème originel consiste à chercher à construire ce carré avec (exclusivement) une règle (non graduée) et un compas.
Quelques deux millénaires plus tard, on peut s'attaquer à une résolution numérique approchée.
Pour ce faire, on peut commencer par chercher en tatonnant. On complète le programme précédent pour, une fois le rayon du disque saisi et son aire calculée, demander le côté d'un carré, calculer son aire, et voir si, par chance, les deux aires sont les mêmes.
r=float(input("Rayon ? r="))
if (r<0):
	print("Erreur: r<0")
else:
	A=3.14*r*r
	print("Aire A=",A)

c=float(input("Cote du carre ? c="))
Ac=c*c
print("Aire carré A=",Ac)
Exécuter le programme, entrer une valeur pour r (positive bien sûr…), puis une pour c le côté du carré. Arrive-t'on à faire en sorte que les deux aires soient égales ?

Quadrature assistée par ordinateur (QAO)

Maintenant, plutôt que de taper des valeurs pour le côté du carré jusqu'à être "assez proche" (ou en avoir assez de recommencer …) de l'aire du disque, on peut, tant qu'à utiliser un ordinateur, essayer d'automatiser cette recherche.
Par exemple, pour un disque de rayon r=5, on peut commencer à chercher avec un côté c valant 1, puis 2, puis 3, … jusqu'à 10 (par exemple, à discuter). À chaque valeur, on affiche l'aire du carré, et on n'a plus qu'à lire la plus proche:
r=float(input("Rayon ? r="))
if not(r>=0):
    print("Erreur: r<0")
else:
    A=3.14*r*r
    print("Aire A=",A)

for i in range(1,10):
    c=i
    Ac=c*c
    print("c=",c, " - Aire disque=",A," - Aire carre",Ac)
Le côté du carré doit donc être entre 8 et 9, certes, ce n'est pas très fin …
Justement, plutôt que d'augmenter le côté du carré par pas de 1, on peut justement avancer plus finement, par exemple de dixième en dixième:
r=float(input("Rayon ? r="))
if not(r>=0):
    print("Erreur: r<0")
else:
    A=3.14*r*r
    print("Aire A=",A)

for i in range(0,10):
    c=8+i/10
    Ac=c*c
    print("c=",c, " - Aire disque=",A," - Aire carre",Ac)
où on trouve que le côté du carré doit être compris entre 8,8 et 8,9.
Plus finement encore ? de centième en centième:
r=float(input("Rayon ? r="))
if not(r>=0):
    print("Erreur: r<0")
else:
    A=3.14*r*r
    print("Aire A=",A)

for i in range(0,100):
    c=8+i/100
    Ac=c*c
    print("c=",c, " - Aire disque=",A," - Aire carre",Ac)
où on trouve maintenant que le côté du carré doit être compris entre 8,86 et 8,87.

Modifier le programme précédent pour trouver une valeur approchée à quatre chiffres après la virgule.

Variables, affectation, types et opérations


LongPage: h2: 2 - h3: 1