Les carres magiques

Description

Voici un petit programme que j'ai retrouvé ! :) il date de 1998 est permet de :

- Tester un carre
- Créer un carre magique
- Afficher la liste des carre magique 3X3

Bon code pour apprendre les tableaux ! ! ! ! ! :))

Source / Exemple :


/*

    • C'était un projet de 1998 (si mes souvenirs sont bons ! ;)) que devez faire mon frère pour le deug M.I.A.S.
    • Il avait le chois entre plus programme à faire et il a choisit les carres magiques. Donc j'suis partie dans la programmation
    • de ce prog. Mais j'avais aussi fait une machine à boisson pour un pot à mon frère qui avait lui choist la machine à boisson ;)
    • Ce code peut être opptimisé mais il est 24h 40min et je viens juste de retrouver les codes sources donc je ne par pas pour optimisation ! :)
  • /
/*
    • Créer par Arnaud Guyonne
  • /
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define MAX 100 typedef int carre [MAX][MAX]; void afficher (carre c, int n) { int l,d; for (l=0; l<n; l++) { for (d=0;d<n;d++) printf("%4d", c[l][d]); printf("\n"); } puts(""); } void entrer_un_carre (carre c,int n) { int i,j; for (i=0;i<n;i++) { for(j=0;j<n;j++) { printf("Entrer un nombre pour la ligne %d et la colonne %d :\n",i,j); scanf("%d",&c[i][j]); } } } /*
    • PARTIE 1
  • /
int magique_ok(carre c,int n) { int i=0, j=0, k=0, s=0; int carre_test[MAX]; int s_theo=(n*(n*n+1))/2; for (i=0;i<n;i++) { for (j=0;j<n;j++) { carre_test[k]=c[i][j]; k++; } } for (i=0;i<(n*n);i++) if (carre_test[i]<1 || carre_test[i]>(n*n)) return 0; for(i=0;i<(n*n)-1;i++) { for(j=(i+1);j<(n*n)-1;j++) if (carre_test[i]==carre_test[j]) return 0; } for(i=0;i<n;i++) { for(j=0;j<n;j++) s=s+c[i][j]; if(s!=s_theo) return 0; s=0; } s=0; for(j=0;j<n;j++) { for(i=0;i<n;i++) s=s+c[i][j]; if (s!=s_theo) return 0; s=0; } s=0; for(i=0;i<n;i++) s=s+c[i][j]; if(s!=s_theo) return 0; s=0; for (i=0, j=(n-1);i<n, j>=0;i++, j--) s=s+c[i][j]; if(s!=s_theo) return 0; return 1; } /*
    • PARTIE 2
  • /
void carre_magique(carre c, int n) { int i,j; int x=1; for(i=0;i<n;i++) { for(j=0;j<n;j++) c[i][j]=0; } i=(n-1)/2+1; j=(n-1)/2; c[i][j]=x; for(x=2;x<=n*n;x++) { i++; if(i==n) i=0; j++; if(j==n) j=0; if(c[i][j]==0) c[i][j]=x; else { i++; if(i==n) i=0; j--; if(j==-1) j=n-1; c[i][j]=x; } } } /*
    • PARTIE 3
  • /
int carre_trois() { int i1,i2,i3,i4,i5,i6,i7,i8,i9; int cpt=0; carre c; for(i1=1;i1<10;i1++) { c[0][0]=i1; for(i2=1;i2<10;i2++) { if(i1==i2) c[0][1]=i2; for(i3=1;i3<10;i3++) { if(i2==i3 || i1==i3) c[0][2]=i3; for(i4=1;i4<10;i4++) { if(i1==i4 || i2==i4 || i3==i4) c[1][0]=i4; for(i5=1;i5<10;i5++) { if(i1==i5 || i2==i5 || i3==i5 || i4==i5) c[1][1]=i5; for(i6=1;i6<10;i6++) { if(i1==i6 || i2==i6 || i3==i6 || i4==i6 || i5==i6) c[1][2]=i6; for(i7=1;i7<10;i7++) { if(i1==i7 || i2==i7 || i3==i7 || i4==i7 || i5==i7 || i6==i7) c[2][0]=i7; for(i8=1;i8<10;i8++) { if(i1==i8 || i2==i8 || i3==i8 || i4==i8 || i5==i8 || i6==i8 || i7==i8) c[2][1]=i8; for(i9=1;i9<10;i9++) { if(i1==i9 || i2==i9 || i3==i9 || i4==i9 || i5==i9 || i6==i9 || i7==i9) c[2][2]=i9; if(magique_ok(c,3)==1) { afficher(c,3); cpt++; } } } } } } } } } } printf("Le nombre de carre(s) magiques(s) est : %d\n", cpt++); return cpt; } /*
    • FONCTION PRINCIPALE
  • /
int s; void main() { int n; carre c; puts("\t\t\t\tCARRE MAGIQUE"); do { puts("\n\n- Tapez 1 pour tester un carre."); puts("- Tapez 2 pour creer un carre magique."); puts("- Tapez 3 pour voir toutes la liste des carre magique 3X3"); printf("\nVotre choix : "); scanf("%d",&s); }while(s==0 || s>3); puts("\n"); if(s==1) { printf("Entrer la dimendion duu carre :"); scanf("%d",&n); printf("\n"); entrer_un_carre(c,n); afficher(c,n); printf("\n"); printf("%d", magique_ok(c,n)); printf("\n"); printf("Si le nombre ci dessus est 1 alors votre carre est magique, si le nombre est 0 alors le carre n'est pas magique."); printf("\n"); } if(s==2) { printf("Entrer la dimension du carre magique : \n"); scanf("%d", &n); printf("Voici un carre magique d'ordre %d : \n"); carre_magique(c,n); afficher(c,n); printf("La sommes remarquable du carre magique est %ld\n",n*(n*n+1)/2); } if(s==3) { carre_trois(); } }

Conclusion :


Amusez-vous bien ! :))

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.