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)”.
Un nombre zigzag doit alterner constamment entre ces deux comportements (augmentation/diminution).
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
Solution en Python
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)
Solution 2 Python
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
exemple 8549458 est palindrome , 7459252 n’est pas palindrome
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
Solution Python
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
Solution Python
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
Le programme affiche Le nombre est palindrome âpres 4 itération ,Le processus consiste simplement à ajouter un nombre à son inverse jusqu’à ce qu’un palindrome soit trouvé, ou bien jusqu’à ce que k itérations soient atteintes sans succès. Cette méthode est appelée la suite de Lychrel, et certains nombres peuvent ne jamais former de palindrome, même après de nombreuses itérations.
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
Solution Python
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 :
1 | 2 | 3 | 5 | 6 | 8 | 55 | 75 | 85 | 99 |
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)