INF3135_H2021

Construction et maintenance de logiciels (langage C)

View project on GitHub

Atelier 03: Programmer, Compiler

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 : Programmer sans s’épuiser

1 - Compilation d’un programme écrit en C

Pour continuer, vous avez besoin d’un programme écrit avec le langage C. Écrivez-le maintenant! Votre programme doit afficher, sur la sortie standard stdout, sur des lignes différentes les nombres 2.01 à 8.01 inclusivement. Une boucle est surement nécessaire pour faire une portion du boulot. Nommé votre programme maBoucle.c.

  • Compilez votre programme en une seule étape. La commande suivante produit un exécutable nommé a.out.

     $ gcc maBoucle.c
    
  • Il est aussi possible de donner un nom a votre exécutable. L’option -o est nécessaire voici exemple :

     $ gcc maBoucle.c -o maBoucle
    

Questions :

  • Q1. Que retrouvez-vous dans le fichier exécutable? Est-ce que le contenu du fichier est lisible ?
  • Q2. Quelle est l’option pour compiler avec les instructions de débogage ? (mode debug)

2 - Implémenter des fonctions en C

Tenter d’implémenter les fonctions mentionnées. Vous devez créer pour ce faire un fichier nommé mesFontions.c. Vous devez d’abord faire les prototypes, puis ensuite implémentez en C chacune des fonctions suivantes. N’oubliez pas d’inclure dans votre fonction main() quelques tests qui démontrent que votre fonction est correctement implémentée. Chaque fois que vous avez terminé d’implémenter une fonction, n’oubliez pas de versionner votre projet à l’aide de Git.

  • Une fonction boucleAvant() qui fait un for(int i=0;i<x;++i) avec un printf de i;
  • Une fonction boucleApres() qui fait un for(int j=0;j<x;j++) avec un printf de j;
  • Une fonction racineCarreEntiere() qui retourne la portion entière de la racine Carré d’un entier naturel;
  • Une fonction somme qui calcule la somme des éléments présents dans un tableau d’entiers;
  • Une fonction estTrie qui retourne vrai si et seulement si les éléments d’un tableau d’entiers sont en ordre croissant;
  • Une fonction elementPlusFrequent qui calcule l’élément qui est répété le plus souvent dans un tableau d’entiers;

Un retour sur les entiers naturels:

N = { 0, 1, 2, …, ∞ }

∞ = 2 64 - 1

Questions :

  • Q1. Quelle fonction est plus la rapide entre boucleAvant() et boucleApres()?
  • Q2. Est-ce que les résultats sont identiques?
  • Q3. Quelle est la racine de 4294967296? temps requis?
  • Q4. Quelle est la racine de 17179869184? temps requis?

FIN.