|
Publicité ' | ||||||||||||||||||||||||
|
|
#141 | ||||
![]() ![]() Étudiant Inscription : février 2006 Messages : 1 076 ![]() |
Citation:
Code :
Citation:
Il faut toujours faire des choix quand on enseigne la programmation, le C n'échappe pas à la règle.
__________________
"En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock) Application : ainsi qu'à regarder la avant de poser une question.La rubrique Perl recrute, contactez-moi. |
||||
|
|
00
|
|
|
#142 | |||||||
![]() ![]() ![]() Inscription : juin 2006 Messages : 6 934 ![]() |
Citation:
Pourquoi ressort on toujours l'exemple de la factoriel ? C'est une fonction tellement simple que ce n'est pas marrant. Si l'on réflechit à un vrai problème, c'est au contraire souvent beaucoup plus délicat de donner une solution purement fonctionnelle. Par exemple : serveur d'échanges de fichier, je te mets au défi de trouver des implémentations purement fonctionnelles. En parlant d'outils mathématiques, si l'on travaille avec des matrices, on voit plutôt un parcours de tous les champs un par un sous forme impérative que sous forme fonctionnelle (même si des algorithmes fonctionnels existent, ils sont en général moins naturel) Si l'on doit ajouter à une matrice le numéro de ligne pour chaque cas, tu penses plutôt : Code :
Code :
__________________
Je ne répondrai à aucune question technique en privé |
|||||||
|
|
00
|
|
|
#143 | ||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Citation:
Ton exemple est très moche. À titre personnel (et tant que possible, je privilégie le fonctionnel pur), j'écrirais (F#) : C'est très fonctionnel : il n'y a pas d'effet de bord, il y a une fonction d'ordre supérieur et il y a une évaluation partielle. C'est également plus sûr : il n'y a pas de problème de dépassement (qui arrive quand on se trompe dans les indices). Edit : Il ne faut croire que fonctionnel = récursif. Quand je peux éviter la récursion, je le fais et je passe par une fonction d'ordre supérieur. Si je devais écrire une factorielle, j'écrirais plutôt (Haskell) : |
||
|
|
00
|
|
|
#144 | ||
![]() ![]() ![]() Inscription : juin 2006 Messages : 6 934 ![]() |
Citation:
Si le fichier n'est pas déjà chargé en mémoire ouvrir le fichier Lire dans le fichier Envoyer ce qui a été lu ... Citation:
Mais heureusement, les langages fonctionnels ne se limitent pas à ça.
__________________
Je ne répondrai à aucune question technique en privé |
||
|
|
00
|
|
|
#145 | |
![]() ![]() ![]() Inscription : juin 2006 Messages : 6 934 ![]() |
Citation:
Tu es sûr que ça marche ? Mon algo devait ajouter le numéro de la ligne courante et pas 1 à chaque case. EDIT : Oh oui, mon exemple est aussi inutile que moche
__________________
Je ne répondrai à aucune question technique en privé |
|
|
|
00
|
|
|
#146 | |
|
Membre éprouvé
![]() Ingénieur systèmes et réseaux Inscription : août 2007 Messages : 509 ![]() |
Citation:
Et si vraiment après 4 séances de C, les étudiants ne comprennent tjrs pas , c'est qu'il y'a un problème. Et je trouve que les warnings générés avec l'option -Wall de gcc te poussent à vraiment à chercher et à coder proprement. |
|
|
00
|
|
|
#147 | |||||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Ah oui, j'avais lu trop vite. Il faut plutôt écrire :
Citation:
Si tu souhaites éviter toute fonction prédéfinie et utiliser une structure impérative, alors oui, un langage impératif se débrouillera mieux. Mais quand on n'a pas les pieds liés, le fonctionnel répond correctement à la plupart des besoins. Citation:
Code :
Citation:
|
|||||
|
|
00
|
|
|
#148 | |
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Citation:
Je n'ai de cesse de le clamer à qui veut l'entendre. Mais bon, dire à une assemblée des profs « on va faire du procédural dans le premier cours comme ça on garde C++ » passe beaucoup mieux que « on va faire du fonctionnel alors il faut prendre du Scheme » ^_^ |
|
|
|
00
|
|
|
#149 | |
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Citation:
Par contre, je te ferais remarquer que 2000 ans de mathématique on été faite en fonctionnel... donc dire que c'est plus délicat semble un peu surfait. Il y a certes des problèmes qui peuvent te sembler moins aisé, mais as-tu pratiqué longtemps le fonctionnel pour trouver une réponse à ce que tu donnes ? Parce que si tu regardes l'histoire des mathématiques, la solution de ta somme de matrice a déjà été défini de manière purement fonctionnel... Bien avant qu'on ait réfléchi à la possibilité de le faire autrement. En fait personne, il y a 100 ans n'aurait réfléchi comme tu viens de le faire. Comment se fait-il si c'est plus simple en itératif ? Ton exemple est donc très mauvais, autant que le factoriel est un mauvais exemple pour montrer l'intérêt des fonctions récursives (car c'est ça que ça montre). Si je veux montrer l'intérêt du récursif, je leur fait dessiner une fractale. Et là, il n'y a pas photo. Je ne dis pas que le fonctionnel est la seule chose à apprendre... attention. Il faut multiplier la connaissance des outils pour choisir le plus approprié dans une situation. Mais le fonctionnel a l'énorme avantage d'avoir été présenté aux étudiants depuis qu'ils font des maths. |
|
|
|
00
|
|
|
#150 | ||||
![]() ![]() ![]() Inscription : juin 2006 Messages : 6 934 ![]() |
Citation:
![]() Citation:
Citation:
Citation:
__________________
Je ne répondrai à aucune question technique en privé |
||||
|
|
00
|
|
|
#151 | |||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : novembre 2005 Messages : 4 970 ![]() |
Citation:
Citation:
Citation:
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|||
|
|
00
|
|
|
#152 | |
![]() ![]() Inscription : juin 2004 Messages : 5 850 ![]() |
Citation:
Il n'y aurait pas de problème si on commençais par la base : les fonctions, on arrive aux paramètres puis tout naturellement aux pointeurs. Après ça on peux jouer
__________________
gege2061's blog |
|
|
00
|
|
|
#153 | |||
![]() ![]() ![]() Inscription : juin 2006 Messages : 6 934 ![]() |
Citation:
On est arrivé à écrire le code suivant : Code c :
Et devinez la question ? Pourquoi la chaine Hello world ne s'affiche pas. Les cours étaient très orientés sur des parties techniques délicates à appréhender plutôt qu'un apprentissage rapide des fonctionnalités du C sans vraiment savoir comment ça fonctionnait en dessous (en prenant les matchs un par un)
__________________
Je ne répondrai à aucune question technique en privé |
|||
|
|
00
|
|
|
#154 | |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 978 ![]() |
Citation:
on n'a jamais dit que les écoles d'ing ne manquaient pas de pédagogie
|
|
|
|
00
|
|
|
#155 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : janvier 2007 Messages : 9 651 ![]() |
bon j'interviens juste un p'tit peu, puisque de toutes façons mon opinion (et mon age) me mettent dans la catégorie des vieux croutons...
![]() En ce qui concerne la question originale, j'aurais tendance à dire (par histoire personelle) : le Fortran pour plusieurs raisons Quasi le plus ancien et toujours en usage introduit toutes les notions nécessaires (variables, fichiers, tableaux, programmes, sous-programmes, fonctions, données partagées) simple strict (plus utilise quelques notions utiles pour la suite (équivalences par exemple)) Puis, passer au C : chemin logique, mêmes notions, plus 2 : les pointeurs et les void. et enfin si on veut au C++.. Je ne suis absolument pas d'accord que c'est "proche du système". Et par rapport aux remarques sur les langages fonctionnels, je me permet de soulever que l'écriture d'une équation mathématique en Fortran ou en C est beaucoup plus semblable à ce qu'on écrit sur du papier qu'à ce que je vois d'expressions utilisées par Haskell (entre autres). Une fois ces 2 langages introduits et maîtrisés, on a à sa disposition la CONNAISSANCE de COMMENT en gros PEUT fonctionner un programme (avec le fonctionnement de la mémoire, les entrées/sorties, etc). Là on peut s'occuper de choses comme de l'objet ou du fonctionnel. Ce qui m'attriste beaucoup dans un GRAND nombre de cas que je vois de gens n'ayant appris que du C++ c'est qu'en gros ils n'ont aucune notion des LIMITATIONS imposées par la machine, et que quel que soit leur code, il sera retranscrit en langage machine, et donc qu'on ne peut pas faire PLUS que ce que peut faire la machine... La deuxième chose qui m'attriste est que (et j'en ai le cas en ce moment même sous les yeux) on peut faire ENCORE PLUS COMPLIQUE en C++ qu'en C, car les classes, les composantes, les iterateurs, et autres méthodes ne sont que des OUTILS... Ce qui est important est la MODELISATION et la pensée cohérente de ce qu'on veut faire... Donc un découpage en classes et une programmation à base de composantes n'est DE LOIN pas forcément plus claire et compréhensible qu'un découpage fonctionnel bien fait.. NB: je suis CERTAIN que quasi-personne ici-même ne se rend compte que les COMMON Fortran existent sur tous les systèmes (au moins unixoides) et sont gérables par TOUS les langages...(par principe même)....
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
00
|
|
|
#156 | |||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
M'apparait bien plus proche de la notation mathématique que : Code :
-- Jedaï |
|||
|
|
00
|
|
|
#157 | ||
![]() ![]() Étudiant Inscription : février 2006 Messages : 1 076 ![]() |
Attention, je ne me fais pas le défenseur du fonctionnel, je dis juste que je trouve le fonctionnel beaucoup plus proche de la pensée mathématique que l'impératif
Un autre exemple, toujours aussi mathématique : la fonction dérivée (très très naïve, je vous l'accorde) : Code :
deriv f h = \a -> (f (a + h) - f a) / h Après, dès qu'on s'éloigne des mathématiques, je trouve que l'impératif est très adapté aux problèmes informatiques, comme pour reprendre l'exemple de millie les serveurs : Code Perl :
Difficile de faire plus compréhensible... Pour publicStaticVoidMain : tu es sûr que tu te rappelles de tes débuts en informatique ??? Sachant qu'il y a des personnes qui ont moins de 16h de programmation derrière eux (premiers cours, comptez dans les séances l'historique et les divergences), tu veux déjà leur faire apprendre comment accéder aux paramètres de main() ? Je ne voudrais pas t'avoir comme prof dans une matière que je ne maitrise pas... Pour revenir sommairement au sujet, je dirais que c'est bien plus une question de pédagogie que de langage... J'ai très mal appris (en autodidacte je précise) le C++ par exemple : je me suis retrouvé dans un code C++ à faire mes chaînes de caractère avec des tableaux de char, je n'ai quasiment rien vu de la STL (même pas les vector et les lists, c'est dire !)... Globalement, je trouve que le C++ est trop souvent mal enseigné en tant que premier langage : comme du C avec des classes... Apprendre le C en premier langage se défend aussi très bien, je ne vais pas redonner les arguments de chacun.
__________________
"En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock) Application : ainsi qu'à regarder la avant de poser une question.La rubrique Perl recrute, contactez-moi. |
||
|
|
00
|
|
|
#158 | |||
|
Membre Expert
![]() Inscription : mars 2002 Messages : 962 ![]() |
Citation:
Citation:
Citation:
À l'opposé, un langage comme Lisp n'a pas été conçu à partir de l'assembleur, mais plutôt à partir d'un modèle théorique. En Lisp, on ne se pose pas la question de déplacer des pointeurs ou de mettre un 0 à la fin d'une chaine. On se fiche aussi de mot-clefs comme sizeof. Utiliser un langage comme le C nécessite de comprendre le fonctionnement du système. Utiliser un langage fonctionnel nécessite de connaitre les bases du raisonnement. |
|||
|
|
00
|
|
|
#159 | |||
|
Inactif
Inscription : juillet 2005 Messages : 1 958 ![]() |
Citation:
Code :
Maintenant est aussi nécessaire si tu veux pouvoir ouvrir un fichier avec un nom mis dans une string, sachant que les tableaux de caractères sont plus une plaie qu'un plaisir. Encore une fois, il faut que tu te mettes au niveau de personne qui viennent de bio par exemple et qui ont un cours obligatoire en C++... la vie n'est pas toujours drôle pour eux dans ce cours |
|||
|
|
00
|
|
|
#160 | |
![]() ![]() Étudiant Inscription : février 2006 Messages : 1 076 ![]() |
Citation:
Les deux paradigmes sont bien entendu envisageables. C'était juste pour préciser que je ne dénigrais pas l'impératif. C'est terrible, dès qu'on dit qu'un paradigme est bien, on nous rétorque que l'autre aussi
__________________
"En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock) Application : ainsi qu'à regarder la avant de poser une question.La rubrique Perl recrute, contactez-moi. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com