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 :

Programme qui ne va pas jusqu'au bout ?


Sujet :

C

  1. #41
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Encore une chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		for(i=0;i<=taille;i++)
    		{
    			caractereTeste=min(chaine,caractereActuel);
    			if(isalpha(caractereTeste))caractereTeste=chaine[i];
    		}
    caractereTeste=min(chaine,caractereActuel) est une expression qui ne change pas du tout dans la boucle et le code est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    caractereTeste=min(chaine,caractereActuel);
    if(isalpha(caractereTeste))caractereTeste=chaine[taille];
    Probablement, tu devrais avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		for(i=0;i<taille;i++)
    		{
    			caractereTeste=min(chaine,i);
    			if(isalpha(caractereTeste))caractereTeste=chaine[i];
    		}
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  2. #42
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Mais tu ne suis pas les conseils que l'on te donne... Entre autre, tu ne partage pas les responsabilités...

    Ton code devrait ressembler à
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    /* déclarons les fonctions pour que le compilateur les connaisse */
    int introduction(char* tab); 
    void palindrome(char* tab, int size);
    int main(/* int argc, char *argv[]*/)
    {
        char str[25];
        int size = introduction(str);
        palindrome(str, size);
    }
    int introduction(char* tab)
    {
        char car; /* le caractère récupéré */
        int pos = 0;/* la position du caractère */
        int encore =1;/* pour savoir si on doit continuer 
                            * (passe à 0 si l'intro est finie)
                            */
        printf("introduisez le mot a tester\n");
        while(pos<25 && encore==1)
        {
            /* 1- récupérer une introduction dans car */
            if( /* caractère est une lettre minuscule */)
            {
                /* 2.1- placer le caractère à la place qui lui revient 
                 * 2.2- incrementer pos
                 */
            }
            else if(/* caractère est une lettre majuscule*/)
            {
                /* 3.1- transformer la lettre en minuscule 
                 * 3.2- le placer à la place qui lui revient 
                 * 3.3- incrementer pos
                 */
            }
            else if(/* caractere est la fin d'introduction */)
            {
                /* 4.1- placer '/0' à pos
                 * 4.2- faire en sore de sortir de la boucle en donnant la 
                 *      valeur 0 à encore
                 */
            }
            /* les autres cas sont purement et simplementignorés */
        }
        /* 5- renvoyer la taille */
    }
    void palindrome(char* tab, int size)
    {
        int palin = 1; /* au début, on estime que c'est un palindrome */
        int pos = 0; /* la position du caractères à tester */
        int reelle = size-1; /*il ne faut pas compter le '/0' final */
        int milieu = reelle/2; /* il ne faut aller que jusqu'au milieu */
        while(palin == 1 && pos<= milieu)
        {
            if(le caractère à 0+pos est identique au caractere à reelle-pos)
            {
                /* ca peut encore etre un palindrome
                 * voyons le caractere d'à coté 
                 */
            }
            else
            {
                /* ca ne peut plus être un palindrome */
            }
        }
        if(/* c'est un palindrome */)
        {
            printf("%s est un palindrome de %d caracteres",tab,reelle);
        }
        else
        {
            printf("%s n'est pas un palindrome",tab);
        }
    }
    Tu n'a plus qu'à remplacer les commentaires par les instructions qui leur correspondent
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #43
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    J'ai plusieurs questions et je t'assure que je ne fais pas exprès . J'essaie vraiment de comprendre mais J'en suis à mon premier langage et je t'assure que ce n'est vraiment pas évident pour moi

    if( /* caractère est une lettre minuscule */)
    {
    /* 2.1- placer le caractère à la place qui lui revient
    * 2.2- incrementer pos
    */
    Est ce que c'est bon ce que je fais ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(islower(car))
    {
    car=tab[pos];
    pos++;
    }
    Ensuite pour la majuscule je pense ne pas être sur de moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else if(isupper(car))
    {
    car=tolower(car);
    car=tab[pos];
    pos++;
    }
    Et enfin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    else if(car='\0')
    {
    pos='\o';
    encore=0;
    }
    }
    return pos /* Pour moi la taille du tableau équivaut au compteur pos en fin de boucle mais je ne suis vraiment pas sur de moi*/
    }
    Je crois que j'ai d'énormes soucis et que j'ai du mal même avec les bases et les syntaxes du langage

  4. #44
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Non, parce que tu n'as pas vu ou interprété la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        while(pos<25 && encore==1)
        {
            /* 1- récupérer une introduction dans car */
    Donc, car contient normalement le dernier caractère entré que l'on doit stocker dans le tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(islower(car))
    {
      tab[pos]= car;
      pos++;
    }
    même chose pour la majuscule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    else if(car='\0')
    {
    pos='\o';
    encore=0;
    }
    Si car =='\0' c'est terminé et on stocke ce '\0' dans le tableau pour indiquer la fin de la chaîne.
    - = est une assignation : a= b donne à a la valeur b . == est une comparaison : a==b est vrai si a est égal à b. Il ne faut pas les confondre.
    - pos doit nous donner le nombre de caractères placés dans le tableau. Il ne faut pas le mettre à une valeur arbitraire.
    - attention à ne pas confondre 0 (zéro), o (lettre o minucule) et O (lettre O majuscule)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    else if(car=='\0')
    {
    tab[pos]='\0'; // et pos contient le nombre de caractères du tableau
    encore=0;
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #45
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    La fonction 'introduction' retourne bien la valeur 'pos' qui est la taille du tableau ?

    Et j'ai tenté la fonction 'palindrome' comme ça ? Mais je ne suis toujours pas sur de ma syntaxe ?

    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
    void palindrome(char* tab;int size)
    {
    	int palin=1;
    	int pos=0;
    	int reelle=size-1;
    	int milieu=reelle/2;
     
    	while(palin==1 && pos<=milieu)
    	{
    		if(0+pos==relle-pos)
    			pos++;
    		else printf("Ce n'est pas un palindrome");
     
    		if(pos==reelle-pos)printf("%s est un palindrome de %d caracteres\n",tab,reelle);
    		else printf("%s n'est pas un palindrome\n",tab);
    	}

  6. #46
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    - Il ne faut pas tester pos et reelle-pos mais les éléments du tableau à la position pos et à la position reelle-pos

    - Si ces éléments sont différents, mettre palin à 0 pour sortir de la boucle while.

    - Une fois sorti de la boucle while (parce que palin est 0 ou pos>milieu), alors palin nous dit si c'est un palindrome ou non. C'est en sortie de la boucle qu'il faut tester palin et selon sa valeur affiché le message convenable.

    - Il faut tenir compte des erreurs et des avertissements donnés par le compilateur. Par exemple, il a du râler sur cette ligne
    en disant que relle lui était inconnu (relle # reelle)
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #47
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    La fonction 'introduction' retourne bien la valeur 'pos' qui est la taille du tableau ?
    introduction renvoie "pos" qui est... la position du caractère '\0', ce qui correpond à... la taille de la chaine (et non la taille du tableau)
    Et j'ai tenté la fonction 'palindrome' comme ça ? Mais je ne suis toujours pas sur de ma syntaxe ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void palindrome(char* tab;int size)
    <snip>
    Attention, entre tab et int, c'est une virgule qu'il faut utiliser et non un point virgule
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #48
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    ça marche toujours pas . Je dois faire des erreurs de syntaxe ?

    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<ctype.h>
    #include<string.h>
     
    int introduction(char* tab);
    void palindrome(char* tab,int size);
     
    int main(int argc,char *argv[])
    {
    	char str[25];
    	int size=introduction(str);
    	palindrome(str,size);
     
    	return 0;
    }
     
    int introduction(char* tab)
    {
    	char car=0;
    	int pos=0;
    	int encore=1;
     
    	printf("Introduisez le mot a tester : ");
    	car=getchar();
     
    	while(pos<25 && encore==1)
    	{
    		if(islower(car))
    		{
    			tab[pos]=car;
    			pos++;
    		}
    		else if(isupper(car))
    		{
    			car=tolower(car);
    			tab[pos]=car;
    			pos++;
    		}
    		else if(car=='\0')
    		{
    			tab[pos]='\0';
    			encore=0;
    		}
    	}
    	return pos;
    }
     
    void palindrome(char* tab,int size)
    {
    	int palin=1;
    	int pos=0;
    	int reelle=size-1;
    	int milieu=reelle/2;
     
    	while(palin==1 && pos<=milieu)
    	{
    		if(tab[pos]==tab[reelle-pos])
    			pos++;
    		else printf("Ce n'est pas un palindrome");
    	}	
    		if(tab[pos]==tab[reelle-pos])printf("%s est un palindrome de %d caracteres\n",tab,reelle);
    		else printf("%s n'est pas un palindrome\n",tab);
    }

  9. #49
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Les erreurs de syntaxe te sont signalées par le compilateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      car=getchar();
      while(pos<25 && encore==1)...
    ceci ne lit pas la chaîne, elle lit UN caractère ; puisque le car =getchar() est en dehors du while, il ne sera exécuté qu'une fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(tab[pos]==tab[reelle-pos])
    pos++;
    else 
    {
       printf("Ce n'est pas un palindrome");
       palin = 0; // pour sortir de la boucle et signaler que ce n'est pas un palindrome
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(tab[pos]==tab[reelle-pos])printf("%s est un palindrome de %d caracteres\n",tab,reelle);
    else printf("%s n'est pas un palindrome\n",tab);
    tab[pos]==tab[reelle-pos] ne me dit pas du tout si c'est un palindrome ou pas! C'est palin qui détient cette information :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(palin)printf("%s est un palindrome de %d caracteres\n",tab,reelle);
    else printf("%s n'est pas un palindrome\n",tab);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  10. #50
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    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
    int introduction(char* tab)
    {
    	char car=0;
    	int pos=0;
    	int encore=1;
     
    	printf("Introduisez le mot a tester : ");
     
     
    	while(pos<25 && encore==1)
    	{
    		car=getchar();
    		if(islower(car))
    		{
    			tab[pos]=car;
    			pos++;
    		}
    		else if(isupper(car))
    		{
    			car=tolower(car);
    			tab[pos]=car;
    			pos++;
    		}
    		else if(car=='\0')
    		{
    			tab[pos]='\0';
    			encore=0;
    		}
    	}
    	return pos;
    }
    J'ai mis le car=getchar()' dans la boucle while et j'ai fait les modifs au niveau de la fonction 'palindrome' mais maintenant ça ne me donne aucun résultat ?
    ça devrait afficher si c'est un palindrome ou pas ?

  11. #51
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il ne reste guère plus qu'un détail : lorsque tu lis par getchar l'entrée au clavier, celle-ci est terminée, non pas par '\0', mais par la fin de ligne que tu tapes après avoir entré ta chaine. Donc modifie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		else if(car=='\0')
    		{
    			tab[pos]='\0';
    			encore=0;
    		}
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    else if(car=='\n')
    		{
    			tab[pos]='\0';
    			encore=0;
    		}
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  12. #52
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    En tout cas je te remercie grandement de ton aide
    J'espère qu'on arrive au bout parce que là ça fait trop longtemps que je suis sur cet exercice et il me semble que ça me fait plus de tort que de bien dans mon apprentissage

    Le programme fonctionne quand ce n'est pas un palindrome mais me répond 'ce n'est pas un palindrome' quand c'en est un ?
    Qu'elle est encore mon erreur ?

    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
    64
    #include<stdio.h>
    #include<ctype.h>
    #include<string.h>
     
    int introduction(char* tab);
    void palindrome(char* tab,int size);
     
    int main(int argc,char *argv[])
    {
    	char str[25];
    	int size=introduction(str);
    	palindrome(str,size);
     
    }
     
    int introduction(char* tab)
    {
    	char car=0;
    	int pos=0;
    	int encore=1;
     
    	printf("Introduisez le mot a tester : ");
     
     
    	while(pos<25 && encore==1)
    	{
    		car=getchar();
    		if(islower(car))
    		{
    			tab[pos]=car;
    			pos++;
    		}
    		else if(isupper(car))
    		{
    			car=tolower(car);
    			tab[pos]=car;
    			pos++;
    		}
    		else if(car=='\n')
    		{
    			tab[pos]='\0';
    			encore=0;
    		}
    	}
    	return pos;
    }
     
    void palindrome(char* tab,int size)
    {
    	int palin=1;
    	int pos=0;
    	int reelle=size-1;
    	int milieu=reelle/2;
     
    	while(palin==1 && pos<=milieu)
    	{
    		if(tab[pos]==tab[reelle-pos])
    			pos++;
    		else printf("Ce n'est pas un palindrome");
    		palin=0;
    	}	
    		if(palin)printf("%s est un palindrome de %d caracteres\n",tab,reelle);
    		else printf("%s n'est pas un palindrome\n",tab);
    }

  13. #53
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Atttention, dans le post #49 je te dis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(tab[pos]==tab[reelle-pos])
       pos++;
    else 
    {
       printf("Ce n'est pas un palindrome");
       palin = 0; // pour sortir de la boucle et signaler que ce n'est pas un palindrome
    }
    et dans ton code, on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(tab[pos]==tab[reelle-pos])
      pos++;		
    else printf("Ce n'est pas un palindrome");
    palin=0;
    palin est alors mis toujours à zéro, indépendamment du résultat de la condition

    J'espère qu'on arrive au bout parce que là ça fait trop longtemps que je suis sur cet exercice et il me semble que ça me fait plus de tort que de bien dans mon apprentissage
    Pas si tu essayes de comprendre tes erreurs. Si tu te contentes de recopier, plus ou moins bien, alors ça ne sert à rien
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  14. #54
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Je suis tes indications tout en essayant de bien comprendre le mécanisme mais je me doute bien que je ne maitriserais pas le langage en peu de temps
    Il faut sans doute beaucoup de pratique pour y parvenir mais comme je te disais c'est mon premier langage et c'est vraiment pas évident
    Comment ça se fait que lors de l'exécution du programme ça me donne le résultat mais avec un caractère en moins ? Sans doute encore une boucle mal codée . J'ai voulu changer le while en un do while mais ça n'arrange pas le problème .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    do
    	{
    		if(tab[pos]==tab[reelle-pos])
    			pos++;
    		else
    		{
    			printf("Ce n'est pas un palindrome");
    		palin=0;
    		}
    	}while(palin==1 && pos<=milieu);
    Je cherche à comprendre pourquoi ça m'affiche que le mot soit un palindrome avec un caractère en moins ? Encore une nouvelle erreur de ma part

  15. #55
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Ce n'est pas un problème while/do while. Mais simplement tu demandes d'afficher le nombre de caractères - 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	int reelle=size-1;
    ........	
    		if(palin)printf("%s est un palindrome de %d caracteres\n",tab,reelle);
    size est le paramètre donnant le nombre de caractères de la chaine et reelle fait 1 de moins.
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		if(palin)printf("%s est un palindrome de %d caracteres\n",tab,size);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  16. #56
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Je crois que j'ai compris . Je devais rajouter une position de plus à la taille puisque j'avais besoin de size-1 pour effectuer les boucles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	if(palin)printf("%s est un palindrome de %d caracteres\n",tab,(reelle+1));
    		else printf("%s n'est pas un palindrome\n",tab);
    par contre avec ce code je n'ai plus besoin de la fonction 'isalpha' pour vérifier si le caractère tapé est bien une lettre ?

    EDit: Excuse moi diogène mais j'avais trouvé le problème 1 mn avant que tu postes comme quoi je cherche bien à comprendre les mécanismes

  17. #57
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Ou, au lieu de mettre reelle+1, tu mets directement size.

    Non, tu n'as pas besoin de isalpha, puisque tu fais la sélection des caractères par isupper et islower. Si l'un des deux est vrai, alors isalpha le serait aussi et donc n'apporte pas une information supplémentaire.

    Excuse moi diogène mais j'avais trouvé le problème 1 mn avant que tu postes comme quoi je cherche bien à comprendre les mécanismes
    Tu vois que ça vient !
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  18. #58
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Sans doute grâce à toi et aux autres qui me donnent une aide appréciable et appréciée

    Encore une question . Qu'est ce que Windev ? un IDE ?

  19. #59
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Qu'est ce que Windev ? un IDE ?
    Oui et une sorte de méta langage. Ca n'existe qu'en France...
    Pas de Wi-Fi à la maison : CPL

  20. #60
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Je cherche à comprendre pourquoi ça m'affiche que le mot soit un palindrome avec un caractère en moins ? Encore une nouvelle erreur de ma part
    Citation Envoyé par diogene Voir le message
    Ce n'est pas un problème while/do while. Mais simplement tu demandes d'afficher le nombre de caractères - 1
    Ce qui se passe, c'est que la valeur renvoyée est par introduction est la position à laquelle se trouve le '\0', qui doit terminer la chaine de caractères.

    ce qui fait que, pour la vérification en vue de savoir si l'on a un palindrome, il faut "éviter" ce caractère '\0', il faut donc veiller à tester... au plus loin le caractère se trouvant à ... size-1 (autrement dit: le dernier caractère effectif du mot)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Commande batch qui ne s'exécute pas jusqu'au bout
    Par jejeman dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 03/10/2012, 13h04
  2. [1.x] fichier test qui ne s'execute pas jusqu'au bout
    Par erictomcat dans le forum Symfony
    Réponses: 2
    Dernier message: 20/08/2012, 23h04
  3. Programme qui ne réalise pas le tri
    Par Premium dans le forum C
    Réponses: 3
    Dernier message: 02/08/2006, 14h14
  4. Programme qui ne fonctionne pas
    Par jipé95 dans le forum C
    Réponses: 7
    Dernier message: 26/04/2006, 19h08
  5. Réponses: 18
    Dernier message: 13/12/2005, 13h27

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