Delegate : un exemple facile à comprendre

Voici le code d’un exemple facile à comprendre des delegate en C sharp. Dans cet exemple, à l’aide du delegate, j’appelle successivement 3 fonctions nommées respectivement a(), b() et ab() :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelegateConsole
{
    class Program
    {
        //Fonctions
        //a
        static void a()
        {
            Console.WriteLine("Fonction a");
        }
        //b
        static void b()
        {
            Console.WriteLine("Fonction b");
        }
        //a + b
        static void ab()
        {
            Console.WriteLine("Fonction ab :");
            a();
            b();
        }
        //Delegate
        delegate void D();

        static void Main(string[] args)
        {
            //instanciation
            D delega = new D(a);
            D delegb = new D(b);
            D delegab = new D(ab);

            //Appel delegate fonction a
            delega();

            //Appel delegate fonction a
            delegb();

            //Appel delegate fonction ab
            delegab();

            Console.ReadKey();
        }
    }
}
Posted in C#Sharp, Codes | Tagged , , , , , , , , , , , , , | Leave a comment

C# Calculer le PGCD de deux nombres

Voici l’algorithme permettant de calculer PGCD de deux nombres (Euclide) :

  • Soit a et b deux nombres
  • Tant que a est différent de b, si a est supérieur à b, a prend comme valeur a-b, sinon b prend la valeur b-a.

Il faudra par ailleurs s’assurer que numérateur et dénominateur ne sont pas nuls et ne traiter que deux nombres positifs. Tester avec une fraction construite avec comme numérateur -75 et comme dénominateur 90 (doit retourner 15).


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PGCD
{
class Program
{
static void Main(string[] args)
{
int a, b;

a = -75;
b = 90;

if (a < 0)
{
a = -a;
}
if (b < 0)
{
b = -b;
}

while (a != b)
{
if (a > b)
{
a = a - b;
}
else
{
b = b - a;
}
}

Console.WriteLine(a);
Console.ReadKey();

}//fin PGCD
}
}

Posted in Algo, C#Sharp, Codes, Math | Tagged , , , , , , , , , , , , , , | Leave a comment

C# Calcul du déterminant d’une matrice carré 2*2

Pour calculer le déterminant d’une matrice carré de type 2 * 2 avec C Sharp, il suffit d’appliquer la formule suivante : det = ad – bc dans laquelle a et b représentent les termes des deux premières colonnes de la première ligne et c et d sont les deux termes de la deuxième ligne de la matrice.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace bonus_determinant_matrice
{
class Program
{
static void Main(string[] args)
{
//declaration
int[,] m = new int[,] { { 1, 2 }, { 3, 4 } };

//ttt
int det = (m[0, 0] * m[1, 1]) - (m[0, 1] * m[1, 0]);

//resultat
Console.WriteLine("Le déterminant de la matrice carre DET = "+det);

Console.ReadKey();
}
}
}

Posted in Math | Tagged , , , , , , , , , , , , , , , | Leave a comment

Nombre de permutations dans un tri à bulle

Chose promise, chose due, j’ouvre la catégorie math avec ce code permettant de calculer le nombre maximum de permutations opérées dans un algorithme de tri à bulle. Si il y a n données à trier, il y aura n-1 échanges maximum à effectuer à la première étape, n-2 à la seconde, n-3 à la troisième et ainsi de suite. Le nombre maximum d’échanges est donc n(n-1)/2. Mais puisque qu’un échange entre a et b se réalise par l’intermédiaire d’une variable temporaire c provoquant ainsi une succession de trois affectations : (c<-a), (a<-b), (b<-c); il faudra au maximum 3n(n-1)/2 opérations pour traiter n éléments dans un tableau :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Bonus_math_nb_echange_tri_bulle
{
class Program
{
static void Main(string[] args)
{
//declaration
int n, m;

//saisies
Console.WriteLine("Entrer le nombre d'éléments a trier dans votre tableau :\n");
n = int.Parse(Console.ReadLine());

//traitement
m = ((3 * n) * (n - 1)) / 2;

//résultat
Console.WriteLine("\nLe nombre maximum de permutations réalisées lors de l'éxécution de l'algorithme du tri à bulle composé de " + n + " éléments est de : " + m);

Console.ReadKey();
//fin
}
}
}

Posted in Math | Tagged , , , , , , , , , , , , , , | Leave a comment

C# Algorithme du Tri à Bulle Optimisé

Comme promis, voici la version optimisée de l’algorithme du tri à bulle au sens strict du terme. Le tri à bulle, à proprement parlé, consiste à faire remonter le plus petit élément. On commence à droite du tableau, si le dernier élément  est plus petit que l’avant dernier, on le permute. Je vous laisse deviner la suite :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace bonus_1_algo_tri_bulle
{
class Program
{
static void Main(string[] args)
{

//declaration
int i = 1, j, n;

// -- tableau D(i) 1 <= i <= n
int[] table = new int[] { 7, 88, 8, 13, 68, 73, 21, 1, 9, 5 };
n = (table.Length);

//traitement Algorithme de Tri à Bulle
while (i < n)
{
for (j = n; j > i; j--)
{
if (table[j-1] < table[j-2])
{
int tmp = table[j-1];
table[j-1] = table[j-2];
table[j-2] = tmp;
}
}
i++;
}

for (int k = 0; k < table.Length; k++)
{
System.Console.WriteLine(table[k]);
}

Console.ReadKey();
//fin
}
}
}

Posted in C#Sharp, Codes, Optimiser | Tagged , , , , , , , , , , , | 1 Comment

CDI – Concepts et programmation orientée objet

Après avoir tout à fait intentionnellement bâclé les exercices sur les procédures et les fonctions en C-Sharp, je vais enfin pouvoir commencer les exercices sur les objets !

conceptPour moi c’est le grand départ ; c’est à ce moment que la programmation devient intéressante car elle présuppose de penser une application au niveau conceptuel. C’est même la raison pour laquelle j’ai choisi d’intégrer la formation de Concepteur Développeur Informatique car le niveau conceptuel de développement d’une application se rapproche – pour ne pas dire est similaire – à la psychologie cognitive pour laquelle je me suis de par le passé intéressé de très près.

Cependant, avant d’aller plus loin je tiens à préciser que la plupart des codes publiés ici ne sont pas nécessairement optimisés puisqu’ils ont pour objectif premier de répondre à une directive d’apprentissage et de compréhension du codage. Par exemple le code sur le « tri d’un tableau » pourrait se coder en une ligne à l’aide de la méthode « Array.Sort(tableau) ». A l’avenir, j’ouvrirai une catégorie « optimisée » dans laquelle je veillerai à ce que les codes soient optimisés aux mieux.

Pour finir, puisque je n’ai pas particulièrement d’animosité pour les mathématiques, j’ouvrirai prochainement une catégorie dans laquelle je publierai régulièrement des formules mathématiques implémentées dans du code C-Sharp.

Pour ma part ayant fini ma journée, je vous laisse prendre soin de décider de ce que vous aller faire de la votre !

A bonne entendeur ;)

Posted in News | Tagged , , , , , , , , , , , , , | Leave a comment

C# Fonction Inverser une chaine de caractère

Écrire et utiliser une procédure qui reçoit une chaîne de caractères et qui retourne cette même chaîne inversée (Le dernier caractère devient le premier, l’avant dernier le deuxième…). Un seul argument sera utilisé.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercice_tableau_5_palindrome
{
class Program
{
static void Main(string[] args)
{
//declaration

string a;

//saisie

Console.WriteLine("saisir une chaine de caractère : \n");
a = (Console.ReadLine());

Procedure(ref a);

Console.WriteLine(a);
Console.WriteLine("\nappuyez sur une touche pour quitter");
Console.ReadKey();
//fin

}

//fonction

private static void Procedure(ref string a)
{
string b = "", c = "";

//traitement

//verifications

if (a.Length == 0)
{
Console.WriteLine("\nAttention, la chaine de caractère est vide !\n");
}

else
{
//suppression des espaces

b = a.Replace(" ", "");
Console.WriteLine("\nsuppression des espaces :\t" + b + "\n");

//permutation

for (int i = (b.Length - 1); i >= 0; i--)
{

c = c + b[i];

}
a = c;
}

}
}
}



Posted in C#Sharp, Codes, Fonction | Tagged , , , , , , , , , , , , | Leave a comment

C# Fonction jour de la semaine

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
}

}
}
}

Posted in C#Sharp, Codes, Fonction | Tagged , , , , , , | Leave a comment

C# Fonction année bissextile

Dans cette exercice sur les fonctions en C-SHARP, nous reprenons celui permettant de calculer si une année est bissextile à partir d’un calcul de modulo.

Le but du présent exercice est de d’intégrer le calcule d’une année bissextile dans une fonction.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercice_fonction_bissextile
{
class Program
{
public static void Main(string[] args)
{
//declaration
float a; // --  mod_4, mod_100, mod_400;
bool biss = false;

//saisie
Console.WriteLine("Entrez l'année pour savoir si elle est bissextile\n");
a = float.Parse(Console.ReadLine());

//ref
Bissextile(ref a, ref biss); // -- , ref mod_4, ref mod_100, mod_400

//resultat
if (biss == false)
{
Console.WriteLine("L'année n'est pas bissextile !\n");
}
else
{
Console.WriteLine("L'année est bissextile !\n");
}

// fin du programme
Console.ReadKey();

}

//fonction
private static void Bissextile(ref float a, ref bool biss)
{
//declaration interne

float mod_4, mod_100, mod_400;

//ttt

mod_4 = (a % 4);
mod_100 = (a % 100);
mod_400 = (a % 400);

if (mod_4 != 0)
{
biss = false;
}
else
{
if ((mod_4 == 0) && (mod_100 != 0) && (mod_400 != 0))
{
biss = true;
}
else
{
biss = false;
}
}

}

}
}

Posted in C#Sharp, Codes, Fonction | Tagged , , , , , , , , , , | Leave a comment