IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Un cours de C/C++ avec exercices corrigés


Sujet :

C++

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Points : 2
    Points
    2
    Par défaut Un cours de C/C++ avec exercices corrigés
    Bonjour,
    J'ai crée un cours de C/C++ avec beaucoup d'exemples, des exercices, des QCMS... destiné aux débutants et sans pub !.
    http://nte-serveur.univ-lyon1.fr/merrheim

    Quen pensez-vous ?
    merci

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour

    J'ai pris au hasard dans le premier cours (bases du C++) les chapitres 3 et 5, sur les tableaux et les chaines de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int * pInt = new int[10];
    char tt[20]; 
     
    ...
    On remarque que c'est du C, pas du C++ où il est conseillé d'utiliser std::vector et std::string !

    Cela dit, le style est clair, la présentation sobre. J'aime bien !
    Les execices et QCMs sont très pratiques.

    Seul bémol à mon avis : ne pas encourager dès le départ sur l'utilisation de la stl.

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par mabu
    On remarque que c'est du C, pas du C++

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut Re: Un cours de C/C++ avec exercices corrigés
    Citation Envoyé par merrheim
    Quen pensez-vous ?
    pour la présentation, le pas de pub et en plus c'est français: je n'est pas eu le temps de lire mais c'est un (trés) bon début!

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Un cours de C/C++ avec exercices corrigés
    Citation Envoyé par merrheim
    J'ai crée un cours de C/C++ avec beaucoup d'exemples, des exercices, des QCMS... destiné aux débutants et sans pub !.
    http://nte-serveur.univ-lyon1.fr/merrheim

    Quen pensez-vous ?
    C/C++, ça n'existe pas ! C et C++ sont des langages différents.

    Visiblement, il s'agit d'un cours de C++. Le bon forum est "C++".
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Points : 2
    Points
    2
    Par défaut stl dès le début
    merci pour vos remarques.
    juste quelque points :
    1) je pense qu'il est difficile de commencer par apprendre le C++ sans commencer par apprendre le C (c'est un sujet de polémique récurrent mais c'est le choix que j'ai fait. J'ai aussi 1500 heures de cours d'expérience avec des débutants en C/C++)
    la logique du cours est
    on étudie les types de base
    on étudie les structures
    on regroupe des structures et des fonctions dans des modules
    on passe ensuite naturellement des structures aux classes
    Dans le module qui suit "notions avancées en C++" : on introduira les classes, les string,la STL, la virtualité...etc... Il est en cours de rédaction

    2) les chaînes de caractères sont étudiées à la C car je pense qu'il est bon pour des débutants de "mettre les mains dans le camboui" pour voir comment ça marche. Ensuite, on parle de string et on dit : "toutes les difficultés des chaînes de caractères sont masquées à l'utilisateur dans les string d'où l'intérêt de l'encapsulation"

    3) Mêmes arguemnts pour la STL : si on parle de vector et de template dès le chapitre 3, les étudiants vont perdre pied car après si peu d'heures de cours j'estime qu'il faut y aller doucement. Imaginez bien qu'un bachelier lambda sur 2 sait à peine écrire un for lorsque je commence le chapitre 3 !

    4) Ce cours est un cours de C/C++ car je pense qu'il faut étudier les 2 langages : d'abord le C ensuite le C++ en disant que l'approche orientée objet est préférable que l'approche procédurale. Le principal argument est que pour faire un appel système sous unix ou sous windows il faut connaître le C.

    merci

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: stl dès le début
    Citation Envoyé par merrheim
    1) je pense qu'il est difficile de commencer par apprendre le C++ sans commencer par apprendre le C (c'est un sujet de polémique récurrent mais c'est le choix que j'ai fait. J'ai aussi 1500 heures de cours d'expérience avec des débutants en C/C++)
    Je suis éventuellement d'accord, mais il ne faut absolument pas mélanger les deux langages, et bannir l'expression 'C/C++' qui est extrêmement confusante.
    la logique du cours est
    on étudie les types de base
    on étudie les structures
    Déjà des différences de syntaxe entre C et C++...
    on regroupe des structures et des fonctions dans des modules
    on passe ensuite naturellement des structures aux classes
    Dans le module qui suit "notions avancées en C++" : on introduira les classes, les string,la STL, la virtualité...etc... Il est en cours de rédaction

    2) les chaînes de caractères sont étudiées à la C car je pense qu'il est bon pour des débutants de "mettre les mains dans le camboui" pour voir comment ça marche. Ensuite, on parle de string et on dit : "toutes les difficultés des chaînes de caractères sont masquées à l'utilisateur dans les string d'où l'intérêt de l'encapsulation"

    3) Mêmes arguemnts pour la STL : si on parle de vector et de template dès le chapitre 3, les étudiants vont perdre pied car après si peu d'heures de cours j'estime qu'il faut y aller doucement. Imaginez bien qu'un bachelier lambda sur 2 sait à peine écrire un for lorsque je commence le chapitre 3 !

    4) Ce cours est un cours de C/C++ car je pense qu'il faut étudier les 2 langages : d'abord le C ensuite le C++ en disant que l'approche orientée objet est préférable que l'approche procédurale. Le principal argument est que pour faire un appel système sous unix ou sous windows il faut connaître le C.
    Encore une fois, le C/C++, ça n'existe pas. A mon avis cette approche 'combinée' n'est pas bonne (en tout cas, ce n'est pas celle qui est recommandée par les professionels, lire les discussions sur clc et clc++).

    L'intérêt du C++ est justement d'apporter une couche d'abstraction qui rend caduc et inutile les détails scabreux du langage C.

    D'autres part, il y a de véritables différences de syntaxe et de sémantique qui rend la combinaison des deux langages dangereuse. Le C++ n'est en aucun cas une surcouche du C.

    Parler de malloc() en C++ est une absurdité lorsqu'il existe new. Ne pas s'étonner si les élèves font un malloc() suivit d'un delete...
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    C'est du C++ donc je déplace.
    http://nte-serveur.univ-lyon1.fr/merrheim/BASESCPP/outils/VC6/image7.html
    http://c.developpez.com/faq/cpp/?pag...le#SL_iostream

  9. #9
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Points : 2
    Points
    2
    Par défaut
    c'est bizarre cette attitude dogmatique !
    1) Parler de malloc est indispensable à la compréhension des concepts du langage ! Dire que c'est une "absurdité" est une attitude incorrecte ! En effet je pense qu'il est fondamental qu'un étudiant sache que lorsqu'on fait un new, il y a en premier lieu une interaction avec le système d'exploitation (avec un appel de fonctions type malloc ) et en second lieu beaucoup d'autres choses me semble capital.
    En fait j'estime qu'on ne peut pas parler des concepts de haut niveau des langages de programmation sans faire comprendre aux étudiants "comment ça marche". Répondre à la simple question "comment on utilise" serait une grave erreur.
    2) Dire qu'il y a une manière de faire "recommandée par les professionnels" est réducteur : j'ai encadré beaucoup de stages (où il y avait des professionnels) où la connaissance des 2 langages étaient nécessaire ! On peut toujours dure que ces professionnels étaient nuls mais il ne faut pas juger si vite !
    Dire que les apports du C++ "rend caduc et inutile les détails scabreux du langage C. " C'est "oublier" que le C existe encore, est utilisé par les professionnels et que nos étudiants ont intérêt à connaître ces 2 langages.
    On mettra bien sûr l'accent sur les comcepts compliqués du C++ mais sans oublier l'aspect procédural.
    Au fait linux et windows sont écrits en C avec des surcouches C++ ! Cela doit être écrit par de mauvais programmeur !
    3) les remarques comme "Ne pas s'étonner si les élèves font un malloc() suivit d'un delete..." sont complètement déplacées ! Personnellement aucun de mes étudiants n'a jamais confondu ! Je dis juste dans mon cours que le malloc existe et qu'il est préférable d'utiliser un new !

  10. #10
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par merrheim
    En effet je pense qu'il est fondamental qu'un étudiant sache que lorsqu'on fait un new, il y a en premier lieu une interaction avec le système d'exploitation (avec un appel de fonctions type malloc )
    Dans ce cas, il faut aussi expliquer le fonctionnement de malloc puis du gestionnaire de mémoire puis des OS et enfin du hardware
    Sans rire, expliquer que new réserve de l'espace mémoire, oui mais je ne pense pas qu'un parallèle avec malloc soit indispensable pour comprendre et comme le fait remarquer Emmanuel cela peut entrainer une confusion dans leurs l'utilisations.

  11. #11
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Points : 2
    Points
    2
    Par défaut
    "il faut aussi expliquer le fonctionnement de malloc puis du gestionnaire de mémoire puis des OS" Je suis parfaitement d'accord c'est pourquoi un bon cours de systeme d'exploitation et un autre d'architecture des ordinateurs est important dans une formation informatique.
    Toujours le même soucis : expliquez (en simplifiant) comment ça marche et expliquez en insistant sur "comment on utilise".

  12. #12
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    salut,

    je ne vois pas le besoin d'expliquer à balle les concepts d'allocation pour apprendre le C++ (ou alors faut faire un cours d'assembleur/C/C++, sans s'étonner que l'étudiant fasse du JMP ou du MOV dans son prog C++). ou en tout cas si on le fait (ok, c'est bien de comprendre les mécanismes), ce n'est pas pour autant qu'on doit faire l'amalgame entre C et C++.

    le 1er est un langage procédural, le 2è un langage orienté objet. ce qui est ennuyeux, c'est que le C++ ait été conçu en englobant le C. résultat dans la tête de beaucoup C++ = C objet, et les 2 langages sont présentés comme père (C) et fils (C++), alors que je les verrais plus comme des cousins par alliance .

    sinon pour résumer je dirais que si on veut apprendre les 2, ou si on veut apprendre le C++ en commençant par un cours ou tutoriel sur apprendre le langage C, il faut 2 cours bien distincts et au début du cours de C++ bien dire que ce n'est pas du C, montrer les différence et les concepts objet, et montrer également tout ce qui est obsolète/déconseillé/à bannir issu du C lorsqu'on fait du C++.



    piou!! je parle trop moi

  13. #13
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    sinon pour la pensée positive, je trouve le cours pas mal pour débuter (je n'ai pas tout regardé). mais perso j'aime pas trop la mise en page (fonte trop grande) et la navigation.

    hihi, j'ai trouvé une erreur de syntaxe dans le code (cf. Le type char)

    if(c>='A && c<='Z)
    au lieu de


  14. #14
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Points : 2
    Points
    2
    Par défaut
    Ne vous inquiétez pas, les étudiants ne confondent pas l'assembleur et le C++ !
    Bien sûr il faut bien faire comprendre les différences entre le C et C++ : les contraintes apparentes du C++ doivent apparaître comme un plus par rapport au langage C. On peut faire cela de manière "continue" en montrant point par point les insuffisances du C et en montrant comment le C++ apporte une solution élégante à ces insuffisances et à chaque étape on "interdit" à l'étudiant d'utiliser ce qui devient "obsolète".
    On passe alors d'une manière très souple du C au C++ !
    Les chaînes de caractères me semble être un exemple intéressant :
    Il y a 2 manières d'aborder le problème :
    - on utilise des strings et on explique aux étudiants comment on les utilisent. C'est une possibilité mais les étudiants ne perçoivent pas toute la difficulté d'écrire une classe comme string (allocation de la mémoire et autre) : on leur fait croire que c'est simple alors qu'il y a une réelle difficulté qu'ils ne percevront pas.
    - Autre approche possible : on utilise des tableaux de char et des char *.
    On voit vite la nécessité d'utiliser les fonction de string.h et on s'aperçoit vite qu'un problème apparait avec l'allocation de la mémoire au niveau de la fusion de 2 chaînes par exemple. Finalement on leur montre que le C++ a encapsulé les difficultés dans une classe appelée string et il n'ont plus envie d'utiliser des char *. Au passage ils on vraiment compris l'avantage d'"encapsuler les difficultés". De plus si une bibliothèque quelconque les obligent à manipuler des char *, ils sauront à quoi ils ont affaire et sauront vite les transformer en string !

    PS : au fait pour l'assembleur on montre succinctement aux étudiants comment on passe de l'assembleur au C dans un cours d'architecture des ordinateurs. On montre par exemple comment on écrit des fonctions simples en assembleurs et on les convainct rapidement de la nécessité d'abandonner l'assembleur !

  15. #15
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    C'est parti et dans le désordre.

    -> J'ai donné le lien hier et le revoici -> http://www.research.att.com/~bs/bs_f...l#prerequisite. Je t'encourage très vivement à lire ce pdf. Il y en d'autres dans le genre, mais celui-ci est probablement un des plus "détaillés".

    Le truc est qu'apprendre aux élèves à écrire du code simple mais faux, alors que l'on peut leur apprendre du code encore plus simple mais juste, est un choix pour le moins discutable.

    Les expériences & témoignages de profs qui justement enseignent le C++ comme un langage de haut niveau (et non pas comme un C avec classes) indiquent que les élèves se font très bien au sens logique (et non historique). Sujet récurrent, comme le signalait Emmanuel, sur news:fr.comp.lang.c++, le "troll" vient d'ailleurs de ressortir il y a deux jours.

    On n'a jamais eu besoin d'enseigner les pointeurs ou comment sont mis en oeuvre les tableaux variants de l'Ada avant de pouvoir les utiliser. De la même façon, pas besoin de savoir concevoir une classe template pour l'utiliser. Je ne peux que te conseiller de te procurer Accelerated C++ de Koenig et Moe, et le bouquin de Francis Glassborrow, et de les méditer.

    Des cours de C avec classes, il y en a des tas. Il y a en revanche un vrai créneau pour les cours de C++ en français.

    _______
    Ensuite, côté présentation ta page oblige à scroller verticalement. Je fais parti de ces gens qui ont un volet avec les bookmarks qui réduit toujours la fenêtre de navigation. Autant dire que ta contrainte de surfer en 1024x768 est anti-ergonomique. La navigation avec le petit truc en haut n'est pas terrible non plus.

    Les images se lissent (oui, avec deux "s") mal. Et si tu veux vraiment garder cette utilisation d'images (on fait de super trucs avec (La)TeX ...), rajoute les boutons de navigation en bas -- mon index a souffert deux fois plus que nécessaire sur la molette.
    L'utilisation d'une police monotype (je crois que l'on dit) est ce qui ce fait généralement pour le code, donc les mots clé et autres symbôles d'un programme.

    Une justification parfois excessive -> page 51 du chapitre 2.

    Pour le mode texte, utilise les balises <pre>.

    Ton indentation va donner de mauvaises habitudes.
    ______
    Le premier C with classes de Bjarne Stroustrup date du début des années 80.

    Le code n'est absolument pas standard ! <iostream.h> est déprécié depuis ... 98. Voir le point de FAQ signalé par Aurélien.

    Il est conseillé en C++ de ne pas déclarer une variable avant d'en avoir besoin. C'est discuté sur GOTW, ou la FAQ C++ lite je crois, je te laisse consulter tout cela.

    Les castings à la C ne sont pas conseillés non plus.

    Dans le slide du "while", tu parles de "la sémantique du do...while"

    ASCII, ce n'est pas 8, mais 7 bits.

    Pour la transformation maj-min et ce genre de choses, je préciserai qu'en vrai il existe des méthodes plus justes qui tiennent compte des caractères hors ASCII, et propres à la locale courante (à dire autrement à des débutants)

    Ch3, p4 -> :s/opérationss/opérations/
    p11 -> :s/CONSTANT/CONSTANTE/

    C99 supporte const, non ?

    ____
    chaines

    ex2 -> bonjour buffer-overflow et autres injection de code
    Les fonctions C de manipulation de char* sont dans <cstring> en C++98.

    Manipuler ces fonctions n'a pédagogiquement pas grand intérêt. std::string a une sémantique de valeur, il faut en profiter.

    (Si avec VC++6 tu n'arrivais pas à t'en servir (de std::string) avec les flux, c'est parce que std::string est compatible avec les flux standard (sans .h) et non avec les flux classiques (avec .h) que VC7.1 ne connait plus).

    conclusion -> "Nous avons étudié comment les chaînes de caractères étaient représentées en C++." Non, en C!

    ____
    Gestion des fichiers C....
    Choisi quel langage tu veux enseigner, mais ne les mélange pas. Après les gars, il faut passer dérrière.

    ______________________
    Le C++ n'est pas entièrement compatible avec le C. Pas de VLA en C++ p.ex., pas la même signification pour "void f()", ...

    En C++, on parle de "fonction membre". "méthode" est un terme emprunté à d'autres langages/technologie et semble venir du Smalltalk. Certaines personnes comprennent, en C++, "fonction membre virtuelle" quand on parle de "méthode". Autant écarter l'ambiguité en ce tenant au vocabulaire du C++.

    Visiblement tout le monde n'a pas la même approche -> en ce qui me concerne, ce n'est pas l'encapsulation, mais l'abstraction qui est importante. L'encapsulation n'est que le moyen pour mettre en oeuvre l'abstraction.

    Attention avec accesseurs et mutateurs, suivant comment on les présente, on pourrait croire qu'ils sont nécessaires et à systématiser. Procéder de la sorte (systématisation sans autre réflexion) est signe d'un mauvais design en ce qui me concerne. C'est traité dans la FAQ de developpez.

    C'est quoi ça " void operator>>(ostream &out);" ????
    Il y a des choses plus importantes à montrer que cette écriture que tu dois être le seul à utiliser. Qui plus est, il n'est pas besoin de définir amis les opérateurs d'injection (grâce aux accesseurs) et les opérateurs d'extraction grâce aux constructeurs (bon moyen d'ailleurs pour avoir une lecture atomique).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // extracteur simplifié, atomique, et avec 0 amitié
    std::istream & operator>>(std::istream & is, Point p)
    {
        int x, y;
        if (is >> x >> y) p = Point(x, y); 
        // on utiliserait swap avec des types plus conséquents
        return is;
    }

    (p57) "Point:oint(double x, double y) : x(x),y(y) { }" hum ....


    _________
    Les posts arrivés pendant que je lisais/tapais/...

    C++/CLI va être le langage des API des prochains windows. Ouste le C qui va disparaitre petit à petit.

    Si tu veux leur dire comment cela ça passe en mémoire, pourquoi ne pas leur montrer par la même occasion comment on remplace le gestionnaire du free store ? :-/
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  16. #16
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Points : 2
    Points
    2
    Par défaut
    Merci pour les erreurs de syntaxe, il en reste malheureusement (et c'est toujours trop". C'est pour cela que je fournis tous les exemples du cours en téléchargements et avec les projets visual C++ et dev C++.

  17. #17
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Si au début C++ se voulait être un meilleur C, maintenant c'est un langage à part. On a bien 2 langages différents, vraiment différents. Il faut choisir : soit on fait du C, soit du C++, mais pas du C/C++. Vous êtes enseigant d'après ce que j'ai compris, et vous devez bien mieux savoir que nous la manière dont il faut enseigner les choses. Mais ici on voit passer beaucoup de débutants, étudiants ou non, qui mélangent C et C++ ce qui leur vaut différents problèmes. Selon moi, il vaudrait mieux enseigner C++ comme on enseignerait Java. Quand on parle de new en Java on ne parle pas de malloc. Car malloc c'est du C alors que là on parle de Java. Ben pour C++ c'est pareil. Dire que new appelle malloc est de plus infondé, à mon avis. Une implémentation de new pourrait très bien se passer de malloc et appeler une autre primitive de l'OS sous jacent comme HeapAlloc sous Windows.
    Enseigner le C/C++ revient à faire programmer en C au moyen de C++, c'est à dire à utiliser C++ comme un C enrichi. Or c'est bien plus que cela, et c'est passer à côté de C++. Personnelement, je pense que les heures d'enseignement de la programmation sont bien trop rares pour les "gaspiller" à faire manipuler les char * en C++ par exemple, au lieu d'étudier et de donner le réflexe std::string et STL.
    Avis totalement personnel : les char * devraient être enseignés en dernier, afin que le programmeur découvre leur danger et la raison de les éviter en se cassant les dents dessus après avoir utilisé sans problème std::string un certain temps. Car dans l'autre sens, la désintoxication char * est très dure, surtout quand on est étudiant et que les programmes que l'on a fait n'exèdent pas quelques centaines de lignes, auquel cas on mesure mal les problèmes soulevés par l'utilisations de multiples pointeurs.

    Je salue votre initiative de venir sur un forum, acte trop rare selon moi de la part des enseignants en informatique. A ce sujet je me permet de vous suggérer quelques idées de TP que l'ancien étudiant que je suis aurait aimé faire:
    - 1° partie: chaque étudiant, tout seul, doit faire un programme pas trop dur, tel que trier une liste de mots contenus dans un fichier. les programmes sont remis au professeur. Si pas fini => expiration du délais, comme en entreprise, ça se paye en heures sup.
    - 2° partie : on mélange les programmes, chaque étudiant doit poursuivre le travail d'un autre tiré au hasard. Ajouter une fonctionnalité simple telle que trier par ordre croissant ou décroissant. Avant de mélanger les programmes, faire estimer par chaque étudiant le temps que cela va demander de modifier son programme. Ensuite comparer l'estimation de auteur avec le temps passé par le modifieur...
    - Final: donner la solution C++ qui tient en quelques lignes et prend 10 minutes à coder / tester. => faire prendre conscience de ce qu'est C++, de ne pas réinventer la roue / partir sur une usine à gaz, etc...

  18. #18
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Points : 180
    Points
    180
    Par défaut
    Remarques globales sur C++ de base.

    Avant de parler de la pratique, plongez vous un peu dans la notion OBJET ! Au pire, faites un renvoi vers le cours sur le C pour les types, fonctions, tableaux et autres...

    Vous ne parlez pas de passage par reference dans le chapitre sur les fonctions, d'ailleurs rien non plus sur passage par pointeurs.

    Globalement je presenterai le cours de la maniere suivante :

    1. Objet
    2. Types de base & operateurs
    3. Switch, for, while, if & co
    4. Pointeurs & references
    5. Allocation de la memoire (new)
    6. Fonctions
    7. Tableaux statiques & dynamiques
    8. Classes
    9. Surcharge
    10. Heritage
    11. Polymorphisme
    12. Interfaces
    13. Bibliotheques

    Remarques precises sur le Cours C++ base :

    Chapitre 1 / Slide 2 : mauvais francais.
    Chapitre 1 / Slide 8 : faute : Il faut bien maitriser et non maitrisé
    Chapitre 1 / Slide 10 : faute : un certain nombre, sans s
    Chapitre 1 / Slide 12 : faute : une fonction appelée

    Chapitre 2 / Slide 19 : parler de l'operateur +=, i+=2
    Chapitre 2 / Slide 32 : for a une utilisation plus large, notament pour toute boucle necessitant une initialisation, une condition et une expression à executer à chaque iteration. exemple : for(j= 0, b= c->GetFirst(); j< 10; j++, b = c->GetNext();
    Chapitre 2 / Slide 56 : non un char est un entier 8 bits qui peut prendre 256 valeurs

    Chapitre 4 : Avant de parler de tableaux, parlez des pointeurs et de l'allocation de la mémoire.

    Chapitre 5 : Il est fortement deconseillé, en c++, d'utiliser le char* pour la representation des chaines de caracteres. std::string est fortement conseillée.

    Chapitre 7 : Ne faites pas peur aux etudiants avec les pointeurs, c'est la base de tout le langage C/C++. Il est essentiel d'instaurer un climat de confiance dans l'utilisation des pointeurs.

  19. #19
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Points : 2
    Points
    2
    Par défaut
    Aie ne pas vouloir aller trop vite !
    Prendre un public de bachelier et leur parler de STL au troisième cours cela se fait mais "passe mal" avec des étudiants débutants. Il faut bien voir que pour eux, ils ne connaissent que word un mois avant ! Je connais des cours de C++ où en 20 h on a vu tous les concepts du pur C++ normalisé et où effectivement on parle d'héritage et de virtualité au dixième transparents. Il m'est arrivé de passer derrière : on pose un problème élémentaire et les étudiants ne savent rien faire. Vous, vous les voyez jamais ces étudiants car ils se plantent dans leur études. Regardez le taux d'échec dans l'ex DEUG ! On est allez trop vite et on n'a pas compris qu'il faut commencer par des choses simples.
    Je prends acte de votre point de vue qu'apprendre de C est inutile et qu'on perd son temps ! C'est possible par contre je connais des enseignants qui on essayé de commencer par le C++ avec un public 18-20 ans : beaucoup d'échecs et j'en connais des tonnes qui sont revenu en arrière. Je connais aussi beaucoup de cours de C++ si ambitieux qu'à la fin 7 étudiants sur 10 n'ont rien compris ! Il ne faut pas conclure trop vite et je respecte votre point de vue. Faites aussi attention que "casser du prof" est facile et que je passe moins de temps que beaucoup d'entre vous (les étoilés) à programmer !
    Savoir manipuler les chaînes sous forme de char * permet d'approfondir l'algorithmique : comment transformer une chaîne en un entier par exemple ? L'algo est simple mais les étudiants galèrent pour le trouver.
    Si cet étudiant n'a jamais fait cet exercice pensez vous qu'il sera bon en algo ? L'algo est peut être inutile ? Je suis d'accord il y des fonctions qui font ça tout seul mais il faut aussi bien voir que les exercices "inutiles" où on "gaspille" du temps forme leur esprit au raisonnement algorithmique. Si on leur donne des recettes toute faites ils seront nuls en algo à la fin. Dès qu'une fonction ne sera pas disponible dans leur bibliothèque de fonctions, ils seront perdus. Vous les embaucheriez comme programmeurs !
    Je pense qu'il faut faire attention à une chose : on pense souvent de l'extérieur et quand on a 10 ans de C++ derrière soi que la programmation c'est simple à apprendre mais non c'est compliqué ! On ne peut pas tout traiter : il faut commencer par des choses élémentaires.
    Deux écoles effetivement sont possibles :
    1) on commence par les choses avec tous les concepts bien comme il faut
    et petit à petit on explique comment ça marche.
    2) On commence par les choses simples ( ce que vous appelez usine à gaz), on explique les insufissances et on montre un nouveau concept qui va combler ces insuffisances.

    Pour moi, il n'y pas photo : l'approche 2 est préférable pour la majorité
    l'approche 1 est élitiste !
    PS : j'ai été formé par l'approche ultra élitiste (pas en programmation mais en mathématiques)- j'ai vite compris les insuffisances pour la majorité de cette approche.

  20. #20
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 22
    Points : 2
    Points
    2
    Par défaut
    merci mtopoloff pour le plan.
    C'est une possibilité. Par contre la difficulté que je vois, c'est qu'on a pas de tableaux avant le chapitre 7 : comment faire des exercices concrets dans un tel cas ? C'est à étudier....
    merci

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/10/2014, 19h01
  2. Réponses: 1
    Dernier message: 05/09/2014, 13h54
  3. [Livre] SQL pour Oracle - Avec exercices corrigés
    Par Invité dans le forum Livres
    Réponses: 0
    Dernier message: 11/06/2014, 09h50
  4. Cherche cours algo et POO avec exercices
    Par lepiou dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 14/04/2008, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo