Tom's Guide > Forum > Programmation > Intégrer un tableau générer aléatoirement en C

Intégrer un tableau générer aléatoirement en C

Forum Programmation : Intégrer un tableau générer aléatoirement en C

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Je suis débutant en programmation ce qui fait que pour l'instant je me contente de faire des programmes en fenêtre DOS.

Je voulais savoir comment faire pour générer aléatoirement un tableau. J'ai en fait deux questions qui, dans ce cas-ci, se lient assez bien.
Il faut savoir que je sais assez bien m'en sortir quand il s'agit de faire des tableaux ou de les manipuler (comme par exemple faire des rotations). Donc je ne cherche pas à savoir comment faire des tableaux.

Je voudrais donc savoir comment générer un tableau aléatoirement. Si je veux générer des tableaux aléatoirement des tableaux, je suppose que je devrais au préalable les initialiser dans un fichier et là aussi je ne sais pas comment faire.

Si vous pouviez aussi me dire comment l'intégrer à un autre tableau (plus grand évidemment), ça serait génial.

Merci d'avance pour réponde à ces quelques petits problèmes.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Citation :


Je voudrais donc savoir comment générer un tableau aléatoirement.


Avec des boucles, et la fonction rand, je pense bien!

Répondre à Rakipu

Merci pour la réponse rapide

La fonction rand va donc gérer aléatoirement mes tableaux, ça OK.
Pour cela, je suppose que je vais devoir faire des tableaux appelé tab1, tab2,... Et que je devrais ensuite dir à ma fonction de s'occuper de ces tableaux là. Mais là, je suis face à un problème: Comment indiquer à la fonction rand que ce sont ces tableaux là qu'elle doit génrer?

Répondre à alphenix

Je dois avouer que j'éprouve des difficultés à comprendre le problème.

Un exemple:
tu prends un tableau, tab1[]. Pour que ce soit plus simple, on va le prendre à une dimention, avec taille fixe, disons 10.

Tu fais une boucle for
srand(time(NULL));//Initialiser le générateur, à faire une fois dans le programme


for(i=0;i<10;i++)
{
tab1[i]=rand(); //Pour avoir un nombre entre 0 et RAND_MAX, voir man 3 rand pour plus d'info

}

rand() génère un nombre aléatoire, je ne connais pas de fonction C qui génère directement un tableau.

Répondre à Rakipu

Si j'ai bien compris bien compris, ta fonction va généré un nombre aléatoire pour chaque "case" du tableau.

Mais au vu de ta première phrase, je crois bien que je me suis mal exprimé sur mon problème. En fait, j'aurait au préalable créé des tableaux et je voudrais que mon programme choisissent un tableau au hasard parmis ceux que j'aurais déjà créé. Et ensuite, je voudrais l'intégrer à un autre tableau (masi ça c'est un autre problème).

Répondre à alphenix

Citation :


Mais au vu de ta première phrase, je crois bien que je me suis mal exprimé sur mon problème. En fait, j'aurait au préalable créé des tableaux et je voudrais que mon programme choisissent un tableau au hasard parmis ceux que j'aurais déjà créé. Et ensuite, je voudrais l'intégrer à un autre tableau (masi ça c'est un autre problème).


Tes tableaux, tu peux les mettre dans un autre tableau (un tableau de tableaux...), et puis tu choisis l'index au hasard; pour l'intégration, ça dépend de ce que tu veux faire.

Répondre à Rakipu

Merci pour l'aide que tu m'apportes.

Pour faire le tableau de tableaux, il faut initialiser chaque tableau, puis faire:

int tab[n]; //où n est le nombre de tableaux
for (int i=0;i<n;i++)
cin>>tab[i]

Je suppose que c'est ça. Ca donnera:
tab[0]=tab1[4]
tab[1]=tab2[4]
....
J'aurais au préalable dit ce que valait tab1[4], tab2[4],...
Est-ce comme ça qu'il faut faire.

Pour la gestion aléatoire, il faudra demander au programme de choisir un valeur au hasard pour une variable i et on aura ainsi le tableau se trouvant dans tab[i]?

Répondre à alphenix

Faut que tu déclares un tableau de int * (un tableau de pointeurs vers des entiers, donc un tableau de tableau d'entiers.), ou alors faire un tableaux à plusieurs dimensions.

int * tab[n]; //ou plus simple, int tab[nombre_de_tableaux][taille_d'un_tableau];

Ensuite, je comprends pas trop ce que tu fais.

EDIT:
Messages sur le forum : 1337
1 4m 1337!


Message édité par Rakipu le 15-04-2007 à 22:22:35
Répondre à Rakipu

salut,
Reprends plus clairement la finalité de ce que tu veux faire.

Ce qui se concoit bien, s'énonce clairement, à la base de l'algorithmique, il vaut mieux savoir ce que tu veux obtenir, sinon ce sera le grand n'importe quoi!


Expliques point par point ce que tu veux, plutôt que de jargonner :)
1: ....
2: ....
[..]

Répondre à elendilm

Comme me l'a conseillé elendilm, je vais énoncer mon problème point par point.

1: Je veux d'abord créer un série de tableau de taille similaire (tab1[3][3], tab2[3][3],...).
2: Je veux ensuite que mon programme en sélectionne un au hasard.
3: Je veux ensuite que mon programme l'intègre dans un autre tableau plus grand.

Pour ce qui est de l'idée de Rakipu, je ne comprends pas très bien comment utiliser le pointeur dans ce cas-ci.
Au début, j'étais parti sur ton idée. C'est-à-dire créer un tableau de tableau. Donc, j'initialisais d'abord mes tableaux (tab1[2][2], tab2[2][2],...) puis je les mettais dans un autre tableau. Ce qui me donnerait le tableau suivant: tab[n] où n est le nombre de tableau parmi lesquels mon programme pourra choisir.
Donc, j'indique que tab[0]=tab1[2][2], tab[1]=tab2[2][2],.... Mon programme choisira une valeur pour i et me sortira le tableau se trouvant dans tab[i]. Si i vaut 1, mon programme prendra le tableau tab2[2][2].
C'est ce code que j'ai éssayé d'écrire plus haut.

Répondre à alphenix

déjà:

tab1[3][3] est un tableau de la forme
tab
0 :[ ] [ ] [ ]
1 :[ ] [ ] [ ]
2 :[ ] [ ] [ ]
(une matrice donc).
idem pour tab 2, tab3 .....

Donc un seul tableau de cette forme suffit.
donc, tu ne déclare qu'un seul tableau (d'entiers pour cet exemple).
int tab[3][3];
Attention, tous les compilateurs (un tant soit peu ancien) n'acceptent pas forcément ce genre de déclarations. Dans ce cas, il faudra passer par des malloc.

Donc, tu déclares ton tab[3][3].
Pour accéder aléatoirement à une ligne du tableau, effectivement la fonction rand
Donc
//initialisation des fonctions de génération
srand ( time(NULL) );
// Génération d'un nombre aléatoire en 1 et 3
// Pour obtenir entre 0 et 2, tu fais rand() % 3
int nb= rand() % 3 + 1;

Donc dans ton nb, tu auras ta valeur aléatoire entre 0 et 2 ( 0 et 2 donne 3 de longueur, donc je m'adapte à la taille de ton tableau!)

Imaginons:
tab[3][3] = { 0, 1, 2,
3, 4, 5,
6, 7 ,8 };

0 1 2 sera en tab[0][0/1/2]
3 4 5 sera en tab[1][0/1/2]
6 7 8 sera en tab[2][0/1/2]
ok?
donc ton tableau plus grand, tab_final[1024]

tu accéde à ce tableau final par une boucle.
ton nb contient ton nombre aléatoire entre 0 et 2
for (int cpt = 0; cpt < 3 ; cpt++)
tab_final[cpt]=tab[nb][cpt];

résultat:

Code :
  1. #include <stdlib.h>
  2.   #include <time.h>
  3.   int main()
  4.   {
  5.     int cpt;
  6.     int tab_final[1024];
  7.     srand ( time(NULL) );
  8.     int nb= rand() % 3 ;
  9.     int tab[3][3] =
  10.     {
  11.       0, 1, 2,
  12.       3, 4, 5,
  13.       6, 7 ,8
  14.     };
  15.     for( cpt = 0; cpt < 3; cpt++)
  16.     {
  17.         printf("Val%d :%d\n",cpt,tab[nb][cpt]);
  18.         tab_final[cpt]=tab[nb][cpt];
  19.     }
  20. }


(ps: gcc rand.c :) )
A l'exécution:

Citation :


[manuel@manulinux src]$ ./a.out
Val0:3
Val1:4
Val2:5
[manuel@manulinux src]$ ./a.out
Val0:3
Val1:4
Val2:5
[manuel@manulinux src]$ ./a.out
Val0:3
Val1:4
Val2:5
[manuel@manulinux src]$ ./a.out
Val0:3
Val1:4
Val2:5
[manuel@manulinux src]$ ./a.out
Val0:0
Val1:1
Val2:2
[manuel@manulinux src]$ ./a.out
Val0:0
Val1:1
Val2:2
[manuel@manulinux src]$ ./a.out
Val0:3
Val1:4
Val2:5
[manuel@manulinux src]$ ./a.out
Val0:3
Val1:4
Val2:5
[manuel@manulinux src]$ ./a.out
Val0:6
Val1:7
Val2:8


Message édité par elendilm le 17-04-2007 à 14:25:27
Répondre à elendilm

Merci pour ton code.
Mais je voudrait qu'au lieu de me sortir un chiffre se trouvant dans le tableau, il me sorte un autre tableau. Donc dans ce cas-ci, mon tableau ne devra pas être de deux dimensions (donc une matrice) mais de une seule dimension (donc un vecteur).
Donc mon tableau:
V[3]= {tab1, tab2, tab3}.
Donc je voudrait que ma fonction rand parcourt mon tableau V pour sélectionner un des tableaux qu'il contient (ces denier sont d'ailleur des tableau3*3).
Mais je ne sais pas comment dire à mon programme que:
V[0]=tab1[3][3]
....
Quand, je met ça, mon compilateur m'indique que c'est impossible. Je suppose que je doit utiliser l'idée de Rakipu et utiliser des pointeurs. Mais je ne sais pas comment utiliser les pointeurs dans ce cas-ci. En fait, je ne suis pas très à l'aise avec les pointeurs et j'espère qu'avec ce programme je pourrais m'habituer un peu plus avec ces derniers.

Répondre à alphenix

.. attend, je crois comprendre ce que tu veux.

Tu veux extraire une matrice d'un tableau de matrice ...

tjrs tab1[3][3]
tjrs tab2[3][3]
tjrs tab3[3][3]

et donc v[3]={tab1 (3,3),tab2(3,3), tab3(3,3) }


Message édité par elendilm le 17-04-2007 à 22:33:23
Répondre à elendilm
Tom's Guide > Forum > Programmation > Intégrer un tableau générer aléatoirement en C
Aller à :

Il y a 2480 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens