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)
- S
2
.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 unfor(int i=0;i<x;++i)
avec un printf dei
; - Une fonction
boucleApres()
qui fait unfor(int j=0;j<x;j++)
avec un printf dej
; - 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()
etboucleApres()
? - 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?