Page d'Accueil

Contrôle des Enoncés Conditionnels

 

Emboîtement d'un énoncé conditionnel

Considérez le programme suivant :

using System;

class Program
{
    static void Main()
    {
        int TypeOfHome;

        do
        {
            Console.WriteLine("What Type of House Would you Like to Purchase?");
            Console.WriteLine("1 - Single Family");
            Console.WriteLine("2 - Town House");
            Console.WriteLine("3 - Condominium");
            Console.Write("Your Choice? ");
            TypeOfHome = int.Parse(Console.ReadLine());
        } while ((TypeOfHome < 1) || (TypeOfHome > 3));

        if (TypeOfHome == 1)
            Console.WriteLine("\nType of Home: Single Family");
        else if (TypeOfHome == 2)
            Console.WriteLine("\nType of Home: Town House");
        else if (TypeOfHome == 3)
            Console.WriteLine("\nType of Home: Condominium");
	
        Console.WriteLine();
    }
}

Ceci est utilisé pour demander un des numéros 1, 2, ou 3 à l'utilisateur. Aucun nombre en-dessous de 1 ou au-dessus de 3 n'est accepté. Voici un exemple d'exécution du programme :

What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 8
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 6
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 3

Type of Home: Condominium

Press any key to continue . . .

Si l'utilisateur écrit une valeur inadmissible, on pose encore simplement la question. Il serait professionnelle de faire savoir à l'utilisateur pourquoi la demande est réitérée quoique ce qui apparaît comme un nombre normal a été écrit. Pour résoudre ceci et d'autres types de problèmes, vous pouvez écrire un énoncé conditionnel à l'intérieur des autres. Ceci est désigné sous le nom de l'emboîtement. Pour créer un énoncé conditionnel à l'intérieur des autres, procédez simplement comme nous avons fait jusqu'ici pour les créer. Voici un exemple :

using System;

class Program
{
    static void Main()
    {
        int TypeOfHome;

        do
        {
            Console.WriteLine("What Type of House Would you Like to Purchase?");
            Console.WriteLine("1 - Single Family");
            Console.WriteLine("2 - Town House");
            Console.WriteLine("3 - Condominium");
            Console.Write("Your Choice? ");
            TypeOfHome = int.Parse(Console.ReadLine());

            if ((TypeOfHome < 1) || (TypeOfHome > 3))
                Console.WriteLine("Invalid Choice: Please try againe");
        } while ((TypeOfHome < 1) || (TypeOfHome > 3));

        if (TypeOfHome == 1)
            Console.WriteLine("\nType of Home: Single Family");
        else if (TypeOfHome == 2)
            Console.WriteLine("\nType of Home: Town House");
        else if (TypeOfHome == 3)
            Console.WriteLine("\nType of Home: Condominium");
	
        Console.WriteLine();
    }
}

Voici un autre exemple d'exécution du programme :

What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 0
Invalid Choice: Please try againe
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 6
Invalid Choice: Please try againe
What Type of House Would you Like to Purchase?
1 - Single Family
2 - Town House
3 - Condominium
Your Choice? 2

Type of Home: Town House

Press any key to continue . . .

Étude pratiqueÉtude pratique : Conditions d'emboîtement

  1. Accédez au fichier OrderProcessing.cs et changez le comme suit :
     
    using System;
    
    namespace FlowerShop3
    {
        class OrderProcessing
        {
            public Flower FlowerOrder;
            public int Quantity;
    
            public OrderProcessing()
            {
                FlowerOrder = new Flower();
            }
    
            public decimal GetTotalPrice()
            {
                return Quantity * FlowerOrder.UnitPrice;
            }
    
            public void GetFlowerType()
            {
                int choice = 0;
    
                do
                {
                    Console.WriteLine("Enter the Type of Flower Order");
                    Console.WriteLine("1. Roses");
                    Console.WriteLine("2. Lilies");
                    Console.WriteLine("3. Daisies");
                    Console.WriteLine("4. Carnations");
                    Console.WriteLine("5. Live Plant");
                    Console.WriteLine("6. Mixed");
                    Console.Write("Your Choice: ");
                    choice = int.Parse(Console.ReadLine());
    
    if ((choice < 1) || (choice > 6))
      Console.WriteLine("Invalid Value: Please enter a value between 1 and 6");
                } while ((choice < 1) || (choice > 6));
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Type = FlowerType.Roses;
                        break;
                    case 2:
                        FlowerOrder.Type = FlowerType.Lilies;
                        break;
                    case 3:
                        FlowerOrder.Type = FlowerType.Daisies;
                        break;
                    case 4:
                        FlowerOrder.Type = FlowerType.Carnations;
                        break;
                    case 5:
                        FlowerOrder.Type = FlowerType.LivePlant;
                        break;
                    default:
                        FlowerOrder.Type = FlowerType.Mixed;
                        break;
                }
            }
    
            public void GetFlowerColor()
            {
                int choice = 0;
    
                do
                {
                    Console.WriteLine("Enter the Color");
                    Console.WriteLine("1. Red");
                    Console.WriteLine("2. White");
                    Console.WriteLine("3. Yellow");
                    Console.WriteLine("4. Pink");
                    Console.WriteLine("5. Orange");
                    Console.WriteLine("6. Blue");
                    Console.WriteLine("7. Lavender");
                    Console.WriteLine("8. Mixed");
                    Console.Write("Your Choice: ");
                    choice = int.Parse(Console.ReadLine());
    
    if ((choice < 1) || (choice > 8))
      Console.WriteLine("Invalid Value: Please enter a value between 1 and 8");
                } while ((choice < 1) || (choice > 8));
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Color = FlowerColor.Red;
                        break;
                    case 2:
                        FlowerOrder.Color = FlowerColor.White;
                        break;
                    case 3:
                        FlowerOrder.Color = FlowerColor.Yellow;
                        break;
                    case 4:
                        FlowerOrder.Color = FlowerColor.Pink;
                        break;
                    case 5:
                        FlowerOrder.Color = FlowerColor.Yellow;
                        break;
                    case 6:
                        FlowerOrder.Color = FlowerColor.Blue;
                        break;
                    case 7:
                        FlowerOrder.Color = FlowerColor.Lavender;
                        break;
                    default:
                        FlowerOrder.Color = FlowerColor.Mixed;
                        break;
                }
            }
    
            public void GetFlowerArrangement()
            {
                int choice = 0;
    
                do
                {
                    Console.WriteLine("Enter the Type of Arrangement");
                    Console.WriteLine("1. Bouquet");
                    Console.WriteLine("2. Vase");
                    Console.WriteLine("3. Basket");
                    Console.WriteLine("4. Mixed");
                    Console.Write("Your Choice: ");
                    choice = int.Parse(Console.ReadLine());
    
    if ((choice < 1) || (choice > 4))
      Console.WriteLine("Invalid Value: Please enter a value between 1 and 4");
                } while ((choice < 1) || (choice > 4));
    
                switch (choice)
                {
                    case 1:
                        FlowerOrder.Arrangement = FlowerArrangement.Bouquet;
                        break;
                    case 2:
                        FlowerOrder.Arrangement = FlowerArrangement.Vase;
                        break;
                    case 3:
                        FlowerOrder.Arrangement = FlowerArrangement.Basket;
                        break;
                    default:
                        FlowerOrder.Arrangement = FlowerArrangement.Any;
                        break;
                }
            }
    
            public void ProcessOrder()
            {
                GetFlowerType();
                GetFlowerColor();
                GetFlowerArrangement();
    
                Console.Write("Enter the Unit Price: ");
                FlowerOrder.UnitPrice = decimal.Parse(Console.ReadLine());
    
                Console.Write("Enter Quantity:       ");
                Quantity = int.Parse(Console.ReadLine());
            }
    
            public void ShowOrder()
            {
                Console.WriteLine("=======================");
                Console.WriteLine("==-=-=Flower Shop=-=-==");
                Console.WriteLine("-----------------------");
                Console.WriteLine("Flower Type:  {0}", FlowerOrder.Type);
                Console.WriteLine("Flower Color: {0}", FlowerOrder.Color);
                Console.WriteLine("Arrangement:  {0}", FlowerOrder.Arrangement);
                Console.WriteLine("Price:        {0:C}", FlowerOrder.UnitPrice);
                Console.WriteLine("Quantity:     {0}", Quantity);
                Console.WriteLine("Total Price:  {0:C}", GetTotalPrice());
                Console.WriteLine("=======================");
            }
        }
    }
  2. Exécutez l'application et l'examiner. Voici un exemple :
     
    Enter the Type of Flower Order
    1. Roses
    2. Lilies
    3. Daisies
    4. Carnations
    5. Live Plant
    6. Mixed
    Your Choice: 8
    Invalid Value: Please enter a value between 1 and 6
    Enter the Type of Flower Order
    1. Roses
    2. Lilies
    3. Daisies
    4. Carnations
    5. Live Plant
    6. Mixed
    Your Choice: 0
    Invalid Value: Please enter a value between 1 and 6
    Enter the Type of Flower Order
    1. Roses
    2. Lilies
    3. Daisies
    4. Carnations
    5. Live Plant
    6. Mixed
    Your Choice: 4
    Enter the Color
    1. Red
    2. White
    3. Yellow
    4. Pink
    5. Orange
    6. Blue
    7. Lavender
    8. Mixed
    Your Choice: 9
    Invalid Value: Please enter a value between 1 and 8
    Enter the Color
    1. Red
    2. White
    3. Yellow
    4. Pink
    5. Orange
    6. Blue
    7. Lavender
    8. Mixed
    Your Choice: 3
    Enter the Type of Arrangement
    1. Bouquet
    2. Vase
    3. Basket
    4. Mixed
    Your Choice: 9
    Invalid Value: Please enter a value between 1 and 4
    Enter the Type of Arrangement
    1. Bouquet
    2. Vase
    3. Basket
    4. Mixed
    Your Choice: 5
    Invalid Value: Please enter a value between 1 and 4
    Enter the Type of Arrangement
    1. Bouquet
    2. Vase
    3. Basket
    4. Mixed
    Your Choice: 3
    Enter the Unit Price: 54.95
    Enter Quantity:       1
    
    =======================
    ==-=-=Flower Shop=-=-==
    -----------------------
    Flower Type:  Carnations
    Flower Color: Yellow
    Arrangement:  Basket
    Price:        $54.95
    Quantity:     1
    Total Price:  $54.95
    =======================
    
    Press any key to continue . . .
  3. Fermez la fenêtre DOS

Rupture du déroulement d'un énoncé conditionnel

 

L'énoncé de rupture break est utilisé pour arrêter une boucle pour n'importe quelle raison ou condition si nécessaire. La formule de l'énoncé break est :

break;

Bien que fait de seulement un mot, l'énoncé break est un énoncé complet; donc, il peut (et deit toujours) rester sur sa propre ligne (ceci rend le programme facile à lire).

L'énoncé break s'applique à l'énoncé conditionnel qui le précéde immédiatement; à condition que l'énoncé précédent soit applicable. L'énoncé break peut être utilisé dans une condition while, dans do… while ou dans des boucles for pour arrêter une action continue. Voici un exemple qui est utilisé pour compter les niveaux d'une maison de 1 à 12 mais on l'invite à s'arrêter à 3 :

using System;

class Program
{
    static void Main()
    {
        for (int Stories = 1; Stories <= 12; Stories++)
        {
            Console.WriteLine("Story {0}", Stories);
            if (Stories == 3)
                break;
        }
	
        Console.WriteLine();
    }
}

Ceci produirait : 

Story 1
Story 2
Story 3

Press any key to continue . . .

Continuer un rapport conditionnel

L'énoncé continue utilise la formule suivante :

continue;

En traitant une boucle, si l'énoncé trouve une valeur fausse, vous pouvez utiliser l'énoncé continue à l'intérieur des énoncés conditionnels while, do… while ou for pour ignorer l'énoncé suivant ou sauter d'une valeur booléenne fausse à la valeur valide suivante, à la différence du break qui sortirait de la boucle. Comme l'énoncé break, le mot-clé continue s'applique à l'énoncé conditionnel le plus précédent et devrait rester sur sa propre ligne. Voici un exemple d'un programme censé compter les niveaux d'une maison de 1 à 6 :

using System;

class Program
{
    static void Main()
    {
        for (int Stories = 1; Stories <= 6; Stories++)
        {
            if (Stories == 3)
                continue;
            Console.WriteLine("Story {0}", Stories);
        }
	
        Console.WriteLine();
    }
}

Ceci produirait :

Story 1
Story 2
Story 4
Story 5
Story 6

Press any key to continue . . .

Notez que, quand le compilateur arrive à 3, il l'ignore.

Aller à une étiquette indiquée

L'énoncé goto permet à une exécution du programme de sauter à une autre section de la fonction dans laquelle elle est utilisée. Afin d'utiliser l'énoncé goto, insérez un nom sur une section particulière de votre fonction ainsi vous pouvez vous référer à ce nom. Le nom, également appelé étiquette, est constitué d'un mot et suit les règles que nous avons étudiées à propos des noms dans C++ (le nom peut être n'importe quoi), puis suivi de deux points. Voici un exemple où le programme est censé compter les niveaux d'un bâtiment de 14 étages :

using System;

class Program
{
    static void Main()
    {
        for (int Stories = 1; Stories <= 14; Stories++)
        {
            if (Stories == 4)
                goto CountUpTo3;
            Console.WriteLine("Story {0}", Stories);
        }

    CountUpTo3:
        Console.WriteLine("Our homes have only up to 3 levels\n");
    }
}

Ceci produirait :

Story 1
Story 2
Story 3
Our homes have only up to 3 levels

Press any key to continue . . .

Retour  conditionnel

Quelques fonctions sont censées renvoyer une valeur dont le traitement est conditionnel. Le fait qu'une fonction indique le type de valeur qu'il retournerait peut ne pas être clair alors que la fonction est fermée mais une fonction définie autre que le vide void doit toujours renvoyer une valeur. Vous pouvez écrire un énoncé conditionnel, tel que if, à l'intérieur d'une fonction et renvoyez une valeur de cette condition. Voici un exemple :

using namespace System;

enum HouseType { Unknown, SingleFamily, TownHouse, Condominium };
HouseType GetHouseType();

int main()
{
	HouseType TypeOfHouse;

	TypeOfHouse = GetHouseType();
	
	switch(TypeOfHouse)
	{
	case SingleFamily:
		Console.WriteLine("\nType of Home: Single Family");
		break;
	case TownHouse:
		Console.WriteLine("\nType of Home: Town House");
		break;
	case Condominium:
		Console.WriteLine("\nType of Home: Condominium");
		break;
	case Unknown:
		Console.WriteLine("\nType of Home. Unknown");
		break;
	}

	Console.WriteLine();

	return 0;
}

HouseType GetHouseType()
{
	int type;

	Console.WriteLine("What Type of House Would you Like to Purchase?");
	Console.WriteLine("1 - Single Family");
	Console.WriteLine("2 - Town House");
	Console.WriteLine("3 - Condominium");
	Console.Write("Your Choice? ");
	type = int.Parse(Console.ReadLine());

	if( type == 1 )
		return SingleFamily;
	else if( type == 2 )
		return TownHouse;
	else if( type == 3 )
		return Condominium;
}

Cette méthode GetHouseType() indique quand une des trois valeurs est retournée. En réalité, cette méthode pourrait obtenir une valeur autre que les trois qui sont considérés. Si l'utilisateur écrit une telle valeur, la version en cours de la méthode ne saurait pas quoi faire. Pour cette raison, le programme ne compilera pas. Dans Microsoft Visual C#, vous recevriez l'erreur suivante :

'Program.GetHouseType()': not all code paths return a value

Pour résoudre ce problème, vous devez fournir un énoncé qui inclurait n'importe quelle valeur autre que ceux considérés. Vous pouvez faire ceci en écrivant un return final qui a sa propre valeur. Voici un exemple :

using System;

enum HouseType { Unknown, SingleFamily, TownHouse, Condominium };

class Program
{
    static HouseType GetHouseType()
    {
        int type;
        
        Console.WriteLine("What Type of House Would you Like to Purchase?");
        Console.WriteLine("1 - Single Family");
        Console.WriteLine("2 - Town House");
        Console.WriteLine("3 - Condominium");
        Console.Write("Your Choice? ");
        type = int.Parse(Console.ReadLine());
        
        if( type == 1 )
            return HouseType.SingleFamily;
        else if( type == 2 )
            return HouseType.TownHouse;
        else if( type == 3 )
            return HouseType.Condominium;

        return HouseType.Unknown;
    }
    
    static void Main()
    {
        . . .
    }
}

 


Précédent Copyright © 2007, Yevol