Informatique Pour Tous Interrogation n 3

Documents pareils
Licence Sciences et Technologies Examen janvier 2010

1 Recherche en table par balayage

Initiation à la programmation en Python

Initiation à l algorithmique

Chapitre 2 Le problème de l unicité des solutions

Corrigé des TD 1 à 5

Présentation du langage et premières fonctions

Recherche dans un tableau

L informatique en BCPST

Représentation d un entier en base b

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Découverte de Python

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Programmation C++ (débutant)/instructions for, while et do...while

Algorithmique & programmation

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Algorithmique et Programmation, IMA

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Programmation C. Apprendre à développer des programmes simples dans le langage C


Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Image d un intervalle par une fonction continue

OM 1 Outils mathématiques : fonction de plusieurs variables

TP 1. Prise en main du langage Python

Université Paris-Dauphine DUMI2E 1ère année, Applications

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

MIS 102 Initiation à l Informatique

Java Licence Professionnelle CISII,

Cours d Algorithmique et de Langage C v 3.0

Cours 1 : La compilation

Plan du cours. Historique du langage Nouveautés de Java 7

Optimisation, traitement d image et éclipse de Soleil

STAGE IREM 0- Premiers pas en Python

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Cours d algorithmique pour la classe de 2nde

Cours d Informatique

1 Lecture de fichiers

Les structures de données. Rajae El Ouazzani

Continuité et dérivabilité d une fonction

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Chapitre 2 Devine mon nombre!

UML et les Bases de Données

Cours 7 : Utilisation de modules sous python

Examen Médian - 1 heure 30

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

2 Comment fonctionne un ordinateur, dans les grandes lignes

Cours Fonctions de deux variables

Introduction à MATLAB R

INF 321 : mémento de la syntaxe de Java

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Bases de programmation. Cours 5. Structurer les données

Continuité en un point

EXERCICE 4 (7 points ) (Commun à tous les candidats)

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Fonctions de plusieurs variables

Les arbres binaires de recherche

Chapitre 2. Eléments pour comprendre un énoncé

Le prototype de la fonction main()

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

TP Maple 4 Listes, tests, boucles et procédures

Algorithmique, Structures de données et langage C

Calcul Formel et Numérique, Partie I

Editer un script de configuration automatique du proxy

Introduction au langage C

3 Approximation de solutions d équations

Développements limités. Notion de développement limité

Algorithmes et mathématiques. 1. Premiers pas avec Python. Exo Hello world!

Algorithmes récursifs

Cours 1 : Qu est-ce que la programmation?

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

ALGORITHMIQUE ET PROGRAMMATION En C

Introduction à l étude des Corps Finis

Algorithme. Table des matières

Exercices sur les interfaces

Java DataBaseConnectivity

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Feuille TD n 1 Exercices d algorithmique éléments de correction

Vous revisiterez tous les nombres rencontrés au collège, en commençant par les nombres entiers pour finir par les nombres réels.

ACTIVITÉ DE PROGRAMMATION

Technique opératoire de la division (1)

Objets Combinatoires élementaires

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Fonctions de plusieurs variables, intégrales multiples, et intégrales dépendant d un paramètre

Utilisation d objets : String et ArrayList

Simulation de variables aléatoires

V- Manipulations de nombres en binaire

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Programmation avec Xcas ou Python

Chapitre 1 Qu est-ce qu une expression régulière?

1. Structure d'un programme FORTRAN 95

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Transcription:

Nom : Prénom : I-Question de cours Informatique Pour Tous Interrogation n 3 Soit f une fonction continue à valeurs réelles sur un intervalle [a, b], avec f(a) et f(b) de signe contraire. fécrire (en Python ou en pseudo-code) la fonction dichoto(f, a, b, e) qui renvoie la racine de l équation f(x) = 0 par la méthode de dichotomie, avec une erreur e. données : f, a, b, e binf, bsup a, b finf, fsup f(binf), f(bsup) tant que bsup binf > 2e faire m (binf + bsup)/2 fm f(m) si finf * fm < 0 alors bsup m fsup fm sinon binf m finf fm retourner: (binf + bsup)/2 def dichoto(f, a, b, e) : (binf, bsup) = (a, b) (finf, fsup) = (f(binf), f(bsup)) while bsup binf > 2 e: m = (binf + bsup)/2 fm = f(m) if finf * fm < 0 : bsup = m fsup = fm else : binf = m finf = fm return (binf + bsup)/2 II-Syntaxe Python 1) Quelle est la commande Python qui permet d ouvrir en lecture un fichier nommé MonFichier.txt dans le répertoire courant du disque dur pour en utiliser ensuite le contenu? VarFichier = open( MonFichier.txt, r ) # le mode r est facultatif car c est la valeur par défaut. 2) Soit la variable var = [(0,0,0,0),(1,0,0,0),(0,1,0,0),(0,0,1,0),(1,1,1,1)] a) Quelle est la valeur de var[2] (0, 1, 0,0) b) Quelle est la valeur de len(var) 5 c) Quelle est la valeur de len(var[1]) 4 d) Quelle est la valeur de [var[i][1] for i in range(2,4)] [1, 0] # c est une liste e) Quelle est la valeur de [var[1][i] for i in range(2,4)] [0, 0] f) Quelle est la valeur de sum(var[i][i] for i in range(4)) 0 Informatique Pour Tous page 1/6 PCSI1 2014-2015

III-Analyse de code On considère la fonction suivante : def MaFonction(n): res = [] k = n iter = 0 while k > 0: iter = iter + 1 res.append(k%2) k = k//2 return res 1) Remplir le tableau d états correspondant à l appel MaFonction(57) iter res k 0 [] 57 1 [1] 28 2 [1,0] 14 3 [1,0,0] 7 4 [1,0,0,1] 3 5 [1,0,0,1,1] 1 6 [1,0,0,1,1,1] 0 2) Quelle est la valeur de MaFonction(57) et interpréter la valeur de MaFonction(n) où n est un entier quelconque. [1,0,0,1,1,1] La représentation binaire de 57 est 111001 donc MaFonction(n) donne la liste des chiffres de la représentation binaire de n. En notant [a 0, a 1, a 2, a k ] les différents éléments de la liste, on a n = a 0 2 0 + a 1 2 1 + a 2 2 2 + + a k 2 k. 3) On suppose que n 0 a une représentation en base 2 de longueur k : 1** ** (c est-à-dire un 1 suivi de k 1 bits 0 ou 1). Montrer (en prenant garde aux inégalités larges et strictes) : 2 k 1 n < 2k. En déduire un encadrement de k à l aide de n. Les plus petit et plus grand nombre représentables en base 2 avec k bits (en commençant par un 1) sont respectivement 2 k 1 et 2 k 1. Sous les conditions de l énoncé, on a donc 2 k 1 n < 2 k. La fonction ln étant strictement croissante, elle préserve les inégalités (larges et strictes), et donc : log 2 (n) k < log 2 (n) + 1. Informatique Pour Tous page 2/6 PCSI1 2014-2015

4) En supposant que chaque instruction utilisées est élémentaire, évaluer la complexité de la fonction MaFonction(n) en fonction de n. L exécution de MaFonction(n) va réaliser 3 instructions à chaque itération. D après la question précédente, il y a k itérations si n a une représentation de longueur k en base 2 soit au total 3 + 3 k instructions. D après la question précédente, la complexité est donc de l ordre de O(log 2 (n)). (En réalité, la division euclidienne n est pas une opération unitaire et la complexité est un peu plus grande.) IV-Projet : Le problème de Freudenthal En 1969, le mathématicien hollandais H Freudenthal a proposé l énigme suivante : On choisit deux entiers X et Y, avec 1 < X <Y et X + Y 100. On indique à Patricia le produit P de X et Y. On indique à Sylvie la somme S de X et Y. Le dialogue est alors le suivant : 1. Patricia : «Je ne sais pas quels sont les nombres X et Y.» 2. Sylvie : «Je savais que vous ne connaissiez pas X et Y.» 3. Patricia : «Eh bien alors, maintenant, je connais X et Y.» 4. Sylvie : «Eh bien, moi aussi je les connais maintenant.» Trouver X et Y. Hans Freudenthal (1905-1990)dans les années 1930. Photo DR. Le projet qui suit consiste à programmer les fonctions permettant de résoudre l énigme sans noircir trop de feuilles de papier de calculs manuels. 1) Pour faciliter la suite, écrire une fonction Python prod(n) qui, pour un entier n, renvoie la liste des produits p q tels que p + q = n.: Par exemple, prod(8) donne la liste [12, 15, 16, 15, 12] parce que 8 peut s'écrire 2 + 6, 3 + 5, 4 + 4, 5 + 3 ou 6 + 2 et que les produits correspondants sont 12, 15 et 16 (certains apparaissant deux fois). def prod(n): p=[ ] # initialisation de la liste renvoyée for k in range(2,n-2): # choix du premier entier, strictement supérieur à 1 p.append(k*(n-k)) # le deuxième entier est de la forme n p (il est inutile de balayer tous les entiers possibles puisque p +q = n) return p Première affirmation : le produit donné à Patricia peut s'obtenir de plusieurs manières, sinon elle connaîtrait les facteurs. Pour exploiter cette information, on va commencer par fabriquer l'énorme liste des produits possibles, puis ne garder que ceux qui apparaissent au moins deux fois dans la liste. 2) Écrire une fonction prod_mult() qui renvoie la liste des entiers compris entre 3 et 100 (non inclus) qui peuvent s écrire de plusieurs manières comme le produit de deux entiers. Par exemple, 12 appartient à cette liste car on a 12 = 2 6 et 12 = 3 4. (Pour info, cette liste contient 1747 éléments.) Informatique Pour Tous page 3/6 PCSI1 2014-2015

def prod_mult() : produits = [] # on commence par faire la liste de tous les produits possibles for n in range(3,100) : # d entiers tels que n > m for m in range(2,n) : # et m > 1 if n + m <=100 : # et m + n <=100 produits.append(n * m) # bref, on a traduit ce que l énoncé dit de faire result = [] # on prépare la liste des produits conservés for p in produits : if produits.count(p) >= 2 : # c est-à-dire ceux qui apparaissent plusieurs fois result.append(p) # bref, on a traduit ce que l énoncé dit de faire ou, en intention def prod_mult() : produits=[x*y for y in range(3,100) for x in range(2,y) if x+y<=100] return [p for p in produits if produits.count(p)>=2] Deuxième affirmation : Si Sylvie sait que Patricia ne sait pas, c'est parce que, quelle que soit la décomposition en somme d'entiers de celui qu'on lui a donnée, le produit correspondant est dans la liste renvoyée par prod_mult(). Sinon Patricia l ayant entendu aurait alors su quels en sont les facteurs. Sylvie ne va donc garder que les sommes n pour lesquelles la liste renvoyée par prod(n) ne contient que des éléments de la liste renvoyée par prod_mult(), donc si leur intersection a une longueur maximale (soit n 5 car 4 = 2 + 2 ne convient pas comme résultat de l énigme puis X Y): 3) Réécrire la fonction som_possibles() suivante, en explicitant toutes les boucles : def som_possibles() : prod_mult_lst = prod_mult() return [n for n in range(4,100) if len([p for p in prod(n) if p in prod_mult_lst]) = = n - 4] def som_possibles() : prod_mult_lst = prod_mult() result =[] for n in range(4,100) : n_decomp = [] for p in prod(n) : if p in prod_mult_lst : n_decomp.append(p) if len(n_decomp) = = n-4: result.append(n) Informatique Pour Tous page 4/6 PCSI1 2014-2015

L affirmation de Sylvie lève toute ambiguïté chez Patricia. Mais quel genre d'ambiguïté peut-il y avoir encore? Par exemple, un des produits associés à 11 est 30 (car 11 = 6 + 5) mais 30 est aussi un produit associé à 17 (car 17=15+2). Si le produit 30 avait été indiqué à Patricia, l'ambiguïté en question resterait présente. Patricia peut donc enlever les doublons aux listes prod(11), prod(17) etc.. On va donc d abord créer cette liste des doublons 4) Écrire une fonction doublons() qui crée la liste des éléments du type p q de la liste renvoyée par som_possibles() qui appartiennent à la fois à prod(p) et prod(q). def doublons(): result = [] som_poss_lst = som_possibles() for p in som_poss_lst: for q in som_poss_lst: if q!= p: newlist = [] for r in prod(p): if r in prod(q): newlist.append(r) result = result + newlist Maintenant, on va enlever les doublons à chaque liste des produits (de 11, de 17 etc.). Si Patricia connaît maintenant la somme X + Y connue de Sylvie, c'est parce que, à partir de la liste renvoyée par som_possibles() dont les doublons sont retirés, elle ne garde qu'une liste contenant exactement les deux produits (X Y et Y X). 5) Écrire la fonction somme() qui fournit le seul élément S de la liste renvoyée par som_possibles() dont la liste des produits renvoyées par prod(s) ne contient que 2 éléments. def somme() : result = 0 som_poss_lst = prod_possibles() doublons_lst = doublons() for s in som_poss_lst : newlist = [] for r in prod(s): if r not in doublons_lst : newlist.append(r) if len(newlist) == 2 : result = s Notons S = X + Y la somme (obtenue à l étape précédente) connue par Sylvie, on recommence l'étape précédente avec S seulement pour trouver le produit P = X Y. 6) Écrire la fonction produit(s) qui renvoie le seul élément P de prod(s) qui n est pas dans la liste des doublons renvoyée par doublons(). def produit(s) : doublons_lst = doublons() prod_lst = prod(s) i = 0 while prod_lst[i] in doublons_lst : i = i + 1 return prod_lst[i] Informatique Pour Tous page 5/6 PCSI1 2014-2015

Il reste à trouver les deux nombres X et Y dont le produit est P et la somme S. C est une question classique à propos des équations du second degré. Mais comme on sait ici que les nombres X et Y cherchés sont des entiers, on peut les obtenir avec une double boucle (sans résoudre d équation du second degré). 7) Écrire la fonction soluce(s, P) qui renvoie le tuple (X,Y) tel que X + Y = S et X Y = P avec 1 < X < Y < 100. def soluce(s, P) : for y in range (100) : for x in range(y) : if x+y == S and x*y == P : return (x,y) On suppose toutes les fonctions prod(n), prod_mult(), som_possibles(), doublons(),somme(),produit(s) et soluce(s, P) correctement définies. 8) Écrire une ligne d instructions qui permet d afficher le résultat de l énigme de Freudenthal. print(soluce(somme(), produit(somme()))) Extrait de la documentation officielle Python : a.count(x) Return the number of times x appears in a (where a is a string, a list or a tuple). Informatique Pour Tous page 6/6 PCSI1 2014-2015