Aller au contenu principal
BacInfo

Ch. 00 · Leçon 1

Série de Révision N°1 — Algorithme et Programmation

120 minanalyse · pascal · python

Ce que vous saurez faire

  • Réviser les opérateurs arithmétiques et logiques en Python et en analyse
  • Manipuler des chaînes de caractères (slicing, sous-chaine, longueur)
  • Écrire des algorithmes utilisant des structures itératives et conditionnelles
  • Manipuler les tableaux : recherche, maximum, permutation, tri par signe
  • Traduire un algorithme en code Python

id: 33-1595-serie-revision-algorithme-programmation-1 slug: 33-1595-serie-revision-algorithme-programmation-1 titre: Série de Révision N°1 — Algorithme et Programmation chapitre: 0 chapitre_titre: Révisions générales lecon: 1 niveau: 4eme-sci ordre: 1 prerequis:

  • variables-types
  • operateurs
  • chaines-caracteres
  • structures-controle
  • tableaux duree_estimee_min: 120 mots_cles:
  • revision
  • chaines
  • tableaux
  • boucles
  • conditions
  • pgcd
  • kaprekar
  • premier
  • cubique
  • ascii langages:
  • analyse
  • pascal
  • python objectifs:
  • Réviser les opérateurs arithmétiques et logiques en Python et en analyse
  • Manipuler des chaînes de caractères (slicing, sous-chaine, longueur)
  • Écrire des algorithmes utilisant des structures itératives et conditionnelles
  • 'Manipuler les tableaux : recherche, maximum, permutation, tri par signe'
  • Traduire un algorithme en code Python status: published source_pdf: 33_1595.pdf source_pages:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14 kind: exercices

Cette série regroupe 23 exercices de révision couvrant les notions fondamentales d'algorithmique et de programmation : opérateurs, types, chaînes de caractères, structures conditionnelles et itératives, ainsi que les tableaux.

Partie 1 — Opérateurs, types et chaînes de caractères

Exercice 1
Affichage des opérateurs en Python

Pour le code Python ci-dessous, écrire l'affichage adéquat pour les instructions print.

a = 18.5
b = 2
print(a // b)
print(a % b)
print(divmod(a, b))
print(float(b))
print(int(a))
print(a ** b)
print(pow(a, b))

Puis, en continuant :

print(round(a))
a += 1.5
b -= 3
print(a)
print(b)
print(abs(a))
print(abs(b))
c = -5.8
print(round(c))
Voir le corrigé
InstructionRésultat
print(a // b)9.0
print(a % b)0.5
print(divmod(a, b))(9.0, 0.5)
print(float(b))2.0
print(int(a))18
print(a ** b)342.25
print(pow(a, b))342.25
print(round(a))18
print(a) après a += 1.520.0
print(b) après b -= 3-1
print(abs(a))20.0
print(abs(b))1
print(round(c)) avec c = -5.8-6
Exercice 2
Évaluation d'expressions

On donne a = 5, b = 4, c = 2. Donner les valeurs de X, Y, Z ainsi que leurs types.

  • X ← b - (a mod b div c * 6) / 2 + c
  • Z ← (a ≤ a) ET (a = a) OU (a < a) ET (a ≠ a)
  • Y ← arrondi(11.45 + a mod c / c)
Voir le corrigé
  • X = 6.0 de type réel
  • Z = Vrai de type Booléen
  • Y = 12 de type entier
Exercice 3
Découpage de chaînes (slicing)

Soit la chaîne ch = 'Bac 2022'. Donner le résultat ainsi que la syntaxe algorithmique des instructions Python du tableau ci-dessous.

Instruction PythonRésultatSyntaxe Algorithmique
Ch1 = ch[5]??
Ch2 = ch[1:6]??
Ch3 = ch[:6]??
Ch4 = ch[1:]??
Ch5 = ch[1:6:2]??
Ch6 = ch[:-1]??
Ch7 = ch[::]??
Ch8 = ch[::-1]??

Break de Savoir

Indice (positif)   0   1   2   3   4   5   6   7
ch =              'B' 'a' 'c' ' ' '2' '0' '2' '2'
Indice (négatif)  -8  -7  -6  -5  -4  -3  -2  -1
  • print(ch[1:5]) et print(ch[-7:-3]) donnent le même affichage : "ac 2"
  • L'instruction ch[::-1] donne la chaîne inversée.
Voir le corrigé
InstructionRésultatSyntaxe Algorithmique
Ch1 = ch[5]'0'Ch1 ← ch[5] OU Ch1 ← sous-chaine(ch, 5, 6)
Ch2 = ch[1:6]'ac 20'Ch2 ← sous-chaine(ch, 1, 6)
Ch3 = ch[:6]'Bac 20'Ch3 ← sous-chaine(ch, 0, 6)
Ch4 = ch[1:]'ac 2022'Ch4 ← sous-chaine(ch, 1, long(ch))
Ch5 = ch[1:6:2]'a 0'voir algorithme ci-dessous
Ch6 = ch[:-1]'Bac 202'Ch6 ← sous-chaine(ch, 0, long(ch)-1)
Ch7 = ch[::]'Bac 2022'Ch7 ← ch
Ch8 = ch[::-1]'2202 caB'voir algorithme ci-dessous

Pour Ch5 :

Ch_aux ← sous-chaine(ch, 1, 6)
i ← 0
ch5 ← ""
Répéter
    ch5 ← ch5 + ch_aux[i]
    i ← i + 2
jusqu'à i > long(ch_aux)

Pour Ch8 :

i ← long(ch)
ch8 ← ""
Répéter
    i ← i - 1
    ch8 ← ch8 + ch[i]
jusqu'à i < 0
Exercice 4
Modifier 'ABIR' en 'AMIR'

Écrire un programme qui permet de modifier la chaîne 'ABIR' en 'AMIR'.

Voir le corrigé

TDO

ObjetType/Nature
chChaine
Algorithme Ex4
Debut
    ch ← "ABIR"
    ch[1] ← "M"
    Ecrire(ch)
Fin

Code Python (méthode 2 uniquement) :

ch = "ABIR"
ch = ch[:1] + "M" + ch[2:]
print(ch)
Exercice 5
Construire le proverbe 'partager pour régner'

À partir des trois chaînes :

  • Ch1 = "partiger"
  • Ch2 = "pourra"
  • Ch3 = "régner"

Construire le proverbe : « partager pour régner » en faisant les modifications nécessaires sur Ch1 et Ch2 par 2 méthodes différentes.

Voir le corrigé
Algorithme Ex5
Debut
    ch1 ← "partiger"
    ch2 ← "pourra"
    ch3 ← "régner"
    ch1[4] ← "a"
    ch2 ← efface(ch2, 4, 6)
    ch ← ch1 + " " + ch2 + " " + ch3
    Ecrire(ch)
Fin

Code Python :

ch1 = "partiger"
ch2 = "pourra"
ch3 = "régner"
ch1 = ch1[:4] + "a" + ch1[5:]
ch2 = ch2[:4]
ch = ch1 + " " + ch2 + " " + ch3
print(ch)
Exercice 6
Manipulation d'une date

Effectuer l'algorithme et le code Python d'un programme qui permet de :

  1. Transformer la chaîne "10/09/1921" en "10/09/2021".
  2. Déterminer la longueur de la chaîne.
  3. Extraire l'année seulement dans une nouvelle chaîne.
  4. Convertir la chaîne année en un nombre entier.
Voir le corrigé

TDO

ObjetType/Nature
ch, anneeChaines
L, anEntiers
Algorithme Ex6
Debut
    ch ← "10/09/1921"
    ch ← sous-chaine(ch, 0, 6) + "20" + sous-chaine(ch, 8, 10)
    L ← long(ch)
    annee ← sous-chaine(ch, 6, 10)
    an ← valeur(annee)
Fin
Exercice 7
Cryptage d'un mot

Écrire un programme qui effectue le cryptage d'un mot donné en utilisant le principe suivant :

  • Permuter le premier caractère du mot avec le dernier.
  • Modifier l'élément milieu du mot par son ordre dans le code ASCII.

NB : On suppose que le mot est une chaîne de caractères dont la taille est supérieure à trois.

Exemple : si ch = "info", le programme affichera après le cryptage la chaîne "o110fi".

Voir le corrigé

TDO

ObjetType/Nature
ch, codeChaines
LEntier
Algorithme Ex7
Debut
    Repeter
        ecrire("ch="), lire(ch)
        L ← long(ch)
    jusqu'à (L > 3)
    ch ← ch[L-1] + sous-chaine(ch, 1, L-1) + ch[1]
    code ← convch(ord(ch[(L-1) div 2]))
    ch ← sous-chaine(ch, 0, (L-1) div 2) + code + sous-chaine(ch, (L-1) div 2 + 1, L)
    Ecrire(ch)
Fin
Exercice 8
Traitements sur des chaînes

Soit le tableau de déclaration des objets (TDO) suivant :

OT/N
mot1, mot2, mot3, mot4chaînes de caractères
n, mentiers

Sachant que l'algorithme commence par les instructions :

mot1 ← 'informatique'
mot2 ← '3D'

Donner les instructions algorithmiques puis Python permettant de réaliser les traitements suivants :

  • a- À partir de la variable mot1, mettre dans la variable mot3 le terme "format".
  • b- À partir de mot3 et mot2, mettre dans la variable mot4 le terme "format 3D".
  • c- Mettre dans n la longueur de la chaîne mot4.
  • d- À partir de la variable mot2, mettre dans m la valeur 3.
Voir le corrigé
mot1 ← "informatique"
mot2 ← "3D"
a) mot3 ← sous-chaine(mot1, 2, 8)
b) mot4 ← mot3 + " " + mot2
c) n ← long(mot4)
d) m ← valeur(sous-chaine(mot2, 0, 1))

Partie 2 — Entiers, conditions et boucles

Exercice 9
Construction d'un entier à 4 chiffres

Écrire un algorithme qui permet de déterminer et d'afficher un entier Z de quatre chiffres à partir de deux entiers X et Y strictement positifs et formés chacun de deux chiffres.

Les chiffres de l'entier Z sont disposés de telle sorte que les deux chiffres du milieu correspondent à l'entier Y cadrés par ceux de l'entier X.

Exemple : Si X=56 et Y=21 alors l'entier Z sera égal à 5216.

Voir le corrigé

TDO

ObjetType/Nature
x, y, z, u, mEntiers
Algorithme Ex9
Debut
    Repeter
        ecrire("x="), lire(x)
    jusqu'à (10 ≤ x ≤ 99)
    Repeter
        ecrire("y="), lire(y)
    jusqu'à (10 ≤ y ≤ 99)
    m ← x div 10
    u ← x mod 10
    z ← m*1000 + y*10 + u
    ecrire(z)
Fin
Exercice 10
Successeur et prédécesseur d'un entier

Écrire l'algorithme qui permet de déterminer et d'afficher le successeur et le prédécesseur d'un entier m donné.

Voir le corrigé

TDO

OT/N
mEntier
Algorithme Ex10
Debut
    ecrire("m="), lire(m)
    ecrire("Le prédécesseur de ", m, " est : ", m-1)
    ecrire("Le successeur de ", m, " est : ", m+1)
Fin
Exercice 11
Successeur et prédécesseur d'un caractère

Écrire un algorithme qui permet de déterminer et d'afficher le successeur et le prédécesseur d'un caractère c donné.

Voir le corrigé

TDO

OT/N
c, p, scaractères
Algorithme Ex11
Debut
    ecrire("c="), lire(c)
    p ← chr(ord(c) - 1)
    s ← chr(ord(c) + 1)
    ecrire("Le prédécesseur de ", c, " est : ", p)
    ecrire("Le successeur de ", c, " est : ", s)
Fin
Exercice 12
Nombre cubique

Un entier naturel de 3 chiffres est dit cubique s'il est égal à la somme des cubes de ses trois chiffres.

Exemple : 153 est cubique car 153 = 1³ + 5³ + 3³

Établir l'algorithme d'un programme qui permet de vérifier si un nombre est cubique ou non.

Voir le corrigé

TDO

OT/N
n, c, d, uEntiers
Algorithme Ex12
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (100 ≤ n ≤ 999)
    c ← n div 100
    d ← (n mod 100) div 10
    u ← n mod 10
    si (n = c*c*c + d*d*d + u*u*u) alors
        ecrire(n, " est cubique")
    sinon
        ecrire(n, " n'est pas cubique")
    finsi
Fin
Exercice 13
Nombre de Kaprekar

Écrire l'algorithme d'un programme qui permet d'afficher si un entier est Kaprekar ou non. Pour vérifier si un entier positif K de n chiffres est un nombre de KAPREKAR ou non, on peut suivre la méthode suivante :

  1. Élever K au carré.
  2. Additionner l'entier formé par les n chiffres de droite du carré de K avec l'entier formé par le reste des chiffres du carré de K.
  3. Si la somme trouvée à l'étape 2 est égale à K alors le nombre est dit Kaprekar.

Exemples :

  • Si K=9 alors n=1 et K²=81. On constate que 1+8 = 9 donc 9 est kaprekar.
  • Si K=45 alors n=2 et K²=2025. On constate que 25+20 = 45 donc 45 est kaprekar.
  • Si K=297 alors n=3 et K²=88209. On constate que 209+88 = 297 donc 297 est kaprekar.
Voir le corrigé

TDO

OT/N
k, n, k2, n2, p1, p2, sEntiers
chk, chk2chaines
Algorithme Ex13
Debut
    Repeter
        ecrire("k="), lire(k)
    jusqu'à (k > 0)
    chk ← convch(k)
    n ← long(chk)
    k2 ← k*k
    chk2 ← convch(k2)
    n2 ← long(chk2)
    p1 ← valeur(sous-chaine(chk2, n2-n, n2))
    p2 ← valeur(sous-chaine(chk2, 0, n2-n))
    s ← p1 + p2
    si s = k alors
        ecrire(k, " est kaprekar")
    sinon
        ecrire(k, " n'est pas kaprekar")
    finsi
Fin
Exercice 14
Nombre premier

Écrire un algorithme permettant de saisir un nombre N et d'afficher s'il est premier ou non.

NB : Un nombre premier est un entier positif qui n'a pas d'autres diviseurs positifs que lui-même et 1.

Exemples :

  • 11 est un nombre premier car il n'a pas de diviseurs positifs autres que 1 et 11.
  • 6 n'est pas un nombre premier car les diviseurs de 6 sont 1, 2, 3, 6 (il admet des diviseurs autres que 1 et 6).
Voir le corrigé

TDO

OT/N
n, iEntiers
Algorithme Ex14
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n > 0)
    i ← 2
    tantque (n mod i ≠ 0) et (i < n) faire
        i ← i + 1
    fintantque
    si (i ≥ n) alors
        ecrire(n, " est premier")
    sinon
        ecrire(n, " n'est pas premier")
    finsi
Fin
Exercice 15
Nombres premiers entre 1 et 100

Écrire l'algorithme permettant d'afficher tous les nombres premiers situés entre 1 et 100.

Voir le corrigé

TDO

OT/N
n, iEntiers
Algorithme Ex15
Debut
    Pour n de 1 à 100 faire
        i ← 2
        tantque (n mod i ≠ 0) et (i < n) faire
            i ← i + 1
        fintantque
        si (i ≥ n) alors
            ecrire(n)
        finsi
    finpour
Fin
Exercice 16
Somme de 1/i²

On veut calculer la somme suivante : $S = \sum_{i=1}^{n} \dfrac{1}{i^2}$

Voir le corrigé

TDO

OT/N
n, i, sEntiers (s : réel)
Algorithme Ex16
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n > 0)
    s ← 0
    Pour i de 1 à n faire
        s ← s + 1/(i*i)
    finpour
    ecrire(s)
Fin
Exercice 17
Trois sommes harmoniques

Écrire un programme qui permet de saisir un entier positif impair N et de calculer :

  • S1 = 1 + 1/2 + 1/3 + 1/4 + ... + 1/N
  • S2 = 1 - 1/2 + 1/3 - 1/4 + ... 1/N
  • S3 = 1 + 1/3 + 1/5 + 1/7 + ... + 1/N
Voir le corrigé

TDO

OT/N
n, iEntiers
sRéel
Algorithme Ex17
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n > 0)
    s ← 0
    Pour i de 1 à n faire
        s ← s + 1/i
    finpour
    ecrire("S1 = ", s)
    s ← 0
    Pour i de 1 à n faire
        si (i mod 2 ≠ 0) alors
            s ← s + 1/i
        sinon
            s ← s - 1/i
        finsi
    finpour
    ecrire("S2 = ", s)
    s ← 0
    Pour i de 1 à n faire
        si (i mod 2 ≠ 0) alors
            s ← s + 1/i
        finsi
    finpour
    ecrire("S3 = ", s)
Fin
Exercice 18
PGCD par méthode de différence

Écrire un programme qui permet de chercher le PGCD de deux entiers m et n en utilisant la méthode de différence.

Exemple :

PGCD(10,16) = PGCD(10,6)
            = PGCD(4,6)
            = PGCD(4,2)
            = PGCD(2,2)   →   PGCD(10,16) = 2
Voir le corrigé

TDO

OT/N
n, mEntiers
Algorithme Ex18
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n > 0)
    Repeter
        ecrire("m="), lire(m)
    jusqu'à (m > 0)
    tantque (m ≠ n) faire
        si (m > n) alors
            m ← m - n
        finsi
        si (m < n) alors
            n ← n - m
        finsi
    fintantque
    ecrire("Le PGCD est : ", m)
Fin

Partie 3 — Tableaux

Exercice 19
Maximum d'un tableau de réels

Écrire un programme qui permet de déterminer le maximum d'un tableau de réels de dimension n (3 ≤ n ≤ 10).

Voir le corrigé

TDNT

Type
Tab = tableau de 10 réels

TDO

OT/N
n, iEntiers
maxRéel
TTab
Algorithme Ex19
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n ∈ [3..10])
    pour i de 0 à n-1 faire
        Lire(T[i])
    finpour
    max ← T[0]
    pour i de 1 à n-1 faire
        si (max < T[i]) alors
            max ← T[i]
        finsi
    finpour
    ecrire("Maximum de T est : ", max)
Fin
Exercice 20
Permutation du max et du min

Écrire un programme qui permet de faire une permutation entre le maximum et le minimum d'un tableau de réels T de dimension n (3 ≤ n ≤ 10).

Voir le corrigé

TDNT

Type
Tab = tableau de 10 réels

TDO

OT/N
n, i, max, min, auxEntiers
TTab
Algorithme Ex20
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n ∈ [3..10])
    pour i de 0 à n-1 faire
        Lire(T[i])
    finpour
    max ← 0
    min ← 0
    pour i de 1 à n-1 faire
        si (T[max] < T[i]) alors
            max ← i
        finsi
        si (T[min] > T[i]) alors
            min ← i
        finsi
    finpour
    aux ← T[max]
    T[max] ← T[min]
    T[min] ← aux
    pour i de 0 à n-1 faire
        ecrire(T[i])
    finpour
Fin
Exercice 21
Recherche d'une valeur dans un tableau

Écrire un programme qui cherche si une valeur v existe dans un tableau B. B est composé de n réels avec (3 ≤ n ≤ 10). v est une valeur réelle donnée. Le programme affichera un message de la forme : "v existe dans B" ou "v n'existe pas dans B".

Voir le corrigé

TDNT

Type
Tab = tableau de 10 réels

TDO

OT/N
n, i, vEntiers (v : réel)
BTab
Algorithme Ex21
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n ∈ [3..10])
    pour i de 0 à n-1 faire
        Lire(B[i])
    finpour
    ecrire("Valeur à chercher : ")
    lire(v)
    i ← 0
    tantque (B[i] ≠ v) et (i < n-1) faire
        i ← i + 1
    fintantque
    si (B[i] = v) alors
        ecrire(v, " existe dans B")
    sinon
        ecrire(v, " n'existe pas dans B")
    finsi
Fin
Exercice 22
Construction d'un mot à partir d'ordres alphabétiques

Écrire un programme qui saisit un tableau T de n entiers (3 ≤ n ≤ 10) compris entre 1 et 26 qui représentent les ordres alphabétiques. Le programme affichera le mot composé des lettres qui correspondent à ces ordres en majuscules.

Exemple : Pour n = 4 et T = [2, 9, 5, 14], le programme affiche : "Le mot associé est : BIEN".

Voir le corrigé

TDNT

Type
Tab = tableau de 10 entiers

TDO

OT/N
n, iEntiers
TTab
Algorithme Ex22
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n ∈ [3..10])
    pour i de 0 à n-1 faire
        repeter
            Lire(T[i])
        Jusqu'à (T[i] ∈ [1..26])
    finpour
    pour i de 1 à n faire
        ecrire(chr(T[i] + 64))
    finpour
Fin
Exercice 23
Séparer positifs et négatifs

Écrire un programme qui permet de saisir N entiers non nuls d'un tableau T avec (3 ≤ n ≤ 10), de ranger les éléments négatifs dans un tableau TNEG et les éléments positifs dans un tableau TPOS et de les afficher.

Voir le corrigé

TDNT

Type
Tab = tableau de 10 entiers

TDO

OT/N
n, i, j, kEntiers
T, TPOS, TNEGTab
Algorithme Ex23
Debut
    Repeter
        ecrire("n="), lire(n)
    jusqu'à (n ∈ [3..10])
    pour i de 0 à n-1 faire
        ecrire("T[", i, "]=")
        Lire(T[i])
    finpour
    j ← 0
    k ← 0
    pour i de 1 à n faire
        si (T[i] ≥ 0) alors
            TPOS[j] ← T[i]
            j ← j + 1
        sinon
            TNEG[k] ← T[i]
            k ← k + 1
        finsi
    finpour
    ecrire("**TPOS**")
    pour i de 1 à j faire
        ecrire(TPOS[i])
    finpour
    ecrire("**TNEG**")
    pour i de 1 à k faire
        ecrire(TNEG[i])
    finpour
Fin

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