Aller au contenu

Difficulté sur un programme Nsi 1ère


Messages recommandés

Posté(e)

Écrire un programme qui permet de vérifier si un carré est magique 
On codera le carré en début de programme grâce à une liste de liste. On utilisera pour mettre au point le programme le carré 3x3 fourni en exemple. 
Le programme devra écrire c'est un" carré magique" ou c'est n'est pas un "carré magique " 

(c'est le début du programme) 
carre=[[4,9,2],
[3,5,7],
[8,1,6]]
n=len(carre)
s=n*(n**2+1)/2
magic=True

# Vérification des lignes
for lig in carre :
som=0
for col in lig :
som+=col
if som !=s : magic=False

# Vérification des colonnes
for col in range(n):
som=0
for lig in range(n):
som+=carre[lig][col]
if som !=s : magic=False

# Vérification diagonale /
# Vérification diagonale \
# Vérification tous les chiffres entre 1 et n^2

Limite: Lundi 14 novembre

img15.png

  • E-Bahut
Posté(e)

Bonsoir,

Au cas où, une ébauche pour les deux conditions suivantes, mais sans garantie, donc à étudier et à tester.

carre1=[[4,9,2],
[3,5,7],
[8,1,6]]

carre=[[1,2,3],
[4,5,6],
[7,8,9]]

n=len(carre)
s=n*(n**2+1)/2
magic=True

for ligne in carre :
    som=0
    for col in ligne :
        som+=col
    if som !=s :
        magic=False

for col in range(n):
    som=0
    for lig in range(n):
        som+=carre[lig][col]
    if som !=s :
        magic=False

som=0
for i in range(n):
    som+=carre[i][i]
if som !=s :
    magic=False
        
som=0
for i in reversed(range(n)):
    som+=carre[i][i]
if som !=s :
    magic=False

if magic :
    print("c'est un \"carré magique\"")
else :
    print("ce n'est pas un \"carré magique\"")
    

Il y a deux carrés au départ, un bon et un mauvais. Il suffit de changer carre1 en carre et carre en carre1 pour les tests.

  • E-Bahut
Posté(e)

Bonjour,

Au cas où ce n'est pas trop tard, pour "Vérification tous les chiffres entre 1 et n^2",  je n'ai pas trouvé mieux que de balayer tous les nombres et de vérifier qu'ils sont dans le carré.  Par contre, pour simplifier l'utilisation de "in", j'ai transformé la liste de listes en une liste simple.

carre1=sum(carre,[])
for i in range(1,n**2+1):
    if i not in carre1 :
        magic=False

 

  • E-Bahut
Posté(e)

Bonjour,

J'avais vu que c'était à rendre pour hier mais j'avais quand même essayé.

Pour info, je ne sais pas si tu as regardé d'un peu plus près la notion de carré magique. En fait, on en trouve qui ne sont pas constitués des n² premiers nombres. Dans ce cas, les 4 premiers contrôles ne détectent pas d'erreur. Seul le dernier retourne False. Par contre, ici, l'énoncé spécifiait bien "tous les entiers de 1 à n²" d'où la nécessité du 5ème contrôle.

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering
spam filtering