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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    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....

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    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...

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    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 averti
    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
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    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
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    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 ????

  8. #8
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    Perséverant, hummm?
    Si c'est pas assez, on l'envoie dans l'arène!

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