CALCULER SOMME ET MOYENNE DE DURÉES EXPRIMÉES EN MINUTES, SECONDES, CENTIÈMES
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 2012
-
27 mai 2005 à 18:06
orankader
Messages postés4Date d'inscriptionlundi 22 août 2005StatutMembreDernière intervention29 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.
orankader
Messages postés4Date d'inscriptionlundi 22 août 2005StatutMembreDernière intervention29 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 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;
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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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és449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 29 mai 2005 à 11:11
Y a pas des fonctions déja présentes dans delphi pour jouer avec les heures ?
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és65Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention 5 décembre 20051 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 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.
19 déc. 2009 à 20:56
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;
7 juin 2005 à 01:30
"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
6 juin 2005 à 15:18
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.
31 mai 2005 à 18:30
Pour répondre à DeltaX tu peux faire toute sorte d' operation mathematique avec les TDatetimes (soustraction etc...).
29 mai 2005 à 11:11
28 mai 2005 à 15:57
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.
28 mai 2005 à 10:08
ça fait un moment que je chercher une source sur les calculs d'heures
Merci Japee
@+Didier
28 mai 2005 à 02:44
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...
27 mai 2005 à 23:07
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.
27 mai 2005 à 20:03
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.
27 mai 2005 à 18:06
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.