cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 27 déc. 2008 à 18:31
Salut,
Ne me dis pas que tu recopies le contenu de ta matrice dans un tableau juste pour la parcourir ? Nan s'il te plait, ne me dit pas ça. Ce serait trop atroce. Je ne pourrais y survivre.
Plus sérieusement, le recopiage de mémoire qui sert à rien... vaut mieux s'en passer. Faut savoir que le processeur, moins il en fait, mieux on se porte.
Pour n'afficher les composantes qu'une seule fois, il faut tester chaque composante avec les composantes déjà affichées. Ce qui est aussi une opération longue, mais celle-ci est nécessaire ! Après on peut essayer d'optimiser la chose en triant les éléments déjà affichés... Mais ce serait aussi consommateur de temps CPU.
<hr />
#include <stdlib.h>
#include <stdio.h>
#include <time.h>#define N 5
#define M 10
int m[N][M];
int main()
{
int bFound; /* Pour savoir si on a déjà affiché cette valeur */
int nI, nJ, nK, nL;
/* Initialisation du générateur pseudo aléatoire */
srand(time(NULL));
/* Intialisation d'une matrice */
for (nI = 0; nI < N; nI++)
for (nJ = 0; nJ < M; nJ++)
m[nI][nJ] = rand() % 20;
/* Affichage de la matrice */
for (nI = 0; nI < N; nI++)
{
for (nJ = 0; nJ < M; nJ++)
printf("%2d ", m[nI][nJ]);
printf("\n");
}
printf("\n");
/* Affichage des composantes une seule fois */
for (nI = 0; nI < N; nI++)
{
for (nJ = 0; nJ < M; nJ++)
{
bFound = 0;
/* On regarde dans les premières lignes */
for (nK = 0; nK < nI; nK++)
{
for (nL = 0; nL < M; nL++)
if (m[nI][nJ] == m[nK][nL])
{
bFound = 1;
break;
}
if (bFound) break;
}
/* On regarde dans la ligne courante */
if (! bFound)
for (nL = 0; nL < nJ; nL++)
if (m[nI][nJ] == m[nI][nL])
{
bFound = 1;
break;
}