Générer une chaine correctement parenthésée
Résolu
Theo_0055
Messages postés
273
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
On m'a donné cet algorithme et on me demande de le traduire en C, sauf que c'est un peu difficile :
p = PileVide()
tant que non Vide(p)
choisir entre:
{ c est une parenthèse ouvrante }
c = parenthèse ouvrante
Empiler(p , c)
c est une parenthèse fermante }
si non Vide(p) alors
c = parenthèse fermante correspondant à Sommet(p)
Dépiler(p)
{ c est un caractère peu importe}
c = caractère qui n'a pas de parenthése
afficher c
... dans lequel :
- PileVide est une fonction qui crée une pile vide ;
- Vide est une fonction qui renvoie true si et seulement si la pile est vide.
Voici par exemple des résultats valides :
(a(bvcbn))
(aevvjbb(er(yhh)))
Je ne sais pas si l'algorithme qu'on m'a donné est complet, car je ne vois pas comment il peut de générer une chaîne bien parenthésée.
Voici mes idées :
- Pour l'histoire de choisir, ça me rappelle switch(..) en C
- Pour générer un texte aléatoirement je crois qu'on peut faire :
char chaine = "abcdefghijklmnopqrstuvwxyz"; char chaine aleatoire[26] = " "; chaine aletatoire = chaine[rand() % 26];
A voir également:
- Générer une chaine correctement parenthésée
- Chaine tnt gratuite sur mobile - Guide
- Generer mot de passe - Télécharger - Sécurité
- Chaine radio - Télécharger - Médias et Actualité
- Comment générer un qr code - Guide
- Plus de chaine tv - Guide
25 réponses
@whismeril et @Dal j'ai fait ceci:
void empiler(PileCaractere *p, char x) { p->tab[p->n] = x; p->n = p->n + 1; } char depiler(PileCaractere *p) { p->n = p->n - 1; return p->tab[p->n]; } char sommet(PileCaractere *p) { return p->tab[p->n - 1]; } char ouvrante_to_fermante(char ouvrante) { if (strcmp(ouvrante,'(') == 0) return ')'; else if (strcmp(ouvrante,'{') == 0) return '}'; else if (strcmp(ouvrante,'[') == 0) return ']' } void generer_texte_bien_parenthese() { char chaine[26] = "abcdefghijklmnopqrstuvwxyz"; char ouvrant[3] = "({["; PileCaractere p = PileVide(&p); char random_ouvrant = ouvrant[rand() % 3]; empiler(&p, random_ouvrant); while(!est_vide(&p)) { enum type_de_caractere suivant = rand() % 3; switch (suivant) { case Ouvrante: empiler(&p, random_ouvrant); printf("%c", random_ouvrant); break; case Fermante: char fermante = ouvrante_to_fermante(sommet(&p)) printf("%c", fermante); break; case Quelconque: c = chaine[rand() % 26]; printf("%c", c); break; } } }
Ah ouais j'ai oublié d'écrire :
depiler(&p, sommet(&p));
Bonjour Theo_0055 : Si tu as les réponses à toutes tes questions, peux-tu basculer ton sujet en résolu ? Sinon indique-nous les questions encore en suspens.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question