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 :

Tableau : palindrome


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    fdf
    Inscrit en
    Novembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : fdf

    Informations forums :
    Inscription : Novembre 2014
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Tableau : palindrome
    Bonsoir

    Le code pour un exercice ne me retourne pas la valeur souhaité. Il me retourne à chaque fois qu'il est palindrome alors que non.
    Or , le code provient du corrigé d'un professeur.
    ( La déclaration des variables et le stockage des valeurs lues sur l'entré je l'ai fait moi même ).


    Un palindrome est un tableau qui se lit de la même manière dans les deux sens.
    ex : 1 2 3 2 1 est palindrome
    1 2 3 1 2 ne l'est pas

    Écrivez un programme qui permet de remplir un tableau de n entiers lus sur l’entrée, la valeur
    de n étant aussi lue sur l’entrée. Ce programme doit ensuite indiquer si cette suite de valeurs constitue
    un palindrome.


    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
    #include <stdlib.h>
    #include <stdio.h>
     
     
     
    int main(void) {
          int n=0;
          int k=0; 
          int t[n];
          scanf("%d", &n);
     
          for(k=0; k<n; k++) {
    	scanf("%d",&t[k]);
    	  }
     
     
    	  int j=n-1;
     
               while (k < j && t[k] == t[j]) {
    			++k;
    			--j;
    		}
     
    		if (k >= j) {
    			printf("Est un palindrome.\n");
    		} else { 
    			printf("Pas un palindrome.\n");
    		}
     
     return EXIT_SUCCESS;
     }

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Je ne comprends pas très bien pourquoi tu initialises ta variable j à n-1 et n à 0... du coup ton while (k < j ... ) ne fonctionne pas et forcement ta clause (k >= j) sera toujours vraie, donc palindrome...
    Il ne te manque pas quelque chose? par exemple la longueur du mot a parcourir?

    Et si je peux me permettre, pose d'abord ton algorithme et après transcris le en code. tu y verras sans doute plus clair...

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par poower Voir le message
    Or , le code provient du corrigé d'un professeur.
    ( La déclaration des variables et le stockage des valeurs lues sur l'entré je l'ai fait moi même ).
    Ben voilà. Dans le code du prof, il y a int k=0. Dans la saisie que tu as rajouté, tu as modifié k et quand la recherche commence, k n'est plus à 0 !!!
    Facile de taper sur les profs quand on modifie leur code sans l'avoir d'abord compris !!!

    PS: ton indentation porcasse, c'est le prof aussi ou ça c'est de toi ??? Ben oui, la motivation se voit aussi dans la façon dont on écrit son programme !!!

    Citation Envoyé par mabeille77 Voir le message
    Je ne comprends pas tres bien pourquoi tu initialises ta variable j à n-1 et n à 0...
    Parce qu'il balaye le tableau des deux cotés à la fois. Un indice sur la première case [0], un indice sur la dernière (et dans un tableau de "n" cases, la dernière est indicée "n - 1" !!!) et ensuite tant que chacune des deux cases indicée est la même, le premier monte et le second descend.
    Et si les indices se croisent c'est que toutes les cases étaient deux à deux égales donc palindrome !!!

    Citation Envoyé par poower Voir le message
    Et si je peux me permettre, pose d'abord ton algorithme et apres transcris le en code. tu y verras sans doute plus clair...
    Vas-y, permets-toi parce qu'il le mérite
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre à l'essai
    Homme Profil pro
    fdf
    Inscrit en
    Novembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : fdf

    Informations forums :
    Inscription : Novembre 2014
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    On a pas encore commencer l'algorithmique.
    Les commentaires au début c'est ce qu'on a ré-utiliser des exerccies précédent.

    Pour mon premier message je n'étais pas en c99, donc le fait d'initialiser int k=0 dans la boucle for ne marchait pas.
    Après avoir modifier la compilation et la construction en c99 ça marche.


    Mon " int k=0" du premier code , je l'avais mit au début car , quand je compilais k devait être déclaré avant
    le tableau qui était initialisé par une boucle for.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(k=0; k<n; k++) {
    scanf("%d",&t[k]);
    	  }

    Or , le prof a fait ça ( code des exercices précédent rajouté à la place des commentaires, l'indentation est celle du prof).


    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
     
     #include <stdlib.h>
     #include <stdio.h>
     
       int main(void) {
            int n;
            scanf("%d", &n);
            int t[n];
            for (int k = 0; k < n; ++k) {
            scanf("%d", &t[k]);
            }
           int k = 0;
           int j = n - 1;
           while (k < j && t[k] == t[j]) {
             ++k;
             --j;
           }
           if (k >= j) {
           printf("C’est un palindrome.\n");
           } else {
           printf("Ce n’est pas un palindrome.\n");
     
     } return EXIT_SUCCESS;
     }

    Donc , si je comprend bien , le int k à la ligne 12 n'est pas le même que celui pour stocker les valeurs à la ligne 9.
    J'ai changer le int k=0 par int i=0; avant la boucle while pour incrémenter celui-ci et ça à l'air de marcher...

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par poower Voir le message
    Pour mon premier message je n'étais pas en c99, donc le fait d'initialiser int k=0 dans la boucle for ne marchait pas.
    Oui, dans les versions plus puristes du C on définit d'abord les variables avant de les utiliser

    Citation Envoyé par poower Voir le message
    Donc , si je comprend bien , le int k à la ligne 12 n'est pas le même que celui pour stocker les valeurs à la ligne 9.
    Le nouveau prend la place de l'ancien. Mais même sans redéfinir int k, juste le réinitialiser suffit.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par poower Voir le message
    On a pas encore commencer l'algorithmique.
    Et ? Est-ce que là te dispense de dire, en français, ce que tu veux réaliser ?
    " Ah bah non, je ne peux pas garder votre chien. Vous comprenez, je ne l'ai pas encore vue en cours. "

    Citation Envoyé par poower Voir le message
    Donc , si je comprend bien , le int k à la ligne 12 n'est pas le même que celui pour stocker les valeurs à la ligne 9.
    J'ai changer le int k=0 par int i=0; avant la boucle while pour incrémenter celui-ci et ça à l'air de marcher...
    " ça à l'air de marcher "... Soit ça marche, soit ça marche pas, le "à peu près" n'a pas sa place en programmation, en encore moins en C.

    Citation Envoyé par poower Voir le message
    Pour mon premier message je n'étais pas en c99, donc le fait d'initialiser int k=0 dans la boucle for ne marchait pas.
    Après avoir modifier la compilation et la construction en c99 ça marche.
    Initialiser != Déclarer.
    Déclarer une variable, c'est "affirmer son existence". Initialiser une variable, c'est lui assigner une valeur pour la première fois.
    La rigueur, ça se déclare aussi dans la terminologie exact que l'on emploie.

    En C89, tu peux tout à fait initialisé une variable dans un fort, c'est d'ailleurs là un des intérêts de la boucle for.. (rassembleur au même endroit l'initialisation, la condition de sortie et l'opération d'avancement)



    Citation Envoyé par poower Voir le message
    Donc , si je comprend bien , le int k à la ligne 12 n'est pas le même que celui pour stocker les valeurs à la ligne 9.
    Les deux sont la même variable. C'est une variable qui est réutilisé en cours de programme pour faire quelque chose d'autre. Si tu regarde de plus près le code, tu vois qu'avec la boucle de vérification du palindrome, ton prof assigne 0 à la variable k...
    Ce que, à priori, tu n'as pas vu, ni compris, vue la version de ton code.

    Si je puis me permettre, l'indentation de ton prof est "normal", c'est également la façon dont je procède.
    Si je puis me permettre, je plussoie lourdement Sve@r...



    Et une dernière petite chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int n=0;
          int k=0; 
          int t[n];
          scanf("%d", &n);
    C'est chouette de créer un tableau de 0 case, non ?

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par archMqx. Voir le message
    Citation Envoyé par poower Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       int main(void) {
            ...
            for (int k = 0; k < n; ++k) {
            scanf("%d", &t[k]);
            }
           ...
           if (k >= j) {
           printf("C’est un palindrome.\n");
           } else {
           printf("Ce n’est pas un palindrome.\n");
     
     } return EXIT_SUCCESS;
     }
    Si je puis me permettre, l'indentation de ton prof est "normal", c'est également la façon dont je procède.
    Vraiment tu indentes pareil ???

    Citation Envoyé par archMqx. Voir le message
    Et une dernière petite chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int n=0;
          int k=0; 
          int t[n];
          scanf("%d", &n);
    C'est chouette de créer un tableau de 0 case, non ?
    Zut, j'avais même pas vu
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre à l'essai
    Homme Profil pro
    fdf
    Inscrit en
    Novembre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : fdf

    Informations forums :
    Inscription : Novembre 2014
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    En ce qui concerne l'algorithmique , je pose schématiquement la question sur brouillon.
    pour le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    int n=0;
          int k=0; 
          int t[n];
          scanf("%d", &n);
    je voulais juste faire int n;

    Pour l'indentation , j'ai l'habitude de faire :
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      for ...
        if...
           while ....

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par poower Voir le message
    Pour l'indentation , j'ai l'habitude de faire :

    for ....
    if....
    etc
    Code c : 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
    fonction()
    {
    	for (...)
    	{
    		if (...)
    		{
    			while (...)
    			{
    				... code du while ...
    			}
    			... suite du if ...
    		}
    		... suite du for ...
    	}
    	... suite de la fonction ...
    }

    Et non des
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fonction()
    {
    	for (...)
    	{
    		... suite du for ...
    ... encore dans le for ...
    }
    ... suite de la fonction ...
    }
    tout bancal !!!

    Eventuellement si tu as envie, remonter l'accolade ouvrante à la suite de l'instruction if/for/while mais c'est tout !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Tableau nombre palindrome
    Par adlene2345 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/09/2012, 13h33
  2. Réponses: 2
    Dernier message: 01/05/2009, 22h39
  3. Test Palindrome tableau de char
    Par stansoad0108 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 02/10/2008, 09h13
  4. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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