Aide à la compréhension d'un exo - C - Programmation
Marsh Posté le 27-07-2006 à 11:56:33
C'est quoi ce code pourri ?
Rassure-moi, l'exercice c'est de le corriger, non ?
Marsh Posté le 27-07-2006 à 12:10:03
Pour le comprendre il faudrait déjà connaître ce que font les fonctions c1, et c2.
Tu peux poster tout le code (on pourra tester et te dire ce que ça fait)
En regardant bien, j'ai l'impression que la double boucle ne fait rien :
Code :
|
j est intialisé avec 0, et j dois être plus grand s'un élément de ts qui est au minimum 2. Me trompe-je ?
Marsh Posté le 27-07-2006 à 12:15:31
Nan et puis faudra aussi qu'on m'explique l'utilité de la seconde boucle for(;; )
edit : grillé de 30s pour la seconde boucle for
edit 2 : et puis surtout, ts[] ne compte que 3 éléments, si on s'amuse rien qu'à donner sizeof(double) pour valeur à "s", on risque sérieusement le segfault
Marsh Posté le 27-07-2006 à 14:06:46
Trap D a écrit : Pour le comprendre il faudrait déjà connaître ce que font les fonctions c1, et c2. |
J'ai recopié tout le code que voici
Code :
|
Marsh Posté le 27-07-2006 à 14:08:25
Ça plante bien aussi avec p( (*(tf[l-1U]))(c), s, l-1U); car tf a 2 éléments, donc si l est supérieur ou égal à 3 on plante.
Qui a pu inventer un truc pareil ?
Marsh Posté le 27-07-2006 à 14:21:40
Le résultat est intéressant, mais on peut faire plus beaucoup plus simple.
Il y a deux erreurs, un size au lieu de sizeof et il y a une parenthèse mal placée dans for(i=0U; i<s; ++i, c=(void *))(((char *)c)+ts[l]))
[edit]
Amusant, qu'on mette for(j=0U; j<ts[i]; ++j) ou for(j=0U; j>ts[i]; ++j) on obtient exactement le même résultat
[/edit]
Marsh Posté le 27-07-2006 à 15:10:44
Gattuso a écrit :
|
Sans déconner, c'est autorisé d'écrire des trucs aussi ignobles ?
Gattuso a écrit : je suis en train d'essayer de comprendre ce que fait ce code que j'ai trouvé sur un livre de C : |
Personnellement je pense qu'il y a trop de commentaires et que cela nuit à la clarté du code. Donne-nous le titre du bouquin et son éditeur que je n'aille pas l'acheter par hasard...
Marsh Posté le 27-07-2006 à 17:53:10
Est-ce que quelqu'un sait ce que fait finalement ce code ?
Marsh Posté le 27-07-2006 à 18:00:44
Bah le plus utile, ce serait de savoir d'ou il vient je pense.
Marsh Posté le 27-07-2006 à 18:05:08
ReplyMarsh Posté le 27-07-2006 à 18:14:40
Trap D a écrit : Ca affiche 3 matrices carrées de 3 sur 3 de 0 à 3^3-1 |
Si c'est vraiment ce que ça fait, alors je te tire mon chapeau.
Moi j'ai renoncé à lire une telle ignominie, et j'suis à deux doigts d'aller sur le site de l'IOCCC pour voir si c'est pas tiré de là.
Marsh Posté le 27-07-2006 à 19:08:28
Elmoricq a écrit : Moi j'ai renoncé à lire une telle ignominie, et j'suis à deux doigts d'aller sur le site de l'IOCCC pour voir si c'est pas tiré de là. |
Moi j'ai essayé de le lire mais j'ai arrêté quand j'ai vu des variables nommées "l" (la lettre) utilisées avec "1" (le chiffre)...
Citation :
|
Marsh Posté le 27-07-2006 à 23:09:31
Elmoricq a écrit : C'est pour un concours à l'IOCCC ? |
Bizarre, je me suis dit la même chose.
Enfin il suffit de l'exécuter pour voir ce que ça fait.
En tout cas vu le "style" ou plutôt son absence, je subodore un scientifique qui a transposé directement un programme fortran en C. L'absence totale d'utilisation de structures autre que des tableaux, et les *** ça pue l'algo fortran à plein nez.
Marsh Posté le 27-07-2006 à 23:14:15
Ben j'suis allé voir sur leur site, et j'crois pas que ça vienne de là. Le niveau est autrement plus élevé chez eux.
Exemple d'une sélection de 1986 :
#include "stdio.h" |
Marsh Posté le 27-07-2006 à 23:16:48
L'IOCCC, c'est chefs-d'oeuvres de hacking chevelu, hein. Je me souviens de progs où 95% du code est dans le commentaire, ou bien où on imaginerait pas que ça puisse compiler un jour.
Marsh Posté le 28-07-2006 à 00:09:17
En fait c'est la fonction a(m,nb); qui affiche les trois matrices,
0 1 2
3 4 5
6 7 8
9 10 11
12 13 14
15 16 17
18 19 20
21 22 23
24 25 26
après l 'appel pA(m,nb); on obtient
26 25 24
23 22 21
20 19 18
17 16 15
14 13 12
11 10 9
8 7 6
5 4 3
2 1 0
La double boucle inverse d'abord les trois matrices puis l'appel récusif inverse les éléments des matrices
Marsh Posté le 28-07-2006 à 08:04:06
Trap D a écrit : En fait c'est la fonction a(m,nb); qui affiche les trois matrices, |
Merci pour les réponses.
Pour ce qui est de l'inversion de la matrice, c'est vrai qu'on aurait pu deviner sans avoir à compiler le code car on ne parcourt que la moitié de la matrice et ont fait des échanges :
Code :
|
Est-ce que quelqu'un peut m'expliquer ce bout de code ?
Code :
|
Marsh Posté le 28-07-2006 à 14:21:18
Vous etes vraiment nuls, parce que ça fait pas une inversion mais une transposée
Marsh Posté le 28-07-2006 à 14:39:31
Oui dans le vocabulaire des matrices tu as raison, nous aurions dû éventuellement dire intervertion des nombres.
[EDIT]
A la réflexion NON, la transposée de
0 1 2
3 4 5
6 7 8
ce n' est pas
8 7 6
5 4 3
2 1 0
mais
0 3 6
1 4 7
2 5 8
Ce n'est ni l'inverse ne la transposée !
Marsh Posté le 28-07-2006 à 20:58:34
Sve@r a écrit : Un grand merci à toi pour nous rappeler si gentiment notre niveau face à ton incommensurable intelligence |
J'voulais faire du 2nd degre mais je me suis chie dessus. Sorry.
Marsh Posté le 29-07-2006 à 08:33:16
farib a écrit : J'voulais faire du 2nd degre mais je me suis chie dessus. Sorry. |
Un 2° degré sur un forum ça passe très mal
Bon ben ya pas de pb. Je supprime mon post précédent...
Marsh Posté le 29-07-2006 à 23:03:58
Bonjour, j'ai un problème avec mon code ! J'ai un BSOD sur une écriture en mémoire, pourtant j'alloue mon tableau localement, je comprends pas
Code :
|
merci de votre aide
Marsh Posté le 30-07-2006 à 02:58:32
Harkonnen a écrit : Bonjour, j'ai un problème avec mon code ! J'ai un BSOD sur une écriture en mémoire, pourtant j'alloue mon tableau localement, je comprends pas |
hum....
Marsh Posté le 30-07-2006 à 13:33:29
Citation : Bonjour, j'ai un problème avec mon code ! J'ai un BSOD sur une écriture en mémoire, pourtant j'alloue mon tableau localement, je comprends pas |
Normal, tu utilises gets à la ligne 28
Marsh Posté le 30-07-2006 à 15:36:43
Harkonnen a écrit : Bonjour, j'ai un problème avec mon code ! J'ai un BSOD sur une écriture en mémoire, pourtant j'alloue mon tableau localement, je comprends pas
|
Et t'as oublié de déclarer ton "main" comme "int" et t'as pas mis de return. Trop normal que ça plante...
Marsh Posté le 30-07-2006 à 16:13:05
|
Ça ne rend pas très bien, mais l'idée y est.
Marsh Posté le 27-07-2006 à 11:40:37
Bonjour,
je suis en train d'essayer de comprendre ce que fait ce code que j'ai trouvé sur un livre de C :
J'ai essayé en faisant des dessins mais je n'arrive pas à savoir ce que fait ce programme.
Si quelqu'un pouvait me l'indiquer
Merci