Tableaux et C, aidez-moi!

Résolu
phenix22000 Messages postés 11 Date d'inscription jeudi 13 novembre 2008 Statut Membre Dernière intervention 28 mars 2012 - 1 avril 2009 à 00:14
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 1 avril 2009 à 10:57
Bonsoir à tous,
quelqu'un peut-il m'aider pour m'expliquer comment savoir si un tableau contient déjà des éléments si on l'incrémente petit à petit...
Je m'explique:
Je génère des nombres aléatoires entre 0 et m (entier), que je rentre dans un tableau de taille n...ceci dit, il faut que les nombres générés n'apparaissent qu'en un seul exemplaire dans le tableau...
Cela fait plusieurs heures que je ne trouve pas, s'il vous plait, donner moi des tuyaus ;)

Voici mon code (et ma solution, fausse bien entendu..., il y a un peu de c++ aussi)
Merci de votre aide ^^

#include <cstdlib>
#include
#include <stdlib.h>
#include <string>
#include <time.h>

using namespace std;

const int n1 = 8;
const int n2 = 10;

int main(int argc, char *argv[])
{
    int t1[n1], t2[n2], m,i,j,t[n1];
        
    printf("Veuillez saisir un entier \n");
    cin>>m;
    

srand(time(NULL));
rand();

t1[0]=int(((double)(rand())/RAND_MAX)*m+1);
t[0]= t1[0];

                          
    
       for(i=1;i<n1;i++){
               t[i]=int(((double)(rand())/RAND_MAX)*m+1);      
                         for(j=0;j<n1;j++){
                                    if (t1[j]=t[i])
                                    do{ t[i]= int(((double)(rand())/RAND_MAX)*m+1);
                                    }
                                    while(t1[j] =t[i]);
               
                                     }
                                    t1[i]=t[i];
                  }          
                  

            for(i=0;i<n1;i++){
            printf(" t[%d] = %d \n",i,t[i]);
                 }
            for(i=0;i<n1;i++){
            printf(" t1[%d] = %d \n",i,t1[i]);
                 }
    
    system("PAUSE");
    return EXIT_SUCCESS;

}

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 avril 2009 à 10:57
void AleaUnic(int *ptab, int n)
{
  int v, i, pos;
  ptab[0] = rand();
  if(n < 2) return;
  pos = 1;
nextRAND:
  v = rand();
  i = pos - 1;
  do {
    if(ptab[i] == v) goto nextRAND;
  } while(--i >= 0);
  ptab[pos] = v;
  if(++pos < n) goto nextRAND;
}

ciao...
BruNews, MVP VC++
3
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
1 avril 2009 à 09:59
Hello,
J'ai pas trop compris le code (le nom des variables n'est pas super explicite). En gros, voici l'algo:

- faire autant de fois que nécessaire
  - génération d'un nombre aléatoire
  - initialiser un booléen de recherche à faux
  - tant que le booléen est faux, faire
    - prendre un élément tu tableau
    - le comparer au nombre généré
    - si c'est égal
      - booléen = vrai
    - sinon
      - prendre le prochain élément
  - fin tant que
  - si booléen est faux, ajouter le nombre généré au tableau
- fin faire

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous