Vous êtes sur la page 1sur 4

Important :

Donner la solution algorithmique


Envoyer la solution sur mon adresse email :msekni.wissem@gmail.com

Solution : Carré magique


En python En Algorithmique
import numpy as np T.D.O.G
Algorithme PP
Objet T/N
def remplir(): Debut
remplir(N,M) N entier
while True: M Mat
si magique(M,N) alors
n=int(input("donner n")) Ecrire("carre magique")
remplir
magique
procedure
fonction
if n>=2: sinon
T.D.N.T
Ecrire ("non carre magique")
break Objet T/N
fin si
m=np.array([[0]*10]*10,dtype='int') Mat tableau 10*10 des entiers
Fin
for i in range(n):
for j in range(n): T.D.O.L
Procedure remplir(@n:entier,@m:Mat)
m[i,j]=int(input('m['+str(i)+','+str(j)+'] = ')) Debut Objet T/N
return(n,m) Repeter i,j entier
Ecrire ("donner n"),lire(n)
def somme_ligne(m,numl,n):
jusqu'à 2<=n<=10
s=0 pour i de 0 à n-1 faire
for j in range(n): pour j de 0 à n-1 faire
Repeter
s+=m[numl,j]
Ecrire ("donner un nombre"),lire(m[i,j])
return s jusqu'à m[i,j]>0
def somme_col(m,numc,n): fin pour
fin pour
s=0 Fin
for i in range(n):
s+=m[i,numc] Fonction somme_ligne(m:Mat,numl,n:entier):entier T.D.O.L
Debut
return s s 0
Objet T/N
i,s entier
def somme_diag1(m,n): pour i de 0 à n-1 faire
s=0 s < - s+m[numl,j]
fin pour
for i in range(n): Retourner(s)
s+=m[i,i] Fin

return s
Fonction somme_col(m:Mat,numc,n:entier):entir T.D.O.L
def somme_diag2(m,n): Debut Objet T/N
s=0 s< - 0 i,s entier
for i in range(n): pour i de 0 à n-1 faire
s < - s+m[i,numc]
s+=m[i,n-i-1] Fin pour
return s Retourner(s)

def appartenance(m,n): Fin


T.D.O.L
test=True Fonction somme_diag1(m:Mat,n:entier):entier
Objet T/N
i=0 Debut
i,s entier
s<- 0
while test and i<n:
pour i de 0 à n-1 faire
j=0 s<- s+m[i,i]
while test and j<n: fin pour
Retourner(s)
if m[i,j] not in range(1,n**2+1):
Fin
test=False
else: Fonction somme_diag2(m:Mat,n:entier):entier T.D.O.L

j+=1 Debut Objet T/N


s< -0 i,s entier
i+=1 pour i de 0 à n-1 faire
return test s < - s+m[i,n-i-1]
fin pour
def nb_occ(m,x,n):
Retourner(s)
nb=0 Fin
for i in range(n):
Fonction appartenance(m:Mat,n:entier):booleen T.D.O.L
for j in range(n):
Debut Objet T/N
if m[i,j]==x: i<- 0
B Booleen
nb+=1 B <-Vrai i,N ,j entier
N<-n*n
return nb Repeter
j <- 0
Repeter
def repetition(m,n): Fonction repetition(m:Mat,n:entier):booleen T.D.O.L
i=0 Debut Objet T/N
i<- 0 i,j entier
test=True Repeter test booleen
while i<n and test: j <- 0 nb_occ fonction
j=0 Repeter
si nb-occ(m,m[i,j],n)#0 alors
while j<n and test: test < - Faux
if nb_occ(m,m[i,j],n)!=1: sinon
test=False j < - j+1
fin si
else: jusqu'à j=>n ou test = Faux
j+=1 i < - i+1
i+=1 jusqu'à i=>n ou test= Faux
Retourner test
return test Fin
def magique(m,n):
test=True
Fonction magique (m:Mat,n:entier):Booleen
s=somme_diag1(m,n) Debut
if somme_diag2(m,n)!=s: test < - Vrai
s < - somme_diag1(m,n)
test=False
si somme_diag2(m,n)#s alors
elif not appartenance(m,n) or not repetition(m,n): test< - Faux
test=False sinon si appartenance(m,n)=Faux ou repetition(m,n)=Faux alors
test < - Faux
else:
sinon
i=0 i<- 0
while test and i<n: Repeter
si somme_ligne(m,i,n)#s ou somme_col(m,i,n)#s alors
if somme_ligne(m,i,n)!=s or
test<-Faux
somme_col(m,i,n)!=s: sinon
test=False i< - i+1
else: fin si T.D.O.L
jusqu'à test= Faux ou i=>n
i+=1 fin si Objet T/N
return test Retourner(test) i ,s entier
Fin test booleen
#-------------PP------------------------#
somme_diag
N,M=remplir() appartenance
if magique(M,N): repetition Fonction
somme_ligne
print("carre magique")
somme_col
else:
print("non carre magique")

Solution : triangle de Pascal


En python En Algorithmique
import numpy as np Algorithme PP
def saisir(): Début T.D.O.G
while True: saisir(N) Objet T/N
n=int(input("donner N")) triangle_pascal(N,T) N entier
if 3<=n<=20: affiche(T,N)
T Mat
break Fin
affiche, procedure
return (n) Procedure saisir (@n:entier)
def triangle_pascal(n): Debut Triangle_pas
m=np.array([[0]*20]*20,dtype='int') Repeter
Ecrire ("donner N"),lire(n)
T.D.N.T
for i in range(n):
jusqu'à 3<=n<=20 Mat tableau de 20*20 des entiers
m[i,0]=1
Fin
m[i,i]=1
for j in range(1,i): Procedure triangle_pascal(n:entier,@m:Mat)
Debut
m[i,j]=m[i-1,j]+m[i-1,j-1] pour i de 0 à n-1 faire
T.D.L
return(m) m[i,0] 1 Objet T/N
def affiche(m,n): m[i,i] 1 i,j entier
for i in range(n): pour j de 1 à i-1 faire
for j in range(0,i+1): m[i,j]=m[i-1,j]+m[i-1,j-1]
print(m[i,j],end=" ") Fin pour
Fin pour
print()
#-------------PP------------------------# Fin
N=saisir() Procedure affiche (m:Mat,n:entier)
T=triangle_pascal(N) Debut T.D.L
affiche(T,N) pour i de 0 à n-1 faire Objet T/N
pour j de 0 à i faire i,j entier
Ecrire(m[i,j])
Fin pour
Fin pour
Fin

T[i,i]=1

T[2,1]=T[1,1]+T[1,0]

T[4,2]=T[3,2]+T[3,1]

T[i,0]=1

T[4,1]=T[3,1]+T[3,0]

Questions:
-exercice 1: Python
pouquoi on a déclaré une matrice de 10*10 au lieu de n*n ?
Pouquoi n est seulement >2 alors que la condtion est (2<n<=10)?
est-il possible de vérifier ma solution ? (page suivante)
-concernant le devoir : est-ce qu'on a encore un devoir ? si oui quelle est sa date ? théorique ou pratique ?
Merci pour votre temps
#exercice n2
(suite fonction appartenance) import numpy as np
def distinct(tab,n):
si 1>m[i,j] ou m[i,j]>N alors b=True
B<--- Faux for j in range(0,n):
for i in range(j+1,n):
sinon
if tab[i]==tab[j]:
j<---j+1 b=False
fin si return (b)
jusqu'à B= Faux ou j=>n
i<---i+1 def remplir():
while True :
jusqu'à B=Faux ou i=>n
x=int(input("donner le nombre de lignes et de colonnes"))
Retourner (B) if 2<x<=10:
Fin break
n=x*x
k=0
M=np.array([[(0)]*x]*x,dtype="int")
T=np.array([0]*x*x,dtype="int")
for i in range(x):
for j in range(x):
while True :
M[i,j]=int(input("donner M["+str(i)+","+str(j)+"]"))
T[j+i+k]=M[i,j]
if 0<M[i,j]<=n :
break
k=k+2
while not distinct(T,n):
for i in range(x):
for j in range(x):
M[i,j]=int(input("donner M["+str(i)+","+str(j)+"]"))
if distinct(T,n):
break

return(M,x)

def carre(M,x):
SL,SC,SD,SD1=0,0,0,0
B=True
for i in range(x):
SD=SD+M[i,i]
SD1=SD1+M[i,x-i-1]
if SD ==SD1:
for i in range(x):
for j in range (x):
SL=SL+M[i,j]
SC=SC+M[i,j]
if SL!=SD :
B=False
break
else:
SL=0
if SC!=SD:
B=False
break
else:
SC=0
else:
B=False
return(B)

Matrice,x=remplir()
if carre(Matrice,x)==True:
print("c'est un carré magique")
else:
print("ce n'est pas un carré magique")

Vous aimerez peut-être aussi