Resume Info Sup Spé MP PSI
Resume Info Sup Spé MP PSI
V 1.0
31 May 2022
Disclaimer
HADA MASHI COURS COMPLET DYAL INFO POUR PREPA, O HADSHI LI KAYN
HNA GHER BASH T7AREB ZERO ILA KNTI ZR9 F INFO, O Y9ED YNF3EK BASH
DIR "QUICK REVIEW" 9BL L’EPREUVE ILA KNTI DEJA SHAD INFO MZN. 7TIMAL
ANNA AU MOINS 1 POINT MN LES POINTS ABORDES ICI YT7ET F L’EPREUVE
KBIR, MAIS N’EMPECHE Y9D YKOUN DAKSHI F L’EPREUVE PLUS ELABORES.
THUS, USE THIS LAS9 ON YOUR OWN REPONSIBILITY
AND GOOD LUCK < 3.
2 Structures de données 5
2.1 lists (les listes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 tuples (les n-uplets) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 sets (les ensembles) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 dictionaries (les dictionnaires) . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Algorithmique 6
3.1 fonction et procédure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 fonction récursive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 la complexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4 conversion de la base 10 à la base 2 O(log(n)) . . . . . . . . . . . . . . . . . . 8
3.5 recherche linéaire O(n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.6 recherche binaire (dichotomie) O(log(n)) . . . . . . . . . . . . . . . . . . . . . 8
√
3.7 vérification de primalité d’un nombre O( n) . . . . . . . . . . . . . . . . . . 8
3.8 multiplication matricielle O(n3 ) . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.9 inversement d’une chaîne de caractère O(n) . . . . . . . . . . . . . . . . . . . 9
3.10 les algo de tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.10.1 bulle O(n2 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1
3.10.2 insertion O(n2 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.10.3 selection O(n2 ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.10.4 fusion O(n.log(n)) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.11 calcul d’intégrales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.11.1 méthode des rectangles O(n) . . . . . . . . . . . . . . . . . . . . . . . 10
3.11.2 méthode des trapèzes O(n) . . . . . . . . . . . . . . . . . . . . . . . . 10
3.11.3 méthode de Monte Carlo O(n) . . . . . . . . . . . . . . . . . . . . . . 10
3.12 recherche de zéro d’une fonction analytique . . . . . . . . . . . . . . . . . . . 11
3.12.1 méthode dichotomie (principe du TVI) . . . . . . . . . . . . . . . . . . 11
3.12.2 méthode de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.13 méthode d’Euler O(T /h) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5 SQL 14
5.1 A savoir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2 Gestion de table SQL existante . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.3 Création et suppression de base de donnée SQL . . . . . . . . . . . . . . . . . 15
2
1.3 l’écriture
Pour afficher un message :
1 print("mon texte entre guillemets")
2 print(variable) # la cas d’une variable
3 print(var1,var2) # plusieurs variables
4 print("text",var,42) # texts et nombres et variables..
la fonction print() effectue un retour à la ligne par défaut. Pour changer ce comportement,
on modifie le paramètre end dans la fonction :
1 print(1, end = " ") # espace a la fin
2 print(2, end = "") # rien a la fin
3 print(3) # retour a la ligne par defaut
4 print(4)
Output :
1 23
4
1.4 La lecture
Pour lire une variable depuis l’entrée de l’utilisateur :
1 x = input() # lit l’entree et le stock dans x
2 y = input("message") # affiche le message, lit l’entree
3 # et le stock dans y
la fonction input() renvoie une variable de type chaîne de caractères (string) par défaut.
Pour changer de type de données, on utilise les fonctions :
1 n = int(input()) # n un entier relatif
2 x = float(input()) # x un reel
On note que int(x) renvoie la partie avant la virgule de x. (e.i : int(3.6) renvoie 3)
3
1 if cond 1 :
2 # bloc 1
3 elif cond 2 :
4 # bloc 2
5 elif cond 3 :
6 # bloc 3
7 .....
8 else :
9 # bloc n
4
2 Structures de données
Ici, on se limitera aux 4 structures principales en python (listes, ensemble, tuple et
dictionnaire) avec pour chacun : ses caractéristiques et cas d’utilisation, ses méthodes prin-
cipales (initialisation, ajout/suppression élément, taille, accès et parcours).
5
— accès aux éléments : par parcours complet sur tous les éléments
— cas d’utilisation : utile pour l’implémentation des ensemble mathématiques en in-
formatique. Souvent utilisé pour l’élimination d’élément dupliqué dans une autre
structure (un ensemble n’admet pas de répétition)
1 #initialisation
2 s = set() # ensemble vide
3 s = {5,2,6,"rdt",2.68}
4 #ajouter element x
5 s.add(x)
6 #supprimer element x
7 s.discard(x) # si x n’existe pas elle ne fait rien
8 #acces element : impossible
9 #parcours d’elements
10 for e in s: # par element
11 # blabla
NB : ils existent des méthodes pour simuler les opérations sur les ensembles qui sont assez
intuitives.
1 s1.union(s2) # equivalent a s1 | s2
2 s1.intersection(s2) # equivalent a s1 & s2
3 s1.difference(s2) # equivalent a s1 - s2
4 s1.symmetric_difference(s2) # equivalent a s1 ^ s2
5 s1.isdisjoint(s2) # renvoie True ou False
3 Algorithmique
Un algorithme est une succession d’instructions que suit la machine (ou même l’homme..)
pour arriver à des données de sortie (output) en partant de certains données d’entrée (input).
6
Kayn bzaf d les algo f prepa, ci-dessous on en cite les plus "classiques", et avant, on passe
rapidement sur les notions : fonction, procédure, récursivité et complexité temporelle.
3.3 la complexité
Cette notion reflète la performance d’un algorithme et elle est divisée en 2 catégories :
temporelle et spatiale. Pour des raisons de "las9", on peut se rappeler que la complexité
temporelle d’un algorithme est le nombre d’opérations effectuées au pire des cas en fonction
de la taille de l’input, tandis que celle spatiale est l’espace mémoire utilisée au pire des
cas en fonction de la taille de l’input. On utilise la notation mathématique grand O pour
exprimer le type de complexité qui peut être :
1. constante O(1) : la vitesse est indépendante de la taille de l’input
2. logarithmique O(log(n)) : en général, c’est la complexité des algo qui procèdent
par la division de la taille de l’input par 2 à chaque itération (ex : la dichotomie)
3. linéaire O(n) : effectue N opérations pour un input de taille N (ex : recherche
linéaire)
√ √
4. racine carrée O( n) : effectue ∼ n opérations (ex : vérification (optimale) si un
nombre est premier)
5. quasi-linéaire O(n.log(n)) : mélange des 2 derniers algorithmes (ex : tri fusion)
6. polynomiale O(nk ) : contient en général des boucles imbriquées (ex : produit ma-
triciel n × n (O(n3 )) ou somme matricielle n × n (O(n2 )))
7
7. exponentielle O(k n ) : contient en général une récursivité (ex : génération de tous
les sous ensembles d’un ensemble de taille n (il existe exactement 2n ensembles))
8. factorielle O(n!) : rarement affronté.. (ex : génération de toutes les permutations
d’un ensemble de taille n)
Les complexités spatiales sont exprimées de la même façon, mais dépendent plutôt de l’espace
occupé par les variables de l’algo et non de sa vitesse d’exécution. En général, la complexité
spatiale et celle temporelle sont inversement proportionnelle (car on a tendance à uti-
liser plus d’espace pour réduire les calculs et donc le temps d’exécution en réutilisant les
résultats stockés..)
Encore, pour des raisons de "las9", le "background mathématique" de la plupart des al-
gorithmes présentés par la suite a été omis. Toutefois, des commentaires "light" ont été
introduit au sein des codes afin d’éclaircir un peu l’image..
√
3.7 vérification de primalité d’un nombre O( n)
8
1 import math
2 def isprime(n):
3 if abs(n) < 2 : return False # si |n| < 2, n’est pas premier
4 for i in range(2,int(math.sqrt(n)) + 1):
5 if n % 2 : return False # si un nombre <= sqrt(n) divise n, n n’est pas premier
6 return True
9
3.10.3 selection O(n2 )
1 def selection(tab):
2 for i in range(0,len(tab)-1):
3 min = i
4 for j in range(i+1,len(tab)):
5 if tab[j] < tab[min]: min = j
6 if (min != i):
7 tab[i], tab[min] = tab[min], tab[i]
10
1 import random
2 def integrale_MC(f, a, b, n): # l integrale In de f sur [a, b] avec n echantillons
3 somme = 0
4 for i in range(0, n):
5 x = random.uniform(a, b)
6 somme += f(x)
7 return somme / n
11
6 while t < T:
7 Y = Yn + h*systeme(Y,t)
8 t += h
9 liste_y.append(Y)
10 liste_t.append(t)
11 return liste_y,liste_t # renvoit 2 listes: les yi et les ti
4.1 numpy
1 import numpy as np # appel de la librairie
2
3 A = np.array([3,4,1][5,7,2][9,6,8]) # A est une matrice 3 x 3
4 print(A.shape()) # renvoie les dimensions de A = (2,3)
5 O = np.zeros((13,7)) # O est une matrice nulle de taille 13 x 7
6 I = np.ones((5,8)) # I est une matrice remplie de 1 de taille 5 x 8
7 B = A.T # B est la transposee de A
8 C = A + B # la somme matricielle
9 D = dot(A,B) # D est le produit matriciel de A et B
10 E = A * 3 # pour tt i,j , E[i][j] = 3 * A[i][j]
11 G = A**2 # pour tt i,j , G[i][j] = A[i][j] * A[i][j] (ce n’est pas le produit matriciel A.A !)
12 print( np.linalg.norm(A) ) # renvoie la norme standard de A (scalaire)
13 f = np.linalg.det(A) # renvoie le determinant de A (scalaire)
14 T = np.linspace(a,b,n) # renvoie une liste de n reels uniformement distribues entre a et b (inclus)
4.2 scipy
ci dessous un exemple de résolution du système différentiel de second ordre :
θ′ (t) = ω(t)
ω ′ (t) = −b ∗ ω(t) − c ∗ sin(θ(t))
1 import numpy as np
2 import scipy as sp # appel des librairies
3 #ci-dessous un exemple depuis le site de scipy
4
12
4.3 matplotlib
1 import numpy as np
2 import matplotlib.pyplot as plt # importation des librairies
3
4 def carre(x): # fonction x^2
5 return x**2
6 X = np.linspace(0,100,100) # listes de 100 x entre 0 et 100
7 Y = f(X) # listes des f(x)
8
9 plt.plot(X,Y) # trace la fonction avec l’aide des points (x_i,y_i)
10 plt.show() # affiche le resultat en dessous
4.4 math
Rien de spécial dans cette librairie, la plupart des fonctions sont intuitives. Toutefois, on
en cite quelques unes :
1 import math # appel de la librairie
2
3 x = math.cos(4) # en radian
4 y = math.sin(34)
5 z = math.atan(8) # fonction arctan
6 u = math.log(2) # fonction logarithme Neperien (ln)
7 u2 = math.log2(4) # fonction logarithme a base 2
8 u10 = math.log10(739) # fonction logarithme a base 10
9 v = math.exp(49) # fonction exponentiel
10 w = math.sqrt(7) # fonction racine carree
11 a = math.ceil(3.4) # renvoie la partie entiere avec exces (4 dans ce cas)
12 b = math.floor(3.4) # renvoie la partie entiere avec defaut (3 dans ce cas)
13
4.5 random
1 import random as rd # appel de librairie
2
3 A = [2,6,1,9,4]
4 print( rd.choice(A) ) # renvoie une valeur aleatoire d’une liste, ensemble ou chaine de caracteres
5 print( rd.randint(5,15) ) # renvoie un entier aleatoire entre 5 et 15
6 print( rd.uniform(3,7) ) # renvoie un reel aleatoire entre 3 et 7 (inclus)
7 print( rd.random() ) # renvoie un reel aleatoire entre 0 et 1
5 SQL
Bon, SQL mashi mon point fort mais an7awl n3ti fih quelques trucs..
5.1 A savoir
— SQL est un langage de gestion des bases de données relationnelles. Il est basé sur
l’algèbre relationnelle.
— chaque commande SQL se termine par un " ;"
— une base de données peut être composée de plusieurs tables. Chaque table est un
tableau de certains colonnes et certaines lignes. Chaque table possède une clé pri-
maire qui est la colonne par laquelle on peut distinguer entre les lignes (en général,
c’est la colonne qui n’admet pas de duplicata, comme la colonne ID)
— certaines tables possèdent une clé primaire composée de plusieurs colonnes, et cer-
taines tables possèdent une ou des clés étrangères (c-à-d des colonnes qui appar-
tiennent à d’autres tables)
14
14
15 INSERT INTO cpgeX(nomEleve, moyenne, filiere) VALUES ("adil", 16.38, PSI); -- insert une nouvelle
ligne a la table
16
17 UPDATE cpgeX SET moyenne = 9.34 WHERE ID = 78; -- change la moyenne de l’eleve numero 78 dans la
table
18 UPDATE cpgeX SET moyenne = 10; -- change la moyenne de chaque eleve a 10
19
20 DELETE FROM cpgeX WHERE nomEleve = ’Hamza’; -- supprime tous les eleves dont le nom est "Hamza"
21 DELETE FROM cpgeX; -- supprime toutes les lignes sans supprimer la table
22
23 SELECT MAX(moyenne), MIN(moyenne), AVG(moyenne) FROM cpgeX WHERE filiere = ’MP’; -- renvoie la plus
grande moyenne, la plus petite moyenne, et la moyenne des moyennes obtenue par les eleves MP
24 SELECT COUNT(*) FROM cpgeX WHERE filiere = ’PSI’; -- renvoie le nombre d’eleve en filiere PSI
25 SELECT nomEleve FROM cpgeX WHERE nomEleve LIKE ’Abd%’; -- renvoie tous les noms d’eleves qui
commencent par "Abd" (Abdellah, Abdelhamid..)
26 SELECT nomEleve FROM cpgeX WHERE nomEleve LIKE ’S____’; -- renvoie tous les noms d’eleves qui
commencent par S et contiennent exactement 4 lettres apres (comme Samir..)
27 SELECT moyenne AS m FROM cpgeX AS c WHERE m > 4; -- des alias comme dans Python pour alleger le code
, la requete afiche toutes les moyennes superieures a 4 strictement
15