CALCULER SOMME ET MOYENNE DE DURÉES EXPRIMÉES EN MINUTES, SECONDES, CENTIÈMES

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 - 27 mai 2005 à 18:06
orankader Messages postés 4 Date d'inscription lundi 22 août 2005 Statut Membre Dernière intervention 29 décembre 2009 - 19 déc. 2009 à 20:56
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31651-calculer-somme-et-moyenne-de-durees-exprimees-en-minutes-secondes-centiemes

orankader Messages postés 4 Date d'inscription lundi 22 août 2005 Statut Membre Dernière intervention 29 décembre 2009
19 déc. 2009 à 20:56
Bonjour tous le monde
j'ai un probmème dans mon programme, je n'arrive pas à calculer un total heure avec mon programme le calcul
se fait très bien, mais une fois il dépasse les 24 heures sa remis à 00:00.
Pour cela si quelqu'un peut m'aider en corrigeant mon programme



procedure TForm1.Button3Click(Sender: TObject);
var somme,s : real;

begin
somme := 0;
table1.first; // se pointer vers le premier enregistrement de la table
while not(table1.eof) do // tanque on a pas arriver à la fin de la table
begin
somme := somme + table1.fieldbyname('Nbre_Heures').AsDateTime; // cumul des totaux
table1.next; // passer à l’enregistrement suivant.
end;
edit1.text := TimeToStr(somme); // afficher le cumul des totaux dans le comosant edit1

end;
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
7 juin 2005 à 01:30
Tiens, ça faisait un bail, JMP77... ça va, toi ?

"Tu trouves toujours des sujets de sources très interessants et enrichissants merci à toi"

Ben alors là, ça, ça fait plaisir...

Dorénavant, JMP77, je posterai plus que pour toi, lol ;-)

Et un coucou amical à Mauricio qui m'a fait l'honneur de venir faire un tour sur mon source, muito obrigado ;-)

Bonne prog' :p

japee
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
6 juin 2005 à 15:18
Hello Japee,

Comme tu l'as si bien sugérer j'ai modifié ta fonction de calcul de la somme en utilisant DecodeTime et EncodeTime la voici :

function TForm1.CalculeSommeInt2(var Min, Sec, Cent: Integer; tS: TStrings): Integer;
var i: Integer;
STmp: String;
Totale : TDateTime;

begin
Result := 0;
Min := 0;
Sec := 0;
Cent := 0;
Totale := 0;

for i := 0 to tS.Count -1 do
begin
STmp := tS[i];

if STmp = '' then Continue;

try
Inc(Result);
Min := StrToInt(Copy(STmp, 1, Pos(':', STmp) -1));
Delete(STmp, 1, Pos(':', STmp));
Sec := StrToInt(Copy(STmp, 1, Pos(':', STmp) -1));
Delete(STmp, 1, Pos(':', STmp));
Cent := StrToInt(STmp);
Totale := Totale + EncodeTime(0,Min,Sec,Cent);
except
ShowMessage(tS[i] + ' n''est pas un format valide');
Result := 0;
Exit;
end;
end;

ShowMessage(FormatDateTime('nn:ss:z',Totale));
end;

Voila sinon je pense que je laisserai les deux car cela permet de voir comment s'effectue le calcul des heures avec les minutes, les secondes et les centiemes. Avec ta methode on comprend bien le fonctionnement avec encodetime c'est sur ça simplifie la fonction mais c'est moins instructif je trouve.

Tu trouves toujours des sujets de sources très interessants et enrichissants merci à toi.

Allez ca merite un bon 9/10 pour moi à cette source.

Bonne prog,
JMP77.
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
31 mai 2005 à 18:30
Salut Japee et bonjour tout le monde en fait...
Pour répondre à DeltaX tu peux faire toute sorte d' operation mathematique avec les TDatetimes (soustraction etc...).
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
29 mai 2005 à 11:11
Y a pas des fonctions déja présentes dans delphi pour jouer avec les heures ?
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
28 mai 2005 à 15:57
Y'avait qu'à demander, tigrou19 !

Attention, il y a beaucoup plus simple s'il s'agit de calculer avec des valeurs au format TTime, en utilisant les fonctions StrToTime et TimeToStr.

Il me semble par ailleurs que j'aurais pu utiliser DecodeTime et EncodeTime.
Je n'y avais pas pensé auparavant...
Je vais creuser l'idée et voir si ça vaut le coup.
cs_tigrou19 Messages postés 65 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 5 décembre 2005 1
28 mai 2005 à 10:08
Super
ça fait un moment que je chercher une source sur les calculs d'heures
Merci Japee
@+Didier
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
28 mai 2005 à 02:44
Pas de problème WhiteHippo !

Une remarque constructive est toujours enrichissante.
On est là pour progresser et apprendre. Et pour transmettre aussi.
Et si je commence à avoir plus d'un tour dans mon sac, j'ai encore beaucoup, beaucoup, beaucoup de chemin à parcourir avant d'arriver à un niveau de maîtrise de Delphi qui me satisfasse.
Et puis ça signifie que tu t'es intéressé à mon code, ce qui est quand même le but.
Un code sans commentaires est soit un code trop expert, ou alors médiocre, voire sans intérêt.

De plus, je suis complètement, entièrement et à 100% d'accord avec toi... (lol)

En codant dans l'urgence la fonction CalculeMoyenne(), afin de "rattraper le coup", j'ai bien réalisé la redondance entre les deux fonctions.
Il faut donc les dissocier, les considérer comme deux entités indépendantes.
Dans le cas où l'on serait amené à se servir alternativement des 2 fonctions, il devient évident qu'il vaut mieux complètement les repenser.
Et que l'une appelle l'autre.

Je vais revoir ça calmement.

Merci pour tes conseils ;-)

japee

Une journée où l'on n'a rien appris est une journée foutue...
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 mai 2005 à 23:07
Le rabat-joie de service est de retour :P
Le prend pas mal japee ce ne sont pas des critiques juste des remarques qui essayent d'être constructives.
Concernant ton code, y'a un point qui me gene, c'est le fait que les deux fonctions sont quasiment identique. Maintenir deux fois du code similaire, c'est s'exposer à du temps supplémentaire en debuggage en cas d'erreur lors d'une modification (ou de deux modifications devrais-je dire :).
Ce code similaire, correspond au calcul de la somme, et donc à la fonction CalculeSomme. Il me paraitrait donc plus logique de modifier les fonctions CalculeMoyenne et CalculeSomme afin que CalculeMoyenne appelle la fonction CalculSomme, plutot que de réecrire le code de calcul.

Cordialement.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
27 mai 2005 à 20:03
Oh, zut !

Tu as raison, WhiteHippo...
Merci de me l'avoir fait remarquer.
J'ai codé un peu trop vite, et en perdant de vue la question originale (et pourtant le titre y fait allusion explicitement...).
Dans l'état actuel de la fonction, elle devrait effectivement s'appeler "CalculSomme".
J'ai pas le temps maintenant, mais je vais revoir tout ça, bien entendu.

Cordialement.
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
27 mai 2005 à 18:06
Juste une petite remarque Japee, tu devrais plutot appeler ta fonction CalculSomme :P

N.B. tu aurais peut être pu pousser jusqu'aux heures voir jusqu'aux jours et pourquoi pas jusqu'aux années... Après ce serait exagérer :) car 1250:35:00 par exemple c'est pas très parlant.

Cordialement.
Rejoignez-nous