Se connecter / S'enregistrer
Votre question

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

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
15 Avril 2007 15:47:11

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.

Autres pages sur : integrer tableau generer aleatoirement

15 Avril 2007 16:05:55

Citation :

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

Avec des boucles, et la fonction rand, je pense bien!
15 Avril 2007 16:29:49

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?
Contenus similaires
15 Avril 2007 17:04:04

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=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.
15 Avril 2007 18:15:42

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).
15 Avril 2007 18:30:39

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.
15 Avril 2007 20:38:18

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

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?
15 Avril 2007 22:19:56

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!
16 Avril 2007 08:52:03

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: ....
[..]
16 Avril 2007 20:56:51

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. Si i vaut 1, mon programme prendra le tableau tab2[2][2].
C'est ce code que j'ai éssayé d'écrire plus haut.
17 Avril 2007 14:23:53

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:
  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
17 Avril 2007 22:25:56

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.
17 Avril 2007 22:30:02

.. 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) }
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS