Tableaux et C, aidez-moi!

Résolu
Signaler
Messages postés
11
Date d'inscription
jeudi 13 novembre 2008
Statut
Membre
Dernière intervention
28 mars 2012
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
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++
Messages postés
15187
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 novembre 2021
100
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...