Problème avec mon premier programme C#

Bonjours à tous, je suis un débutant en réseautique et je dois faire 3 programme dont celui-ci; je dois écrire un programme qui va demander le nombre d'accident survenu au cours du dernier mois et qui va calculer et afficher les 4 statistiques suivantes;

L'âge moyen de tous les conducteurs;

Le pourcentage de femme;

Le pourcentage d'homme entre 18 et 25 ans; 

Le pourcentage de conducteurs non enregistrés dans la province.

La partie qui me cause problème le plus est le pourcentage d'homme entre 18 et 25 ans, voici mon code :

 //Variable
            int nbr_acc, cpt, an_nais, an_cour, somme_age, age;
            string str_rep;
            char sexe, rep;
            float cpt_hom_age, cpt_fem, pourcent_hp, age_moy, hom_age_moy;

            cpt_fem = cpt_hom_age = pourcent_hp = 0;


            somme_age = 0;
            an_cour = DateTime.Now.Year;

            do// Boucle pour recommencer
            {
                do
                {
                    Console.Write("Entrez le nombre d'accident survenue pendant le mois de mai:");
                    str_rep = Console.ReadLine();
                } while (int.TryParse(str_rep, out nbr_acc) == false || nbr_acc < 0);

                //Pour chaque accident
                cpt = 1;
                while (cpt <= nbr_acc)

                {
                    Console.WriteLine("Saisir les informations sur l'accident" + cpt);
                    cpt++;

                    do
                    {
                        Console.Write("Entrez l'année de naissance du conducteur impliqué(e):");
                        str_rep = Console.ReadLine();
                    } while (int.TryParse(str_rep, out an_nais) == false || an_nais < DateTime.Now.Year - 100 || an_nais > DateTime.Now.Year - 16);

                    age = DateTime.Now.Year - an_nais;
                    age_moy = somme_age + age;

                    while (somme_age >= nbr_acc) ;

                    do
                    {
                        Console.Write("Entrez le sexe du premier conducteur impliqué(e), H/F:");
                        str_rep = Console.ReadLine().ToUpper();
                    } while (char.TryParse(str_rep, out sexe) == false || sexe != 'H' && sexe != 'F');

                    if (sexe == 'F')
                        cpt_fem++;
                    else if (sexe == 'H' && sexe >= 1997 && sexe <= 2004)
                        cpt_hom_age++;

                    do
                    {
                        Console.Write("Entrer le code d'enregistrement du premier conducteur: (1/9)");
                        str_rep = Console.ReadLine();
                    } while (Char.TryParse(str_rep, out rep) && rep != '1' && rep != '9');

                    if (rep == '9')
                        pourcent_hp++;

                }
                Console.ReadLine();

                do
                {
                    Console.Write("Voulez-vous recommencer (O/N)?:");
                    str_rep = Console.ReadLine().ToUpper();
                } while (char.TryParse(str_rep, out rep) == false || rep != 'O' && rep != 'N');

            } while (rep == 'O');


            age_moy = (float)somme_age / cpt;
            Console.WriteLine("La moyenne d'age des conducteurs impliqué(es) est: {0}", age_moy);
            Console.ReadLine();


            hom_age_moy = (float)cpt_hom_age / cpt;
            Console.WriteLine("Le pourcentage d'homme entre 18 et 25 ans est: ", cpt_hom_age);
            Console.ReadLine();

            cpt_fem = (float)cpt_fem / cpt;
            Console.WriteLine("Le pourcentage de femme est: " + cpt_fem);
            Console.ReadLine();

            pourcent_hp = (float)pourcent_hp / cpt;
            Console.WriteLine("Le pourcentage de conducteur hors- province est: " + pourcent_hp);
            Console.ReadLine();

Merci à tous ceux qui prendrons le temps de regarder mon problème..

10 réponses

  1.  Bonjours à tous, je suis un débutant en réseautique et je dois faire 3 programme dont celui - ci; je dois écrire un programme qui va demander le nombre d'accident survenu au cours du dernier mois et qui va calculer et afficher les 4 statistiques suivantes;

    L'âge moyen de tous les conducteurs;

    Le pourcentage de femme;

                Le pourcentage d'homme entre 18 et 25 ans; 

    Le pourcentage de conducteurs non enregistrés dans la province.

    La partie qui me cause problème le plus est le pourcentage d'homme entre 18 et 25 ans.

    Je sais très bien que j'ai plusieurs erreurs mais la partie qui me cause le plus de soucis c'est la moyenne d'homme entre 18 et 25 ans

    Merci d'avance.

                //Variable
                int nbr_acc, cpt, an_nais, an_cour, somme_age, age;
                string str_rep;
                char sexe, rep;
                float cpt_hom_age, cpt_fem, pourcent_hp, age_moy, hom_age_moy;
    
                cpt_fem = cpt_hom_age = pourcent_hp = 0;
    
    
                somme_age = 0;
                an_cour = DateTime.Now.Year;
    
                do// Boucle pour recommencer
                {
                    do
                    {
                        Console.Write("Entrez le nombre d'accident survenue pendant le mois de mai:");
                        str_rep = Console.ReadLine();
                    } while (int.TryParse(str_rep, out nbr_acc) == false || nbr_acc < 0);
    
                    //Pour chaque accident
                    cpt = 1;
                    while (cpt <= nbr_acc)
    
                    {
                        Console.WriteLine("Saisir les informations sur l'accident" + cpt);
                        cpt++;
    
                        do
                        {
                            Console.Write("Entrez l'année de naissance du conducteur impliqué(e):");
                            str_rep = Console.ReadLine();
                        } while (int.TryParse(str_rep, out an_nais) == false || an_nais < DateTime.Now.Year - 100 || an_nais > DateTime.Now.Year - 16);
    
                        age = DateTime.Now.Year - an_nais;
                        age_moy = somme_age + age;
    
                        while (somme_age >= nbr_acc) ;
    
                        do
                        {
                            Console.Write("Entrez le sexe du premier conducteur impliqué(e), H/F:");
                            str_rep = Console.ReadLine().ToUpper();
                        } while (char.TryParse(str_rep, out sexe) == false || sexe != 'H' && sexe != 'F');
    
                        if (sexe == 'F')
                            cpt_fem++;
                        else if (sexe == 'H' && sexe >= 1997 && sexe <= 2004)
                            cpt_hom_age++;
    
                        do
                        {
                            Console.Write("Entrer le code d'enregistrement du premier conducteur: (1/9)");
                            str_rep = Console.ReadLine();
                        } while (Char.TryParse(str_rep, out rep) && rep != '1' && rep != '9');
    
                        if (rep == '9')
                            pourcent_hp++;
    
    
    
                    }
                    Console.ReadLine();
    
                    do
                    {
                        Console.Write("Voulez-vous recommencer (O/N)?:");
                        str_rep = Console.ReadLine().ToUpper();
                    } while (char.TryParse(str_rep, out rep) == false || rep != 'O' && rep != 'N');
    
                } while (rep == 'O');
    
    
                age_moy = (float)somme_age / cpt;
                Console.WriteLine("La moyenne d'age des conducteurs impliqué(es) est: {0}", age_moy);
                Console.ReadLine();
    
    
                hom_age_moy = (float)cpt_hom_age / cpt;
                Console.WriteLine("Le pourcentage d'homme entre 18 et 25 ans est: ", cpt_hom_age);
                Console.ReadLine();
    
                cpt_fem = (float)cpt_fem / cpt;
                Console.WriteLine("Le pourcentage de femme est: " + cpt_fem);
                Console.ReadLine();
    
                pourcent_hp = (float)pourcent_hp / cpt;
                Console.WriteLine("Le pourcentage de conducteur hors- province est: " + pourcent_hp);
                Console.ReadLine();
    0
    1. Bonjour 

      dans le tuto que t'as fait lire Barnabé, il,est écrit qu'il faut choisir le langage pour que le rendu soit correct. Et il est ajouté que pour C#, pour l’instant, il faut sélectionner C++.

      J'ai donc corrigé.

      Pour ton programme, dans ta formation as tu déjà vu ce qu'est une méthode? Et une classe ?


      0
      1. Salut, oui mais c'est quelque chose qui a vite fait le tour, à part le fait que le programme se situe dans la classe Main. J'en suis seulement à 3 mois d'étude.

        0
        1. Moi je termine ma formation dans une semaine, j'ai fait 4 mois de C# et j'ai appris la POO

          0
      2. Au niveau de la conception moi j'aurais fait une classe "accident" qui aurait ces propriétés :

        - date

        - genre du conducteur

        - âge du conducteur

        - un booléen qui indique si le conducteur est enregistré dans la province ou pas

        Et des méthodes :

        - une méthode pour calculer l'âge moyen qui prend en paramètre une liste de conducteurs

        - une méthode pour calculer un pourcentage qui prend en paramètre un genre, un âge mini et un âge maxi



        0
        1. Super, je ne suis pas au courant de cette procédure mais je vais regarder comment faire. Un gros merci pour ta réponse, très apprécié...

          0
          1. Oufff je comprends pourquoi ça ne nous a pas été dit jusqu'à maintenant dans le cours.

            0
            1. J'en suis seulement à 3 mois d'étude.
               

              ça ne veut rien dire, en ce qui me concerne, on m'a appris les méthodes le premier jour et les classes le 2eme...


              0
              1. Mise à part ajouter une classe, comment est-ce que je  peux formuler avec cette ligne de commande là, est- ce que c'est comment, parce que je sais que ne peux pas avoir un int et un char dans la même commande...

                else if (sexe == 'H' && sexe >= 1997 && sexe <= 2004)
                                        cpt_hom_age++;
                0
                1. Effectivement la variable sexe ne peut pas avoir 2 types différents

                  else if (sexe == 'H' && an_nais >= 1997 && an_nais <= 2004)
                                          cpt_hom_age++;
                  0
                2. @barnabe0057

                  Effectivement la variable sexe ne peut pas avoir 2 types différents
                   

                  en fait, on pourrait, si on la définit en object et qu'ensuite avant de tester sa valeur, on teste son type réel.

                  Cela c'est beaucoup compliqué pour rien et surtout incohérent, le sexe et l'année de naissance sont 2 données différentes donc n'ont rien à faire dans la même variable.

                  0
                3. @Utilisateur anonyme

                  La définir en objet, est- ce que ça veut dire la convertir parce que c'est ce que j'ai de la misère avec. quand je démarre mon programme pas à pas, je vois bien qu'il passe par dessus.

                  0
                4. @Soulcollector

                  Ça veut dire que c'est beaucoup plus compliqué pour rien, car c'est incohérent, le sexe et l'année de naissance sont 2 données différentes et doivent donc être stockées sur des variables différentes et tant qu'à faire du bon type, à savoir char ou string pour le sexe et int pour l'année de naissance.

                  Mon aparté était à destination de Barnabé.

                  1
                5. @barnabe0057

                  Ça ne fonctionne pas avec ton code, en mode pas à pas il passe par dessus et il affiche toujours 0 dans mon compteur

                  0
              2. Je vais essayer, merci

                0
                1. Barnabé fait l'effort d'essayer de t'aider et de présenter son code proprement.

                  Tu devrais en faire autant, ne serait-ce que par respect par l'effort qu'il fait pour toi

                  0
                2. @Utilisateur anonyme

                  Désolé, j'étais parti sur mon programme.

                  0