Les notes sont sur 20. Elles sont définitives. Leur signification est la suivante:
Tous les commentaires ne sont pas marqués: aussi, il ne faut pas s'étonner d'avoir une note un peu faible par rapport aux commentaires: il s'agit peut être de problèmes de lisibilité du code, par exemple, qui n'est pas reporté dans les commentaires. Il peut s'agir également d'un problème d'attente: quelqu'un qui est bon et qui n'a pas assez travaillé par rapport à son niveau général peut être un peu sanctionné par rapport à un moins bon qui a fait le même travail: qui aime bien châtie bien (mais pas trop...).
Elle est obtenue en faisant la moyenne du nibbler et du compresseur. L'analyseur n'est pas pris en compte (trop facile). Attention: s'il vous manque une note dans cette page, c'est que cette note est 0 !!
Nibbler Compresseur Moyenne
Ben Taleb 0 10 5
Bassinot 17 19 18
Brisset 15 9 12
Cabot 10 7 8.5
Carlier 15 15 15
Lambinet 15 3 9
Coppex 16 20 18
Becquet 12 0 6
Gassama 15 10 12.5
Jordao 14 14 14
Vaillant 13 4 8.5
Neou 14 16 15
Noel 19 20 19.5
Pilliet 19 8 13.5
Ruppin 13.5 0 7
Note: 17
Commentaires: L'extraction du tar.gr devrait créer un répertoire contenant votre projet. Bug: un serpent de taille 4 qui tourne en rond se mord la queue. Parenthésez votre macro completement: #define HEIGHT ((DAMIERX)+120). Le code suivant:
typedef enum
{
VIDE,
PROIE,
TETE,
CORPS,
}Case, Damier;
#define VIDE 0
#define PROIE 1
#define TETE 2
#define CORPS 3
n'est pas correct: par exemple, VIDE est défini deux fois: une fois par le type énuméré, une autre fois par de define: redondance. Prenez l'habitude de commenter vos .h. Pour rand, extrait du manuel:
Dans Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukol??
sky, William T. Vetterling; New York: Cambridge University Press, 1990 (1st ed, p. 207)), le commentaire suivant
apparaît :
« Si vous désirez engendrer un entier aléatoire entre 1 et 10, vous devez toujours procéder en utilisant
les bits de poids forts, comme dans :
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
et jamais ainsi :
j = 1 + (rand() % 10);
(car cette dernière version utilise les bits de poids faibles). »
N'oubliez pas de tester l'échec potentiel des appels aux fonctions la bibliothèque standard (par exemple, fopen). Globalement, bon travail.
Note: 15
Commentaires: Organisez un peu votre projet (code source: repertoire src, etc). Bug sur un serpent de taille 2, qui peut revenir en arrière. Vous pourriez demander si on veut rejouer. La structure de Serpent contient un tableau: passez-la aux fonction par adresse en employant const, pas par valeur. Evitez les contantes en dur, du style
coord_x > 25 && coord_x < 625 && coord_y > 25 && coord_y < 625. N'oubliez pas de liberer les ressources allouées avant de sortir (close_window, par exemple). Vous auriez pu initialiser le générateur aléatoire.
Note:10
Commentaires: Des bugs dans le fonctionnement du serpent, en particulier quand on essaie de revenir en arrière. Bug sur le serpent de taille 4 qui tourne en rond. Le test de fin de partie en cas de gain ne fonctionne pas. Ne mettez pas de #include qui ne sont pas necessaire, y compris dans les .h. Protégez les inclusions multiples des .h. Le code suivant:
typedef enum
{
VIDE,
PROIE,
TETE,
CORPS,
}Case, Damier;
#define VIDE 0
#define PROIE 1
#define TETE 2
#define CORPS 3
n'est pas correct: par exemple, VIDE est défini deux fois: une fois par le type énuméré, une autre fois par de define: redondance. Fonction Oppose: la suite de if/then/else devrait plutot être implantée par un switch/case, plus lisible. Fonction restart: evitez les constantes en dur. La structure de serpent contient un tableau, passez-la aux fonctions par adresse plutot que par valeur, en specifiant const. initialisation: une proie peut avoir été posée sur la case du milieu du damier, sur laquelle on va mettre le serpent.
Note: 15
Commentaires: Mettez votre code source dans un repertoire src. Bug serpent de taille 4 qui tourne en rond. Ne mettez pas de #include qui ne sont pas necessaire, y compris dans les .h. Mettez les valeurs des types énumérés en majuscules, comme les #define. Si vous separez le code de l'interface graphique de celle du moteur du jeu, par exemple, vous devez avoir un .h par module et pas tout dans le même. N'oubliez pas de liberer les ressources allouées avant de sortir (close_window, par exemple). Vous auriez pu initialiser le générateur aléatoire. Qu'est-ce que c'est que cette fonction random() que vous employez ?
Note: 15
Commentaires: N'oubliez pas de liberer les ressources allouées avant de sortir (close_window, par exemple). I manquait un $(inc) dans votre makefile. Pour rand, extrait du manuel:
Dans Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukol??
sky, William T. Vetterling; New York: Cambridge University Press, 1990 (1st ed, p. 207)), le commentaire suivant
apparaît :
« Si vous désirez engendrer un entier aléatoire entre 1 et 10, vous devez toujours procéder en utilisant
les bits de poids forts, comme dans :
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
et jamais ainsi :
j = 1 + (rand() % 10);
(car cette dernière version utilise les bits de poids faibles). »
La sortie de jeu est un peu brutale (exit quand on perd). Bug serpent de taille 4 qui tourne en rond.
Note: 16
Commentaires: Mettez votre code source dans un repertoire src. Jeu sympa ! Test de fin de partie gagnée pas correct (j'ai fait une partie, il ne restait plus de fruits à manger et le jeu continuait).
#define WSCREEN TAILLE*WCASEmérite un parenthésage.
#include stdio.hinutile dans define.h. Il n'y a aucune raison de déclarer des variables globales static dans main.c. Code bien commenté.
Note: 12
Commentaires: Votre tar.gz devrait créé un repertoire à votre nom à l'extraction. Séparez votre code: déclartions dans les .h, lee code de l'interface graphique dans un .c, celui du moteur de jeu dans un autre, ... Evitez les constantes en dur. Bug serpent de taille 4 qui tourne en rond. Je ne vois pas le serpent !
Note: 15
Commentaires: Makefile incorrect. Protégez les .h contre les inclusions multiples. Votre nibbler.h est une mauvaise idée. Il ne faut pas inclure des choses qui ne sont pas nécessaires. Evitez les constantes en dur. Separez le code de l'IHM de celui du moteur de jeu. Liberez les ressources allouées (il manque, par exemple, le close_window)
Note: 14
Commentaires: On peut revenir en arrière avec un serpent de taille 2. Sortie de jeu sur perte ou gain brutale. Evitez les #include ../../toto.h
Note: 13
Commentaires: Organisez votre code src en plusieurs fichiers. Bug sur un serpent de taille 4 qui tourne en rond. On peut obtenir un affichage plus rapide et moins désagréable en ne réaffichant pas tout le damier à chaque fois: ça n'est pas nécessaire. L'implantation du serpent (file d'attente) par tableau est plus efficace que la vôtre allouée dynamiquement.
Note: 14
Commentaires: Ne mettez pas les .c dans le repertoire include. Bug sur un serpent de taille 4 qui tourne en rond. Parenthésez vos #define. Donnez un nom significatif à tout: en particulier, le fichier define.h n'a pas un nom très informatif.
Note: 19
Commentaires: Il ne faut pas appeler tar.gz un tar tout court. L'arrêt du jeu en cas de perte/gain est un peu brutal. Le jeu est sympathique ! Evitez les #include ../toto/titi.h, le chemin d'inclusion est une option du compilateur. Bon travail !
Note: 19
Commentaires: Evitez les #include ../toto/titi.h, le chemin d'inclusion est une option du compilateur. C'est très joli, et je me suis bien amusé ! Mais ça fait quand même chauffer un bipro. Il doit y avoir un problème d'attente active quelque part... Commentez plus votre code. Parenthesez vos macros. Testez les retours des appels de la bib C (ex: fopen). N'oubliez pas de liberer les ressources allouées (par exemple, de fermer les fichiers ouverts). Pour rand, extrait du manuel:
Dans Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukol??
sky, William T. Vetterling; New York: Cambridge University Press, 1990 (1st ed, p. 207)), le commentaire suivant
apparaît :
« Si vous désirez engendrer un entier aléatoire entre 1 et 10, vous devez toujours procéder en utilisant
les bits de poids forts, comme dans :
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
et jamais ainsi :
j = 1 + (rand() % 10);
(car cette dernière version utilise les bits de poids faibles). »
Note: 13.5
Commentaires: Organisez votre code src en plusieurs fichiers. Bug sur un serpent de taille 4 qui tourne en rond. Evitez les constantes en dur.
Note: 10
Commentaires: Vous n'utilisez pas les opérations bit à bit sur les fichiers, parce que vous ne les avez pas terminées ! Vous pourriez afficher un mode d'emploi quand les paramètres du programme sont incorrects, plutôt qu'un message d'erreur faux. Le code est clair, bien présenté. Dommage que vous n'ayez fait que la moitié du travail.
Note: 19
Commentaires: C'est un peu dommage que les fichiers à compresser doivent être placés dans un répertoire figé: d'une manière générale, l'interface d'utiisation peut être améliorée (abandonnez le mode "console" au profit du mode "ligne de commande"). La sortie erreur standard est réservée aux erreurs. Le format de fichier compréssé n'est pas tout-àfait celui proposé, mais il est bien aussi. Dans la décompression octet/octet vous mélangez les fread et readOctetOctet, ce qui, au niveau du style de programmation, est dérangeant. Dans votre programme ça fonctionne car vous êtes ordonné, mais d'une manière générale il ne faut pas accéder à une même ressources en utilisant plusieurs méthode de couches logicielles différentes (c'est ce que vous faites). Ne faites jamais scanf("%s",...) mais scanf("%10s",...), par exemple. Le code est très clair, bien présenté et bien commenté. C'est du très bon travail.
Note: 9
Commentaires: Compilez avec les options -ansi et -Wall au minimum. Dans ce genre de programme, evitez le mode interactif pour être en mode ligne de commande seul. Vous n'utilisez pas la compression des entiers (bit à bit ou octet par octet).
Note: 7
Commentaires: La commande lancée sur un exemple ne fait rien ! La constante CHAR_BIT est définie dans limits.h. N'incluez pas de fichiers inutiles, en particulier dans les .h. Evitez les constantes en dur. Par exemple, dans la fonction qui calcule le nombre d'octets, pourquoi ne pas utiliser une formule ? Les erreurs devraient être affichées sur la sortie d'erreur. La décompression ne fonctionne pas.
Note: 15
Commentaires: Faire un sprintf(..."%c"...) fonctionne, mais c'est un peu lourd. Les paramètres de la fonction de compression sont dangereux pour deux raisons: la première, ils sont basés sur le type File, qu'on pourrait confondre avec FILE: ne pas jouer sur les différences maj/min. D'autre part, le fait que le premier paramètre peut produire une situation dangereuse. En effet, la fonction modifie la tête de lecture dans le fichier, donc la strcuture interne FILE. Dans votre cas ça fonctionne, car le champ fd est un pointeur, mais c'est de la programmation dangereuse. Quand une fonction doit modifier un paramètre, alors ce dernier doit être passé par adresse. Bon travail.
Note: 3
Commentaires: Que viennent faire les lib X11 dans le makefile? Votre programme n'est pas graphique ! Mettez un mode d'emploi. Je n'arrive pas à compresser un fichier. Les fichiers bit à bit ne fonctionne pas. La fonction libereListe est complètement fausse ! Pas grand chose ne fonctionne.
Note: 20
Commentaires: Très bon travail.
Note: 0
Commentaires: Non rendu.
Note: 10
Commentaires: En cas d'erreur sur la ligne de commande, vous devriez fournir des messages plus explicites pour aider l'utilisateur. Le programme est parti en boucle quand je l'ai essayé sur un gros exemple. La fonction de fermeture des fichiers bit à bit est incorrecte.
Note: 14
Commentaires: On n'obtient pas toujours le fichier d'origine quand on décompresse. Pourquoi écrire un \0 dans le fichier avant d'écrire la position d'un mot q'on a trouvé dans la liste ? Le programme semble fonctionner à peu près, mais les taux de compression sont réellement mauvais ! Le code est clair.
Note: 4
Commentaires: On vous demande une archive au format tar, pas rar, et qui se développe dans un repertoire à votre nom, avec une organisation en sous-repertoires contenant code, documentation, tests, etc. Le programme ne compile pas.
Note: 16
Commentaires: Dans ce genre de programme, préferez le mode texte au mode ligne de commande. Seg fault quand le fichier n'existe pas: vous avez oublié de tester un code de retour d'une fonction. Faire un realloc à chaque lecture de caractère est beaucoup trop lourd. N'oubliez pas de liberer les resources allouées (par exemple, la liste dans l'algo de compression/decompression). Vous pourriez mieux gerer les séparateurs. Vous avez travaillé.
Note: 20
Commentaires: Un makefile, c'est aussi fait pour ne pas tout recompiler à chaque fois (o, c'est ce que vous faites). Il faudrait également un makefile general, qui compile d'abord les bibliothèques, les place dans le repertoire libs du programme, puis compile le programme. Code très clair, bien présenté et commenté. Le taux de compression devrait être meilleur. Rapport: bien. Très bon travail.
Note: 8
Commentaires: Que fait la lib graphique mlv dans le makefile ? et X11 ? La décompression a planté sur un gros et un petit exemple (pb de liste+seg fault). Vos fonctions pour les fichiers bit à bit ne sont pas utilisées.
Note: 0
Commentaires: pas rendu.