IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Remplir une Matrice aléatoire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut Remplir une Matrice aléatoire
    Bonjour,

    je souhaite remplir une matrice de 13x12 d'une façon aléatoire avec les caractère suivantes : R,V,J,O.
    la répétition est possible mais on ne peux avoir trois lettres identique aligner cote à cote que ce soit en vertical ou en horizontale.

    Comment faire cela ?

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre éclairé Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut
    Bonsoir,
    c'est un peux compliquer !!

    par contre j'ai réussi a faire un truc simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
     
    char tableau[10];
    int main()
    {
    	int i;                                  
     
    	for (i = 0; i < 10; ++i)
    	{
     
    		switch ((rand() % 3) + 1)
    		{
    		case 1:tableau[i] = 'R'; break;
    		case 2:tableau[i] = 'V'; break;
    		case 3:tableau[i] = 'J'; break;
    		case 4:tableau[i] = 'O'; break;
    		}
     
    		printf(" %c ||", tableau[i]);
    	}
    	getchar();
    }
    le soucis a chaque exécution le programme remplie le tableau de la même façon avec les même séquence.

    première exécution du programme

    Nom : test1.png
Affichages : 5612
Taille : 24,7 Ko

    je ferme le programme et je relance, sa m'affiche le même résultat, je souhaite afficher affiche des séquences vraiment aléatoire, je ne veux pas que le programme commence toujours par les même séquence.

    Comment on peux faire sa ?

    Merci

  4. #4
    Membre éclairé Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut
    Bonjour,

    Pour le moment j'ai réussi a remplir la matrice comme je le veux, si quelqu'un a une meilleur idée je suis preneur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
     
    char tableau[13][10],val; int refaire = 1;
    int main()
    {
    	int i,j;                                  
    	while (refaire)
    	{
    		for (i = 0; i < 13; ++i)
    		{
    			for (j = 0; j < 10; ++j)
    			{
     
    				switch ((rand() % 4) + 1)
    				{
    				case 1:
    					val = 'R';
    					if ((i < 2) && (j>1) && (val == tableau[i][j - 1]) && (val == tableau[i][j - 2])) { tableau[i][j] = 'V'; val = 'V'; }
    					else if ((i > 1) && (j < 2) && (val == tableau[i - 1][j]) && (val == tableau[i - 2][j])) { tableau[i][j] = 'V'; val = 'V'; }
    					else if ((i>1) && (j>1) && (val == tableau[i][j - 1]) && (val == tableau[i][j - 2]) &&
    						(val == tableau[i - 1][j]) && (val == tableau[i - 2][j])) {tableau[i][j] = 'V'; val = 'V';}
    					else tableau[i][j] = val;
    					break;
     
    				case 2:
    					val = 'V';
    					if ((i < 2) && (j>1) && (val == tableau[i][j - 1]) && (val == tableau[i][j - 2])) tableau[i][j] = 'R';
    					else if ((i > 1) && (j < 2) && (val == tableau[i - 1][j]) && (val == tableau[i - 2][j])) tableau[i][j] = 'R';
    					else if ((i>1) && (j>1) && (val == tableau[i][j - 1]) && (val == tableau[i][j - 2]) &&
    						(val == tableau[i - 1][j]) && (val == tableau[i - 2][j])) tableau[i][j] = 'R';
    					else tableau[i][j] = val;
     
    					break;
    				case 3:
    					val = 'J';
    					if ((i < 2) && (j>1) && (val == tableau[i][j - 1]) && (val == tableau[i][j - 2])) tableau[i][j] = 'O';
    					else if ((i > 1) && (j < 2) && (val == tableau[i - 1][j]) && (val == tableau[i - 2][j])) tableau[i][j] = 'O';
    					else if ((i>1) && (j>1) && (val == tableau[i][j - 1]) && (val == tableau[i][j - 2]) &&
    						(val == tableau[i - 1][j]) && (val == tableau[i - 2][j])) tableau[i][j] = 'O';
    					else tableau[i][j] = val;
    					break;
     
    				case 4:
    					val = 'O';
    					if ((i < 2) && (j>1) && (val == tableau[i][j - 1]) && (val == tableau[i][j - 2])) tableau[i][j] = 'J';
    					else if ((i > 1) && (j < 2) && (val == tableau[i - 1][j]) && (val == tableau[i - 2][j])) tableau[i][j] = 'J';
    					else if ((i>1) && (j>1) && (val == tableau[i][j - 1]) && (val == tableau[i][j - 2]) &&
    						(val == tableau[i - 1][j]) && (val == tableau[i - 2][j])) tableau[i][j] = 'J';
    					else tableau[i][j] = val;
    					break;
    				}
    				if (j < 9) printf(" %c - ", tableau[i][j]); 
    				else printf(" %c  ", tableau[i][j]);
    			}
     
    				printf("\n");
    		}
    		printf("===============================================\n");
    		for (i = 0; i < 13; ++i)
    		{
    			for (j = 0; j < 10; ++j)
    			{
    				val = tableau[i][j];
    				if ((i < 13) && (j < 8) && (val == tableau[i][j + 1]) && (val == tableau[i][j + 2]))
    				{
    					switch (val)
    					{
    					case 'R':tableau[i][j] = 'V'; break;
    					case 'V':tableau[i][j] = 'R'; break;
    					case 'J':tableau[i][j] = 'O'; break;
    					case 'O':tableau[i][j] = 'J'; break;
    					}
    				}
    				if (j < 9) printf(" %c - ", tableau[i][j]);
    				else printf(" %c  ", tableau[i][j]);
    			}
    			printf("\n");
    		}
    		printf("\nProchain random \n");
     
    		if (getchar() == 'K') refaire = 0;
    	}
    }

    Merci

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    C'est peut être compliqué, mais là, tu nous fais du C, et même pas joli à voir en plus...

    1- Les variables globales, C'EST MAL Dépèches toi de me virer ces horreurs que je ne saurais voir
    2- Ta fonction est beaucoup trop longue et compliquée

    3- Généralement, lorsque tu crois avoir besoin d'un tableau 2 dimensions de L lignes et de C colonnes, c'est que tu veux surtout pouvoir représenter L * C éléments. Et, dans ce cas, l'idéal est toujours de "linéariser" le tableau à deux dimensions en un tableau de dimension unique contenant ... L * C éléments.

    Il est alors possible d'accéder à l'élément se trouvant à la ligne line et à la colonne row en utilisant la formule elementSouhaite = line * C + row
    • Avec un peu de chance, cette manière de travailler s'avérera même plus rapide que si tu avais utilisé un tableau à deux dimensions.
    • Dans le pire des cas, cette manière de travailler sera aussi rapide que si tu avais utilisé un tableau à deux dimensions.
    • Dans tout les cas, tu n'as rien à perdre


    4- les en-tête de la bibliothèque standard dont l'extension est en *.h (comme stdio.h ou stdlib.h) sont en réalité les fichiers issus de la bibliothèque standard du C. En C++, on préférera (pour toute une série de raison) utiliser leur version sans extension et préfixée de c (comme cstdio ou cstdlib)

    Et encore : à condition de savoir ce que l'on fait en utilisant les fonctionnalités du C, or, on préféreras les fonctionnalités propres au C++ à toute alternative issue du C, entre autres, parce que les fonctionnalités issues du C++ apporte un niveau de confort et de sécurité que n'apportent absolument pas leur équivalent en C.

    Et, enfin (pour au moins t'aider à résoudre ton problème)
    5- tu dois initialiser la graine aléatoire avec srand(), mais ca ne doit être fait qu'une seule fois

    MAIS ... Ca, c'est si tu décides de travailler en C, et, dans ce cas là, tu t'es trompé de rubrique, et tu aurais du aller dans celle d'à coté (le sujet peut être déplacé, si tu veux )

    Si tu décides de travailler en C++, alors, il faut IMPERATIVEMENT prendre l'habitude d'éviter les fonctionnalités issues du C comme la peste: pour la plupart, elles ne sont là que pour permettre la compatibilité (la capacité d'un compilateur C++ à travailler sur un code C), et encore: certaines d'entre elles ne sont pas tout à fait compatibles, car il y a quelque différences à prendre en compte.

    Donc, comme Bousk a donné les bonnes réponses, mais de manière un peu succincte, on va reprendre depuis le début:
    1- un code proche dec'est ce que l'on appelle un "tableau C style", qui présente la particularité de ne pouvoir contenir qu'un nombre fixe, clairement déterminé à la compilation d'éléments.

    En C++, nous préférerons, pour le cas particulier où l'on connaît précisément à la compilation le nombre d'éléments que devra contenir le tableau, utiliser la classe std::array qui s'utilise sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::array<TypeDesDonneee, nombreDelements> nomDuTableau;
    Mais qui, pour le reste, s'utilise exactement de la même manière (voire, qui permet l'utilisation d'itérateur, mais je présumes que tu ne sais même pas ce que c'est... n'hésite pas à poser des questions dans ce cas )

    2- La fonction rand() est aussi une fonctionnalité issue du C qui pose pas mal de problèmes:
    1. la plus grande valeur qu'elle pourra générer (RAND_MAX), c'est 255
    2. l'algorithme qu'elle utilise n'est -- il me semble-- pas vraiment le meilleur que l'on puisse rêver.


    C++ nous offre des fonctionnalités qui présenteront des résultats bien meilleurs au travers du fichier <random>. Tu trouvera un exemple concret d'utilisation ==>ici<==.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre éclairé Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Par défaut
    Bonsoir,

    avec le code sources ci-dessous j’obtiens un meilleur résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include "stdafx.h"
    #include "stdio.h"
    #include "stdlib.h"
     
    char tableau[13][10],val; int refaire = 1;
    int main()
    {
    	int i,j;                                  
    	while (refaire)
    	{
    		for (i = 0; i < 13; ++i)
    		{
    			for (j = 0; j < 10; ++j)
    			{
     
    				switch ((rand() % 4) + 1)
    				{
    				case 1:
    					if ((tableau[i][j - 1] != 'R') && (tableau[i - 1][j] != 'R')) tableau[i][j] = 'R';
    					if ((tableau[i][j - 1] != 'V') && (tableau[i - 1][j] != 'V')) tableau[i][j] = 'V';
    					if ((tableau[i][j - 1] != 'J') && (tableau[i - 1][j] != 'J')) tableau[i][j] = 'J';
    					if ((tableau[i][j - 1] != 'O') && (tableau[i - 1][j] != 'O')) tableau[i][j] = 'O';
    					break;
     
    				case 2:
    					if ((tableau[i][j - 1] != 'V') && (tableau[i - 1][j] != 'V')) tableau[i][j] = 'V';
    					if ((tableau[i][j - 1] != 'J') && (tableau[i - 1][j] != 'J')) tableau[i][j] = 'J';
    					if ((tableau[i][j - 1] != 'R') && (tableau[i - 1][j] != 'R')) tableau[i][j] = 'R';
    					if ((tableau[i][j - 1] != 'O') && (tableau[i - 1][j] != 'O')) tableau[i][j] = 'O';
    					break;
    				case 3:
    					if ((tableau[i][j - 1] != 'J') && (tableau[i - 1][j] != 'J')) tableau[i][j] = 'J';
    					if ((tableau[i][j - 1] != 'O') && (tableau[i - 1][j] != 'O')) tableau[i][j] = 'O';
    					if ((tableau[i][j - 1] != 'R') && (tableau[i - 1][j] != 'R')) tableau[i][j] = 'R';
    					if ((tableau[i][j - 1] != 'V') && (tableau[i - 1][j] != 'V')) tableau[i][j] = 'V';
    					break;
    				case 4:
    					if ((tableau[i][j - 1] != 'O') && (tableau[i - 1][j] != 'O')) tableau[i][j] = 'O';
    					if ((tableau[i][j - 1] != 'R') && (tableau[i - 1][j] != 'R')) tableau[i][j] = 'R';
    					if ((tableau[i][j - 1] != 'V') && (tableau[i - 1][j] != 'V')) tableau[i][j] = 'V';
    					if ((tableau[i][j - 1] != 'J') && (tableau[i - 1][j] != 'J')) tableau[i][j] = 'J';
    					break;
    				}
    				if (j < 9) printf(" %c - ", tableau[i][j]); 
    				else printf(" %c  ", tableau[i][j]);
    			}
     
    				printf("\n");
    		}
    		printf("===============================================\n");
    		printf("\nProchain random \n");
     
    		if (getchar() == 'K') refaire = 0;
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment remplir une matrice aléatoirement ?
    Par Hamza dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2007, 19h59
  2. remplir une matrice 3D d'images
    Par twix24 dans le forum Images
    Réponses: 1
    Dernier message: 05/12/2007, 20h27
  3. Réponses: 2
    Dernier message: 26/06/2007, 15h40
  4. Remplir une matrice et afficher son contenu
    Par annoussa dans le forum Pascal
    Réponses: 2
    Dernier message: 08/11/2006, 11h48
  5. Remplir une matrice de variance/covariance
    Par ToTo13 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 31/07/2006, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo