Accueil > > > CALENDAR [CODE C] [GCC]
CALENDAR [CODE C] [GCC]
Information sur la source
Description
Ce petit programme de clendrier est un clone de la celebre application cal des systeme Unix, pour le moment calendar est moins performant car il faut lui indiquer le mois et l'annee que l'on veut, et aussi les annees sont restreintes de 1800 a 3000 ni plus ni moins.
Source
- /*
- Programme: calendar.c
- Auteur: Joel Matteotti <joel.matteotti@free.fr>
- Version: 1.0
- Description: Ce petit programme de calendrier est un clone de la celebre application cal des systeme Unix
- pour le moment il n'est pas aussi performent car il faut lui indiquer le mois et l'annee dont les annees sont
- restreinte de 1800 a 3000 ni plus ni moins
- */
-
- #include <stdio.h>
-
- void usage(void);
- int isBissextile(unsigned);
- static unsigned month_to_days(unsigned);
- static long years_to_days(unsigned);
- long ymd_to_scalar(unsigned, unsigned, unsigned);
-
-
- int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- char *month[12] = {"Janvier", "Fevrier", "Mars", "Avril", "Mais", "Juin",
- "Juillet", "Aout", "Septembre", "Octembre", "Novembre", "Decembre"};
- char *daynames[8] = {"Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"};
-
- const char *line = "";
-
- int main(int argc, char *argv[])
- {
- int day, day_1, numdays, i, j;
- unsigned yr, mo;
-
- /*si les argument passer en parametre sont incorrect ou pas assez nombreux
- pour eviter d'avoir des fichier core on affihe un message d'aide plutot
- que de continuer le reste du programme*/
- if (argc < 3 && argc > 1)
- usage();
-
- if (argc < 3)
- usage();
-
-
- //si le nombre d'argument est correct
- if (argc >= 3)
- {
- yr = atoi(argv[2]);
- mo = atoi(argv[1]);
- }
-
-
- //verification si le mois de fevrier est a 28 jours ou 29 jours
- numdays = days[mo - 1];
- if (2 == mo && isBissextile(yr))
- ++numdays;
-
- //Cela sert a faire demarrer le calendrier par le Lundi
- day_1 = (int)((ymd_to_scalar(yr, mo, 1) - (long)1) % 7L);
-
-
- fputs(line, stdout); //on affiche la valeur de line dnas la sortie stndard
-
-
- printf("\nMois de %s de l'annee %d\n\n", month[mo - 1], yr);
-
-
- //On affiche tous les jours (lundi, mardi, mercredi, ect...)
- for (j = 0; j < 7; )
- {
- fputs(daynames[1 + j], stdout); //verifie la norme ISO pour savoir ou commencer
- if (7 != ++j) //on veriifie pas que notre semaine fait plus de 7 jours :o)
- fputc(' ', stdout); //affiche un espace entre chacque jours
- }
-
-
- printf("\n%s", line); //on vas a la ligne
-
- //on affiche un espace jusqu'a ce que l'on tombe sur le premier jour du mois
- for (day = 0; day < day_1; ++day)
- fputs(" ", stdout);
-
-
- //t bein ici on affiche les jours tous simplment :-)
- for (day = 1; day <= numdays; ++day, ++day_1, day_1 %= 7)
- {
- if (!day_1 && 1 != day)
- printf("\b%s\n%s", line, line);
-
- printf("%3d ", day);
- }
-
- /*on met des epasce dans les jorus de la semaine si par exemple le 31 est un jeudi
- et bien le vendredi, samedi et dimanche seront remplacer par des espace*/
- for ( ; day_1; ++day_1, day_1 %= 7)
- fputs(" ", stdout);
-
-
- fputc('\n', stdout);
-
- return 0;
-
- }
-
- //Fonction affichant une petite aide :-p
- void usage(void)
- {
- puts("Usage: ./cal [m y]");
- puts("where: m = mois (1 - 12)");
- puts(" y = annee (1800 - 3000)");
- exit(-1);
- }
-
- //Fonction calculant la probailite que ce soint uen annee bissextile ou non
- int isBissextile (unsigned annee)
- {
- return annee % 400 == 0 || (annee % 4 == 0 && annee % 100 != 0); //c'est vrai que les 2 sont super util enssemble mais au moins ca evite certains de problemes
- }
-
-
- //Bon et bien pour la suite je ne pense pas qu'il y est besoin d'explication ?
-
- static unsigned months_to_days (unsigned mois)
- {
- return (mois * 3057 - 3007) / 100;
- }
-
-
- static long years_to_days (unsigned annee)
- {
- return annee * 365L + annee / 4 - annee / 100 + annee / 400;
- }
-
-
- long ymd_to_scalar (unsigned annee, unsigned mois, unsigned jour)
- {
- long scalaire;
- scalaire = jour + months_to_days(mois);
- if ( mois > 2 ) /* Verification si c'est uen annee bissextile ou non*/
- scalaire -= isBissextile(annee) ? 1 : 2;
- annee--;
- scalaire += years_to_days(annee);
- return scalaire;
- }
-
/*
Programme: calendar.c
Auteur: Joel Matteotti <joel.matteotti@free.fr>
Version: 1.0
Description: Ce petit programme de calendrier est un clone de la celebre application cal des systeme Unix
pour le moment il n'est pas aussi performent car il faut lui indiquer le mois et l'annee dont les annees sont
restreinte de 1800 a 3000 ni plus ni moins
*/
#include <stdio.h>
void usage(void);
int isBissextile(unsigned);
static unsigned month_to_days(unsigned);
static long years_to_days(unsigned);
long ymd_to_scalar(unsigned, unsigned, unsigned);
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char *month[12] = {"Janvier", "Fevrier", "Mars", "Avril", "Mais", "Juin",
"Juillet", "Aout", "Septembre", "Octembre", "Novembre", "Decembre"};
char *daynames[8] = {"Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"};
const char *line = "";
int main(int argc, char *argv[])
{
int day, day_1, numdays, i, j;
unsigned yr, mo;
/*si les argument passer en parametre sont incorrect ou pas assez nombreux
pour eviter d'avoir des fichier core on affihe un message d'aide plutot
que de continuer le reste du programme*/
if (argc < 3 && argc > 1)
usage();
if (argc < 3)
usage();
//si le nombre d'argument est correct
if (argc >= 3)
{
yr = atoi(argv[2]);
mo = atoi(argv[1]);
}
//verification si le mois de fevrier est a 28 jours ou 29 jours
numdays = days[mo - 1];
if (2 == mo && isBissextile(yr))
++numdays;
//Cela sert a faire demarrer le calendrier par le Lundi
day_1 = (int)((ymd_to_scalar(yr, mo, 1) - (long)1) % 7L);
fputs(line, stdout); //on affiche la valeur de line dnas la sortie stndard
printf("\nMois de %s de l'annee %d\n\n", month[mo - 1], yr);
//On affiche tous les jours (lundi, mardi, mercredi, ect...)
for (j = 0; j < 7; )
{
fputs(daynames[1 + j], stdout); //verifie la norme ISO pour savoir ou commencer
if (7 != ++j) //on veriifie pas que notre semaine fait plus de 7 jours :o)
fputc(' ', stdout); //affiche un espace entre chacque jours
}
printf("\n%s", line); //on vas a la ligne
//on affiche un espace jusqu'a ce que l'on tombe sur le premier jour du mois
for (day = 0; day < day_1; ++day)
fputs(" ", stdout);
//t bein ici on affiche les jours tous simplment :-)
for (day = 1; day <= numdays; ++day, ++day_1, day_1 %= 7)
{
if (!day_1 && 1 != day)
printf("\b%s\n%s", line, line);
printf("%3d ", day);
}
/*on met des epasce dans les jorus de la semaine si par exemple le 31 est un jeudi
et bien le vendredi, samedi et dimanche seront remplacer par des espace*/
for ( ; day_1; ++day_1, day_1 %= 7)
fputs(" ", stdout);
fputc('\n', stdout);
return 0;
}
//Fonction affichant une petite aide :-p
void usage(void)
{
puts("Usage: ./cal [m y]");
puts("where: m = mois (1 - 12)");
puts(" y = annee (1800 - 3000)");
exit(-1);
}
//Fonction calculant la probailite que ce soint uen annee bissextile ou non
int isBissextile (unsigned annee)
{
return annee % 400 == 0 || (annee % 4 == 0 && annee % 100 != 0); //c'est vrai que les 2 sont super util enssemble mais au moins ca evite certains de problemes
}
//Bon et bien pour la suite je ne pense pas qu'il y est besoin d'explication ?
static unsigned months_to_days (unsigned mois)
{
return (mois * 3057 - 3007) / 100;
}
static long years_to_days (unsigned annee)
{
return annee * 365L + annee / 4 - annee / 100 + annee / 400;
}
long ymd_to_scalar (unsigned annee, unsigned mois, unsigned jour)
{
long scalaire;
scalaire = jour + months_to_days(mois);
if ( mois > 2 ) /* Verification si c'est uen annee bissextile ou non*/
scalaire -= isBissextile(annee) ? 1 : 2;
annee--;
scalaire += years_to_days(annee);
return scalaire;
}
Conclusion
Ensuite il n'y a plus qu'a compiler: gcc calendar.c -o calendar
Voila un exemple d'utilisation: ./calendard 12 1999
cela donnera le calendrier du mois de decembre de 1999
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|