Matrice
Fermé
dadou
-
22 févr. 2008 à 21:51
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 5 mars 2008 à 10:08
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 5 mars 2008 à 10:08
3 réponses
mamiemando
Messages postés
33304
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 octobre 2024
7 794
22 févr. 2008 à 22:36
22 févr. 2008 à 22:36
Oui et donc ? Qu'est ce qui te bloque ?
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
22 févr. 2008 à 22:38
22 févr. 2008 à 22:38
Bonjour,
Il me semble que le plus simple est de remplir la matrice ligne par ligne ou colonne par colonne d'ailleurs, c'est un peu kifkif...
Ce que l'on peut observer c'est que dans une ligne, on part de 1, on augmente jusqu'au numéro de la ligne, on stagne puis on redescend. Donc en gros on monte, on écrit n fois le numéro de la ligne où n est la taille de la ligne - 2 * le numéro de la ligne, et on redécompte.
Cela peut se faire en trois boucles pour écrire une ligne: montée, stagne sur le numéro de ligne, descente.
Après il suffit de rajouter une boucle autour pour effectuer la même chose pour chaque ligne.
Sinon on peut écrire le premier quart de la matrice, montée, demi stagne et on le réplique en inversant sur le 2ème quart, puis les deux premiers quarts sur la 2ème moitié de la matrice. Mais ça parait plus compliqué pour rien en réalité. Ce serait rentable si les valeurs à mettre étaient issue d'un calcul faramineux.
Cela t'aide ?
M.
Il me semble que le plus simple est de remplir la matrice ligne par ligne ou colonne par colonne d'ailleurs, c'est un peu kifkif...
Ce que l'on peut observer c'est que dans une ligne, on part de 1, on augmente jusqu'au numéro de la ligne, on stagne puis on redescend. Donc en gros on monte, on écrit n fois le numéro de la ligne où n est la taille de la ligne - 2 * le numéro de la ligne, et on redécompte.
Cela peut se faire en trois boucles pour écrire une ligne: montée, stagne sur le numéro de ligne, descente.
Après il suffit de rajouter une boucle autour pour effectuer la même chose pour chaque ligne.
Sinon on peut écrire le premier quart de la matrice, montée, demi stagne et on le réplique en inversant sur le 2ème quart, puis les deux premiers quarts sur la 2ème moitié de la matrice. Mais ça parait plus compliqué pour rien en réalité. Ce serait rentable si les valeurs à mettre étaient issue d'un calcul faramineux.
Cela t'aide ?
M.
mamiemando
Messages postés
33304
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 octobre 2024
7 794
22 févr. 2008 à 23:25
22 févr. 2008 à 23:25
C'est juste un double boucle for sur les lignes puis sur les colonnes. Si je suis à la ième ligne, je fais i incrémentations, et je devrais finir cette ligne par i décrémentations. Comme il y a N colonnes il faut que tu restes N-2*i itérations constant avant d'amorcer ces i décrémentations.
Au final quand tu es rendu à la ième ligne
- j'incrémente i fois
- je reste constant N-2*i constant
- je décrémente i fois
(ce qui fait bien N itérations de colonnes par ligne)
A toi de jouer maintenant il ne reste plus qu'à coder ;-)
Au final quand tu es rendu à la ième ligne
- j'incrémente i fois
- je reste constant N-2*i constant
- je décrémente i fois
(ce qui fait bien N itérations de colonnes par ligne)
A toi de jouer maintenant il ne reste plus qu'à coder ;-)
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
>
élève
4 mars 2008 à 20:00
4 mars 2008 à 20:00
Re,
En règle général lorsque l'on travaille avec des tableaux à plus de une dimension, on cherche avant tout une solution qui permette d'effectuer les opérations dimension par dimension. Ici ligne par ligne.
Je mets un squelette pour le code à écrire: (J'espère qu'il n'y a pas d'erreur je n'ai pas de compilateur...)
Si cela peut t'aider pour le début c'est possible de rajouter une fonction, celle-ci:
Dis nous où ça coince exactement (algorithme ou passage au code ?) et n'hésite surtout pas à continuer sur ton propre code si tu préfères.
M.
En règle général lorsque l'on travaille avec des tableaux à plus de une dimension, on cherche avant tout une solution qui permette d'effectuer les opérations dimension par dimension. Ici ligne par ligne.
Je mets un squelette pour le code à écrire: (J'espère qu'il n'y a pas d'erreur je n'ai pas de compilateur...)
#include <stdlib.h> #include <stdio.h> #define MAX_SIZE 10 unsigned int g_aaMatrix[MAX_SIZE][MAX_SIZE]; void displayMatrix( unsigned int uSize ); void initMatrix( unsigned int uSize ); void main( int atgc, char *argv[] ) { unsigned int uSize; printf("Saisissez la taille du tableau à afficher. (1 <= s <= %u\n", MAX_SIZE ); while ( ( scanf( "%u", &uSize ) != 1 ) || ( uSize == 0 ) || ( uSize >= MAX_SIZE ) ) { char c; // Vider les caractères résiduels jusqu'à la fin de ligne ou qu'il n'y ait plus de // caractères dans le tampon d'entrée do { c = getchar(); } while ( ( c != '\n') && ( c != EOF ) ); printf( "\nValeur invalide, nouvelle saisie\n" ); } initMatrix( uSize ); displayMatrix( uSize ); getchar(); } void displayMatrix( unsigned int uSize ) { unsigned int uLine; unsigned int uColomn; for ( uLine = 0 ; uLine != uSize ; uLine++ ) { for ( uColomn = 0 ; uColomn != uSize ; uColomn++ ) { printf( "%2u ", g_aaMatrix[uLine][uColomn] ); } printf( "\n" ); // new line } } void initMatrix( unsigned int uSize ) { // TODO. :-) }
Si cela peut t'aider pour le début c'est possible de rajouter une fonction, celle-ci:
void displayLine( unsigned int uLine, unsigned int uSize );
Dis nous où ça coince exactement (algorithme ou passage au code ?) et n'hésite surtout pas à continuer sur ton propre code si tu préfères.
M.
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
>
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
5 mars 2008 à 10:08
5 mars 2008 à 10:08
Whoops, à la fin ce n'est pas "displayLine" mais bien "initLine"