Carré magique

Contenu du snippet

Petit programme pour afficher des carrés magiques en C.

Source / Exemple :


#include <stdio.h>
#include <conio.h>
#include <math.h>

#define max 20
#define blanc 15
#define blink 128

void page_garde (void);
void continuation (void);

void main()
{
int tab[max][max], i, j, n, val, test;
int si[max], sj[max], diag=0, adiag=0, index;
char oui='o';

page_garde();
clrscr();
printf("Bienvenu dans le carré magique.");
continuation();

do
	{
	diag=0;
	adiag=0;
	do
		{
		clrscr();
		printf("Entrez la taille du carr? (nombre impair inférieur ? %d): ", max);
		fflush(stdin);
		scanf ("%d", &n);
		}
	while ((n%2)!=1 || n>max);

	index=(int)(log10 (n*n));
	for (i=0; i<max; i++)
		{
		si[i]=0;
		sj[i]=0;
		for (j=0; j<max; j++)
			tab[i][j]=0;
		}

	i=0;
	j=n/2;
	val=1;
	tab[0][n/2]=val;
	while (val<=n*n)
		{
		if((val%n)!=0)
			{
			if (i>0 && j<n-1)
				{
				i--;
				j++;
				}
			else
				{
				if (i==0)
					{
					i=n-1;
					j++;
					}
				else
					if (j==(n-1))
						{
						j=0;
						i--;
						}
				}
			}
		else
			i++;
		val++;
		tab[i][j]=val;
		}
/* affichage du carré magique */
	printf("\nVoici le carré magique:\n");
	for (i=0; i<n; i++)
		{
		for (j=0; j<n; j++)
			printf("%*d ", index+1, tab[i][j]);
		printf("\n");
		}
	continuation();
	gotoxy(1, 5+n);
	delline();
	delline();

/* v?rification du carré magique */
/* somme des colonnes */
	for (i=0; i<n; i++)
		{
		for (j=0; j<max; j++)
		sj[i]+=tab[i][j];
		}
/* somme des lignes */
	for (j=0; j<n; j++)
		{
		for (i=0; i<n; i++)
		si[j]+=tab[i][j];
		}

/* somme de la diagonale */
	for (i=0; i<n; i++)
		diag+=tab[i][i];

/* somme de l'anti-diagonale */
	for (i=0; i<n; i++)
		adiag+=tab[n-1-i][i];

	printf("Vérification de la magie du carré:");
	if (n>9)
		{
		gotoxy(1, 2);
		for (i=0; i<=n+1; i++)
			delline();
		test=-2;
		gotoxy(1, 3);
		}
	else
		test=n;
	for (i=0; i<n; i++)
		printf("\nValeur de la somme de la ligne %d: %d", i+1, sj[i]);
	continuation();
	gotoxy(75, 6+test);
	for (i=0; i<=n+2; i++)
		delline();
	gotoxy(75, 5+test);
	for (j=0; j<n; j++)
		printf("\nValeur de la somme de la colonne %d: %d", j+1, si[j]);
	continuation();
	gotoxy(75, 6+test);
	for (i=0; i<=n+1; i++)
		delline();
	gotoxy(75, 5+test);
	printf("\nValeur de la somme de la diagonale: %d", diag);
	printf("\nValeur de la somme de l'antidiagonale: %d", adiag);
	printf("\n\nVoulez-vous rejouer au carré magique? (O)oui, ");
	printf("(autre touche)non : ");
	fflush(stdin);
	scanf("%c", &oui);
	}
	while (oui=='o' || oui=='O');
clrscr();
}

void page_garde (void)
{
char txt[60], txt0[2];

clrscr();
textcolor(blanc);
strcpy(txt, "***************************************************");
gotoxy(15, 8);
puts(txt);
strcpy(txt0, "*");
gotoxy(15, 9);
puts(txt0);
gotoxy(65, 9);
puts(txt0);
strcpy(txt, "*            LOGICIEL DU CARRE MAGIQUE            *");
gotoxy(15, 10);
puts(txt);
gotoxy(15, 11);
puts(txt0);
gotoxy(65, 11);
puts(txt0);
gotoxy(15, 12);
puts(txt0);
gotoxy(65, 12);
puts(txt0);
gotoxy(15, 13);
strcpy(txt, "*          COPYRIGHT ALEXANDRE ROGER 1999         *");
puts(txt);
gotoxy(15, 14);
puts(txt0);
gotoxy(65, 14);
puts(txt0);
gotoxy(15, 15);
puts(txt0);
gotoxy(65, 15);
puts(txt0);
gotoxy(15, 16);
puts(txt0);
textcolor(blink+blanc);
gotoxy(20, 16);
cprintf("< APPUYEZ SUR UNE TOUCHE POUR CONTINUER >");
textcolor(blanc);
gotoxy(65, 16);
puts(txt0);
gotoxy(15, 17);
puts(txt0);
gotoxy(65, 17);
puts(txt0);
gotoxy(15, 18);
strcpy(txt, "***************************************************");
puts(txt);
gotoxy(80, 25);
getch();
}

void continuation (void)
{
textcolor(blink+blanc);
cprintf("\n\n\r< APPUYEZ SUR UNE TOUCHE POUR CONTINUER >");
textcolor(blanc);
gotoxy(80, 25);
getch();
}

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.