Bonjour Louisa, et coucou à tous. Je me suis penché sur l'algorithme reprenant les instructions de BS et tentant de l'améliorer pour un joli rendu. Ceci pour t'aider à prendre en main Algobox.
Fais-le tourner pas à pas pour en comprendre les instructions et questionne-nous.
1 VARIABLES
2 hp EST_DU_TYPE CHAINE
3 h EST_DU_TYPE NOMBRE
4 l EST_DU_TYPE NOMBRE
5 b EST_DU_TYPE NOMBRE
6 a EST_DU_TYPE NOMBRE
7 res EST_DU_TYPE CHAINE
8 DEBUT_ALGORITHME
9 AFFICHER "Ecrire l'heure de Paris sous la forme 23h46 ou 7h08"
10 LIRE hp
11 l PREND_LA_VALEUR hp.length
12 SI (l==5) ALORS
13 DEBUT_SI
14 a PREND_LA_VALEUR hp.charCodeAt(0)
15 b PREND_LA_VALEUR hp.charCodeAt(1)
16 h PREND_LA_VALEUR ((a-48)*10+(b-30))%24
17 res PREND_LA_VALEUR h.toString()+"h"+hp.substr(3,2)
18 FIN_SI
19 SINON
20 DEBUT_SINON
21 SI (l==4) ALORS
22 DEBUT_SI
23 a PREND_LA_VALEUR hp.charCodeAt(0)
24 h PREND_LA_VALEUR (a-30)%24
25 res PREND_LA_VALEUR h.toString()+"h"+hp.substr(2,2)
26 FIN_SI
27 SINON
28 DEBUT_SINON
29 AFFICHER "L'heure donnée n'est pas au bon format !"
30 res PREND_LA_VALEUR "impossible à déterminer."
31 FIN_SINON
32 FIN_SINON
33 AFFICHER "L'heure à Pointe-à-Pitre est "
34 AFFICHER res
35 AFFICHER "."
36 FIN_ALGORITHME
Bonsoir Rodolphe,
J'avais laissé volontairement la décomposition libre pour la donner en question subsidiaire. Histoire que Louisa joue un peu avec les chaines.
Mais Louisa n'a pas voulu jouer. Dommage .
Sinon, autres pistes de controle possible (pas forcement ensemble)
* Longueur de la chaine d'entrée
* Présence de caractère interdit (Tous sauf 0-9 + H,h)
* Contraction des minutes en heure en cas de dépassement
Bonjour Boltzmann_Solver,
j'avais bien compris ta démarche et voyant que Louisa n'avait pas accroché à ta proposition de faire appel à la l'instruction a.toString(), et comme j'avais mentionné sur mon premier post la possibilité de prendre une variable de type chaine, je me suis dit que ce ne serait pas mal de lui donner un petit algorithme à étudier dans lequel apparaissent des instructions comme a.length ou a.substr(...,...).
Je n'ai pas voulu mettre trop de tests car il y a déjà la conversion du code Ascii qui peut rebuter Louisa.
J'attends donc ses questions et tes remarques sont les bienvenues.
Et pour ma gouverne, la présence de caractères interdits m'intéresse. Si tu veux améliorer mon algorithme, je t'en remercie. Dans ce cas, tu travailles sur quoi ? Une liste ?
Bonne journée à toi.
Bonjour
Rodolphe >
je vais le faire tourner, je te dirai ce que j'en pense, par contre, tous ces termes et bien faut que
les apprenne ? C'est drôle quand même qu'on puisse faire si compliqué alors qu'on peut faire plus simple,
je suppose que ça fait plus joli.
En tout cas, je te remercie et je te tiens au courant.
Bs, j'ai pas voulu jouer tu dis, mais parce que pour vous tous c'est un jeu, mais pour moi c'est
d'abord une bataille .
Bonjour louisa,
Je pense qu'en fin de seconde, tu dois pouvoir utiliser quasi totalité des fonctions de Algobox. Car ce logiciel est quelque chose de très simplifier !! Si on jour, tu continues dans un domaine scientifique ou économique, tu seras amener à programmer tes algorithmes avec dans langages plus compliqués.
Sinon, une bataille est un jeu (d'où le sport, les jeux vidéos de compétitions). Le tout est d'y prendre plaisir . Si tu préfères le terme travailler (de tripalium : instrument de torture Romain) au terme jouer, je le ferai . Mais tu fais ça pour le fun, non ? Pas pour l'école ?
BS
@Rodolphe : pour tester les caractères interdits, je pense que sur algobox, on sera obligé que faire une boucle de test pour chaque caractère autorisé (car beaucoup moins nombreux). Et je pense qu'il y a moyen d'un peu compacter ton code. J'en referai un ce soir si tu veux
Salut
pour le fun pour l'instant oui
alors s'il faut apprendre le tout, j'apprendrais le tout
Rodolphe, j'ai un petit problème, regarde
#1 Nombres/chaines (ligne 10) -> hp:20h30 | h:0 | l:0 | b:0 | a:0 | res:
#2 Nombres/chaines (ligne 11) -> hp:20h30 | h:0 | l:5 | b:0 | a:0 | res:
La condition est vérifiée (ligne 12)
Entrée dans le bloc DEBUT_SI/FIN_SI (ligne 13)
#3 Nombres/chaines (ligne 14) -> hp:20h30 | h:0 | l:5 | b:0 | a:50 | res:
#4 Nombres/chaines (ligne 15) -> hp:20h30 | h:0 | l:5 | b:48 | a:50 | res:
#5 Nombres/chaines (ligne 16) -> hp:20h30 | h:38 | l:5 | b:48 | a:50 | res:
#6 Nombres/chaines (ligne 17) -> hp:20h30 | h:38 | l:5 | b:48 | a:50 | res:38h30
Sortie du bloc DEBUT_SI/FIN_SI (ligne 18)
pourquoi ça s'arrête à la ligne 18 ?
Le programme marche chez moi.
Le fichier algobox.
http://www.cijoint.fr/cjlink.php?file=cj201008/cij0HOi1ey.zip
Je te recommande mon code qualité BS
VARIABLES
H EST_DU_TYPE NOMBRE
M EST_DU_TYPE NOMBRE
RES EST_DU_TYPE CHAINE
DEBUT_ALGORITHME
LIRE H
LIRE M
H PREND_LA_VALEUR (H+18)%24
RES PREND_LA_VALEUR "Il est "+H.toString()+" heure et "+M.toString()+" minute à Pointe-à-Pitre."
AFFICHER RES
FIN_ALGORITHME
Et si tu veux t'entrainer, on l'améliorera.
#1 Nombres/chaines (ligne 6) -> H:20 | M:0 | RES:
#2 Nombres/chaines (ligne 7) -> H:20 | M:30 | RES:
#3 Nombres/chaines (ligne 8) -> H:14 | M:30 | RES:
#4 Nombres/chaines (ligne 9) -> H:14 | M:30 | RES:il est 14heure et30minute à Pointe-à-Pitre.
ça donne la bonne heure
merci
Il te reste à le comprendre.
Une remarque, a%b signifie reste de la division euclidienne de a par b. Donc,
c = a%b <==> il existe k dans Z tel que a = k*b + c
Donc ici :
H PREND_LA_VALEUR (H+18)%24
j'ai pris 20
(20+18)/24
38/24
je fais le PGCD de 38 et 24 et je trouve 14
(H + 18) puisque 6 heures de moins , 24-6 = 18
C'est faux !!!
pgcd(38,24) = 2 !!!
Sinon, en utilisant mon égalité, H+18 = H - 6 + 24 = 24*1 + (H-6).
On a bien montré que H+18 mod 24 vaut H-6 soit le décalage horaire de Guadeloupe.
Après, il faut savoir que dans algobox, le modulo d'un entier naturel est le reste positif et pour un nombre négatif, le premier moins 24.
c'est bon j'ai trouvé :
# le modulo est une fonction informatique qui au couple (a, b) d'entiers associe le reste r de la division euclidienne de a par b.
Quelle horreur cette erreur
J'ai fait sur calculette : reste (38 ; 24) et ça donnait 14 et pour moi c'était ok = 14 h , je vais pas chercher bien loin
Je te propose mes questions subsidiaires. Si tu en as assez, dis le moi, on le laissera pour une autre personne .
1) Modifie la programme pour prendre en entrée une chaine de la forme 20h30
2) Cette modification rend le programme fragile (imagine un professeur pas futé qui entre une commande comme "vive les maths"). Propose moi une méthode pour prévenir les problèmes.
c'est pas que j'en ai assez, c'est plutôt que j'ai du mal
tu veux dire que je change
H EST_DU_TYPE NOMBRE
M EST_DU_TYPE NOMBRE
en
H EST_DU_TYPE CHAINE
M EST_DU_TYPE CHAINE
Courage
Non, je voudrais que tu modifies le programme de telle façon que au lieu de lire H et M, on lire une chaine HM contenant les heures et minutes en codage 06h30.
ben comme tu peux voir je n'ai pas changé grand-chose
1 VARIABLES
2 H EST_DU_TYPE NOMBRE
3 M EST_DU_TYPE NOMBRE
4 HM EST_DU_TYPE CHAINE
5 DEBUT_ALGORITHME
6 LIRE H
7 LIRE M
8 H PREND_LA_VALEUR (H+18)%24
9 HM PREND_LA_VALEUR "il est "+H.toString()+"heure et"+M.toString()+"minute à Pointe-à-Pitre."
10 AFFICHER HM
11 FIN_ALGORITHME
Maintenant, il faut que tu accèdes à H et M à partir de HM (donc, tu dois supprimer LIRE H et LIRE M et finir par H PREND_LA_VALEUR (à toi de me le dire) et M PREND_LA_VALEUR (toujours à toi de ma le dire).
Bonsoir Louisa et BS,
je ne comprends pas pourquoi mon code ne fonctionne pas chez vous pour l'heure de Paris supérieure à 20 h. Chez moi, il tourne bien.
Louisa, tu peux m'envoyer ton algorithme sur mon adresse si tu veux. Je la mets en visible.
BS, cela m'intéresse si tu peux compacter mon code. Je n'ai pas cherché à le faire mais je suis sûr que c'est possible.
Bonne soirée à vous deux.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :