IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Alterner voyelle et consonne


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut Alterner voyelle et consonne
    Salut a tous,

    Je dois réaliser une fonction qui permet d'alterner des voyelles et des consomme toutes les combinaisons possible mais dans ma fonction je bloque c'est un début de fonction que j'ai fais en cour.

    exemple d'affichage "abecid"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
     
     
    char tab_c[50];
    int tab[50];
    int n = 6;
     
     
    void affiche_tab_char()
    {
        int i;
        for(i=0; i<n; i++)
        {
            printf("%c", tab_c[i]);
     
        }
         printf("|");
    }
     
    int voyelle(char c)
    {
        //toupper : conversion en majuscule.
        int c2 = toupper(c);
     
        /*
        les voyelles : a e i o u Y
        les consonnes : b c d f g h j k l m n p q r s t v w x z
        */
     
        if(c2 == 'A' || c2 == 'E' || c2 == 'I' || c2 == 'O' || c2 == 'U' || c2 == 'Y')
        {
            return 1;
        }
        return 0;
    }
     
    void explorer(int i)
    {
        if(i == n)
        {
            affiche_tab_char();
        }
        else{
            char c;
            for(c='a'; c<='z'; c++)
            {
                if(i>0 && ((voyelle(tab_c[i-1]) && voyelle(c)) || (!voyelle(tab_c[i-1]) && !voyelle(c) )))
                {
                    continue;
                    tab_c[i] = c;
                    explorer(i+1);
                }
            }
        }
    int main()
    {
        explorer(0);
        printf("\n\n");
        return 0;
    }
    Si quelqu'un avait une idée de comment afficher toutes les combinaisons possible sa serait sympa !

    Merci encore de l'aide.

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Double boucles for imbriquées sur chaque tableau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (i = 0; i < taille(tab1); i++)
    {
      for (j = 0; j < taille(tab2); j++)
        printf("Consonne : %c, Voyelle : %c\n", tab1[i], tab2[j]);
    }
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 868
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(c2 == 'A' || c2 == 'E' || c2 == 'I' || c2 == 'O' || c2 == 'U' || c2 == 'Y')
    Pas très beau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char c[] = "AEIOUY";
     
    for (int i = 0; c[i] && c2 != c[i]; ++i);
    return c[i] != 0;

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    Citation Envoyé par imperio Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(c2 == 'A' || c2 == 'E' || c2 == 'I' || c2 == 'O' || c2 == 'U' || c2 == 'Y')
    Pas très beau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char c[] = "AEIOUY";
     
    for (int i = 0; c[i] && c2 != c[i]; ++i);
    return c[i] != 0;
    Merci de vos réponse rapide j'avais une question,

    Dans ma fonction voyelle j'ai modifier en fonction de votre réponse, mais sa m'affiche toujours pas les combinaison possible de voyelle et de consonne.

    Ce que j'aurais aimé afficher c'est un exemple de ce type, c'est la dessus que je bloque

    abecid
    ...
    zaexiw

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    Citation Envoyé par Metalman Voir le message
    Double boucles for imbriquées sur chaque tableau ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (i = 0; i < taille(tab1); i++)
    {
      for (j = 0; j < taille(tab2); j++)
        printf("Consonne : %c, Voyelle : %c\n", tab1[i], tab2[j]);
    }
    Merci pour la réponse rapide,

    En fait dans mon cas c'est un peux spécial car je dois afficher toute les combinaison possible, alterner de voyelle et de consonne

  6. #6
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Tu veux afficher toutes les combinaisons possibles "Consonne+Voyelle" ?
    Comme :
    bacadafa.... jusqu'à xyzy ?

    Enfin si tu as un exemple, cela m'aiderait à comprendre exactement ce que tu veux


    EDIT : Merci kwariz, j'avais pas vu l'exemple plus haut ! xD
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  7. #7
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par Zouti Voir le message
    [...]
    Ce que j'aurais aimé afficher c'est un exemple de ce type, c'est la dessus que je bloque

    abecid
    ...
    zaexiw
    bonjour,
    si je décode ton exemple tu essayes d'afficher en ordre lexicographique les permutations de 6 lettres sans répétition qui alternent voyelles et consonnes, c'est ça ? Dans ce cas le dernier élément serait plutôt zyxuwo ?

    À moins que ton erreur sur le dernier élément soit azexiw ? là l'ordre n'est plus lexicographique .. mais, en commençant l'inidiçage des rangs à 0, avec la contrainteque les rangs pairs sont des consonnes et les rangs impairs sont des voyelles. Pour restaurer l'ordre lexicographique le dernier affiché devrait être yzuxow.

    La seconde est plus facile à implémenter que la première ... je suppose donc que tu cherches à implémenter la seconde. Mais si tu pouvais confirmer ce serait mieux.

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    Citation Envoyé par kwariz Voir le message
    bonjour,
    si je décode ton exemple tu essayes d'afficher en ordre lexicographique les permutations de 6 lettres sans répétition qui alternent voyelles et consonnes, c'est ça ? Dans ce cas le dernier élément serait plutôt zyxuwo ?

    À moins que ton erreur sur le dernier élément soit azexiw ? là l'ordre n'est plus lexicographique .. mais, en commençant l'inidiçage des rangs à 0, avec la contrainteque les rangs pairs sont des consonnes et les rangs impairs sont des voyelles. Pour restaurer l'ordre lexicographique le dernier affiché devrait être yzuxow.

    La seconde est plus facile à implémenter que la première ... je suppose donc que tu cherches à implémenter la seconde. Mais si tu pouvais confirmer ce serait mieux.

    Salut merci de ta réponse tu as résumé ce que je dois pouvoir afficher le dernier éléments est bien zyx... mais l'implémentation reste dur a realiser je vois pas comment débloquer.

  9. #9
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    tu as donc la contrainte supplémentaire que les lettres sont toutes différentes...

    sinon, tu aurais pour dernier élément zyzyzy…

  10. #10
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Et ton n est-il fixe (il vaut toujours 6) ou peut-il varier de 1 à 11 ?

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Et ton n est-il fixe (il vaut toujours 6) ou peut-il varier de 1 à 11 ?
    Oui il est fixe toujours

  12. #12
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bon il y a plusieurs méthodes pour obtenir ce que tu veux.

    • la méthode force brute (déconseillée mais très simple)
      on liste par ordre lexicographique toutes les chaines de 6 caractères et on n'affiche que celles qui correspondent
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
       
      pour l1='a' à 'z' faire
        pour l2='a' à 'z' faire
          pour l3='a' à 'z' faire
            pour l4='a' à 'z' faire
              pour l5='a' à 'z' faire
                pour l6='a' à 'z' faire
                  si est_valide(l1,l2,l3,l4,l5,l6) alors
                    afficher(l1,l2,l3,l4,l5,l6)
                  fin si
                fin pour
              fin pour
            fin pour
          fin pour
        fin pour
      fin pour
      Comprends-tu cette méthode avec des boucle imbriquées ?
    • une méthode un peu plus complexe mais dont l'espace de recherche est bien plus petit.
      Imagine que tu as une fonction gen_comb( longueur, commence_par, prefixe ) qui affiche les chaines de longueur longueur préfixées par le préfixe prefixe avec la containte indiquée par le paramètre commence_par qui peut prendre les valeurs C (pour consonne) et V (pour voyelle) et la contrainte supplémentaire qu'aucune des lettres du préfixe n'apparaisse dans les chaines générées.
      Si tu sais écrire une telle fonction, la résolution est immédiate (en récursif) ou presque.

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Reconnaître les voyelles, consonne et chiffres lors d'une saisie
    Par Pushingdaisies dans le forum Général Python
    Réponses: 7
    Dernier message: 07/10/2013, 20h22
  3. «و» et «ي » sont des consonnes ou voyelles?
    Par bayouta19 dans le forum Langage
    Réponses: 1
    Dernier message: 21/02/2013, 19h31
  4. [FORMATION] Formations par alternance
    Par chobol dans le forum Etudes
    Réponses: 10
    Dernier message: 20/02/2004, 11h28
  5. Filtrer les voyelles
    Par Babyneedle dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/12/2003, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo