Algorithmique

Fermé
mandy - 8 déc. 2007 à 19:48
Qwerti Messages postés 166 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 28 octobre 2008 - 14 déc. 2007 à 16:59
Bonjour,
please ,aidez-moi ds un probléme d'algotithmique.
voici l'énoncé:
écrire un algorithme qui demande à l'utilisateur de saisir une date puis il affiche s'il est valide ou non.
voici ce que j'ai fait:
debut
var j,m,a:entier
écrire("entrez des valeurs")
lire(j)
lire(m)
lire(a)
si j=29 et m=2 et a/4=a\4 alors
afficher ("la date est valide")




et puis je suis bloquée

8 réponses

Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
9 déc. 2007 à 04:25
Le problème est relativement bien exposé. Mandy souhaite concevoir un algorithme qui permette de lire une date au format jour/mois/année et de vérifier si cette date est valable, c'est à dire vérifier qu'on n'a pas de 31 février ou toute autre valeur farfelue.

En algorithmie tu as autre chose que l'opérateur de comparaison "=", je ne vais pas te réexpliquer ça. Donc déjà pour commencer tu t'y prends mal en comparant 29 par égalité. Si je tape 4/2/2008 la date est valide et pourtant avec ton début de méthode il ne va pas passer.

Bon je ne te cache pas qu'avec certains langages de programmation des fonctions toutes faites (ou du moins des moyens de vérification aussi barbares qu'ils soient) peuvent être mis en oeuvre pour valider ou non une date mais en algorithmie pas le choix, faut faire l'exercice. Alors très rapidement je te donne juste l'idée avant que je ne tombe de sommeil sur mon clavier.
SI jour>32 OU jour<1 OU mois > 12 OU mois <1 ALORS (tu écartes déjà les valeurs impossibles, genre un -5/13/2007 ou un 36/15/2008 ou encore un 0/0/2007)
  afficher "date non valide"
SINON (là tu vas t'amuser)
  SI mois=2 ALORS (février étant un cas à part je le traite seul)
    déterminer si c'est une année bisextile => placer 29 ou 28 selon
    SI jour > ce que tu as déterminé plus haut ALORS
      afficher "date non valide"
    FIN SI
  SINON (les autres mois respectent une logique implacable)
    finmois(1) = 31
    finmois(2) = -1 (peu importe car on ne traitera pas février ici, on est dans le SINON du SI mois=2i)
    finmois(3) = 31
    finmois(4) = 30
    finmois(5) = 31
    finmois(6) = 30
    finmois(7) = 31
    finmois(8) = 31
    finmois(9) = 30
    finmois(10) = 31
    finmois(11) = 30
    finmois(12) = 31
    SI jour > finmois(mois) ALORS
      afficher "date non valide"
    FIN SI
  FIN SI
FIN SI

Voilà l'idée. finmois représente un tableau contenant le dernier jour du mois. En lui fournissant l'indice du mois encodé (et on sait qu'on ne dépassera pas l'indice parce qu'au tout début on a placé une première condition dégrossissante) on obtient directement la limite du mois. Il ne reste plus qu'à la comparer avec le jour demandé (une fois encore qui vaudra au maximum 31) et si ce dernier dépasse, la date n'est pas valide.

Bon courage pour mettre ça en musique et l'adapter à tes besoins !

PS : Je ne prétends pas détenir un algorithme des plus optimal qui soit (ni même correct, j'ai fait ça d'intuition), on peut probablement faire plus court... peut être avec de savants calculs matéhmatiques je n'en sais trop rien. ^^ Enfin tu nous en diras des nouvelles ;-)
1
sanderoovirus Messages postés 1 Date d'inscription samedi 8 décembre 2007 Statut Membre Dernière intervention 8 décembre 2007
8 déc. 2007 à 22:29
je pense que tu n'exprime pas bien votre probleme ,tu peus formé votre ideé avec d'autre facon et chui attend votre probleme connect moi sur sanderoovirus@yahoo.fr
0
iostream Messages postés 5 Date d'inscription samedi 8 décembre 2007 Statut Membre Dernière intervention 9 décembre 2007
9 déc. 2007 à 15:38
probleme des tableaux en algorithme
0
merci Posotaz ,vos idées m'ont bien aidé .
0

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

Posez votre question
je m'éxcuse M posotaz ms ce ke t'as écri j'éspère k il é mal faisent. chui un petit dévlopeur est je c ke il y a plusieur méthode pour écrire un algorithme ms la résultat doi étre la méme ms pr ce ke tu as écris je dis je m'éxcuse ms je ponse kilé mal fait at un peu long plus il est méme ps términé car dans le cas ou tt est just ton programe va r1 affiché ms ds il ns a dis kil doi affiché "valide"
0
Qwerti Messages postés 166 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 28 octobre 2008 85
14 déc. 2007 à 16:23
Un petit bemol cependant...

Si l'année est divisible par 100, elle n'est bisextile que si elle est divisible par 400, ca rajoute du piment dans l'algorithme.

Mandy, comptes-tu implementer cet algorithme dans un langage quelconque ?

a+
-Qwerti.
0
quel est l'algorithme juste pour cette exercice?
0
Qwerti Messages postés 166 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 28 octobre 2008 85
14 déc. 2007 à 16:59
Salut Mandy,

Je pense que l'algorithme de Posotaz est tres bien.

Fais juste attention, il y a une petite "boite noire" dans ce qu'il a ecrit : "determiner si l'annee est bisextile ou pas" :

SI ( ( (année % 4 == 0 ) && (année % 100 != 0) ) || ( ( année % 400 == 0 ) && ( année % 100 == 0 ) ) ) ALORS l'année est bisextile.


Nomenclature :

a % b : reste de la division de a par b ;

== : test d'egalité ;

!= : test d'inégalité ;

&& : ET logique ;

|| : OU logique.

Encore une fois, comptes-tu l'implementer dans un langage quelconque (BASIC, Pascal, C/C++, JAVA, Python, Assembleur, ADA, LISP, Japonais, Croatien de Babylonie supérieure, Camembert President, ou autre ?)

a+
-Qwerti.

PS. En reflechissant bien il y a un moyen qui evite la série de tests de Posotaz... mais ca depend un peu de ce que tu veux faire vraiment. Es-tu en college/lycée/fac, et est-ce un devoir demande par un prof ? Si tu es au college et que tu sors l'algorithme de Posotaz, ce sera cool ! Tiens, tu pourras meme dire a ton prof que c'est l'algorithme du grand savant Posotaz, informaticien/mathematicien/logicien/sculpteur de pierre/cuisinier/algorithmicien du XIIe siecle qui a découvert ce fabuleux algorithme lors d'un voyage organisé en compagnie du Pape Jean Pi R-Carré qui lui a demandé d'implementer ca sur son telephone portable (qui tournait sur une version allegée de RedHat-Debian-SuSE developpée par les ingenieurs de Mycrosoft quelques années plus tard).
0