Aide sur un ALGO

Aide sur un ALGO - Algo - Programmation

Marsh Posté le 20-03-2007 à 21:51:10    

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.
 
 
 
Fonction DonneOccurence (LaChaine:Tableau(80) de CARACTERE,CarRech:Caractère,Position:IN OUT NOMBRE):NOMBRE
VAR
 
Indice:Nombre  
CptOCC     /compteur Occurence/
Premier:Boolean       /Flag au drapeau pour indiquer si premiere occurrence/
i:NOMBRE     /Variable de la boucle/
 
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


Message édité par clintou le 20-03-2007 à 22:38:43
Reply

Marsh Posté le 20-03-2007 à 21:51:10   

Reply

Marsh Posté le 20-03-2007 à 21:55:27    

C'est quoi la question ?


---------------
TriScale innov
Reply

Marsh Posté le 20-03-2007 à 22:07:17    

En fait je ne comprend pas les instructions de la Fonction

Reply

Marsh Posté le 20-03-2007 à 22:39:11    

la question est peut-etre mal posée?

Reply

Marsh Posté le 21-03-2007 à 09:45:04    

Commence par nous dire ce que tu comprends (par exemple, est-ce que tu comprends le but global de la fonction ?) et indiquer précisément ce que tu as du mal à saisir (une instruction particulière, le fonctionnement global de l'algo, ...)


---------------
TriScale innov
Reply

Marsh Posté le 21-03-2007 à 20:33:38    

quel est la valeur de fin de la variable de la boucle?Est-ce 80 cases du tableau ou la chaine de caractere que j'ai saisi dans le programme principal?
 
De même je n'ai pas compris cette partie de l' algo  
 
que faire apres le premier FAIRE?
A quoi correspond le égal de LaChaine [i] = CarRech  
Quel est la valeur de [i]?
 
 
Pour i = 1 à longueur (LaChaine) Faire
Si LaChaine [i] = CarRech Faire
Si Premier Alors
Premier=Faux
Posistion = i

Reply

Marsh Posté le 22-03-2007 à 21:23:14    

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

Reply

Marsh Posté le 23-03-2007 à 10:44:44    

clintou a écrit :

donc voila comment je comprend la chose.
[...]
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


 
C'est un bon début. Maintenant, il te reste à comprendre à quoi sert la fonction (en gros, que représentent CptOcc et Position ?)
 

clintou a écrit :

A quoi correspond le égal de LaChaine [i] = CarRech
   Il s'agit ici d'un test d'égalité, et non d'une affectation. J'aurais plutôt écrit Lachaine[i]==CarRech pour éviter les confusions
 
Quel est la valeur de [i]?
  i est l'indice de boucle, qui est incrémenté à chaque itération
 
Pour i = 1 à longueur (LaChaine) Faire
  i varie ici entre 1 et la longueur de laChaine


---------------
TriScale innov
Reply

Marsh Posté le 23-03-2007 à 11:32:04    

clintou a écrit :


A quoi correspond le égal de LaChaine [i] = CarRech  


Normalement (enfin du temps ou on voyait ca en cours) en algorithmie, le '=' dénote une comparaison(égalité) et le ':=' une affectation.
Ton algorithme utilise '=' dans les deux cas ce qui portent à confusion.


Message édité par breizhbugs le 23-03-2007 à 11:33:37
Reply

Marsh Posté le 23-03-2007 à 12:08:29    

d'un autre côté, y'a qu'en C qu'on fait des affectation dans la condition d'un test, ou qu'on teste une égalité au milieu d'une instruction...
 
si <test> alors
<affectations>
sinon
<affectations>
fin si
 
ça s'écrit toujours comme ça un algo, y'a pas de confusion possible.
 
et même si en C ça va par exemple se traduire par :
 
a = (b == c)*d;
 
on s'en bat les coucougnettes, en algo ça ne sera pas raccourci de la sorte.

Reply

Marsh Posté le 23-03-2007 à 12:08:29   

Reply

Marsh Posté le 23-03-2007 à 21:47:25    

merci ppour 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.
 
Desolé si j'insite mais je veux absolument comprendre, merci encore à tous ceux qui urront la patience et la gentillesse de ma repondre
 
 

Reply

Marsh Posté le 23-03-2007 à 22:45:11    

et quelle est la valeur de [i] au debut de la boucle.
 
Merci d'avance

Reply

Marsh Posté le 26-03-2007 à 09:54:40    

après, ça dépend du langage utilisé. en C, la chaîne fait taille de la chaîne + 1, un caractères "\0" étant ajouté à la fin pour indiquer la fin de la chaîne.
 
à nouveau, selon le langage, [1] = première caractère de la chaine ou second. tout dépend de la façon de stocker les chaînes (de 0 à taille - 1 ou de 1 à taille
 
il faut noter simplement que dans certain langages, une chaîne de caractères est un simple tableau de caractères. c'est le cas du C ou du C++.
 
par contre, tout ce que je peux dire à propos de cette algo, c'est qu'il est tout sauf un algo : ça ne sera transcriptible qu'en ASM, C, C++ ou dérivés.
 
en ADA, Pascal ?, VB, Java, C#, etc. une chaîne N'EST PAS un tableau de caractères. du moins, elle n'est pas exploitable sous cette forme directement.
 
On utilisera alors des fonction d'extraction. C'est ces fonction d'extraction qui doivent apparaître dans ton algo, pas des accès directs en mémoire comme c'est le cas avec la syntaxe actuelle. les accès directs apparaîssent uniquement lors de la phase de l'optimisation, lorsqu'on exploite les raccourcis du langage choisi, pas au moment de l'élaboration de l'algo, où on ne sais même pas encore si c'est un PC qui va s'occuper de faire le traîtement ou non.
 
En gros :
 
de Pour i = 1 à longueur_de_la_chaine(chaine)
  si caractère_à_l'indice(i) ...
  fin si
fin pour


Message édité par MagicBuzz le 26-03-2007 à 09:56:52
Reply

Marsh Posté le 26-03-2007 à 20:58:32    

non c'est juste un algo sans contrainte de programme.
 
Peux tu m'aider à resoudre cet algo pas à pas

Reply

Marsh Posté le 27-03-2007 à 09:27:15    

Pour comprendre ce qui se passe, tu peux prendre un feuille de papier, et noter dessus toutes les variables avec leur valeur. Tu exécutes pas à pas l'algorithme, en reportant bien tous les changements de valeur de tes variables sur ta feuille. Je pense que comme ça tu devrais vite voir comment ça marche.


---------------
TriScale innov
Reply

Marsh Posté le 27-03-2007 à 09:28:28    

effectivement.
 
un algo, c'est comme une recette de cuisine. et c'est en cuisinant qu'on devient cuisinier :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed