Vous êtes sur la page 1sur 25

Algorithmique et Programmation

T NSI

NSI
Numérique et Sciences Informatique

Introduction à la programmation

Il existe de nombreux langages de programmation : Visual basic, C, C++, Lisp,


prolog, ada, assembleur, logo, java, javascript, python, pascal, Gfa, cobra, ruby, lua,
julia, perl, php … (liste loin d’être exhaustive).
Lorsqu’on débute en informatique, on s’imagine qu’en « apprenant » un langage, on
va devenir un bon informaticien et qu’au fond tout se résume à un bouquin
d’instructions qu’il suffirait de compulser, comme si le langage se suffisait à lui-même
pour résoudre tous les problèmes et faire tout ce qu’on veut.
C’est tout aussi stupide que de croire qu’en apprenant le dictionnaire de la langue
française, on va devenir un grand écrivain !
La réalité est tout autre : Le langage de programmation n’est qu’un outil. Ce qu’il faut
maîtriser c’est l’algorithmique et non le langage. Un bon informaticien, c’est celui qui
maîtrise les techniques algorithmiques pour résoudre les problèmes informatiques et
qui sait ensuite choisir le langage le plus adapté pour coder son programme
efficacement.
Comme tout débutant, vous devez tout d’abord commencer par des choses simples
pour au fur et à mesure arriver à faire des programmes de plus en plus élaborés ou
complexes.
Naturellement cela génère souvent des frustrations : on a tous envie de faire de
beaux et grands programmes, des jeux, des animations ou que sais-je encore. On
veut savoir tout faire tout de suite et bien sûre, on se rend compte rapidement dès
les premières lignes de code que la tâche n’est pas simple, car souvent on ne sait
même pas comment aborder le problème.

Comment débuter l’apprentissage de la programmation ?

On pourrait commencer par ne faire que de l’algorithmique pure mais ce serait assez
rapidement rebutant. On va donc plutôt se pencher sur de petits problèmes concrets
et voir comment on peut se débrouiller pour les résoudre. Les notions de
programmation structurée seront donc abordées selon les besoins du moment, à
travers les programmes réalisés : rien de mieux pour apprendre de façon ludique !
Pour cela, on va utiliser le langage de programmation PYTHON, qui a la bonne idée
d’être très bien documentée, portable (windows, linux), syntaxiquement simple,
puissant (nombreuses bibliothèques de fonctions) et est utilisée à l’université, donc
vous ne serez pas dépaysé.

Attention : ce n’est pas un cours de python, c’est un cours d’algorithmique avec


python comme support. L’objectif est de permettre une analyse et une
compréhension rapide des concepts algorithmiques sans se perdre dans les dédales
d’un langage ou des fonctions annexes non pertinentes.

-1-
Algorithmique et Programmation
T NSI

Sommaire
1- Les rudiments du langage

Les variables :

v1 = 10 v1 = 10
v2 = 20 v2 = 20
resultat = v1 * v2 resultat = v1 * v2
print (resultat) print ("resultat = ", resultat)

Quelle différence y a-t-il entre ces 2 programmes ?


Le premier programme affichera seulement le résultat et le second affichera « resultat = » puis
le résultat.

A quoi servent les guillemets dans l’instruction print ?


Pour faire une chaîne caractère.

Le programme ci-dessous va générer une erreur, pourquoi ?

v1 = 10
v2 = 20
resultat = V1 * V2
print ("resultat = ", resultat)

Réponse : (traduire le message en anglais et répondre)

Nom ‘V1’ n’est pas définit (Il ne fallait pas mettre de majuscule.)

Types de variable, lecture du clavier, modes d’affichages

On veut calculer l’aire d’un rectangle. Pour cela entrez le programme ci-dessous et exécutez-
le.
largeur = input ("entrez la largeur du rectangle : ")
hauteur = input ("entrez la hauteur du rectangle : ")
aire = largeur * hauteur
print ("resultat = ", aire, "cm2")

Une erreur est générée liée à la nature des variables. Sous Python 3.7 l’instruction « input »
attend en entrée une chaîne de caractères (string) ( type str signifie « string » en anglais )
Il faut donc convertir la chaîne en nombre :

-2-
Algorithmique et Programmation
T NSI

Le type « int » (pour integer ou entier) :

largeur = input ("entrez la largeur du rectangle : ") Essayez avec des valeurs
hauteur = input ("entrez la hauteur du rectangle : ") entières : 10 et 15 par exemple
largeur = int(largeur)
hauteur = int(hauteur)
aire = largeur * hauteur Essayez avec des valeurs
print ("resultat = ", aire, "cm2") décimales : 5.5 et 8 par exemple

Que se passe t-il si on entre des valeurs entières ?


Ca marche.

Que se passe t-il si on entre des valeurs décimales ?


(essayer de traduire le message d’erreur)
Le programme ne fonctionne pas correctement

Le type « float » (pour floattant ou décimal ) :


Modifier votre programme comme suit et refaire les test :

largeur = input ("entrez la largeur du rectangle : ")


hauteur = input ("entrez la hauteur du rectangle : ")
largeur = float(largeur)
hauteur = float(hauteur)
aire = largeur * hauteur
print ("resultat = ", aire, "cm2")

Opérations mathématiques

-3-
Algorithmique et Programmation
T NSI

Une opération mathématique intéressante est le %, il permet de récupérer le reste d’une


division entière. Indiquer pour les résultats obtenus pour le programme ci-dessous :

v1 = 7
v2 = 2
print (v1/v2)

print (v1//v2)

print (v1%v2)

Calculs itératif
En programmation, l’écriture « a = a + nombre » est très utilisée. Cela signifie que je prends
la valeur de « a », je l’additionne à « nombre » et je stocke le résultat dans « a ».
Exécuter le programme ci-dessous et donner les résultats affichés dans la zone commentaire :
a = 10
print ("au début on a = ",a) # 10
a=a+5
print ("ici a =",a) # 15
a=a+5
print ("et maintenant a =",a) # 20

Pour chaque ligne ci-dessous, donner le résultat de l’opération :


a=5 a=0
a = a*2 # 10 a = a+1 # 1

a = a*2 # 20 a = a+1 # 2

a = a*2 # 40 a = a+1 # 3

print (a) # 40 - 4 - (a) # 3


print
Algorithmique et Programmation
T NSI

La boucle for

Si on doit répéter une opération n fois, il serait fastidieux de l’écrire n fois. On utilisera pour
cela l’instruction « for » : Vérifier que les programmes ci-dessous donnent le même résultat
que précédemment :
a=5 a=0
for i in range (3): for i in range (3):
a=a*2 a=a+1
print (a) print (a)

Effectivement ils donnent le même résultat que précédemment.

Indiquer combien de fois la boucle est exécutée dans les 2 cas ci-dessous et le résultat final
affiché :

for i in range (5): for titi in range (10):


print (i) print (titi)

4 et 9 fois.
Programme « somme des n premiers entiers naturels »

Faire un programme pour additionner les n premiers entiers naturels (0 + 1 + 2 + 3 + …+ n-1)


et compléter le tableau :

n= int(input("entrez n :")) itération n i somme


somme = 0 1 7 0 0
for i in range(n): 2 7 1 1
somme = somme+i 3 7 2 3
4 7 3 6
print ("somme = ", somme) 5 7 4 10
6 7 5 15
7 7 6 21
Donner la plage de variation de i par
Note : itération représente le numéro de passage dans la
rapport à n :
boucle. (à l’itération 3 on est passé 3 fois dans la boucle
for )
i varie de 0 à 4

Programme « produit des n premiers entiers naturels »

Faire un programme pour multiplier les n premiers entiers naturels (1*2*3*4*5*…*n) et


compléter le tableau . En maths cela s’appelle le « produit factoriel de n ou n! »

-5-
Algorithmique et Programmation
T NSI

n= int(input("entrez n :")) itération n i produit


produit = 1 1 7 1 1
for i in range(1 , n+1 , 1): 2 7 2 2
produit = produit*i 3 7 3 6
4 7 4 24
print ("produit = ", produit) 5 7 5 120
6 7 6 720
7 7 7 5040

Signification des paramètres du range (début, fin, pas) : i prendra toutes les valeurs entre
début et fin-1 par incrément du « pas ».

Les structures de contrôle : if et while

if (condition) :
bloc …………………. Si la condition est vraie, le bloc d’instruction 1 est
…………………………. exécuté, sinon c’est le bloc d’instruction 2 qui est
….d’instructions 1 exécuté.
else :
bloc ………………….
………………………….
….d’instructions 2

Exemple :

n= int(input("entrez n :")) n= int(input("entrez n :"))


if n>10: if n>=5 and n<=10:
print (" n est supérieur à 10") print (" n est compris entre 5 et 10")
else: else:
print (" n est inférieur ou égal à 10") print (" n est en dehors de l'intervalle")

n= int(input("entrez n :")) « and » signifie « ET »


if n==10 or n==25: « or » signifie « ou »
print (" n=10 ou n=25 ") ==  pour test d’égalité
else: >=  pour supérieur ou égal
print (" condition fausse ") <=  pour inférieur ou égal

Traduire l’algo ci-dessous en python :


n= int(input("entrez n :"))
Entrez une valeur pour n a= int(input("entrez a :"))
Entrez une valeur pour a
Si ((n>=10 et n<50) ou (n = 150)) ET (a=5) alors if ((n>=10 et n<50) or (n = 150)) and (a=5)
Afficher « condition vraie » :

print ("condition vraie")


-6-
else:
print ("condition fausse")
Algorithmique et Programmation
T NSI
Sinon
Afficher « condition fausse »

L’utilisation du else est optionnel .


Tester le programme suivant :
n= int(input("entrez n :")) On entre une valeur pour a et n
a= int(input("entrez a :"))
if a<n: Si la condition est vraie, on exécute
print ("a est inférieur à n") l’instruction (ou le bloc d’instruction)
sinon on passe au test suivant
if a>n:
print ("a est supérieur à n")

if a==n:
print
La boucle ("a («
while est tant
égalque
à n")
 »)

while ( condition ) : Tant que la condition est vraie, on exécute


bloc …………………. le bloc d’instructions
………………………….
….d’instructions

Exemple 1 :
# programme 1 # programme 2
a=0 a=0
while a<10: while a<=10:
a=a+1 a=a+1
print ("a =",a ) print ("a =",a )

Quelle est la différence entre ces deux programmes ? les résultats ne sont pas les mêmes.

Que vaut a en sortant du programme 1 ? : 10

Que vaut a en sortant du programme 2 ? : 11

Exemple 2 :

reponse =""
while reponse != "fin":
reponse = input ("Que voulez vous faire ? -fin pour sortir-: ")
print (reponse)

Exemple 3 :
Je veux générer la séquence de nombre suivante :
0 1.5 3 4.5 6 7.5 9

-7-
Algorithmique et Programmation
T NSI

# prog 1 # prog 2 (fonctionne pas)


i=0 for i in range (0, 12 , 1.5):
while i<=9: print (i)
print (i)
i=i+1.5

Tester les 2 programmes, le programme 2 ne fonctionne pas car on ne peut pas mettre un pas
non entier dans les paramètres de « range » : donner le message d’erreur généré

Réponse : Traceback (most recent call last):


File "<console>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer

Exercices

Pour chaque exercice, enregistrez le programme et mettez le dans


pearltrees votre dépôt élève

Exo 1
Soit la liste suivante :

L1= [1, 3, 1, 4, 8, 13, 26, 154, 12, 7, 21, 23]

On veut connaître le nombre d’éléments (longueur) de cette liste et accéder à un élément


particulier :

L1= [1, 3, 1, 4, 8, 13, 26, 154, 12, 7, 21, 23]


longueur =len(L1) # nb d'elements
print (longueur)
element = L1[4] # acceder au 5ème élément
print (element)

a - Faire un programme pour afficher les éléments de la liste comme ci-contre :

b - compléter le programme pour afficher uniquement les nombres pairs

-8-
Algorithmique et Programmation
T NSI
c - compléter le programme pour afficher uniquement les nombres impairs
d - compléter le programme pour compter les nombres pairs et impairs

Ci-dessous le format
d’affichage attendu

Aide : pour savoir si un


nombre nb est pair il suffit
de tester si nb % 2 == 0

Exo 2
L1= [3, 27, 27, 19, 18, 113, 22, 14, 189, 7, 2, 23,21, 22, 23, 100]

a- Faire un programme pour afficher la somme de tous les éléments de la liste


b- Compléter le programme pour additionner uniquement les nombres pairs
c- Compléter le programme pour additionner uniquement les nombres impairs

# PROPOSITION DE CORRECTION Exo 1


L1= [1, 3, 1, 4, 8, 13, 26, 154, 12, 7, 21, 23]
longueur =len(L1) # nb d'elements
print (longueur)
element = L1[4] # acceder au 5ème élément
print (element)
compteur1 =0
compteur2 =0
for i in range(longueur):
element = L1[i]
if element % 2 ==0:
print (" Element pairs ",i," =",element)
compteur1 = compteur1 + 1

print (" Nb d'élements pairs =", compteur1)


print ()
print ()
for i in range(longueur):
element = L1[i]
if element % 2 ==1:
print (" Element impairs ",i," =",element)
compteur2 = compteur2 + 1
print (" Nb d'élements impairs =", compteur2) -9-
Algorithmique et Programmation
T NSI

Exo 3

Soit le programme suivant :


# jeu du nombre aléatoire à rechercher a- Tester le programme et
vérifier qu’il est fonctionnel.
import random
b- Compléter le programme
nb = random.randint(0,100) afin d’afficher le score du
trouve =0 joueur. Pour cela on part d’un
score de 20 et le joueur perd 2
while trouve == 0: points à chaque tentative pour
N = int(input("Entrez un nombre entre 0 et 100 : ")) trouver le bon nombre.
if N<nb:
print ("Trop petit") c- Compléter votre
if N>nb: programme pour qu’il s’arrête
print ("Trop grand") au bout de 5 essais , il devra
Les fonctions
if N==nb: afficher « game over »
print ("Vous avez gagné !")
# Définition des fonctions
trouve =1 La définition d’une fonction
d- Faire se faitqu’une
en sorte en utilisant
le mot clef « def »
nouvelle partie se relance
def volumecylindre(rayon, hauteur): Rayon et hauteurautomatiquement
sont les paramètres de la
v = 3.1415*rayon*rayon*hauteur fonction
return v Return v : renvoi la valeur v calculée.

Vous devez définir toutes vos fonctions avant


# Programme principal votre programme principal.

print (volumecylindre(5,10)) L’appel de la fonction avec les paramètres 5 et


print (volumecylindre(3,1)) 10 va renvoyer un résultat qui sera affiché.
Idem avec les paramètres 3 et 1

# Définition des fonctions Les paramètres d’une


fonction sont
def foo(a): # fonction qui ne renvoie rien optionnels.
b = a**3
print ("a^3 = ",b) De même, si la
fonction ne renvoie
def finjeu(): # fonction sans paramètre et qui ne renvoie rien rien, le return est
print ("Game Over") optionnel.
# Variable globale et variable locale
## Définition
Programmedes fonctions
principal
def volume(l1,l2,l3):
foo(4) # appel de la fonction foo avec 4 en paramètre
finjeu()v=l1*l2*l3 # v est une
# appel de la fonction variable
finjeu sanslocale à la fonction volume
paramètre
return v

# Programme principal
v=10 # ce n’est pas le même v que dans la fonction volume
v1 = volume(10,5,3) - 10 -
print (v1) # affiche 150 (10*5*3)
print (v) # va afficher 10 !! (et non 150)
Algorithmique et Programmation
T NSI

Par défaut, une variable est locale dans une fonction. On peut la déclarer en tant que
variable globale si on veut qu’elle soit utilisable ailleurs dans le programme :
# définition des fonctions
def volume(l1,l2,l3):
global v # ce sera le même que celui déclaré dans le programme principal
v=l1*l2*l3

# programme principal
v=0
volume(10,5,3)
D’une façon générale il vaut mieux éviter lorsque cela est possible l’usage des variables
print (v)
globales.
Si une fonction a besoin d’une variable, passez là en paramètre. Si elle doit effectuer des
calculs et modifier des variables, renvoyer les données en utilisant « return »

Exemple :
def calcul(a,b,c):
v1=a+b
v2=a+c
return v1,v2 # on renvoie les valeurs de v1 et v2

param1=5
param2=6
param3=10

res1, res2 = calcul(param1,param2,param3) # on récupère v1 dans res1 et v2 dans res2


print ("v1 =",res1, "v2 =",res2)

Lorsque vous travaillez à plusieurs sur un projet pour réaliser un programme informatique,
moins vous aurez de variables globales, moins il y aura de risque d’écrasement ou
d’utilisations erronées des données (qui peuvent être utilisée dans d’autres routines)
Une variable locale, même si elle porte le même nom qu’une variable globale, n’interférera
pas car elle est créée au moment de l’exécution de la fonction et détruite dès qu’on sort de la
fonction.

Exercice 4

- 11 -
Algorithmique et Programmation
T NSI

#Afficher une table de multiplication Compléter le programme pour afficher


correctement la table de multiplication.
def table(n):
for i in range(11): Modifier le paramètre « 11 » de la boucle
mul= i*...... range et indiquer la conséquence ?
print (n,"*", i ," = ",mul)

n = int(input ("Quelle table : "))


table(n)

from math import * Expliquez ce que calcul le programme ci-contre ?

def hypothenus(a,b): Que se passe t-il si on supprime la ligne « return


c = sqrt(a**2+b**2) c » ?
return c
Que se passe t-il si on supprime la ligne « from math
print (hypothenus(3,4)) import * » ? (Importation de la bibliothèque math)

a- Faire une fonction qui prend en paramètre la longueur et la largeur d’un triangle rectangle
et qui renvoie son aire.
# Votre programme Nom :

b- On veut réaliser une fonction f1(x) pour calculer y = 7x2 - 3x + 2.


Contraintes :
L’utilisateur devra pouvoir rentrer des valeurs pour x sans avoir à relancer le
programme
La fonction devra s’appeler f1(x) et renvoyer y
Pas de « print » à l’intérieur de la fonction.
# VotreLeprogramme Nom :
programme se termine si l’utilisateur appuie sur la touche f

- 12 -
Algorithmique et Programmation
T NSI

FAIRE VALIDER PAR LE PROFESSEUR

Exercice 5

Soit la liste :
L1= [ 1, 27, 27, 19, 18, 113, 22, 1, 14, 189, 7, 2, 23,21, 22, 23, 100 , 1 , 100, 22, 14 ,100, 1]

1- Ecrire une fonction compter(n, liste) qui prend en paramètre une valeur « n » et une liste et
qui renvoie le nombre d’occurrences de n dans la liste. (occurrence = nombre de répétitions)
Contrainte : interdiction d’utiliser la fonction « count » de python …

def compter(n,liste):
compteur = …….
LongueurListe = ………
for i in range (..........................):
if liste[…] == n:
compteur = ………………
return compteur

L1= [ 1, 27, 27, 19, 18, 113, 22, 1, 14, 189, 7, 2, 23,21, 22, 23, 100 , 1 , 100, 22, 14 ,100, 1]

print (compter(1,L1))

def maximum(liste):
2- Ecrire max1 = ….........
une fonction maximum(liste) qui recherche le plus grand élément de la liste.
Contrainte : interdiction =d’utiliser
LongueurListe ……….la fonction « max » de python …
for ..... in range (..................):
if max1 < ................... :
max1 = ...................

return max1

L1= [ 1, 27, 27, 19, 18, 113, 22, 1, 14, 189, 7, 2, 23,21, 22, 23, 100 , 1 , 100, 22, 14 ,100, 1]
- 13 -
print ("max =",maximum(L1))
Algorithmique et Programmation
T NSI

3- Ecrire une fonction minimum(liste) qui recherche le plus petit élément de la liste.
Contrainte : interdiction d’utiliser la fonction « min » de python …

Faire valider par le professeur

4- Optimisation python

Python permet de faire facilement beaucoup de choses, ce n’est pas le cas de tous les
langages. Voici par exemple comment traiter le problème ci-dessus en version optimisée
python :

def maximum2(liste): On voit ici que i prend les différentes


max2=0 valeurs de la liste et que la boucle
for i in liste: s’arrête automatiquement quand i a
if max2<i: atteint le dernier élément de la liste.
max2 = i C’est donc très simple mais dans d’autres
langages ce sera souvent impossible de
return max2 faire cela …

Et encore plus optimisé :


def maximum3(liste): « max » est un mot clef de python et
return max(liste) permet de calculer le maximum d’une liste
directement ….

Exercice 6

Logique combinatoire

On souhaite programmer les 3 portes logiques de base :

La porte « NON » :

- 14 -
Algorithmique et Programmation
T NSI

A S
0 1
1 0

La lampe s’allume si on n’appuie PAS sur A .

La porte « OU » :
A B S
0 0 0
0 1 1
1 0 1
1 1 1

La lampe s’allume si on appuie sur A ou sur B :

Ladef NON(a):
porte « ET » :
if a==1: On souhaite maintenant programmer une table de
res= .... vérité quelconque :
A B
else: S
0 0 res= ....0 A B S
0 1 res 0
return 0 0 0
1 0 0 0 1 1
1 1 1 1 0 0
deffin
----- OU(a,b):
------ 1 1 1
La lampeifs’allume
a==1 or sib==1:
on appuie sur A ET sur B :
res = .... S=1 si (A = 0 et B=1) OU (A=1 et B=1)
else:
res = .... Ecrire la fonction porte(a,b) pour cette table de
Compléter et tester
return vérité :
res les programmes ci-dessous :

def porte(a,b):
def ET(a,b): if ( ...... and ......) or (...... and ...........):
if a== ... and b== … : res = 1
res = …. else:
else: res = 0
res = …. return res
return res # programme principal
print (porte(0,0))

print (NON(1)) Compléter le programme principal pour afficher


print (OU(1,0)) automatiquement toute la table de vérité comme
print (ET(1,1)) ci-dessous (avec deux boucles « for » imbriquées)

print (NON(OU(1,0)))
S = OU(ET(0,1),NON(1)) - 15 -
print (S)
Algorithmique et Programmation
T NSI

# Proposition de solution pour l’exercice précédent Pour les boucles for, on aurait
def porte(a,b): pu écrire aussi :
if (a==0 and b==1) or (a==1 and b==1):
res = 1 for a in range (2) :
else: for b in range(2) :
res = 0 S =...
return res
« for a in (liste de valeur) »
print ("table de verite quelconque") fait prendre à a toutes les
print ("A B S") valeurs de la liste, et donc 0 et
for a in (0,1): 1 ici  »
for b in (0,1):
S= porte(a,b)
print (a,b,S)

En s’inspirant de ce que vous avez fait précédemment et à partir des tables de vérité des portes
logiques ci-dessous, donner les programmes en python pour réaliser les fonctions
correspondantes :

- 16 -
Algorithmique et Programmation
T NSI

Faire valider votre travail par le professeur

Exercice 7

On se propose ici de réaliser des petites figures géométriques en utilisant des caractères.
Les programmes pour les premières figures sont donnés, testez les et inspirez-vous en pour les
figures suivantes.

Figure 1 :
for i in range(5):
print ("x", end=" ")

Figure 2 :
ligne =5
colonne = 10
for i in range(ligne):
for j in range (colonne):
print ("x", end=" ")
print ()

Ce print () permet le passage à la ligne en fin de boucle j

Figure 3 : ligne =5


colonne = 10
for i in range(ligne):
for j in range (i):
print ("x", end=" ")
print ()
- 17 -
Algorithmique et Programmation
T NSI

Regardez le paramètre du range de « for j in range (i) », la valeur de i augmente à


chaque ligne et donc on va avoir une augmentation du nombre de x à chaque nouvelle
ligne

Figure 4 :
Figure 4 : Ici, cela commence comme le précédent programme.
Aide:Vous devez ensuite faire le symétrique, il faudra donc
refaire une autre boucle avec range(ligne,0,-1):

Figure 5 : Figure 6 : Faire


valider vos
programmes

Proposition de correction figure 5 :


Il n’est pas simple lorsqu’on débute en
ligne =5 programmation d’arriver à trouver des
for i in range(ligne): solutions mais tout est question
for j in range (ligne-i): d’entraînement. Vous pouvez y aller par
print (" ", end=" ") tâtonnement, n’hésitez pas à tester divers
for j in range (2*i+1): morceaux de code, et essayez à chaque fois
print ("x", end=" ") de comprendre ce qui se passe pour
print () progresser.

Exercices 8 : Les tableaux

Créer un tableau en utilisant des listes.

# Tableau avec des listes Taper et exécuter le programme ci-contre. A


quelles valeurs du tableau correspondent les
t= [ [0 ,1 ,2 ,3 ,4 ] , coordonnées :
[5 ,6 ,7 ,8 ,9 ] , t[0][0] :……….. ?
[10,11,12,13,14] , t[2][0] : ………. ?
[15,16,17,18,19] ] t[1][3] : ………. ?

print (t[0][0]) Le tableau


- 18est
- juste une liste de listes.
print (t[2][0])
print (t[1][3])
Algorithmique et Programmation
T NSI

Syntaxe :

print (t[ligne][colonne] )
avec ligne correspondant au numéro de la
ligne et colonne le numéro de la colonne,
en partant de zéro.
t est ici le nom du tableau, on peut bien
sur donner un autre nom (comme t1,
toto , MonTableau …)

# Tableau avec des listes

t= [[0 ,1 ,2 ,3 ,4 ] ,
[5 ,6 ,7 ,8 ,9 ] ,
[10,11,12,13,14] ,
[15,16,17,18,19] ]

for ligne in range(4): Tester le programme et vérifier que


for colonne in range(5): vous obtenez bien la sortie ci-
valeur = t[ligne][colonne] dessus.
print (valeur, end=" ")
print ()

t= [[0 ,1 ,2 ,3 ,4 ] , On souhaite obtenir l’affichage


[5 ,6 ,7 ,8 ,9 ] , suivant :
[10,11,12,13,14] ,
[15,16,17,18,19] ]

for ligne in range(4):


for colonne in range(5): Expliquer ce que fait le programme
valeur = t[ligne][colonne] ci-contre .
if valeur < 10: Que se passe t-il si on écrit :
print (valeur, end=" ") end=".." (au lieu des espaces) ?
else:
print (valeur, end=" ")
print () A quoi sert ce print () ? (supprimer le
pour voir la conséquence )
- 19 -
Algorithmique et Programmation
T NSI

t2= [["a" ,"b" ,"c" ,"d" ,"e" ] ,


["f" ,"g" ,"h" ,"i" ,"j" ] , On peut aussi mettre des chaînes de
["k" ,"l" ,"m" ,"n" ,"o" ] , caractères , il faut dans ce cas mettre des
["p" ,"q" ,"r" ,"s" ,"t" ] ] guillemets
print (t2[0][0])
print (t2[2][0])
print (t2[1][3])

On souhaite remplir un tableau appelé « matrice » avec des


nombres aléatoires compris entre 0 et 99 , compléter le programme
ci-après et vérifier son bon fonctionnement.

import random # importer la bibliothèque

matrice =[[0 ,0 ,0 ,0 ,0 ] ,
[0 ,0 ,0 ,0 ,0 ] ,
[0 ,0 ,0 ,0 ,0 ] ,
[0 ,0 ,0 ,0 ,0 ] ]

for y in range(4):
for x in range(5):
valeur = random.randint(0,100) Ligne à compléter (bien lire le
…..[…..][…..] = …… code pour connaître quels noms
# Définition des if fonctions
valeur < 10: utiliser)
print (valeur, end=" ")
def compte(n, tableau,
else: nb_ligne, nb_colonne):
compteur = 0 print (valeur, end=" ")
forprint
........
() in range(nb_ligne):
for .......... in range(nb_colonne):
if tableau[……][…….]== ……:
compteur = compteur +1
return ………
Exercice 9 : les tableaux suite.

# programme principal
On veut réaliser une fonction qui compte
le nombre d’occurrences de n dans un
t=[[1,3,8,0,0,5],
tableau.
[2,2,1,1,3,9],
n : nombre entier
[3,3,7,8,0,0],
tableau : liste de liste
[0,0,0,8,0,0],
nb_ligne : nombre de ligne du tableau
[0,0,0,0,0,0]]
nb_colonne : nombre de colonne
nb_ligne = 5
- 20 - 1- Compléter le programme ci-contre.
nb_colonne = 6
print ("Nombre de 0 : ", compte(0,t,nb_ligne,nb_colonne))
Algorithmique et Programmation
T NSI

Compléter votre
programme avec la ligne
ci-contre pour compter le
for i in range (…): nombre d’occurrences de
print ("Nombre de ", …. , " : ", compte( …. ,t ,nb_ligne,nb_colonne)) tous les chiffres de 0 à 9

Manipulation des chaînes de caractères.

On veut accéder à chacune des lettres d’un texte.


Deux méthodes : l’une est typique python, l’autre est plus générale avec d’autres langages.

Méthode générale :

# Méthode 1 (propre à python) # Méthode 2 (plus générale)


texte = "Bonjour Bertrand, comment vas tu ?" texte = "Bonjour Bertrand, comment vas tu ?"
for lettre in texte: longueur = len(texte)
print (lettre, end=" ") for i in range (longueur):
print (texte[i], end=" ")

B o n j o u r
0 1 2 3 4 5 6
texte[0] correspond à B
texte[1] correspond à o
texte[2] correspond à n
texte[3] correspond à j
texte[4] correspond à o
texte[5] correspond à u
texte[6] correspond à r

Chaque lettre du texte sera récupérée dans la variable « lettre »


Il faut voir la méthode « for carte in jeu » comme si on distribuait les cartes d’un jeu , ici le
jeu c’est le texte et les cartes chacune des lettres du texte.

Opération de « concaténation »

- 21 -
Algorithmique et Programmation
T NSI

# Concatenation de chaines de caracteres

texte1 = "Bonjour "


texte2 = "les amis " La concaténation simple de chaine de
texte3 = texte1+texte2 caractères est un standard dans la plus part des
print (texte3) langages.
texte4 = 2*texte3 Par contre l’opération de multiplication est
print (texte4) spécifique à python

Exercice 10

def affiche( .... , n): Compléter la fonction affiche pour afficher n


for ..... in range( ...... ): fois une chaîne de caractères sans utiliser
print (........, end = " ") l’opération de multiplication 

affiche("Bonjour", 3)

Exercice 11 : crypter un texte

La concaténation associée au codage ascii permet de coder un texte.

# codage
texte = "Bonjour Bertrand, comment vas tu ?"
for lettre in texte:
#print (lettre, end=" ")
code = ord(lettre) # on récupère le code ASCII de la lettre
print (chr(code+1), end= " ") # on affiche le caractère suivant
# encoder

def encrypte(texte):
texte_crypte = ""
for ……. in ……. :
On notera que lescode
espaces, virgules et toute la ponctuation correspond à du code ascii.
= ord(lettre)
texte_crypte=texte_crypte + chr (…………)
Compléter les fonctions
return ci-dessous permettant d’encrypter et décrypter un
texte_crypte Letexte :
cryptage présenté ici
s’apparente au code
texte_crypte = encrypte("Bonjour Bertrand, comment vas tu ?") Cesar. Cependant il
faudrait que le « z » soit
print ("texte encrypte = ", texte_crypte) codé avec le « a »
(rotation sur l’alphabet)
# decoder
def decrypte(texte): Essayer de réfléchir à
texte_decrypte = "" une solution pour
for …… in ……. : obtenir un code qui reste
code = ord(lettre) sur l’alphabet et qui
texte_decrypte = texte_decrypte + chr(……….. ) fonctionne avec un
return texte_decrypte décalage n au choix.
- 22 -
print ("texte decrypte = ", decrypte(texte_crypte))
Algorithmique et Programmation
T NSI

Recherche d’une chaîne de caractères dans un texte

# recherche de chaine
Taper et exécuter le
² t1="Bonjour Bertrand, comment vas-tu ? " code

if "Bertrand" in t1:
print (" 'Bertand' est bien dans la chaine")
else:
print ("Chaine non trouvee")

def cherche(texte,chaine):
if ……………… :
............. Ecrire une fonction
else: cherche(texte,chaine) qui
............. prend en paramètre un texte et
return ............. une chaine de caractere et
renvoie True si la chaine est
# programme principal trouvée et False sinon
t1="Bonjour Bertrand, comment vas-tu ? "
print (cherche(t1,"comment"))
print (cherche(t1,"toto"))

Les tableaux : Utilisation pour les jeux

- 23 -
Algorithmique et Programmation
T NSI
De nombreux jeux peuvent être modélisés en utilisant des tableaux (morpion, dames, échecs,
solitaire, pacman, puissance 4, bataille navale, bomber-man, snake….) . Nous allons voir
différents algorithmes de base qui pourront être utile pour des mini projets.

Affichage du tableau et représentation interne.

Il faut distinguer ce que l’on va afficher et le contenu du tableau.


Supposons par exemple que l’on veuille afficher un labyrinthe avec un pacman, des fantômes,
des pastilles à dévorer.
On peut représenter cette aire de jeu par un tableau :

t1=[[1 ,1 ,1 ,1 ,1 ,1 ,1 ,1], On va voir comment


[1 ,0 ,2 ,0 ,0 ,0 ,0 ,1], faire cela.
[1 ,1 ,1 ,1 ,0 ,0 ,0 ,1], En interne, le
[1 ,0 ,0 ,0 ,0 ,0 ,0 ,1], programme travaille
[1 ,0 ,0 ,0 ,1 ,0 ,3 ,1], sur des nombres
[1 ,0 ,1 ,1 ,1 ,0 ,0 ,1], mais en sortie on
[1 ,0 ,0 ,3 ,0 ,0 ,0 ,1], affichera ce qu’on
[1 ,0 ,0 ,0 ,0 ,0 ,0 ,1], veut.
[1 ,1 ,1 ,1 ,1 ,1 ,1 ,1] ]

Au niveau de l’affichage : 2  @ , 3M


# Affichage du tableau
def affiche_tableau(t,nb_ligne,nb_colonne):
for y in range(nb_ligne):
for x in range(nb_colonne):
valeur = t[y][x]
if valeur == 0:
print (".", end =" ")
if valeur == 1:
print (t[y][x], end=" ")
if valeur == 2:
print ("@", end=" ")
if valeur == 3: Lors de l’affichage on va
print ("M", end=" ") remplacer les 0 par des
if valeur == 4: « . »
print (chr(2), end=" ")
if valeur == 5:
print (chr(3), end=" ") Modifier le tableau afin
d’obtenir l’affichage
print () précédent.
# definition du tableau Vous pouvez personnaliser
# t1 9 lignes et 8 colonnes l’affichage comme bon vous
semble en utilisant par
t2= [[1 ,1 ,1 ,1 ,1 ,1 ,1 ,1], exemple l’affichage de
[1 ,0 ,2 ,0 ,0 ,0 ,0 ,1], caractères ascii (chr (n))
[1 ,1 ,1 ,1 ,0 ,0 ,0 ,1], Sous windows 7 et antérieur
[1 ,0 ,0 ,1 ,0 ,0 ,0 ,1], on avait droit à toutes sortes
[1 ,0 ,0 ,1 ,0 ,1 ,3 ,1], de caractères sympas (petit
[1 ,0 ,0 ,0 ,0 ,1 ,0 ,1], cœur, pavé, …) , il semble
[1 ,0 ,1 ,1 ,1 ,1 ,5 ,1], que sous windows 10 ce ne
[1 ,0 ,0 ,0 ,3 ,0 ,4 ,1], soit plus le cas 
[1 ,1 ,1 ,1 ,1 ,1 ,1 ,1] ] - 24 -

affiche_tableau(t1,9,8)
Algorithmique et Programmation
T NSI

- 25 -

Vous aimerez peut-être aussi