Informatique TD 1.4 Instruction conditionnelle Durée : 30 minutes. 1 Commenter un programme Problématique : le programme suivant permet la recherche des nombres premiers parmi les 100 premiers nombres. Rappel : un nombre est premier s'il n'est divisible par aucun autre entier (donc divisible par aucun nombre premier) = reste de la division non nulle. Entrée - Limite est l'entier maximal à tester (valeur exclue). Sortie - NbPremiers est la liste des nombres premiers inférieurs à Limite Variables utilisées - premier est un booléen qui prend la valeur True lorsque le nombre est premier, - i est un entier testé, - Nb est un nombre primaire déjà trouvé, 1) Commenter le programme suivant en indiquant à quoi sert chaque ligne pour répondre à la problématique (le caractère # annonce le début du commentaire sur la ligne). Limite=100 # Les nombres premiers seront inférieurs à 100. NbPremiers=[2] premier=True # On initialise la liste des nombres premiers avec 2. # Par défaut dans le programme, les nombres sont des nombres premiers. for i in range(3,Limite): # l'entier i va prendre toutes les valeurs de 3 à la valeur Limite exclus # Nb va prendre toutes les valeurs de la liste NbPremiers for Nb in NbPremiers: if i%Nb == 0: premier = False # Si le reste de la division de i par un nb premier est nul # Alors i n'est pas un nombre premier if premier == True: # Si premier est vrai NbPremiers = NbPremiers + [i] # Alors on ajoute le nombre i à la liste NbPremiers premier = True # le prochain nombre est premier par défaut. print("La liste des nombres premiers < ", Limite, "est", NbPremiers) 2) Que va afficher le programme précédent avec Limite=4 (on rappelle que les nombres premiers sont alors [2,3]) ? La liste des nombres premiers < 4 est [2,3] Lycée Jules Ferry Cannes Page 1 sur 2 TSI1 Informatique TD 1.4 Instruction conditionnelle 2 Corriger la syntaxe d'un programme Le programme suivant permet d'indiquer si un nombre est premier ou non. Il arrive après la détermination de la liste des nombres premiers. Entrée - NbPremiers contient la liste des nombres premiers : [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] - Nb : nombre saisi par l'utilisateur (on suppose que c'est bien une entier positif). Sortie - Pas de sortie. Affiche un message indiquant si le nombre est premier ou non. 3) Corriger les erreurs de syntaxe en ajoutant notamment les indentations nécessaire par le tracé de trait verticaux devant les lignes à indenter. Nb = int ( input ( 'Saisir un entier positif inférieur à ' + str(NbPremiers[-1] + ' : ')) if Nb>NbPremiers[-1]: print('Le nombre saisi', Nb, 'est supérieur à', NbPremiers[-1]) else: if Nb in NbPremiers : print(Nb, 'est un nombre premier') else : print(Nb, "n'est pas un nombre premier") 3 Modifier un algorithme en réponse à une problématique 4) Proposer une modification de la question précédente afin d'afficher la position (en nombre d'éléments) de Nb dans la liste NbPremier, dans le cas où Nb est un nombre premier. On pourra numéroter les lignes du programme afin de n'écrire que les lignes modifiées et utiliser la méthode index qui renvoit l'indice d'un élément dans une liste (exemple avec liste=[1,2,3] : liste.index(2) renvoit l'indice 1) La ligne 6 devient : print ( Nb , 'est le ' , NbPremier.index(Nb)+1 , 'e nombre premier' ) 4 Proposer un algorithme en réponse à une problématique 5) Proposer un algorithme calculant la factorielle d'un nombre (multiplication de tous les entiers non nuls inférieurs ou égale à un nombre, exemple 6! → 6*5*4*3*2*1). On vérifiera au préalable que le nombre N est un entier et qu'il est strictement positif (ce nombre existe déjà). Dans le cas contraire, on affichera des messages d'erreurs appropriés. factorielle=1 if type(N) is int : if N > 0 : for i in range(1,N+1): factorielle=factorielle*i print ("La factorielle de", i , "est", factorielle) else : print(N , "est un entier mais n'est pas strictement positif") else : print(N, "n'est pas un entier") Lycée Jules Ferry Cannes Page 2 sur 2 TSI1