Accueil > Forum > > > > initialiser un tableau avec des données aléatoires, tout en ayant des conditions
initialiser un tableau avec des données aléatoires, tout en ayant des conditions
samedi 27 décembre 2008 à 18:40:24 |
initialiser un tableau avec des données aléatoires, tout en ayant des conditions

snakers07
|
bonjour tout le monde, j'ai un petit problème avec mon programme. Je voudrais initialiser un tableau a deux dimension mais avec des données précises, c'est à dire dans un tableau[6][6], mettre des données précises, je dois réspecter des conditions, - ce tableau doit comporter toute les nombres compris entre 0 et 17, mais mis dans le tableau de facon aléatoire!!!! -d'autre part dans ce tableau chaque chiffre compris entre 0 et 17 doit avoir son doublon, c'est a dire que dans le tableau on doit avoir 2fois 17, 2 fois 16 ect jusqu'a 0...., j'ai pasmal chercher et j'ai fai un pti programme mais qui ne fait pas tout ce que je veux, merci d'avance de votre aide!!!! bonnes fetes a tous le code.c #include <stdio.h> #include <stdlib.h> #include <time.h> #define TAILLE_TAB 18 int main () { int tabaffichage[6][6]; int tab[TAILLE_TAB] = { 0 }; int i, k,l,x,c,nb ,tmp; c=0; nb=0; /* Initialise le tableau */ for ( i=0 ; i<TAILLE_TAB ; i++ ) { tab[i] = i; } /* Generation aleatoire */ srand(time(NULL)); for ( k=0 ; k<6 ; k++ ){ for ( l=0 ; l<6 ; l++ ){ for ( i=0 ; i<TAILLE_TAB ;i++ ) { x =rand()%(TAILLE_TAB); /* On permute les valeurs du tableau */ tmp = tab[i]; tab[i] = tab[x]; tab[x] = tmp; } tabaffichage[k][l]=tab[x]; c++; printf("%d ",tabaffichage[k][l]); if (c==6) {printf("\n"); c=0; } } } return 0; }
|
|
dimanche 28 décembre 2008 à 00:14:34 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions

ciberrique
|
Réponse acceptée !
J'ai pas le temps de te faire un code mais moi j'aurais procédé comme ca : 1. int tabaffichage[6][6]; 2. creation d'une liste simplement chainé avec tout les chiffres a mettre dans tabaffichage (0,1,2...17,0,1,2,....,17) soit 36 cellule 3. pour i =0 à i<6, i++ pour j = 0 à j<6, j++ a = rand() % longueurdelaliste tabaffichage[i][j] = liste(a); suppression de l'element numero a de la liste fin pour fin pour A la fin de cette boucle ton tableau tabaffichage dois etre remplis avec les nombres qu'il faut ainsi que les doublons. www.e-fitz.comEncore plus de sources et de tutoriels.
|
|
dimanche 28 décembre 2008 à 00:33:34 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions

lglandeur
|
Réponse acceptée !
Bonjour, l'idée et d'initialisé ton tableau a zéro, puis après on choisi une position aléatoire dans le tableau pour les 36 valeur en vérifiant si la case du tableau n'est pas déjà utilisé. voila le code que je te propose:
#include <stdio.h> #include <stdlib.h> #include <time.h>
int main(void) { int tabaffichage[6][6]; int i, j, k; for(i=0; i<6; i++) { for(j=0; j<6; j++) tabaffichage[i][j] = 0; } srand(time(NULL)); for(k=2; k<36; k++) { while(tabaffichage[i=rand()%6][j=rand()%6]); tabaffichage[i][j] = k/2; } for(i=0; i<6; i++) { for(j=0; j<6; j++) { printf("%d ", tabaffichage[i][j]); if(tabaffichage[i][j] < 10) printf(" "); } printf("\n"); } return 0; }
|
|
dimanche 28 décembre 2008 à 15:28:16 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions

snakers07
|
merci beaucoup de votre aide, je ne voyez pas comment faire mais tous s'éclaire maintenant!!!! à la prochaine merci encore bonnes fêtes
|
|
dimanche 28 décembre 2008 à 18:21:48 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions

snakers07
|
rebonjour, maintenant que j'ai mon pti tableau trier aléatoirement, seriez-vous comme on fait pour faire le lien avec un tableau de surface en SDL, c'est a dire que plateau [i][j] correspond a une surface en sdl,afin qu'il puisse y afficher une image, en bref: si j'appuis sur entrée, et plateau[i][j]= 7 alors il me charge l'image 7 je sais c'est pas trés bien expliquer!!!! j'espere que quelque me comprendra.... merci d'avance
|
|
dimanche 28 décembre 2008 à 21:20:57 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions
|
mardi 30 décembre 2008 à 11:45:19 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions

snakers07
|
bonjour, c'est encore moi, j'aurai besoin d'aide, car en faite, les explications sur le tableau que tu m'as fournit, m'ont permis de créer, un jeu de mémoire, maintenant je possede quelque base en sdl j'aurai aimer faire son affichage en sdl, si quelq'un pourrait m'aider? j'ai fait l'affichage du fond avec la gestion des évenement, mais je ne vois pas comment creer un lien avec le jeu creer en langage c.... MERCI d'avance de vos réponses!!!!
|
|
mardi 30 décembre 2008 à 14:17:04 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions

ciberrique
|
Je te propose d'ouvrir un nouveau post pour ce nouveau probleme car il ne correspond plus au sujet initial. Toutefois je comprends toujours pas ce que tu demandes essaye de preciser dans le nouveau post et peut etre que quelqu'un te repondra. www.e-fitz.comEncore plus de sources et de tutoriels.
|
|
jeudi 1 janvier 2009 à 18:59:08 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions

snakers07
|
bonjour, voila j'ai fait un petit truc à moi, mais cela ne tri pas bien, tout marche sauf , il y a toujours 2 valeurs qui ne sont pas en double dans mon tableau!!,lors de l'éxécution je veux un tableau de 36,ou chaque case doit etre comprises entre 0 et 17 ainsi que ces doublons, ma ça marche pas j'ai un probleme avec le 0 (je crois ) donc si quelqu'un sait d'ou viens l'erreur, merci d'avance de vos réponses!!!! bonnes fêtes
voici le code.c
//FONCTION INITTABS
void inittabs(int pos[6][6]) { //Declaration des variables int i,j; //itérateurs //Initialisation de pos[][] et de retourne[][] a "0" //Les tableaux position[][] et estretourne[][] auront les valeurs de toutes leurs cases à 0 for(i=0;i<6;i++) { for(j=0; j<6; j++) { pos[i][j] = 0; } } }
//FONCTION INITVALEUR
void initvaleur (int val[36]) { int i,j; //Cette fonction rempli un tableau annexé de 0 à 35 (36 cases) avec des //valeurs de 0 à 17, chaque numéro de 0 à 17 sera en double for (i=0; i<17; i++) { //les annexes 0 à 17 prennent les valeurs de 0 à 17 val[i]=i; } for (i=17; i<36; i++) { //les annexes 18 à 35 prennent les valeurs de 0 à 17 val[i]=i-17; } }
void initposition (int val[36], int pos[6][6]) //Cette fonction affecte a chaque case du tableau(36) une valeur aleatoire entre 0 et 17 //Chaque valeur sera en double. { //Déclaration des variables int i, j, k, l; int repet, nombre;
//Les 2 boucles "pour" parcours //le tableau pour lui affecter, dans chacune de ses cases, une valeur aléatoire for(i=0;i<6;i++) { for(j=0; j<6; j++) { repet = 0; //affectation d'un nombre aléatoire entre 1 et 36 a 'nombre' nombre =rand() % 36;
//Les 2 boucles "pour" parcourent //le tableau pour vérifier si moins de 2 cases sont déja égales a la valeur de "nombre" for(k=0;k<6;k++) { for(l=0; l<6; l++) { //Dès que l'on trouve une case déjà égale à la valeur de "nombre", //on incrémente la variable "repet" if (pos[k][l]== val[nombre]) { repet++; }
} }
//affectation de la valeur de la carte //Si le nombre choisi est présent moins de 2 fois dans le tableau //On met ce nombre dans la case if (repet < 2) { pos[i][j]=val[nombre]; } //Sinon on décrémente la valeur de "j" pour pas que la case ne soit oubliée //et reste à la valeur 0 else { j--; }
} } }
void main() {
//Déclaration des variables int i,j; int valeur[36]; int position[6][6]; int estretourne[6][6]; srand(time(NULL)); //instruction nécessaire a l'appel de la fonction rand()
initvaleur(valeur); inittabs(position); initposition(valeur,position);
}
|
|
jeudi 1 janvier 2009 à 23:46:23 |
Re : initialiser un tableau avec des données aléatoires, tout en ayant des conditions

ciberrique
|
Bonsoir, deja ton rand() % 36 ca fait des valeurs de 0 et 35 car 36 % 36 = 0 donc mettre 37 ensuite si tu dois garder des affectations allant de 0 à 17 il est inutile de passer par un tableau d'affectation je te propose ci-dessous une version corrigé de ton code, j'ai changé la place de l'initialisation du generateur de nombre pseudo-aleatoire car je pense qu'il n'avait rien a faire dans le main.
#include <time.h> /* time */ #include <stdlib.h> void inittabs(int pos[6][6]) { //Declaration des variables int i,j; //itérateurs //Initialisation de pos[][] et de retourne[][] a "0" //Les tableaux position[][] et estretourne[][] auront les valeurs de toutes leurs cases à 0 for(i=0;i<6;i++) { for(j=0; j<6; j++) { pos[i][j] = -1; } } } void initposition ( int pos[6][6]) //Cette fonction affecte a chaque case du tableau(36) une valeur aleatoire entre 0 et 17 //Chaque valeur sera en double. { //Déclaration des variables int i, j, k, l; int repet, nombre; srand(time(NULL)); //instruction nécessaire a l'appel de la fonction rand() //Les 2 boucles "pour" parcours //le tableau pour lui affecter, dans chacune de ses cases, une valeur aléatoire for(i=0;i<6;i++) { for(j=0; j<6; j++) { repet = 0; //affectation d'un nombre aléatoire entre 1 et 36 a 'nombre' nombre =rand() % 18; //Les 2 boucles "pour" parcourent //le tableau pour vérifier si moins de 2 cases sont déja égales a la valeur de "nombre" for(k=0;k<6;k++) { for(l=0; l<6; l++) { //Dès que l'on trouve une case déjà égale à la valeur de "nombre", //on incrémente la variable "repet" if (pos[k][l]== nombre) { repet++; } } } //affectation de la valeur de la carte //Si le nombre choisi est présent moins de 2 fois dans le tableau //On met ce nombre dans la case if (repet < 2) { pos[i][j]=nombre; } //Sinon on décrémente la valeur de "j" pour pas que la case ne soit oubliée //et reste à la valeur 0 else { j--; } } } } int main() { //Déclaration des variables int i,j; int valeur[36]; int position[6][6]; int estretourne[6][6]; inittabs(position); initposition(position); return 0; }
J'ai testé le code que je te propose il fonctionne, mais je tiens a préciser que cette méthode est plus couteuse en processeur que la méthode que je t'avais conseillé au début même si ma méthode semble plus complexe à mettre en oeuvre.
J'ajouterai que si tu souhaite garder un tableau pour initialiser tes valeurs tu pourrais utiliser la fonction d'initialisation suivantes, elle est un peu plus lourde en processeur mais plus courte a l'ecris mais pour 36 valeurs je pense pas que ce soit un reel probleme :
void initvaleur (int val[36]) { for (int i=0; i<36; i++) val[i]=i % 37; } Voila j'espere que cela t'eclairera un peu.
www.e-fitz.com Encore plus de sources et de tutoriels.
|
|
Cette discussion est classée dans : données, tableau, tab, for, initialiser
Répondre à ce message
Sujets en rapport avec ce message
Problem Affichage de mon Tableau [ par Orezza ]
salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le
tableau a 2 dim [ par Kevin972 ]
salut a tous!!g un probleme pour passer en parametre un tableau a 2 dimensions:fonction1(void){ float tab[400][400];............ fonction(tab);}fo
Tableau à 2 dimension [ par manta7 ]
Salut, depuis je sais pas combien de temps je galere juste pour passer un tableau a deux dimensionsVoici mon code,#include void tablo(char [][10]); m
tableau [ par imanedaoudi ]
Salut,Je veux récuperer le tableaux triée sans faire return, avec ce programme je recupere le tableau non trier ,comment faire pour recuperer le tab t
problème avec l'initialision d'un tableau [ par khen ]
Bonjour,voila j'ai un petite problème avec l'initialisation de mon tableau , je vous explique le problèmeon a un tableau de 3 dimension appelé tab et
Initialiser un tableau a deux dimensions a données aléatoire [ par lil_adriano ]
Salut tous le monde.j'ai un petit problème avec mon programme. Je voudrais initialiser un tableau a deux dimension mais avec des données précise.C'est
triage du tableau [ par devamos ]
bonsoir,s'il vous plait mes freres j'ai écri un petit programme qui tri un tableau de maniere croissante mais il ne veux plus marcher,,,,j'aimerais qu
aide sur un prog [ par jsuititidu27 ]
Bonjour, j'ai besoin d'un petit coup de main. ceci est un exo qui demande d'écrire un programme de tri de chaines de caractères. J'ai donc écrit le co
tableau [ par ngabou98 ]
bonjour à tous c'est encore moi svp j'ai besoin de votre aide je travaille sur la méthode de simplification d'une fonction booléene par la méthode de
remplir les cases paires d'un tableau 2d [ par canaille68 ]
Bonjour,je galere avec 2 tableaux 2Dun tableau tab de taille n, et un tableau newtab de taille N=2n-1j'aimerais remplir le tableau newtab avec les val
Livres en rapport
|
Derniers Blogs
[TECHDAYS 2010] #03 - WEB CONTENT MANAGEMENT SOUS SHAREPOINT 2010[TECHDAYS 2010] #03 - WEB CONTENT MANAGEMENT SOUS SHAREPOINT 2010 par pierre
Stephane Cordonnier de MCNext nous présente les fonctionnalités Web Content Management (WCM) sous SharePoint 2010. Qu'est-ce que le WCM ECM, GED, RM, WCM c'est quoi Plateforme SharePoint Versions SharePoint 2010 SharePoint Fondation...
Cliquez pour lire la suite de l'article par pierre [DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE par tja
C'est le dernier principe des principes du Design Orienté Objet (The Principles of Object Oriented Design) fondés par Robert C. Martin plus connu sous le pseudonyme d'Uncle Bob.
l'image empruntée de LosTechies.
Je ne traite pas les principes dans...
Cliquez pour lire la suite de l'article par tja TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante
Forum
CARTE GOOGLECARTE GOOGLE par ja92
Cliquez pour lire la suite par ja92 RE : WIN APIRE : WIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|