logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
utilisateurs:hypathie:tutos:brouillon-algo-c [03/01/2015 10:10]
Hypathie [Implémentation]
utilisateurs:hypathie:tutos:brouillon-algo-c [03/01/2015 18:49] (Version actuelle)
Hypathie [Réflexions sur une autre méthode d'approche]
Ligne 166: Ligne 166:
 </​note>​ </​note>​
 ====Programme de la fonction SaisirPièce ==== ====Programme de la fonction SaisirPièce ====
 +===Plusieurs erreurs à analyser=== 
 +//​L'​analyse et une correction possible en note plus bas.//
 <code c> <code c>
 internal static EnregPièce SaisirPièce(ref EnregPièce unepiece) internal static EnregPièce SaisirPièce(ref EnregPièce unepiece)
Ligne 216: Ligne 217:
 </​note>​ </​note>​
  
 +
 +===Explication sur l'​origine de l'​erreur===
 <note important>​ <note important>​
-Il y a une erreur ​dans le code ci-dessus !\\+Il y a plusieurs erreurs ​dans le code ci-dessus !\\
  
 J'ai mis :  J'ai mis : 
Ligne 224: Ligne 227:
   * etc..   * etc..
  
-Il faut corriger en((merci Thibault)) :+Il faut corriger en((merci Thibault, c'est la "​partie"​ de la correction que "​j'​ai gardée"​)) :
   * ''​unepiece.Id= Lire.Chaine("​Entrez l'​identifiant"​);''​   * ''​unepiece.Id= Lire.Chaine("​Entrez l'​identifiant"​);''​
   * ''​unepiece.couleurPièce = SaisirCouleur("​Choisissez la couleur pièce (Jaune, Vert, Bleu, Rouge, Orange, Mauve)"​);''​   * ''​unepiece.couleurPièce = SaisirCouleur("​Choisissez la couleur pièce (Jaune, Vert, Bleu, Rouge, Orange, Mauve)"​);''​
  
-=> Et pour affecter chaque variable effective unepiece.Id ; unepiece.couleurPièce etc, il est inutile d'​initialiser une variable effective de type ''​EnregPièce ''​((''​EnregPièce pièceSaisie = new EnregPièce();''​)).+=> Et pour affecter chaque variable effective unepiece.Id ; unepiece.couleurPièce etc, il est inutile d'​initialiser une variable effective de type ''​EnregPièce ''​((''​EnregPièce pièceSaisie = new EnregPièce();'' ​: La aussi merci, je suis tout à fait d'​accord)).
  
-**__J'ai voulu écrire ​:__**+**__J'avais donc faux de charger un emplacement mémoire en cherchant à faire ((car j'en avais déjà un)) :__**
  
 <code c> <code c>
Ligne 244: Ligne 247:
 </​code>​ </​code>​
  
-**__tandis que ceci fonctionne ​:__**+**__mais il me semble qu'il est nécessaire de conserver au moins emplacement mémoire ​:((piece_tableau = new EnregPièce[MAX_TAB_PIECE];​))__**
  
 <code c> <code c>
Ligne 489: Ligne 492:
         indice++;         indice++;
     }     }
-<​code>​+</code>
 ===== Utilisation ===== ===== Utilisation =====
 +Voici donc donc le résultat qui selon mes tests fonctionne.\\ ​
 +Nous voilà avec deux classes que je laisse en téléchargement:​
 +
 +===1) Le programme principal===
 +<code text program.cs>​
 +using System;
 +using System.Collections.Generic;​
 +using System.Linq;​
 +using System.Text;​
 +using System.Threading.Tasks;​
 +
 +namespace PiècesUsine
 +{
 +    public struct EnregPièce //​ Déclaration d'une structure de stockage d'un descriptif de pièce
 +    {
 +        public string Id;​  ​                    // Identifiant de la pièce
 +        public int numeroSerie; ​                         // numéro de série des pièces
 +        public couleur couleurPièce; ​                    // Voir liste énumérée '​couleur'​
 +        public date DateFab; ​                            // Voir structure '​date'​ utilisant deux listes énumérée,​ '​jourSemaine'​ et '​moisAnnée'​
 +        public mesure dimension; ​                        // Voir structure '​mesure'​ utilisant la liste énumérée '​forme'​
 +    }
 +
 +    public enum couleur { Jaune, Vert, Bleu, Rouge, Orange, Mauve };
 +
 +    public struct date
 +    {
 +        public jourSemaine NomJour; ​    // Voir Liste énumérée '​jourSemaine'​
 +        public moisAnnée Mois;       // Voir Liste énumérée '​moisAnnée'​
 +        public int jourChiffre; ​     // le numéro du jour
 +        public int Annee; ​           // numéro de l'​année
 +    }
 +    public enum jourSemaine { Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche };
 +    public enum moisAnnée { Janvier, Février, Mars, Avril, Mai, Juin, Juillet, Août, Septembre, Octobre, Novembre, Décembre };
 +
 +    public struct mesure ​  // tout ce qui constitue les mesures des pièces
 +    {
 +        public forme forme; ​                            // forme des pièces
 +        public double rayon; ​                           // rayon pour les pièces cylindriques et sphériques
 +        public double cote;                             // côté pour les pièces cubiques
 +        public double hauteur; ​                         // hauteur pour les pièces cylindriques
 +    }
 +    public enum forme { Cubique, Cylindrique,​ Sphérique };
 +
 +    class Program
 +    {
 +        public const int taille = 1000;
 +        static void Main(string[] args)
 +
 +        {
 +            int indice;
 +            EnregPièce[] Tableaupiece;​
 +
 +            EnginDePieces.RemplirTableauPiece(out Tableaupiece,​ out indice);
 +
 +            EnginDePieces.AfficherTableauPiece(Tableaupiece,​ indice);
 +
 +
 +            Console.ReadLine();​
 +            Console.WriteLine();​
 +        }
 +
 +
 +
 +
 +    } // Class Program
 +}
 +</​code>​
 +
 +===2)un engin de pièce avec les fonctions utilisées par le programme principal ===
 +
 +<code text enginDePièces>​
 +using System;
 +using System.Collections.Generic;​
 +using System.Linq;​
 +using System.Text;​
 +using System.Threading.Tasks;​
 +
 +namespace PiècesUsine
 +{
 +
 +    public class EnginDePieces
 +    {
 +        public const char LF = '​\u000A';//​ caractère de retour à la ligne
 +        public const int MAX_TAB_PIECE = 100; // Tableau contenant les decriptifs de pièces
 +
 +        public static bool veutContinuer()
 +        {
 +            bool résultat;
 +            bool réponseOK;
 +            char réponse;
 +
 +            résultat = false; ​  // inutile, mais demandé par C#
 +            réponseOK = false; ​ // passera à VRAI dès que l'​opérateur saisi est accepté
 +            // et permettra la sortie de la boucle.
 +            do
 +            {
 +                réponse = Char.ToUpper(Lire.Caractere(LF + "​Voulez-vous continuer (O ou N) ?"));
 +
 +                if (réponse == '​O'​)
 +                {
 +                    résultat = true;
 +                    réponseOK = true;
 +                }
 +                else if (réponse == '​N'​)
 +                {
 +                    résultat = false;
 +                    réponseOK = true;
 +                }
 +
 +            } while (!réponseOK); ​ //  arrêt quand la réponse est OK (O, o, N ou n).
 +            return résultat;
 +        }  // fin veutContinuer
 +
 +        public static void RemplirTableauPiece(out EnregPièce[] piece_tableau,​ out int indi)
 +        {
 +            piece_tableau = new EnregPièce[MAX_TAB_PIECE];​
 +
 +            indi = 0;
 +
 +            do
 +            {
 +               ​piece_tableau[indi] = SaisirPièce(ref piece_tableau[indi]);​ // le tableau est déjà passé en référence
 +                indi++;
 +
 +            } while (veutContinuer());​
 +        }
 +
 +        internal static EnregPièce SaisirPièce(ref EnregPièce unepiece)
 +        {
 +            // Déclarations
 +            //​EnregPièce pièceSaisie = new EnregPièce();​ // initialisation de la structure pièceSaisie
 +
 +            // Titre 
 +            Console.Write("​Saisie d'un descriptif de pièce."​ + LF);
 +            Console.Write("​--------------------------------"​ + LF);
 +
 +            // Identifiant
 +            unepiece.Id = Lire.Chaine("​Entrez l'​identifiant"​); ​               // on fait confiance à l'​utilisateur pour le format
 +
 +            // Couleur
 +            unepiece.couleurPièce = SaisirCouleur("​Choisissez la couleur pièce (Jaune, Vert, Bleu, Rouge, Orange, Mauve)"​);​
 +
 +            // Numéro de série
 +            unepiece.numeroSerie = Lire.Entier("​Entrez le n° de série de la pièce (Voir au dos de la pièce)"​); ​      // on fait confiance à l'​utilisateur pour le format ​              
 +
 +            // Date
 +            unepiece.DateFab = SaisirDate();​
 +
 +            // Forme et dimensions
 +            unepiece.dimension.forme = SaisieForme("​Donnez la forme de la pièce (Cubique, Cylindrique,​ Sphérique)"​);​
 +            switch (unepiece.dimension.forme)
 +            {
 +                case forme.Cubique:​ unepiece.dimension.cote = Lire.Double("​Votre pièce à une forme Cubique, quelle est la longueur d'un côté?"​);​
 +                    break;
 +
 +                case forme.Sphérique:​ unepiece.dimension.rayon = Lire.Double("​Votre pièce à une forme Sphérique, quel est son rayon?"​);​
 +                    break;
 +
 +                case forme.Cylindrique:​ unepiece.dimension.rayon = Lire.Double("​Votre pièce est Cylindrique,​ quel est son rayon?"​); ​
 +                                        unepiece.dimension.hauteur = Lire.Double("​et quelle sa hauteur?"​);​
 +                    break;
 +
 +                default: Console.ReadLine();​
 +                    break;
 +            }
 +
 +            return unepiece;
 +        }
 +
 +        private static couleur SaisirCouleur(String invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            couleur val = (couleur)0;
 +            do // cette boucle obtient une chaine correcte
 +            {
 +
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​couleur>​(s,​ out val))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return val;
 +        }
 +
 +        private static date SaisirDate()
 +        {
 +            date dateRetournée;​ // déclaration d'une variable de type '​structurée'​ date
 +
 +            // Saisie du nom du jour
 +            dateRetournée.NomJour = SaisieNomJour("​Donnez le jour de la semaine (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)"​);​
 +
 +            // Saisie du jour 
 +            dateRetournée.jourChiffre = Lire.Entier("​Donnez le n° du Jour (de 1 à 30/31 ");
 +
 +            // Saisie du mois 
 +            dateRetournée.Mois = SaisieMois("​Donnez le mois"​);​
 +
 +            // Saisie de l'​année ​
 +            dateRetournée.Annee = Lire.Entier("​Donnez l'​année"​);​
 +
 +            return dateRetournée;​
 +        }
 +
 +private static moisAnnée SaisieMois(string invite)
 +{
 +    Boolean ok = false;
 +    String s;
 +    moisAnnée Mois = (moisAnnée)0;​
 +    do // cette boucle obtient une chaine correcte
 +    {
 +
 +        Console.Write(invite + " : ");
 +        s = Console.ReadLine();​
 +        // je transforme la chaine au format attendu
 +        s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +        if (Enum.TryParse<​moisAnnée>​(s,​ out Mois))
 +        // je récupère la valeur associée à la chaine
 +        {
 +            ok = true;
 +        }
 +        else
 +        {
 +            Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +        }
 +    } while (!ok);
 +    return Mois;
 +}
 +
 +private static jourSemaine SaisieNomJour(string invite)
 +{
 +    Boolean ok = false;
 +    String s;
 +    jourSemaine NomJour = (jourSemaine)0;​
 +    do // cette boucle obtient une chaine correcte
 +    {
 +
 +        Console.Write(invite + " : ");
 +        s = Console.ReadLine();​
 +        // je transforme la chaine au format attendu
 +        s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +        if (Enum.TryParse<​jourSemaine>​(s,​ out NomJour))
 +        // je récupère la valeur associée à la chaine
 +        {
 +            ok = true;
 +        }
 +        else
 +        {
 +            Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +        }
 +    } while (!ok);
 +    return NomJour;
 +}
 +
 +
 +private static forme SaisieForme(string invite)
 +{
 +    Boolean ok = false;
 +    String s;
 +    forme forme = (forme)0;
 +    do // cette boucle obtient une chaine correcte
 +    {
 +        Console.Write(invite + " : ");
 +        s = Console.ReadLine();​
 +        // je transforme la chaine au format attendu
 +        s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +        if (Enum.TryParse<​forme>​(s,​ out forme))
 +        // je récupère la valeur associée à la chaine
 +        {
 +            ok = true;
 +        }
 +        else
 +        {
 +            Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +        }
 +    } while (!ok);
 +    return forme;
 +}
 +
 +        private static double SaisieRayon(string invite)
 +        {
 +            double leRayon;
 +            leRayon = Lire.Double("​Donnez le rayon de la pièce"​);​
 +            return leRayon;
 +        }
 +
 +internal static void AfficherTableauPiece(EnregPièce[] Tableaupiece,​ int indice)
 +{
 +    int cpteur; ​    //​compteur de piece
 +    cpteur = indice++; // indice de parcours
 +    Console.WriteLine("​Vous avez saisi " + cpteur + " pièce(s). Tapez entrée pour voir toutes les caractéristiques saisies."​);​
 +    Console.ReadLine();​
 +    indice = 0;    //init indice
 +
 +    while (indice < cpteur)
 +    {
 +        Console.WriteLine("​Identifiant : " + Tableaupiece[indice].Id + " || Numéro de série : " + Tableaupiece[indice].numeroSerie + " || Couleur : " + Tableaupiece[indice].couleurPièce + " || Date de fabrication : " + Tableaupiece[indice].DateFab.NomJour + " " + Tableaupiece[indice].DateFab.jourChiffre + " " + Tableaupiece[indice].DateFab.Mois + " " + Tableaupiece[indice].DateFab.Annee);​
 +        Console.WriteLine("​\nType : " + Tableaupiece[indice].dimension.forme);​
 +        switch (Tableaupiece[indice].dimension.forme)
 +        {
 +            case forme.Sphérique:​ Console.WriteLine("​ avec un rayon de " + Tableaupiece[indice].dimension.rayon);​
 +                break;
 +            case forme.Cylindrique:​ Console.WriteLine("​ avec un rayon de " + Tableaupiece[indice].dimension.rayon + " et une hauteur de " + Tableaupiece[indice].dimension.hauteur);​
 +                break;
 +            case forme.Cubique:​ Console.WriteLine("​ avec un côté de " + Tableaupiece[indice].dimension.cote);​
 +                break;
 +            default: Console.ReadLine();​
 +                break;
 +
 +        }
 +        indice++;
 +    }
 +
 +        }
 +    } // celui de class EnginDePieces
 +}
 +
 +</​code>​
 +
 +===Retour de l'​exécution ===
 +{{http://​pix.toile-libre.org/​upload/​original/​1420277046.png}}\\
 +
 +{{http://​pix.toile-libre.org/​upload/​original/​1420277552.png}} \\ 
 +
 +{{http://​pix.toile-libre.org/​upload/​original/​1420277621.png}}\\
 +
 +
 +=====Réflexions sur une autre méthode d'​approche =====
 +
 +===Mes fichiers erroné ===
 +
 +<code text progPrincipal>​
 +using System;
 +using System.Collections.Generic;​
 +using System.Linq;​
 +using System.Text;​
 +using System.Threading.Tasks;​
 +
 +namespace PieceUsineCorrThib
 +{
 +    public struct EnregPièce ​   // Déclaration d'une structure de stockage d'un descriptif de pièce
 +    {
 +        public string Id;                                 // Identifiant de la pièce
 +        public int numeroSerie; ​                         // numéro de série des pièces
 +        public couleur couleurPièce; ​                    // Voir liste énumérée '​couleur'​
 +        public date DateFab; ​                            // Voir structure '​date'​ utilisant deux listes énumérée,​ '​jourSemaine'​ et '​moisAnnée'​
 +        public mesure dimension; ​                        // Voir structure '​mesure'​ utilisant la liste énumérée '​forme'​
 +    }
 +
 +    public enum couleur { Jaune, Vert, Bleu, Rouge, Orange, Mauve };
 +
 +    public struct date
 +    {
 +        public jourSemaine NomJour; ​    // Voir Liste énumérée '​jourSemaine'​
 +        public moisAnnée Mois;       // Voir Liste énumérée '​moisAnnée'​
 +        public int jourChiffre; ​     // le numéro du jour
 +        public int Annee; ​           // numéro de l'​année
 +    }
 +    public enum jourSemaine { Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche };
 +    public enum moisAnnée { Janvier, Février, Mars, Avril, Mai, Juin, Juillet, Août, Septembre, Octobre, Novembre, Décembre };
 +
 +    public struct mesure ​  // tout ce qui constitue les mesures des pièces
 +    {
 +        public forme forme; ​                            // forme des pièces
 +        public double rayon; ​                           // rayon pour les pièces cylindriques et sphériques
 +        public double cote;                             // côté pour les pièces cubiques
 +        public double hauteur; ​                         // hauteur pour les pièces cylindriques
 +    }
 +    public enum forme { Cubique, Cylindrique,​ Sphérique };
 +
 +    class Program
 +    {
 +        public const int taille = 1000;
 +        static void Main(string[] args)
 +        {
 +            int indice;
 +            EnregPièce[] Tableaupiece;​
 +
 +            EnginDePieces.RemplirTableauPiece(out Tableaupiece,​ out indice);
 +
 +            EnginDePieces.AfficherTableauPiece(Tableaupiece,​ indice);
 +
 +
 +            Console.ReadLine();​
 +            Console.WriteLine();​
 +        }
 +    }
 +}
 +
 +</​code>​
 +
 +<code text EnginDePièceFaux>​
 +using System;
 +using System.Collections.Generic;​
 +using System.Linq;​
 +using System.Text;​
 +using System.Threading.Tasks;​
 +
 +namespace PieceUsineCorrThib
 +{
 +    public class EnginDeClass
 +    {
 +        public const char LF = '​\u000A';//​ caractère de retour à la ligne
 +        public const int MAX_TAB_PIECE = 100; // Tableau contenant les decriptifs de pièces
 +
 +        public static bool veutContinuer()
 +        {
 +            bool résultat;
 +            bool réponseOK;
 +            char réponse;
 +
 +            résultat = false; ​  // inutile, mais demandé par C#
 +            réponseOK = false; ​ // passera à VRAI dès que l'​opérateur saisi est accepté
 +            // et permettra la sortie de la boucle.
 +            do
 +            {
 +                réponse = Char.ToUpper(Lire.Caractere(LF + "​Voulez-vous continuer (O ou N) ?"));
 +
 +                if (réponse == '​O'​)
 +                {
 +                    résultat = true;
 +                    réponseOK = true;
 +                }
 +                else if (réponse == '​N'​)
 +                {
 +                    résultat = false;
 +                    réponseOK = true;
 +                }
 +
 +            } while (!réponseOK); ​ //  arrêt quand la réponse est OK (O, o, N ou n).
 +            return résultat;
 +        }  // fin veutContinuer
 +
 +        public static void RemplirTableauPiece(out EnregPièce[] piece_tableau,​ out int indi)
 +        {
 +            piece_tableau = new EnregPièce[MAX_TAB_PIECE];​
 +
 +            indi = 0;
 +
 +            do
 +            {
 +                piece_tableau[indi] = SaisirPièce(ref piece_tableau[indi]);​
 +                indi++;
 +
 +            } while (veutContinuer());​
 +        }
 +
 +        internal static EnregPièce SaisirPièce(ref EnregPièce unepiece)
 +        {
 +            // Déclarations
 +            EnregPièce pièceSaisie = new EnregPièce();​ // initialisation de la structure pièceSaisie
 +
 +            // Titre
 +            Console.Write("​Saisie d'un descriptif de pièce."​ + LF);
 +            Console.Write("​--------------------------------"​ + LF);
 +
 +            // Identifiant
 +            pièceSaisie.Id= Lire.Chaine("​Entrez l'​identifiant"​); ​               // on fait confiance à l'​utilisateur pour le format
 +
 +            // Couleur
 +            pièceSaisie.couleurPièce = SaisirCouleur("​Choisissez la couleur pièce (Jaune, Vert, Bleu, Rouge, Orange, Mauve)"​);​
 +
 +            // Numéro de série
 +            pièceSaisie.numeroSerie = Lire.Entier("​Entrez le n° de série de la pièce (Voir au dos de la pièce)"​); ​      // on fait confiance à l'​utilisateur pour le format ​             ​
 +
 +            // Date
 +            pièceSaisie.DateFab = SaisirDate();​
 +
 +            // Forme et dimensions
 +            pièceSaisie.dimension.forme = SaisieForme("​Donnez la forme de la pièce (Cubique, Cylindrique,​ Sphérique)"​);​
 +            switch (unepiece.dimension.forme)
 +            {
 +                case forme.Cubique:​ unepiece.dimension.cote = Lire.Double("​Votre pièce à une forme Cubique, quelle est la longueur d'un côté?"​);​
 +                    break;
 +
 +                case forme.Sphérique:​ unepiece.dimension.rayon = Lire.Double("​Votre pièce à une forme Sphérique, quel est son rayon?"​);​
 +                    break;
 +
 +                case forme.Cylindrique:​ unepiece.dimension.rayon = Lire.Double("​Votre pièce est Cylindrique,​ quel est son rayon?"​);​ unepiece.dimension.hauteur = Lire.Double("​et quelle sa hauteur?"​);​
 +                    break;
 +
 +                default: Console.ReadLine();​
 +                    break;
 +            }
 +
 +            return pièceSaisie;​
 +        }
 +
 +        private static couleur SaisirCouleur(String invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            couleur val = (couleur)0;
 +            do // cette boucle obtient une chaine correcte
 +            {
 +
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​couleur>​(s,​ out val))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return val;
 +        }
 +
 +        private static date SaisirDate()
 +        {
 +            date dateRetournée;​ // déclaration d'une variable de type '​structurée'​ date
 +
 +            // Saisie du nom du jour
 +            dateRetournée.NomJour = SaisieNomJour("​Donnez le jour de la semaine (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)"​);​
 +
 +            // Saisie du jour
 +            dateRetournée.jourChiffre = Lire.Entier("​Donnez le n° du Jour (de 1 à 30/31 ");
 +
 +            // Saisie du mois
 +            dateRetournée.Mois = SaisieMois("​Donnez le mois"​);​
 +
 +            // Saisie de l'​année
 +            dateRetournée.Annee = Lire.Entier("​Donnez l'​année"​);​
 +
 +            return dateRetournée;​
 +        }
 +
 +        private static moisAnnée SaisieMois(string invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            moisAnnée Mois = (moisAnnée)0;​
 +            do // cette boucle obtient une chaine correcte
 +            {
 +
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​moisAnnée>​(s,​ out Mois))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return Mois;
 +
 +        }
 +
 +        private static jourSemaine SaisieNomJour(string invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            jourSemaine NomJour = (jourSemaine)0;​
 +            do // cette boucle obtient une chaine correcte
 +            {
 +
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​jourSemaine>​(s,​ out NomJour))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return NomJour;
 +        }
 +
 +
 +        private static forme SaisieForme(string invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            forme forme = (forme)0;
 +            do // cette boucle obtient une chaine correcte
 +            {
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​forme>​(s,​ out forme))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return forme;
 +        }
 +
 +        private static double SaisieRayon(string invite)
 +        {
 +            double leRayon;
 +            leRayon = Lire.Double("​Donnez le rayon de la pièce"​);​
 +            return leRayon;
 +        }
 +
 +        internal static void AfficherTableauPiece(EnregPièce[] Tableaupiece,​ int indice)
 +        {
 +            int cpteur; ​    //​compteur de piece
 +            cpteur = indice++; // indice de parcours
 +            Console.WriteLine("​Vous avez saisi " + cpteur + " pièce(s). Tapez entrée pour voir toutes les caractéristiques saisies."​);​
 +            Console.ReadLine();​
 +            indice = 0;    //init indice
 +
 +            while (indice < cpteur)
 +            {
 +                Console.WriteLine("​Identifiant : " + Tableaupiece[indice].Id + " || Numéro de série : " + Tableaupiece[indice].numeroSerie + " || Couleur : " + Tableaupiece[indice].couleurPièce + " || Date de fabrication : " + Tableaupiece[indice].DateFab.NomJour + " " + Tableaupiece[indice].DateFab.jourChiffre + " " + Tableaupiece[indice].DateFab.Mois + " " + Tableaupiece[indice].DateFab.Annee);​
 +                Console.WriteLine("​\nType : " + Tableaupiece[indice].dimension.forme);​
 +                switch (Tableaupiece[indice].dimension.forme)
 +                {
 +                    case forme.Sphérique:​ Console.WriteLine("​ avec un rayon de " + Tableaupiece[indice].dimension.rayon);​
 +                        break;
 +                    case forme.Cylindrique:​ Console.WriteLine("​ avec un rayon de " + Tableaupiece[indice].dimension.rayon + " et une hauteur de " + Tableaupiece[indice].dimension.hauteur);​
 +                        break;
 +                    case forme.Cubique:​ Console.WriteLine("​ avec un côté de " + Tableaupiece[indice].dimension.cube);​
 +                        break;
 +                    default: Console.ReadLine();​
 +                        break;
 +
 +                }
 +                indice++;
 +            }
 +
 +        }
 +    }
 +}
 +
 +</​code>​
 +
 +====Correction d'un ami====
 +
 +En quatre points :
 +  * la fonction RemplirTableauPiece :\\ on commente ''//​piece_tableau[indi] = SaisirPièce(ref piece_tableau[indi]);''​
 +
 +  * la fonction SaisirPièce : qu'on met en ''​void''​ pour qu'​elle ne renvoie rien au de lui faire renvoyé une variable de type ''​EnregPièce''​
 +
 +  * fonction SaisirPièce dont on commente ''​RemplirTableauPiece''​\\ on commente ''//​return unepiece;''​
 +
 +  * fonction SaisirPièce dont on remplace par unepiece.Id ; unepiece.couleurPièce;​ etc.
 +
 +===Ce qui donne les fichiers suivants après correction===
 +
 +<code text ProgramCorr.cs>​
 +using System;
 +using System.Collections.Generic;​
 +using System.Linq;​
 +using System.Text;​
 +using System.Threading.Tasks;​
 +
 +namespace PieceUsineCorrThib
 +{
 +    public struct EnregPièce ​   // Déclaration d'une structure de stockage d'un descriptif de pièce
 +    {
 +        public string Id;                                 // Identifiant de la pièce
 +        public int numeroSerie; ​                         // numéro de série des pièces
 +        public couleur couleurPièce; ​                    // Voir liste énumérée '​couleur'​
 +        public date DateFab; ​                            // Voir structure '​date'​ utilisant deux listes énumérée,​ '​jourSemaine'​ et '​moisAnnée'​
 +        public mesure dimension; ​                        // Voir structure '​mesure'​ utilisant la liste énumérée '​forme'​
 +    }
 +
 +    public enum couleur { Jaune, Vert, Bleu, Rouge, Orange, Mauve };
 +
 +    public struct date
 +    {
 +        public jourSemaine NomJour; ​    // Voir Liste énumérée '​jourSemaine'​
 +        public moisAnnée Mois;       // Voir Liste énumérée '​moisAnnée'​
 +        public int jourChiffre; ​     // le numéro du jour
 +        public int Annee; ​           // numéro de l'​année
 +    }
 +    public enum jourSemaine { Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche };
 +    public enum moisAnnée { Janvier, Février, Mars, Avril, Mai, Juin, Juillet, Août, Septembre, Octobre, Novembre, Décembre };
 +
 +    public struct mesure ​  // tout ce qui constitue les mesures des pièces
 +    {
 +        public forme forme; ​                            // forme des pièces
 +        public double rayon; ​                           // rayon pour les pièces cylindriques et sphériques
 +        public double cote;                             // côté pour les pièces cubiques
 +        public double hauteur; ​                         // hauteur pour les pièces cylindriques
 +    }
 +    public enum forme { Cubique, Cylindrique,​ Sphérique };
 +
 +    class Program
 +    {
 +        public const int taille = 1000;
 +        static void Main(string[] args)
 +        {
 +            int indice;
 +            EnregPièce[] Tableaupiece;​
 +
 +            EnginDePieces.RemplirTableauPiece(out Tableaupiece,​ out indice);
 +
 +            EnginDePieces.AfficherTableauPiece(Tableaupiece,​ indice);
 +
 +
 +            Console.ReadLine();​
 +            Console.WriteLine();​
 +        }
 +    }
 +}
 +
 +</​code>​
 +
 +<code text EnginDeClass>​
 +using System;
 +using System.Collections.Generic;​
 +using System.Linq;​
 +using System.Text;​
 +using System.Threading.Tasks;​
 +
 +namespace PieceUsineCorrThib
 +{
 +    public class EnginDePièces
 +    {
 +        public const char LF = '​\u000A';//​ caractère de retour à la ligne
 +        public const int MAX_TAB_PIECE = 100; // Tableau contenant les decriptifs de pièces
 +
 +        public static bool veutContinuer()
 +        {
 +            bool résultat;
 +            bool réponseOK;
 +            char réponse;
 +
 +            résultat = false; ​  // inutile, mais demandé par C#
 +            réponseOK = false; ​ // passera à VRAI dès que l'​opérateur saisi est accepté
 +            // et permettra la sortie de la boucle.
 +            do
 +            {
 +                réponse = Char.ToUpper(Lire.Caractere(LF + "​Voulez-vous continuer (O ou N) ?"));
 +
 +                if (réponse == '​O'​)
 +                {
 +                    résultat = true;
 +                    réponseOK = true;
 +                }
 +                else if (réponse == '​N'​)
 +                {
 +                    résultat = false;
 +                    réponseOK = true;
 +                }
 +
 +            } while (!réponseOK); ​ //  arrêt quand la réponse est OK (O, o, N ou n).
 +            return résultat;
 +        }  // fin veutContinuer
 +
 +        public static void RemplirTableauPiece(out EnregPièce[] piece_tableau,​ out int indi)
 +        {
 +            piece_tableau = new EnregPièce[MAX_TAB_PIECE];​
 +
 +            indi = 0;
 +
 +            do
 +            {
 +                //​piece_tableau[indi] = SaisirPièce(ref piece_tableau[indi]);​
 +                SaisirPièce(ref piece_tableau[indi]);​
 +                indi++;
 +            } while (veutContinuer());​
 +        }
 +
 +        internal static void SaisirPièce(ref EnregPièce unepiece)
 +        {
 +            // Déclarations
 +           // EnregPièce pièceSaisie = new EnregPièce();​ // initialisation de la structure pièceSaisie
 +
 +            // Titre
 +            Console.Write("​Saisie d'un descriptif de pièce."​ + LF);
 +            Console.Write("​--------------------------------"​ + LF);
 +
 +            // Identifiant
 +            unepiece.Id = Lire.Chaine("​Entrez l'​identifiant"​); ​               // on fait confiance à l'​utilisateur pour le format
 +
 +            // Couleur
 +            unepiece.couleurPièce = SaisirCouleur("​Choisissez la couleur pièce (Jaune, Vert, Bleu, Rouge, Orange, Mauve)"​);​
 +
 +            // Numéro de série
 +            unepiece.numeroSerie = Lire.Entier("​Entrez le n° de série de la pièce (Voir au dos de la pièce)"​); ​      // on fait confiance à l'​utilisateur pour le format ​             ​
 +
 +            // Date
 +            unepiece.DateFab = SaisirDate();​
 +
 +            // Forme et dimensions
 +            unepiece.dimension.forme = SaisieForme("​Donnez la forme de la pièce (Cubique, Cylindrique,​ Sphérique)"​);​
 +            switch (unepiece.dimension.forme)
 +            {
 +                case forme.Cubique:​ unepiece.dimension.cote = Lire.Double("​Votre pièce à une forme Cubique, quelle est la longueur d'un côté?"​);​
 +                    break;
 +
 +                case forme.Sphérique:​ unepiece.dimension.rayon = Lire.Double("​Votre pièce à une forme Sphérique, quel est son rayon?"​);​
 +                    break;
 +
 +                case forme.Cylindrique:​ unepiece.dimension.rayon = Lire.Double("​Votre pièce est Cylindrique,​ quel est son rayon?"​);​ unepiece.dimension.hauteur = Lire.Double("​et quelle sa hauteur?"​);​
 +                    break;
 +
 +                default: Console.ReadLine();​
 +                    break;
 +            }
 +
 +            //return unepiece;
 +        }
 +
 +        private static couleur SaisirCouleur(String invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            couleur val = (couleur)0;
 +            do // cette boucle obtient une chaine correcte
 +            {
 +
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​couleur>​(s,​ out val))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return val;
 +        }
 +
 +        private static date SaisirDate()
 +        {
 +            date dateRetournée;​ // déclaration d'une variable de type '​structurée'​ date
 +
 +            // Saisie du nom du jour
 +            dateRetournée.NomJour = SaisieNomJour("​Donnez le jour de la semaine (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)"​);​
 +
 +            // Saisie du jour
 +            dateRetournée.jourChiffre = Lire.Entier("​Donnez le n° du Jour (de 1 à 30/31 ");
 +
 +            // Saisie du mois
 +            dateRetournée.Mois = SaisieMois("​Donnez le mois"​);​
 +
 +            // Saisie de l'​année
 +            dateRetournée.Annee = Lire.Entier("​Donnez l'​année"​);​
 +
 +            return dateRetournée;​
 +        }
 +
 +        private static moisAnnée SaisieMois(string invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            moisAnnée Mois = (moisAnnée)0;​
 +            do // cette boucle obtient une chaine correcte
 +            {
 +
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​moisAnnée>​(s,​ out Mois))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return Mois;
 +
 +        }
 +
 +        private static jourSemaine SaisieNomJour(string invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            jourSemaine NomJour = (jourSemaine)0;​
 +            do // cette boucle obtient une chaine correcte
 +            {
 +
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​jourSemaine>​(s,​ out NomJour))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return NomJour;
 +        }
 +
 +
 +        private static forme SaisieForme(string invite)
 +        {
 +            Boolean ok = false;
 +            String s;
 +            forme forme = (forme)0;
 +            do // cette boucle obtient une chaine correcte
 +            {
 +                Console.Write(invite + " : ");
 +                s = Console.ReadLine();​
 +                // je transforme la chaine au format attendu
 +                s = Char.ToUpper(s[0]) + s.Substring(1,​ s.Length - 1).ToLower();​
 +                if (Enum.TryParse<​forme>​(s,​ out forme))
 +                // je récupère la valeur associée à la chaine
 +                {
 +                    ok = true;
 +                }
 +                else
 +                {
 +                    Console.WriteLine("​Saise erronée, veuillez recommencer"​);​
 +                }
 +            } while (!ok);
 +            return forme;
 +        }
 +
 +        private static double SaisieRayon(string invite)
 +        {
 +            double leRayon;
 +            leRayon = Lire.Double("​Donnez le rayon de la pièce"​);​
 +            return leRayon;
 +        }
 +
 +        internal static void AfficherTableauPiece(EnregPièce[] Tableaupiece,​ int indice)
 +        {
 +            int cpteur; ​    //​compteur de piece
 +            cpteur = indice++; // indice de parcours
 +            Console.WriteLine("​Vous avez saisi " + cpteur + " pièce(s). Tapez entrée pour voir toutes les caractéristiques saisies."​);​
 +            Console.ReadLine();​
 +            indice = 0;    //init indice
 +
 +            while (indice < cpteur)
 +            {
 +                Console.WriteLine("​Identifiant : " + Tableaupiece[indice].Id + " || Numéro de série : " + Tableaupiece[indice].numeroSerie + " || Couleur : " + Tableaupiece[indice].couleurPièce + " || Date de fabrication : " + Tableaupiece[indice].DateFab.NomJour + " " + Tableaupiece[indice].DateFab.jourChiffre + " " + Tableaupiece[indice].DateFab.Mois + " " + Tableaupiece[indice].DateFab.Annee);​
 +                Console.WriteLine("​\nType : " + Tableaupiece[indice].dimension.forme);​
 +                switch (Tableaupiece[indice].dimension.forme)
 +                {
 +                    case forme.Sphérique:​ Console.WriteLine("​ avec un rayon de " + Tableaupiece[indice].dimension.rayon);​
 +                        break;
 +                    case forme.Cylindrique:​ Console.WriteLine("​ avec un rayon de " + Tableaupiece[indice].dimension.rayon + " et une hauteur de " + Tableaupiece[indice].dimension.hauteur);​
 +                        break;
 +                    case forme.Cubique:​ Console.WriteLine("​ avec un côté de " + Tableaupiece[indice].dimension.cube);​
 +                        break;
 +                    default: Console.ReadLine();​
 +                        break;
 +
 +                }
 +                indice++;
 +            }
 +
 +        }
 +    }
 +}
 +
 +</​code>​
 +
  
  
utilisateurs/hypathie/tutos/brouillon-algo-c.1420276246.txt.gz · Dernière modification: 03/01/2015 10:10 par Hypathie

Pied de page des forums

Propulsé par FluxBB