saluuut tt le monde
je veux un algo qui affiche une matrice carré d'ordre n comme sui:
par exemple ici d'ordre 5:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
merciii d'avance
je veux juste une indication
Version imprimable
saluuut tt le monde
je veux un algo qui affiche une matrice carré d'ordre n comme sui:
par exemple ici d'ordre 5:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
merciii d'avance
je veux juste une indication
Deux boucles imbriquées, la plus profonde se terminant par un saut de ligne
Bonjour,
c'est ce qu'on appelle des carrés concentriques !
tu veux juste une idée ? Je te propose deux approches :mrgreen:
1. Parcourir toutes les cases dans l'ordre, et pour chaque case calculer la lettre à afficher.
2. Remplir une grille de caractère allouée en mémoire, en dessinant les carrés les uns après les autres, puis afficher cette grille.
Bon courage !
Cordialement,
Sidahmed.
Bonsoir,
Oui, j'ai parlé de lettre, mais le principe reste le même.
Ce que j'avais cité ci-dessus n'était pas clair car tu avais demandé juste un indice :mrgreen:, pour être plus clair, voici la marche à suivre :
L'idée c'est que pour obtenir l'indice du chiffre (nombre) qu'il faut mettre dans une case donnée, il suffit de déterminer quelle est la distance entre cette case et le centre de la matrice. Par le mot distance, on entend le nombre de déplacements nécessaires pour rejoindre le milieu, si chaque déplacement peut se faire horizontalement, verticalement, ou en diagonale.
Cordialement,
Sidahmed.
Sauf que la plupart des langages proposent des sorties formatées pour tous les types prédéfinis.Citation:
L'idée c'est que pour obtenir l'indice du chiffre (nombre) qu'il faut mettre dans une case donnée, il suffit de déterminer quelle est la distance entre cette case et le centre de la matrice. Par le mot distance, on entend le nombre de déplacements nécessaires pour rejoindre le milieu, si chaque déplacement peut se faire horizontalement, verticalement, ou en diagonale.
Ainsi si c'est du C par exemple:
printf("%8.2f",A[i][j]) alignement droit, sur 8 positions, précision:deux décimales.
C'est comme ça qu'on affiche des matrices réelles, en alignant verticalement les virgules.
J'ai l'impression que vous ne parlez pas de la meme chose. :koi:
- Zavonen parle de l'alignement des données affichées
- sidahmed parle du calcul des coefficients de la matrice
@do_key_120: Quel est ton probleme exactement ? L'alignement des caracteres ou le calcul des valeurs de la matrice ?
Bonjour,
Un éclaircissement en plus :
Cette distance est obtenue en calculant le maximum de deux valeurs. Pour une case donnée, on va regarder quelle est sa différence d'abscisse avec la case du centre, puis regarder quelle est sa différence d'ordonnée avec la case du centre. On calcule le maximum de ces deux valeurs, et cela nous donne l'indice de la lettre à utiliser dans cette case.
Cordialement,
Sidahmed.
Et si la matrice est d'ordre 2N, il n'y a pas de centre... ;)
Bonjour,
voici un programme C "bourrin" que j'ai moi-même oublié la logique de fonctionnement :
Normalement ça marche !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 const int MAX_NB_LETTRES=300; void ligne(int col,char lettre) { int j; for(j=0;j<col;j++) printf("%c",lettre); } int main() { int nbLettres; char lettres[MAX_NB_LETTRES]; int i,j,k,taille; scanf("%d",&nbLettres); scanf("%s",lettres); taille=(nbLettres-1)*2+1; //printf("%d",taille); for(i=0;i<nbLettres;i++)//La ligne milieu comprise contenant la 1ère lettre { for(k=0;k<i;k++) ligne(1,lettres[nbLettres-1-k]); ligne(taille-2*i,lettres[nbLettres-1-i]); for(k=0;k<i;k++) ligne(1,lettres[nbLettres-i+k]); printf("\n"); } //--------------------------------------- for(i=nbLettres-2;i>=0;i--) { for(k=0;k<i;k++) ligne(1,lettres[nbLettres-1-k]); ligne(taille-2*i,lettres[taille-nbLettres-i]); for(k=0;k<i;k++) ligne(1,lettres[taille-nbLettres-i+1+k]); printf("\n"); }
Nota bene :
- La matrice obtenue est remplie de lettres et non pas de chiffres, j'avais la flemme de modifier ça :aie:
- Ce programme n'implémente pas l'idée de j'avais décrit auparavant, j'ai bien dit que c'est un algorithme "bourrin" :mrgreen: Cependant l'idée que j'avais proposée est un algorithme intelligent :yaisse2:
Cordialement,
Sidahmed.