Exo algorithme pour correction s'il vous plai

Résolu
bansan Messages postés 125 Statut Membre -  
 niza -
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)
Configuration: Windows XP
Firefox 2.0.0.12

5 réponses

  1. niza
     
    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
  2. amigo
     
    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
    1. bansan Messages postés 125 Statut Membre 1
       
      Merci
      Interessant avec la boucle repeter...
      Je m'en souviendrais pour que mes lignes soient plus siimples
      Merci
      0
    2. bansan Messages postés 125 Statut Membre 1
       
      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
  3. amigo
     
    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
    1. bansan Messages postés 125 Statut Membre 1
       
      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
  4. amigo
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bigupblg
     
    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