LZ Exo Sous Programme

Embed Size (px)

Citation preview

  • Exercices sur les sous-programme - page 1

    Exercices sur sous-programmesExercices sous Lazarus

    Eric Thirion - 04/07/2015

    Les exercices suivants sont en majorit des projets complter dont l'interface graphique est dj ralise, ce qui vous permettra un gain de temps important. Ces projets sont disponibles par tlchargement. Pour savoir comment y accder cliquez ici.

    Le tlchargement vous permettra galement d'obtenir les corrigs des exercices (les mmes projets complets et fonctionnels).

    D'autre part, ce document fait partie d'un ensemble de cours du mme auteur (programmation objet, programmation web, bases de donnes) auxquels vous pouvez accdez en cliquant ici.

    Exercice 1 : Frais de dplacement

    Projet: Exo-Sous-Programme/Pascal/FraisDeplacement/ProjetFraisDepl.lpi

    En vous inspirant de l'exemple vu en cours rcrivez le code de ce projet en associant une procdure sans paramtre chaque traitement intermdiaire du calcul des frais de dplacement.

    Pour l'exemple du cours, la version de dpart se trouve dans le dossier

    Exemple-Premieres-Notions/Peinture

    La version avec procdure sans paramtre se trouve dans le dossier

    Exemple-Sous-Programme/Peinture

    Exercice 2 : Calcul de Moyenne

    Projet: Exo-Sous-Programme/Pascal/Moyenne/ProjetMoyenne.lpi

    Le formulaire

    Noms des zones de textes (dans le sens de la lecture):

    ZT_Info1, ZT_Info2, ZT_MoyenneInfo

    ZT_Math1, ZT_Math2, ZT_MoyenneMath

    ZT_Moyenne1, ZT_Moyenne2, ZT_MoyenneG

    Rgle du jeu

  • Exercices sur les sous-programme - page 2

    Pour toutes les questions de cet exercice, il est interdit d'utiliser une autre variable globale que la variable globale Moyenne dj dclare.

    Question 1 : Dclaration de la procdure CalculerLaMoyenne

    Dclarez une procdure, nomme CalculerLaMoyenne, avec deux paramtres de type double. Cette procdure doit calculer la moyenne des deux paramtres et affecter le rsultat la variable globale Moyenne.

    Dans les questions suivantes, tous les calculs de moyenne devront se faire en utilisant cette procdure.

    Question 2: Calcul de la moyenne en informatique

    Lorsque l'utilisateur clique sur le bouton Moyenne en Informatique aprs avoir saisi les deux notes d'informatique, le programme doit afficher la moyenne de ces deux notes dans la zone de texte ZT_MoyenneInfo.

    Pour obtenir ce rsultat, n'crivez pas directement le code dans la procdure vnementielle associe ce bouton (c'est dire BT_MoyenneInfoClick).

    Comme cet exercice porte sur la dclaration et l'appel de procdure, on vous impose ici de programmer en utilisant ces nouveaux concepts.

    Vous allez donc tout d'abord crire une nouvelle procdure, sans paramtres, nomme MoyenneEnInfo qui effectuera le traitement souhait, ainsi que l'instruction d'appel de cette procdure (et rien d'autre !) dans la procdure BT_MoyenneInfoClick.

    Dans la procdure MoyenneEnInfo, utilisez obligatoirement la procdure CalculerLaMoyenne .

    Indication: dans une procdure non-vnementielle, les composants de formulaire doivent tre prfix par Form1. Par exemple, la zone de texte ZT_Info1 s'crit Form1.ZT_Info1.

    Question 3: Calcul de la moyenne en mathmatique

    Mme principe pour le bouton Moyenne en Mathmatiques.

    Question 4: Moyenne des colonnes

    Dans cette question, on suppose que l'utilisateur dj calcul les moyennes en informatique et en mathmatiques.

    Les zones de texte ZT_MoyenneInfo et ZT_MoyenneMath contiennent donc ces moyennes.

    S'il clique ce moment l sur le bouton Moyenne des Colonnes:

    La moyenne des notes du premier trimestre s'affichera dans la zone de texte ZT_Moyenne1.

    La moyenne des notes du second trimestre s'affichera dans la zone de texte ZT_Moyenne2.

    La moyenne gnrale (moyenne des moyennes en informatique et en mathmatiques) s'affichera dans la zone de texte ZT_MoyenneG.

    Encore une fois, on vous impose d'obtenir ce rsultat en utilisant des procdures.

    Vous allez donc dclarer une nouvelle procdure sans paramtres nomme MoyenneDesColonnes, qui effectuera le traitement souhait ainsi que l'instruction d'appel de cette procdure (et rien d'autre !) dans la procdure BT_MoyenneColonneClick.

    Dans le corps de la procdure MoyenneDesColonnes, tous les calculs de moyenne doivent se faire en utilisant la procdure CalculerLaMoyenne .

  • Exercices sur les sous-programme - page 3

    Question 5: Tous les calculs en un seul clic

    Si l'utilisateur clique sur le bouton Toutes les moyennes en mme temps aprs avoir saisi les quatre notes, il obtient directement les cinq moyennes:

    1. Moyenne en informatique2. Moyenne en mathmatique3. Moyenne du premier trimestre4. Moyenne du second trimestre5. Moyenne gnrale.

    Essayez d'obtenir ce rsultat en crivant une nouvelle procdure sans paramtre nomme ToutesLesMoyennes. Le code de cette procdure doit tre le plus court possible et rutiliser au maximum ce qui a dj t fait.

    La procdure vnementielle BT_ToutesLesMoyennesClick doit contenir un appel de cette procdure et rien d'autre.

    Question 6: Deuxime version de la procdures ToutesLesMoyennes

    Les instructions d'affichage que nous avons utiliss jusqu' prsent sont en fait des appels des procdures que j'ai crites. En particulier AfficherNombre est une procdure dont le premier paramtre est de type Double. Le premier paramtre effectif dans un appel de la procdure AfficherNombre peut donc tre une expression numrique quelconque.

    Par exemple, si A et B sont de type numrique et ZT une zone de texte, l'appel de procdure

    AfficherNombre (A+B, ZT)

    affichera la somme de A et B dans la zone de texte ZT.

    En utilisant cette nouvelle possibilit d'appeler la procdure AfficherNombre, crivez une nouvelle version de la procdure ToutesLesMoyennes, nomme ToutesLesMoyennes2 .

    Le dbut du code de cette procdure est dj crit. Ajoutez y cinq appels la procdure AfficherNombre, de manire obtenir le mme effet que celui de la procdure ToutesLesMoyennes.

    Exercice 3 : Frais de dplacement d'une voiture

    Notions utilises: appel de fonctions, variables locales, dclaration de procdures, dclaration de fonctions.

    Objectif

    Il s'agit de raliser un programme en Pascal permettant d'estimer les frais de dplacement d'une voiture partir de la distance parcourue, sa consommation (nombre de litres pour 100 km) et du prix de l'essence.

    Le programme permet galement d'estimer la consommation de la voiture partir de la distance parcourue avec un plein.

    Dans l'exercice 1 nous avions dj ralis un projet similaire (FraisDeplacement) utilisant uniquement des variables globales et des procdures sans paramtres. Dans cette nouvelle version du projet, on vous demande au contraire de n'utiliser aucune variable globale.

    Notez galement que l'interface graphique a change.

    Projet ouvrir: Exo-Sous-Programme/Pascal/Essence2/ProjetEssence2.lpi

  • Exercices sur les sous-programme - page 4

    Le formulaire Zone de textes (de haut en bas)

    ZoneTexteDep

    ZoneTexteArr

    ZoneTexteDist

    ZoneTexteConso

    ZoneTextePL

    ZoneTexteCout

    ZoneTexteRes

    Question1 : Fonctions de calcul

    Les calculs de distance , cout et consommation sont effectus par trois fonctions, que l'on vous demande d'crire :

    Nom de la fonction Paramtres Rsultat

    CalculDistanced : valeur du compteur au dpart

    Distance parcouruea : valeur du compteur l'arrive

    CalculCout

    d : distance parcourue

    Cout du dplacementc : consommation (en litres pour 100km)

    p : prix du litre d'essence

    CalculConsor : capacit du rservoir consommation

    (en litres pour 100km)d : distance parcourue

  • Exercices sur les sous-programme - page 5

    Question 2 : estimation de la consommation

    La consommation de la voiture est estime partir de la distance parcourue avec un plein d'essence. Le bouton Conso est utilis cet effet:

    Ecrivez la procdure vnementielle associe ce bouton en utilisant la fonction CalculConso.

    Question 3 : calcul de la distance

    Lorsque l'utilisateur clique sur le bouton Distance aprs avoir saisi les valeurs du compteur au dpart et l'arrive, la distance parcourue est affiche:

    Le code de la procdure venementielle associe ce bouton est le suivant:

    procedure TForm1.BoutonDistClick(Sender: TObject);begin DistanceViaCompteur ( ) ;end;

    Complter le code de la procdure DistanceViaCompteur en utilisant la fonction CalculDistance de manire obtenir le rsultat souhait.

  • Exercices sur les sous-programme - page 6

    Question 4 : Calcul du cout

    Le calcul du cot de dplacement se fait en cliquant sur le bouton Cout aprs avoir saisi les valeurs du compteur, la consommation et le prix du litre:

    La distance parcourue est calcule partir des valeurs du compteur.

    Donnez le code de la procdure vnementielle associe au bouton Cout en faisant obligatoirement appel la fonction CalculCout ainsi qu' la la procdure DistanceViaCompteur.

    Exercice 4: Conjugaison

    Objectif: en utilisant les fonctions sur les chaines de caractres, ralisez un programme permettant de conjuguer un verbe du premier groupe (imparfait, prsent et futur) partir de l'infinitif de ce verbe.

    Projet ouvrir: Exo-Sous-Programme/Pascal/Conjugateur/ProjetConjugateur.lpi

    Le formulaire

    Nom des contrles (dans le sens de la lecture):

    ZT_Verbe ZL_Imparfait , ZL_Present , ZL_Futur

  • Exercices sur les sous-programme - page 7

    Exercice 5: Random pythagore

    Objectif: utiliser les fonctions mathmatiques pour calculer l'hypothnuse d'un triangle ABC rectangle en A dont les dimensions sont gnres alatoirement.

    Projet ouvrir: Exo-Sous-Programme/Pascal/RandomPythagore/ProjetRandomPythagore.lpi

    Le formulaire

    Noms des zones de texte (dans le sens de la lecture): ZT_AB, ZT,AC, ZT_Angle, ZT_BC.

    Formules mathmatiques utiles

    Question 1 - Gnrer AB et AC

    En utilisant la fonction Random, gnrez alatoirement un nombre entier entre 1 et 10 et affectez le une variable AB de type Double.

    Faites de mme pour AC, puis afficher les valeurs de ces deux cots.

    Question 2 - Calculer BC par Pythagore

    Calculer BC en utilisant le thorme de Pythagore et affichez sa valeur arrondie au dixime (fonction RoundTo).

  • Exercices sur les sous-programme - page 8

    Question 3 - Calculer l'angle

    Calculer l'angle (en radian) et affichez sa valeur en degrs arrondie au dixime. Pour convertir un angle exprim en radians en degrs, il faut le multiplier par 180 / . Pour , vous pouvez utiliser la constante PI dj dclare.

    Question 4 - Calculer BC par l'angle

    Calculer BC en utilisant l'angle .

    Exercice 6 : Etat civil

    Notions utilises : variables locales, dclaration de procdure, fonctions prdfinies

    Projet ouvrir : Etudiant/Pascal/Naissance/ProjetNaissance.lpi

    Le formulaire

    Nom des contrles (dans le sens de la lecture)

    ZT_Jour , ZT_Prenom ZT_Mois , ZT_Nom ZT_Annee , ZT_Lieu ZL

    Question 1 - La procdure AjouterNaissance

    Ajoutez une procdure nomme AjouterNaissance au projet avec les paramtres suivants:

    Jour : de type Integer Mois : de type String Annee : de type Integer Prenom : de type String Nom : de type String Lieu : de type String

    Cette procdure doit afficher la date de naissance sur une seule ligne, comme dans l'exemple ci-dessus.

    On utilisera une variable locale de type chaine de caractres pour construire cette ligne avant de l'afficher.

    La procdure sera appele dans FormCreate avec les valeurs de paramtres que vous choisirez vous mme.

  • Exercices sur les sous-programme - page 9

    Question 2 - Procdure RemplirZoneTexte

    Ajoutez une procdure nomme RemplirZoneTexte au projet avec les mmes paramtres que la procdure prcdente, mais cette fois-ci il s'agit d'afficher leurs valeurs dans les zones de texte. On appelera cette procdure dans FormCreate, juste aprs l'appel de la procdure AjouterNaissance.

    Voil par exemple l'aspect du programme lorsque l'appel de la procdure AjouterNaissance se fait avec Pierre Simon Laplace n Baumont le 5 Aout 1749.

    Question 3 - le bouton Ajouter

    Compltez la procdure vnementielle associe au bouton Ajouter afin qu'un clic sur ce bouton transfre toutes les informations contenues dans les zones de textes dans une ligne de la zone de liste.

    Par exemple, si l'utilisateur clique sur Ajouter lorsque le programme se prsente comme la figure prcdente, il devrait obtenir ceci:

    Rgles du jeu: pour crire ce code on utilisera obligatoirement :

    les variables locales dj dclares dans cette procdure. un appel de procdure judicieusement choisi.

  • Exercices sur les sous-programme - page 10

    Exercice 7 : Calcul de vitesse, dures et distances

    Notions utilises: appel de fonctions, variables locales, dclaration de procdures, dclaration de fonctions.

    Objectif

    Il s'agit d'crire un programme permettant des calculs de vitesse, de dure et de distance en utilisant les deux reprsentation du temps dfinies ci-dessous.

    Reprsentation du temps

    Le temps est reprsent de deux manires dans le projet:

    En Heure/Minutes : par exemple 2H15. Une dure exprime en Heure/Minutes comporte deux parties: la partie heure et la partie minutes. Par exemple, la partie heure de 2H15 est 2 et la partie minutes 15.

    En Minutes: c'est le nombre de minutes contenues dans la dure. Par exemple: 2H15 = 2 X 60 + 15 minutes = 135 minutes

    L'heure de dpart (ou d'arrive) est le temps coul depuis 0H.

    Pour simplifier, on supposera que le dpart et l'arrive ont lieu dans la mme journe.

    Projet ouvrir: Exo-Sous-Programme/Pascal/Vitesse/ProjetVitesse.lpi

    Le formulaire

    Noms des zones de texte (dans le sens de la lecture):

    ZT_Heure_Dep , ZT_Min_Dep

    ZT_Heure_Arr, ZT_Min_Arr

    ZT_Heure_Dur, ZT_Min_Dur

    ZT_Distance

    ZT_Vitesse

  • Exercices sur les sous-programme - page 11

    Question 1: Conversion entre les deux reprsentations

    Dans le formulaire, le temps est reprsent en Heure/Minutes. Par contre, pour effectuer les calculs (dure, vitesse, etc) on utilisera la reprsentation en minutes. On aura donc besoin de fonctions de conversion permettant de passer d'une reprsentation l'autre.

    Dans cette premire question, on vous demande de complter le code des fonctions suivantes :

    HeureMinuteEnMinute: cette fonction permet de convertir une dure exprime en Heure/Minutes en une dure exprime en minutes. Elle possde deux paramtres de type entier: la partie heure et la partie minute de la dure. Le rsultat retourn par la fonction est le nombre de minutes. C'est donc galement un entier.

    PartieHeures et PartieMinutes ces deux fonctions permettent de convertir une dure exprime en minutes en une dure exprime en Heure/minutes. Plus prcisment:

    PartieHeures donne la partie heure. Elle possde un paramtre de type Integer: la dure exprime en minute. Le rsultat est la partie heure de cette dure. Il s'agit donc galement d'un entier. Pour l'obtenir, on calculera la partie entire (voir fonction Floor) de la dure divise par 60.

    PartieMinutes donne la partie minutes. Elle possde le mme paramtre que la fonction PartieHeures et retourne galement un rsultat de type Integer, qui reprsente cette fois-ci le nombre de minutes. A vous de trouver la formule mathmatique permettant de calculer ce rsultat.

    Question 2: Calcul de la dure

    La procdure vnementielle associe au bouton Dure est dj crite. Voici son code:

    procedure TForm1.BT_DureeClick(Sender: TObject); var depart, arrivee, duree : integer; beginDepart := LireDepart();Arrivee := LireArrivee();Duree := Arrivee - Depart;AfficherDuree (Duree);

    end;

    Ce code contient des appels de sous-programmes qui ne sont pas encore compltement crits:

    LireDepart: fonction sans paramtres qui lit l'heure de dpart depuis les deux zones de textes prvues cet effet. Cette fonction retourne l'heure de dpart en minutes.

    LireArrivee: idem pour l'heure d'arrive.

    AfficherDuree: procdure affichant la dure en Heure/Minutes dans les deux zones de textes prvues cet effet. Elle possde un paramtre: la dure en minutes.

    Il vous reste donc complter ces trois sous-programmes de manire faire fonctionner le bouton Dure.

    Question 3: Calcul de l'heure de dpart et d'arrive

    En vous inspirant de la procdure BoutonDuree_Click, crivez les procdures vnementielles associes aux boutons Dpart et Arrive sachant que:

    Le bouton Dpart donne l'heure de dpart partir de l'heure d'arrive et de la dure.

    Le bouton Arrive donne l'heure d'arrive partir de l'heure de dpart et de la dure.

  • Exercices sur les sous-programme - page 12

    On vous impose d'crire ce code en utilisant les sous-programmes suivants:

    LireDuree, pour lire la dure.

    AfficherDepart, pour afficher l'heure de dpart.

    AfficherArrivee, pour afficher l'heure d'arrive.

    Question 4: Calcul de la vitesse

    Le bouton Vitesse permet de calculer la vitesse en km/h partir de la dure (donne en Heures/Minutes) et de la distance (donne en km). Le code de la procdure vnementielle associe ce bouton est dj crit. Le voici:

    procedure TForm1.BT_VitesseClick(Sender: TObject); var duree: integer; vitesse, distance : double;beginDistance := LireDistance();Duree := LireDuree();Vitesse := CalculVitesse(Distance, Duree) ;AfficherVitesse (Vitesse );

    end;

    Ce code contient des appels de sous-programmes qui ne sont pas encore totalement crits et que l'on vous demande de complter:

    LireDistance: lit la distance donne par l'utilisateur.

    CalculVitesse: fonction deux paramtres. Le premier est la distance en km. Le deuxime est la dure en minutes. Le rsultat retourn est la vitesse en km/h.

    AfficherVitesse: procdure affichant la vitesse passe en paramtre dans la zone de texte prvue cet effet. On arrondira le rsultat au dixime en utilisant la fonction mathmatique RoundTo.

    Question5: Calcul de la distance

    Le bouton Distance permet de calculer la distance parcourue (en km) partir de la vitesse (en km/h) et de la dure (donne en Heures/Minutes).

    Ecrivez le code de la procdure vnementielle associe ce bouton, en utilisant imprativement les sous-programmes suivants :

    LireDuree, pour lire la dure.

    LireVitesse: fonction permettant de lire la vitesse depuis la zone de texte associe.

    CalculDistance: fonction deux paramtres. Le premier est la dure en minutes. Le deuxime est la vitesse en km/h. Le rsultat retourn est la distance en km.

    AfficherDistance: procdure ( complter) affichant la distance dans la zone de texte associe.

    Question 3 - Calculer l'angleQuestion 4 - Calculer BC par l'angleQuestion 1 - La procdure AjouterNaissanceQuestion 2 - Procdure RemplirZoneTexteQuestion 3 - le bouton AjouterObjectifQuestion 1: Conversion entre les deux reprsentationsQuestion 2: Calcul de la dureQuestion 4: Calcul de la vitesseQuestion5: Calcul de la distance