Exercice C# Corrigé – POO

Avec des exercices corrigés en C#, vous pratiquerez divers concepts du langage C#. Vous commencerez par des exercices C#de base à des exercices plus avancés. La solution est fournie pour chaque exercice. Vous devez essayer de résoudre chaque problème par vous-même avant de vérifier la solution. Si vous avez des questions concernant chaque problème, nous vous encourageons à les poster sur notre forum.
 
 
Vous pouvez utiliser l’éditeur C# suivant pour résoudre les exercices suivants: (Cliquez sur l’onglet input si vous souhaitez entrer des valeurs, cliquez sur Run pour exécuter votre programme, le résultat sera affichée sur l’onglet output).
 

 

Exercice 1:

Votre tâche consiste à créer un constructeur Cercle qui crée un cercle avec un rayon fourni par un argument. Les cercles construits doivent avoir deux getters GetArea() (PIr ^ 2) et GetPerimeter() (2PI * r) qui donnent à la fois l’aire et le périmètre respectifs.


Exemple:

Circle c = new Circle(6.25);
c.GetArea();             // Doit retourner 122.718463030851.
c.GetPerimeter();        // Doit retourner 39.2699081698724.
En géométrie, l’aire d’un cercle d’un rayon r est πr2. Ici, la lettre grecque π représente une constante, approximativement égale à 3,14159, et le périmètre d’un cercle d’un rayon r est 2πr.
Solution:

using System;

class Cercle {
	public double Rayon;
  
  public Cercle(double rayon){
    Rayon = rayon;
  }
  
  public double GetArea()
  {
    return Rayon * Rayon * Math.PI;
  }
  
  public double GetPerimeter(){
    return 2 * Rayon * Math.PI;
  }
}

public class Program{
  public static void Main(){
    var c = new Cercle(6.25);
    Console.WriteLine(c.GetArea());
    Console.WriteLine(c.GetPerimeter());
  }
}
 

Exercice 2:

– Créez une classe « Person »
– Créez une classe « Student » et une autre classe « Teacher », les deux héritent de la classe « Person ».
– La classe « Student » aura une méthode publique « GoToClasses », qui affichera à l’écran « I’m going to class. ».
– La classe « Teacher » aura une méthode publique « Explain », qui affichera à l’écran « Explanation begins ». En plus, il aura un attribut privé « subject » de type string.
– La classe « Person » doit avoir une méthode « SetAge(int n) » qui indiquera la valeur de leur âge (par exemple, 15 years old).
– La classe « Student » aura une méthode publique « DisplayAge » qui écrira sur l’écran « My age is: XX years old ».
– Vous devez créer une autre classe de test appelée « Test » qui contiendra « Main » et:
– Créez un objet Person et faites-lui dire « Hello »
– Créer un objet Student, définir son âge à 15 ans, faites-lui dire « Hello », « I’m going to class. » et afficher son âge
– Créez un objet Teacher, 40 ans, demandez-lui de dire « Hello » puis commence l’explication.
 


Exemple:

Hello
I’m going to class.
Hello
My age is: 15 years old
Hello
Explanation begins
Solution:

using System;

//La classe Person
class Person
{
    protected int age;

    public void sayHello()
    {
        Console.WriteLine("Hello");
    }

    public void SetAge(int n)
    {
        age = n;
    }
}

//La classe Student
class Student : Person
{
    public void GoToClasses()
    {
        Console.WriteLine("I’m going to class.");
    }
    public void DisplayAge()
    {
        Console.WriteLine("My age is: {0} years old", age);
    }
}

//La classe Teacher
class Teacher : Person
{
    private string subject;

    public void Explain()
    {
        Console.WriteLine("Explanation begins");
    }
}

//Classe de test
class Test
{
    static void Main()
    {
        Person p = new Person();
        p.sayHello();

        Student s = new Student();
        s.GoToClasses();
        s.SetAge(15);
        s.sayHello();
        s.DisplayAge();

        Teacher t = new Teacher();
        t.SetAge(40);
        t.sayHello();
        t.Explain();
    }
}
 

Exercice 3:

Un nombre complexe se compose de deux parties: la partie réelle et la partie imaginaire. Dans un nombre comme a + bi (1-2i, par exemple), la partie réelle serait 1 et la partie imaginaire serait -2.

Créez une classe Complex avec:

– Un constructeur pour définir les valeurs de la partie réelle et de la partie imaginaire.
– Setters et getters pour les deux.
– Une méthode « ToString », qui retournerait « (1, -2) »
– Une méthode « GetMagnitude » pour renvoyer l’ordre de grandeur du nombre complexe (racine carrée de a2 + b2)
– Une méthode « Sum », pour additionner deux nombres complexes (la partie réelle sera la somme des deux parties réelles, et la partie imaginaire sera la somme des deux parties imaginaires)

Exemple:

Le nombre est: (4,8)
Le nombre est: (4,6)
L'ordre de grandeur: 7.21110255092798
Après l'addition: (2,9)
Solution:

using System;

class Complex
{
	public double a, b;

	public Complex(double real, double imag)
	{
		a = real;
		b = imag;
	}

	public double GetReal()
	{
		return a;
	}

	public void SetReal(double a)
	{
		this.a = a;
	}

	public double GetImaginary()
	{
		return b;
	}

	public void SetImaginary(double b)
	{
		this.b = b;
	}

	public new string ToString()
	{
		return "("+a+","+b+")";
	}

	public double GetMagnitude()
	{
		return Math.Sqrt((a * a) + (b * b));
	}

	public void Sum(Complex c)
	{
		a += c.GetReal();
		b += c.GetImaginary();
	}
}

class Test
{
	static void Main()
	{
		Complex c1 = new Complex(4, 8);
		Console.WriteLine("Le nombre est: "+ c1.ToString());

		c1.SetImaginary(6);
		Console.WriteLine("Le nombre est: "+ c1.ToString());

		Console.Write("L'ordre de grandeur: ");
		Console.WriteLine(c1.GetMagnitude());

		Complex c2 = new Complex(-2, 3);
		c1.Sum(c2);
		Console.Write("Après l'addition: ");
		Console.WriteLine(c1.ToString());
	}
}
 

Exercice 4:

Créez une classe « House », avec un attribut « surface », un constructeur qui définit sa valeur et une méthode « Display » pour afficher « Je suis une maison, ma surface est de XXX m2 » (XXX: la valeur de surface). Incluez aussi des getters et des setters pour la surface.

La classe « House » contiendra une porte (Door). Chaque porte aura un attribut « color » (de type String), et une méthode « Display » qui affichera « Je suis une porte, ma couleur est bleu » (ou quelle que soit la couleur). Inclure un getter et un setter. Créez également la méthode « GetDoor » dans la classe « House ».

La classe « Apartment » est une sous-classe de la classe « House », avec une surface prédéfinie de 50m2.

Créez également une classe Person, avec un nom (de type String). Chaque personne aura une maison. La méthode « Display » pour une personne affichera son nom, les données de sa maison et les données de la porte de cette maison.

Écrivez un Main pour créer un Apartment, une personne pour y vivre et pour afficher les données de la personne.
 

des notions UML à savoir :

  • La composition peut être considérer comme une relation “fait partie de”, c’est à dire que si un objet Y fait partie d’un objet X alors Y ne peut pas exister sans X. Ainsi si X disparaît alors Y également.
  • L’agrégation peut être considérer comme une relation de type “a un”, c’est à dire que si un objet X a un objet Y alors Y peut vivre sans X.

 

Solution:

using System;

class House 
{
	protected int surface;
	protected Door door;

	public House(int surface) 
	{
		this.surface = surface;
		door = new Door();
	}
	
	public int Surface 
	{
		get { return surface; }
		set { surface = value; }
	}
	
	public Door Door
	{
		get { return door; }
		set { door = value; }
	}

	public virtual void Display() 
	{
		Console.WriteLine("Je suis une maison, ma surface est de {0} m2.",surface);
	}
}

class Door
{
	protected string color;

	public Door() 
	{
		color = "blue";
	}
	
	public Door(string color) 
	{
		this.color = color;
	}
	
	public string Color 
	{
		get { return color; }
		set { color = value; }
	}
	
	public void Display() 
	{
		Console.WriteLine("Je suis une porte, ma couleur est {0}.", color);
	}
}

class Apartment : House 
{
	public Apartment() : base (50)
	{

	}
	public override void Display()
	{
		Console.WriteLine("Je suis un appartement, ma surface est " + surface + " m2");
	}
}

class Person 
{
	protected string name;
	protected House house;

	public Person() 
	{
		name = "Thomas";
		house = new House(150);
	}

	public Person(string name, House house)
	{
		this.name = name;
		this.house = house;
	}

	public string Name 
	{
		get { return name; }
		set { name = value; }
	}

	public House House
	{
		get { return house; }
		set { house = value; }
	}

	public void Display() 
	{
		Console.WriteLine("Je m'appele {0}.",name);
		house.Display();
		house.Door.Display();
	}
}

class Test
{
	static void Main()
	{
		Apartment MyApartament = new Apartment();
		Person person = new Person();

		person.Name = "Thomas";
		person.House = MyApartament;
		person.Display();
	}
}
qcm-csharp

2 réflexions sur “Exercice C# Corrigé – POO

  • mai 24, 2021 à 11:16 am
    Permalien

    Programme C# pour convertir une chaîne en minuscule. Je ne trouve pas s’il vous plait!

    Répondre
  • janvier 16, 2024 à 11:37 am
    Permalien

    Dommage que les explications soit incomplète, notamment sur l’héritage.
    De même, les principes de la POO ne sont pas respectés dans les exercices puisqu’on crée des méthodes avec paramètre pour faire le travail d’une propriété.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *