Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 04-10-2017 15:02:29
- Kinito
- Invité
Chronomètre sur algobox
Bonjour, je dois faire 3 algo sur algobox les algo sont des tri j'ai pris le tri a panier, le tri a bulle, et le tri par sélection, mais le prof nous a demander de mettre des chronomètres sur chacun des tri afin de savoir quel tri est le plus rapide.
Ma question est donc : Comment fait-on pour mettre un chronomètre sur Algobox ?
Merci pour les future réponse
Cordialement,
Kinito
#2 04-10-2017 16:33:27
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 991
Re : Chronomètre sur algobox
Bonjour,
Bonne question.
Apparemment, Algobox ne gère aucun chronomètre en interne...
Pour vérifier, j'ai cherché, cherché et rien trouvé...
Je peux te proposer de contourner la difficulté de 2 façons
1. Introduire un compteur différent dans chaque tri et qui s'incrémente de 1 à chaque déplacement (pas très fiable)
2. a) Au début du 1er tri, introduire LIRE heure1_debut (déclarée comme variable chaîne) sous format hh:mm:ss
b) Lorsque le tri est fini, introduire LIRE heure1_fin (déclarée comme variable chaîne) sous format hh:mm:ss
Puis idem en début et fin du tri2 et du tri3.
Il te faudrait alors créer une fonction qui à partir des chaînes debut et fin fasse le traitement fin-debut et donne un résultat...
Sinon, je ne sais pas et ne demande qu'à savoir !
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#3 04-10-2017 18:55:38
- Kinito
- Invité
Re : Chronomètre sur algobox
Merci de ta réponse, mais comment tu fait pour déclarer une chaîne sous format hh:mm:ss ?
#4 04-10-2017 19:29:37
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 991
Re : Chronomètre sur algobox
Salut,
Je ne suis pas expliqué suffisamment clairement :
Tu déclares des variables chaîne puis quant l'instruction LIRE attend que tu rentre cette chaîne, tu la rentre en tapant par exemple :
19:23:45 puis Entrée...
Et pour être le plus juste possible
tu regardes ta montre ou une pendule, il est mettons 19 h 23 min 0 s, tu tapes 19:23:45, tu gardes le doigt prêt à appuyer sur Entrée et tu guettes la trotteuse :
dès qu'elle arrive à 19 h 23 min 45 s hop tu appuies !
Le temps de réflexe doit être de quelques dixièmes de s...
Est-ce que ton prof a vérifié que AlgoBox était capable de gérer le temps ? Je programme en Python et là la réponse est oui : c'est même très très simple... En langage C et C++ par ex aussi...
@+
[EDIT]Réflexions faites, système valable pour l'heure de début...
Pour l'heure de fin de tri, il faudra avoir un œil sur le chrono et un œil sur le déroulement du programme (comme ça, après, tu loucheras ^_^) : il faut pouvoir repérer au plus vite, la demande de l'heure de fin : après peu importe le temps que tu mets pour la rentrer, le système est en pause...
Dernière modification par yoshi (04-10-2017 19:56:57)
Arx Tarpeia Capitoli proxima...
Hors ligne
#5 04-10-2017 21:18:36
- Kinito
- Invité
Re : Chronomètre sur algobox
Oui je suis d’accord sur ce que tu m’explique mais le soucis c’est que quand je mes heures_debut (chaîne) admettons 21:16:46 et en heure_fin(chaîne) 21:16:55 puis quand je mes heure_fin-heure_debut il ne m’affiche rien
#6 04-10-2017 21:21:50
- Kinito
- Invité
Re : Chronomètre sur algobox
Oui je suis d’accord sur ce que tu m’explique mais le soucis c’est que quand je mes heures_debut (chaîne) admettons 21:16:46 et en heure_fin(chaîne) 21:16:55 puis quand je mes heure_fin-heure_debut il ne m’affiche rien je te prendrait un screen de mon algo avant que je ne part en cours
#7 05-10-2017 07:19:34
- Kinito
- Invité
Re : Chronomètre sur algobox
voici l'algo :
FONCTIONS_UTILISEES
VARIABLES
A EST_DU_TYPE LISTE
I EST_DU_TYPE NOMBRE
N EST_DU_TYPE NOMBRE
M EST_DU_TYPE NOMBRE
T EST_DU_TYPE NOMBRE
P EST_DU_TYPE LISTE
W EST_DU_TYPE NOMBRE
Z EST_DU_TYPE NOMBRE
T EST_DU_TYPE NOMBRE
heure EST_DU_TYPE CHAINE
heure2 EST_DU_TYPE CHAINE
Heure_définitive EST_DU_TYPE CHAINE
DEBUT_ALGORITHME
AFFICHER "Saisir le nombre de termes :"
LIRE N
AFFICHER "Saisir la valeur maximal :"
LIRE Z
LIRE heure
POUR I ALLANT_DE 1 A N
DEBUT_POUR
A I PREND_LA_VALEUR ALGOBOX_ALEA_ENT(1,Z)
AFFICHER* A I
FIN_POUR
POUR M ALLANT_DE 1 A Z
DEBUT_POUR
P[M] PREND_LA_VALEUR 0
POUR I ALLANT_DE 0 A N
DEBUT_POUR
SI (A I==M) ALORS
DEBUT_SI
P[M] PREND_LA_VALEUR P[M]+1
FIN_SI
FIN_POUR
AFFICHER "Nombre de "
AFFICHER M
AFFICHER " : "
AFFICHER* P[M]
FIN_POUR
LIRE heure2
AFFICHER "Temps pour effectuer algorithme : "
Heure_définitive PREND_LA_VALEUR heure2-heure
AFFICHER* Heure_définitive
FIN_ALGORITHME
Quand je fait fonctionner l'algo il me met :
Temps pour effectuer algorithme :
Et rien ne s'affiche
peut tu me venir en aide ?
#8 05-10-2017 11:53:47
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 991
Re : Chronomètre sur algobox
Salut,
C'est normal, tu ne soustrais pas deux nombres mais deux chaînes de caractères, il faudrait les traiter...
Mais je me suis aperçu qu'on ne peut pas convertir la chaine "27" en le nombre 27 (on pourrait, mais il faudrait écrire un programme spécial) !
En Python, et bien d'autres langages, si.
Si tu additionnes deux nombres 22+28 =50
Si tu additionnes deux chaines : "22"+"28", tu obtiens la chaîne "2228"..
Tu ne peux les soustraire ni les multiplier...
Je te propose donc de rentrer l'heure comme un nombre à 6 chiffres.
heured=215548
heuref=223527
Le résultat de la soustraction serait incohérent...
Il faut traiter séparément les nombres formés dizaines et unités, milliers et centaines et le reste...
Je viens de le
faire en Python.
Puis j'ai transcrit avec AlgoBox :
2 heured EST_DU_TYPE NOMBRE
3 heuref EST_DU_TYPE NOMBRE
4 Duree EST_DU_TYPE NOMBRE
5 diff EST_DU_TYPE NOMBRE
6 mind EST_DU_TYPE NOMBRE
7 minf EST_DU_TYPE NOMBRE
8 hrsd EST_DU_TYPE NOMBRE
9 hrsf EST_DU_TYPE NOMBRE
10 diff_s EST_DU_TYPE NOMBRE
11 diff_m EST_DU_TYPE NOMBRE
12 DEBUT_ALGORITHME
13 heured PREND_LA_VALEUR 215551
14 heuref PREND_LA_VALEUR 223527
15 mind PREND_LA_VALEUR 0
16 minf PREND_LA_VALEUR 0
17 hrsd PREND_LA_VALEUR 0
18 hrsf PREND_LA_VALEUR 0
19 Duree PREND_LA_VALEUR 0
20 diff_s PREND_LA_VALEUR 0
21 diff_s PREND_LA_VALEUR heuref%100-heured%100
22 SI (diff_s<0) ALORS
23 DEBUT_SI
24 diff_s PREND_LA_VALEUR diff_s+60
25 heuref PREND_LA_VALEUR heuref-100
26 FIN_SI
27 Duree PREND_LA_VALEUR diff_s
28 mind PREND_LA_VALEUR floor((heured%10000)/100)
29 minf PREND_LA_VALEUR floor((heuref%10000)/100)
30 diff_m PREND_LA_VALEUR minf-mind
31 SI (diff_m<0) ALORS
32 DEBUT_SI
33 diff_m PREND_LA_VALEUR diff_m+60
34 heuref PREND_LA_VALEUR heuref-10000
35 FIN_SI
36 Duree PREND_LA_VALEUR Duree+diff*100
37 hrsd PREND_LA_VALEUR floor(heured/10000)
38 hrsf PREND_LA_VALEUR floor(heuref/10000)
39 diff PREND_LA_VALEUR hrsf-hrsd
40 Duree PREND_LA_VALEUR Duree+diff*10000
41 AFFICHER "Duree de ce tri : "
42 AFFICHER diff
43 AFFICHER " h "
44 AFFICHER diff_m
45 AFFICHER " min "
46 AFFICHER diff_s
47 AFFICHER " s"
48 FIN_ALGORITHME
C'est quand même horriblement long : je ne peux pas faire mieux avec AlgoBox...
Sortie :
***Algorithme lancé***
Duree de ce tri : 0 h 39 min 36 s
***Algorithme terminé***
Explications
D'abord Ligne 13 et 14 por toi ce serait
LIRE heured5 - 1 = 64
LMI
LLIRE heuref
Après, ce sont des calculs en h min s...
Rappel de la méthode à la main et application info
22 35 27
- 21 55 51
27- 48 impossible donc je fais 87 - 48 : rajout de 60 s
Et on fait 35 - 1 = 34 parce que les 60 s rajoutées, c'est 1 min que je retire aux min.
L'opération devient :
22 34 87
- 21 55 51
= 36
Informatiquement, je fais 27 - 51 = -24
Je teste : si différence négative (c'est le cas), je rajoute 60 -24+60 = 36
27 et 54 sont les restes respectifs des divisions de 223527 et 215551 par 100 : d'où le %
Je continue :
à la main
34 - 55 impossible j'ajoute 60 min et j'enlève 1 h au h
Et je fais 94-55 =39 et 22-1 =21
L'opération devient :
21 94 87
- 21 55 51
= 39 36
Informatiquement, là, Algobox devient limité : il ne connait pas le quotient entier...
Pour isoler le 34 et le 55 je suis obligé de chercher les restes dans la division par 10000 :
223427 % 10000 =3427
puis de diviser par 100:
3427/100 = 34,27
et enfin d'en prendre la partie entière floor() : 34 que j'affecte à minf
D'où le floor((heuref%10000)/100)
idem pour 215551...
Je soustrais alors les min et j'affecte le le résultat à diff_m
Si diff =_m <0
j'ajoute 60 à diff_m et je soustrais 10000 à heuref
Comme j'ai décidé de modifier l'affichage final entretemps :
La ligne 4 est inutile
La ligne 19 est inutile
La ligne 27 est inutile
La ligne 36 est inutile
La ligne 40 est inutile
Je les ai laissées pour te donner une idée de la reconstitution de la durée finale...
Questions ?
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#9 05-10-2017 14:54:18
- Kinito
- Invité
Re : Chronomètre sur algobox
MERCI BEAUCOUP j'ai utiliser la première méthode je pense que sa suffira.
#10 05-10-2017 15:19:19
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 991
Re : Chronomètre sur algobox
Re,
Tu veux dire la technique du compteur de changements ?
Je pense aussi que, le chrono n'existant pas en AlgoBox, c'est ce qu'il a de plus simple : ça n'empêche que tu peux t'instruire...
J'ai trouvé à raccourcir le prog AlgoBox :
1 VARIABLES
2 heured EST_DU_TYPE NOMBRE
3 heuref EST_DU_TYPE NOMBRE
4 diff EST_DU_TYPE NOMBRE
5 diff_s EST_DU_TYPE NOMBRE
6 diff_m EST_DU_TYPE NOMBRE
7 fin_t EST_DU_TYPE NOMBRE
8 deb_t EST_DU_TYPE NOMBRE
9 DEBUT_ALGORITHME
10 heured PREND_LA_VALEUR 215551
11 heuref PREND_LA_VALEUR 223527
12 deb_t PREND_LA_VALEUR 0
13 fin_t PREND_LA_VALEUR 0
14 diff_s PREND_LA_VALEUR 0
15 diff_s PREND_LA_VALEUR heuref%100-heured%100
16 SI (diff_s<0) ALORS
17 DEBUT_SI
18 diff_s PREND_LA_VALEUR diff_s+60
19 heuref PREND_LA_VALEUR heuref-100
20 FIN_SI
21 deb_t PREND_LA_VALEUR floor((heured%10000)/100)
22 fin_t PREND_LA_VALEUR floor((heuref%10000)/100)
23 diff_m PREND_LA_VALEUR fin_t-deb_t
24 SI (diff_m<0) ALORS
25 DEBUT_SI
26 diff_m PREND_LA_VALEUR diff_m+60
27 heuref PREND_LA_VALEUR heuref-10000
28 FIN_SI
29 deb_t PREND_LA_VALEUR floor(heured/10000)
30 fin_t PREND_LA_VALEUR floor(heuref/10000)
31 diff PREND_LA_VALEUR fin_t-deb_t
32 AFFICHER "Durée de ce tri : "
33 AFFICHER diff
34 AFFICHER " h "
35 AFFICHER diff_m
36 AFFICHER " min "
37 AFFICHER diff_s
38 AFFICHER " s"
39 FIN_ALGORITHME
Ce qui me chiffonne quand même, c'est que tu as utilisé le mot chronomètre dans l'énoncé dans post #1...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#11 05-10-2017 18:44:51
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 16 991
Re : Chronomètre sur algobox
Bonsoir,
J'ai encore gratté quelques lignes...
1 VARIABLES
2 heured EST_DU_TYPE NOMBRE
3 heuref EST_DU_TYPE NOMBRE
4 diff EST_DU_TYPE NOMBRE
5 fin_t EST_DU_TYPE NOMBRE
6 deb_t EST_DU_TYPE NOMBRE
7 Duree EST_DU_TYPE CHAINE
8 DEBUT_ALGORITHME
9 heured PREND_LA_VALEUR 215551
10 heuref PREND_LA_VALEUR 223527
11 deb_t PREND_LA_VALEUR 0
12 fin_t PREND_LA_VALEUR 0
13 diff PREND_LA_VALEUR heuref%100-heured%100
14 SI (diff<0) ALORS
15 DEBUT_SI
16 diff PREND_LA_VALEUR diff+60
17 heuref PREND_LA_VALEUR heuref-100
18 FIN_SI
19 Duree PREND_LA_VALEUR diff.toString()+" s"
20 deb_t PREND_LA_VALEUR floor((heured%10000)/100)
21 fin_t PREND_LA_VALEUR floor((heuref%10000)/100)
22 diff PREND_LA_VALEUR fin_t-deb_t
23 SI (diff<0) ALORS
24 DEBUT_SI
25 diff PREND_LA_VALEUR diff+60
26 heuref PREND_LA_VALEUR heuref-10000
27 FIN_SI
28 Duree PREND_LA_VALEUR diff.toString()+" min "+Duree
29 deb_t PREND_LA_VALEUR floor(heured/10000)
30 fin_t PREND_LA_VALEUR floor(heuref/10000)
31 diff PREND_LA_VALEUR fin_t-deb_t
32 Duree PREND_LA_VALEUR diff.toString()+" h "+Duree
33 AFFICHER "Duree de ce tri : "
34 AFFICHER Duree
35 FIN_ALGORITHME
Je construis pas à pas une chaîne nommée durée, que j'afficherai en bloc à la fin des calculs.
diff est la différence qui change à chaque fois
diff.toString() permet de transformer un nombre en une chaîne ce qui permet de concaténer la chaine "36" avec la chaîne " s" --> "36 s"
Après diff devient diff =39 (ce sont des min), je vais donc faire diff.toString() qui donne "39" qui sera concaténée avec " min " et Duree dans cet ordre, qui donne une nouvelle chaîne Duree...
Avec l'exemple choisi j'écris :
Duree = diff.toString()+" min "+Duree
ce qui donne
Duree <-- "39" + " min " + "36 s"
Et Duree vaut à cet instant "39 min 39 s"
Et je procède à l'identique avec les heures entières...
Pigé ?
N-B : je pourrais condenser plusieurs fois 2 lignes en 1 seule, je gagnerais encore des lignes MAIs cela deviebdrait moins "évident" à lire et comprendre quand on n'a pas trop l'habitude de programmer...
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
Pages : 1
Discussion fermée