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 :

Demande Aide sur un algorithme


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut Demande Aide sur un algorithme
    Bien le bonsoir à tous,


    Voila cela fait deux mois que j'ai commencé l'Algo jusqu'a aujourd'hui pas de probeme.En effet il y a deux jours je butais sur un algo bien precis.Je m'explique.J'ai etudié les instructions simples,les instructions de controle,les tableaux,,procedure et fonction et je pense avoir compris mais en tombant sur cette alo je me mis a douté.Voici ce fameux algo.



    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
    Fonction DonneOccurence (LaChaine:Tableau(80) de CARACTERE,CarRech:Caractère,Position:IN OUT NOMBRE):NOMBRE
    VAR
     
    Indice:Nombre
    CptOCC     /compteur Occurence/
    Premier:Boolean  
    i:NOMBRE
     
    DEBUT
     
    Position = -1    /Valeur d'erreur au cas ou pas occcurence trouvée/
    Premier = Vrai   /Initialisation du Flag/
    CptOcc = 0
    Pour i = 1 à longueur (LaChaine) Faire
    Si LaChaine [i] = CarRech Faire
    Si Premier Alors
    Premier=Faux
    Posistion = i
    Fin si
    CptOCC = CptOCC +1
    Fin si
    Fin Pour
    Retourne CptOCC  
    Fin Fonction
     
    Programme OccurenceEtPostion
     
    Var
     
    LaChaine:Tableau (80) de CARACTERE
    Carlu:CARACTERE
    LaPostion:NOMBRE
    NombreOccu:NOMBRE
     
    Debut
     
    /Saisir les infos souhaitées/
     
    Afficher "Entrez une chaine de caractères"
    Saisir: LaChaine
    Afficher "Entrez un caractère"
    Saisir:Carlu
     
    NombreOCC=DonneOccurence (LaChaine,Carlu,LaPostion)
     
    Si  LaPosition = -1 Alors
     
      Afficher "Pas d'occurence du caractère dans la chaine"
       Sinon
               Afficher "Le nombre d'occurences est de ", NombreOCC
               Afficher "La position de la première occurrence est:",LaPosition
        Fin Si
     
    Fin

    Merci à tous ceux qui aurront la patience de me repondre

    En fait je n'ai pas compris les instruction de la fonction

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ben explicites un peu ce que tu ne comprends pas....

    On peut pas te répondre comme ça....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    oui, ou est le problème? Cet algo est ok, donnant la position du 1ier caractère recherché trouvé dans la chaine + le nombre d'occurences...
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut
    c'est clair en effet.

    la fonction va renvoyer le nombre d'occurence du caractère et elle aura mis dans un des paramètre sortant la position du premier caractère

    en clair si tu fais un appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DonneOccurence ("ceci est une chaine","i", position)
    la fonction DonneOccurence renvera un NOMBRE = 2 ("ceci est une chaine"
    et la variable position (qui est IN/OUT et peut donc être modifiée à l'intérieur de la fonction/procédure) contiendra 4 :
    "ceci"
    1234

    si il y autre chose que tu ne comprends pas, faut le dire plus clairement.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    salut

    quel est la valeur de fin de la variable de la boucle?Est-ce 80 cases du tableau ou la caine de caractere que j'ai saisi dans le programme principal?

    ET je n'ai pas compris cette partie de l'algo

    Faire
    Si LaChaine [i] = CarRech Faire
    Si Premier Alors
    Premier=Faux
    Posistion = i

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 111
    Points
    111
    Par défaut
    quel est la valeur de fin de la variable de la boucle?
    faut lire le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pour i = 1 à longueur (LaChaine) Faire
    Donc dans l'exemple que je donne au dessus : "Ceci est une chaine" i terminera avec la valeur 19.

    pour le coeur de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Si LaChaine [i] = CarRech Faire
       Si Premier Alors
          Premier=Faux
          Posistion = i
       Fin si
       CptOCC = CptOCC +1
    Fin si
    Chaque fois que le caractère de LaChaine est égal au caractère recherché alors
    Si premier est vrai, cela veut dire que c'est la première fois que l'on rencontre le CarRech dans LaChaine, on met donc Permier à faux pour dire que la prochaine fois qu'on le rencontre, et ben ce ne sera plus la première fois, et on met dans Position la position où l'on a rencontré le CarRech (à savoir la variable de la boucle 'i').
    Ensuite (et toujours contenu dans le "Si LaChaine [i] = CarRech") on rajoute 1 à CptOCC pour dire qu'on a trouvé le CarRech une fois de plus.

    Je ne vois vraiment pas comment te l'expliquer plus clairement, si tu ne comprends pas encore, essaie avec un exemple :
    un papier, une feuille, et fait pas à pas DonneOccurence ("ceci","c", position)
    en notant toute les valeur de toutes les variable pour chaque valeur de I (de 1 à 4).
    Tu devrais avoir un truc de ce genre (voir l'attache).

    Et si la encore tu comprends pas, trouve toi une section où tu n'as pas l'algo à étudier

    rafu0n3r
    Images attachées Images attachées  

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    salut ,

    donc voila comment je comprend la chose.


    je commence par le programme principal apres le mot Debut

    1- on me demande d'entrer une chaine de carartere donc si je tape "ceci est une chaine" cela fait 16 caractères.

    2- Ensuite om me demande de saisir un caractère , je tape donc " C"


    3- J' appel la fonction DonneOccurence

    et je constate qu'il y a 3 paramètres formels qui correspondent aux variables effectifs du programme principale (LaChaine:Tableau(80) de CARACTERE,CarRech:Caractère,Position:IN OUT NOMBRE) la presence d'un IN OUT me permet de dire que c'est un paramètre sortant ce qui permet de renvoyer deux valeurs: CptOCC + Position tout deux de types nombres


    Ces trois variables sont initialisés

    Position = -1
    Premier = Vrai
    CptOcc = 0

    Ensuite c'est la que je bloque

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par rafuoner
    faut lire le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pour i = 1 à longueur (LaChaine) Faire
    Donc dans l'exemple que je donne au dessus : "Ceci est une chaine" i terminera avec la valeur 19.

    pour le coeur de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Si LaChaine [i] = CarRech Faire
       Si Premier Alors
          Premier=Faux
          Posistion = i
       Fin si
       CptOCC = CptOCC +1
    Fin si
    Chaque fois que le caractère de LaChaine est égal au caractère recherché alors
    mais si on compare une chaîne de N caractères (LaChaine) avec un seul (CarRech), se sera
    toujours faux.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par bouba69
    mais si on compare une chaîne de N caractères (LaChaine) avec un seul (CarRech), se sera
    toujours faux.
    mais non, tu compares le ième caractère, en faisant varier i de 1 à longueur de chaîne...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Pour i = 1 à longueur (LaChaine) Faire
     
    Si LaChaine [i] = CarRech Faire
    Si tu ne sais pas déchiffrer cette ligne d'algorithmique, on est mal barrés pour t"expliquer.....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    merci pour les reponses qui m'éclairent de plus en plus.Donc si je tape "ceci est une chaine" la longueur de la chaine de caractères fait 19 puisqu'il faut compter les espaces.


    ce qui donne

    Pour i = 1 à 19 faire
    Si ceci est une chaine [i] = c Faire
    Si Premier Alors


    En faite c'est apres le FAIRE que je ne sais pas quoi faire.

    Premier correspond à quoi?

    Desolé si j'insite mais je veux absolument comprendre, merci encore à tous ceux qui aurront la patience et la gentillesse de ma repondr

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut


    la chaîne écrite "Chaine" dans l'algorithme présenté au début correspond à ce que tu viens d'entrer : Chaine = "Ceci est une chaîne"

    Le 2ième élément de cette chaîne est la lettre e , le troisième la lettre c, etc...

    Donc Chaine[2] = e , Chaine[3] = c, etc..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 61
    Points : 12
    Points
    12
    Par défaut
    salut merci pour tes reponses.Je pense avoir compris,mais je doute encore.

    STP Peux tu m'aider à resoudre cet algo pas à pas.

  13. #13
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par souviron34


    ceci dit tu es pédagogue, et bouba a l'air de vouloir s'y mettre
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Bon, je vais reprendre vite fait ton code de départ, et mettre les commentaires à côté (ils y étaient déjà pas mal) :

    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
    ici on définit une fonction qui va chercher si un caractère CarRech existe dans la chaîne LaChaine, et si il existe, on détermine le nombre de fois où ce caractère est présent dans la chaîne... 
    La sortie de la fonction sera le nombre d'occurences (de fois) où le caractère a été trouvé, et la position du premier caractère trouvé dans la chaîne, si il existe
    
    Fonction DonneOccurence (LaChaine:Tableau(80) de CARACTERE,CarRech:Caractère,Position:IN OUT NOMBRE):NOMBRE
    
    Ici on définit les variables dont on va avoir besoin
    
    VAR
     
    Indice:Nombre   variable inutile 
    CptOCC     /compteur Occurence nombre de fois où on rencontre le caractère/
    Premier:Boolean   / indicateur de première occurence /
    i:NOMBRE  / Indice de boucle / 
    
    
    DEBUT
     
    Position = -1    /Valeur d'erreur au cas ou pas occcurence trouvée/
    Premier = Vrai   /Initialisation du Flag/  
    on démarre en admettant qu'on va trouver le caractère
    CptOcc = 0       initialisation du compteur d'occurence
    
    Pour i = 1 à longueur (LaChaine) Faire     on explore chaque caractère de la chaine 
    
    Si LaChaine [i] = CarRech Faire     on a trouvé le caractère recherché en position i dans la chaine
    
    
    Si Premier Alors si c''est la première fois qu'on le trouve
    Premier=Faux on ne veut plus repasser par ici, donc on met à faux Posistion = i on stocke la position de la première fois où on rencontre le caractère
    Fin si CptOCC = CptOCC +1 dans tous les cas on ajoute 1 au nombre d'occurences
    Fin si fin du "si on a bien trouvé le caractère recherché" Fin Pour fin du "pour chaque caractère de LaChaine" Retourne CptOCC on ressort le nombre de fois où on a trouvé le caractère Fin Fonction
    ça va comme ça ????
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  15. #15
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Perséverant, hummm?
    Si c'est pas assez, on l'envoie dans l'arène!
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

Discussions similaires

  1. Demande aide sur les TList
    Par inform113 dans le forum C++
    Réponses: 3
    Dernier message: 17/03/2007, 13h45
  2. [MS Query] neophyte demande aide sur jointures SQL
    Par thorgal972 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 27/11/2006, 17h13
  3. [phpMyAdmin] demande aide sur phpMyAdmin
    Par acipeg dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 25/11/2006, 14h35
  4. Demande aide sur certains avertissements
    Par yostane dans le forum MFC
    Réponses: 1
    Dernier message: 05/07/2006, 07h05

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