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

Algorithmes et structures de données Discussion :

Vérification d'un palindrome


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Vérification d'un palindrome
    Bonjour,

    Je suis nouveau dans le forum, je voudrais demander de l'aide pour mon exam de Mardi. Je suis en ce moment de refaire un exam de l'année passée ou un exercice demande d'écrire un algo qui cherche si un mot est un palindrome ou pas. En ce moment voila ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Booleen Palindrome (TChaine: Tableau de caractère)
     
    Variable locales :
    Deb, fin : entier
     
    Debut
     
    Tant que Deb<Fin faire
     
    Si T[Deb] different de T[Fin] retourner Faux
    Deb= Deb+1
    Fin= Fin-1
     
    Sinon retourner Vrai
    Mon problème maintenant est que je sais pas comment calculer la longueur c'est dire la variable locale Fin.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    C'est du pseudocode, donc j'imagine que tu peux simplement initialiser ta variable fin de la sorte : fin = longueur(T)
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre actif Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Points : 263
    Points
    263
    Par défaut
    Salut
    En quel langue est tu ?
    Tu cherches à connaitre la longueur si j'ai bien compris de TChaine ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    C'est en langage algorithmique, oui je cherche à trouver la longueur de Tchaine pour l'affecter à Fin

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Dans n'importe quel langage, tu trouveras une fonction qui te donne la longueur d'une chaîne.
    Donc en pseudo-code, tu écris L = Longueur(Tchaine).

    Si tu t'interdis cela, alors, il faut être cohérent, et il faut s'interdire aussi des fonctions aussi simples que sinus() ou racinecarrée().
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Dans n'importe quel langage, tu trouveras une fonction qui te donne la longueur d'une chaîne.
    Donc en pseudo-code, tu écris L = Longueur(Tchaine).

    Si tu t'interdis cela, alors, il faut être cohérent, et il faut s'interdire aussi des fonctions aussi simples que sinus() ou racinecarrée().
    Ah d'accords merci beaucoup !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour votre aide! J'ai d'autres questions si vous avez du temps.

    Alors je suis dans un autre exercice ou la question est :

    "Ecrire un module qui construit et restitue un TGrandNombre à partir d’un entier. Un TGrandNombre est le type vu en TD : c’est un TChaine dans lequel chaque caractère est un caractère numérique (‘0’, ‘1’ ... ‘9’), les caractères étant rangés dans l’ordre inverse de celui des chiffres du nombre. Par exemple, l’entier 15376 est décrit par la chaîne "67351"."

    Ce que j'ai pensé c'est d'utiliser un compteur qui va du debut de la chaine jusqu'à la moitié et un autre qui fais le chemin inverse c'est a dire de la fin vers la moitié. Je voudrais savoir votre avis.

    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
    fonction GrandNombre (TGrandNombre: Tableau de caractère)
     
    Variable locales :
     
    fin : entier
    a: entier // elle me servira a conserver une valeur 
     
    Debut
     
        fin<-longueur(TGrandNombre)
     
           Pour i allant de 0 à fin/2 faire
     
           a<-T[i]
           T[i]<-T[fin]
           T[fin]<-a
           fin=fin-1
     
        FPour
     
    Fin

  8. #8
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 699
    Points
    8 699
    Billets dans le blog
    43
    Par défaut
    Pour le problème précédent sur le palindrome, il est courant d'utiliser la récursivité (cela évite d'avoir à calculer la longueur de la chaîne en prime).

    Pour le deuxième exercice, il faut que tu t'aides des fonctions division entière et modulo en base 10.
    Tutoriels et FAQ TypeScript

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par yahiko Voir le message
    Pour le problème précédent sur le palindrome, il est courant d'utiliser la récursivité (cela évite d'avoir à calculer la longueur de la chaîne en prime).

    Pour le deuxième exercice, il faut que tu t'aides des fonctions division entière et modulo en base 10.
    Pour le palindrome je peux pas utiliser la récursivité car il demande que ça soit itératif malheureusement...

    Pour le deuxième pourquoi je dois utiliser le modulo ou la division entiere ? Pour genre voire si la longueur est paire ou impaire ?

  10. #10
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 699
    Points
    8 699
    Billets dans le blog
    43
    Par défaut
    Non, simplement pour extraire les chiffres du nombre entier afin de construire ta chaîne de caractère.

    N := 230481
    C := ""
    N mod 10 == 1 --> C := C + "1" == "1"
    N := N div 10 == 23048
    N mod 10 == 8 --> C := C + "8" == "18"
    N := N div 10 == 2304

    ... et ainsi de suite
    Tutoriels et FAQ TypeScript

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par yahiko Voir le message
    Non, simplement pour extraire les chiffres du nombre entier afin de construire ta chaîne de caractère.

    N := 230481
    C := ""
    N mod 10 == 1 --> C := C + "1" == "1"
    N := N div 10 == 23048
    N mod 10 == 8 --> C := C + "8" == "18"
    N := N div 10 == 2304

    ... et ainsi de suite
    J'arrive vraiment pas à te suivre ^^ pourquoi mod 10 et div 10 ?

  12. #12
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 699
    Points
    8 699
    Billets dans le blog
    43
    Par défaut
    Le nombre initial N := 230481
    Le résultat sous forme de chaîne C := ""

    N mod 10 == 1 --> C := C + "1" == "1"
    N := N div 10 == 23048

    N mod 10 == 8 --> C := C + "8" == "18"
    N := N div 10 == 2304

    N mod 10 == 4 --> C := C + "4" == "184"
    N := N div 10 == 230

    N mod 10 == 0 --> C := C + "0" == "1840"
    N := N div 10 == 23

    N mod 10 == 3 --> C := C + "0" == "18403"
    N := N div 10 == 2

    N mod 10 == 2 --> C := C + "2" == "184032"
    N := N div 10 == 0

    On obtient au final la chaîne C = "184032"

    avec
    * mod : reste de la division entière
    * div : division entière
    Tutoriels et FAQ TypeScript

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par yahiko Voir le message
    Le nombre initial N := 230481
    Le résultat sous forme de chaîne C := ""

    N mod 10 == 1 --> C := C + "1" == "1"
    N := N div 10 == 23048

    N mod 10 == 8 --> C := C + "8" == "18"
    N := N div 10 == 2304

    N mod 10 == 4 --> C := C + "4" == "184"
    N := N div 10 == 230

    N mod 10 == 0 --> C := C + "0" == "1840"
    N := N div 10 == 23

    N mod 10 == 3 --> C := C + "0" == "18403"
    N := N div 10 == 2

    N mod 10 == 2 --> C := C + "2" == "184032"
    N := N div 10 == 0

    On obtient au final la chaîne C = "184032"

    avec
    * mod : reste de la division entière
    * div : division entière
    Ahhh d'accords !! Franchement j'aurais jamais pensé à ça merci beaucoup c'est beaucoup plus simple de mon algo !!

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci à tous vraiment pour votre aide l'examen s'approche ( demain à 9h du mat ^^ )

    J'ai une autre question comment je fais si je veut savoir le rang d'une valeur d'une liste ?

    Je m'explique, l'exercice est le suivant:

    "Ecrire un module itératif qui calcule le rang du minimum et du maximum d’une liste chaînée d’entiers non vide."

    Mais je sais vraiment pas comment on fait dans une liste pour accéder à un element l'un après l'autre pour ensuite le comparer avec les suivants...
    Ni comment trouver son rang...

  15. #15
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 699
    Points
    8 699
    Billets dans le blog
    43
    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
    valMin := 99999999 (le plus grand nombre possible du système)
    valMax := 0 (le plus petit nombre possible du système, négatif si les nombres peuvent être négatifs)
    rang := 0
     
    noeud := tête(liste)
     
    Tant que noeud existe Faire
        Si valeur(noeud) < valMin Alors
           valMin := valeur(noeud)
            rangMin := rang
     
        Si valeur(noeud) > valMax Alors
            valMax := valeur(noeud)
            rangMax := rang
     
        rang := rang + 1
        noeud := suivant(liste)
    Au final, tu as rangMax pour le rang de la valeur max, et rangMin pour le rang de la valeur min.
    Tutoriels et FAQ TypeScript

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par yahiko 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
    15
    16
    17
    valMin := 99999999 (le plus grand nombre possible du système)
    valMax := 0 (le plus petit nombre possible du système, négatif si les nombres peuvent être négatifs)
    rang := 0
     
    noeud := tête(liste)
     
    Tant que noeud existe Faire
        Si valeur(noeud) < valMin Alors
           valMin := valeur(noeud)
            rangMin := rang
     
        Si valeur(noeud) > valMax Alors
            valMax := valeur(noeud)
            rangMax := rang
     
        rang := rang + 1
        noeud := suivant(liste)
    Au final, tu as rangMax pour le rang de la valeur max, et rangMin pour le rang de la valeur min.
    Merci beaucoup pour ta rapidité.

    -) "rang<- 0" c'est a dire que tu a initialisé rang au rang de la premiere valeur ?
    -) "tant que noeud existe " cela signifie que noeud doit être different de "" ?

  17. #17
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 699
    Points
    8 699
    Billets dans le blog
    43
    Par défaut
    1) rang = "position" ou numéro d'ordre du noeud. On suppose que la liste commence avec le noeud n°0.

    2) Si le noeud existe <=> est différent de l'ensemble vide (c'est un objet mathématique, pas une simple chaîne de caractère)
    Tutoriels et FAQ TypeScript

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci maintenant je sais comment connaitre le rang d'une liste mais pas comment accéder un 2 elements d'une liste.

    "Soit L une liste de TElement. Ecrire un module qui restitue la sous-liste des Nb TElement consécutifs commençant au TElement de rang Deb. L’ordre des TElement dans la liste restituée est sans importance.
    On suppose que l’opération est toujours possible (on ne demande pas des TElement qui n’existent pas).
    Exemples :
    Si L = (3, 6, -4, 18, 9), Deb = 3, Nb = 2, alors le résultat est (-4, 18)
    Si L = (3, 6, -4, 18, 9), Deb = 1, Nb = 5, alors le résultat est (3, 6, -4, 18, 9)
    Si L = (), Deb = 1, Nb = 0, alors le résultat est ()."

    pour le premier exemple "L = (3, 6, -4, 18, 9), Deb = 3, Nb = 2"
    On cree une liste nommee SL en plus
    J'ai pense a initialiser le rang à 3 et d'utiliser une boucle pour de cette façon:

    Pour i allant de Deb à Deb+Nb faire:

    SL<-valeur(Deb)
    Deb<-Deb+1

    Fpour
    Afficher SL

    Fin

    Mais quand j'écris ça pour moi je trouve franchement que ça n'a pas de sens ... ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérification d'une requête ...
    Par Kokito dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/06/2004, 14h59
  2. vérification de passage dans un select case
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 11h05
  3. [VB6] procédure de vérification d'adresse mail ?
    Par ghohm dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/06/2004, 14h05
  4. [VB.NET] Vérification d'existance d'une table
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/05/2004, 11h17
  5. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 14h48

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