#1001 Le 01/04/2013, à 22:00
- Dr Le Rouge
Re : /* Topic des codeurs [8] */
La prochaine fois j'y songerai, surtout avant de poster du code sur ce topic…
Rooooo, je vois pas le rapport : on ne connaît pas ton adresse
C'est deux suites de Cauchy qui veulent aller à la soirée 'no limit'. Hélas, à l'entrée le videur leur dit : "désolé, c'est complet !".
mon site perso (π²/6.fr) et mon blog
Hors ligne
#1002 Le 01/04/2013, à 22:08
- Pylades
Re : /* Topic des codeurs [8] */
Je parlais de la vraie norme, du C.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1003 Le 01/04/2013, à 22:13
- The Uploader
Re : /* Topic des codeurs [8] */
Je ne dis pas le contraire, mais il paraît que ça peut "causer des problème dans l'apprentissage du C" alors on doit s'en passer pour nos projets…
Ce qui cause des problèmes pour apprendre le C, c'est de mettre des bâtons dans les roues pour l'apprendre tel que interdire le for.
"Les pauvres petits ils vont être dégoutés du C à cause du for, vite interdisons-le !"
Et pourquoi pas prendre les étudiants pour des adultes plutôt que de futurs pisseurs de (mauvais) code ?
J'ai jamais rien vu d'aussi débile que la "norme" Epitech.
Dernière modification par The Uploader (Le 01/04/2013, à 22:13)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#1004 Le 01/04/2013, à 22:37
- :!pakman
Re : /* Topic des codeurs [8] */
Hey les codeurs : vous avez déjà eu à réaliser une recette technique d'un logiciel ?
Si vous avez des expériences, que je sache un peu, en pratique, comment ça peut se faire : je suis preneur
Dernière modification par :!pakman (Le 01/04/2013, à 22:37)
...
Hors ligne
#1005 Le 01/04/2013, à 22:59
- Etoma
Re : /* Topic des codeurs [8] */
nathéo a écrit :Je ne dis pas le contraire, mais il paraît que ça peut "causer des problème dans l'apprentissage du C" alors on doit s'en passer pour nos projets…
Ce qui cause des problèmes pour apprendre le C, c'est de mettre des bâtons dans les roues pour l'apprendre tel que interdire le for.
"Les pauvres petits ils vont être dégoutés du C à cause du for, vite interdisons-le !"
Et pourquoi pas prendre les étudiants pour des adultes plutôt que de futurs pisseurs de (mauvais) code ?
J'ai jamais rien vu d'aussi débile que la "norme" Epitech.
Je me dis que ma fac à de "bons profs".
C'était vachement basique comme cours, en fait c'était un cours de programmation, mais orienté algorithme. Et on apprenait le C en même temps.
On avait des restrictions au début, mais le prof les justifiait par rapport à ses cibles. Genre pas de pointer, pour nous obliger à utiliser des "tricks", par exemple l'utilisation d'une fonction pour cracher une liste à l'envers, ou des trucs du genre.
Finalement, il nous à tout expliqué vers la fin du semestre, mais les explications étaient beaucoup plus claires parce qu'on avait utilisé notre cerveau pour résoudre des problèmes.
Bon, pas mal on pas eu le partiel, parce que le prof en question était assez rigide niveau exercice, mais je ne regrette pas d'avoir eu un cours avec lui.
Et sinon, on avait le droit d'utiliser le for... Dès le début, surtout qu'on avait une avait une feuille d'exo qui se concentrait presque sur notre capacité changer des boucles while, do while, for...
Je comprends pas trop le problème avec for?
"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox
Hors ligne
#1006 Le 01/04/2013, à 23:54
- Pylades
Re : /* Topic des codeurs [8] */
Il n’y en a pas.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1007 Le 01/04/2013, à 23:57
- Etoma
Re : /* Topic des codeurs [8] */
Je reformule :
En quoi pourrais nuire for pour l'apprentissage du C? Pourquoi, techniquement for pourrait poser un problème dans la tête des écoliers de LU?
"un gars qui agit pour le bien des gens sans leur demander leur avis"
PirateBox
Hors ligne
#1008 Le 01/04/2013, à 23:58
- Pylades
Re : /* Topic des codeurs [8] */
Mais il n’y pas de problème. C’est juste la norme Epitech, faut pas chercher à comprendre.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1009 Le 02/04/2013, à 00:15
- nathéo
Re : /* Topic des codeurs [8] */
Je plussoie Pylade.
C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]
Hors ligne
#1010 Le 02/04/2013, à 04:07
- grim7reaper
Re : /* Topic des codeurs [8] */
Πυλάδης a écrit :nathéo a écrit :Je ne peux pas me permettre d'initialiser i, sinon l'usage de la statique perdrait tout son intérêt, puisque la progression dans la chaîne de caractère justement serait stoppée.
Je te conseille vivement de relire la norme à ce sujet, dan ce cas…
norme Epitech a écrit :Il est interdit d’affecter et de déclarer une variable en même temps, excepté lorsque
l’on manipule des variables statiques ou globales
• Abuser des static pour faire des globales est interdit. Toute variable statique doit
etre justifiée.Il me semble que l'utilisation des statiques est assez justifiée…
Non, clairement pas.
Là tu les utilises justement en tant que globales mal cachées (tuant au passage la réentrance).
Et comme le signale Πυλάδης, tu ferais bien de relire la norme du C (pas le torchon d’Epitech) car on dirait que tu ne maîtrises pas bien le mot-clef static.
Hors ligne
#1011 Le 02/04/2013, à 05:51
- Mindiell
Re : /* Topic des codeurs [8] */
Euh, on n'a pas l'adresse d'Epitech ?
Il nous faudrait quoi... une bonne dose d'eau bénite, quelques gousses d'ail et deux, trois crucifix, non ?
PS: j'ai pas trouvé sur leur site : le diplôme est agréé par l'état ou c'est comme l'Epita ?
Dernière modification par Mindiell (Le 02/04/2013, à 05:53)
Hors ligne
#1012 Le 02/04/2013, à 06:18
- Pylades
Re : /* Topic des codeurs [8] */
Non, c’est comme Epita.
Dernière modification par Πυλάδης (Le 02/04/2013, à 06:18)
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1013 Le 02/04/2013, à 07:09
- The Uploader
Re : /* Topic des codeurs [8] */
Payer des boules en or pour un diplôme même pas agréé et un enseignement 100% merdique (et encore, c'est pas gentil pour la merde).
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#1014 Le 02/04/2013, à 07:29
- grim7reaper
Re : /* Topic des codeurs [8] */
Epita est maintenant reconnu par la CTI, ça va faire quelques années (source).
Ils ont fait de gros effort sur leurs programme pour ça il me semble.
comme récemment (l’article date de 2010) EPITA qui devient une vraie école d?ingénieur CTI après 10 ans des démarches et qui rentre dans la cour des grandes écoles.
Par contre oui, Epitech n’est pas reconnu.
Dernière modification par grim7reaper (Le 02/04/2013, à 07:32)
Hors ligne
#1015 Le 02/04/2013, à 19:37
- Mindiell
Re : /* Topic des codeurs [8] */
Bon, on va tâcher de finir sur de meilleures paroles tout de même. La question du départ :
J'ai une petite question sur les pointeur et les tableaux en C, enfin, j'aimerai plus précisément savoir pourquoi les modifications que j'applique à des tableaux passés dans une fonction (swap_tab), ne se répercutent pas dans la fonction qui appelle swap_tab.
Donc là c'est la fonction qui est censée échanger la valeur des pointeurs pour les deux tableaux :void swap_tab(char *a, char *b, char *swp) { printf("\n\nvaleur de a avant swap : %s \nvaleur de b avant swap : %s \n", a, b); swp = a; a = b; b = swp; printf("\nvaleur de a apres swap : %s \nvaleur de swp : %s \nvaleur de b apres swap : %s \n\n", a, swp, b); }
Et la c'est l'appel de la fonction :
swap_tab(tab[i], tab[(i + 1)], swp);
En sachant que printf affiche que l'échange s'est bien effectué, dans la fonction swap_tab.
Alors, un pointeur qu'est-ce que c'est ? Un pointeur c'est une variable comme une autre, mais qui contient une adresse mémoire plutôt qu'une valeur. D'où l'utilisation de "*" pour le signifier au compilateur. Avec ça, on lui explique que l'on ne s'embarasse pas de la valeur stockée dans la variable (dans le pointeur), mais surtout de la valeur qui se situe à l'adresse mémoire correspondante.
Maintenant, comment fonctionne les appels de fonction ? Eh bien, avant l'appel de la fonction, l'ordinateur "sauve le contexte", c'est à dire qu'il va mettre de côté certaines choses comme là où il en est avant l'appel de la fonction pour pouvoir revenir après. Et surtout, à la fin, il stocke les paramètres de la fonction sur ce qu'on appelle la pile (stack). La fonction est ensuite appelée. La première chose que fait alors la fonction, c'est de lire les premières entrées de la pile afin de lire la valeur des variables. Et c'est kà que tout se joue !
En C, et en C++, les variables sont passées "par valeur", c'est à dire que la valeur est copiée sur la pile. Exemple simple :
int main(void)
{
a = 3;
f(a);
printf("%d", a);
return 1;
}
void f(int a)
{
a = 2;
}
Dans ce cas, la valeur de a (situé dans le main) est copiée sur la pile, puis relue par f, puis utilisée dans f. Mais à la sortie de f, a (situé dans le main) vaut toujours sa valeur, il n'a jamais été modifié !
Pour palier à ce problème, on utilise alors les adresses des variables :
int main(void)
{
a = 3;
f(&a); // Ici, je fournis l'adresse de la variable a
printf("%d", a);
return 1;
}
void f(int* a) // Ici, je signale que ce n'est donc pas un entier, mais l'adresse mémoire d'un entier (un pointeur)
{
*a = 2; // Et là, on modifie ce qui est situé à l'adresse, donc la valeur de a
}
Maintenant, le printf affichera bien 2
Où donc se situe ton problème alors ?
Tu utilises un tableau de chaines de caractères. En C, les chaines de caractères ne sont pas un type propre, mais une astuce : il s'agit d'un pointeur sur un char qui est suivi de plein de char et d'un dernier qui contient la valeur "0". Cette dernière valeur permet aux fonctions usuelles de savoir que la chaine est terminée sans avoir à stocker le nombre de caractères de la chaine.
Donc :
- Tu utilises un tableau (c'est un pointeur)
- Ce tableau contient des chaines de caractères (des pointeurs)
Si on reprend ton code (réindenté et nettoyé au niveau de swp hein, parce que ça pique ) :
void swap_tab(char *a, char *b)
{
char* swap;
printf("\n\nvaleur de a avant swap : %s \nvaleur de b avant swap : %s \n", a, b);
swap = a;
a = b;
b = swap;
printf("\nvaleur de a apres swap : %s \nvaleur de swap : %s \nvaleur de b apres swap : %s \n\n", a, swap, b);
}
// Appel de la fonction
swap_tab(tab[i], tab[(i + 1)]);
Que se passe-t-il ?
Là aussi, les valeurs de tab[ i] et tab[i+1] sont copiés par valeur. Tu vas donc bien faire un "échange" entre a et b, mais celui-ci n'est pas répercuté dans tab.
Il ne sert à rien de mettre swap dans les paramètres, car il n'est utile que dans la fonction.
Au final, un simple :
char* swap;
// On n'appelle plus la fonction
// swap_tab(tab[i], tab[(i + 1)]);
// On swap directement ici
swap = tab[i];
tab[i] = tab[i+1];
tab[i+1] = swap;
Ca ne coûte pas grand chose de ne pas avoir de fonction, c'est même plus clair dans ce cas je trouve. Et pour finir, tu peux faire une fonction si tu appelles ce codes vraiment plusieurs fois.
Au final, mes vrais conseils (oui, quitter ton école n'est pas forcément une bonne idée si t'as déjà payé ) :
- Ecris le programme sans la norme
- Ecris le programme de la manière la plus simple possible
- Factorise ton code, Améliore l'algorithme (au moins pour ton exercice personnel)
- Appliques la norme de ton école
PS:
Et pourquoi ne pas utiliser une norme connue et reconnue (tu pars d'un grand projet en C avec sa syntaxe bien spécifiée), puis tu écris un petit programme en python pour "convertir" tes programmes bien écrit dans la norme pourrie de ton école ? Ca serait super intéressant, non ?
Hors ligne
#1016 Le 02/04/2013, à 21:22
- xapantu
Re : /* Topic des codeurs [8] */
Tiens, en cours d'info (en prépa), où un apprend le caml (ocaml), on nous déconseille aussi les for. Enfin c'est pas vraiment vrai, on nous déconseille surtout toutes les structures impératives (donc toutes les boucles et tout ce qui ressemble de près ou de loin à une variable qui peut vraiment varier ). Alors après, c'est sûr, vu que c'est du fonctionnel, c'est sûrement beaucoup plus justifiable que pour le C...
Enfin de toutes façons le problème est complètement différent puisqu'on ne fait pas vraiment de la programmation, le but est plus de faire de l'algorithmie et des maths que d'apprendre à faire un logiciel qui pourrait potentiellement avoir la moindre utilité.
PS:
Et pourquoi ne pas utiliser une norme connue et reconnue (tu pars d'un grand projet en C avec sa syntaxe bien spécifiée), puis tu écris un petit programme en python pour "convertir" tes programmes bien écrit dans la norme pourrie de ton école ? Ca serait super intéressant, non ?
Ouais, alors, c'est pas pour soutenir nathéo, mais quand même, quand on est étudiant, on a peut-être (déjà, autre chose à faire, que de coder dans une autre norme que celle qu'on nous enseigne) plus intérêt à apprendre à coder dans la norme qui devra être utilisée pour les partiels et autres concours, que dans une autre.
Hors ligne
#1017 Le 02/04/2013, à 22:12
- Khady
Re : /* Topic des codeurs [8] */
- Ecris le programme sans la norme
- Ecris le programme de la manière la plus simple possible
- Factorise ton code, Améliore l'algorithme (au moins pour ton exercice personnel)
- Appliques la norme de ton école
Tu codes à la norme, tu ne mets pas à la norme.
Envoyé depuis notre GNU/Linux
Hors ligne
#1018 Le 03/04/2013, à 03:47
- grim7reaper
Re : /* Topic des codeurs [8] */
Tiens, en cours d'info (en prépa), où un apprend le caml (ocaml), on nous déconseille aussi les for. Enfin c'est pas vraiment vrai, on nous déconseille surtout toutes les structures impératives (donc toutes les boucles et tout ce qui ressemble de près ou de loin à une variable qui peut vraiment varier ). Alors après, c'est sûr, vu que c'est du fonctionnel, c'est sûrement beaucoup plus justifiable que pour le C...
Oui, là c’est évident.
Quoiqu’il devrait plutôt vous faire faire du Haskell, c’est fonctionnel pur donc il n’y a pas besoin d’interdire ce qui n’existe pas
Bon je trolle un peu, le OCaml ça semble aussi être un super langage, faudra que j’y jetter un œil un jour (si c’est comme pour Ruby, ça sera pas avant 2-3 ans )
Mindiell a écrit :- Ecris le programme sans la norme
- Ecris le programme de la manière la plus simple possible
- Factorise ton code, Améliore l'algorithme (au moins pour ton exercice personnel)
- Appliques la norme de ton écoleTu codes à la norme, tu ne mets pas à la norme.
Malheureusement ouais…
Étant donné qu’ils ont une espèce de moulinette à la con qui regarde si tu as bien suivi leur norme (et qui, si ce n’est pas le cas, te retire des points), vaut mieux pas tout refaire à la dernière minutes et oublier des trucs pour perdre des points bêtement.
D’ailleurs, faut savoir que dans cette école tu peux avoir des notes jusqu’à -42 (« LULZ, trop geek t’as vu » -___-").
Dernière modification par grim7reaper (Le 03/04/2013, à 03:48)
Hors ligne
#1019 Le 03/04/2013, à 13:18
- Khady
Re : /* Topic des codeurs [8] */
Un jour je vous expliquerai la norme. Comme ça vous aurez moins de rage en vous.
Tu peux descendre bien en dessous de -42 pour des fautes de norme. -36800 le record je pense.
-42 c'est pour triche.
Envoyé depuis notre GNU/Linux
Hors ligne
#1020 Le 03/04/2013, à 13:37
- grim7reaper
Re : /* Topic des codeurs [8] */
Un jour je vous expliquerai la norme.
T’inquiètes, je la connais la norme, la vieille et la nouvelle (qui un peu moins ridicule que l’ancienne). Je peux même donner des liens.
Et vu son niveau, je pense que n’importe qui fréquentant ce topic peut la comprendre sans ton aide et se faire son propre avis dessus.
Edit : aller hop, un lien vers celle 2011 (j’ai aussi là 2012 sous le coude, mais à priori pas de différence).
Tiens, ça il me semble que c’est l’ancienne (pas sûr, je ne retrouve plus mon lien)
Dernière modification par grim7reaper (Le 03/04/2013, à 13:39)
Hors ligne
#1021 Le 03/04/2013, à 13:38
- Khady
Re : /* Topic des codeurs [8] */
Vu les deux dernières pages, non.
Envoyé depuis notre GNU/Linux
Hors ligne
#1022 Le 03/04/2013, à 13:41
- grim7reaper
Re : /* Topic des codeurs [8] */
Et bien je t’en prie, éclaire nous de ton savoir :]
Explique nous que oui, il faut interdire le for car il décentralise l‘initialisation des variables (no comment…). C’est une bonne raison.
Après tout, on peut tout faire avec while (nonobstant la grosse différence sémantique entre un while et un for)…
Et le gus qui à écrit :
’sizeof’ n’est pas considéré comme étant un mot clé
Je le renvoie à la section 6.4.1 de la norme du C, ça lui fera pas de mal hein.
Dernière modification par grim7reaper (Le 03/04/2013, à 13:46)
Hors ligne
#1023 Le 03/04/2013, à 13:48
- sweetly
Re : /* Topic des codeurs [8] */
Le mot clé switch est interdit car dans la plupart des cas il peut être remplacé par un tableau de pointeurs de fonctions.
Le mot clé for est interdit pour ne pas décentraliser l’initialisation des variables.
Les mots clé break et continue sont interdits pour ne pas casser l’exécution logique du programme
Sérieusement...
Hors ligne
#1024 Le 03/04/2013, à 13:49
- The Uploader
Re : /* Topic des codeurs [8] */
sizeof n'est pas un mot clé
.... O_o
C'est des vrais gens qui ont écrit ça ? Avec un cerveau et tout ?
No way !
Dernière modification par The Uploader (Le 03/04/2013, à 21:39)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#1025 Le 03/04/2013, à 13:57
- Titus007
Re : /* Topic des codeurs [8] */
Edit : aller hop, un lien vers celle 2011 (j’ai aussi là 2012 sous le coude, mais à priori pas de différence).
Tiens, il me semble que quand tu avais mis le lien vers le brouillon de la norme C, pour mon info, elle tenait en plus de 15 pages…
3% of people today would die if facebook was completely destroyed, 2.7% wouldn't. If you are one of the 0.03% that would be laughing, copy and paste this to your signature. If you are one of the 12% who would mourn the dead, don't. If you are among the 60% of people who don't have Internet, well... and if you don't care, do whatever the f... you want !
Hors ligne