Problème avec mon premier programme C#

Fermé
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022 - 27 août 2022 à 15:28
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022 - 27 août 2022 à 21:57

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

A voir également:

10 réponses

barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917
Modifié le 27 août 2022 à 15:40

Bonjour,

Merci de lire ceci https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Et de corriger ton message.

Merci


0
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022
Modifié le 27 août 2022 à 16:25

 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
Utilisateur anonyme
27 août 2022 à 16:29

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
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022
27 août 2022 à 16:48

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
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917
Modifié le 27 août 2022 à 18:46

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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917
Modifié le 27 août 2022 à 18:12

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
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022
27 août 2022 à 18:10

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
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022
27 août 2022 à 18:16

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

0
Utilisateur anonyme
27 août 2022 à 18:16

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
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022
27 août 2022 à 18:59

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
barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024 4 917
Modifié le 27 août 2022 à 19:29

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
Utilisateur anonyme > barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024
27 août 2022 à 20:10

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
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022 > Utilisateur anonyme
27 août 2022 à 20:22

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
Utilisateur anonyme > Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022
27 août 2022 à 20:30

Ç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
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022 > barnabe0057 Messages postés 14453 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 24 novembre 2024
27 août 2022 à 20:55

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

0
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022
27 août 2022 à 19:31

Je vais essayer, merci

0
Utilisateur anonyme
27 août 2022 à 20:14

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
Soulcollector Messages postés 12 Date d'inscription samedi 27 août 2022 Statut Membre Dernière intervention 27 août 2022 > Utilisateur anonyme
27 août 2022 à 20:16

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

0