INF3135_H2021

Construction et maintenance de logiciels (langage C)

View project on GitHub

Atelier 04: Programmer, Automatiser

Note : (facultatif) S’il y a des questions dans ce labo, répondez y dans un fichier nommé ./labo/reponse-labo-XX.md. XX étant le numéro de l’atelier. Le fichier doit être dans un format Markdown. Utiliser un projet privé nommé inf3135-h2021 pour déposer le fichier demandé. Utiliser le même format de fichier pour tous les exercices.

Format du fichier Markdown
  • Atelier {01..08} (Header 1)
  • Exercice {1..n} (H2)
  • Question {1..n} (H4)
  • S2.E3.Q1 (strong) est une valeur qui change bien sûr
  • La réponse dans une section script (code block)

Note: Il est recommandé de versionner vos réponses aux exercices à l’aide de Git (en ligne de commande). Un seul dépôt est amplement suffisant pour tous les laboratoires.

Pourquoi versionner vos exercices avec Git: afin de vous entraîner à utiliser le logiciel (les commandes) naturellement. —-

Objectif de l’atelier : Livrer rapidement

1 - Programmer

Vous devez produire plusieurs programmes et produire plusieurs exécutables. Tous les programmes ont une fonction int main(). Les programmes sont les suivants :

  • progA.c : aura une fonction estTrie(int _a[], unsigned long _size) pour savoir si le tableau d’entier est trié;
    • Le programme retourne, si le tableau est trié, un des codes de retour :
      • 1 si trié
      • 20 si non trié;
  • progB.c : aura une fonction compte(int _a[], unsigned long _size) qui compte le nombre qui s’y retrouve le plus souvent;
    • Le programme retourne via le code de retour le décompte du nombre le plus souvent vu dans le tableau;
  • progC.c : aura une fonction inverse(unsigned char _a[], unsigned long _size) qui inverse le tableau;
    • Le programme retourne via le code de retour le premier élements dans le tableau après le traitement;

Rappel le type char est un très petit entier.

exemples afin de bien démarrer

int estTrie(int _a[]);

int main (){
 // exemple de declarations + initialisation
  int tab[] = {0,2,3,47,5,43,3,2,6,90,12,34,65,6,89,8};
  ...
  
  unsigned long size = sizeof(tab)/sizeof(int); //le nombre d'elements
  
  
  int ret = estTrie(tab, size); //exemple d'appel
  
  ...

}

int estTrie(int _a[], unsigned long _size) {
  //votre implementation
}

2 - Makefile pour automatiser (la compilation…)

Finalement, créez un fichier Makefile qui automatise les étapes de compilation du numéro précédent.

  • Vous devez produire un Makefile complet qui compile :
    • progA en une étape de compilation;
    • progB en deux étapes de compilation;
    • progC vous décidez ce que vous voulez.
      • La prise de décision est importante dans ce cours;
  • Ajoutez à ce fichier Makefile une cible clean qui supprime le fichier .o ainsi que l’exécutable;
  • Utiliser -std=c11 -Wall -pedantic comme option de compilation.

  • Versionnez l’état actuel de votre projet avec Git.

Questions :

  • Q1. Votre Makefile fonctionne-t-il, et quelle commande le prouve ?
  • Q2. Est-ce que le format (la structure) du fichier est important ?
  • Q3. Puis-je changer le nom du fichier Makefile ?
  • Q4. Quelle est la commande pour créer un exécutable (le programme A) ?
  • Q5. Quelle est la commande pour supprimer les fichiers ?
  • Q6. Quelle cible est la cible par défaut du Makefile ?
  • Q7. Est-ce possible de retourner un code de retour négatif ?

3 - Remise

Vous devez travailler avec le gestionnaire de version git et GitHub. Il est important de faire une demande de collaboration à JocelynBedard pour que votre travail soit récupéré. Votre dépôt doit être nommé inf3135-h2021 en minuscule. La branche atelier04 doit exister, car c’est dans celle-ci que vous allez pousser vos fichiers.

Vous avez jusqu’à 23h59 le jour de l’atelier pour finir le travail. Vous ne devez jamais pousser des fichiers binaires dans votre gestionnaire de version.

Toujours inclure dans tous vos livrables un fichier nommé cp.txt qui contient uniquement votre code permanent en majuscule.

Finalement, les fichiers suivants devraient exister : *.c, Makefile, cp.txt

FIN.