lundi 19 septembre 2011

Reconstruction de documents détruits

Pour nous entraîner à la manipulation de tableau en dimension 2 (et donc de manipuler la notion de pointeur de pointeur), nous allons attaquer le problème de la reconstitution de documents détruits...

La problématique générale de reconstitution de document détruit est détaillée ici. Nous allons essayer de résoudre ce problème dans le contexte d'images en "ascii-art".

Le strict minimum que j'attendrai de vous c'est de créer un programme capable de mettre un fichier d'ascii-art en mémoire (dans un tableau à deux dimensions), d'en mélanger les lignes, puis de les afficher. Pour faire cela, je vous aiderai sur les points suivants :
  • Comment utiliser la redirection des entrées et sorties standard pour interagir avec des fichiers.
  • l'utilisation de la fonction fgets pour lire un fichier ligne à ligne.
  • l'utilisation des fonctions random et srand, pour générer de l'aléatoire.

Voici une image illustrant le traitement à faire :

Pour les plus avancés d'entre vous, vous pourront nous attaquer au problème de la reconstruction... C'est à dire essayer de retrouver approximativement l'ordre d'origine. Il s'agit d'un problème complexe, mais abordable. L'idée de base est de se dire que le voisin le plus probable d'une ligne est la ligne qui lui ressemble le plus... Rien qu'avec cette idée je vais vous montrer qu'on peut retrouver une partie de l'ordre d'origine.Pour commencer vous pouvez utiliser le fichier "snoopy.txt" attaché à ce billet. Même des algorithmes "naïfs" devraient (normalement) assez bien fonctionner sur cet exemple. Je donnerai plus tard des exemples plus complexes pour lequels il y aura des points bonus à gagner!

Je vous rappelle qu'avant de s'attaquer à ces problématique vous devez d'abord finir votre programme de "jeu de pendu". Par "finir", j'entend par là que la logique du jeu fonctionne , et que le logiciel valgrind ne détecte aucune erreur ni fuite mémoire.

Annexe(s) :

snoopy.txt :: 3.24 KB

mardi 6 septembre 2011

Challenge "pendu"


Les challenges sont un moyen de gagner quelques points bonus, mais surtout c'est un moyen amusant de travailler le cours d'informatique. Ce que je vous propose dans ce premier challenge de l'année c'est de réalisez un jeu de pendu en langage C ...
Le principe de "challenge" vous a été décrit en cours, mais j'en fais ici un rapide rappel. C'est un travail optionnel, vous n'êtes donc pas obligé de le faire, cependant :
  • Le sujet est spécialement choisi pour vous faire travailler exactement ce dont vous avez besoin (pour faire un rappel en début d'année, ou préparer une interro' ou éval'). C'est plus sympathique que de bachoter, et ça vous fera gagner en expérience.
  • Je ferai une analyse des codes rendu, vous aurez donc un retour sur la qualité de votre programme. C'est un des meilleurs moyen de progresser
  • Cela pourra vous rapporter quelques points bonus (comptabilisé dans le contrôle continu).
  • C'est un moyen de me montrer votre intérêt pour l'informatique, et surtout le travail que vous effectuez. Si vous ne réalisez pas ces travaux, je n'aurai pas d'éléments tangible pour vous "défendre" en conseil de classe, si le besoin se présente...
Je vous proposerai des challenges de ce type tout au long de l'année.

Jeu de pendu
Le jeu de pendu est décrit ici. Je vous demande d'en implémenter une version simplifié suivant très exactement ce déroulement :
  1. Le programme demande la saisie d'un mot qu'on appellera "secret". (un simplescanfpour la saisie, fera l'affaire.). Bien entendu on suppose qu'il y a deux joueurs et que ce n'est pas la même personne qui saisi le mot secret et qui joue...
  2. Le programme crée (et affiche) alors un mot "masque" c'est à dire une chaîne de caractère qui ne contient que des "-" et autant qu'il y a de lettres dans le mot secret. Exemple, si le mot secret est "toto", le mot masque est "----".
  3. Le programme demande la saisie d'une lettre...
  4. ... va vérifier si cette lettre est présente dans le mot secret et modifie en conséquence le mot masque, et l'affiche. Exemple (suite), si l'utilisateur saisie la lettre "t" le mot masque doit devenir "t-t-".
  5. Le programme regarde si toutes les lettres ont été devinées, dans ce cas il arrête le jeux par victoire et affiche le mot "secret".
  6. Le programme regarde le nombre de tentative ratées et arrête le jeu s'il atteint 10.
  7. Le programme reprend à l'étape 2 si le nombre de tentatives ratées est inférieur à 10.
Modalités de rendu du travail
Pensez que je vais recevoir beaucoup de programmes donc veillez bien à suivre très scrupuleusement les modalité de rendu de ce travail. Si vous ne les suivez pas, je me réserve le droit ne pas traiter votre code. De plus votre programme sera évalué pas un script (un autre programme), donc si vous décidez de changer ne pas suivre les recommandation, votre travail sera compté comme faux.
  • Votre programme doit tenir dans un seul fichier, dont le nom est la concaténation du nom du binôme qui l'a crée. Vous pouvez rendre un travail seul, mais pas de trinôme.
  • Vous me l'envoyez par mail (mon nom, suivit de @esiea.fr ) avec le fichier de code en attachement, en utilisant votre adresse mail ESIEA. Attention à bien m'envoyer votre dernière version, bien testée...
  • Pour vous assurer que vous suivez bien les modalités , vous pouvez tester votre programme grâce au fichier "testPendu1.txt" attaché à cet article. Pour cela, il vous faut lancer votre programme comme ceci :

  • ./monProgramme < testPendu1.txt
    Cette manière de faire exécute le programme "monProgramme", en faisant comme si ce qui est dans le fichier "testPendu1.txt" était tapé au clavier. Dans ce cas précis, cela veux dire que le mot secret est "toto", et que le joueur propose les lettres "t,x,y,z,o",... et donc gagne la partie. La sortie du programme doit ressembler à ça :

  • toto
    ----
    t
    t-t-
    x
    t-t-
    y
    t-t-
    z
    t-t-
    o
    toto
    
  • Votre programme devra impérativement faire toute les allocations mémoire de tableau via la fonction malloc. Aucune allocation via l'opérateur [ ] n'est autorisée. Vous devrez aussi pensez à faire les désallocations (fonction free) des zones mémoires allouées.
  • Date limite de rendu lundi 24 septembre.
Annexe(s) :

testPendu1.txt :: 16 B