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
132est un zigzag car il suit un schéma de “augmentation (1 -> 3)” suivi d’une “diminution (3 -> 2)”. - Le nombre
214est 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)
