Jump to content
Neo Force Order Resurrection
jeed

Problème en C#

Recommended Posts

Bon, je reviens le temps d'un programme.  ca va vous paraitre simple, mais c'est un peu chiant parce que personne ne peut me répondre parmi ma classe ...

C'est du C#, et quand je le compile, il me sort des trucs genre, ma fonction n'est pas référée ou une connerie du genre.

Si quelqu'un pouvait me trouver mon erreur, ca serait vraiment énorme.

( et je pourrais retourner dans les limbes )

( ah, et techniquement, c'est mon if qui déconne )
 

namespace ConsoleApplication1
{
    class Program
    {
        static void saisie_élève(out string nom, out string prénom, out string classe)
        {
            Console.WriteLine("Entrez le nom de l'élève");
            nom = Console.ReadLine();
            Console.WriteLine("Entrez le prénom de l'élève");
            prénom = Console.ReadLine();
            Console.WriteLine("Indiquez la classe de l'élève");
            classe = Console.ReadLine();
        }

         static double Moyenne( double noteE1, double noteE2, double noteE3, double noteE4, double noteO1, double noteO2)
        {
            double calcul, somme;
            somme = (double)noteE1+noteE2+noteE3+noteE4+noteE4+noteO1+noteO2;
            calcul = somme / 6;
            return calcul;

        }

        
        static string resultat(double moyenne)
        {
            string note="";



            if (moyenne >= 10)    

                note = "Admis";
                else
                {

                if (moyenne > 8)

                    note = "Admis au Rattrapage";
                else

                    note = "Non admis";

                return note;


                }        

        }


        static void Main(string[] args)
        {
            double e1, e2, e3, e4, o1, o2;
            double m;
            string n, p, c;
            string res;
           
            saisie_élève(out n, out p, out c);

            Console.WriteLine("Afficher la première note d'écrit");
            e1 = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Afficher la seconde note ");
            e2 = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Afficher la troisième note ");
            e3 = Int32.Parse(Console.ReadLine());
            
            Console.WriteLine("Afficher la quatrième note ");
            e4 = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Afficher la première note d'oral ");
            o1 = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Afficher la seconde note d'oral ");
            o2 = Int32.Parse(Console.ReadLine());

            m = (double) Moyenne(e1,e2,e3,e4,o1,o2);


            Console.WriteLine("\n" + n + "\t\n" + p + "\nClasse " + c);
            Console.WriteLine("\n \n Notes D'Ecrit \n" );
            Console.WriteLine("___________________________________________________________");
            Console.WriteLine("Note 1 : " + e1 + " \t Note 2 : " + e2 + " \t Note 3 : " + e3 + "\t Note 4 : " + e4 + "\n \n ");
            Console.WriteLine("Notes D'Oral \n" );
            Console.WriteLine("_________________________________");
            Console.WriteLine("Note 1 : " + o1 + " \t Note 2 : " + o2 + " \n \n ");
            Console.WriteLine("_________________________________");
            Console.WriteLine("Moyenne : {0:##.##}",m);

            res = resultat(m);

            Console.WriteLine ("L'élève est donc " + res);

            Console.ReadLine();
        }

      

    }
    
} 

Share this post


Link to post

Ok, j'ai juste lu en diagonale et j'ai aucune idée de si c'est la source du problème, mais coder avec des accents, c'est mal !!! Dans l'absolu, essaye de te contenter du bon viel ASCII pour le code, même si sur le papier ton langage supporte plus. (Exception: les caractères chelous dans les chaines de caractère, ça peut passer...)

 

Accèssoirement: code en anglais, t'auras plus de problèmes.

 

Édit : Faire une fonction moyenne qui prend un nombre fixe de valeurs, c'est pas beau.

 

Édit 2 : L'indentation / la mise en forme au niveau des if pique les yeux (mais c'est peut-être un foirage IPB). Si tu la refais correctement :

static string resultat(double moyenne)
{
    string note="";

    if (moyenne >= 10)    
        note = "Admis";
    else
    {
        if (moyenne > 8)
            note = "Admis au Rattrapage";
        else
            note = "Non admis";

        return note;
    }        
}
... il devient évident que ton return est mal placé.

Share this post


Link to post

Hoy, je me suis permis de forker le topic, vu que ça m'a l'air d'une question sérieuse plus que d'une ânerie du TECOP.

(Même si je sais que la frontière est un peu floue à voir les posts de Hebus - je suppose que je ne les ai pas déplacés systématiquement plus tôt parce que j'adopte inconsciemment l'attitude que le PHP a forcément sa place dans le délirium ? Bref.)

 

D'abord un disclaimer total : moi y'en a pas parler C#. C'est un langage de grossofteux, donc mon assistance potentielle est limitée.

 

Remarque 1 : Est-ce que tu es sûr que Unicode est supporté correctement dans les identifieurs ? En théorie ça ne pose pas de problème en C#, mais une implémentation foireuse est vite arrivée. Par principe, j'éviterais les accents et autres caractères non-ASCII dans les noms de fonction, même si le langage le supporte. Cela dit je doute que ça soit le problème.

 

Remarque 2 : Un super bon plan quand le compilo te jette une erreur bizarre à la tête, c'est de 1 - googler le message, évidemment mais surtout 2 - si tu poses la question à des gens, ajoute le log de compilation, ça peut nous aider à trouver ce qui cloche exactement.

 

Remarque 3 : Je sais pas si c'est un résultat du copypasta, mais l'indentation de ton premier "else" est mauvaise. Il devrait être aligné avec son "if", normalement (de même que ses accolades, probablement).

 

Remarque 4 : Si c'est vraiment le "if" qui déconne, j'avoue avoir du mal à voir pourquoi. La seule chose qui me choque, c'est que tu compares un double (moyenne) avec des int (10 ou 8). Par principe j'écrirais 10.0 ou 8.0, mais à mon avis C# doit gérer le cast implicitement comme C.

 

Remarque 5 : Pourquoi caster la valeur de retour de Moyenne en (double) ? C'est normalement déjà son type.

 

Remarque 6 : Je ne peux pas déterminer pourquoi tu aurais un message du style "undefined reference to function" (est-ce bien ce que tu as ?) faute de connaître assez bien la syntaxe normale de C#, mais vu que c'est un langage OO, il y a gros à parier que c'est une histoire de namespace et/ou de méthodes statiques dans ta classe Program.

-> Est-ce que C# attache de l'importance aux majuscules au début d'un nom de fonction (je vois que IPB les colore différemment en tout cas, même si bon... IPB) et, par extension, pourquoi certaines de tes méthodes portent-elles une majuscule et pas les autres ?

-> Ça me traumatiserait violemment si c'était le cas, mais est-ce qu'il ne faudrait pas, à tout hasard, préfixer les noms de méthodes internes ? Du style "res = Program::resultat(m);" (ce serait laid quand même) ?

 

Voilà voilà, ça n'aide sans doute pas sur le problème immédiat, mais ça fait avancer le schmilblick. Cela dit, j'ai une autre remarque unrelated : c'est pas parce que tu ne veux plus passer ton temps à jouer que tu es obligé de t'exiler du forum, hein, y'a un juste milieu à trouver. Je pense que passer une fois par jour ou par semaine voir les nouveautés, c'est pas abusif et puis c'est toujours sympa de te voir. :D

 

===

 

EDIT : Mince, comment j'ai pu rater ça ? >_

 

Est-ce que tu as vu ce qui arrive quand la moyenne est supérieure ou égale à 10 ? Quelle est la valeur de retour de la fonction resultat ? (Indice : il n'y en a pas, ce qui serait immédiat si le "else" était mieux indenté. Comme quoi, l'indentation...)

 

Du coup je pense que ton histoire de fonction pas référencée est juste un warning, et que as déduit que le if posait problème du fait que le programme marche, mais ne fait pas ce que tu voulais ? Je pose la question parce que, à lire ton post, ça n'est pas évident de savoir si on cherche une erreur de syntaxe (erreur ou warning à la compilation) ou un bug (comportement incorrect du programme, qui fonctionne par ailleurs).

Share this post


Link to post

Grillé !

 

Ceci est un message à maturité nulle, merci de ne pas en prendre compte.

 

Ps : La solution est en édit de mon premier post.

Ps2 : En fait, pour être honnête, c'est le problème qui s'y trouve. J'ai pas donné la solution, mais je suis sur que ça ne devrait pas trop poser de problèmes. Par ailleur, le message d'erreur est plutôt explicite quand on y regarde...

Share this post


Link to post

Argh, le screenshot pour du texte ça pique.

 

Pour le reste ouais, ton compilo a trouvé exactement le même souci que moi et Drak.

 

Ce qu'il essaye de te dire avec ses mots à lui, c'est qu'un des chemins que ton code peut suivre (lorsqu'il doit se décider entre emprunter la branche du if et celle du else) le conduit à ne pas retourner de valeur dans la fonction "resultat" ; alors que celle-ci est réputée retourner systématiquement une chaîne de caractères. Ergo, phail.

Share this post


Link to post

Ah merde, si c'est juste ça, jvais genre me casser la gueule par principe


Edit : bon, bah je posterai suite à ce post, une photo de moi avec des bleus et des dents en moins

Merci, et bisous à vous ( vous me manquez, surtout toi )

Share this post


Link to post

Ah merde, si c'est juste ça, jvais genre me casser la gueule par principe

Bienvenue au club des crânes fracturés sur un bureau suite à "l'erreur à la con que j'ai cherché pendant trois heures, mékelkon kelkon kelkon arrgh". :D

 

Spoiler alert : ça n'est pas un club très select parmi les programmeurs.

Share this post


Link to post

Un grand classique, en effet. (En même temps, tu te doutais que sur un programme aussi complexe, ça ne pouvait pas être autre chose qu'une erreur à la con...)

 

Et attend d'avoir passé une après-midi sur un i à la place d'un j...

Share this post


Link to post

Dans ce coin-ci vous trouverez les traumatisés du Fortran qui ont perdu une semaine à faire des maths à cause d'un implicit none qu'il manquait à une routine...

(Des variables implicites, des variables... IMPLICITES! Oh, un mur ! *court*)

Share this post


Link to post

Je me suis tellement explose les dents sur du C a 42 que je compatis a ta douleur -_-

Puis GCC envoya sur terre son son fils et prophete Valgrind !

La voie de lumiere.

 

+1 pour le code en anglais et ASCII !

 

Les 95 caractères ASCII affichables :

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Et oui je m'ettait imprimé ca sur un postit ^^

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×