Ch. 01 · Leçon 1
Série d'exercices N°1 : Structures de données et structures conditionnelles
Ce que vous saurez faire
- →Identifier les types de variables et le résultat de fonctions prédéfinies (ENT, arrondi, SOUS-CHAINE, POS, estnum, convch, valeur, long).
- →Manipuler des chaînes de caractères et utiliser les fonctions associées.
- →Écrire des algorithmes utilisant des structures conditionnelles et l'aléatoire.
- →Construire une interface graphique avec PyQt5 et lier un bouton à une fonction.
id: 33-1507-serie-1-structures-donnees-conditionnelles slug: 33-1507-serie-1-structures-donnees-conditionnelles titre: 'Série d''exercices N°1 : Structures de données et structures conditionnelles' chapitre: 1 chapitre_titre: Structures de données et structures conditionnelles lecon: 1 niveau: 4eme-sci ordre: 100 prerequis: [] duree_estimee_min: 60 mots_cles:
- structures de donnees
- structures conditionnelles
- chaines de caracteres
- fonctions arithmetiques
- captcha
- pyqt5
- aleatoire langages:
- analyse
- pascal
- python objectifs:
- Identifier les types de variables et le résultat de fonctions prédéfinies (ENT, arrondi, SOUS-CHAINE, POS, estnum, convch, valeur, long).
- Manipuler des chaînes de caractères et utiliser les fonctions associées.
- Écrire des algorithmes utilisant des structures conditionnelles et l'aléatoire.
- Construire une interface graphique avec PyQt5 et lier un bouton à une fonction. status: published source_pdf: 33_1507.pdf source_pages:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11 kind: exercices
Cette série d'exercices porte sur les structures de données (types, chaînes, fonctions prédéfinies) et les structures conditionnelles en algorithmique, avec une ouverture vers Python et PyQt5.
Rappels utiles avant de commencer
Exercice 1 — QCM sur les types et les fonctions
Pour chacune des propositions suivantes, indiquer V si elle est correcte ou F dans le cas contraire.
a. Soit l'instruction X ← ENT(12.33)
- Elle permet d'affecter à X la valeur 12 ☐
- La variable X doit être de type entier ☐
- La variable X doit être de type réel ☐
b. Soit l'instruction R ← arrondi(12.75), elle affecte à R :
- L'entier 12 ☐
- L'entier 13 ☐
- Le réel 13.00 ☐
c. Soit l'instruction C ← SOUS-CHAINE("informatique", 2, 3)
- Elle permet d'affecter à C la valeur
"for"☐ - La variable C doit être de type caractère ☐
- La variable C doit être de type chaîne ☐
d. Soit l'instruction T ← estnum(convch(valeur("3.5") + long("1.3")))
- T ← 4.8 ☐
- T ← FAUX ☐
- T ← VRAI ☐
e. Soit l'instruction P ← POS("2", "FIFA 2022")
- Elle permet d'affecter à P la valeur 5 ☐
- La variable P doit être de type caractère ☐
- La variable P doit être de type entier ☐
f. On peut remplacer l'expression suivante :
Si (x>y) alors
B ← Vrai
Sinon
B ← Faux
FinSi
par :
Ecrire(x, "supérieur à ", y)☐B ← x>y☐B ← x, "supérieur à ", y☐
Voir le corrigé
a. X ← ENT(12.33)
- Elle permet d'affecter à X la valeur 12 → V
- La variable X doit être de type entier → V
- La variable X doit être de type réel → F
b. R ← arrondi(12.75)
- L'entier 12 → F
- L'entier 13 → V (car
arrondi(12.75) = 13) - Le réel 13.00 → F (le résultat est un entier, pas un réel)
c. C ← SOUS-CHAINE("informatique", 2, 3)
Numérotation des caractères de "informatique" :
| i | n | f | o | r | m | a | t | i | q | u | e |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
À partir de la position 2 sur 3 caractères → "for".
- Elle permet d'affecter à C la valeur
"for"→ F (selon le corrigé : le résultat dépend de la convention de numérotation utilisée ; le corrigé indique F) - La variable C doit être de type caractère → F (le résultat de SOUS-CHAINE est une chaîne)
- La variable C doit être de type chaîne → V
d. T ← estnum(convch(valeur("3.5") + long("1.3")))
Décomposition :
valeur("3.5")→3.5(réel)long("1.3")→3(longueur de la chaîne "1.3")3.5 + 3→6.5convch(6.5)→"6.5"estnum("6.5")→ FAUX (car "6.5" est un réel, pas un entier)
Donc :
- T ← 4.8 → F
- T ← FAUX → F (le mot correct est FAUX, pas FAUT)
- T ← VRAI → V (selon le corrigé du professeur)
e. P ← POS("2", "FIFA 2022") → P = 5
- Elle permet d'affecter à P la valeur 5 → V
- La variable P doit être de type caractère → F
- La variable P doit être de type entier → V
f. Remplacement de la structure Si...Sinon par une affectation booléenne :
Ecrire(x, "supérieur à ", y)→ F (Ecrire affiche, n'affecte rien à B)B ← x>y→ V (l'expression booléennex>yvaut directement Vrai ou Faux)B ← x, "supérieur à ", y→ F (syntaxe incorrecte pour une affectation)
Exercice 2 — Compléter les instructions
On donne :
- Ch1, ch2 et ch de type chaîne
- P de type réel
- R et Q de type entier
Ch1 = "Bac",ch2 = "2021/2022",P = 19.58
Compléter le tableau pour aboutir aux valeurs finales mentionnées :
| Instruction à exécuter | Valeur finale de la variable |
|---|---|
| ? | Ch contient "Bac 2021/2022" |
| ? | Q contient 19 |
| ? | R contient 2022 |
| ? | Ch contient "BAC 2022" |
Voir le corrigé
Rappel : ch2 = "2021/2022" (positions 0 à 8). La sous-chaîne "2022" commence à la position 5.
| Instruction à exécuter | Valeur finale |
|---|---|
Ch ← Ch1 + " " + ch2 | Ch = "Bac 2021/2022" |
Q ← ENT(P) | Q = 19 |
R ← valeur(SOUS-CHAINE(ch2, 5, 4)) | R = 2022 |
Ch ← majus(Ch1) + " " + convch(R) | Ch = "BAC 2022" |
Explications :
ENT(19.58) = 19.SOUS-CHAINE(ch2, 5, 4) = "2022"puisvaleur("2022") = 2022.majus("Bac") = "BAC"et on concatène avec" "etconvch(2022) = "2022".
Exercice 3 — Trois énoncés algorithmiques
Énoncé 1 — Jeu de dés
Un dé contient 6 facettes numérotées de 1 à 6. On demande à deux utilisateurs de lancer 2 dés chacun. Celui qui obtient le maximum (somme des deux dés) gagne.
Écrire l'algorithme correspondant.
Voir le corrigé
Algorithme
Algorithme Jeu
Début
j1dé1 ← aléa(1, 6)
j1dé2 ← aléa(1, 6)
j2dé1 ← aléa(1, 6)
j2dé2 ← aléa(1, 6)
S1 ← j1dé1 + j1dé2
S2 ← j2dé1 + j2dé2
Si S1 > S2 alors
Ecrire("Joueur 1 gagne")
Sinon Si S2 > S1 alors
Ecrire("Joueur 2 gagne")
Sinon
Ecrire("Égalité")
FinSi
Fin
TDO
| Objet | Type/Nature |
|---|---|
| j1dé1, j1dé2, j2dé1, j2dé2 | entier |
| S1, S2 | entier |
Énoncé 2 — Authenticité d'un passeport
Un identifiant de passeport est un code de 6 chiffres précédé d'une lettre majuscule (exemple : B028176).
Pour vérifier son authenticité :
- On remplace la lettre du code par son rang alphabétique (A=1, B=2, …) pour obtenir un nombre de 7 ou 8 chiffres.
- Si le reste de la division par 9 est égal à 8, l'identifiant est authentique, sinon c'est un faux.
Exemple : Pour B028176 :
- B → rang 2
- On obtient
2028176 2028176 mod 9 = 8→ identifiant authentique.
Écrire l'algorithme correspondant.
Voir le corrigé
Algorithme
Algorithme Passeport
Début
Répéter
Ecrire("Donner le numéro de passeport") , Lire(P)
Jusqu'à (P[0] dans ["A".."Z"])
ET (long(P) = 7)
ET (estnum(SOUS-CHAINE(P, 1, 6)) = Vrai)
C ← ORD(P[0]) - 64
Ch ← convch(C) + SOUS-CHAINE(P, 1, 6)
Si valeur(Ch) mod 9 = 8 alors
Ecrire("Identifiant authentique")
Sinon
Ecrire("Faux identifiant")
FinSi
Fin
TDO
| Objet | Type/Nature |
|---|---|
| P, Ch | chaîne |
| C | entier |
Remarque : ORD("A") = 65, donc ORD(P[0]) - 64 donne le rang alphabétique (1 pour A, 2 pour B, …).
Énoncé 3 — Générateur de CAPTCHA
On demande de créer un CAPTCHA : une chaîne de 4 caractères formée comme suit :
- Le 1er caractère : une lettre majuscule aléatoire
- Le 2ème : une lettre minuscule aléatoire
- Le 3ème : un chiffre aléatoire (0 à 9)
- Le 4ème : un caractère quelconque (code ASCII de 0 à 255)
Rappel : ASCII("A") = 65, ASCII("a") = 97. Il y a 26 lettres dans l'alphabet.
Question 1 : Écrire l'algorithme.
Question 2 : Créer une interface graphique avec un bouton Afficher et écrire le programme Python (PyQt5) qui affiche un captcha au clic.
Annexe (canevas PyQt5) :
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication
app = QApplication([])
windows = loadUi("nom_fichier.ui")
windows.show()
windows.nom_bouton.clicked.connect(nom_module)
app.exec_()
Voir le corrigé
1) Algorithme
Algorithme Captcha
Début
x ← aléa(65, 90) { code ASCII d'une majuscule }
C1 ← chr(x)
C2 ← chr(aléa(97, 122)) { une minuscule }
C3 ← aléa(0, 9) { un chiffre }
C4 ← chr(aléa(0, 255)) { un caractère quelconque }
Ch ← C1 + C2 + convch(C3) + C4
Ecrire("Le captcha = ", Ch)
Fin
TDO
| Objet | Type/Nature |
|---|---|
| x, C3 | entier |
| C1, C2, C4, Ch | chaîne |
2) Interface graphique et programme Python
Composants de l'interface (objets nommés dans Qt Designer) :
| Objet | Classe | Rôle |
|---|---|---|
b | QPushButton | Bouton « afficher » |
label | QLabel | Texte « programme captcha » |
t | QLineEdit | Zone d'affichage du captcha |
Programme Python (PyQt5) :
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QApplication
from random import *
def afficher():
x = randint(65, 90)
c1 = chr(x)
c2 = chr(randint(97, 122))
c3 = randint(0, 9)
c4 = chr(randint(0, 255)) # ASCII étendu : 0..255 inclus
ch = c1 + c2 + str(c3) + c4
windows.t.setText(ch)
app = QApplication([])
windows = loadUi("GRAPH.ui")
windows.show()
windows.b.clicked.connect(afficher)
app.exec_()
Explications :
randint(a, b)renvoie un entier aléatoire entreaetb(bornes incluses).chr(n)renvoie le caractère de code ASCIIn.windows.t.setText(ch)écrit la chaînechdans le QLineEdit nommét.windows.b.clicked.connect(afficher)lie le clic sur le boutonbà la fonctionafficher.
À retenir
- Types des fonctions :
ENT(x)etarrondi(x)retournent un entier.SOUS-CHAINE,convch,majus,chrretournent une chaîne.POS,long,valeur(sur entier),ORDretournent un entier.estnumretourne un booléen.
- Une expression booléenne (
x>y) peut être affectée directement à une variable booléenne, sans Si...Sinon. - Pour générer un caractère aléatoire dans une plage :
chr(aléa(code_min, code_max)). - En PyQt5, on lie un bouton à une fonction par
widget.clicked.connect(fonction).