Exercice algorithmique
Dernière réponse : dans Programmation
Bonjours,
Voila j'ai un exercice d'algorithme et j'ai vraiment du mal si quelqu'un peut m'aider voici le sujet:
Nous souhaitons écrire un programme permettant de connaître la durée écoulée entre 2 instants T1 ET T2 définis par une date et une heure; un instant est représentable par un sextuplets contenant un jour, un mois, une année, une heure, des minutes et des secondes; la précision demandée pour la durée est la seconde.
( Rappel du nombre de jour par mois : 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
Ecrire l'algorithme du programme DUREE permettant d'obtenir ce résultat; une optimisation du programme est demandée.
Voila merci de bien vouloir m'aider
Voila j'ai un exercice d'algorithme et j'ai vraiment du mal si quelqu'un peut m'aider voici le sujet:
Nous souhaitons écrire un programme permettant de connaître la durée écoulée entre 2 instants T1 ET T2 définis par une date et une heure; un instant est représentable par un sextuplets contenant un jour, un mois, une année, une heure, des minutes et des secondes; la précision demandée pour la durée est la seconde.
( Rappel du nombre de jour par mois : 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
Ecrire l'algorithme du programme DUREE permettant d'obtenir ce résultat; une optimisation du programme est demandée.
Voila merci de bien vouloir m'aider
Autres pages sur : exercice algorithmique
Lassé par la pub ? Créez un compte
Bonjour,
Là, en l'état, c'est pas de l'aide que tu demandes c'est qu'on fasse ton boulot.
Donc montre nous ce que tu as fais et dis nous là ou tu as un problème.
Sinon, un petit rappel :
1 minute = 60 secondes
1 heure = 60 minutes
1 journée = 24 heures
1 mois = 28 ou 29 pour Février / 30 ou 31 pour les autres mois
1 année = 365 ou 366 jours
Bon courage
Là, en l'état, c'est pas de l'aide que tu demandes c'est qu'on fasse ton boulot.
Donc montre nous ce que tu as fais et dis nous là ou tu as un problème.
Sinon, un petit rappel :
1 minute = 60 secondes
1 heure = 60 minutes
1 journée = 24 heures
1 mois = 28 ou 29 pour Février / 30 ou 31 pour les autres mois
1 année = 365 ou 366 jours
Bon courage
Voila ce que j'ai fait
Programme DUREE VAR T1, T2, Date, Heure, Un jour, Un mois, Une année, Une heure, Des minutes, Des secondes : entier Début // Saisir instants T1 Affiche « Saisir Date » Saisir Date Affiche « Saisir Un jour, Un mois, Une année » Saisir Heure Affiche « Saisir une heure, des minutes et des secondes » // Saisir instants T2 Affiche « Saisir Date » Saisir Date Affiche « Saisir Un jour, Un mois, Une année » Saisir Heure Affiche « Saisir une heure, des minutes et des secondes » Affiche « Saisir Date et Heure T1 » Saisir Date & heure Affiche « jour / mois / année / Une heure / Des minutes / Des secondes » Affiche « Saisir Date et heure T2 » Saisir Date & heure Affiche « jour / mois / année / Une heure / Des minutes / Des secondes » Si T1 = T2 Alors Affiche « Durée égale 0 » Si non Si T1 < T2 Alors calcul T2 – T1 Saisir ( T2 * 60²) – ( T1*60²) = T2T1 Affiche « T1T2 » Si non T1 > T2 Alors calcul T1 + T2 Saisir ( T1 * 60²) + ( T2*60²) = T1T2 Affiche « T1T2 » Fin si Fin si Fin si Fin si Fin
Pourquoi imposes-tu T1 < T2 ? Il suffit de retourner l'absolue de la différence dans tous les cas, du coup peut importe quelle date est avant l'autre.
Ensuite l'astuce est de tout transformer en secondes, et de tout calculer dessus.
Donc :
1 min = 60 sec
1 h = 60 min * 60 sec
1 jour = 24 h * 60 min * 60 sec
1 mois = (28 ou 29 ou 30 ou 31) jours * 24 h * 60 min * 60 sec
1 annee = (365 ou 366) jours * 24 h * 60 min * 60 sec
Du coup, quand tu as toutes tes valeurs :
T1_EN_SECONDES = ANNEE_CONVERTI_EN_SECONDE + (chaque mois précédent CONVERTI_EN_SECONDE) + JOUR_MOINS_1_CONVERTI_EN_SECONDES + ...
Etc. et pareil pour T2.
Du coup, tu fais "Afficher ValeurAbsolue (T2-T1)" et c'est fini !
Enfin voila quoi ... Le BASH ci-dessous est cadeau, Juste pour le fun j'ai réalisé ton exercice d'algo:
Ensuite l'astuce est de tout transformer en secondes, et de tout calculer dessus.
Donc :
1 min = 60 sec
1 h = 60 min * 60 sec
1 jour = 24 h * 60 min * 60 sec
1 mois = (28 ou 29 ou 30 ou 31) jours * 24 h * 60 min * 60 sec
1 annee = (365 ou 366) jours * 24 h * 60 min * 60 sec
Du coup, quand tu as toutes tes valeurs :
T1_EN_SECONDES = ANNEE_CONVERTI_EN_SECONDE + (chaque mois précédent CONVERTI_EN_SECONDE) + JOUR_MOINS_1_CONVERTI_EN_SECONDES + ...
Etc. et pareil pour T2.
Du coup, tu fais "Afficher ValeurAbsolue (T2-T1)" et c'est fini !
Enfin voila quoi ... Le BASH ci-dessous est cadeau, Juste pour le fun j'ai réalisé ton exercice d'algo:
#!/bin/bash
function usage() {
if [ $# -eq 1 ]
then
echo "Erreur : " >&2
echo " $1" >&2
fi
echo "Usage of $0 :" >&2
echo " $0 <T1> <T2>" >&2
echo " T1 = Jours/Mois/Annees-Heures:Minutes:secondes" >&2
echo " T2 = Jours/Mois/Annees-Heures:Minutes:secondes" >&2
echo "Attention : combler les valeurs avec des 0 tel que :" >&2
echo " Jours : 01 ... 31" >&2
echo " Mois : 01 ... 12" >&2
echo " Annees : -XXXX ... XXXX" >&2
echo " Heures : 00 ... 23" >&2
echo " Minutes & Secondes : 00 ... 59" >&2
exit 1
}
function convertMinuteInSecondes() {
if [ $# -ne 1 ]
then
echo 0
else
echo $(($1 * 60))
fi
}
function convertHourInSecondes() {
if [ $# -ne 1 ]
then
echo 0
else
echo $(convertMinuteInSecondes $(($1*60)))
fi
}
function convertDayInSecondes() {
if [ $# -ne 1 ]
then
echo 0
else
echo $(convertHourInSecondes $(($1*24)))
fi
}
function convertMounthInSecondes() {
if [ $# -ne 2 ]
then
echo 0
else
res=0
for i in $(seq 1 1 $(($1-1)))
do
case $i in
1|3|05|7|8|10|12)
res=$(($res+31))
;;
4|6|9|11)
res=$(($res+30))
;;
2)
case $2 in
0)
res=$(($res+29))
;;
1)
res=$(($res+28))
;;
esac
;;
esac
done
echo $(convertDayInSecondes $res)
fi
}
function convertYearInSecondes() {
if [ $# -ne 2 ]
then
echo 0
else
case $2 in
0)
echo $(convertDayInSecondes $(($1*366)))
;;
1)
echo $(convertDayInSecondes $(($1*365)))
;;
esac
fi
}
test $# -ne 2 && usage "Nombre de parametres incorrect"
test $(expr length $1) -ne 19 && usage "Format de T1 incorrect"
test $(expr length $2) -ne 19 && usage "Format de T2 incorrect"
j1=${1:0:2}
M1=${1:3:2}
a1=${1:6:4}
h1=${1:11:2}
m1=${1:14:2}
s1=${1:17:2}
j2=${2:0:2}
M2=${2:3:2}
a2=${2:6:4}
h2=${2:11:2}
m2=${2:14:2}
s2=${2:17:2}
test $(echo $j1 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "Le jour de T1 doit etre un nombre"
test $(echo $M1 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "Le mois de T1 doit etre un nombre"
test $(echo $a1 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "L'anne de T1 doit etre un nombre"
test $(echo $h1 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "L'heure de T1 doit etre un nombre"
test $(echo $m1 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "Les minutes de T1 doivent etre un nombre"
test $(echo $s1 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "Les secondes de T1 doivent etre un nombre"
test $(echo $j2 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "Le jour de T2 doit etre un nombre"
test $(echo $M2 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "Le mois de T2 doit etre un nombre"
test $(echo $a2 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "L'anne de T2 doit etre un nombre"
test $(echo $h2 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "L'heure de T2 doit etre un nombre"
test $(echo $m2 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "Les minutes de T2 doivent etre un nombre"
test $(echo $s2 | sed 's/^[-+0-9][0-9]*//' | wc -c) -ne 1 && usage "Les secondes de T2 doivent etre un nombre"
test $M1 -le 0 -o $M1 -gt 12 && usage "Le mois de T1 doit etre compris entre 01 et 12"
test $h1 -lt 0 -o $h1 -gt 23 && usage "L'heure de T1 doit etre compris entre 00 et 23"
test $m1 -lt 0 -o $m1 -gt 59 && usage "Les minutes de T1 doivent etre comprises entre 00 et 59"
test $s1 -lt 0 -o $s1 -gt 59 && usage "Les secondes de T1 doivent etre comprises entre 00 et 59"
a1b=$(test $(expr $a1 % 4) -eq 0 -a $(expr $a1 % 100) -ne 0 -o $(expr $a1 % 400) -eq 0;echo $?)
case $M1 in
01|03|05|07|08|10|12)
test $j1 -le 0 -o $j1 -gt 31 && usage "Le jout de T1 doit etre compris entre 01 et 31"
;;
04|06|09|11)
test $j1 -le 0 -o $j1 -gt 30 && usage "Le jout de T1 doit etre compris entre 01 et 30"
;;
02)
case $a1b in
0)
test $j1 -le 0 -o $j1 -gt 29 && usage "Le jout de T1 doit etre compris entre 01 et 29"
;;
1)
test $j1 -le 0 -o $j1 -gt 28 && usage "Le jout de T1 doit etre compris entre 01 et 28"
;;
esac
;;
esac
test $M2 -le 0 -o $M2 -gt 12 && usage "Le mois de T2 doit etre compris entre 01 et 12"
test $h2 -lt 0 -o $h2 -gt 23 && usage "L'heure de T2 doit etre compris entre 00 et 23"
test $m2 -lt 0 -o $m2 -gt 59 && usage "Les minutes de T2 doivent etre comprises entre 00 et 59"
test $s2 -lt 0 -o $s2 -gt 59 && usage "Les secondes de T2 doivent etre comprises entre 00 et 59"
a2b=$(test $(expr $a2 % 4) -eq 0 -a $(expr $a2 % 100) -ne 0 -o $(expr $a2 % 400) -eq 0;echo $?)
case $M2 in
01|03|05|07|08|10|12)
test $j2 -le 0 -o $j2 -gt 31 && usage "Le jout de T2 doit etre compris entre 01 et 31"
;;
04|06|09|11)
test $j2 -le 0 -o $j2 -gt 30 && usage "Le jout de T2 doit etre compris entre 01 et 30"
;;
02)
case $a2b in
0)
test $j2 -le 0 -o $j2 -gt 29 && usage "Le jout de T2 doit etre compris entre 01 et 29"
;;
1)
test $j2 -le 0 -o $j2 -gt 28 && usage "Le jout de T2 doit etre compris entre 01 et 28"
;;
esac
;;
esac
T1=$(( $(convertYearInSecondes $a1 $a1b) + $(convertMounthInSecondes $M1 $a1b) + $(convertDayInSecondes $(($j1-1))) + $(convertHourInSecondes $h1) + $(convertMinuteInSecondes $m1) + $s1 ))
T2=$(( $(convertYearInSecondes $a2 $a2b) + $(convertMounthInSecondes $M2 $a2b) + $(convertDayInSecondes $(($j2-1))) + $(convertHourInSecondes $h2) + $(convertMinuteInSecondes $m2) + $s2 ))
DIFF=$(( $T2 - $T1 ))
echo "Le nombre de secondes entre les instants $1 et $2 est de :"
echo " ${DIFF#-}"
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumSolution d'un exercice algorithmique
- ForumSolution exercice algorithmique
- ForumExercice en algorithmique boucles
- ForumExercice algorithmique seconde
- ForumExercice en langage algorithmique
- ForumAlgorithmique exercice
- ForumExercice language c et algorithmique
- downloadExercice corrige complexite algorithmique
- ForumExercice algorithmie
- ForumExercice des algorithme
- Voir plus