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é
- Comment générer un qr code - Guide
- Chaine radio - Télécharger - Médias et Actualité
- 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