Formation C#

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 92

DIUMI DIKOLO Aimé

[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.

Il y a une naissance en toute connaissance, Thucydide a dit : « Avoir des


connaissances sans les partager, c’est se mettre au niveau de celui qui n’a pas
d’idées ». Wissen Corporation est là pour assurer votre formation, votre
encadrement suivant vos désirs.

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.

La programmation…, désigne l'ensemble des activités qui permettent l'écriture


des programmes informatiques. C'est une étape importante du développement
de logiciels.1

En d’autres termes, la programmation informatique consiste à produire des


logiciels (applications). Pour programmer, nous avons besoin d’un langage de
programmation. Il existe plusieurs langages de programmation, nous pouvons
citer : C#, Python, Java, Visual basic, Langage C, PHP, etc.

On utilise donc un langage de programmation pour formuler les instructions à


donner à l’ordinateur pour que ce dernier effectue une tâche bien précise.

I.1 Langage interprété ou langage compilé


Souvent, les langages de programmation que nous utilisons sont de haut niveau,
c’est-à-dire proche du langage humain, généralement proche de l’anglais.
Mais l’ordinateur ne comprend que le langage binaire (suite des 0 et des 1).

Pour que l’ordinateur puisse comprendre les instructions écrites en langage


évolué (codes sources), il doit y avoir un traducteur qui va traduire les codes
sources en langage binaire. Il existe deux types des traducteurs : les interpréteurs
et les compilateurs.
Un interpréteur traduit le programme ligne par ligne tandis qu’un compilateur
traduit l’ensemble du programme.

On peut résumer la différence entre les interpréteurs et les compilateurs dans le


tableau suivant : 2

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.

L’éditeur de texte nous permet d’écrire le code source du programme.


Le compilateur (Interpréteur) pour transformer le code source en binaire
qui est le seul langage compréhensible par la machine.
Le débogueur permet de traquer les erreurs dans le programme.

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é :

Les langages de programmation tels que C# vous permettent d’écrire des


instructions que vous souhaitez que l’ordinateur exécute. Chaque langage de
programmation a une syntaxe différente, mais une fois que vous avez appris
votre premier langage de programmation, puis essayé d’en apprendre un
deuxième, vous réalisez rapidement qu’ils partagent de nombreuses idées
similaires. Le travail d’un langage de programmation consiste à permettre à un
humain d’écrire des instructions de façon lisible et compréhensible par un
humain. Les instructions que vous écrivez dans un langage de programmation
sont appelées « code source » ou juste « code ».

6|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
II. DEMARRER AVEC C#
II.1 Présentation

C# (prononcé « C Sharp ») est un langage de programmation moderne, orienté


objet et de type sécurisé. C# permet aux développeurs de créer de nombreux
types d’applications sécurisées et fiables qui s’exécutent dans .NET. C# prend sa
source dans la famille de langages C et sera immédiatement reconnaissable
aux programmeurs en C, C++, Java et JavaScript. Ce langage vous permet de
créer de nombreux types d’applications, par exemple :

 Applications métier pour capturer, analyser et traiter les données


 Applications web dynamiques accessibles à partir d’un navigateur web
 Jeux 2D et 3D
 Applications financières et scientifiques
 Applications cloud
 Applications mobiles

II.2 Création d’un nouveau projet avec Visual studio


Comme indiqué plus haut, nous allons utiliser Visual studio comme
environnement de développement intégré :

Page de démarrage de Visual studio 2015

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

Deuxième possibilité, cliquez directement sur Nouveau projet

Troisième possibilité : Faites la combinaison Ctrl+Maj+N

8|Page
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Etape 2
Toutes les 3 possibilités conduisent à la fenêtre suivante :

1. La zone de gauche permet de choisir le langage (car Visual studio permet


de programmer en plusieurs langages), choisissez Visual C#.
2. La partie du milieu permet de choisir le type d’application, choisissez
Application console. Les applications graphiques (Application Windows
Forms) seront étudiées un peu plus loin.
3. Le troisième cadre permet de donner un nom à votre application ou
projet.
4. Le point 4 permet de changer l’emplacement de votre application. Si
vous cliquez sur le bouton Parcourir, Visual Studio va ouvrir votre
explorateur des fichiers pour vous permettre de choisir l’emplacement de
votre application.

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 :

II.3 Structure d’un programme en C#


Quand on crée un nouveau projet en mode console, Visual studio nous génère
automatique ce morceau de code :

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 :

Les directives Using :

Permettent d’importer des espaces de noms d’assemblys référencés. Cette


instruction a aussi une autre utilisation très utile. Elle permet de délimiter
précisément l’utilisation d’un objet dans un bloc de code.
Les espaces de noms représentent un moyen hiérarchique d’organiser les
bibliothèques et les programmes C#. Les espaces de noms contiennent des
types et d’autres espaces de noms ; par exemple, l’espace de noms System
contient plusieurs types, notamment la classe Console et d’autres espaces de
noms, tels que IO et Collections. Une directive using qui fait référence à un
espace de noms donné permet l’utilisation non qualifiée des types membres de
cet espace de noms.3

Représente notre espace de noms.

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#.

On peut comparer les namespace à des dossiers, le comportement est


identique à un dossier, il est possible d’avoir des éléments de même nom dans
différents namespace mais pas dans un même namespace.

Une classe de notre application. Cette notion sera approfondie dans la


partie programmation orientée objet.

La méthode principale, est le point d’entrée d’un programme C#, pour


l’instant notre code source sera écrit entre les accolages de static void Main(string[]
args)

II.4 Affichage d’un message à l’écran


II.4.1 Généralités

Pour afficher un message à l’écran, on peut utiliser :

ou

Remplacez "Message à afficher" par ce que vous voulez que l’ordinateur affiche
à l’écran lors de l’exécution de votre programme
Exemple :

Console.WriteLine("Bonjour chers Erudits");

Ecrivez ce code entre les accolades de static void Main(string[] args)


Pour exécuter, on clique sur Démarrer :

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.WriteLine("Bonjour chers Erudits");

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#.

II.4.2 Différence entre Write et WriteLine

Pour illustrer la différence entre Write et WriteLine, commençons par deux


exemples.
Exemple 1 : On affiche deux messages avec WriteLine :

Console.WriteLine("Bonjour chers Erudits");


Console.WriteLine("Je m'appelle Aimé DIUMI");

Console.ReadLine();

Résultat :

Exemple 2 : Les mêmes messages mais avec Write cette fois ci :

Console.Write("Bonjour chers Erudits ");


Console.Write("Je m'appelle Aimé DIUMI");

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.

II.5 LES VARIABLES

C#, comme la plupart des langages de programmation, utilise des variables


pour stocker des valeurs. Elles servent à conserver momentanément des
données en mémoire.

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 :

 Les identificateurs doivent commencer par une lettre ou par _ .


 Les identificateurs peuvent contenir des lettres Unicode, des nombres
décimaux, des caractères de connexion Unicode, des caractères de
combinaison Unicode ou des caractères de mise en forme Unicode.
 Vous pouvez déclarer des identificateurs qui correspondent à des mots
clés C# en utilisant le préfixe @ sur l’identificateur. @ ne fait pas partie du
nom de l’identificateur. Par exemple, @if déclare un identificateur nommé
if. Ces identificateurs textuels sont destinés principalement à assurer
l’interopérabilité avec les identificateurs déclarés dans d’autres langages.

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

b) Types numériques à virgule flottante

Type Plage approximative Précision


float ± 1, 5 × 10−45 à ± 3, 4 × 1038 ~6-9 chiffres

double ± 5,0 × 10−324 à ± 1,7 × 10308 ~15-17 chiffres

decimal ± 1, 0 × 10−28 à ± 7,9228 × 1028 28 à 29 chiffres

c) Type bool : accepte seulement deux valeurs : true ou false


d) Char : stocke un caractère
e) Type object
f) Type String

16 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Exemple

int age;
String nom;
float n=0.546354f;

II.6 LES CONSTANTES


Les constantes sont des valeurs immuables qui sont connues au moment de la
compilation et qui ne changent pas pendant la durée de vie du programme.
On déclare une constante comme suit :
Const type nom_constante=valeur ;
Exemple

const int nombre = 4;

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 :

const int a=5,b=10, c=30;

II.7. CONVERSION DES TYPES


C# étant typé statiquement au moment de la compilation, une fois qu’une
variable est déclarée elle ne peut plus être redéclarée et aucune valeur d’un
autre type ne peut lui être assignée, sauf si ce type peut être converti de
manière implicite au type de la variable. Par exemple, string ne peut pas être
converti implicitement en int.

Un cast est un moyen d’informer explicitement le compilateur que vous avez


l’intention d’effectuer la conversion et que vous savez que la perte de données
peut se produire, ou le cast peut échouer au moment de l’exécution. Pour

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.WriteLine("La valeur vaut :"+a);

Console.ReadLine();

Résultat :

Pour convertir une chaine de caractères en numérique, nous avons deux


possibilités :

Utiliser les méthodes Parse ou TryParse


Exemple

int a;
String nombre = "2353";
a = Int32.Parse(nombre);

Console.WriteLine("La valeur vaut :"+a);

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 :

Type de destination Méthodes


float Convert.ToSingle(Chaine à convertir)

double Convert.ToDouble(Chaine à convertir)

short Convert.ToInt16(Chaine à convertir)

int Convert.ToInt32(Chaine à convertir)

long Convert.ToInt64(Chaine à convertir)

ushort Convert.ToUInt16(Chaine à convertir)

uint Convert.ToUInt32(Chaine à convertir)

ulong Convert.ToUInt64(Chaine à convertir)

Exemple :

int a;
String nombre = "2353";
a = Convert.ToInt32(nombre);

Console.WriteLine("La valeur vaut :"+a);

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

La manière dont les valeurs sont stockées en interne ne reflète pas


nécessairement celle dont les utilisateurs souhaitent les voir.

Supposons que j’ai quatre variables qui stockent le nom, l’âge, le salaire et la
taille d’un utilisateur.

int age = 17;


String nom = "Moïse ALOMBA";
float taille = 1.5632f;
long salaire = 500000L;

J’aimerais afficher la chaine :


Monsieur Moïse ALOMBA, 17 ans mesurant 1.5632 m touche 500000$. C’est dans
des cas pareils, que la mise en forme composite devient très intéressante.
Dans ce cas, la syntaxe de WriteLine devient :
Console.WriteLine(format, objet1, objet2, objet3...)

Format représente la chaine de format composite et objet1, objet2, objet3


représentent les objets auxquels appliquer le format.

Une chaîne de format standard comprend un spécificateur de format unique,


qui est un caractère alphabétique définissant la représentation sous forme de
chaîne de l'objet auquel il s'applique, ainsi qu'un spécificateur de précision
facultatif qui affecte le nombre de chiffres affichés dans la chaîne de résultat. Si
le spécificateur de précision est omis ou n'est pas pris en charge, un
spécificateur de format standard équivaut à une chaîne de format standard.

Chaque élément de format prend la forme suivante et comprend les


composants suivants :

{ index[, alignement] [ : FormatString] }

 Le composant obligatoire index, également appelé « spécificateur de


paramètre », est un nombre à partir de 0 qui permet d’identifier un
élément correspondant dans la liste des objets. En d'autres termes,
l'élément de format dont le spécificateur de format est 0 met en forme le

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 :

int age = 17;


String nom = "Moïse ALOMBA";
float taille = 1.5632f;
long salaire = 500000L;
Console.WriteLine("Monsieur {0}, {1} ans mesurant {2} m, touche {3}$", nom, age, taille,
salaire);

Console.ReadLine();

Résultat :

Notez que plusieurs éléments de format peuvent faire référence au même


élément de la liste d'objets en indiquant le même spécificateur de paramètre.

 Le composant facultatif alignement est un entier signé indiquant la largeur


préférée du champ mis en forme. Si la valeur du composant alignement
est inférieure à la longueur de la chaîne mise en forme, alignement est
ignoré et la longueur de la chaîne mise en forme est utilisée comme
largeur de champ. Les données mises en forme dans le champ sont
alignées à droite si alignement est positif et alignées à gauche si
alignement est négatif. Si un remplissage est nécessaire, des espaces
blancs sont utilisés. La virgule est obligatoire si alignement est spécifié.
Exemple

String nom = "Moïse ALOMBA";


String nom1 = "Jonas KATEMBO";
String nom2 = "Andy BINAKI";
String nom3 = "Marcus KABEYA";

Console.WriteLine("{0,-25} {1:-25}", nom, nom1);

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…

 Le composant facultatif formatString est une chaîne de format appropriée


pour le type d’objet mis en forme
Voici quelques spécificateurs de format :

III.8.2 Format standard

Pour le format standard, la forme générale est :


[Spécificateur de format] [précision]

o Le spécificateur de format est un caractère alphabétique unique qui


spécifie le type de format de nombre, les valeurs possibles sont :
"C" ou "c" : devise, renvoie une valeur monétaire,
"D" ou "d" : décimal : nombres entiers
"E" ou "e" : exponentiel ou notation scientifique
"F" ou "f" : virgule fixe
"N" ou "n" : nombres entiers ou décimaux
"P" ou "p" : pourcentage
"X" ou "x" : valeur hexadécimale

o Le spécificateur de précision est un entier facultatif qui affecte le nombre


de chiffres dans la chaîne résultante
Le spécificateur de précision indique :

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.WriteLine("La valeur {0} vaut en hexadécimale {0:X}", n);

Console.ReadLine();

Résultat

23 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
II.8.3. Format personnalisé

Nous avons aussi la possibilité de créer nos formats numériques personnalisés.


Voici quelques spécificateurs de formats personnalisés

"0" : Remplace le zéro par le chiffre correspondant, le cas échéant ; sinon, le


zéro s'affiche dans la chaîne de résultat.
Exemple :

int n=245;

Console.WriteLine("La valeur est {0:000000}", n);

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

"#" : Remplace le symbole « # » par le chiffre correspondant, le cas échéant ;


sinon, aucun chiffre ne s'affiche dans la chaîne de résultat.
Exemple

float n=2554.4534f;
Console.WriteLine("La valeur est {0:###.##}", n);
Console.WriteLine("La valeur est {0:###}", n);

Console.ReadLine();

Exemple :

"%" : Multiplie un nombre par 100 et insère un symbole de pourcentage


localisé dans la chaîne de résultat.
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.

II.9 LES OPERATEURS


C# fournit un certain nombre d’opérateurs :

II.9.1 Opérateurs arithmétiques

1. 𝐼𝑛𝑐𝑟é𝑚𝑒𝑛𝑡𝑎𝑡𝑖𝑜𝑛 ∶ + + ajoute 1 à une valeur (opérande)

Exemple :

int n = 45;
n++;
Console.WriteLine(" La valeur est " + n);

Console.ReadLine();

Résultat :

2. 𝐷é𝑐𝑟é𝑚𝑒𝑛𝑡𝑎𝑡𝑖𝑜𝑛 ∶ − − : diminue une valeur (opérande) de 1


3. 𝑀𝑢𝑙𝑡𝑖𝑝𝑙𝑖𝑐𝑎𝑡𝑖𝑜𝑛 ∶ ∗
4. 𝐷𝑖𝑣𝑖𝑠𝑖𝑜𝑛 ∶ /
5. 𝑀𝑜𝑑𝑢𝑙𝑜 (𝑟𝑒𝑠𝑡𝑒 𝑑𝑒 𝑙𝑎 𝑑𝑖𝑣𝑖𝑠𝑖𝑜𝑛 𝑒𝑛𝑡𝑖è𝑟𝑒) ∶ %
6. 𝐴𝑑𝑑𝑖𝑡𝑖𝑜𝑛 ∶ +
7. 𝑆𝑜𝑢𝑠𝑡𝑟𝑎𝑐𝑡𝑖𝑜𝑛 ∶ −

Notez qu’il est possible d’effectuer l’assignation composée, c’est-à-dire :


Soit un opérateur binaire op :
𝑥 = 𝑥 𝑜𝑝 𝑦 ⟺ 𝑥 𝑜𝑝 = 𝑦
26 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
Quand le résultat d’une opération arithmétique n’est pas compris dans la plage
de valeurs finies possibles du type numérique impliqué, le comportement d’un
opérateur arithmétique varie selon le type de ses opérandes.
II.9.2 Opérateurs logiques

1. 𝑁é𝑔𝑎𝑡𝑖𝑜𝑛 𝑙𝑜𝑔𝑖𝑞𝑢𝑒 ∶ !
2. 𝐸𝑡 𝑙𝑜𝑔𝑖𝑞𝑢𝑒 ∶ 𝐴𝑁𝐷 𝑜𝑢 & 𝑜𝑢 &&
3. 𝑂𝑢 𝑒𝑥𝑐𝑙𝑢𝑠𝑖𝑓 ∶ ^
4. 𝑂𝑢 𝑖𝑛𝑐𝑙𝑢𝑠𝑖𝑓 ∶ 𝑂𝑟 𝑜𝑢 | 𝑜𝑢 ||

II.9.3 Opérateurs de bits et de décalage

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 à

6. >= Supérieur ou égal

II.10 LECTURE DE DONNEES SAISIES AU CLAVIER


Pour lire une ligne de caractères suivant le flux d'entrée standard, on utilise :
Console.ReadLine ( )

En pratique, Console.ReadLine( ) autorise à l’utilisateur de saisir une valeur à


partir du clavier (si c’est le flux d’entrée standard).

Si l’appareil d’entrée standard est le clavier, Console.ReadLine( ) se bloque


jusqu’à ce que l’utilisateur appuie sur la touche entrée .
On l’utilise comme suit :
Variable = Console.ReadLine ( )

On récupère ce que l’utilisateur a saisit et on le stocke dans la variable. Notez


cependant que Console.ReadLine ( ) renvoie une chaine de caractères, donc si

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();

Console.WriteLine("Saisir votre age");


age = Convert.ToInt16(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;

Remarquez que j’ai initialisé toutes mes variables…

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());

L’utilisateur a fait sa part (fournir les deux nombres), maintenant, c’est au


programme de calculer la somme et afficher le résultat. Comme nous l’avons
vu, l’operateur + est reconnu par C#, le code complet de notre exemple est :

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.WriteLine("Saisir le premier nombre");


nombre1 = Convert.ToInt32 (Console.ReadLine());
Console.WriteLine("Saisir le deuxième nombre nombre");
nombre2 = Convert.ToInt32(Console.ReadLine());
somme = nombre1 + nombre2;
Console.WriteLine("La somme vaut " + somme);

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

Améliorons notre programme pour qu’il effectue les quatre opérations :


addition, soustraction, division et multiplication. Pour cela, changeons le type de
nos variables en float. Le programme devient :

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.WriteLine("Saisir le premier nombre");


nombre1 = Convert.ToInt32 (Console.ReadLine());
Console.WriteLine("Saisir le deuxième nombre nombre");
nombre2 = Convert.ToInt32(Console.ReadLine());
somme = nombre1 + nombre2;
difference = nombre1 - nombre2;
quotient = nombre1 / nombre2;
produit= nombre1 * nombre2;

Console.WriteLine("La somme vaut " + somme);


Console.WriteLine("La différence vaut " + difference);
Console.WriteLine("Le quotient vaut " + quotient);
Console.WriteLine("Le produit vaut " + produit);

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.WriteLine("Saisir le montant en dollars ($)");


montantUSD = Convert.ToInt32 (Console.ReadLine());
Console.WriteLine("Saisir le taux");
taux = Convert.ToInt32(Console.ReadLine());

montantFC = montantUSD * taux;

Console.WriteLine("Le montant correspondant en FC vaut " + montantFC );

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

Nous savons qu’une heure vaut 3600 secondes, A notre niveau de


connaissance, nous savons que si on affecte le quotient d’une division à une
variable entière, elle (la variable) recevra juste la partie entière du quotient
comme l’illustre le code suivant :

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 :

C’affiche 1 et pourtant la vraie réponse est 1,6666666….

On peut se servir de ça pour résoudre notre problème : On divise la valeur saisie


par l’utilisateur par 3600 et on stocke le quotient dans une variable de type
entier pour récupérer le nombre d’heures. Pour récupérer le reste de secondes, il
suffit de trouver le reste de la division entière de la valeur saisie par l’utilisateur
par 3600 (avec l’opérateur modulo). Pour trouver le nombre minutes, il suffit de
diviser le nombre de secondes restant par 60 car une minute vaut 60 secondes.
Après l’analyse, on peut écrire le programme suivant :

static void Main(string[] args)


{
int secondes = 0,minutes=0,heures=0;
Console.WriteLine("Saisir le nombre de secondes");
secondes = Convert.ToInt32(Console.ReadLine());
heures = secondes / 3600;
secondes = secondes % 3600;
minutes = secondes / 60;
secondes = secondes % 60;
Console.WriteLine("{0} heures, {1} minutes {2} secondes", heures, minutes, secondes);

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 :

 1. Une fonction public static int sommeParties(int n, int p) qui découpe n


en deux nombres dont le deuxième comporte p chiffres, et qui retourne
leur somme. Par exemple, sommeParties(12540,2)=125+40=165
 2. Une fonction public static bool estKaprekar(int n)
(Interro 2019)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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);

somme = Classe.u + Classe.v;

38 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
return somme;
}

//La fonction booléenne


public static bool estKaprekar(int n)
{
bool test;
if (Classe.s==n)
{
test = true;
}
else
{
test = false;
}
return test;
}

}
}

Illustrations de l’exécution

39 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
EXERCICE 2
Soient :

- Une classe exécutable Article composée des attributs suivants :


 Code_article
 Désignation_article
 Prix_article
 Catégorie_article
- Une collection ARTICLES permettant le stockage des différents articles
Questions :
𝑎) Ecrire la classe Article (les attributs ne peuvent être visibles que dans les
classes filles de la classe article)
𝑏) Ecrire un constructeur d’initialisation
𝑐) Ecrire la méthode toString ( ) qui renvoie toutes les propriétés séparées par
un point-virgule
𝑑) Ecrire la classe ArticleSpécial et redéfinir la méthide toString()

𝑒) 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;
}

𝑏) //Constructeur sans paramètres


public Article()
{
this.Code_article = 0;
this.Designation_article = "Article non défini";
this.Prix_article = 0;
this.Categorie_article = "Catégorie non définie";
}

//Constructeur avec des paramètres


public Article(int code, string designation,int prix, string categorie)
{
this.Code_article = code;
this.Designation_article = designation;
this.Prix_article = prix;
this.Categorie_article =categorie;
}

𝑐) public virtual string toString()


{
return "Code article : " + this.Categorie_article + "; Désignation article: "
+ this.Designation_article + "; Prix article : " + this.Prix_article + "; Catégorie
article: " + this.Categorie_article;
} Suivant ce qui a été demandé en a), b) et c) le code complet est :

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;

//Constructeur sans paramètres


public 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";
}

//Constructeur avec des paramètres


public Article(int code, string designation,int prix, string categorie)
{
this.Code_article = code;
this.Designation_article = designation;
this.Prix_article = prix;
this.Categorie_article =categorie;
}

public virtual string toString()


{
return "Code article : " + this.Categorie_article + "; Désignation article: "
+ this.Designation_article + "; Prix article : " + this.Prix_article + "; Catégorie
article: " + this.Categorie_article;
} }

𝑑) Pour la redéfinition de la méthode toString, j’ai juste préféré que la méthode


renvoie la désignation de l’article ainsi que la description de l’article (attribut
que j’ai ajouté à la classe ArticleSpecial)

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;

//Constructeur sans paramètres


public ArticleSpecial() : base()
{
this.Description_article = "Je suis un article spécial";
}

//Constructeur avec des paramètres


public ArticleSpecial (int code, string designation,int prix, string categorie,
string description) : base( code, designation, prix, categorie)
{
this.Code_article = code;
this.Designation_article = designation;
42 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
this.Prix_article = prix;
this.Categorie_article =categorie;
this.Description_article = description;
}

//Redéfinition de la méthode toString


public override string toString()
{
return "Désignation Article: "+this.Designation_article +"; Description:
"+this.Description_article;
}
}
}

𝑒) var requete = from Article in COLLECTIONS


where Article.Prix_article >= 1000
select new
{
Article.Code_article,
Article.Designation_article,
Article.Prix_article,
Article.Categorie_article
};
Console.WriteLine("Voici les propriétés des articles qui coutent au moins
1000FC");

foreach (var art in requete)


{
Console.WriteLine(" Code: {0}, Désignation: {1}, Prix: {2}, Catégorie:
{3}", art.Code_article,art.Designation_article, art.Prix_article,art.Categorie_article);

𝑓) var requete = from art in COLLECTIONS


group art by art.Categorie_article;

Console.WriteLine("Voici les désignations des articles groupés par


catégorie");

foreach (var element in requete)


{
Console.WriteLine("La catégorie: {0} a {1} produits(s) qui (est) sont:",
element.Key, element.Count());

foreach (Article art in element)


{
Console.WriteLine("{0} ", art.Designation_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();
}

private void checkBox1_1961_CheckedChanged(object sender, EventArgs e)

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;
}

private void checkBox1_1930_CheckedChanged(object sender, EventArgs e)


{
if (checkBox1_1930.Checked == true)
{
checkBox1_1961.Enabled = false;
checkBox1_1960.Enabled = false;
checkBox1_1990.Enabled = false;
}
}

private void checkBox1_1960_CheckedChanged(object sender, EventArgs e)


{
if (checkBox1_1960.Checked == true)
{
checkBox1_1930.Enabled = false;
checkBox1_1961.Enabled = false;
checkBox1_1990.Enabled = false;
}
}

private void checkBox1_1990_CheckedChanged(object sender, EventArgs e)


{
if (checkBox1_1990.Checked == true)
{
checkBox1_1930.Enabled = false;
checkBox1_1960.Enabled = false;
checkBox1_1961.Enabled = false;
}
}

private void checkBox2_2_CheckedChanged(object sender, EventArgs e)


{
if (checkBox2_2.Checked==true)
{
checkBox2_1.Enabled = false;
checkBox2_3.Enabled = false;
checkBox2_4.Enabled = false;
}
}

private void checkBox2_3_CheckedChanged(object sender, EventArgs e)


{
if (checkBox2_3.Checked == true)
{
checkBox2_1.Enabled = false;
checkBox2_2.Enabled = false;
checkBox2_4.Enabled = false;

45 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
}
}

private void checkBox2_4_CheckedChanged(object sender, EventArgs e)


{
if (checkBox2_4.Checked == true)
{
checkBox2_1.Enabled = false;
checkBox2_3.Enabled = false;
checkBox2_2.Enabled = false;
}
}

private void checkBox2_1_CheckedChanged(object sender, EventArgs e)


{
if (checkBox2_1.Checked == true)
{
checkBox2_2.Enabled = false;
checkBox2_3.Enabled = false;
checkBox2_4.Enabled = false;
}
}

private void checkBox3_5_CheckedChanged(object sender, EventArgs e)


{
if(checkBox3_5.Checked==true)
{
checkBox3_10.Enabled = false;
checkBox3_2.Enabled = false;
checkBox3_4.Enabled = false;
}
}

private void checkBox3_2_CheckedChanged(object sender, EventArgs e)


{
if (checkBox3_2.Checked == true)
{
checkBox3_10.Enabled = false;
checkBox3_5.Enabled = false;
checkBox3_4.Enabled = false;
}
}

private void checkBox3_4_CheckedChanged(object sender, EventArgs e)


{
if (checkBox3_4.Checked == true)
{
checkBox3_10.Enabled = false;
checkBox3_2.Enabled = false;
checkBox3_5.Enabled = false;
}
}

private void checkBox3_10_CheckedChanged(object sender, EventArgs e)


{
if (checkBox3_10.Checked == true)

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;
}
}

private void Form1_Load(object sender, EventArgs e)


{
textBoxResultat.ReadOnly = true;
}

private void buttonValider_Click(object sender, EventArgs e)


{
int cote = 0;
if (checkBox1_1960.Checked ==true)
{
cote += 4;
}
if (checkBox2_2.Checked==true)
{
cote += 3;
}
if(checkBox3_5.Checked==true)
{
cote += 3;
}
textBoxResultat.Text = cote.ToString();
}
}
}

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
{

static void Main(string[] args)


{
string mot = "";
Console.WriteLine("Entrez le mot");
mot = Console.ReadLine();
if (mot.Length==7)
{
TrouveMotMiroir(mot);
}
else
{
NombreOccurence(mot);
}
Console.ReadLine();
}

//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)(𝑋 + +) ∗ (𝐴 + (−𝐶))

(10)𝐴 = 𝑋 ∗ (𝐵 < 𝐶) + 𝑌 ∗ ! (𝐵 < 𝐶)

(Interro 2019)
Solution
(1) (5 ∗ 𝑋) + 2 ∗ ((3 ∗ 𝐵) + 4)

(5 ∗ 24) + 2 ∗ ((3 ∗ 10) + 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 :

Classe, Objet, Accesseur


𝑐) Etablir la différence entre la programmation procédurale et la programmation
orientée objet
(Examen)
Solution
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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;
}

//Lecture des glycémies des patients


for(i=1; i<= n;i++)
{
label2: Console.WriteLine("Entrez la glycémie du patient no " + i);
g = Int32.Parse(Console.ReadLine());
52 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
if (g<0)
{
Console.WriteLine("La glycémie incorrecte, recommencez");
goto label2;
}

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;
}

//On convertit le nombre en chaine de caractères pour la manipulation facile


de chaque chiffre
chn = n.ToString();
//On fait la somme des cubes des chiffres qui composent le nombre
for(i=0;i<chn.Length;i++)
{
sommeCube += (int)Math.Pow(Int32.Parse(chn.Substring(i, 1)), 3);
}
if(sommeCube==n)
{
Console.WriteLine(" " + n + " est un nombre d'Armstrong");
}
else
{
Console.WriteLine(" " + n + " n'est pas un nombre d'Armstrong");
}

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;
}

//Recherche et affichage des nombres parfaits


Console.WriteLine("Voici les " + n + " premiers nombres parfaits");
while(t!=n)
{
sommeDiviseurs = 0;
for(i=1;i< p;i++)
{
if(p%i==0)
{
sommeDiviseurs += i;
}

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;
}

label2: Console.WriteLine("Entrez le deuxieme nombre");


b = Int32.Parse(Console.ReadLine());
if (b <= 0)
{
Console.WriteLine("Le nombre doit etre positif, recommencez");
goto label2;
}
// Recherche du PGCD
if(a>=b)
{
m = a;
n = b;
}
else
{
m = b;
n = a;
}
q = m / n;
r = m - n * q;
while (r!=0)
{
m = n;
n = r;
q = m / n;
r = m - n * q;
}
Console.WriteLine("Le PGCD de " + a + " et de " + b + " vaut " + n);
Console.ReadLine();
}
}
}

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;
}
}
}

//Calcul de la somme de chaque ligne


for (i = 0; i < n; i++)
{
sommeLigne[i] = 0;
for (j = 0; j < n; j++)
{
sommeLigne[i] += A[i, j];
}
}
//Calcul de la somme de chaque colonne
for (j = 0; j < n; j++)
{
sommeColonne[j] = 0;
for (i = 0; i < n; i++)
{
sommeColonne[j] += A[i, j];
}
}
//Calcul de la somme de la première diagonale

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;
}

//Détermination de la plus longue série


int max = compteur[0];
Boolean test = false;
int pos2 = 0;
pos = 0;
for(i=1;i<= j;i++)
{
if(compteur[i]>max)
{
max = compteur[i];
pos = i;
test = false;
}
else if(compteur[i]==max)
{
test = true;
pos2 = i;
}
}
//Affichage du résultat
if(test==false)
{
Console.WriteLine("La série est " + valeur[pos] + ", elle commence à
l'indice " + position[pos] + " et sa longueur est " + compteur[pos]);
}
else
{
Console.WriteLine("La plus longue série n'est pas unique, voici deux des
plus longues séries:");
Console.WriteLine("La première série est " + valeur[pos] + ", elle
commence à l'indice " + position[pos] + " et sa longueur est " + compteur[pos]);
Console.WriteLine("La deuxième série est " + valeur[pos2] + ", elle
commence à l'indice " + position[pos2] + " et sa longueur est " + compteur[pos2]);
}

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 :

 On raye 1 (qui, par définition n’est pas un nombre premier,)


 On recherche, à partir du dernier nombre premier considéré (la première
fois, on convient qu’il s’agit de 1), le premier nombre non rayé (on peut
montrer qu’il est premier). Il devient à son tour, le dernier nombre premier
considéré et on raye tous ses multiples,
 On répète le traitement précédent jusqu’à ce que le nombre premier
considéré soit supérieur à la racine carrée de n. On peut démontrer que
tous les nombres non premiers ont été rayés de la liste.

Ecrire un programme exploitant cette méthode pour rechercher tous les


nombres premiers compris entre 1 et une valeur fournie en donnée.

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;
}

for (i = 2; i <= n; i++)


{
if (tab[i - 2] == true)
{
if (i > Math.Sqrt(n))
{
break;
}
j = i + 1;
do
{
if (j % i == 0)
{
tab[j - 2] = false;

}
j++;
} while (j <= n);
}
}

Console.WriteLine("Voici les nombres premiers entre 1 et "+ n);


for (i = 0; i < n - 1; i++)
{
if (tab[i] == true)
{
Console.WriteLine(i + 2);
}
}

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

//on vérifie si le verbe se terminer par ger pour ajuster l'affichage


Boolean test = false;
if (verbe.Substring(verbe.Length - 3, 3).ToUpper().CompareTo("GER") == 0)
{
test = true;
}

radical = verbe.Substring(0, verbe.Length - 2);


String[] pronom = { "Je", "Tu", "Il(Elle)", "Nous", "Vous", "Ils(Elles)" };
String[] terminaison = { "e", "es", "e", "ons", "ez", "ent" };
int i = 0;
if (test == true)
{
terminaison[3] = "eons";
}
Console.WriteLine("Le verbe " + verbe + " au présent de l'indicatif");
for (i = 0; i < 6; i++)
{
Console.WriteLine(" " + pronom[i] + " " + radical + "" + terminaison[i]);
}

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

𝑏) Proposer un programme C# qui vérifie si un nombre tapé est un nombre miroir


et ensuite teste si ce nombre est parfait. Nota : une valeur miroir est une valeur
dont sa lecture avant ou inverse est la même. Ex. 22, 202, 111 et un nombre
parfait est que la somme de ses diviseurs sauf lui-même est égale à lui-même.

(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();

//On vérifie si la valeur est miroir


Boolean test = true;
int i = 0;
decimal taille = ch.Length; ;
for (i = 0; i < (int)Math.Floor(taille / 2); i++)
{

if (ch.Substring(i, 1).CompareTo(ch.Substring((int)taille - 1 - i, 1)) !=


0)
{
test = false;
}

//On vérifie si la valeur est un nombre parfait


Boolean test2 = false;
int sommeDiv = 0;

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

Type TarifR ($)


restauration
Spécial 80
Moyen 40

(Interro à domicile 2019-2020)

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();
}

private void Form1_Load(object sender, EventArgs e)


{
textBoxNP.ReadOnly = true;
textBoxTarifChambre.ReadOnly = true;
textBoxTarifRestauration.ReadOnly = true;
comboBoxTypeRestauration.Items.Add("Spécial");
comboBoxTypeRestauration.Items.Add("Moyen");
comboTypeChambre.Items.Add("Classe A");
comboTypeChambre.Items.Add("Classe B");
comboTypeChambre.Items.Add("Classe C");
}

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";
}
}

private void comboBoxTypeRestauration_SelectedIndexChanged(object sender,


EventArgs e)
{
String typeRestauration = "";
//on recupère le type de restauration choisi
typeRestauration = comboBoxTypeRestauration.SelectedItem.ToString();
if (typeRestauration.CompareTo("Spécial") == 0)
{
textBoxTarifRestauration.Text = "80";
}
else if (typeRestauration.CompareTo("Moyen") == 0)
{
textBoxTarifRestauration.Text = "40";
}
}

private void button1_Click(object sender, EventArgs e)


{
int nbreJours = 0, np = 0, tarifC=0,tarifR=0;
//On vérifie si tous les champs ne sont pas vides
if(textBoxDurée.Text=="" || comboTypeChambre.SelectedIndex==-1 ||
comboBoxTypeRestauration.SelectedIndex==-1)
{
MessageBox.Show("Veuillez remplir tous lec champs", "Hebergement
touristes");
}
else
{
//Récupération des informations
tarifC = Int32.Parse(textBoxTarifChambre.Text);
tarifR = Int32.Parse(textBoxTarifRestauration.Text);
nbreJours = Int32.Parse(textBoxDurée.Text);
//On vérifie si la durée est correct
if(nbreJours<0)
{
MessageBox.Show("La durée invalide", "Hebergement touristes");
}

81 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
else
{
np = (tarifR + tarifC) * nbreJours;
textBoxNP.Text = np.ToString();
}

}
}

private void button2_Click(object sender, EventArgs e)


{
comboBoxTypeRestauration.SelectedItem = "";
comboTypeChambre.SelectedItem="";
textBoxTarifChambre.Text = "";
textBoxTarifRestauration.Text = "";
textBoxDurée.Text = "";
textBoxNP.Text = "";
}

private void buttonQuitter_Click(object sender, EventArgs e)


{
DialogResult result1 = MessageBox.Show("Voulez vous réellement quitter?",
"Hebergement touristes", MessageBoxButtons.YesNo);
if(result1==DialogResult.Yes)
{
Environment.Exit(0);
}
}
}
}

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 && ! 𝐷

(13) ((𝐴 && 𝐵) | | ( ! 0 && 𝐶)) && ! 𝐷

(14) (( 𝐴 && 𝐵) | | ! 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))

21 ! = (𝐶 = −120) La nouvelle valeur de C est -120


21 ! = −120
0 𝑜𝑢 𝑓𝑎𝑙𝑠𝑒

La valeur rendue est O (ou false) et la nouvelle valeur de C est -120


(6) 𝐴 ∗= 𝐶 + (𝑋 − 𝐷)
𝐴 ∗= −120 + (12 − 6)
𝐴 ∗= −120 + 6
𝐴 ∗= −114
𝐴 = 21 ∗ (−114)
𝐴 = −2394

La nouvelle valeur de A est -2394


(7) 𝐴 % = 𝐷 + +
𝐴%=6 𝑒𝑡 𝐷 = 6 + 1
𝐴 = −2394 % 6 𝑒𝑡 𝐷 = 7

88 | P a g e
Aimé DIUMI DIKOLO Groupe Les Erudits
www.wissen-corp.com
𝐴= 0 𝑒𝑡 𝐷 = 7

Les nouvelles valeurs de A et D sont respectivement 0 et 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 + 𝑖)𝑡

Ecrire un programme en Csharp qui détermine l’année où le chiffre d’affaire de


cette entreprise dépassera 350000$
(Examen 2019-2020)
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)
{

float po = 10000,i=0.05f,pt=0.0f;
int n = 0;
do
{
pt = po*(1 + i);
n++;
po = pt;
} while (pt <= 350000);

Console.WriteLine("Le chiffre d'affaire dépassera 35000 $ après " +n+"


années");
Console.ReadLine();
}
}
}

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)
{

int a, b, som_div_a, som_div_b,i;


Console.WriteLine("Entrer le premier nombre");
a = int.Parse(Console.ReadLine());
Console.WriteLine("Entrer le deuxième nombre");
b = int.Parse(Console.ReadLine());
som_div_a = 0;
som_div_b = 0;
//Recherche et sommation des diviseurs de a
for(i=1;i< a; i++)
{
if( a % i == 0)
{
som_div_a += i;
}
}
//Recherche et sommation des diviseurs de b
for (i = 1; i < b; i++)
{
if (b % i == 0)
{
som_div_b += i;
}
}

if(som_div_a==b && som_div_b==a)


{
Console.WriteLine("Les deux nombres sont amis");
}

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

Vous aimerez peut-être aussi