Faire des calculs en langage C Créer un programme C dans l’IDE Qt Creator Dans cette activité vous allez utiliser l’environnement de développement intégré (ou EDI ou IDE en anglais) nommé Qt Creator. Vous serez amenés à l’utiliser fréquemment pour tout ce qui concerne la programmation en langage C ou C++ aussi bien sur PC que sur Raspberry Pi. Cet IDE a été conçu spécialement pour développer des programmes C++ avec le framework Qt qui est un ensemble de librairies qui permettent — entre autres — de développer des application graphiques, d’accéder par programme à des bases de données ou au réseau, de dessiner sur l’écran (2D ou 3D)… Ici, vous n’utiliserez pas le framework Qt mais simplement l’IDE Qt Creator qui est également adapté pour faire de la programmation en langage C standard (c.-à-d. sans devoir faire appel à des librairies tierces). Les 2 diaporamas suivants illustrent comment créer puis exécuter un projet de type “C” dans Qt Creator. Création d’un projet de type “C” Exécution du programme Calcul de la résistance équivalente d’un circuit résistif On désire faire un programme qui calcule la résistance équivalente du dipôle résistif représenté ci-dessous : On vous donne : la formule permettant de calculer la résistance équivalente (Req) de résistances associées en série : la formule permettant de calculer la résistance équivalente (Req) de résistances associées en parallèles : les valeurs des résistances : R1 = 220 Ω R2 = 4.7 kΩ R3 = 820 Ω R4 = 6.8 MΩ R5 = 330 kΩ R6 = 5.6 kΩ R7 = 1.2 MΩ R8 = 100 kΩ 🖮 Travail n° 1 Calcul de résistance équivalente Créer un projet de type C — nommé ReqCalculator — dans Qt Creator Dans la fonction main(), déclarer et initialiser une variable de type double pour chaque résistance du circuit en utilisant la notation scientifique (Ex. : 4.7e3 pour R2) Veiller à exprimer toutes les valeurs des résistances en Ω Veiller à utiliser des noms explicites pour les variables Coder les instructions qui permettent de calculer la résistance équivalente de notre dipôle. Afficher le résultat en kΩ avec 3 décimales via la fonction printf() en se référant à sa documentation sur le site cplusplus.com Veiller à insérer l’entête <stdio.h> avec la directive #include pour pouvoir utiliser cette fonction. Résultat attendu Req = 5.352 kOhms Durée de montée en t° d’un ballon d’eau chaude On désire faire un programme qui calcule la durée de montée en t° d’un ballon d’eau chaude de 10°C à 55°C sachant que celui-ci possède une contenance de 150l et une puissance de 1650W. Cette durée, exprimée en secondes et notée Δt, est déterminée par la formule suivante : avec : m, la masse d’eau contenue dans le ballon (en kg). Elle se calcule grâce au volume du ballon. En notant VBallon ce volume (en m3), on a : m = ρ × VBallon, où ρ est la masse volumique de l’eau (ρ = 1000 kg/m3). CP, la capacité calorifique de l’eau dans le ballon (en J/kg/°C). CP = 4186 J/kg/°C. ΔT, l’élévation de température. Dans notre cas, l’élévation de température est ΔT = 55°C - 10°C = 45°C p, la puissance en W du ballon d’eau chaude 🖮 Travail n° 2 Programme de calcul de montée en t° Créer un projet de type C — nommé TemperatureRiseTime — dans Qt Creator Dans la fonction main(), déclarer et initialiser une variable pour chaque élément de la formule mathématique et pour son résultat. Veiller à utiliser des noms explicites pour les variables. Coder les instructions qui permettent de faire le calcul de la durée de montée en température de 10°C à 55°C de notre ballon d’eau chaude Afficher le résultat en secondes avec la fonction printf() Résultat attendu dt = 17124.545455 s Consulter la rubrique “Rounding and remainder functions” de la page C numerics library puis modifier le programme pour qu’il arrondisse le temps de montée en température au nombre entier de secondes le plus proche. Afficher l’entier obtenu. Résultat attendu dt = 17125 s Faire évoluer le programme pour afficher le résultat en heures, minutes, secondes Résultat attendu dt = 4h 45' 25" On pourra se référer à la page Temps et durée pour se remémorer comment passer d’un nombre de secondes à un nombre d’heures, minutes et secondes. Calcul d’un CRC simple CRC veut dire Cyclic Redundancy Code. Le calcul de CRC permet au récepteur d’un message de vérifier que les données transmises ne contiennent pas d’erreurs. Pour faire cela, l’émetteur du message calcule une valeur appelée checksum qui est fonction du contenu du message, puis l’ajoute à la fin du message. Le récepteur fait le même calcul et contrôle que le résultat a la même valeur que celui transmis par l’émetteur. Plusieurs types de CRC existent mais il existe un CRC simple qui consiste à : faire la somme des valeurs numériques de tous les caractères d’un message récupérer le reste de la division entière de cette somme par 256 de façon à obtenir une valeur sur 8 bits (→ opérateur “modulo”) ajouter cette valeur à la fin du message 🖮 Travail n° 3 Calcul d’un CRC simple Créer un projet de type C — nommé SimpleCRC — dans Qt Creator Consulter l’article “Les chaînes de caractères” pour apprendre comment déclarer/utiliser une chaîne de caractères en C. Créer une variable chaîne de caractères — nommée msg — pouvant contenir au minimum 15 caractères et l’initialiser avec “Hello world !” Calculer, en guise de checksum, la somme “modulo” 256 des caractères contenus dans la variable msg Ajouter ce checksum à la suite du message et l’afficher avec printf() Résultat attendu Message avec CRC : "Hello world !}" (1) 1 le ‘}’ est le caractère dont le code ASCII (→ 125|10 = 0x7D|16) représente la somme “modulo” 256 du message “Hello world !” 🞄 🞄 🞄 🎯 Fiche de séquence Décodage de trames avec des tableaux et opérateurs bit-à-bit