Aide sur un ALGO - Algo - Programmation
Marsh Posté le 20-03-2007 à 22:07:17
En fait je ne comprend pas les instructions de la Fonction
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, ...)
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
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
Marsh Posté le 23-03-2007 à 10:44:44
clintou a écrit : donc voila comment je comprend la chose. |
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 |
Marsh Posté le 23-03-2007 à 11:32:04
clintou a écrit : |
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.
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.
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
Marsh Posté le 23-03-2007 à 22:45:11
et quelle est la valeur de [i] au debut de la boucle.
Merci d'avance
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
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
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.
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
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