begin process at 2012 05 29 12:17:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Maths

 > 

générer toutes le combinaisons possibles d'une chaîne de caractères


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

générer toutes le combinaisons possibles d'une chaîne de caractères

mardi 30 mars 2010 à 19:22:01 | générer toutes le combinaisons possibles d'une chaîne de caractères

tuvistavie1989

Bonjour !

Je suis étudiant et je débute en programmation ... Je voudrais en fait créer un programme pour trouver un mot en générant toutes les combinaisons possibles de l'alphabet ( connaissant la longueur du mot évidemment )et ensuite les tester par rapport au mot rentrer par l'utilisateur.

Je pense que ca peut se réaliser avec autant de boucles que de caractères. Mais le programme peu prendre des mots de plusieurs tailles ( jusqu'à milles ).

On m'a dit que c'était possible avec une fonction récursive mais je n sais pas bien comment m'y prendre

Si je pouvais avoir une petite piste pour me lancer ce serait génial.

Merci d'avance ...
mercredi 31 mars 2010 à 01:01:59 | Re : générer toutes le combinaisons possibles d'une chaîne de caractères

Chouchou182

Salut,

Pensons «récursif».

Imaginons un alphabet de deux lettres seulement, A et B.

Énumérer tous les mots de longeur n, c'est énumérer tous les mots commençant par la lettre A et dont la suite est de longueur (n-1) puis énumérer tous les mots commençant par la lettre B et dont la suite est de longueur (n-1).

Énumérer tous les mots de longueur zéro, c'est facile !

Ainsi, on peut, par exemple, écrire le code qui suit (ocaml, naïf):

[code]
let rec enum_aux : string -> int -> string list =
fun dbt -> function
| 0 -> [dbt]
| n -> enum_aux (dbt ^ "A") (n-1)
@ (enum_aux (dbt ^ "B") (n-1))

let enum : int -> string list =
enum_aux ""
[/code]

Ça semble marcher pour les mots jusqu'à (chez moi) 18 lettres: la pile de récursivité est pleine.

Qu'à cela ne tienne, virons la récursivité. Et ce-faisant, apprenons à compter.

En décimal.

D'abord, le chiffre des unités: 0, 1, 2... 9
Quand on a trop d'unités, on remet ce chiffre à zéro, et on incrémente le chiffre des dizaines: 1-0. Et on recommence: 1-1, 1-2,..., 1-9, 2-0,..., 9-9
Quand c'est le chiffre des dizaines qui est «plein» à son tour, c'est les centaines que l'on incrémente, et on revient aux unités.
Etc.

Ce qui peut donner, en C:

Code C/C++ :
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>

enum alphabet {
  A,
  B,
  FIN
};

const
char char_of_alphabet[FIN] =
{ 'A', 'B' };

void
print_mot(enum alphabet *mot)
{
  while(*mot != FIN)
    printf("%c", char_of_alphabet[*mot++]);
  printf("\n");
}

int
enum_mots(size_t len)
{
  enum alphabet *mot;

  if (len == 0)
    return 0;

  mot = malloc((len + 1) * sizeof(*mot));
  if (mot == NULL)
    return 1;

  memset(mot, A, len);
  mot[len] = FIN;

  size_t i = 0;
  while (i < len)
  {
    print_mot(mot);
    ++ (*mot);
    i = 0;
    while (mot[i] == FIN && i < len)
    {
      mot[i++] = A;
      ++(mot[i]);
    }
  }
  free(mot);

  return 0;
}

int
main(int argc, char *argv[])
{
  int res = enum_mots(argc-1);

  if (res != 0)
    perror("Échec");

  return res;
}


NB: ce calcul est par essence de complexité exponentielle (base: taille de l'alphabet, exposant: longueur du mot); il y a peut-être une manière plus efficace d'arriver à ses fins...

Bonne prog,
--
Chouchou.
jeudi 27 mai 2010 à 10:04:08 | Re : générer toutes le combinaisons possibles d'une chaîne de caractères


Cette discussion est classée dans : générer, mot, caractères, combinaisons, possibles


Répondre à ce message

Sujets en rapport avec ce message

trouver les combinaisons possibles [ par zinou76 ] Bonjour tt le monde,je cherche un algorithme pour calculer et lister tt les combinaisons possibles de n éléments d'un ensemble E de x éléments tel que combinaisons possibles d'une liste [ par asmv ] bonjourje suis perdu, qui peut m'aiderquestion : comment lister toutes les combaisons possibles de 2 à 5 numeros d'une serie pouvant aller de 6 à 20la Tester toutes les combinaisons possibles [ par blue01 ] Bonjour tout le monde,  depuis un moment je cherche a pouvoir tester toute les possibilités de différentes combinaisons par exemple pour faire toute l comment recherecher un mot dans une chaine de caractères ?? [ par yosboss ] Salut à tous,je sollicite votre aide pour rechercher un mot dans un ensemble de chaine de caractère contenu dans un ficher ! Mot de passe en C [ par miudem ] Bonjour, J'ai réaliser une application en C, et je cherche à la sécurisé en mettant une barrière a l'entrée présenté par un mot de passe... Y-t-il un caractères arabe [ par zargooo04 ] Bonjours tous le monde, Je suis entrain de travailler sur un programme qui traduit une phrase arabe en fronçai. Et mon premier problème si de lire les Caractéristiques police de caractères : taille, largeur des caractères [ par lectpe ] Bonjour à tous. L'application que je suis en-train de réaliser doit pouvoir gérer le changement de la police d'écriture. J'ai utilisé EnumFonts pour [casse-tête]Lister toutes les combinaisons possibles sans ordre [ par willbill ] Salut à tous !Je cherche depuis ce matin l'algorithme qui permettrai de lister toutes les combinaisons possibles, sans ordre (c'est à dire que ABE équ Changer la police de caractères dans une fenêtre [ par Wildschwein ] Bonjour à tous,J'ai fait une petite application où tout le texte est en Arial, mais j'aimerais que le contenu d'une boite de dialogue de la fenêtre so Rnd -> générer un nombre au hasard [ par norton ] Bonsoir, j'ai besoin d'aide ;) Comment faire pour générer un nombre au hasard entre 1 et 80 ? avec vous un code pour m'aider svp.merci @++ Norton.


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,030 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales