Nous reprenons ici l’exercice permettant de connaitre le jours de la semaine en fonction d’une date donnée. L’exercice, intitulé « Quel est le jour de votre naissance« , est codé ici sous la forme d’une fonction. J’en ai profité pour optimiser un peu l’algorithme en remplaçant les « switch – case » par un tableau appelé par un « if else », car cela rend le code plus clair :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JourdelaSemaine
{
class Program
{
static void Main(string[] args)
{
// I. declaration
int a, m, j, valmois;
string JourdelaSemaine = "";
bool bisa = false;
valmois = 0;
// II. saisies
Console.WriteLine("Entrez la date sous forme JJ/MM/AA, puis appuyez sur ENTREE\n");
Console.WriteLine("Entrez le jour :\n");
j = int.Parse(Console.ReadLine());
Console.WriteLine("Entrez le mois :\n");
m = int.Parse(Console.ReadLine());
Console.WriteLine("Entrez l'année :\n");
a = int.Parse(Console.ReadLine());
Fonction(ref valmois, ref JourdelaSemaine, ref j, ref m, ref a, ref bisa);
//Resultat
if (bisa == true)
{
Console.WriteLine("L'année " + a + " est bissextile !\n");
}
else
{
Console.WriteLine("L'année 19" + a + " n'est pas bissextile !\n");
}
Console.WriteLine("\nle jour de la semaine correspondant au " + j + "/" + m + "/" + a + " est un : " + JourdelaSemaine);
Console.ReadKey();
}
//fonction
private static void Fonction(ref int valmois, ref string JourdelaSemaine, ref int j, ref int m, ref int a, ref bool bisa)
{
//declaration
int al, reste7, r4;
float mod_4, mod_100, mod_400;
//bool bisa;
JourdelaSemaine = " une erreur s'est produite !!!";
// -- //table jour
string[] jour = new string[] { "samedi", "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi" };
// -- //table mois
int[] mois = new int[] { 4, 0, 2, 5, 0, 3, 6, 1, 4, 6 };
// II. verification
al = a.ToString().Length;
if (al > 2)
{
Console.WriteLine("Erreur ! la date doit être au format AA. Par exemple 27 pour 1927.\n");
}
else
{
// III. Commencer pre-traitement
//savoir si l'année est bissextile :
//ANNEE BISSEXTILE
//Saisie
// --> déja fait plus haut (JJ/MM/AA)
//Traitement + Résultat
mod_4 = (a % 4);
mod_100 = (a % 100);
mod_400 = (a % 400);
if (mod_4 != 0)
{
bisa = false;
Console.WriteLine("L'année " + a + " n'est pas bissextile !\n");
}
else
{
if ((mod_4 == 0) && (mod_100 != 0) && (mod_400 != 0))
{
bisa = true;
}
else
{
bisa = false;
}
}
Console.WriteLine("....Fin de la phase de prétraitement.\n....La variable $bisa a été assignée.\n\nOn continu le programme !!!\n");
//fin de Prétraitement de verification bissextile
//Traitement
r4 = (a / 4);
if (m == 1)
{
if (bisa == true)
{
valmois = 0;
}
else
valmois = 1;
}
else if (m == 2)
{
if (bisa == true)
{
valmois = 3;
}
else
valmois = 4;
}
else
{
//m = (m - 2);
valmois = mois[(m - 3)];
}
reste7 = (a + r4 + valmois + j) % 7;
JourdelaSemaine = jour[reste7];
//fin du programme
}
}
}
}