Formation C#
Formation C#
Formation C#
[Nom de la société]
AVANT PROPOS
Wissen corporation
C’est un groupe formé essentiellement de meilleurs étudiants de nos groupes
d’étude et d’encadrement (Groupe Les Erudits et alliés) qui se sont fixés plusieurs
objectifs dont le premier est celui du partage de la connaissance en
Informatique et en mathématique. Ainsi, pour atteindre notre premier objectif,
nous organisons des formations essentiellement gratuites pour partager le peu
que nous connaissons avec les autres. Car la connaissance, c’est comme un
chandelier, sa lumière ne diminue pas s‘il allume un autre chandelier.
Pour faire partie de Wissen, l’étudiant doit démontrer son savoir-faire et son
amour pour la connaissance pendant les cours d’encadrement etc… Pour les
externes désirant intégrer Wissen, ils doivent passer pas un test, car ne suivant
pas régulièrement les cours avec nous, c’est le seul moyen d’apprécier leur
savoir-faire et leur amour pour la connaissance. Le cerveau est bien une richesse
que nous avons tous en commun, mais c’est son utilisation qui distingue les
hommes.
…Parfois, il n’existe pas de gens plus intelligents que les autres, mais c’est le
travail qui nous différencie. Pour bâtir haut, il faut creuser profond et tu seras fort
dans ce que tu te donnes.
1|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Ce livre est un support de formation de la programmation en C#.
Prérequis
Ce support ne nécessite aucun prérequis, même ceux qui n’ont jamais
entendu parler de la programmation peuvent se retrouver facilement et
maitriser tout ce qui est enseigné dans ce livre.
Objectifs spécifiques
(compétences attendues)
A la fin de la formation, vous serez capables de :
Comprendre la notion de programmation informatique
Maitriser les notions de base de la programmation en C#
Créer des applications complexes avec C#
Etc.
2|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
PREMIERE PARTIE :
LES NOTIONS DE
BASE
3|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
I. GENERALITES SUR LA PROGRAMMATION
De nos jours, l’informatique touche tous les aspects de la vie, quel que soit notre
spécialisation, nous avons toujours directement ou indirectement besoin de
l’informatique. Etant donné que l’informatique a plusieurs champs d’application,
cela est logique qu’elle ait aussi plusieurs sous domaines : programmation
(développement), informatique embarquée, infographie, etc.
1 www.fr.wikipedia.org
2 www.ionos.fr
4|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
I.2 Environnement de développement intégré
Pour coder dans un langage de programmation, il faut des outils adaptés : un
éditeur de texte, un compilateur ainsi qu’un débogueur. Il y a des programmes
qui combinent les trois outils et ces programmes sont appelés Environnement de
développement intégré (EDI) ou IDE en anglais, pour Integrated development
Environment.
Dans le cas de C#, nous allons utiliser Visual studio 2015 comme IDE.
5|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
En résumé :
6|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
II. DEMARRER AVEC C#
II.1 Présentation
7|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Pour créer un nouveau projet avec Visual studio, on procède comme suit :
Etape 1
Première possibilité : Cliquez sur Fichier >>Nouveau >>Projet
8|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Etape 2
Toutes les 3 possibilités conduisent à la fenêtre suivante :
9|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Etape 3
Cliquez sur Ok et l’éditeur de Visual studio s’ouvre :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Formation
{
class Program
{
static void Main(string[] args)
{
}
}
}
10 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
On peut schématiser ce code comme suit :
3 Documentation officielle
11 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Les espaces de noms appelés namespace constituent une façon d'organiser les
différents types intervenant dans un programme C#.
ou
Remplacez "Message à afficher" par ce que vous voulez que l’ordinateur affiche
à l’écran lors de l’exécution de votre programme
Exemple :
12 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
L’exécution affiche la console qui se renferme immédiatement, pour maintenir
la console, ajouter cette ligne juste avant l’accolade de fermeture de static void
Main(string[] args) :
Console.ReadLine();
Cette instruction sera expliquée dans la section suivante, retenez pour l’instant
qu’elle permet de maintenir l’affichage de la console jusqu’à ce que l’utilisateur
clique sur une touche.
Le code devient :
Console.ReadLine();
L’exécution produit :
13 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Et voilà, vous venez d’écrire votre premier programme en C#.
Console.ReadLine();
Résultat :
Console.ReadLine();
Résultat :
14 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
J’ose croire que vous allez vu la différence : WriteLine affiche le message
demandé puis effectue un retour à la ligne, c’est-à-dire tout ce qui vient après
WriteLine sera sur la ligne suivante, ce qui n’est pas le cas pour Write.
Notez que le retour à la ligne dépend du terminateur de ligne active dans le flux
de sortie standard.
Une variable est une case mémoire dans laquelle on peut stocker une donnée.
Pratiquement, nous pouvons supposer que déclarer des variables : c’est réserver
des cases mémoires dans l’ordinateur et dans ces cases mémoires seront
stockés momentanément les valeurs saisies par les utilisateurs ou les résultats de
calculs de nos programmes.
Une variable a un nom (le mot que vous utilisez pour faire référence à la valeur
que la variable contient). Elle a également un type de données (lequel
détermine le genre des données que la variable peut stocker) et peut contenir
à un instant donné une valeur.
Vous êtes libre de nommer vos variables comme bon vous semble, mais il faut
suivre les recommandations de la documentation officielle sur les noms des
identificateurs4 :
4 Documentation officielle de C#
15 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
C# est un langage fortement typé. Chaque variable et chaque constante ont
un type, tout comme chaque expression qui fournit une valeur. Quand vous
déclarez une variable ou une constante dans un programme, vous devez
spécifier son type ou utiliser le var mot clé pour permettre au compilateur de
déduire le type.
La déclaration d’une variable se fait de la manière suivante :
Type_variable nom_variable ; ou
Var nom_variable=valeur ;
Les principaux types de C# sont :
a) Types numériques intégraux
Types Plage
sbyte -128 à 127
byte 0 à 255
short -32 768 à 32 767
ushort 0 à 65 535
int -2 147 483 648 à 2 147483 647
uint de 0 à 4 294 967 295
long -9 223 372 036 854 775808 à 9 223 372 036 854 775 807
ulong de 0 à18 446 744 073 709 551 615
16 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Exemple
int age;
String nom;
float n=0.546354f;
Une constante est une zone mémoire comme une variable, la seule différence
est que la valeur d’une constante ne change pas au cours de l’exécution d’un
programme.
Plusieurs constantes du même type peuvent être déclarées en même temps
comme l’illustre l’exemple suivant :
17 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
effectuer un cast, spécifiez le type voulu entre parenthèses devant la valeur ou
la variable à convertir :
(Type_destinatination) Valeur_à_convertir ;
Exemple :
int a;
float n=1245.546354f;
a = (int)n;
Console.ReadLine();
Résultat :
int a;
String nombre = "2353";
a = Int32.Parse(nombre);
Console.ReadLine();
Résultat :
18 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Utiliser la méthode Convert
On peut utiliser les méthodes suivantes :
Exemple :
int a;
String nombre = "2353";
a = Convert.ToInt32(nombre);
Résultat :
19 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
II.8 MISE EN FORME DES NOMBRES
II.8.1 Généralités
Supposons que j’ai quatre variables qui stockent le nom, l’âge, le salaire et la
taille d’un utilisateur.
20 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
premier objet de la liste, l'élément de format dont le spécificateur de
paramètres est 1 met en forme le deuxième objet de la liste, etc.
Pour afficher la phrase ci-haut, je dois écrire :
Console.ReadLine();
Résultat :
21 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Console.WriteLine("{0,-25} {1:-25}", nom2, nom3);
Console.ReadLine();
Résultat :
Tous les noms ont la même longueur et ils sont alignés à gauche car la valeur est
négative (-25). Essayez avec une valeur positive…
22 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
- Pour C, E, F, P et N, le nombre de chiffres décimaux
- Pour D, le nombre minimal de chiffres
- Pour le X, le nombre de chiffre dans le résultat
Exemple 1
int nombre1=23554;
float nombre2 = 34.456673f;
int montant = 4000;
Console.WriteLine("{0:D8}", nombre1);
Console.WriteLine("{0:N3}", nombre2);
Console.WriteLine("{0:C2}", montant);
Console.ReadLine();
Résultat :
Exemple 2
int n=245;
Console.ReadLine();
Résultat
23 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
II.8.3. Format personnalisé
int n=245;
Console.ReadLine();
Résultat :
Dans le format, j’ai défini que le nombre ait au moins 6 chiffres, étant donné
que la variable n n’a que 3 chiffres, les 3 autres chiffres sont remplacés par
des 0.
Exemple 2
int n=258;
Console.WriteLine("La valeur est {0:00.00}", n);
Console.ReadLine();
Résultat :
24 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
J’ai défini que le nombre doit avoir au minimum deux chiffres avant la virgule
et au maximum deux chiffres après la virgule
float n=2554.4534f;
Console.WriteLine("La valeur est {0:###.##}", n);
Console.WriteLine("La valeur est {0:###}", n);
Console.ReadLine();
Exemple :
float n=0.546354f;
Console.WriteLine("Le pourcentage est {0:%00.00}", n);
Console.ReadLine();
Résultat :
25 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Notez qu’il existe aussi de spécificateurs de format pour les dates.
Exemple :
int n = 45;
n++;
Console.WriteLine(" La valeur est " + n);
Console.ReadLine();
Résultat :
1. 𝑁é𝑔𝑎𝑡𝑖𝑜𝑛 𝑙𝑜𝑔𝑖𝑞𝑢𝑒 ∶ !
2. 𝐸𝑡 𝑙𝑜𝑔𝑖𝑞𝑢𝑒 ∶ 𝐴𝑁𝐷 𝑜𝑢 & 𝑜𝑢 &&
3. 𝑂𝑢 𝑒𝑥𝑐𝑙𝑢𝑠𝑖𝑓 ∶ ^
4. 𝑂𝑢 𝑖𝑛𝑐𝑙𝑢𝑠𝑖𝑓 ∶ 𝑂𝑟 𝑜𝑢 | 𝑜𝑢 ||
Voir annexe
II.9.4 Opérateurs de comparaison
1. == Egal
2. ! = Différent
3. < Inférieur à
4. <= Inférieur ou égal à
5. > Supérieur à
27 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
la valeur entendue est numérique (par exemple), il faut effectuer une
conversion comme l’illustre l’exemple suivant :
int age = 0;
String nom = "";
Console.WriteLine("Saisir votre nom");
nom = Console.ReadLine();
Exemple 1
Ecrire un programme C# qui fait la somme de deux nombres
Analyse et solution
Notre programme est chargé d’effectuer la somme de deux nombres saisis par
l’utilisateur, d’où nous avons besoin de deux cases mémoires pour stocker ces
deux nombres ainsi que d’une autre case pour stocker le résultat. On déclare
alors trois variables de type int :
int nombre1=0;
int nombre2 = 0;
int somme = 0;
Etant donné que les trois variables sont de même type, nous pouvons les
déclarer sur une même ligne :
int nombre1=0, nombre2 = 0, somme = 0;
Au démarrage, l’utilisateur doit saisir les deux nombres, pour cela, il est
nécessaire d’afficher un message pour lui demander ou lui indiquer de saisir un
nombre. Pour afficher un message, on va utiliser Console.WriteLine et pour lui
permettre de saisir une valeur, on le fera avec Console.ReadLine :
Console.WriteLine("Saisir le premier nombre");
nombre1 = Convert.ToInt32 (Console.ReadLine());
Console.WriteLine("Saisir le deuxième nombre nombre");
nombre2 = Convert.ToInt32(Console.ReadLine());
28 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int nombre1=0, nombre2 = 0, somme = 0;
Console.ReadLine();
}
}
}
Illustrations de l’exécution
29 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Idée d’amélioration
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
float nombre1=0.0f, nombre2 = 0.0f;
float somme = 0.0f, difference = 0.0f, quotient = 0.0f, produit = 0.0f;
Console.ReadLine();
}
}
}
Illustration de l’exécution :
30 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Exemple 2
Ecrire un programme qui lit le montant en dollars, le taux du jour puis calcule et
affiche le montant correspondant en francs congolais.
Analyse et solution
Si par exemple, le taux est 2000, cela veut dire qu’un dollar vaut 2000FC, il est
clair que si j’ai x dollars, en francs congolais, j’aurai x multiplié par 2000 FC. Le
programme sera :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int montantFC = 0, montantUSD = 0, taux = 0;
Console.ReadLine();
}
31 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
}
}
Illustrations de l’exécution :
Exemple 3
Écrivez un programme qui lit un entier représentant des secondes et affiche
l’équivalent en heure-minute-seconde comme suit :
_ _ heures, _ _ minutes et _ _ secondes
Exemple si l’utilisateur saisit 9999, le programme affiche :
2 heures, 46 minutes et 39 secondes
Analyse et solution
32 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
int rep = 0;
rep = 5 / 3;
Console.WriteLine("Le résultat " + rep);
Résultat :
Console.ReadLine();
}
Illustrations de l’exécution
33 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
34 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
III. STRUCTURES DE CONTROLE
35 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICES
36 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 1
Ecrire un programme C# qui reconnait si un nombre est de Kaprekar. Un nombre
n est un nombre de Kaprekar en base 10, si la représentation décimale de 𝑛2
peut être séparée en une partie gauche u et une partie droite v tel que 𝑢 + 𝑣 =
𝑛
Exemple : 452 = 2025, comme 20 + 25 = 45, 45 est un nombre de Kaprekar.
48792 = 23804641 , comme 238 + 04641 = 4879 (le 0 de 04641 est inutile, je l’ai
juste placé pour éviter toute confusion), alors 4879 est encore un nombre de
Kaprekar.
Ce programme comprendra :
namespace QUESTION1
{
//Cette classe permet de définir des variables globales
static class Classe
{
public static int u=0;
public static int v=0;
public static int s=0;
}
class Program
{
static void Main(string[] args)
{
int n = 0, carreN = 0, i=0,p=0, t=0;
bool test=false;
String ncarre;
Console.WriteLine("Entrez la valeur de n");
n = Int32.Parse(Console.ReadLine());
carreN = n * n;
37 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
//On convertit le nombre en chaine pour connaitre aisement le nombre de
chiffres
ncarre = carreN.ToString();
t = ncarre.Length;
// Appel des fonctions
for (i=1; i<t;i++)
{
p = i;
Classe.s=sommeParties(carreN, p);
test = estKaprekar(n);
if (test==true)
{
Console.WriteLine("Le nombre " + n + " est un nombre de Kaprekar car
");
Console.WriteLine(" " + n +"*"+ n + "=" + carreN + " et " + Classe.u +
"+" + Classe.v + "=" + n);
break;
}
}
if(test==false)
{
Console.WriteLine("Ce nombre n'est pas un nombre de Kaprekar ");
}
Console.ReadLine();
}
//La fonction qui va découper
public static int sommeParties(int n, int p)
{
int somme = 0, t = 0, i = 0, j= 1;
String ncarre, vInter="", uInter="";
ncarre = n.ToString();
t = ncarre.Length;
int[] chiffres = new int[t];
for (i = 0; i < t; i++)
{
chiffres[i] = Int32.Parse(ncarre.Substring(i, 1));
}
//On forme la partie droite
for(i=t-1; j<= p; i-- )
{
vInter =chiffres[i].ToString()+ vInter;
j++;
}
//on forme la partie gauche
int k;
j = 1;
k = t - p;
for (i = 0; j <= k; i++)
{
uInter = uInter + chiffres[i].ToString();
j++;
}
Classe.u = Int32.Parse(uInter);
Classe.v = Int32.Parse(vInter);
38 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
return somme;
}
}
}
Illustrations de l’exécution
39 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 2
Soient :
𝑒) Donner la requête LINQ affichant les propriétés de tous les articles qui
coutent au moins 1000 FC.
𝑓) Donner la requête LINQ affichant les articles par catégorie
(Examen S1 2017-2018)
solution
𝑎) using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE_2
40 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
{
class Article
{
protected int Code_article;
protected string Designation_article;
protected int Prix_article;
protected string Categorie_article;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE_2
{
class Article
{
protected int Code_article;
protected string Designation_article;
protected int Prix_article;
protected string Categorie_article;
41 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
this.Code_article = 0;
this.Designation_article = "Article non défini";
this.Prix_article = 0;
this.Categorie_article = "Catégorie non définie";
}
Comme la valeur de retour de la méthode n’a pas été précisée, vous êtes libre
de la redéfinir comme bon vous semble
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE_2
{
class ArticleSpecial: Article
{
private string Description_article;
43 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 3
Proposez une liste de codes C# permettant à l’utilisateur de jouer au jeu illustré à
l’interface ci-dessous :
(Support)
Solution
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace EXERCICE_3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
44 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
{
if (checkBox1_1961.Checked==true)
{
checkBox1_1930.Enabled = false;
checkBox1_1960.Enabled = false;
checkBox1_1990.Enabled = false;
}
45 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
}
}
46 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
{
checkBox3_5.Enabled = false;
checkBox3_2.Enabled = false;
checkBox3_4.Enabled = false;
}
}
EXERCICE 4
Ecrire un programme C# qui lit un mot, si le mot possède 7 caractères, le
programme trouve le mot miroir de ce mot, dans le cas contraire le programme
renvoie le nombre d’occurrence de chaque caractère. Pour cela créer une
classe Mot qui possède deux méthodes :
𝑎) La méthode TrouveMotMiroir
𝑏) NombreOccurence
(Interro 2019)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
47 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
namespace EXERCICE_4
{
class Mot
{
//Méthode NombreOccurence
public static void NombreOccurence(string m)
{
//Tableau qui stocke les caractères de la chaine
string[] lettres = new string[26];
int i = 0,j=1,k=0;
string l;
//On recherche les caractères composant la chaine
lettres[0] = m.Substring(0, 1);
for(i=1;i<m.Length;i++)
{
l = m.Substring(i, 1);
//on vérifie si le caractère n'est pas déjà dans le tableau
if (Array.IndexOf(lettres, l) ==-1)
{
lettres[j] = l;
j++;
}
}
//On compte le nombre d'occurence
int[] occ = new int[j];
for(i=0;i< j;i++)
{
occ[i] = 0;
}
for(i=0;i< j;i++)
{
for(k=0;k<m.Length;k++)
{
if (lettres[i].CompareTo(m.Substring(k,1))==0)
{
occ[i]++;
}
}
}
48 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
//Affichage du resultat
Console.WriteLine("Voici les occurences de chaque lettre");
for(i=0;i< j;i++)
{
Console.WriteLine("La lettre " + lettres[i] + " est reprise " + occ[i] + "
fois");
}
//méthode TrouveMotMiroir
public static void TrouveMotMiroir(string m)
{
int i=0;
char c;
//Le tableau qui va contenir les lettres du mot
char[] A = m.ToCharArray();
for(i=0;i<3;i++)
{
c = A[i];
A[i] = A[7 - i - 1];
A[7 - i - 1] = c;
}
// Reconstitution de la chaine à partir du tableau des caractères
m = new string(A);
Console.WriteLine("Le mot miroir est " + m);
}
}
}
EXERCICE 5
Evaluer les expressions suivantes en supposant
𝐴 = 40 𝐵 = 10 𝐶 = 20 𝐷=4 𝑋 = 24 𝑌 = 30
Noter chaque fois la valeur rendue comme résultat de l’expression et les valeurs
des variables dont le contenu a changé
(1) (5 ∗ 𝑋) + 2 ∗ ((3 ∗ 𝐵) + 4)
(2) (5 ∗ (𝑋 + 2) ∗ 3) ∗ (𝐵 + 4)
(3) 𝐴 == (𝐵+= 5)
(4) 𝐴+= (−𝑋)
(5)𝐴 ! = (𝐶 ∗= (𝐷))
49 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
(6)𝐴 ∗= 𝐶 + (𝑋. 𝐷)
(7)𝐴 % = 𝐷 + +
(8)𝐴% = + + 𝐷
(9)(𝑋 + +) ∗ (𝐴 + (−𝐶))
(Interro 2019)
Solution
(1) (5 ∗ 𝑋) + 2 ∗ ((3 ∗ 𝐵) + 4)
120 + 2 ∗ (30 + 4)
120 + 2 ∗ 34
120 + 68
188
Le résultat de l’expression est 188.
(2) (5 ∗ (𝑋 + 2) ∗ 3) ∗ (𝐵 + 4)
(5 ∗ (24 + 2) ∗ 3) ∗ (10 + 4)
( 5 ∗ 26 ∗ 3) ∗ 14
390 ∗ 14
5460
Le résultat de l’expression est 5460
(3) 𝐴 == (𝐵+= 5)
40 == (𝐵 = 10 + 5)
40 == 𝐵
40 == 15 𝐵 𝑣𝑎𝑢𝑡 𝑚𝑎𝑖𝑛𝑡𝑒𝑛𝑎𝑛𝑡 15
𝐹𝑎𝑙𝑠𝑒
Le résultat de l’expression est False et B=15
(4) 𝐴+= (−𝑋)
50 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
𝐴 = 40 + (−24)
𝐴 = 40 − 24
𝑨 = 𝟏𝟔
EXERCICE 6
𝑎) Donnez le parallélisme entre la spécialisation et la généralisation
𝑏) Quelle est la classe qu’on peut définir qui prouve qu’un attribut est de la
classe ?
𝑐) Comment appelle-t-on la méthode qui n’a pas de type, qui a le même
nom que la classe ? Et c’est quoi son rôle ?
𝑑) Donner un exemple clair d’une classe et d’un objet, donner la description
d’une classe en C# et montrer comment on peut l’instancier.
(Interro 2019)
Solution
𝑎) Le parallélisme entre la généralisation et spécialisation est que les deux
s'appliquent à un même type de relation entre classes (Héritage) ; on peut
employer l'un ou l'autre selon le sens de lecture.
𝑐) Le constructeur, il crée et initialise une instance de la classe
EXERCICE 7
Sans définir, donnez la différence entre :
𝑎) Une collection et un tableau
𝑏) Un attribut de classe et d’instance
𝑐) Le LINQ et le SQL
𝑑) Un langage orienté objet et un langage procédural
(Examen S1 2017-2018)
Solution
𝑎) La difference reside dans le fait que le tableau est de taille fixe alors que la
collection est de taille variable.
51 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 8
𝑎) On enregistre dans une liste Gly, le taux de glycémie des différents patients
dans un centre hospitalier. La glycémie est anormale, si elle est supérieure à 120.
Pour des personnes dont la glycémie est anormale, on leur administre le
glucophage, par contre les personnes dont la glycémie est normale, on leur
recommande les exercices physiques. Ecrire un programme en Csharp qui
calcule la moyenne des glycémies anormales. L’effectif des patients enregistrés
est saisi par l’utilisateur à partir du clavier. Le programme calculera aussi la
proportion des personnes dont la glycémie est anormale.
𝑏) Définir les concepts suivants :
namespace QUESTION_8
{
class Program
{
static void Main(string[] args)
{
//Création de la liste
List<int> Gly = new List<int>();
int n = 0, i=0, g=0;
label1: Console.WriteLine("Entrez le nombre de patients");
n = Int32.Parse(Console.ReadLine());
if(n<=0 )
{
Console.WriteLine("Le nombre de patients incorrect, recommencez");
goto label1;
}
Gly.Add(g);
}
//Calcul de la moyenne et de la proportion des glycémies anormales
int t = 0, somme=0;
float moy = 0, p = 0;
foreach(int val in Gly)
{
if(val>120)
{
somme += val;
t++;
}
}
if(t==0)
{
moy = 0;
}
else
{
moy = somme / t;
}
p = (t * 100) / n;
//Affichage de résultat
Console.WriteLine("La moyenne des glycémies anormales est de " + moy);
Console.WriteLine("La proportion des personnes dont la glycémie est anormale
est de " + p + "%");
Console.ReadLine();
}
}
}
EXERCICE 9
On dénomme nombre d’Armstrong un entier naturel qui est égal à la somme
des cubes des chiffres qui le composent, faire un programme C# décrivant ce
problème.
(Support page 65)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
53 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
namespace QUESTION_9
{
class Program
{
static void Main(string[] args)
{
int n = 0, i=0;
string chn = "";
int sommeCube = 0;
label1: Console.WriteLine("Entrez un entier naturel");
n = Int32.Parse(Console.ReadLine());
if (n<=0)
{
Console.WriteLine("Nombre invalide, recommencez");
goto label1;
}
Console.ReadLine();
}
}
}
Illustrations de l’exécution
54 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 10
On souhaite écrire un programme C# de calcul de n premiers nombre parfaits.
Un nombre est dit parfait s’il est égal à la somme de ses diviseurs, 1 compris.
(Support page 65)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE_10
{
class Program
{
static void Main(string[] args)
{
int n = 0, p = 2, t = 0, sommeDiviseurs=0 ,i=0;
label1: Console.WriteLine("Entrez le nombre de valeurs à afficher");
n = Int32.Parse(Console.ReadLine());
if(n<=0)
{
Console.WriteLine("Nombre incorrect, recommencez");
goto label1;
}
55 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
}
if(sommeDiviseurs==p)
{
Console.WriteLine(p.ToString());
t++;
}
p++;
}
Console.ReadLine();
}
}
}
Illustrations de l’exécution
EXERCICE 11
On souhaite écrire un programme de calcul du pgcd de deux entiers non nuls,
en C# à partir de l’algorithme de la méthode d’Euclide. Voici une spécification
de l’algorithme de calcul du PGCD de deux nombres (entiers strictement
positifs) a et b
(Support 65)
56 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE_11
{
class Program
{
static void Main(string[] args)
{
int a = 0, b = 0, m = 0, n = 0, r = 10,q=0 ;
label1: Console.WriteLine("Entrez le premier nombre");
a = Int32.Parse(Console.ReadLine());
if(a<=0)
{
Console.WriteLine("Le nombre doit etre positif, recommencez");
goto label1;
}
57 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Illustrations de l’exécution
EXERCICE 12
On considère un entier strictement positif. Un carré magique d’ordre n est une
matrice carrée d’ordre n (n ligne et n colonnes), qui contient des nombres
entiers strictement positifs. Ces nombres sont disposés de sorte que les sommes
sur chaque ligne, les sommes sur chaque colonne et les sommes sur chaque
diagonale principale sont égales. La valeur de ces sommes est appelée :
constante magique.
(TP 2021-2022)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
58 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int n = 0, i = 0, j = 0;
label1: Console.WriteLine("Saisir l'ordre de la matrice");
n = Int32.Parse(Console.ReadLine());
//On vérifie si n est positif
if (n <= 0)
{
Console.WriteLine("L'ordre ne doit être négatif");
goto label1;
}
//Déclaration des tableaux
int[,] A = new int[n, n];
int[] sommeLigne = new int[n];
int[] sommeColonne = new int[n];
int sommeD1 = 0, sommeD2 = 0;
//Remplissage de la matrice
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
label2: Console.WriteLine("Saisir l'élément A[" + i + "," + j + "]");
A[i, j] = Int32.Parse(Console.ReadLine());
if(A[i,j]<0)
{
Console.WriteLine("Les valeurs doivent être positives,
recommencez");
goto label2;
}
}
}
59 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
for (i = 0; i < n; i++)
{
sommeD1 += A[i, i];
}
//Calcul de la somme de la deuxième diagonale
for (i = 0; i < n; i++)
{
sommeD2 += A[i, n - 1 - i];
}
//On vérifie que toutes les sommes sont égales
int constanteMagique = sommeD1;
Boolean test = true;
for (i = 0; i < n; i++)
{
if (sommeLigne[i] != constanteMagique)
{
test = false;
}
}
if (sommeD2 != constanteMagique)
{
test = false;
}
if (test == true)
{
Console.WriteLine("La matrice est un carré magique et la constante magique
est " + constanteMagique);
}
else
{
Console.WriteLine("La matrice n'est pas un carré magique");
}
Console.ReadLine();
}
}
}
Illustrations de l’exécution
60 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
61 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
62 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 13
Ecrire un algorithme permettant à un utilisateur de saisir un mot afin de vérifier s’il
est palindrome. Un message dédié s’affichera à l’écran, après saisie, pour
indiquer si le mot est un palindrome ou non. Pour traiter l’exercice, vous devez
créer une fonction estPalindrome qui reçoit en paramètre une chaîne de
caractères, et retourner la valeur vrai ou faux. Pour rappel, un palindrome est un
mot qui peut se lire de gauche à droite ou de droite à gauche.
63 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
(TP 2021-2022)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace QUESTION_2
{
class Program
{
static void Main(string[] args)
{
String mot;
Boolean t = false;
Console.WriteLine("Saisir le mot");
mot = Console.ReadLine();
t = estPalindrome(mot);
if(t==true)
{
Console.WriteLine("Le mot est palindrome");
}
else
{
Console.WriteLine("Le mot n'est pas palindrome");
}
Console.ReadLine();
}
//Fonction estPalindrome
public static Boolean estPalindrome(String mot)
{
Boolean test = true;
int i = 0;
decimal n= mot.Length; ;
for(i=0;i<(int)Math.Floor(n/2);i++)
{
if(mot.Substring(i,1).CompareTo(mot.Substring((int)n-1-i,1)) !=0)
{
test = false;
}
return test;
}
}
}
64 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Illustration de l’exécution
EXERCICE 14
Soit T un tableau d’entiers de taille N. Une série dans T est une suite d’éléments
consécutifs et égaux de T. Le problème consiste à trouver la plus longue série
dans T, l’indice de son premier élément et sa longueur. Par exemple
T :226666555551000 le programme affichera la série est de 5, elle comme à
l’indice 6 et elle est de longueur 5.
(TP 2021-2022)
65 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace QUESTION_3
{
class Program
{
static void Main(string[] args)
{
int n = 0,i=0;
label1: Console.WriteLine("Saisir la taille du tableau");
n = Int32.Parse(Console.ReadLine());
if(n<=0)
{
Console.WriteLine("La taille ne peut pas être négative, recommencez !!!");
goto label1;
}
int[] T = new int[n];
//Remplissage du tableau
for(i=0;i< n;i++)
{
Console.WriteLine("Saisir l'élément T[" + i + "]");
T[i] = Int32.Parse(Console.ReadLine());
}
//Recherche du nombre de répétition de chaque valeur
int serie = T[0], pos=0, nbre=1,j=0;
int[] valeur = new int[n];
int[] compteur = new int[n];
int[] position = new int[n];
for (i=1;i<n;i++)
{
valeur[j] = serie;
compteur[j] = nbre;
position[j] = pos;
if(T[i]==serie)
{
nbre++;
}
else
{
serie = T[i];
nbre = 1;
pos = i;
j++;
}
}
if(T[n-2]==T[n-1])
66 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
{
compteur[j] += 1;
}
else
{
valeur[j] = T[n - 1];
compteur[j] = 1;
position[j] = n - 1;
}
Console.ReadLine();
}
}
}
67 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Illustration de l’exécution
68 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 15
Il existe une méthode de détermination de tous les nombres premiers compris
entre 1 et n, connue sous le nom de « crible d’Eratosthène ». Elle consiste à
dresser une liste de tous les nombres entiers considérés et à y « rayer » tous les
multiples d’autres entiers. Plus précisément, on procède ainsi :
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TP_CSHARP_2021_2022_QUESTION_4
{
class Program
{
static void Main(string[] args)
{
int i = 0, j = 0, n = 0;
label1: Console.WriteLine("Saisir la valeur de n");
n = int.Parse(Console.ReadLine());
if (n<=1)
{
Console.WriteLine("Valeur incorrecte, recommencez!!!");
goto label1;
69 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
}
Boolean[] tab = new Boolean[n-1];
for (i = 0; i < n - 1; i++)
{
tab[i] = true;
}
}
j++;
} while (j <= n);
}
}
Console.ReadLine();
}
}
}
70 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Illustration de l’exécution
EXERCICE 16
Ecrire un programme qui lit un verbe du premier groupe et en affiche la
conjugaison au présent de l’indicatif, sous la forme : je chante tu chantes il
chante nous chantons vous chantez ils chantent. Le programme devra vérifier
que le mot fourni se termine bien par er. On supposera qu’il ne peut comporter
plus de 26 lettres et qu’il s’agit d’un verbe régulier. Autrement dit, on admettra
que l’utilisateur ne fournira pas un verbe tel que manger (le programme
affichera alors : nous mangeons). Nb. Vous devez gérer les éventuelles erreurs
provoquées par l’utilisateur et apporter une interface conviviale (toujours sur la
console)
(TP 2021-2022)
71 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TP_CSHARP_2021_2022_QUESTION_5
{
class Program
{
static void Main(string[] args)
{
String verbe, radical;
label1: Console.WriteLine("Saisir un verbe du premier groupe");
verbe = Console.ReadLine();
//On vérifie si le verbe se termine par er
if (verbe.Substring(verbe.Length - 2, 2).ToUpper().CompareTo("ER") != 0)
{
Console.WriteLine("Le verbe doit se terminer par ER, recommencez");
goto label1;
}
//On vérifie que le verbe n'a pas plus de 26 lettres
if (verbe.Length > 26)
{
Console.WriteLine("Le verbe ne doit pas comporter plus de 26 lettres,
recommencez");
goto label1;
}
//On vérifie si le verbe est dans la liste des verbes irreguliers se terminant
par er
72 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Console.ReadLine();
}
}
}
Illustration de l’exécution
73 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 17
𝑎) Proposer une fonction en C# qui permet de déterminer le plus grand
commun diviseur de deux nombres
(TP 2020-2021)
Solution
𝑎)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TP_CSHARP_2021_2022_QUESTION_6_A
{
class Program
{
static void Main(string[] args)
{
int n = 0, m = 0,resultat=0;
Console.WriteLine("Saisir le premier nombre");
n = int.Parse(Console.ReadLine());
Console.WriteLine("Saisir le deuxième nombre");
m = int.Parse(Console.ReadLine());
resultat = pgcd(n, m);
Console.WriteLine("Le plus grand commun diviseur de " + n + " et " + m + "
vaut " + resultat);
Console.ReadLine();
}
static int pgcd(int a,int b)
{
int r=0,resu=0;
while(b>0)
{
r = a % b;
a = b;
74 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
b = r;
}
resu = a;
return resu;
}
}
}
Illustrations de l’exécution
𝑏)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TP_CSHARP_2021_2022_QUESTION6_B
{
class Program
{
static void Main(string[] args)
{
int n = 0;
//La variable qui va stocker le nombre en chaine de caractères
String ch;
Console.WriteLine("Saisir le nombre");
n = int.Parse(Console.ReadLine());
75 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
ch = n.ToString();
for(i=1;i< n;i++)
{
if(n %i==0)
{
sommeDiv += i;
}
}
if(sommeDiv==n)
{
test2 = true;
}
//Résultat
if(test==true && test2==true)
{
Console.WriteLine("La valeur saisie est miroir et un nombre parfait");
}
else if(test==true && test2==false)
{
Console.WriteLine("La valeur est miroir mais pas un nombre parfait");
}
else if(test==false && test2==true)
{
Console.WriteLine("La valeur n'est pas miroir mais c'est un nombre
parfait");
}
else
{
Console.WriteLine("La valeur n'est ni miroir ni un nombre parfait");
}
Console.ReadLine();
}
}
}
76 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Illustrations de l’exécution
EXERCICE 18
Ecrire un programme qui calcule la différence entre un nombre entré au clavier
et le dernier carré parfait inférieur à ce nombre. Ex. Si l’utilisateur entre 52,
diff=52-49=3
(TP)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace QUESTION_1
{
class Program
{
static void Main(string[] args)
{
int n = 0, m = 0, i = 0, entier=0, diff=0;
bool test1 = false, test2 = false;
double racine = 0, deci = 0;
label1: Console.WriteLine("Entrez le nombre");
n = Int32.Parse(Console.ReadLine());
if (n<=0)
{
Console.WriteLine("Le nombre doit etre supérieur à 0, recommencez");
goto label1;
77 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
}
//On parcourt tous les nombres allant de 0 à ce nombre pour rechercher le plus
grand
//ayant le carré parfait
for(i=0;i< n;i++)
{
racine = Math.Sqrt(i);
//On teste si la racine carrée obtenue est un nombre entier
entier = (int)Math.Floor(racine);
deci = racine - entier;
if (deci==0)
{
m = i;
}
}
//On fait la différence
diff = n - m;
Console.WriteLine("La différence entre " + n + " et " + m + " vaut " + diff);
Console.ReadLine();
}
}
}
EXERCICE 19
Une organisation spécialisée dans l’hébergement des touristes, dénommée «
Alba center » désire mettre en place une application leur permettant de
calculer le net à payer par chaque touriste à la fin de son séjour. Les divers
renseignements recueillis pour vous auprès du gestionnaire sont :
Chaque touriste doit faire le choix de sa chambre parmi celles disponibles ;
Chaque touriste doit préciser la durée de son séjour auprès du gestionnaire ;
Le taux journalier d’hébergement est fonction du type de chambre (On
retrouve les chambres de type : classe A, classe B et classe C) ;
La restauration du client est fonction de son choix entre les deux types de
restaurations disponibles : spécial et moyen ;
Les types de chambres et de restaurations sont à sélectionner dans des listes
déroulantes correspondantes ;
En faisant le choix des types de chambres et de restaurations, les tarifs
correspondants apparaissent automatiquement dans des zones de texte
correspondantes. Ces tarifs proviennent respectivement de deux tableaux
prédéfinis dans le programme : Tarif_Hébergement et Tarif_Restauration ;
La durée du séjour est saisie dans une zone de texte ;
Le net à payer est fonction du coût d’hébergement et de la restauration ;
78 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Un clic sur le bouton « Calcul » permet de calculer le net à payer, sur le
bouton « Effacer » permet d’initialiser et sur le bouton « Quitter » d’arrêter
l’exécution du programme après confirmation de l’utilisateur. Proposer en
C#, un programme (Interface graphique + Codes sources) permettant le
calcul du net à payer par chaque touriste à la fin de son séjour.
NB : Une fois section du type chambre dans le combobox correspondant son
tarifC apparait dans sa zone de texte correspondant, de même la sélection de
type restauration fait apparaitre le tarifR dans sa zone de texte respective:
Tarif_Hébergement
Type chambre TarifC ($)
Classe A 200
Classe B 100
Classe C 30
Tarif_Restauration
Solution
79 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace INTERRO_A_DOMICILE
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
80 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
private void comboTypeChambre_SelectedIndexChanged(object sender, EventArgs e)
{
String typeChambre = "";
//On récupère le type de chambre choisi par l'utilisateur
typeChambre = comboTypeChambre.SelectedItem.ToString();
//On traite les cas pour afficher le tarif correspondant
if (typeChambre.CompareTo("Classe A") == 0)
{
textBoxTarifChambre.Text = "200";
}
else if (typeChambre.CompareTo("Classe B") == 0)
{
textBoxTarifChambre.Text = "100";
}
else if (typeChambre.CompareTo("Classe C") == 0)
{
textBoxTarifChambre.Text = "30";
}
}
81 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
else
{
np = (tarifR + tarifC) * nbreJours;
textBoxNP.Text = np.ToString();
}
}
}
EXERCICE 20
Ecrire un programme C# sous l’environnement console qui constitue un
troisième tableau, à partir de deux tableaux de même longueur préalablement
saisis. Le nouveau tableau sera la somme d’éléments d’indice croissant du
premier tableau et d’éléments d’indice décroissant du deuxième tableau. Afin,
les éléments du tableau constitué seront triés en ordre croissant.
12 1 45 11 4 8 2
18 6 5 20 41 14 9
21 15 86 31 9 14 20
(TP)
82 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE
{
class Program
{
static void Main(string[] args)
{
int n, i;
Console.WriteLine("Entrez la taille du tableau");
n = Int32.Parse(Console.ReadLine());
int[] A = new int[n];
int[] B = new int[n];
int[] C = new int[n];
// Remplissage des deux tableaux
Console.WriteLine("Remplissage du premier tableau");
for (i=0; i<n;i++) {
Console.WriteLine("Entrez l'élément A[" + i + "]");
A[i] = Int32.Parse(Console.ReadLine());
}
Console.WriteLine("Remplissage du deuxième tableau");
for (i = 0; i<n; i++) {
Console.WriteLine("Entrez l'élément B[" + i + "]");
B[i] = Int32.Parse(Console.ReadLine());
}
//Formation du troisième tableau
for (i=0;i< n;i++) {
C[i] = A[i] + B[n - i-1];
}
//On trie le tableau
Array.Sort(C);
//Affichage du nouveau tableau
Console.WriteLine("Voici le nouveau tableau");
for (i=0; i< n; i++) {
Console.WriteLine(C[i]);
}
Console.ReadLine();
}
}
}
83 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 21
Ecrire un programme C# sous l’environnement console qui constitue un
troisième tableau, à partir de deux tableaux de même longueur préalablement
saisis. Le nouveau tableau sera le produit d’éléments d’indice croissant du
deuxième tableau et d’éléments d’indice décroissant du premier tableau. Afin,
les éléments du tableau constitué seront triés en ordre décroissant.
12 2 4 11 4 8 2
3 6 11 4 8 2 15
6 48 44 44 32 4 180
(TP)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE
{
class Program
{
static void Main(string[] args)
{
int n, i;
Console.WriteLine("Entrez la taille du tableau");
n = Int32.Parse(Console.ReadLine());
int[] A = new int[n];
int[] B = new int[n];
int[] C = new int[n];
// Remplissage des deux tableaux
Console.WriteLine("Remplissage du premier tableau");
for (i=0; i<n;i++) {
Console.WriteLine("Entrez l'élément A[" + i + "]");
A[i] = Int32.Parse(Console.ReadLine());
}
Console.WriteLine("Remplissage du deuxième tableau");
for (i = 0; i<n; i++) {
Console.WriteLine("Entrez l'élément B[" + i + "]");
B[i] = Int32.Parse(Console.ReadLine());
}
//Formation du troisième tableau
for (i=0;i< n;i++) {
84 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
C[i] = B[i] * A[n - i-1];
}
//On trie le tableau
Array.Sort(C);
Array.Reverse(C);
//Affichage du nouveau tableau
Console.WriteLine("Voici le nouveau tableau");
for (i=0; i< n; i++) {
Console.WriteLine(C[i]);
}
Console.ReadLine();
}
}
}
EXERCICE 22
Écrire un programme qui permet de coder un mot, le codage consistera à
remplacer chaque lettre du mot par la lettre qui vient après elle dans l'alphabet
(A sera remplacé par B, B par C, C par D et ainsi de suite et Z sera remplacé par
a étant qu'après z il n'y a aucune lettre d'où on retourne à A)
Ex : ABEDIZ donnera BCFEJA
(TP)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE
{
class Program
{
static void Main(string[] args)
{
char[] alphabet = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y' };
string text2 = " ", textmaj, text;
char c;
Console.WriteLine("Saisir le texte");
text = Console.ReadLine();
textmaj = text.ToUpperInvariant();
for (int i = 0; i < textmaj.Length; i++)
{
for (int j = 0; j < alphabet.Length; j++)
{
c = char.Parse(textmaj.Substring(i, 1));
if (Equals(c, 'Z'))
85 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
{
text2 = string.Concat(text2, 'A');
break;
}
else if (Equals(c, alphabet[j]))
{
text2 = string.Concat(text2, alphabet[j + 1]);
}
}
}
Console.WriteLine("Le texte " + textmaj + " donne " + text2);
Console.ReadLine();
}
}
}
Illustrations de l’éxecution
EXERCICE 23
Evaluer les expressions suivantes en supposant
𝐴 = 4, 𝐵 = 8, 𝐶 = 20, 𝐷 = 6, 𝑋 = 12 𝑒𝑡 𝑌 = 16
Notez chaque fois la valeur rendue comme résultat de l’expression et les valeurs
des variables dont le contenu a changé.
(1) (5 ∗ 𝑋) + 2 ∗ ((3 ∗ 𝐵) + 4)
(2) (5 ∗ (𝑋 + 2) ∗ 3) ∗ (𝐵 + 4)
(3) 𝐴 == (𝐵 = 5)
86 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
(4) 𝐴+= (𝑋 + 5)
(5) 𝐴 ! = (𝐶 ∗= (−𝐷))
(6) 𝐴 ∗= 𝐶 + (𝑋 − 𝐷)
(7) 𝐴 % = 𝐷 + +
(8) 𝐴 % = + + 𝐷
(9) (𝑋 + +) ∗ (𝐴 + 𝐶)
(10) 𝐴 = 𝑋 ∗ (𝐵 < 𝐶) + 𝑌 ∗ ! (𝐵 < 𝐶)
(11) ! (𝑋 − 𝐷 + 𝐶) || 𝐷
(12) 𝐴 && 𝐵 | | ! 0 && ! 𝐷
(Interro)
Solution
𝐴 = 4, 𝐵 = 8, 𝐶 = 20, 𝐷 = 6, 𝑋 = 12 𝑒𝑡 𝑌 = 16
(1) (5 ∗ 𝑋) + 2 ∗ ((3 ∗ 𝐵) + 4)
(5 ∗ 12) + 2 ∗ ((3 ∗ 8) + 4)
60 + 2 ∗ (24 + 4)
60 + 2 ∗ 28
60 + 56
116
La valeur rendue est 116
(2) (5 ∗ (𝑋 + 2) ∗ 3) ∗ (𝐵 + 4)
(5 ∗ (12 + 2) ∗ 3) ∗ (8 + 4)
(5 ∗ 14 ∗ 3) ∗ 12
210 ∗ 12
2 520
La valeur rendue est 2520
87 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
(3) 𝐴 == (𝐵 = 5)
4 == (5) 𝐿𝑎 𝑣𝑎𝑙𝑒𝑢𝑟 𝑑𝑒 𝐵 𝑑𝑒𝑣𝑖𝑒𝑛𝑡 5
0 𝑜𝑢 𝑓𝑎𝑙𝑠𝑒
La valeur rendue est 0 (ou false) et B change de valeur, sa nouvelle valeur est 5
(4) 𝐴+= (𝑋 + 5)
𝐴+= (12 + 5)
𝐴+= 17
𝐴 = 4 + 17
𝐴 = 21
La valeur de A devient 21
(5) 𝐴 ! = (𝐶 ∗= (−𝐷))
21 ! = (𝐶 ∗= (−6))
21 ! = (𝐶 = 20 ∗ (−6))
88 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
𝐴= 0 𝑒𝑡 𝐷 = 7
EXERCICE 24
Le chiffre d’affaire d’une entreprise pour l’année 2017 considérée comme
année initiale était de 𝑝0 = 10000$, le taux d’accroissement est 𝑖 = 5%, et la
formule d’accroissement de chiffre d’affaire à l’instant t est donnée par la
relation :
𝑝𝑡 = 𝑝0 (1 + 𝑖)𝑡
namespace EXERCICE
{
class Program
{
static void Main(string[] args)
{
float po = 10000,i=0.05f,pt=0.0f;
int n = 0;
do
{
pt = po*(1 + i);
n++;
po = pt;
} while (pt <= 350000);
89 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 25
Ecrire un programme en C# qui permet de vérifier si deux nombres sont amis.
(Deux nombres a et b sont dits nombres amis si la somme des diviseurs de a est
égale à b et la somme des diviseurs de b est égale à a. Par exemple 220 et 284
sont des nombres amis).
(Examen 2020-2021)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EXERCICE
{
class Program
{
static void Main(string[] args)
{
90 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
else
{
Console.WriteLine("Les deux nombres ne sont pas amis");
}
Console.ReadLine();
}
}
}
Illustrations de l’exécution
EXERCICE 26
Ecrire un programme en C# qui permet de vérifier si le nombre introduit par
l’utilisateur est un nombre Daphné.
(Examen 2020-2021)
91 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com