LOPES Thomas TP C Tableaux et Structures TS1IRIS Compte rendu de Travaux Pratiques. TP C: Tableaux et structures. Partie C Problème Technique : Une station météorologique doit pouvoir mémoriser des informations collectées : - Température : 1 échantillon par heure. - Humidité : 1 échantillon par heure. - Pression. Solution Technique : Il faut créer une structure de données sous la forme d’un tableau d’échantillons qui « pointe » sur des structures permettant de mémoriser les échantillons mesurés sur la journée. I)Cahier des charges : On désire mémoriser les échantillons des différentes grandeurs météorologiques mesurées : température, humidité, pression. En condition normale d’utilisation, ces échantillons sont mémorisés toutes les 10 minutes : il faut donc en même temps mémoriser la date et l’heure de l’échantillon . La date est composée du jour (1..31) du mois (Janvier…Décembre) de l’année(ex : 2010). L’heure est composée : heure, minute seconde. Les informations des grandeurs météorologiques ainsi que la date et l’heure doivent faire partie de la même structure de données. II)Préalgorithme : Effacer l'écran. On affiche le Premier janvier. On demande à l'utilisateur de saisir les températures entre -40°C et +50°C. (Filtrage des données grâce à la fonction SaisieClavier ). On demande à l'utilisateur de saisir le taux d'humidité qui varie entre 0 à 100%. (Filtrage de 0 a 100 grâce à la fonction SaisieClavier ). On demande à l'utilisateur de saisir la pression atmosphérique qui varie entre 800 à 1100 hectopascals. (Filtrage de 0 a 100 grâce à la fonction SaisieClavier ). On restitue la Température , l'humidité de l'air et la Pression atmosphérique. Toutes les 24 heures on récupère les échantillons et les restituons . Puis tous les jours du mois de Janvier on demande les échantillons On demande à l'utilisateur la reprise du programme. Page n°1/6 LOPES Thomas TP C Tableaux et Structures TS1IRIS III)Algorithme: {Fonction de la Saisie de clavier} SaisieEntier ( BorneInf : entier , BorneSup : entier ) : entier ; Début {Déclarations des variables.} var: BorneMini : entier ; BorneMaxi : entier ; resultat : entier ; {Initialisations des bornes.} Répeter Début Faire gotoxy ; et effacer ligne ; Vider le buffer; resultat ←Saisie clavier ; Fin Jusqu'a ce que ( resultat >= BorneMini ET resultat <= BorneMaxi ) {Retour du résultat} retourner ( résultat ) ; Fin Températures (néant) : néant Début {Déclarations des variables} {Déclarations des structures} struct ECHJOUR { int temp[24] ; int humi[24] ; int pression[24]; }ECHJOUR ; Echjour = enregistrement Début temp : réel ; humi : entier ; pression : entier ; Fin Page n°2/6 LOPES Thomas TP C Tableaux et Structures TS1IRIS var: i , j: entier non signé ; {Le Programme} {Saisie des Échantillons } { Saisie de la date. } Répeter Début Présentation écran ; Pour i ← 0 à i < 7 par pas de 1 Faire {Boucle pour les jours} Début Pour j ← 0 à j < 24 par pas de 1 Faire {Boucle pour les heures} Début {Saisie de l'échantillon} {Saisie des températures.} Afficher "Veuillez saisir la temperature (entre -40 et +50 degres): " ; saisieEchanti.temp← SaisieEntier( -40 , 50 ) ; {Saisie de l'humidité.} Afficher "Veuillez saisir l'humidite (entre 0 et 100): " ; saisieEchanti.humi←SaisieEntier( 0 , 100 ) ; {Saisie de la pression.} Afficher "Veuillez saisir la pression (entre 800 et 1100): " ; saisieEchanti.pression←SaisieEntier( 800 , 1100 ) ; Fin Fin {Restitution des échantillons par jour} Pour i ← 0 à i < 7 par pas de 1 Faire {Boucle pour les jours} Début Pour j ← 0 à j < 24 par pas de 1 Faire {Boucle pour les heures} Début Afficher « Aujourd'hui le ,i+1, janvier a , j , h :" »; Afficher « La temperature est de ,janvier[i].temp[j] , la pression est de, janvier[i].pression[j] , hectopascals»; Afficher « et le taux d humidite de % .",janvier[i].humi[j] »; Fin Fin Afficher " Appuyer sur 'n' pour quitter le programme ou autre pour continuer "; Fin Jusqu'à ce que ( saisie clavier ←'N' ) Fin Page n°3/6 LOPES Thomas TP C Tableaux et Structures TS1IRIS IV)Le Programme. /******************************************************************************************************* * NOM :Station météo * SUJET :Saisir les températures, presion, humdité toutes les heures , tous les jours du mois de janvier. * AUTEUR :LOPES Thomas . * VERSIO :v1.2 * CREATION :03/01/2011 * DER.MODIF :06/01/2011 * ACCESS SOURCE :H:\Tido\Lycée\Programmation\Source - Projet\Revy\Borland\Tableaux et structures\Partie C * ACCES OBJ :H:\Tido\Lycée\Programmation\Source - Projet\Revy\Borland\Tableaux et structures\Partie C * ACCESS EXE :H:\Tido\Lycée\Programmation\Source - Projet\Revy\Borland\Tableaux et structures\Partie C * LIMITES :environnement DOS * CONTRAINTES :Fonctionne sur PC *******************************************************************************************************/ /* les directives*/ #include <stdio.h> #include <conio.h> #include <ctype.h> #define FF fflush(stdin) /******************************************************************************* *Le programme principal : *Paramètres entrant : aucun *Paramètres sortant : aucun ****************************************************************************/ /*Déclarations des structures*/ /*Fonction de la Saisie de clavier*/ int SaisieEntier ( int BorneMini , int BorneMaxi ) { /*Déclarations des variables.*/ int resultat ; /*Initialisations des bornes.*/ do { gotoxy(1,6); clreol(); FF; scanf("%d", &resultat) ; } while ( resultat < BorneMini || resultat > BorneMaxi ) ; /*Retour du résultat*/ return ( resultat ) ; } void main (void) Page n°4/6 LOPES Thomas TP C Tableaux et Structures TS1IRIS { /* les déclarations */ struct ECHJOUR { int temp[24] ; int humi[24] ; int pression[24]; }ECHJOUR ; struct ECHJOUR janvier[31]; int unsigned i , j ; do { /*Programme*/ clrscr(); gotoxy(25,1); puts("***************"); gotoxy(25,2); puts("*Station meteo*"); gotoxy(25,3); puts("***************"); for ( i = 0 ; i < 7 ; i++ ) /*Boucle pour les jours */ { for ( j = 0 ; j < 24 ; j++ )/*Boucle pour les heures */ { gotoxy(1,5); printf("Saisissez la temperature a %dh : ", j); janvier[i].temp[j] = SaisieEntier( -40 , 50 ); gotoxy(1,5); printf("Saisissez l humidite a %dh : ", j); janvier[i].humi[j] = SaisieEntier( 0 , 100 ); gotoxy(1,5); printf("Saisissez la pression a %dh : ", j); janvier[i].pression[j] = SaisieEntier( 800 , 1100 ); } } /*restitution des valeurs */ Page n°5/6 LOPES Thomas TP C Tableaux et Structures TS1IRIS for ( i = 0 ; i < 7 ; i++ ) /*Boucle pour les jours */ { for ( j = 0 ; j < 24 ; j++) /*Boucle pour les heures */ { printf("\nAujourd'hui le %d janvier a %d h :",i+1 , j); printf("\nLa temperature est de %d , la pression est de %d hectopascals",janvier[i].temp[j], janvier[i].pression[j]); printf("\net le taux d umidite de %d % .\n",janvier[i].humi[j]); } } gotoxy(1,20); puts(" Appuyer sur 'n' pour quitter le programme ou autre pour continuer "); } while( toupper(getch()) != 'N'); /*Boucle de reprise du programme*/ } VII)Tests de validation: Actions ou opérations à vérifier. Tests à effectuer -41 Saisie filtrée des températures. Saisie filtrée de l'humidité dans l'air (en %). Saisie filtrée de la pression en Hectopascals. Résultats attendus Réitérer la demande. Résultats Obtenus Réitérer la demande. +33.5 33.5 degrés 33.5 degrés 0 0 degrés 0 degrés -35.8 -35.8 degrés -35.8 degrés +51 Réitérer la demande. Réitérer la demande. -1 Réitérer la demande. Réitérer la demande. 50 50,00% 50,00% 110 Réitérer la demande. Réitérer la demande. 750 Réitérer la demande. Réitérer la demande. 850 850 850 1500 Réitérer la demande. Réitérer la demande. VII)Conclusion: Comme les résultats obtenus sont les même que les résultats attendus on peut dire alors que le cahier des charges est respecté et que le programme est validé. Page n°6/6