Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méthodologie -Résolution de problème

ou ne pas écrire qqchose qui devient obsolète après réflexion..

    21 février 2020 à 15:17:46

    Bonjour à vous,

    Quelle méthode avez-vous lorsque que vous vous lancez dans un problème ? Ecrivez-vous toute la mécanique en fr d’abord ? Ou bien, faites-vous  des bouts qui marchent, relier les uns aux autres, au risque de revenir sur certaines fonctions, devenu obsolète ?

    Je m'explique : il est des problèmes qui peuvent être pris par n'importe quel bout, et qui n'ont donc pas de solution unique. Mais il arrive trop souvent qu'en demandant de l'aide ou comparant avec un collègue, vous vous rendiez compte que vous vous compliquez la vie, ou bien que la logique pour laquelle vous avez opté, ne pourra pas vérifier certains cas particuliers.

    Exemple : via une appli A, j’écris sur un serveur A. Toutes les 5h, le serveur A mets à jour le serveur Commun avec ses nouvelles données. Via une appli B je récupère les données sur le serveur Commun pour faire mon travail. Si je n’ai rien écrit sur le serveur A, la maj se fais, mais je n’ai aucun moyen de savoir quand. Si j’ai écrit dedans, je sais quand la maj de ce que j’ai écrit a été faite.

    Moi, j’aimerais savoir, à l’heure qu’il est, dans combien de temps la base se mettra à jour ; dans 1, 2, 3, 4 ou 5h.

    J’ai donc commencé un programme qui, en entrée, prend la date de la dernière maj connue et la date actuelle (heure, jour et mois) et qui me sortira : « Prochaine maj dans 2h ».

    Et là, de la méthodo s’impose.

    D’abord parcequ’on n’est plus en système décimal, mais horaire, et puis parce que les mois n’ont pas tous le même nombre de jours… Alors les boucles là-dedans vont être salées ! (oui parce que, si ma dernière maj connue date du 04/02 à 15h00 et qu’on est le 02/05 à 08h00, va falloir compter les mois, des jours (et y’a février au milieu..) et des heures…)

    J’ai choisi, vu mon problème, de compter en heures, ie de transformer les mois et les jours en heures. Mais je commence à patauger un peu et je commence à remettre en question le peu code que j’ai pu écrire…

    Alors ? Comment abordez-vous un problème ? Tout de A à Z d’abord puis vous l’écrivez ? Vous découpez des bouts ? Oui mais comment délimiter ?

    Merci à vous pour vos échange d’expérience

    -
    Edité par SGrape 21 février 2020 à 15:27:51

    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2020 à 15:39:43

      La première chose est de vérifier qu'on ne va pas réinventer la roue.
      Tes collègues ont peut être déjà eu ce genre de problématique ou bien connaissent déjà une manière de le résoudre.
      Dans ce cas, commencer à tenter de résoudre le problème est déjà du temps perdu au risque de créer de la redondance voir même quelques bugs au passage.

      Pour ton exemple, une mise à jour toutes les X heures. Je ne vois pas pourquoi les mois viennent jouer un rôle ici.

      Si ton soucis est de gérer les dates : http://zetcode.com/articles/cdatetime/


      • Partager sur Facebook
      • Partager sur Twitter
        21 février 2020 à 16:26:46

        Hello,

        Pourquoi se casser la tête avec des tests sur des mois, année, etc, alors qu'il est si simple de passer par les fonctions de time.h ?

        Exemple:

        #include <time.h>
        #include <stdio.h>
        
        #define UPDATE_DELAY	(5*60*60)		// 5 heures en secondes
        
        time_t makeTimestampFromValues(int day,int month,int year,int hour,int min,int sec) {
        	time_t timestamp;
        	struct tm *tinfo;
        
        	timestamp=time(NULL);
        	tinfo=localtime(&timestamp);
        	tinfo->tm_mday=day;
        	tinfo->tm_mon=month-1;
        	tinfo->tm_year=year-1900;
        	tinfo->tm_hour=hour;
        	tinfo->tm_min=min;
        	tinfo->tm_sec=sec;
        	return(mktime(tinfo));
        }
        
        
        time_t getNextUpdateTime(time_t timestamp) {
        	return(timestamp+UPDATE_DELAY);
        }
        
        
        void displayTime(time_t timestamp) {
        	struct tm *tinfo;
        
        	tinfo=localtime(&timestamp);
        	printf("%02d-%02d-%4d %02d:%02d:%02d",
        		tinfo->tm_mday,tinfo->tm_mon+1,tinfo->tm_year+1900,
        		tinfo->tm_hour,tinfo->tm_min,tinfo->tm_sec);
        }	
        
        
        void doTheJob(int d,int m,int y,int h,int min,int s) {
        	time_t last_update,next_update;
        	
        	last_update=makeTimestampFromValues(d,m,y,h,min,s);
        	next_update=getNextUpdateTime(last_update);
        	
        	printf("last update: ");
        	displayTime(last_update);
        	printf(" -- next update: ");
        	displayTime(next_update);
        	puts("");
        }
        
        
        int main(void) {
        	doTheJob(21,2,2020,16,32,15);
        	doTheJob(28,2,2020,23,12,0);
        	doTheJob(29,2,2020,23,12,0);
        	doTheJob(28,2,2021,23,12,0);
        	doTheJob(31,12,2020,22,17,0);
        	
        	return(0);
        }
        
        

        -
        Edité par edgarjacobs 21 février 2020 à 16:32:02

        • Partager sur Facebook
        • Partager sur Twitter

        On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

          24 février 2020 à 9:52:49

          Hello,

          Thx guys.

          Oui, je suis conscient de réinventer la roue, mais c'est justement en guise d'exercice que je fais ça alors... :)

          • Partager sur Facebook
          • Partager sur Twitter

          Méthodologie -Résolution de problème

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown