Aller au contenu principal
BacInfo

Ch. 01 · Leçon 1

Série d'exercices N°1 : Structures de données et structures conditionnelles

60 minanalyse · pascal · python

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

Exercice 1
Valider chaque proposition par V (Vrai) ou F (Faux)

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" :

informatique
01234567891011

À 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 + 36.5
  • convch(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>yV (l'expression booléenne x>y vaut directement Vrai ou Faux)
  • B ← x, "supérieur à ", yF (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
Exercice 2
Compléter la colonne « instruction à exécuter »

Compléter le tableau pour aboutir aux valeurs finales mentionnées :

Instruction à exécuterValeur 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écuterValeur finale
Ch ← Ch1 + " " + ch2Ch = "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" puis valeur("2022") = 2022.
  • majus("Bac") = "BAC" et on concatène avec " " et convch(2022) = "2022".

Exercice 3 — Trois énoncés algorithmiques

Énoncé 1 — Jeu de dés

Exercice 3.1
Jeu de dé

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

ObjetType/Nature
j1dé1, j1dé2, j2dé1, j2dé2entier
S1, S2entier

Énoncé 2 — Authenticité d'un passeport

Exercice 3.2
Vérification d'un identifiant de 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é :

  1. On remplace la lettre du code par son rang alphabétique (A=1, B=2, …) pour obtenir un nombre de 7 ou 8 chiffres.
  2. 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

ObjetType/Nature
P, Chchaîne
Centier

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

Exercice 3.3
Génération d'un CAPTCHA

On demande de créer un CAPTCHA : une chaîne de 4 caractères formée comme suit :

  1. Le 1er caractère : une lettre majuscule aléatoire
  2. Le 2ème : une lettre minuscule aléatoire
  3. Le 3ème : un chiffre aléatoire (0 à 9)
  4. 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

ObjetType/Nature
x, C3entier
C1, C2, C4, Chchaîne

2) Interface graphique et programme Python

Composants de l'interface (objets nommés dans Qt Designer) :

ObjetClasseRôle
bQPushButtonBouton « afficher »
labelQLabelTexte « programme captcha »
tQLineEditZone 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 entre a et b (bornes incluses).
  • chr(n) renvoie le caractère de code ASCII n.
  • windows.t.setText(ch) écrit la chaîne ch dans le QLineEdit nommé t.
  • windows.b.clicked.connect(afficher) lie le clic sur le bouton b à la fonction afficher.

À retenir

  • Types des fonctions :
    • ENT(x) et arrondi(x) retournent un entier.
    • SOUS-CHAINE, convch, majus, chr retournent une chaîne.
    • POS, long, valeur (sur entier), ORD retournent un entier.
    • estnum retourne 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).

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.