NATIONAL ADVANCED SCHOOL OF POSTS,
ECOLE NATIONALE SUPERIEURE DES
TELECOMMUNICATIONS AND INFORMATION
POSTES, DES TELECOMMUNICATIONS ET
AND COMMUNICATION TECHNOLOGIES
DES TECHNOLOGIES DE L’INFORMATION ET
(SUP’PTIC)
DE LA COMMUNICATION (SUP’PTIC)
EXAM PROBLEMS
Partie1-Compréhension du cours
Q1: Le code suivant produit une Q2 : Que vaut nbs dans le programme Q3 : On considère le programme suivant, il
erreur. Corrigez le programme suivant : affiche None, pourquoi ?
nbs = [ 1, 5, 4, 7 ] def ma_fonction(x1,y1,x2,y2):
def f(x) : return x%2
for n in nbs: s += n d = (x1-x2)**2 +(y1-y2)**2
nbs = { i:f(i) for i in range(0,5) }
print(d)
----> 3 s += n d = ma_fonction(0,0,1,1)
NameError: name ’s’ is not defined print(d)
-----
2
None
Q4 : Que vaut n en fonction de N ? Q5 : Une des lignes suivantes provoque Q6 : Le code suivant produit une erreur.
n=0 une erreur, laquelle ? Proposez une correction.
N = 100
for i in range(0,N): a=3 #l1 nbs = ( 1, 5, 4, 7 )
for k in range(0,i): b = "6" #l2 nbs[0] = 0
n+=N a+b #l3 ----> 2 nbs[0] = 0
a*b #l4 TypeError: ’tuple’ object does not support
item assignment
Q7 : Que vaut c ? Q8 : Que vaut c ? Q9 : Que vaut y ?
d= {4: ’quatre’} l = [’a’, ’b’, ’c’] x = 2.67
c = d.get(’4’, None) c = l[1] y = int ( x * 2 ) / 2
Q10 : Que vaut x ? Q11 : Le code suivant comporte une Q12 : Que vaut x ?
erreur. Laquelle ?
from random import randint def make_squares(n): for i in range(N):
x = randint(0,100) squares = [i**2 for i in range(n)] s += 1
while x != 50: x = randint(0,100) print(make_squares(10)) N //= 2
x = (s+1)//2
Q13 : Que renvoie la fonction Q14 : Que peut-on dire du code suivant? Q15 : L’instruction en python pour inclure
suivante en fonction de n ? if 1<2 le module math est :
def f(n): print("Oui")
while n != 1: else : print("non") 1) Include math
if n%2 == 0: 2) import math
1) Ce code est invalide 3) from math import *
n = n/2
else: n = 3*n + 1 2) Ce code affiche "Oui" 4)
return n 3) Ce code affiche "non"
Partie 2 : Traduction d’algorithme en programme C ou Python
1) Traduire les algorithmes ci-dessous
Algorithme Myrda Fonction Abga(Tableau T[N] : Procédure Mult(N)
Variable N,i,S :Entier réel) :Booléen Variable i,S :Entier
Début Variable i,S :Entier Début
Ecrire("Entrez un nombre :") Début Pour(i de 1 à 20) Faire
Lire(N) Ecrire("Entrez un nombre réel:") S=i*N
S=0 Lire(S) Ecrire(i,"x",N,"=",S)
Pour(i de 1 à N) Faire Pour(i de 1 à N) Faire FinPour
Si(i mod 2=0) alors Si(T[i]=S) alors
S=S+1 Retourner( Vrai) Fin
FinSi FinSi
FinPour FinPour
Ecrire(S) Reourner(Faux)
Fin Fin
Partie 3 : Ecrire des programmes en Python
1) Que fait l’instruction ””.join(sorted(s)) ? (où s est une chaîne de caractères)
2) Ecrire une fonction qui détecte si deux mots sont des anagrammes ? (exemple : décentre et cédèrent).
3) Ecrire une fonction qui compte la fréquence des lettres dans un mot.
4) Ecrire une fonction qui détermine si une chaîne de caractères contient les lettres d’un même mot en double
exemplaire : feraiifare contient deux fois le mot faire.
5) Écrire un programme python qui demande à l'utilisateur d'entrer un nombre entier n compris entre 100 et 144 et qui
affiche le nième nombre premier.
6) Écrire un programme python qui compte le nombre de voyelle voy dans une chaine de caractères chaîne.
Nb. On ne distingue pas les majuscules des minuscules
7) Écrire un programme Python qui demande à l’utilisateur de saisir un entier naturel n et affiche tous ses
diviseurs.
8) Un nombre entier p est parfait si la somme de ses diviseurs est égale à 2p. Ecrire une fonction qui détermine
si un nombre entier est parfait ?
9) Ecrire la fonction nbMotsAvecVoyelle(nomf) : qui renvoie le nombre de mots commençant par une
voyelle et présents dans le fichier de nom nomf.
10) Écrire une fonction ADN(n) qui reçoit un entier n pour paramètre et qui renvoie une chaîne de caractères
de longueur n constituée uniquement des caractères A, C, T, G répartis aléatoirement.
Ind. La méthode choice ( ’ ACGT ’) du module random renvoie une des lettres ‘ACGT’ au hasard;
11) Ecrire un programme python qui affiche les entiers compris entre 1 et 100 dont la somme est égale à 11.
(Ex : 56 car 5+6=11)
Partie4 : Problème
Problème 1 :
I) On souhaite écrire un programme qui transforme le mot CANADA en ADANA
#1. Ecrire la fonction Sup_fisrt(chaine) qui va supprimer la première lettre de chaine. 1pt
Exemple Sup_fisrt(CANADA) retourne ANADA
#2. On propose le programme permute (chaine) qui est sensé inverser les lettres de chaine. Par exemple on
s’attend à ce que permute (ANADA) retourne ADANA.
def permute (chaine):
res= ‟ ”
n= len(chaine)
for i in range(n):
res+=chaine[n-i]
return(res)
#2a. Dire pourquoi la fonction permute ne marche pas 2pts
#2b. Modifier la fonction permute pour qu’elle inverse effectivement les mots 2pts
Problème 2 :
Un carré magique est une grille carrée dans laquelle des nombres sont placés de telle sorte que la somme des
nombres de chaque colonne, chaque ligne et de chacune des deux diagonales soit la même. De plus, le carré
doit contenir une fois chaque nombre, de 1 au nombre de cases de la grille. La grille peut être représentée
comme une liste bi-dimensionnel d’entiers. Notre objectif est d’écrire une fonction qui vérifie si une grille de
nombres reçue comme paramètre est un carré magique.
1. Écrire une fonction carre qui prend une liste de listes d’entiers m en paramètre et qui vérifie que m représente
bien une grille carrée. 1pt
2. Écrire une fonction aplatir qui prend en paramètre une liste de listes d’entiers m qu’on peut supposer d’être
une grille carrée, et qui envoie une liste d’entiers qui contient tous les entiers présents dans m. 2pt
Par exemple, appliquée à [[1, 2, 3], [4, 5, 6], [6, 8, 9]], la fonction doit envoyer le résultat [1, 2, 3, 4, 5, 6, 6,
8, 9].
3. Écrire une fonction domaine qui prend une liste d’entiers l en paramètre et qui envoie True si tous les
éléments de l sont des valeurs entre 0 (non-inclus) et la longueur de la liste (incluse), et False sinon. 2pt
4. Écrire une fonction différents qui prend une liste d’entiers l en paramètre et qui envoie True si tous les
éléments de l sont des valeurs différentes et False sinon. 2pts
5. Écrire une fonction lignes qui prend une liste de liste d’entiers m représentant une grille carrée et un entier
a en paramètre et qui envoie le booléen True si la somme des nombres de chaque ligne est égale à a et False
sinon. 2pts
6. Écrire une fonction colonnes qui prend une liste de liste d’entiers m représentant une grille carrée et un
entier a en paramètre et qui envoie True si la somme des nombres de chaque colonne est égale à a et False
sinon. 2pts
7. Écrire une fonction diagonales qui prend une liste de liste d’entiers m représentant une grille carrée et un
entier a en paramètre et qui envoie True si la somme des nombres de chaque diagonale est égale à a et False
sinon. 2pts
8. Enfin, écrire une fonction magique qui prend une liste de liste d’entiers m en paramètre et qui envoie True
si m représente un carré magique, et False sinon. Utilisez les fonctions des questions précédentes. 2pts