Correction Exercice Bac Info

Exercice1 : (vérifier si un nombre est ZigZag)

Un nombre zigzag est un nombre dont les chiffres alternent entre une augmentation et une diminution, ou vice versa. Par exemple :

  • Le nombre 132 est un zigzag car il suit un schéma de “augmentation (1 -> 3)” suivi d’une “diminution (3 -> 2)”.
  • Le nombre 214 est aussi un zigzag car il suit un schéma de “diminution (2 -> 1)” suivi d’une “augmentation (1 -> 4)”.

On peut Utiliser une fonction qui renvoie une repense de type booléen :

Fonction Zigzag(N : Entier):Booléen
Début
#Convertir le nombre en chaine de caractère
ch <-- Convch(N)
Test <-- Vrai                     # utiliser une variable booléenne 
i <--1                            # le compter commence par le premier chiffre
Tantque ( i =< Long(ch)-1 ET Test = Vrai) Faire
        
      Si (ch[i] > ch[i-1] et ch[i] > ch[i+1]) ou (ch[i] < ch[i-1] et ch[i] < ch[i+1]) Alors
        i <-- i + 1 
        Test <-- Vrai
     Sinon
        Test <-- Faux
    FinSi
FinTantque
Retourner Test
Fin

On peut Utiliser une condition qui vérifie que la longueur du nombre doit être supérieure à 3 avec un boucle Pour ….. faire

Fonction ZigZag(N : Entier) : Booléen
    ch <-- Convch(N)
    test <-- Vrai
    si long (ch) < 3 alors
        Ecrire("Le nombre doit contenir au moins 3 chiffres")
    fin si

    pour i de 1 à long (ch) - 2 faire
        si (ch[i] > ch[i-1] et ch[i] > ch[i+1]) ou 
           (ch[i] < ch[i-1] et ch[i] < ch[i+1]) alors
            test <-- Vrai
        sinon
            test <-- Faux 
        fin si
    fin pour 
    retourner (test)
Fin ZigZag
def ZigZag(N):
    ch = str(N)  
    test = True
    i = 1  
    while i < len(ch) - 1 and test:

        if (ch[i] > ch[i-1] and ch[i] > ch[i+1]) or (ch[i] < ch[i-1] and ch[i] < ch[i+1]):
            i += 1
            test = True
        else:
            test = False 

    return test
# Tests
print(ZigZag(214))  # Vrai (True)
print(ZigZag(123))  # Faux (False)
    
def ZigZag(N):
    ch = str(N)
    test = True
    if len(ch) < 3:
        prin("Le nombre doit etre à trois chiffres")
    for i in range(1, len(ch)- 1):
        if (ch[i] > ch[i-1] and ch[i] > ch[i+1]) or (ch[i] < ch[i-1] and ch[i] < ch[i+1]):
           test = True 
        else:
            test = False 
    return test 
# Programme Test
print(ZigZag(214))  # Vrai (True)
print(ZigZag(123))  # Faux (False)

Exercice un Nombre Palindrome

Un nombre est dite Palindrome si il se lit de la même manière de gauche à droite que de droite à gauche

Ecrire un fonction qui permet de vérifier si un nombre donnée est palindrome ou non , le résultat du la fonction sera de type booléen

Fonction VerifPalind(N: Entier ) : Booléen
Début
M <-- Convch(N)
Test <-- Vrai
i <--0
Tantque ( i< long(M)-1 DIV 2 ET Test <-- Vrai) Faire
       Si (M[i] = M[long(M) - i -1] Alors
        i <-- i + 1
       Sinon
       Test <-- Faux
      FinSi
Fin Tantque
Retourner (Test)
Fin Fonction 
def VerifPalind(N):
    M = str(N)
    test = True
    i=0
    while  i < len(M) // 2 and test:
        if (M[i] == M[len(M)-i-1]):
            i=i+1
        else:
            test = False
    return test
            

print(VerifPalind(8549458))

Ecrire une Fonction qui retourne l’inverse d’un Entier donnée

Fonction Inverse(N : Entier) :Entier
Début
M <-- Convch(N)
ch <-- " "
pour i de 0 à long(M)-1 Faire
    ch <-- M[i] + ch
finpour
retourner (ch)
Fin Fonction
def Inverse(n):
    M=str(n)
    ch=""
    for i in range(0,len(M)):
        ch = M[i] + ch
    return int(ch)


print(Inverse(2563)) # affiche 3652

Pour trouver si un nombre devient un palindrome après k itérations en utilisant la somme de ce nombre et de son inverse, le processus suit une approche répétitive.

Exemple : 87 => 87 + 78 = 165 Non palindrome et k=1

165 + 561 = 726 Non palindrome et k = 2

726 + 627 = 1353 Non palindrome et k =3

1353 + 3531 = 4884 Est Palindrome et k = 4

Procédure KiemePalindrome(N : Entier , k :Entier)
Début
i <-- 0
Tantque ( i # k  ET  NonVerifPalind(N)) Faire
        N <-- N + Inverse(N)
        i <-- i + 1 
FinTanque
Si VerifPalind(N) <-- Vrai  Alors
  Ecrire ("le Nombre",N,"Est Palindrome aprés", i ,"Itération")
Sinon
Ecrire("Aprés ", k "Iteration le Nombre",N,"est Non Palindrome")
FinSi
Fin Procédure

Si On veut ajouter une personnalisation lors de l’affichage :

Exemple : 87 , 165 , 726 , 1353 Est une suite palindrome après 4 itérations

Pour cela en utilise des fonctions prédéfinies sur les chaines de caractère en python et la procédure sera de cette façon : Convch(N) + “,” pour convertir le nombre en chaine et ajouter une virgule a la fin , et Effacer(ch,Debut,Fin) va afficher le dernier caractère qui est une virgule et afficher la chaine

Procédure KiemePalindrome(N :Entier , k :Entier)
Début
ch <-- ""
i <-- 0
Tantque ( i # k  ET  NonVerifPalind(N)) Faire
        N <-- N + Inverse(N)
       ch <-- ch + convch(N) + ","
        i <-- i + 1 
FinTanque
Si VerifPalind(N) <-- Vrai  Alors
  Ecrire ("Effacer(ch,long(ch)-1 ,long(ch)) "Est Palindrome aprés", i ,"Itération")
Sinon
Ecrire("Aprés ", k "Iteration le Nombre",N,"est Non Palindrome")
FinSi
Fin Procédure
def kieme_palindrome(N, k):
    i = 0
    while i != k and not VerifPalind(N):
        N = N + Inverse(N)
        i += 1
    if VerifPalind(N):
        print(f"Le nombre {N} est palindrome après {i} itération(s)")
    else:
        print(f"Après {k} itération(s), le nombre {N} n'est pas palindrome")

Solution Python 2 : on utilise le f-string (formatted string literals) permettent d’insérer des expressions dans une chaîne de caractères en les encadrant de crochets {}

def kieme_palindrome(N, k):
    ch = "" 
    i = 0
    while i != k and not VerifPalind(N):
        N = N + Inverse(N)
        ch += str(N) + ","  # Ajouter la nouvelle valeur de N à la chaîne
        i += 1
    if ch:
        ch = ch[:-1]
    if VerifPalind(N):
        print(f" {ch}\n Le nombre {N} est palindrome après {i} itération(s)")
    else:
        print(f"Après {k} itération(s), le nombre {N} n'est pas palindrome")

Exercice : Trouver Séquences Croissantes ou décroissante dans un Tableau D’entiers

Soit un Tableau TAB rempli par des entiers positifs aléatoires entre 1 et 100 notre problème est comment trouver toutes les séquences croissantes et l’afficher de la forme (1,2,3),(5,6,8),(13,15,17),(22,59),(75,85,99) avec chaque séquence doit contenir au moins 3 éléments.

Exemple :

le Résultat est (1,2,3),(5,6,8),(75,85,99)

Solution Algorithmique

Procédure Saisie()
Début
Répéter 
Ecrire("Donner un entier entre 1 et 100")
Lire(N)
Jusqu'à ( 1 < N <100)
Fin
Procédure Remplir(N: entier ,  @T:Tab)
Début
Pour i de 1 à N Faire
 T[i] <-- Alea(1,100)
Fin Pour
Fin
Procédure Nombre_virgules(ch: Chaine) :Entier
Début
    Compteur <-- 0
    Pour i  de 0 à Longueur(ch) - 1 Faire
        Si ch[i] = ',' Alors
            Compteur <-- Compteur + 1
        Fin Si
    Fin Pour
    Retourner Compteur
Fin
Déclarer une Variable X comme Variable Local et N et T sont passé par référence avec T de type Tab

Une procédure Recherche qui permet de trouver tous les séquences croissantes dans le tableau T ,on utilisant deux variables chaines de caractère l’une pour stocker les résultat finale et l’autre pour stocker la séquence en cours , on ajoute la séquence en cours à résultat uniquement lorsqu’elle contient au moins 3 éléments , n’oublier pas à initialiser à chaque fois la variable qui contient la chaine en cours

Procédure Recherche Seq (@T : Tab , N:Entier , k:Entier)
Début
Res <-- ""
Ch <-- convch(T[0])

pour i de 1 à N-1 Faire
   Si T[i] > T[i-1] Alors
      Ch <--Ch  +"," + convch(T[i]) 
   else if Nombre_virgules(ch) >= 2 # si ch contient plus 2 virgules
      Res <-- Res + "(" + Ch +","
   else 
     Ch <-- convch(T[i])
Fin Pour
Si Nombre_virgules(ch) >=2 Alors    #vérifier la dernière ch 
Res <-- Res + "(" + Ch +"),"
Ecrire ("les séquences croissantes sont : ",Effacer(Res,Long(ch)-1,Long(ch))
Fin

Solution Python

from numpy import *
import random

def saisie():
    n = int(input("donner un entier"))
    while n <1 or n >100 :
        print("donner un entier entre 1 et 100")
        n = int(input())
    return n
def remplir(T,n):
    for i in range(n):
        T[i] = random.randint(1,100)
    print(T)
    
def Nombre_virgules(ch):
    cp = 0
    for i in range (0, len(ch)):
        if ch[i] == ',':
            cp += 1
    return cp


def Recherche_Seq(T):
    res = ""
    ch = str(T[0])

    for i in range(1, len(T)):
        if T[i] > T[i-1]: 
            ch += ","+ str(T[i]) 
        else:
            if Nombre_virgules(ch)>= 2:  
                res += "("+ ch +"),"
            ch = str(T[i])
    
    if Nombre_virgules(ch) >= 2:
       res += "(" + ch + "),"

    return res.strip(",")

#Programme Principale
N = saisie()
T = array([int]*N)
remplir(T,N)
resultat = Recherche_Seq(T)
print("Séquences croissantes d'au moins 3 éléments:", resultat)

Leave a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Scroll to Top