débutant C++
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

débutant C++



  1. #1
    moumilelion

    débutant C++


    ------

    bonjour à tous et à toutes.
    je débute en C++ et j'ai voulu créer un programme console qui fait une liste de nombre premier. Je ne sais pas où est mon erreur, le résultat m'indique que tous les nombre que i prend comme valeur sont premiers.
    voici le code:
    Code:
    Code #
    #include <iostream>
    #include <cmath>
    using namespace std;
    int main()
    {
    int i;
    int j (2);
    for (i=2; i<=20; i++)
       {while (j%i!=0)
        {j=j+1;
            if (j=i)
     {cout<<i<<" est un nombre premier"<<endl;}
            }
       }
    }
    merci de votre aide. bonne journée.

    -----
    Dernière modification par JPL ; 05/02/2014 à 15h06. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    Arzhur

    Re : débutant C++

    Bonjour,

    J'ai l'impression que c'est algo entier qui est faux...essaye de l'écrire en pseudo-code et ensuite passe à une implémentation en C++

  3. #3
    danyvio

    Re : débutant C++

    Effectivement c'est très vilain.
    Deux erreurs évidentes :
    1) j n'est pas initialisé avant le test {while (j%i!=0)
    2) Erreur classique : if (j=i) au lieu de (probablement) if(j==i)

    Mais il faut tout de même revoir l'algo
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  4. #4
    Arzhur

    Re : débutant C++

    J'en profite au passage pour poser des questions (étant un gros noob en C++)

    1) j n'est pas initialisé avant le test {while (j%i!=0)
    int j(2) ça initialise pas j à 2 ?

    2) Erreur classique : if (j=i) au lieu de (probablement) if(j==i)
    Pourquoi ça crash pas à l'exécution du coup ?

  5. A voir en vidéo sur Futura
  6. #5
    danyvio

    Re : débutant C++

    Au temps pour moi int j(2) initialise bien à 2

    Pour le reste, une erreur de programmation n'entraine pas forcément un plantage, mais une exécution inattendue IE autre chose que le résultat espéré !
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  7. #6
    RiketRok

    Re : débutant C++

    Citation Envoyé par Arzhur Voir le message
    Pourquoi ça crash pas à l'exécution du coup ?
    j = i affecte i à j, alors que j == i teste l'égalité entre j et i. Les deux marchent, mais ne font pas du tout la même chose.
    De plus, j n'est pas réinitialisé à chaque itération de la boucle for. On a donc un schéma comme celui ci :

    i = 2
    j = 2
    -- retour au for, i++
    i = 3
    j = 2
    j++;
    i = 3
    j = 3
    --- retour au for, i++
    i = 4
    j = 3
    j++;
    ...

    moumilelion, je pense qu'il faudrait que tu te visualise ce qu'il se passe dans ton code. Pars du début, regarde ce qu'il se passe entre chaque ligne, et voit si le code fait ce que tu veux faire.

  8. #7
    bisou10

    Re : débutant C++

    Et sinon, ce n'est pas du C++. Si tu veux apprendre le C++, commence à raisonner en POO.

  9. #8
    Bluedeep

    Re : débutant C++

    Citation Envoyé par RiketRok Voir le message
    j = i affecte i à j, alors que j == i teste l'égalité entre j et i. Les deux marchent, mais ne font pas du tout la même chose.
    Et il faudrait ajouter que

    Code:
    if(j=i)
    va procéder, comme indiqué à l'affectation à j de la valeur de i et tester la non nullité de i.
    Et à la question "pourquoi ça ne plante pas ?" la réponse est qu'en C une affectation prend comme valeur la valeur affectée.

    donc
    Code:
    if(j=i)
    est certes licite mais parfaitement immonde pour celui qui passe derrière.
    et doit être remplacé par
    Code:
    j=i;
    if(j)
    { etc ... }
    A noter que d'autres langage à syntaxe "C-Like" n'admettent pas ce genre de racourci trompeur.
    Suivant les compilos, même en C, un warning peut être levé.

    Par ailleurs, la syntaxe d'affectation déclaration
    Code:
    int j(2)
    doit ête évitée pour les même raisons et remplacée par

    Code:
    int j = 2;
    Pour d'évidentes question de lisibilité (confusion possible avec
    Code:
    int j[2]
    ).
    Pour l'anecdote, il y avait même sur les premiers compilos (et actuellement ? je ne sais pas) la syntaxe
    Code:
    int j 2;
    tout aussi dégueulasse.
    Dernière modification par Bluedeep ; 06/02/2014 à 07h54.

  10. #9
    Jack
    Modérateur

    Re : débutant C++

    Citation Envoyé par bisou10 Voir le message
    Et sinon, ce n'est pas du C++. Si tu veux apprendre le C++, commence à raisonner en POO.
    Essaie cout avec un compilateur C juste pour voir.
    Ou essaie d'inclure la librairie cmath ...
    C'est donc bien du C++.

    C++ est multiparadigme, donc on n'est pas obligé de programmer objet.

    A+
    Dernière modification par Jack ; 06/02/2014 à 09h49.

  11. #10
    Bluedeep

    Re : débutant C++

    Citation Envoyé par bisou10 Voir le message
    Et sinon, ce n'est pas du C++. Si tu veux apprendre le C++, commence à raisonner en POO.
    D'une part le C++ n'est certainement pas le meilleur langage pour commencer à "raisonner POO".(du fait de sa caractéristique multiparadigme justement, plus l'héritage multiple qui autorise une "relachement" conceptuel).

    D'autre part il peut y avoir plusieurs raisons pour utiliser le C++ au lieu du C sans faire de POO à commencer par le contrôle de cohérence des paramétres en appel externe de fonction (alors que le C ne controle que le nombre d'octets passés).

  12. #11
    lou_ibmix_xi

    Re : débutant C++

    D'autre part il peut y avoir plusieurs raisons pour utiliser le C++ au lieu du C sans faire de POO à commencer par le contrôle de cohérence des paramétres en appel externe de fonction (alors que le C ne controle que le nombre d'octets passés).
    On va sortir du sujet, mais si tu fais référence au polymorphisme (la fonction appelée dépends du type des paramètres passés en argument), je pense que c'est une mauvaise raison car, côté C il suffit de lire les "warning" pour savoir que le type de paramètre attendu lors d'un appel de fonction n'est pas celui passé. Et côté utilisateur je ne vois que des inconvénients: si on fait du polymorphisme pour éviter une conversion de paramètre (qui peut être un simple "cast"), il me semble bien mieux de faire du "cast" ou des fonctions de conversions. Si les algos des fonctions sont différent, alors c'est une hérésie de leur donner le même nom, et si l'algo est indépendant du type d'entrée il faut utiliser des "templates" ou du type générique genre "void*"

    Mon sentiment est que le C++ est rarement pertinant comme langage de nos jours, surtout car c'est un langage trop compliqué (je parle avec 10 ans d'expérience en développement professionnel, alors pour un débutant...). De plus la conception orientée objet est en général une mauvaise raison de passer du C au C++, puisque nous pouvons faire de l'objet en C. Même remarque pour les exceptions.

    En bref, je ne vois pas vraiment d'intérêt ou de plus value du C++ par rapport au C d'un côté, et au python et autres Go de l'autre, dans le paysage informatique tel que nous le connaissons également. Si en fait j'en vois un seul: Qt.

    Mais je suis réellement intéressé par les avantages du C++ que j'aurais pu ne pas voir...

  13. #12
    Bluedeep

    Re : débutant C++

    Citation Envoyé par lou_ibmix_xi Voir le message
    Mon sentiment est que le C++ est rarement pertinant comme langage de nos jours, surtout car c'est un langage trop compliqué (je parle avec 10 ans d'expérience en développement professionnel, alors pour un débutant...).
    Mais je partage entièrement cet avis. (et je ne suis pas du tout un débutant, mais j'ai arrêté le développement professionnel depuis assez longtemps).
    En résumé, je dirais que si le C remplace utilement l'assembleur (dans 98% des cas) , le C++ n'est quant à lui plus un choix pertinent de nos jours, du fait de son positionnement doublement "cul entre deux chaises" (ni bas niveau, ni haut niveau, plus l'aspect "multiparadigme" qui ne répond à aucun besoin réel dans la pratique et qui entraine une complexité non nécessaire).

    Et j'ajouterai, que apprendre le C++ pour se mettre à la POO me semble une très mauvaise raison.
    (même pour ceux qui connaissent le C, et espère ainsi être moins dépaysés).

    Bon, c'est vrai que le C++ a été le premier langage orienté POO que j'ai abordé, mais c'était il y a plus de 20 ans.
    Dernière modification par Bluedeep ; 07/02/2014 à 12h55.

  14. #13
    Arzhur

    Re : débutant C++

    Bonjour,


    C'est intéressant comme question (je ne peux pas trop répondre parce que mes compétences sont plus en Java voir python)...Mais c'est un appeau à Troll tellement énorme qu'il vaudrait mieux en faire une discussion séparée

  15. #14
    galerien69

    Re : débutant C++

    hello,

    @lou_ibmix_xi
    string au lieu de char*
    vector au lieu de new int[]
    passage par référence
    templates <----
    namespaces <----
    STL
    polymorphisme
    (les principales raisons pour ma part)

    Je ne dénigre pas le C. Juste que je préfère éviter le caractère *.
    Je préfère évidemment le C++.
    Je pense qu'on voit plus d'atrocités en C qu'en C++.
    Ca reste quand même un langage compilé assez performant..

    je suis néanmoins d'accord sur le fait que c'est un langage compliqué.
    Dire qu'il est multiparadigme ne le prête pas à la POO est un non sens.
    C'est probablement pas le meilleur langage pour commencer, certes.

    PS: les codes les plus affreux viennent de programmeurs C.

  16. #15
    Jack
    Modérateur

    Re : débutant C++

    Dire qu'il est multiparadigme ne le prête pas à la POO est un non sens.
    ta phrase est bizarrement construite. Du coup je ne comprends pas ce que tu veux dire.

  17. #16
    galerien69

    Re : débutant C++

    il faut comprendre qui peut le plus peu le moins.
    Si tu veux montrer (je sais plus qui a dit cette phrase) que C++ c'est pas adéquat pour de la POO, alors il faut dire qu'il manque des éléments nécessaires à la POO (donc déjà rappeler c'est quoi ce qu'on entend par POO puis montrer qu'un des points est pas respecté), par exemple impossibilité de satisfaire le principe de substitution de Liskov, où je ne sais quoi.
    Si on dit qu'avec C++ on peut faire du fonctionnel ou des prédicats ben c'est bien, mais ca n'empêche en rien la POO.

  18. #17
    Jack
    Modérateur

    Re : débutant C++

    Ok, je suis d'accord. J'avais l'impression que tu voulais dire l'inverse.

    A+

  19. #18
    bisou10

    Re : débutant C++

    Bluedeep, on parle là d'un gars qui vient sur un forum pour qu'on lui fasse son exo.

    Tu n'as pas besoin d'être madame soleil pour comprendre qu'un débutant autodidacte, d'une part pondrait un truc un minimum réfléchi, et d'autre part aurait choisi un thème ludique.

    Alors ton évaluation technique d'un langage OOP me parait complètement surréaliste. S'il fait du C++ dans un cadre scolaire, autant qu'il fasse une classe. Je ne vois pas en quoi le fait d'avoir un C++ qui peut se programmer comme du C ou au contraire utiliser des notions qui sont, même entre experts, tout à fait discutables.

    En fait, excepté pour dire que tu connais bien c++, je ne vois pas où tu veux en venir

  20. #19
    bisou10

    Re : débutant C++

    Pour le reste, je pense que C++ et plus fortement structurant que C, sans avoir les inconvénients d'un langage full objet de type java ou c#.

    Je pense que c'est clairement une question d'habitude. Dans un cadre scolaire, Python me semblait tout à fait intéressant. Dans un cadre pré-professionnel, C++ ou Java pour du dev software orienté applications, et C pour du dev software orienté hardware.

  21. #20
    Bluedeep

    Re : débutant C++

    Citation Envoyé par bisou10 Voir le message
    Pour le reste, je pense que C++ et plus fortement structurant que C, sans avoir les inconvénients d'un langage full objet de type java ou c#.
    Dit autrement : bon à tout, excellent nulle part; tout le contraire de C & C# (Concernant Java, j'ai piloté plusieurs années des équipes de dev Java mais n'ai pas une connaissance suffisante de son écosystème actuel pour me prononcer).

    Je pense que c'est clairement une question d'habitude. Dans un cadre scolaire, Python me semblait tout à fait intéressant. Dans un cadre pré-professionnel, C++ ou Java pour du dev software orienté applications, et C pour du dev software orienté hardware.
    Pour la partie C, exact; pour le reste amusant; pour le cadre scolaire, je ne me prononcerais pas; en effet, je vois, depuis une dizaine d'années trop d"'ingénieurs" (si, si, c'est marqué sur le diplôme) qui, n'ayant jamais fait même une initiation à l'assembleur,n'ont aucune "conscience" de ce qu'est la structure d'une machine et la programmation, que je ne peux que pouffer à lire cela.

  22. #21
    Bluedeep

    Re : débutant C++

    Citation Envoyé par galerien69 Voir le message
    il faut comprendre qui peut le plus peu le moins.
    Comme la plupart des lieux-communs, ça se révèle un argument fumeux à l'analyse; particulièrement vrai ici.

  23. #22
    galerien69

    Re : débutant C++

    D'une part le C++ n'est certainement pas le meilleur langage pour commencer à "raisonner POO".(du fait de sa caractéristique multiparadigme justement
    pourquoi.

    plus l'héritage multiple qui autorise une "relachement" conceptuel
    pourquoi.

    le C++ n'est quant à lui plus un choix pertinent de nos jours, du fait de son positionnement doublement "cul entre deux chaises" (ni bas niveau, ni haut niveau, plus l'aspect "multiparadigme" qui ne répond à aucun besoin réel dans la pratique et qui entraine une complexité non nécessaire
    pourquoi ca implique une complexité.

    apprendre le C++ pour se mettre à la POO me semble une très mauvaise raison.
    pourquoi.

    Dit autrement : bon à tout, excellent nulle part; tout le contraire de C & C#
    parce que C# est excellent en POO?
    pourquoi.

    n'ont aucune "conscience" de ce qu'est la structure d'une machine et la programmation, que je ne peux que pouffer à lire cela.
    Pe aussi qu'ils feignent ne pas connaitre car ils n'en ont strictement rien à foutre. Avoir la connaissance, c'est devoir la restituer.
    Mais sinon, en quoi faut-il avoir des connaissances assembleur pour prétendre à être un ingénieur info.

    Comme la plupart des lieux-communs, ça se révèle un argument fumeux à l'analyse; particulièrement vrai ici.
    idem: pouvoir faire du multiparadigme ne permet pas de faire de la POO?
    pourquoi.

Discussions similaires

  1. Debutant, debutant en HITEC C compiler + 18f4550
    Par biduleur34 dans le forum Électronique
    Réponses: 1
    Dernier message: 28/05/2012, 17h06
  2. Réponses: 4
    Dernier message: 12/03/2011, 15h13
  3. Débutant _ AOP
    Par invite1bf94880 dans le forum Électronique
    Réponses: 7
    Dernier message: 06/01/2008, 21h26
  4. débutant
    Par inviteb9b9ff44 dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 10
    Dernier message: 07/12/2007, 20h24
  5. pb de débutant
    Par tibobo dans le forum Internet - Réseau - Sécurité générale
    Réponses: 8
    Dernier message: 04/05/2006, 22h19