Ptit exercice en C

Comme les quizz en tout genre fleurissent par ici (cf le thread sur les jeux vidéos et les dessins animés) je me lance dans une autre sorte de quizz. Comme j’ai un prof de C complètement barjo je vous file un de ses exercices.

Of course l’exercice est à faire SANS compilateur et je veux les détails .

Amusez vous bien

Qu'affiche le programme ci-dessous?

#include <stdio.h>

char
*c[] = {“comprendres”, “les”, “pointeurs”, “c’est”,

“difficile”};

char
**cp[] = {c, c+2, c+4, c+1, c+3};

char
***cpp = cp;

void
main(void)

{

int
i;

/* 1 */ for (i = 0; i < 3; i++)

/* 2 / printf("%c",(**cpp+i));

/* 3 / printf("%c",(*cp[0]+2));

/* 4 */ printf("%s ",*cpp[2]+8);

/* 5 / printf("%s ",++*++cpp);

/* 6 */ for (i = 1; i < 4; i++)

/* 7 / printf("%c",(cpp[-1][i%3]+2));

/* 8 */ printf("%c",**–*cpp);

/* 9 */ printf("%s
",**++cpp+7);

}

[/quote]

Comme c’est simple

On reconnait bien la l’humour d’un prof de prog. J’imagine qu’il vous a aussi déjà fait le coup du “bravo vous avez trouvé”

Le pire c’est qu’il ose vous apprendre ça. Moi si un codeur de mon équipe me sortait du code comme ça, ce serait la porte de suite Faut pas déconner, au dela d’une certaine complexité, il ne faut pas faire, même si le langage le supporte. Enfin bon…

tuo : tiens, en parlant de ton equipe, j’ai toujours pas recu de reponse au mail que j’ai envoyé a ta boite.

je te mets ca ici car je sais que tu check pas des PM

Ah ? mmmh ton mail a été repéré pourtant (t’as bien fais d’indiquer mon nick ) et il a été trouvé interessant, cela dit moi je l’ai pas reçu (j’ai pas du checker au bon moment).

Faudrait peut être que tu le renvois, cela dit comme je te l’avais déjà annoncé à l’époque : ne t’attends à pas grand chose dans les semaines a venir, il faut être patient dans ce milieu :stuck_out_tongue:
Ce message a été édité par tuo le 21/01/2004

totalement stupide comme exo, j’ai pas la force de chercher mais ce qui
me fait rire, c’est que je vais surement tomber sur un truc de ce genre
au partiel car lors de l’intero, j’avai presque le même. En tout cas,
votre prof vous apprend peut-être à comprendre les pointeurs mais
certainement pas à coder proprement, lisiblement et d’une facon
optimisé pour le processeur ce qui me semble bien plus intéressant d’un
point de vue pédagogique que des exos à la con avec des pointeurs de
tableux de chaines de caractères dans tous les sens.

C’était mon coup de gueulle contre les profs qui s’amuse à nous faire
faire des conneries de ce genre plutot que de vrai truc intéressant et
surtout Utile.
En tout cas, c’est surtout ce que je remarque en FAC (licence) car en
IUT, on faisait des vrais exos et des vrais projets pouvant être
appliqué à la vrai vie dans une entreprise et non pas des exos de type
"scolaire" comme celui-ci.
Ce message a été édité par ZGoblin le 22/01/2004

Vous voyez vraiment le mal partout.

Si cet exo est UNIQUE (j’veux dire par là qu’il t’en donnera jamais qu’un seul sur ce sujet précis, pour que, justement, tu captes les pointeurs), c’est plutot un bon exercice.
Même s’il faut peut-être se faire aider par le caïd du C de la promo, je pense que si tu fait réellement l’exo, tu comprendras les pointeurs (surtout si la correction est elle aussi de qualité, avec des schéma au tableau et tout).
Petit défaut de l’exo : il utilise jamais l’opérateur & pour “remonter”, mais c’est pas très grave (mais du coup, c’est incomplet).

Donc si cet exo n’est donné qu’une fois, je ne vois pas le mal.

Après, il faut voir à qui on s’adresse aussi. Si le prof vous sort “faites moi une table de hashage” (juste comme ca, sans aide à part la description d’une table de hashage), meme si les eleves connaissent la syntaxe, les pointeurs, tout ca, certains n’y arriverons JAMAIS car ils ne sauront pas par où commencer. Meme avec l’algo “en français”, certains n’y arriveront pas, soit dit en passant.
Alors apprendre la syntaxe c’est bien, c’est necessaire, mais non suffisant; après il faut apprendre aux élèves à programmer, à “imaginer” un programme; et ca, c’est beaucoup plus difficile à apprendre à toute une classe (du moins je le pense)

Cet exo est marrant, donc, est surement bon pour un élève qui ne connait pas les pointeurs, en revanche ca n’apprend pas à programmer, et ce n’est pas le but, tuo.
c’est pas commenté, certes, mais c’est bien l’interet de l’exo aussi (Apprendre à programmer, c’est aussi arriver à comprendre le code d’un autre)

Ce message a été édité par urdle le 22/01/2004

Donc ce que tu dis en substance c’est : “ok cet exercice montre les pointeurs en situation, ça permet d’apprendre à les manier et à reprendre le code des autres” si j’ai bien compris.

Le soucis, c’est que ce genre de code, si quelqu’un le ponds, il devrait, à mon sens, être viré. Pour faute grave par exemple. Familiariser les étudiants qui, comme tu le dis, n’y connaissent pour certains pas grand chose avec ce genre de syntaxe revient à banaliser ce genre de chose (nul part dans l’énoncé je vois écrit “vous voyez que c’est pas bien d’écrire du code pas propre comme ça”). Et ça contribue a donner de mauvaises habitudes de travail.

J’ai eu l’occasion de travailler avec des stagiaires de pas mal d’écoles, et j’ai vu ce genre de syntaxe “universitaire” un nombre de fois que m’a fait paniquer : si c’est ça que forment les écoles françaises, ben excusez moi mais j’embauche plus moi. Je n’ai pas fais de hautes études ni rien, mais j’ai assez de bon sens pour éviter les syntaxes qui posent problème (j’ai appris à la dure, en faisant ces erreurs moi même et en me les reprenant dans la gueule : ça dissuade rapidement).

Donc pour moi, cet exercice est symptomatique de la manière dont l’enseignement est fait dans les universités : ça cible parfaitement l’objectif visé (dans ce cas la le maniement des pointeurs), mais ça laisse totalement de coté ce qui doit s’apprendre sur le long terme (les méthodes de travail, le soin à apporter à la lisibilité de son code, …) qui ne sont pas l’objectif de l’exercice.

Pour moi, un BON exercice est un exercice qui cible parfaitement son but, tout en mettant en oeuvre un contexte propice à l’apprentissage des autres choses autour.

Disclaimer : voila, c’est mon avis, je le partage avec moi même, et ça n’engage en rien mon employeur patati patata, pas la peine de m’insulter pour me faire changer d’avis, discuter calmement suffira Je ne cherche pas non plus à VOUS faire changer d’avis, juste à exposer MON avis basé sur MON expérience.

(je prends des précautions, des fois que certains veuillent se venger sur moi avec des sorts voudou…)

tuo : ok , comme je n’avais pas de reponse au premier, je ne savais pas si :

  • vous l’aviez pas recu

  • vous l’aviez recu, mais n’etiez pas interessé

  • vous l’aviez recu, mais n’aviez pas le temps de le traiter

Bref, j’en revoie un. Prenez juste deux secondes pour faire un reply, que je sache qu’il est bien en traitement, meme pour dire "ok, c’est noté, mais ca peut prendre du temps "

Sinon, t’inquiete pas, je sais qu’il ne faut pas attendre mont et merveille, le tout, c’est de voir ensemble, si mon CV vous semble interessant, ce qu’on peut faire

pour repondre au theme du thread : dans ma vision des choses, un bon code est un code clair. Je supporte pas un (if (++i) == (tab[i]) …)

ca sert a rien, et c’est obsure. Pareil pour les pointeurs, un code comme celui du dessus est pourri. Et qu’on vienne pas me dire que gnian gnian gnian, c’est plus efficace. A part pour des appli bien precise (system en general, scheduleur tout ca, et encore), le gain et tout minim et surtout le code devient inmaintenable.

MAIS

c’est un exo. Le but et de faire comprendre comment les pointeurs marchent, ce que ca fait reelement en memoire. Et je trouve que c’est un bon exo tant que son but est clair. l’intro de cet exo pourrait etre : “Voici du code de merde, volontairement obscure, mais dont le but est de vous faire comprendre ce qui se passe reellement a l’interieur de la machine”.

Dans ce sens la, je trouve ca plutot pas mal. Apres , pour apprendre ce qu’il faut faire, pas faire, c’est dans les cours de geni log qu’on voit ca.

c’etait ma modeste contribution.

[quote]Donc pour moi, cet exercice est symptomatique de la manière dont l’enseignement est fait dans les universités : ça cible parfaitement l’objectif visé (dans ce cas la le maniement des pointeurs), mais ça laisse totalement de coté ce qui doit s’apprendre sur le long terme (les méthodes de travail, le soin à apporter à la lisibilité de son code, …) qui ne sont pas l’objectif de l’exercice.

J’aurai tellement de milliards de choses à dire sur les symptomes de l’enseignement de l’informatique dans les universités que je ne saurai pas par ou commencer. CEPENDANT, je suis pas d’accord avec toi sur ce point précis, et urdle résume bien le truc. Je prends mon exemple, on a fait du C, mais on a survolé les pointeurs. Quand je dis survolé, c’est voir a quoi ca sert, et comment on s’en sert. Des petits exos tout betes pour voir si t’a bien compris a quoi ca servait et hop, allons faire du java.

Et c’est stupide. Bien entendu, je ne dis pas qu’il ne faut pas s’apesantire sur les bases, genre le calcul en base N a la main, c’est con. Surtout quand t’en fait pendant 3 mois. Mais les pointeurs c’est fondamental, et même si on ne les utilise plus dans certains langages de haut niveau, ils sont toujours sous jacents. Bref pour en revenir a l’exercice, le mec qui arrive a comprendre l’exercice, je me fais pas de soucis pour lui, il a VRAIMENT compris le principe des pointeurs. Et c’est le but des exercices. Ce ne sont pas des méthodes de travail a reproduire comme tu le sous entends, il y’a d’autres cours dédiés à ça.

Bref, pas tout mélanger Y’a tellement de bonnes raisons pour cracher sur l’enseignement universitaire…

Par hasard, c’est possible d’avoir une correction détaillée ? Parce que moi je m’en rappelle plus de tout ça… et j’ai jamais été aussi loin.  

C_Wizard : je PARIE que tu n’as jamais eu à coder avec un stagiaire toi. Moi si Sache que la forme d’un exercice est aussi important que le fond, parce qu’il habitue tout simplement celui qui résoud cet exercice à une certaine syntaxe (surtout que je doute fortement que ce soit le seul exercice de ce style qu’ait donné ce prof).

Vouloir dissocier a tout prix le fond de la forme est justement l’un des problèmes de l’université à mon sens. Ca lui aurait couté QUOI au prof de présenter le même exercice de manière bien plus intelligente ? A commencer à utiliser des noms de variable qui tienne la route, puis par des utilisations de cas concrets utilisés en production, etc.

La grande majorité des gens qui suivent ces cours n’ont JAMAIS codé par eux même avant. Ils vont donc appliquer bêtement ce qu’ils ont appris, notamment au cours des exercices. Et on va donc retrouver des “*(**c+1)” dans le code de stagiaires. Et ça, moi je dis non. Et ne me dis SURTOUT PAS “mais non ils sont pas cons les étudiants ils voient bien que c’est pour donner un exemple”. Parce que ça je l’ai vu de mes yeux quand j’étais à la fac d’une part et depuis que je bosse d’autre part. Et je n’en reviens toujours pas. Tu n’imagine MEME PAS le temps que prendre de changer les habitudes de ces personnes par la suite, et l’argent que ça coute aux boites qui les embauchent. Sans parler des crises de nerfs des gens qui le font.

Je suis moi même à l’unif en info en dernière année et je suis d’accord pour dire que ce code est naze. Enfin, je suis à l’unif en Belgique aussi, je peux pas vraiment savoir comment ça se passe chez vous. Chez nous, on nous demande plutôt de faire des projets semi-professionels. En fait, on a pas mal d’étudiants français qui viennent étudier chez nous.

Sinon, si un étudiant en info veut s’en sortir, il doit aussi apprendre à programmer par lui même et pas se contenter de faire les exos demandés. Et ça j’en vois tous les jours des mecs qui ne font rien de plus et au final ne pigent rien. Forcément, puisque dans les projets on se retrouve la plupart du temps à devoir corriger leurs codes copiés/collés incompréhensibles qui marchent pas mais qui devraient marcher.

[quote]Le soucis, c’est que ce genre de code, si quelqu’un le ponds, il devrait, à mon sens, être viré.

oui, ca c’est dans un monde parfait… tu as souvent eu a reprendre du code pour de la modif majeur ou meme de la maintenance… des truc codé avec les pieds j’en ai vu des dizaines (je serai tenter de dire centaines meme…), et tu doit faire avec quite a modifier tout le prog, et en plus si c’est coder avec les pieds 99% de chance que ce ne soit pas documenté…

donc oui il faudrait viré et meme executer les personnes qui osent pondre des conneries du style , mais malheureusement ca existe et beaucoup trop a mon gout.

autrement sur l’exercice je rejoins a 100% l’avis de C_Wizard, cet exercice sert a comprendre les pointeurs, non a les utiliser.

Ce message a été édité par azacreel2 le 23/01/2004

Et comme C_Wizard, tu dissocies le fond de la forme, ce que ne FONT PAS les étudiants qui suivent ces exercices bêtement. Et ils sont la majorité.

[quote]La grande majorité des gens qui suivent ces cours n’ont JAMAIS codé par eux même avant.

C'est ca le fond du problème :P Parce que le stagiaire a une manière de coder qui lui a été donné par le prof (admettons dans le cas que tu cites en tout cas, car c'est loin d'etre une généralit&#233[img]style_emoticons/<#EMO_DIR#>/wink.gif[/img]. Quelle est la bonne méthode pour apprendre la prog ? L'autodidactisme, ou l'université ? C'est un vieux débat. Une chose est sure, juste l'uni, c'est pas assez, et si ton stagiaire n'a que ca comme expérience, oui, tu va devoir le former. C'est un peu aussi le but du jeu, l'uni c'est une formation généraliste et l'étudiant peut aussi bien finir chef de projet visual basic que codeur de drivers sous linux (mes condoléances). Bref, va former ton gars [img]style_emoticons/<#EMO_DIR#>/wink.gif[/img])

C’est vrai qu’il me semble que le stage est fait pour former un jeune au boulot réel. Donc, il faut pas s’attendre à tomber sur un mec qui code aussi bien qu’un autre qui a 5 ans d’expérience.

Il en reste pas moins qu’avec des methodes adaptees et des efforts loin d’etre insurmontable on pourrait faire des exos plus adaptes et plus revelateur de ce qu’est du “bon code” et je rejoins completement tuo. C’est pas parcequ’un exo porte sur un point donne qu’il faut completement ignorer tout le reste. On forme pas les gens a coup de petits points un par un, pour former un tout, une bonne formation est homogene et montre tout le temps ce qui est “bien” ou alors quand c’est vraiment necessaire precise en preambule pourquoi on fait du code “crade”, pour apprendre un point particulier. Ici rien de tout ca, et c’est une pratique courante qui continue tout au long de la formation. Un bien meilleur resultat pourrait etre obtenu en ayant des profs qui ont un vague concept de ce que c’est que de coder du code pour faire de la production et pas juste des “proof of concept” ou du code “universitaire”. On est tres loin d’en etre la, et si personne ne remet en cause qu’un stagiaire code pas aussi bien qu’un codeur avec 5 ans d’experience et qu’il est la pour apprendre il en reste pas moin qu’avec une formation adequate un stagiaire pourrait arriver a faire du code qui s’approche du mec avec 5 ans d’experience, et le mec avec 5 ans d’experience du code de mec avec 10 ans d’experience… ca s’appelle monter la barre et faire progresser le niveau…
Ce message a été édité par GloP le 23/01/2004

[quote]ca s’appelle monter la barre et faire progresser le niveau…[/quote]Haltérophilie de compilation.

Pour ce que je connais du reste du monde, la scolarité tend, à travers des stages, à se rappprocher du monde du travail et contribue à débarasser l’universitaire de sa (sale) (mais justifiée) réputation de “pas rôdé pour le boulot”.

Moi, good, fils de l’alternance, trouve dans l’apprentissage une voie extrêmement efficace pour faire du personnel qui marche vite et bien. Et si c’est pas 5 ans, je dirais que les 3 ans d’alternance m’ont procuré n ans d’avance sur un type sorti d’école, parce que lui, quand il est en entreprise, il est salarié, soumis à résultat et il n’a pas le droit à la boulette, lui (gniark gniark).

Félicitons nous cependant que l’enseignement évolue, certes lentement, mais tout au moins dans une direction que je trouve saine (“Oui fiston, tu sera prof de sociologie des gallinacés…”, plus jamais ça) et adaptée au marché de l’emploi…

[quote]… j’ai un prof de C …[/quote]Je viens seulement de tilter là dessus. Vous avez un prof de c??? Vous avez aussi un prof de java, un prof de cobol, … ?

J’espère que non. C’est le meilleur moyen de ne se focaliser que sur les aspects d’un langage et de ne pas apprendre les principes de base de la programmation. Typiquement, on apprend à programmer de façon indépendante au langage. Ca permet de s’adapter et d’apprendre plus facilement un autre langage quand la nécessité s’en fait sentir. Enfin, c’est mon avis et je pense pas qu’il plaise à tout le monde.