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
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
A voir également:
- Algorithmique
- Videosurveillance algorithmique - Accueil - Protection
- Arbre algorithmique HELP !!! - Forum Programmation
- Exercice simple d'algorithmique ✓ - Forum Algorithmes / Méthodes
- Exercice en Algorithmique (Boucles) ✓ - Forum Algorithmes / Méthodes
- Fonction ppcm en algorithmique - Forum Programmation
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
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.
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 ;-)
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 ;-)
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
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
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
9 déc. 2007 à 15:38
probleme des tableaux en algorithme
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"
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
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.
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.
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
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).
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).