begin process at 2012 05 27 14:01:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CALCUL AGE

CALCUL AGE


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :calcul, age, naissance, date, an Niveau :Débutant Date de création :10/12/2005 Date de mise à jour :11/12/2005 08:00:59 Vu :20 345

Auteur : l0gin

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Ce code calcul l'age en decomposant d'abord tout en jours.
Je pense que le code gère bien les années bissextiles
Pour l'affichage, on convient qu'une année est composée de 365 jours, qu'un mois est composé de 4 semaines de 7jours.
Une année bissextile se différencie des autres années en ayant un jour de plus.
Pour chacune des années bissextiles contées, on ajoute un jour.

Source

  • /*
  • Nom : ERARD Stéphane
  • Fichier : main.cpp
  • Date : lundi 5 decembre 2005
  • Description : Calcul l'age de l'utilisateur à partir de ses saisies
  • (annee, mois et jour de naissance).
  • Le programme compte le nombre de jours en tout (les années normales et
  • bissextiles (365+1 jours), les mois (valeur absolu du mois de
  • naissance - le mois actuelle) et les jours (val. absolu du jour de
  • naissance - le jour actuelle.
  • Je pars du constat qu'une année est représentée par 365 jours,
  • qu'un mois est représenté par
  • */
  • #include <iostream>
  • #include <windows.h>
  • using namespace std;
  • bool estBissextile(int);
  • // renvoi une année qui ne peut etre superieure à l'année actuelle
  • int getAnnee(SYSTEMTIME);
  • // renvoi un mois compris entre 1 et le mois actuelle si l'année saisie precedement
  • // est l'année actuelle;
  • // sinon renvoi un mois entre 1 et 12
  • int getMois(int, SYSTEMTIME);
  • // renvoi un jours compris entre 1 et
  • int getJour(int, int, SYSTEMTIME);
  • //renvoi une saisie user pour un mois ayant 31jours max
  • int getJours31(int, int, SYSTEMTIME);
  • //renvoi une saisie user pour un mois ayant 30jours max
  • int getJours30(int, int, SYSTEMTIME);
  • //renvoi une saisie user pour le mois de fevrier, si annee non-bissextile
  • //saisie, alors limite la saisie à 28jours, sinon 29jours.
  • int getJoursBi(int, int, SYSTEMTIME);
  • int main()
  • {
  • int anneeSaisie, moisSaisie, jourSaisie, jourActu, moisActu, anneeActu;
  • SYSTEMTIME st;
  • //*** RECUPERATION DATE ACTUELLE ***
  • GetSystemTime(&st);
  • //*** DEMANDEs SAISIEs ***
  • anneeSaisie = getAnnee(st);
  • moisSaisie = getMois(anneeSaisie, st);
  • jourSaisie = getJour(anneeSaisie, moisSaisie, st);
  • //*** CALCULS ***
  • /* il faut rechercher le nombre d'annees bisextiles depuis son jour
  • de naissance
  • nbAnneesBisextiles compteur
  • */
  • int nbAnneesBisextiles = 0;
  • int age=-1;
  • for (int i=anneeSaisie; i<=st.wYear; i++){
  • if (estBissextile(i)) nbAnneesBisextiles++;
  • age++;
  • }
  • // * calcul le nombre de jours *
  • //par ans (bissextiles et non-bissextiles)
  • int ageT_jours = (age - nbAnneesBisextiles) * 365 + nbAnneesBisextiles * 366;
  • //par mois (un mois est composé de 4 semaines de 7 jours) vous pouvez
  • //changer ici en tout cas à vos desires
  • ageT_jours += abs(moisSaisie - st.wMonth) * 28;
  • // ajoute les jours
  • ageT_jours += abs(jourSaisie - st.wDay);
  • //int ageT_jours = nbJours_annees + nbJours_mois + nbJours_jours;
  • //int ageReel = ageT_jours / 365;
  • int moisReel = (ageT_jours % 365) / 28;
  • int joursReel = ((ageT_jours % 365) % 28);
  • cout << "\nVous avez " << age << " ans, " << moisReel << " mois et " << joursReel << " jours ";
  • return 0;
  • }
  • bool estBissextile(int annee){
  • //Une année bisextile est une année divisible par 4
  • //sauf si elle est divisible par 100 auquel cas elle doit être divisible par 400.
  • if (annee%100==0 && annee%400==0) return false;
  • else if (annee%4==0) return true;
  • }
  • int calculAnnees_Jours(int annee, SYSTEMTIME st_){
  • return st_.wYear - annee;
  • }
  • int getAnnee(SYSTEMTIME st){
  • int annee;
  • do {
  • cout << "Veuillez saisir votre annee de naissance (inferieur a " << st.wYear << "):";
  • cin >> annee;
  • }while (!(annee <= st.wYear ));
  • return annee;
  • }
  • int getMois(int annee, SYSTEMTIME st){
  • int mois;
  • do {
  • cout << "Veuillez saisir votre mois de naissance ";
  • if (annee == st.wYear) cout << "(inferieur a " << st.wMonth << ")";
  • cout << ":";
  • cin >> mois;
  • }while (!(mois<=12 && mois>=1));
  • return mois;
  • }
  • int getJour(int annee, int mois, SYSTEMTIME st){
  • int jour=0;
  • if (annee == st.wYear && mois == st.wMonth)
  • cout << "Veuillez saisir votre jour de naissance (inferieur a " << st.wDay << "):";
  • else{
  • switch (mois){
  • //mois à 31
  • case 1:jour=getJours31(annee, mois, st);break;
  • case 3:jour=getJours31(annee, mois, st);break;
  • case 5:jour=getJours31(annee, mois, st);break;
  • case 7:jour=getJours31(annee, mois, st);break;
  • case 8:jour=getJours31(annee, mois, st);break;
  • case 10:jour=getJours31(annee, mois, st);break;
  • case 12:jour=getJours31(annee, mois, st);break;
  • //mois à 30
  • case 4:jour=getJours30(annee, mois, st);break;
  • case 6:jour=getJours30(annee, mois, st);break;
  • case 9:jour=getJours30(annee, mois, st);break;
  • case 11:jour=getJours30(annee, mois, st);break;
  • //mois de fevrier check si année bissextile
  • case 2:jour=getJoursBi(annee, mois, st);
  • }
  • }
  • return jour;
  • }
  • /* **** FONCTIONS *** */
  • int getJours31(int annee, int mois, SYSTEMTIME st){
  • int jour;
  • do {
  • cout << "Veuillez saisir votre jour de naissance (entre 1 et 31):";
  • cin >> jour;
  • }while(!(jour>=1 && jour<=31));
  • return jour;
  • }
  • int getJours30(int annee, int mois, SYSTEMTIME st){
  • int jour;
  • do {
  • cout << "Veuillez saisir votre jour de naissance (entre 1 et 30):";
  • cin >> jour;
  • }while(!(jour>=1 && jour<=30));
  • return jour;
  • }
  • int getJoursBi(int annee, int mois, SYSTEMTIME st){
  • int jour;
  • if (estBissextile(annee)){
  • do{
  • cout << "Veuillez saisir votre jour de naissance (entre 1 et 29):";
  • cin >> jour;
  • }while(!(jour>=1 && jour<=29));
  • return jour;
  • }
  • else {
  • do{
  • cout << "Veuillez saisir votre jour de naissance (entre 1 et 28):";
  • cin >> jour;
  • }while(!(jour>=1 && jour<=28));
  • return jour;
  • }
  • }
  • /* *** FIN FONCTIONS *** */
/*
Nom : ERARD Stéphane
Fichier : main.cpp
Date : lundi 5 decembre 2005
Description : Calcul l'age de l'utilisateur à partir de ses saisies
    (annee, mois et jour de naissance).
    Le programme compte le nombre de jours en tout (les années normales et
        bissextiles (365+1 jours), les mois (valeur absolu du mois de
        naissance - le mois actuelle) et les jours (val. absolu du jour de
        naissance - le jour actuelle.
Je pars du constat qu'une année est représentée par 365 jours,
qu'un mois est représenté par
*/
#include <iostream>
#include <windows.h>
using namespace std;
bool estBissextile(int);
// renvoi une année qui ne peut etre superieure à l'année actuelle
int getAnnee(SYSTEMTIME);
// renvoi un mois compris entre 1 et le mois actuelle si l'année saisie precedement
// 		est l'année actuelle;
// sinon renvoi un mois entre 1 et 12
int getMois(int, SYSTEMTIME);
// renvoi un jours compris entre 1 et
int getJour(int, int, SYSTEMTIME);
//renvoi une saisie user pour un mois ayant 31jours max
int getJours31(int, int, SYSTEMTIME);
//renvoi une saisie user pour un mois ayant 30jours max
int getJours30(int, int, SYSTEMTIME);
//renvoi une saisie user pour le mois de fevrier, si annee non-bissextile
//saisie, alors limite la saisie à 28jours, sinon 29jours.
int getJoursBi(int, int, SYSTEMTIME);

int main()
{
    int anneeSaisie, moisSaisie, jourSaisie, jourActu, moisActu, anneeActu;
    SYSTEMTIME st;
    //*** RECUPERATION DATE ACTUELLE ***
    GetSystemTime(&st);
    //*** DEMANDEs SAISIEs ***
		anneeSaisie = getAnnee(st);
		moisSaisie = getMois(anneeSaisie, st);
		jourSaisie = getJour(anneeSaisie, moisSaisie, st);
    //*** CALCULS ***
        /* il faut rechercher le nombre d'annees bisextiles depuis son jour
			de naissance
			nbAnneesBisextiles compteur
		*/
        int nbAnneesBisextiles = 0;
        int age=-1;
        for (int i=anneeSaisie; i<=st.wYear; i++){
            if (estBissextile(i)) nbAnneesBisextiles++;
            age++;
        }
        // * calcul le nombre de jours *
        //par ans (bissextiles et non-bissextiles)
        int ageT_jours = (age - nbAnneesBisextiles) * 365 + nbAnneesBisextiles * 366;
        //par mois (un mois est composé de 4 semaines de 7 jours) vous pouvez
        //changer ici en tout cas à vos desires
        ageT_jours += abs(moisSaisie - st.wMonth) * 28;
        // ajoute les jours
        ageT_jours += abs(jourSaisie - st.wDay);

        //int ageT_jours = nbJours_annees + nbJours_mois + nbJours_jours;

        //int ageReel = ageT_jours / 365;
        int moisReel = (ageT_jours % 365) / 28;
        int joursReel = ((ageT_jours % 365) % 28);
    cout << "\nVous avez " << age << " ans, " << moisReel << " mois et " << joursReel << " jours ";
    return 0;
}
bool estBissextile(int annee){
	//Une année bisextile est une année divisible par 4
	//sauf si elle est divisible par 100 auquel cas elle doit être divisible par 400.
	if (annee%100==0 && annee%400==0) return false;
	else if (annee%4==0) return true;
}
int calculAnnees_Jours(int annee, SYSTEMTIME st_){
	return st_.wYear - annee;
}
int getAnnee(SYSTEMTIME st){
	int annee;
	do {
		cout << "Veuillez saisir votre annee de naissance (inferieur a " << st.wYear << "):";
		cin >> annee;
	}while (!(annee <= st.wYear ));
	return annee;
}

int getMois(int annee, SYSTEMTIME st){
	int mois;
	do {
		cout << "Veuillez saisir votre mois de naissance ";
		if (annee == st.wYear) cout << "(inferieur a " << st.wMonth << ")";
		cout << ":";
		cin >> mois;
	}while (!(mois<=12 && mois>=1));
	return mois;
}

int getJour(int annee, int mois, SYSTEMTIME st){
	int jour=0;
	if (annee == st.wYear && mois == st.wMonth)
		cout << "Veuillez saisir votre jour de naissance (inferieur a " << st.wDay << "):";
	else{
		switch (mois){
			//mois à 31
				case 1:jour=getJours31(annee, mois, st);break;
				case 3:jour=getJours31(annee, mois, st);break;
				case 5:jour=getJours31(annee, mois, st);break;
				case 7:jour=getJours31(annee, mois, st);break;
				case 8:jour=getJours31(annee, mois, st);break;
				case 10:jour=getJours31(annee, mois, st);break;
				case 12:jour=getJours31(annee, mois, st);break;
			//mois à 30
				case 4:jour=getJours30(annee, mois, st);break;
				case 6:jour=getJours30(annee, mois, st);break;
				case 9:jour=getJours30(annee, mois, st);break;
				case 11:jour=getJours30(annee, mois, st);break;
			//mois de fevrier check si année bissextile
				case 2:jour=getJoursBi(annee, mois, st);
		}
	}
	return jour;
}
/* **** FONCTIONS *** */
int getJours31(int annee, int mois, SYSTEMTIME st){
	int jour;
	do {
			cout << "Veuillez saisir votre jour de naissance (entre 1 et 31):";
			cin >> jour;
		}while(!(jour>=1 && jour<=31));
	return jour;
}
int getJours30(int annee, int mois, SYSTEMTIME st){
	int jour;
	do {
			cout << "Veuillez saisir votre jour de naissance (entre 1 et 30):";
			cin >> jour;
		}while(!(jour>=1 && jour<=30));
	return jour;
}
int getJoursBi(int annee, int mois, SYSTEMTIME st){
	int jour;
		if (estBissextile(annee)){
			do{
				cout << "Veuillez saisir votre jour de naissance (entre 1 et 29):";
				cin >> jour;
			}while(!(jour>=1 && jour<=29));
			return jour;
		}
		else {
			do{
				cout << "Veuillez saisir votre jour de naissance (entre 1 et 28):";
				cin >> jour;
			}while(!(jour>=1 && jour<=28));
			return jour;
		}
}
/* *** FIN FONCTIONS *** */

 Conclusion

bugs[0]:si vous saisissez l'année courrante, le mois courrant et le jours courrant -1, il se passe la même chose que si vous saisissez l'année courrant, le mois courrant, le jour courrant +1.

Si vous avez des suggestions, remarques, bugs, n'hesitez pas :)


 Historique

10 décembre 2005 03:36:26 :
enlever des commentaires inutiles
11 décembre 2005 08:00:59 :
annotation de bug connus

 Sources du même auteur

CALCUL AGE V2

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

CALCUL DE CLEF RIB par Renfield
Source avec Zip JOUR DE NAISSANCE par fredg19
DATETIMECONVERTER par guill76
Source avec une capture VACCATION (AVEC FONCTION) CONSOLERIE, REMIX GCC par sebman
CALCUL AGE V2 par l0gin

Commentaires et avis

Commentaire de max8774 le 26/02/2006 00:09:05

lol je suis nais le 1er juillet et quand je marque 1 sa quitte le programme lol !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Calcul Date a partir d'un nombre de jours [ par Trinita16 ] Je cherche si il existe une fonction simple pour convertir un nombre de jour en une date. Sachant que la date départ peut varier....Merci d'avance.... Calcul date à partir d'un nombre de jours [ par Trinita16 ] Bonjour,1. Une date fixe de debut de comptage de jours2. Un nombre de jours depuis la date en 13. Je veux le nombre de jour en une date.Voila mon prob sos [ par alex64100 ] bonjour,je dois programmer une appli qui, aprés saisie  d'une date, affiche le jour de la semainevoici mon code  :#include&lt;stdio.h&gt;<font Problème [ par kamal25 ] J'ai essayé de écrire dans un fichier je veux qu'il me sorte Date de naissance 24/3/1988 Bonjour Xav57 vous avez 19 ans alors il me sort Date de na le calcul de la complexité [ par boualiasma ] Bonjour, Quelle est la complexité au pire de cas pour le calcul de toutes les combinaisons possibles pour n caractères à partir de taille 2 jusqu'à programme en c qui affiche la date et l'heure en temps reel [ par wafzak ] bonjour tout le monde , je suis un nouveau membre sur le forum.bon si vous pouvez m'aider pour compléter mon mini projet; je veux un programme en lang Créer une socket de calcul parallèle [ par walidhas ] slt, j'ai voulu créer une socket en MFC .Dans cette Socket le client et le serveur font chacun des calculs différents et durant ce calcul il y a échan resolution d'un probleme [ par sacrifice1 ] je voudrais bien savoir la solution de: un programme qui calcul la DCT d'une matrice puis un autre qui calcul la idct à partir du IDC en C. MERCI. Conversion code [ par jeanphilippe37 ] [u]Bonjour[/u], Voila, j'ai réalisé ce programme en C++ mais, je dois le rendre en langage C et j'ai bcp de mal à faire la traduction. Pourriez vous DateTimePicker mettre la date au format yyyy-mm-dd [ par jer13mel ] Bonjour, Voici mon problème, je code en C++, j'ai besoin de récupérer la date d'un DateTimePicker au format yyyy-mm-dd car mon champ est de type dat


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,042 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales