Exo algorithme pour correction s'il vous plai

Résolu/Fermé
bansan Messages postés 122 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 8 mai 2011 - 10 mars 2008 à 19:43
 niza - 26 mars 2008 à 01:58
Bonjour,
Est ce que quelqu'un peut m'aider sur ces 2 exo, je les ai commencé mais je ne sais pas comment continuer...en tout cas pour le dernier..merci

Exercice 10 - Nombre de voyelles
Ecrire un algorithme dont le role est de compter (et d'afficher) le nombre de voyelles (accentuees et non accentuees) presentes dans une chaine de caracteres saisie au clavier par l'utilisateur.

10) Nombre de voyelle

Variables
lettre, maj : caractères
i, j, k : entiers
chaine, chaine_2 : chaine de caractère

Début

Afficher (« Saisir une chaine »)
Saisir (chaine)
l<--LONGUEUR (chaine)
chaine_2<--« »
Pour i de 1 à l
lettre<--sschaine(chaine,l,1)
Si lettre= « a » ou lettre = « e»ou lettre = « i » ou lettre = « o » ou lettre = « u» ou
lettre= « A » ou lettre = « E»ou lettre = « I » ou lettre = « O » ou lettre = « U»

chaine_2<--chaine_2+a
FinSi
FinPour
Afficher (LONGUEUR chaine_2)
Fin


Exercice 11 - Chaine representant une grandeur numèrique entière
Ecrire un algorithme dont le role est de permettre a l'utilisateur de saisir tine chaine de caracteres, puis de verifier si la chaine de caracteres contient uniquement des chiffres precedes ou non d'un signe negatif ou positif (si le chaine respecte ce format. l'algorithme dolt convertir cette chaine de caracteres en entier et afficher le resuitat de 0 conversion).

(Je n'ai pas encore declaré les variables...)

Debut
Afficher(« Saisir une chaine »)
Saisir(chaine)
l<--LONGUEUR(chaine)
Pour i de 1 à l
a<-- sschaine(chaine,l,1)
Si a = « + » Alors

Convert_num<--CVNOMBRE(chaine)

5 réponses

bsr,
svp aidez moi à trouvé la solution de ce prolème: écricre un algorithe qui permet d'écrire un nom quelquonque en étoile. je ne qsais plus mème la mèthode à suivre pour le résoudre.
merci d'avance.
1
Bonjour,

Exercice 11:

Dans cet exercice je n'ai pas utilisé la boucle POUR ... A ... FAIRE mais la boucle REPETER ... JUSQUA_CE_QUE
En effet, pas besoin de tester tous les caractères, il suffit qu'un seul soit mauvais pour que toute la chaine soit mauvaise.
J'utilise deux boucles imbriquées

La premiere boucle verifie chaque caractère de chaine , si un seul est mauvais tout est mauvais
La seconde boucle compare chaque caractère de chaine à chaque caractère de ChaineNum
S'il y a un signe + ou - il doit etre le premier caractère de chaine

Variables
i, j , ok , Convert_num , l1 , l2 : entiers   l'entier ok sert de signal : ok=0 pas bon, ok=1 c'est bon
a , b , chaine, ChaineNum : chaine de caractère  a et b sont des chaines parce que tu utilises sschaine()

DEBUT
ChaineNum<-- "0123456789"  ChaineNum contient tout les caractères valides.
l1<--LONGUEUR(ChaineNum)
Afficher("Saisir une chaine ")
Saisir(chaine)
l2<--LONGUEUR(chaine)
i=0
Repeter
   i=i+1
   a<--sschaine(chaine,i,1)
   j=0
   faire
      j=j+1
      b<--sschaine(chaineNum,j,1)
      si a=b alors ok<--1
      sinon si ((a="+" ou a="-") et i=1) alors ok<--1
      sinon ok<--0
      fin si
   Jusqua_Ce_Que ok=1 ou j=l1  si ok=1 le caractère est valide , on sort de la boucle , on verifie le suivant
Jusqua_Ce_Que ok=0 ou i=l2     si ok=0 caractère invalide, chaine invalide, on sort de la boucle
si ok=0 alors
    afficher(a," n'est pas un chiffre")
sinon
    Convert_num<--CVNOMBRE(chaine)
    afficher("chaine valide")
    afficher(Convert_num)
finsi
FIN
0
bansan Messages postés 122 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 8 mai 2011 1
10 mars 2008 à 23:33
Merci
Interessant avec la boucle repeter...
Je m'en souviendrais pour que mes lignes soient plus siimples
Merci
0
bansan Messages postés 122 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 8 mai 2011 1
10 mars 2008 à 23:48
Pardon , désolé de revenir sur cet exo,
il y a des lignes que je ne comprends pas:

......
i=i+1
a<--sschaine(chaine,i,1)
j=0
faire
j=j+1
b<--sschaine(chaineNum,j,1)
si a=b alors ok<--1
sinon si ((a="+" ou a="-") et i=1) alors ok<--1
sinon ok<--0
fin si
.......
On repete i=i+1,
a sesigne la sous chaine a chaque boucle
Pareil pour j
et b represente la sous chaine a chaque boucle
Mais par contre "Si a=b" n'est pas possible...comment est ce que a pourrait etre egale a b???

imaginons que l'utilisateur saisit: 4512+6583, sachant que sela represnete la chaine et donc chaque sous schaine de A et que 0123456789 reprensente chaineNum et chaque souschaine de b, la probabilité pour trouver a=b..est minime...

L4autre chose que je ne comprends pas c'est pourquoi "..si((........ et i=1) c'est le i=1 que je ne comprends pas....
Merci
0
Bonjour,

Je te préviens, l'explication va etre assez longue.

D'abord une rectification, j'ai ecrit Faire mais il fallait ecrire Repeter pour rester cohérent

Pour expliquer on va prendre ton exemple: chaine<-"4512+6583" : chaineNum<-"0123456789"
....
i=0 ;index de position dans chaine, initialisé à 0
Repeter
   i=i+1 ;a chaque tour on avance de 1, i varie de 1 à L2 (longueur de chaine)
   a<--sschaine(chaine,i,1) ; a prend la valeur du caractère pointé par i
                                      sschaine(chaine,i,1) veut dire que a prend la valeur de chaine à partir de la position i
                                      sur une longueur de 1 caractère
   j=0 ;index de position dans chaineNum, initialisé à 0
   Repeter
      j=j+1 ;a chaque tour on avance de 1, j varie de 1 à L1 (longueur de chaineNum)
      b<--sschaine(chaineNum,j,1) ;b prend la valeur du caractère pointé par j

ici commence la comparaison
pour i=1 a="4"
pour j=1 b="0"
si a=b ;Faux on regarde deuxième condition
sinon si ((a="+" ou a="-") et i=1) ;Faux donc condition par défaut
sinon ok<--0 ;les deux premières conditions sont fausses, on applique ce cas.

Jusqua_Ce_Que ok=1 ou j=L1 ; ok=0 et j=1, la codition de sortie de boucle est fausse
                             donc on refait un tour

j=j+1 ; j=2
a toujours egale 4 (a="4")
b="1"
on compare a et b ; c'est pareil que ci-dessus, on refait un tour

j=j+1 jusqu'a j=5
a toujours egale 4 (a="4")
b="4"
si a=b ; Vrai alors ok<- 1; condition satisfaite, on va à fin si

Jusqua_Ce_Que ok=1 ou j=L1 ; ok=1 et j=5, la condition de sotie de boucle est vraie, on sort de la boucle
Jusqua_Ce_Que ok=0 ou i=L2 ; ok=1 et i=1, a condition de sotie de boucle est fausse donc on refait un tour
i=i+1
a="5"
j=0 ;on remet à 0 le pointeur de caractère de chaineNum et on recommence 
Repeter
   j=j+1 ;   j=1 -> b="0" -> comparer a?=b etc...

Maintenant pour i=5 -> a="+"    j=1 -> b="0"
a ?= b faux
((a ?= "+" ou a ?= "-") et i ?= 1)) faux puisque i>1
alors ok<-0 ;  on refait un tour j=j+1 etc..
mais les conditions 1 et 2 seront toujours fausses car "+" et "-" ne sont pas dans chaineNum et i>1,
ok sera toujours à 0 pour i=5
alors quand arrive j=10 (L1)
Jusqua_Ce_Que ok=1 ou j=L1 est Vrai (l1=10) ; sortie de boucle
Jusqua_Ce_Que ok=0 ou i=L2 est Vrai (ok=0) ; sortie de boucle

on est sorti des deux boucles, on enchaine le programme
si ok=0 alors
    afficher(a," n'est pas un chiffre"); VRAI puisque ok=0
sinon
    Convert_num<--CVNOMBRE(chaine)
    afficher("chaine valide")
    afficher(Convert_num)
finsi
FIN

Bon, je sais, ça fait un peu plat de nouilles, mais des qu'on fait des boucles imbriquées ça se complique un peu.

Ce qu'il faut retenir:
-la boucle Repeter ... Jusqua_Ce_Que(condition) tourne jusqu'a ce que condition soit Vraie
(ou tant que condition est fausse).
-le test SI ... SINON SI .... SINON ... FINSI se fait dans l'ordre ou on l'ecrit, des qu'un test est vrai on va à FINSI
si auncun test n'est vrai on applique la valeur par défaut SINON.

Fais le test avec des petites chaines, "10", "-1", "1-", "0A"
Sur un papier tu mets tes variables i= , j= , ok= .... que tu mets à jour
à chaque changement en suivant pas a pas le deroulement du programme.

Si ça coince encore, fait moi signe, Salut.
0
bansan Messages postés 122 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 8 mai 2011 1
11 mars 2008 à 12:57
Bonjour,
J'ai donc compris que la boucle a l'interieur de la boucle se répete jusqu'a la fin de chaque carractere de la chaine pour ensuite refaire une boucle de la grande boucle et puis repartir pour faire x petites boucles...
JE comprends mieux...
C'est interessant...
Quelque chose que je devrais retenir

Mais pour le "Si a=b "ET i=1...euh...je ne vois pas pkoi et i=1...
0
Content que tu profites de la leçon

sinon si ((a="+" ou a="-") et i=1) alors ok<--1

i=1 parce le signe "+" ou "-" n'est valable que s'il est en première position dans chaine, donc pour i=1, sinon ça ne veut plus rien dire, "-1" c'est bon, "1-" c'est incorrect .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonjour j'aimerais que l'on m'aide pour mon algorithme je n'y arrive pas aidez moi svp

voici l'enoncé:

Le professeur de gestion de 1ere stg 1 souhaite calculer la moyenne de ses eleves au second trimestre en leur ajoutant un bonus de 0.5 point sur la moyenne globale. Si la moyenne du second trimestre a augmenté de +5% par rapport au 1er trimestre, la moyenne sera augmenté d'un demi point sinon le programme affichera le résultat suivant:"poursuivez vos efforts". Il ya 3 notes au second trimestre toutes affectées du coefficient 1.
Vous calculerez la moyenne en affichant le résultat sous la forme:
"l'eleve"; nom,prénom, "a une moyenne de ", moyenne.


meci d'avance
0