éviter les répétitions

Fermé
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 - 30 juin 2016 à 13:28
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 - 11 juil. 2016 à 16:33
Bonjour, je fais un programme qui consiste à ouvrir un fichier texte et piocher au hasard des nombres : pas de problèmes je fais les boucles pour recommencer si il/elle veut retirer mais le problème est que cela fait des répétitions et je veut éviter ça ! Pouvez-vous m'aider s'il vous plaît ? Merci d'avance

1 réponse

hopelan Messages postés 95 Date d'inscription dimanche 12 juin 2016 Statut Membre Dernière intervention 16 janvier 2018 17
1 juil. 2016 à 14:06
Bonjour,
Si j'ai bien comprit, tu tire au hasard un certain nombre de nombres dans un fichier texte. Ce nombre de tirage étant définir par l'utilisateur. Seulement pour trouver une façon d'optimiser ton code, il faudrait peut-être que tu poste un morceau de ton fichier texte contenant les nombres. Comment sont séparés les nombres ? Y a-t-il autre chose que des nombres dans ce fichier ? Comment sont-t-ils encodés ?
0
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 5
5 juil. 2016 à 20:51
Si tu veut savoir mes nombres sont comme ça :
001
002
003
...
jusqu'a 999
Il n'y a rien d'autre que des nombre
je ne comprends pas quand tu dis "encodé"
désolé je ne pouvais pas répondre car je n'avais pas le wi-fi
0
hopelan Messages postés 95 Date d'inscription dimanche 12 juin 2016 Statut Membre Dernière intervention 16 janvier 2018 17 > Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018
Modifié par hopelan le 10/07/2016 à 00:58
Oui c'est une des choses que je voulait savoir.

Pour l'encodage, je pense que tes chiffres correspondent à des caractères ascii extended, encodés sur 8 bits (soit dans un char). Vu ces nombres sont tapés "manuellement" ou entrés depuis un string si je ne m'abuse. Ils auraient très bien pu être encodés sur 4 bits dans un int et écrits comme tel dans ton fichier.

Pour ton programme, tu devrait dans un premier temps lire le fichier et stocker ces nombres en mémoire via une fonction :
readNumbers(const std::ifstream& file, std::vector<int>& numbers) // file en entrée et numbers en sortie
{
    readNumbers(file, numbers, 3);
}

readNumbers(const std::ifstream& file, std::vector<int>& numbers, int charsByNumber) // et sa surcharge qui définit le nombre de caractères dans un nombre
{
    char tmp_char;
    std::string number;
    
    int i = 0; // un char peut aussi convenir pour économiser de la mémoire, à modifier également dans les paramètres de la fonction
    while(file.get(tmp_char))  // tant qu'il reste des caractères
    {
        if(i < 3)
        {
            number += tmp_char;
            i++;
        }
        else
        {
            numbers.push_back(std::stoi(number)); // pour convertir la chaîne en nombre et l'ajouter au vector.
            i = 0;
        }
    }
}


Après, il suffit de faire une boucle du genre :


// debut du programme

vector<int> numbers;
readNumbers(file, numbers);

// ...

do
{
    int number = algoTirageNombreAlea(numbers); // on tire un nombre de manière aléatoire dans le vector

    // Traitement du nombre
    // ...

} while(fautIlContinuer());

// fin du programme

0
Dark_another Messages postés 366 Date d'inscription mardi 28 juin 2016 Statut Membre Dernière intervention 18 mars 2018 5 > hopelan Messages postés 95 Date d'inscription dimanche 12 juin 2016 Statut Membre Dernière intervention 16 janvier 2018
11 juil. 2016 à 16:33
d'accord je vais essayer de suite
0