Elements de correction du TP 1 9 octobre 2014



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

STAGE IREM 0- Premiers pas en Python

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

Initiation à la programmation en Python

1 Recherche en table par balayage

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

TP 1. Prise en main du langage Python

Licence Sciences et Technologies Examen janvier 2010

Représentation d un entier en base b

Cours 7 : Utilisation de modules sous python

Exercices Types Algorithmique et simulation numérique Oral Mathématiques et Algorithmique Banque PT Propositions de réponses

Présentation du langage et premières fonctions

Programmation avec Xcas ou Python

TD3: tableaux avancées, première classe et chaînes

Utilisation d objets : String et ArrayList

Introduction à MATLAB R

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

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

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

Tp 1 correction. Structures de données (IF2)

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Algorithmique et Programmation, IMA

Cours Informatique Master STEP

Recherche dans un tableau

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

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

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Algorithmique et programmation : les bases (VBA) Corrigé

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmer en JAVA. par Tama

Programmation linéaire

TP JAVASCRIPT OMI4 TP5 SRC

1 Complément sur la projection du nuage des individus

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

V- Manipulations de nombres en binaire

Cours d initiation à la programmation en C++ Johann Cuenin

1. Structure d'un programme FORTRAN 95

MESURES PHYSIQUES 1 è année Informatique Scientifique version 2.2. Python 3. Exercices corrigés

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

# 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>

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

INF 321 : mémento de la syntaxe de Java

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

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

Découverte de Python

Initiation à l algorithmique

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Programmation linéaire et Optimisation. Didier Smets

Java Licence Professionnelle CISII,

Compression Compression par dictionnaires

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

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

Exercices Corrigés Premières notions sur les espaces vectoriels

Les bases du langage Python

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Examen Médian - 1 heure 30

Création d objet imbriqué sous PowerShell.

Conversion d un entier. Méthode par soustraction

DM 1 : Montre Autoquartz ETA

Programmation avec des objets : Cours 7. Menu du jour

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

La classification automatique de données quantitatives

Chapitre 2 Devine mon nombre!

TP : Gestion d une image au format PGM

3 Approximation de solutions d équations

Informatique III: Programmation en C++

Corrigé des exercices sur les références

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

OCL - Object Constraint Language

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Maple: premiers calculs et premières applications

Plus courts chemins, programmation dynamique

Les structures de données. Rajae El Ouazzani

.NET - Classe de Log

Cours de Systèmes d Exploitation

Représentation des Nombres

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

Chapitre 5 : Flot maximal dans un graphe

Résolution d équations non linéaires

4 Exemples de problèmes MapReduce incrémentaux

TP, première séquence d exercices.

Module 16 : Les fonctions de recherche et de référence

I. Polynômes de Tchebychev

Dérivées d ordres supérieurs. Application à l étude d extrema.

Baccalauréat technologique Série : sciences et technologies du management et de la gestion (STMG)

Utilitaires méconnus de StrataFrame

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Chapitre VI - Méthodes de factorisation

Le prototype de la fonction main()

Quelques tests de primalité

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

Objets Combinatoires élementaires

CCP PSI Mathématiques 1 : un corrigé


Premiers Pas en Programmation Objet : les Classes et les Objets

Transcription:

PSI* PSI Informatique Pour Tous, Lycée Kléber Elements de correction du TP 1 9 octobre 2014 Exercice 1 Rappels : Une chaîne est une suite éventuellement vide non modifiable de caractères : chaine = Je suis heureux d etre en cours chaine = "Je suis heureux d etre en cours" chaine = """Je suis heureux d etre en cours""" Une liste list est suite éventuellement modifiable de données numérotées de 0 à la longueur de la liste -1. Un tuple est une suite éventuellement vide non modifiable de données (éléments d un produit cartésien d ensembles). Un ensemble (set) est une collection éventuellement vide modifiable de données sans ordre défini et sans doublons (l ordre est choisi par l interpréteur). Un dictionnaire (dict) est une collection éventuellement vide modifiable d objets indexés par des objets de n importe quel type (objet : index) sans ordre défini et sans doublons d objets. Par exemple on peut associer la fréquence des lettres aux lettres de la chaine précédente : dico= { J :1, e :6, s :3, u :4, i :1, h :1, r : 3, x :1, d :1, t :1, n :1, c :1, o :1 } Utiliser la commande help() (par exemple help(ord)), pour voir le fonctionnement des primitives données dans l énoncé. 1. La primitive isinstance prend en argument un objet et une classe et renvoie True si l objet appartient à la classe donnée, False sinon. 2. Attention d effectuer une division dans les flottants : def s(n): return sum(float(len(str(k)))/(k*(k+1)) for k in range(1, n)) for i in range(1, 8): print(s(10**i)) La série converge vers 10 9. 3. De la même façon : def sigma(n): return sum(1./(k**2) for k in range(1,n) if 9 not in str(k)) On peut afficher des valeurs jusqu à obtenir une différence inférieure à une précision donnée entre des termes consécutfifs. Exercice 2 1. 1

2. q/p renvoie le couple (quotient, reste) de la division euclidienne des polynômes. 3. On obtient la base canonique de R 30 [X]. 4. On utilise la méthode integ def scalaire(p,q): pq = p*q PQ = pq.integ() primitive de p*q qui s annule en 0 return(pq(1.0)-pq(-1.0)) def norme(p): return(math.sqrt(scalaire(p,p))) 5. legendre = [] legendre.append(cano[0]/norme(cano[0])) for i in range(1,n+1): q = cano[i] for j in range(i): q = q - scalaire(cano[i],legendre[j])*legendre[j] legendre.append(q/norme(q)) Exercice 3 1. def lignes(m): return(len(m)) def cols(m): return(len(m[0])) 2. from copy import deepcopy def echange(m,i,j): S=deepcopy(M) S[i],S[j]=M[j],M[i] return(s) 3. def matrice_identite(n): M=[] L=[] for j in range(n): L.append(0) for i in range(n): M.append(deepcopy(L)) for i in range(n): for j in range(n): if i==j: M[i][j]=1 return(m) Ou bien def unite(n): return[[1 if i==j else 0 for j in range(n)] for i in range(n)] 4. 5. def GJ(M): U=matrice_identite(len(M)) return[m[i]+u[i] for i in range(lignes(m))] 6. def comb_ligne(ki,kj,m,i,j): S=deepcopy(M) Li=[ki*x for x in M[i]] Lj=[kj*x for x in M[j]] S[j]=[Li[k]+Lj[k] for k in range(cols(m))] return S 2

7. >>> S=GJ(M) >>> S=comb_ligne(0,0.5,S,0,0) >>> S=comb_ligne(-3,1,S,0,1) >>> S=comb_ligne(-4,1,S,0,2) >>> S=comb_ligne(0,2./3.,S,0,1) >>> S=comb_ligne(-0.5,1,S,1,0) >>> S=comb_ligne(-3,1,S,1,2) >>> S=comb_ligne(0,0.25,S,0,2) >>> S=comb_ligne(7./3.,1,S,2,0) >>> S=comb_ligne(-2./3.,1,S,2,1) >>> def JG(T): return[t[i][len(t):] for i in range(lignes(t))] >>> T=JG(S) >>> T [[1.5833333333333335, -1.5, 0.5833333333333334], [-1.1666666666666667, 1.0, -0.16666666666 >>> def affiche(m): for i in range(lignes(m)): print(m[i]) >>> affiche(t) [1.5833333333333335, -1.5, 0.5833333333333334] [-1.1666666666666667, 1.0, -0.16666666666666666] [0.25, -0.5, 0.25] [[1.5833333333333335, -1.5, 0.5833333333333334], [-1.1666666666666667, 1.0, -0.16666666666 8. >>> def inv_gauss(t): if lignes(t)!= cols(t): raise ExceprionMatrice("Cette matrice n est pas carrée") S=GJ(T) for NoColonne in range(lignes(t)): NoLigne=NoColonne while S[NoLigne][NoColonne] == 0: if NoLigne == len(t)-1: raise ExceptionMatrice("Cette matrice n est pas inversible") NoLigne += 1 S=echange(S,NoLigne,NoColonne) #On place l élément non nul sur la diagonale pivot=s[nocolonne][nocolonne] S=comb_ligne(0,float(1)/float(pivot),S,0,NoColonne) #On fait appara^ıtre un 1 E=set([k for k in range(lignes(t))]) - set([nocolonne]) # set permet la soustraction d ensembles for k in E: S=comb_ligne(-S[k][NoColonne],1,S,NoColonne,k) return JG(S) >>> M [[2, 1, -4], [3, 3, -5], [4, 5, -2]] >>> inv_gauss(m) 9. def det_gauss(t): if lignes(t)!= cols(t): raise ExceptionMatrice("cette matrice n est pas carrée") S=deepcopy(T) 3

i=1 for NoColonne in range(lignes(t)): NoLigne=NoColonne while (S[NoLigne][NoColonne]==0): if NoLigne == len(t)-1: return(0) NoLigne += 1 S=echange(S,NoLigne,NoColonne) i *= -1 #l échange multiplie le déterminant par -1 pivot=s[nocolonne][nocolonne] for k in range(noligne +1, len(t)): S=comb_ligne(-S[k][NoColonne],pivot,S,NoColonne,k) i *= -S[NoColonne][NoColonne] #la combinaison modifie le déterminant d=1 #initialisation du produit for k in range(lignes(s)): d *= S[k][k] #produit des termes diagonaux return (d/i) Exercice 4 1. def code(chaine): return([ord(x)-ord( @ ) for x in chaine]) 2. def decode(liste): chaine= for x in liste: chaine += chr( x+ ord( @ )) return(chaine) 3. def transpose(m): return[[m[i][j] for i in range(lignes(m))] for j in range(cols(m))] def paquets(l): i=0 J=[] while i+2 <len(l): J+=[[x for x in L[i:i+3]]] i +=3 if i == len(l)-1: J+=[[L[i],0,0]] if i == len(l)-2: J+=[[L[i],L[i+1],0]] return(transpose(j)) 4. def coeff_modulo(m,p): #retourne la matrice M avec coefficients modulo p return([[m[i][j] %p for j in range(cols(m))]for i in range(lignes(m))]) def mprod(a,b): if cols(a)!= lignes(b): return "les tailles ne sont pas compatibles" else: C=[[0 for i in range(cols(b))] for j in range(lignes(a))] for i in range(lignes(a)): for j in range(cols(b)): for k in range(lignes(b)): C[i][j]+=A[i][k]*B[k][j] return C 4

L=code( JE@SUIS@LA@PLUS@FORTE@EN@PYTHON ) J=paquets(L) A=[[1,22,25],[0,25,1],[25,3,1]] matcode=coeff_modulo(mprod(a,j),27) def mat_list(m): #convertit M en une liste L=[] for i in range(lignes(m)): L+=M[i] return L message_crypte=decode(mat_list(transpose(coeff_modulo(mprod(a,j),27)))) >>> message_crypte LQVDUGVLAWPNDDDUCFPSBADBETSDZZN@Z On peut vérifier que tout fonctionne en décodant ce message : LL=code(message_crypte) #crée la liste avec le message crypté crypte=paquets(ll) B=[[10, 2, 18], [4, 6, 2], [8, 13, 4]] #B est l inverse de A #crée la matrice de trois lignes associée clarifie=coeff_modulo(mprod(b,crypte),27) #utilise la matrice B inverse de A de décodage liste_clarifie=mat_list(transpose(clarifie)) #transforme le message en liste message_decode=decode(liste_clarifie) #pour rendre le message lisible avec des lettres >>> message_decode JE@SUIS@LA@PLUS@FORTE@EN@PYTHON@@ 5. La récompense : >>> messagecrypte2= NQR@SZEIMFX@WIZDLJQSQSBCJDBSMLKBNIWLE@Q >>> LL=code(messagecrypte2) >>> crypte=paquets(ll) >>> clarifie=coeff_modulo(mprod(b,crypte),27) >>> liste_clarifie=mat_list(transpose(clarifie)) >>> message_decode2=decode(liste_clarifie) >>> message_decode2 LE@TD@EST@FINI@A@LA@SEMAINE@PROCHAINE@@ 5