Inscription / Connexion Nouveau Sujet
Niveau IUT/DUT
Partager :

Algorithme

Posté par
Flora01277
17-11-12 à 10:10

Bonjour à tous, j'ai un exercice d'algorithme à faire, j'ai commencé mais je ne sais pas si c'est correcte ou non

Ecrire un algorithme permettant de saisir trois notes (sur 20) d'un étudiant, calculant sa moyenne et affichant cette moyenne avec la mention ("Tres bien" à partir de 16, "Bien" entre 14 et 16, "Assez bien" entre 12 et 14, "Passable" entre 10 et 12, "Insuffisant" en dessous de 10)

Voilà ce que j'ai fais:

ALGORITHME   notes
  Var n,r,i :nombres
DEBUT
  Ecrire "Entrez un nombre"
  Lire n
  Ecrire "Entrez un nombre"
  Lire r
  Ecrire "Entrez un nombre"
  Lire i
moyenne= (n+r+i)/3
TANT QUE (moyenne>=16) FAIRE
Ecrire"Tres bien"
Si 14<moyenne<16 ALORS
Ecrire "Bien"
Si 12<moyenne<14 ALORS
Ecrire"Assez bien"
Si 10<moyenne<12 ALORS
Ecrire"Passable"
SINON
Ecrire"insuffisant"
FIN


Voilà, pouvez vous me dire si ce que j'ai fais est correct, sinon pouvez vous me corriger s'il vous plaît?
Je vous remercie.

Posté par
LeDino
re : Algorithme 17-11-12 à 10:16

Citation :
TANT QUE (moyenne>=16) FAIRE...

Si la moyenne est supérieure à 16, qu'est-ce qui empêche ton programme de boucler à l'infini ?

Posté par
Flora01277
re : Algorithme 17-11-12 à 10:24

Ok donc a la place de mettre TANT QUE je peux mettre quelle boucle?

Posté par
LeDino
re : Algorithme 17-11-12 à 10:31

Pas une boucle : un SI avec une condition comme pour les autres mentions.
Et fais attention aux bornes...

SI  14 MOYENNE < 16  ALORS MENTION = "BIEN"

Posté par
LeDino
re : Algorithme 17-11-12 à 10:32

Ou sinon, en plaçant les SI dans le bon ordre :

Algorithme

Posté par
Flora01277
re : Algorithme 17-11-12 à 10:40

Ah ok je vois.. mais je n'ai jamais fait comme ça.. merci bcp. Je peux poster un autre exercice dans un autre topic?

Posté par
LeDino
re : Algorithme 17-11-12 à 10:44

Pour poster un autre exercice : c'est effectivement dans un autre topic.
Mais tu n'as droit qu'à un exercice par an...

Posté par
LeDino
re : Algorithme 17-11-12 à 10:44

Je blague ...
Tu postes autant d'exercices que nécessaires...

Posté par
Flora01277
re : Algorithme 17-11-12 à 10:45

Lol, ok merci beaucoup!

Posté par
fedjer
re : Algorithme 20-11-12 à 22:19

bonjour
je ne comprends pas comment fonctionne ton algorithme Ledino
car il calcule la moyenne et donc si par ex elle =
13 c'est bien >10 donc pourquoi n'afficherait-il pas passable?

Posté par
fedjer
re : Algorithme 20-11-12 à 22:26

Sur chacun de ces intervalles la distance parcourue d est une fonction affine du temps écoulé t puisque sur chaque intervalle la courbe de cette fonction est un
segment de droite. On admet que :
- Si t ∈[0 ;1]alors : d (t) = 30t;
- Si t ∈[1; 1, 5[alors : d (t) = 10t+20;
- Si t ∈[1,5;2[ alors : d (t) = 35;
- Si t ∈[2; 3]alors : d (t) = 40t-45.
Compléter l'algorithme pour qu'il donne en sortie la distance D parcourue à
l'instant T (T en entrée).
Entrée ENTRER T
SI T<1  ALORS 30*T→D
    SINON
    SI T<1 5, ALORS 10*T + 20→D
      SINON
          SI T<2  ALORS 35→D
      SINON 40*T-45→D
Fin du SI
Fin du SI
Fin du SI
Sortie  AFFICHER D
ma question : est on obligé s'utiliser si...sinon ou aurait on pu faire comme toi si...alors
merci

Posté par
LeDino
re : Algorithme 21-11-12 à 09:29

Citation :
je ne comprends pas comment fonctionne ton algorithme Ledino
car il calcule la moyenne et donc si par ex elle =
13 c'est bien >10 donc pourquoi n'afficherait-il pas passable ?

Il faut bien comprendre que TOUTES les conditions "SI" sont évaluées l'une après l'autre, et exécutées si elles sont respectées.
C'est donc la dernière exécutée qui "l'emporte" sur les précédentes.

Si la moyenne est égale à 13 :
Le programme affecte d'abord "INSUFFISANT" à la variable MENTION.
Puis le programme entre dans la condition SI >= 10 et affecte la valeur "PASSABLE" à la variable MENTION.
Puis le programme entre dans la condition SI >= 12 et affecte la valeur "ASSEZ BIEN" à la variable MENTION.
Puis le programme n'entre dans aucune des conditions SI qui suivent parce qu'elles ne sont pas respectées.
La variable MENTION reste donc bloquée à la valeur "ASSEZ BIEN".

L'algorithme fonctionne parce que les conditions sont placées dans le bon ordre :
de la condition la plus large à la condition la plus stricte.
C'est donc bien la condition la plus élevées respectée par la moyenne qui fixera la mention.

Pour la clarté, je préconise plutôt de préciser l'intervalle précis de chaque condition :
SI  10 <= MOY < 12  ALORS MENTION = "PASSABLE"
...etc
Afin d'éviter toute confusion.
MAIS la technique de programmation que j'ai proposée existe, et il faut au minimum la connaître et la comprendre.
Libre à chacun de l'appliquer ou non.

Dans un langage un peu plus évolué qu'ALGOBOX, on dispose en général d'une instruction de type SELECT CASE, qui ne laisse aucun doute :  le programme n'emprunte qu'UNE SEULE VOIE parmi celles proposées. Comme avec plusieurs IF THEN ELSE imbriqués, mais en bien plus lisible. Dans ce cas, il faut toujours préférer cette instruction beaucoup moins ambigüe.

Posté par
fedjer
re : Algorithme 21-11-12 à 09:40

d'accord j'ai compris! merci

peux tu me dire ce qui pêche dans mon programmequand je l'exécute il donne en réponse 0

prompt X
if X>0
then "POS"S
end
if X=0
then
"Nul"S
end
if X<0
then
"negatif"S
end
Disp S

Posté par
LeDino
re : Algorithme 21-11-12 à 10:04

Citation :
SI T<1  ALORS 30*T→D
    SINON
    SI T<1 5, ALORS 10*T + 20→D
      SINON
          SI T<2  ALORS 35→D
      SINON 40*T-45→D
Fin du SI
Fin du SI
Fin du SI
Sortie  AFFICHER D
ma question : est on obligé s'utiliser si...sinon ou aurait on pu faire comme toi si...alors

Très bonne question .

Le plus rigoureux est d'utiliser SI SINON.
Ainsi tu sais qu'il n'y a qu'une seule condition qui peut être exécutée.
Mais le programme n'est pas très "joli"... et si tu as beaucoup de conditions SI SINON imbriquées... le programme peut devenir "illisible".

Si tu veux éviter d'utiliser SI SINON...
... tu peux le faire en veillant à placer les conditions SI dans le bon ordre : de la plus large à la plus stricte.

Dans ton exemple ça donne :
SI T > 3    "D NON DEFINI"
SI T 3    ALORS  D = 40*T - 45
SI T < 2    ALORS  D = 35
SI T < 1,5  ALORS  D = 10*T + 20
SI T < 1    ALORS  D = 30*T
SI T < 0    ALORS  "D NON DEFINI"


Autre possibilité : pas de SI SINON avec des conditions mutuellement exclusives :
... (qui ne peuvent pas être vraies en même temps).
Il suffit de coller à la définition mathématique :
- Si t ∈[0 ;1]    alors :  d (t) = 30t ;
- Si t ∈[1; 1,5[  alors :  d (t) = 10t + 20 ;
- Si t ∈[1,5;2[   alors :  d (t) = 35 ;
- Si t ∈[2; 3]    alors :  d (t) = 40t - 45 .

Donc :
SI T < 0    ALORS  "D NON DEFINI"
SI T > 3    ALORS  "D NON DEFINI"
SI  0,0    T  <  1,0    ALORS  D = 30*T
SI  1,0    T  <  1,5    ALORS  D = 10*T + 20
SI  1,5    T  <  2,0    ALORS  D = 35
SI  2,0    T  <  3,0    ALORS  D = 40*T - 45


Personnellement, j'aime bien cette dernière présentation qui est à la fois rigoureuse et claire.
Qu'en penses-tu ?

Posté par
LeDino
re : Algorithme 21-11-12 à 10:06

T inférieur ou égal à 3 dans la dernière ligne pour coller à l'énoncé...

Posté par
LeDino
re : Algorithme 21-11-12 à 10:07

Citation :
peux tu me dire ce qui pêche dans mon programmequand je l'exécute il donne en réponse 0

As-tu défini S comme une CHAINE ?

Posté par
LeDino
re : Algorithme 21-11-12 à 10:08

Parce que snon, la logique est correcte.
Les conditions sont mutuellement exclusives...

Posté par
fedjer
re : Algorithme 21-11-12 à 10:10

"As-tu défini S comme une CHAINE ?"
que veux tu dire?
sinon dans un autre post Hiphigenie me disait que S était une variable qui ne pouvait contenir que des nombres!

Posté par
LeDino
re : Algorithme 21-11-12 à 10:20

C'est ce que je te demandais : as-tu défini S comme une CHAINE DE CARACTERES ?
Sinon tu ne peux lui affecter un texte.

Posté par
LeDino
re : Algorithme 21-11-12 à 10:22

Si tu ne peux pas utiliser de variables de type CARACTERE :

S = -1
S = +1
S = 0

Selon le signe de X...

Posté par
fedjer
re : Algorithme 21-11-12 à 10:28

dans un programme pour calculatrice si S est une variable de  type caractère comment entrer ça?

Posté par
LeDino
re : Algorithme 21-11-12 à 10:30

Voir ta notice.
Ou sinon recherche sur Internet.
Suis pas vendeur de calculette ...

Mais sinon, au lieu d'affecter S = "POSITIF"...
... tu peux simplement faire un DISP "SIGNE POSITIF"...
... ou quelque chose comme ça...

Posté par
fedjer
re : Algorithme 21-11-12 à 11:01

merci beaucoup Ledino
tu pourrais faire vendeur de calculette!
j'ai mis : if X>0
then
disp "positif"

et ça marche!

Posté par
LeDino
re : Algorithme 21-11-12 à 14:13

Citation :
tu pourrais faire vendeur de calculette !

D'accord !
C'est 100 EUROS à virer sur le compte suivant :
IBAN :  FR76  3141 1592 6535 LEDINO Clé 271828

Posté par
fedjer
re : Algorithme 21-11-12 à 16:12

à défaut d'un virement :



sans modération

Posté par
LeDino
re : Algorithme 21-11-12 à 16:48

C'est encore mieux !!!
Ca tombe bien, j'avais soif ...

A la tienne !



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1768 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !