Les sous-programmes : exercices résolus en F Corrigé

Documents pareils
1. Structure d'un programme FORTRAN 95

Algorithmique et programmation : les bases (VBA) Corrigé

= constante et cette constante est a.

FOCUS Evolution. Lisez-Moi. Version FE 7.0.t

HERAKLES Page 1 sur 6 COMMENT CREER DES FACTURES D ACCOMPTE FICHE COMMENT CREER DES FACTURES D ACCOMPTE?

Corrigé des TD 1 à 5

Cours Informatique Master STEP

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

MANUEL UTILISATEUR : RECETTES TABLE DES MATIERES PIE : PRESTATIONS INTERNES ET EXTERNES

Examen Médian - 1 heure 30

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

CAISSE ENREGISTREUSE ELECTRONIQUE SE-G1

COMPTABILITE SAGE LIGNE 100

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Cours d algorithmique pour la classe de 2nde

Comment personnaliser la présentation de mes factures, bons de préparation et de livraison?

Feuille TD n 1 Exercices d algorithmique éléments de correction

Les pourcentages. Un pourcentage est défini par un rapport dont le dénominateur est 100. Ce rapport appelé taux de pourcentage est noté t.

Thème : Gestion commerciale

GUIDE DE PRISE EN MAIN

III- Raisonnement par récurrence

Développements limités, équivalents et calculs de limites

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Algorithmique & programmation

CEGID - Business Suite Gestion commerciale

Chap III : Les tableaux

Guide d Utilisation du logiciel Diagnostic Commerce

EVOLUTION 7.1 Déroulement DREAM INFO 1 Dossier 23 Ciel Gestion Commerciale.

DE MODIFICATION PROCEDURE ELYXBADGE APPLICATION. PI Électronique Restobadge

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

«Dire et écrire» pour réaliser une composition en travail collaboratif en géographie. Agnès Dullin, lycée J. Racine 20 rue du Rocher, Paris

Faire de la publicité sur GOOGLE AD-WORDS

Application 1- VBA : Test de comportements d'investissements

GESTION WINPRO ** PRISE EN MAIN RAPIDE **

C f tracée ci- contre est la représentation graphique d une

Initiation à la programmation en Python

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

DECOUVERTE DU LOGICIEL CIEL GESTION COMMERCIALE

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Utilisation d objets : String et ArrayList

Bases de programmation. Cours 5. Structurer les données

EXERCICE N 9. Base Centrale de pilotage. Notions abordées : Création d objets personnels. Utilisation de fonctions numériques

Algorithmique et Programmation, IMA

PVM 1 PVM. Parallel Virtual Machine

Créer sa première base de données Access Partie 3/4 - Création d un formulaire

COMPTABILITE SAGE LIGNE 30

CARTE ACHAT. Yolande Sallent

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Loi de finance rectificative 2012 Article 68 de la loi de finances rectificative pour 2012 n du 29 décembre 2012

Cahier des charges Remontée des ventes

Plan du cours Cours théoriques. 29 septembre 2014

E4D : ÉTUDE DE CAS. Durée : 5 heures Coefficient : 5 CAS TONER EXPRESS

Exprimer ce coefficient de proportionnalité sous forme de pourcentage : 3,5 %

Notice Générale - MODULE CLIENTS. I. Description générale du module. II. La liste des clients a. Accès

LES OPÉRATIONS JOURNALIÈRES. a) qu est ce qu une entreprise peut vendre à ses clients :

Plan de formation des Personnels en CUI-CAE Année

Import d un fichier de contacts dans une campagne

avec des nombres entiers

Enseignement secondaire technique

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

DovAdis. Objet Rapprochement bancaire Métier Gérance. Siège social SPI 1, rond-point du Flotis Bât IV St Jean

Les structures. Chapitre 3

NETWORK & SOFTWARE ENGINEERING MANUEL D UTILISATEUR. Logiciel TIJARA. NETWORK AND SOFTWARE ENGINEERING Manuel d'utilisateur "TIJARA" 1

PARAMETRAGE DU STOCKAGE/DESTOCKAGE DES ARTICLES & MOUVEMENTS DE STOCKS

Mise à jour ESCentiel - Juin 2012

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Google fait alors son travail et vous propose une liste de plusieurs milliers de sites susceptibles de faire votre bonheur de consommateur.

Saisir des règlements par le relevé de banque

Éco-Chèque UNE AIDE DE LA RÉGION MIDI-PYRÉNÉES POUR LES PARTICULIERS QUI FONT DES TRAVAUX D ÉCONOMIE D ÉNERGIE DANS LEUR LOGEMENT

, accessible depuis l application ITOOL Comptabilité est un module complémentaire permettant la dématérialisation de vos factures d achats.

NOTICE SIMPLIFIEE ER-A280F. I Initialisation avec Remise à Zéro de la caisse : ENTER PASSWORD ER-A280V. Ver1.02

EBP Point de vente (Front office)

MegaStore Manager ... Simulation de gestion d un hypermarché. Manuel du Participant

Auto-Entreprise : Activités : Eric SOTY - Siret n Formation Bureautique, continue d'adultes. Tél : Fax :

Selon la charte de l expertise en évaluation immobilière, 3 ème édition Juin 2006, la valeur vénale est :

Licence Sciences et Technologies Examen janvier 2010

COURS WINDEV NUMERO 3

RAPPORTN CP DIRECTIONGENERALEDESSERVICES PÔLEBATIMENTSET TRANSPORTS. Direction : Maintenance et des Aménagements

Zerty.fr. Guide de lʼutilisateur

LICENCE D'UTILISATION DE LOGICIEL

Encryptions, compression et partitionnement des données

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Génie Logiciel avec Ada. 4 février 2013

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Recherche dans un tableau

Chapitre 5 : Les procédures stockées PL/SQL

Dématérialisation des factures du Secteur Public

Compression Compression par dictionnaires

TP1. Outils Java Eléments de correction

KWISATZ MODULE PRESTASHOP

Chapitre VI : DEPENSES DONNANT DROIT A UNE REDUCTION D IMPÔT ET DEPENSES DEDUCTIBLES

Guide de prise en main. Yourcegid SOLOS. Devis-Factures. 12/08/2013 Page 1 / 38

SI-EXPERTISE. transfertbanque. Guide utilisateur version 13.2.x

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

PROGICIELS 2007 : 12 ème édition 3 & 4 octobre 2007 ANNECY Espace Rencontre

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Gestion de gros fichiers binaires (images) en APL*PLUS III

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Par combien de zéros se termine N!?

Transcription:

PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Exercices résolus en F, Semaine 3 avril mai 2013 Corrigé Objectifs Savoir écrire des sous-programmes ; Comprendre les modes de passage de paramètres ; Faire la différence entre fonction et procédure ; Continuer à appliquer les principes des semaines 1 & 2. Exercice 1 : Notion de produit......................................................... 1 Exercice 2 : Notion de ligne de facture................................................. 2 Exercice 3 : Notion de facture......................................................... 3 Exercice 4 : Programme de test........................................................ 6 1 Édition simplifiée d une facture L objectif de ces exercices est de réaliser l édition d une facture dans une version relativement simplifiée puisqu il s agit de pouvoir ajouter et/ou supprimer des lignes sur une facture et de l éditer à l écran. Nous ne traiterons pas l interface homme/machine (IHM) et nous nous contenterons donc de développer les types et sous-programmes qui constituent ce modèle. Exercice 1 : Notion de produit Commençons par définir le type Produit et les opérations associées. 1.1 Écrire le type Produit sachant qu un produit est caractérisé par un code (sur 3 caractères), un libellé (9 caractères) et un prix hors taxe. Solution : Le type Produit est un enregistrement composé de trois champs un code de type chaîne de 3 caractères, un libellé (chaîne de 9 caractères) et un prix hors taxe (Réel). 1 INTEGER,PARAMETER,PUBLIC::LG_CODE = 3! longueur maximale d un code 2 INTEGER,PARAMETER,PUBLIC::LG_LIBELLE=9! longueur maximale d un libelle 3 TYPE,PUBLIC::Produit 4 CHARACTER(LEN=LG_CODE)::code 5 CHARACTER(LEN=LG_LIBELLE)::libelle 6 REAL:: prix_ht 7 END TYPE Produit 1.2 Écrire un sous-programme pour initialiser un produit à partir de son code, son libellé et son prix hors taxe. Exercices résolus en F, Semaine 3 c INPT PAD 1/7

Solution : Le but du sous-programme est «initialiser un produit à partir de son code, son libellé, et son prix hors taxe». Les paramètres sont donc : le produit à initialiser : out ; le code du produit : in ; le libellé du produit : in ; le prix du produit : in. On constate qu il n y a qu un seul paramètre en sortie et tous les autres sont en entrée. Nous en faisons quand même une procédure car il s agit d un sous-programme d initialisation. Il est préférable dans ce cas que la mémoire soit fournie par le programme appelant (ceci évite par exemple de faire des copies inutiles lors du retour de la fonction). On peut donc en déduire la spécification. 1 Procédure initialiser_produit(p: out Produit) ; 2 c: in Code ; l: in Libellé ; prix_ht: in Réel) Est 3 -- Initialiser le produit p à partir de son code c, de son libellé l 4 -- et de son prix hors taxe. On peut maintenant en déduire le code. 1 Début 2 produit.code <- c 3 produit.libellé <- l 4 produit.prix_ht <- prix_ht 5 Fin 1 SUBROUTINE initialiser_produit(p,c,l, prix_ht) 2 TYPE(Produit),INTENT(OUT)::p 3 CHARACTER(LEN=LG_CODE),INTENT(IN)::c 4 CHARACTER(LEN=LG_LIBELLE),INTENT(IN)::l 5 REAL,INTENT(IN):: prix_ht 6 p%code=c 7 p%libelle=l 8 p%prix_ht = prix_ht 9 END SUBROUTINE initialiser_produit Exercice 2 : Notion de ligne de facture Le type LigneFacture permet de représenter une ligne d une facture. Il est caractérisé par le produit concerné, la quantité commandée et le prix total hors taxe de la ligne. 2.1 Définir le type LigneFacture. Solution : Le type LigneFacture est également un enregistrement. Notons la redondance entre le prix hors taxe de la ligne et des informations prix hors taxe d un produit et quantité commandée. 1 TYPE,PUBLIC:: LigneFacture 2 TYPE(Produit)::produit 3 INTEGER:: quantite! > 0 4 REAL:: prix_ht! prix_ht = quantite * produit.prix_ht 5 END TYPE LigneFacture Exercices résolus en F, Semaine 3 c INPT PAD 2/7

2.2 Définir une opération qui permet d initialiser une ligne de facture à partir du produit concerné et de la quantité commandée. Le prix total hors taxe de la ligne peut être déduit de ces deux informations puisqu il correspond au prix hors taxe du produit multiplié par la quantité commandée. Solution : L initialisation d une ligne de facture est réalisée sur le même principe que le produit. 1! Initialiser une ligne de facture a partir du produit concerne et de 2! la quantite commandee. 3 SUBROUTINE initialiser_ligne(ligne,p,quantite) 4 TYPE(Produit),INTENT(IN)::p 5 INTEGER,INTENT(IN):: quantite 6 TYPE(LigneFacture),INTENT(OUT)::ligne 7 ligne%produit = p 8 ligne%quantite = quantite 9 ligne%prix_ht = p%prix_ht * quantite 10 END SUBROUTINE initialiser_ligne 2.3 Écrire une opération qui affiche une ligne de facture. Les informations sont affichées de manière tabulée avec dans l ordre le code du produit, son libellé, son prix hors taxe, la quantité commandé, le prix total hors taxe et le prix total TTC. On supposera le taux de TVA constant et indépendant des produits. Voici un exemple de ligne affichée. 1 001 Truc 99.00 10 990.00 1184.04 Solution : Ce sous-programme réalise un affichage sur l écran. Il convient donc d en faire une procédure. Notons qu il n a qu un seul paramètre en entrée, la ligne de facture, ce qui nous aurait aussi conduit à en faire une procédure. 1! Afficher une ligne de facture. 2 SUBROUTINE afficher_ligne(ligne) 3 TYPE(LigneFacture),INTENT(IN)::ligne 4 REAL:: prix_ttc 5 6! calculer le prix ttc 7 prix_ttc = ligne%prix_ht * (1+TVA) 8 9! PRINT*," %3s %10s %7.2f %2d %7.2f %7.2f \n",& 10 PRINT"(A5,A19,F9.2,I5,f9.2,f9.2)",& 11 ligne%produit%code, ligne%produit%libelle, ligne%produit%prix_ht,& 12 ligne%quantite, ligne%prix_ht, prix_ttc 13 END SUBROUTINE afficher_ligne Exercice 3 : Notion de facture Définissons enfin le type Facture. Une facture contient plusieurs lignes (20 au maximum). Elle est caractérisée par un numéro de facture. 3.1 Définir le type Facture. Solution : Le type Facture est un tableau de lignes de facture. On ne sait pas à priori combien il y aura de lignes mais on sait qu il y en a moins de 20. On peut donc prendre un tableau de Exercices résolus en F, Semaine 3 c INPT PAD 3/7

capacité 20 et il faudra gérer la taille effective. Ces deux informations sont donc regroupées dans un enregistrement 1 INTEGER,PARAMETER,PUBLIC:: NB_LIGNES = 20! nombre maximal de lignes sur une factur 2 TYPE,PUBLIC:: Facture 3 INTEGER:: numero 4 TYPE(LigneFacture),DIMENSION(NB_LIGNES):: lignes 5 INTEGER:: nb_lignes_eff! nombre effectif de lignes sur la facture 6 END TYPE Facture 3.2 Écrire une opération qui permet d initialiser une facture à partir de son numéro. Une telle facture est bien entendu vierge et ne contient donc aucune ligne. Solution : Ce sous-programme a un seul paramètre, la facture à initialiser. C est un paramètre en sortie. On fait donc une procédure. 1! Initialiser une facture. 2! 3! Assure 4! une_facture%nb_lignes == 0 5 SUBROUTINE initialiser_facture(une_facture,son_numero) 6 INTEGER,INTENT(IN):: son_numero 7 TYPE(Facture),INTENT(OUT)::une_facture 8 une_facture%numero = son_numero 9 une_facture%nb_lignes_eff = 0 10 11! assert(une_facture->nb_lignes == 0) 12 END SUBROUTINE initialiser_facture 3.3 Écrire un sous-programme qui permet de calculer le montant total hors taxe de la facture. Il s agit de faire la somme des totaux hors taxe des lignes de la facture. Solution : Ce sous-programme prend en paramètre une facture (entrée) et fournit le total hors taxe de la facture (sortie). Il y a donc un seul paramère en sortie, d autres qui sont tous en entrée. On en fait donc une fonction. 1 Fonction montant_total_ht_facture(une_facture: Facture): Réel Est 2 -- Le montant total hors taxe de la facture une_facture. 1! Determiner le montant total HT d une facture 2 FUNCTION montant_total_ht_facture(une_facture) RESULT(resultat) 3 REAL::resultat 4 TYPE(Facture),INTENT(IN)::une_facture 5 INTEGER:: l! parcourir les lignes de la facture 6 7 resultat = 0 8 9 DO l = 1,une_facture%nb_lignes_eff resultat = resultat+une_facture%lignes(l)%prix_ht 10 ENDDO 11 END FUNCTION montant_total_ht_facture Notons qu en F, on a défini une variable locale resultat qui sert à accumuler le total des lignes. Exercices résolus en F, Semaine 3 c INPT PAD 4/7

3.4 Écrire un sous-programme pour ajouter une ligne à une facture, c est-à-dire un produit et la quantité commandée. Solution : Ce sous-programme prend en paramètre la facture à modifier (in out), le produit à ajouter (in) et la quantité commandée (in). On fait donc une procédure. Notons que pour l implantation de cette procédure, on peut utiliser l opération initialiser_ligne déjà définie. 1! Ajouter une ligne a une facture. 2! Necessite 3! une_facture.nb_lignes < NB_LIGNES 4 SUBROUTINE ajouter_ligne(une_facture, p, quantite) 5 TYPE(Facture),INTENT(OUT)::une_facture 6 TYPE(Produit),INTENT(IN)::p 7 INTEGER,INTENT(IN):: quantite 8! assert(une_facture->nb_lignes < NB_LIGNES) 9 une_facture%nb_lignes_eff=une_facture%nb_lignes_eff+1 10 CALL initialiser_ligne(une_facture%lignes(une_facture%nb_lignes_eff), 11 p, quantite) 12 END SUBROUTINE ajouter_ligne 3.5 Écrire un sous-programme qui permet d éditer une facture. Il s agit d afficher un entête portant le numéro de la facture. Ensuite sont affichées toutes les lignes et enfin le total hors taxe et TTC de la facture. Voici un exemple d édition d une facture. 1 2 Édition de la facture 1 3 ------------------------------------------------------- 4 001 Truc 99.00 10 990.00 1184.04 5 020 Chose 15.00 2 30.00 35.88 6 163 Bidule 250.00 1 250.00 299.00 7 ------------------------------------------------------- 8 1270.00 1518.92 Solution : Ce sous-programme prend un seul paramètre, la facture à éditer (in). Son objectif est de faire un affichage sur l écran (une sortie sur l écran). Nous en faisons donc une procédure. 1! Éditer a l ecran la facture. 2 3 SUBROUTINE editer_facture(une_facture) TYPE(Facture),INTENT(IN)::une_facture 4 INTEGER:: l! parcourir les lignes de la facture 5 REAL:: total_ht! total ht de la facture 6 REAL:: total_ttc! total ttc de la facture 7 8! Calculer les totaux 9 total_ht = montant_total_ht_facture(une_facture) 10 total_ttc = total_ht * (1+TVA) 11 12! Afficher l entete 13 PRINT* 14 15 PRINT*,"Edition de la facture : ", une_facture%numero Exercices résolus en F, Semaine 3 c INPT PAD 5/7

16 PRINT*,"-------------------------------------------------------" 17 18! Afficher les lignes 19 20 DO l = 1,une_facture%nb_lignes_eff CALL afficher_ligne(une_facture%lignes(l)) 21 22 ENDDO 23 24! Afficher le total 25 PRINT*,"-------------------------------------------------------" 26! PRINT*,"%33s %7.2f %7.2f \n", "", total_ht, total_ttc 27 PRINT"(T39,f9.2,f9.2)", total_ht, total_ttc 28 END SUBROUTINE editer_facture 3.6 Écrire un sous-programme pour supprimer une ligne d une facture en fonction de son numéro. Bien sûr, la première ligne porte le numéro 1. Solution : Ce sous-programme a pour paramètres la facture à modifier (in out) et le numéro de la ligne à supprimer (in). On fait donc une procédure. 1! Supprimer une ligne de la facture. Le numero n_ligne correspond a 2! la ligne de la facture qu il faut supprimer. 3! 4! Necessite 5! 1 <= n_ligne && n_ligne <= une_facture->nb_lignes 6 SUBROUTINE supprimer_ligne(une_facture, n_ligne) 7 TYPE(Facture),INTENT(OUT)::une_facture 8 INTEGER,INTENT(IN):: n_ligne 9 INTEGER:: l! parcourir les lignes a decaler 10 11! assert(1 <= n_ligne && n_ligne <= une_facture->nb_lignes) 12 13! Decaler les lignes 14 15 DO l = n_ligne,une_facture%nb_lignes_eff une_facture%lignes(l) = une_facture%lignes(l+1) 16 ENDDO 17 18 une_facture%nb_lignes_eff=une_facture%nb_lignes_eff-1 END SUBROUTINE supprimer_ligne Exercice 4 : Programme de test Écrire un programme de test pour les types et opérations définis dans les exercices précédents. Remarque : Même si c est le dernier exercice, il est souhaitable (et nécessaire) de le faire en même temps que les autres, au fur et à mesure que les sous-programmes sont écrits. En effet, tester au fur et à mesure permet de tester de manière plus exhaustive (donc de détecter plus d erreurs), de localiser plus vite la cause de l erreur et donc de la corriger plus facilement. Solution : 1! Programme principal, en fait programme de test! 2! Attention : ce programme de test n est absolument pas complet! 3 PROGRAM main 4 USE SP_MOD 5 TYPE(Facture) ::f1 Exercices résolus en F, Semaine 3 c INPT PAD 6/7

6 TYPE(Produit):: p1, p2, p3 7 8 CALL initialiser_produit(p1, "001", "Truc ", 99.0) 9 CALL initialiser_produit(p2, "020", "Chose ", 15.0) 10 CALL initialiser_produit(p3, "163", "Bidule ", 250.0) 11 12! Creation de la facture en ajoutant les lignes 13 CALL initialiser_facture(f1, 1) 14 CALL editer_facture(f1) 15 CALL ajouter_ligne(f1, p1, 10) 16 CALL editer_facture(f1) 17 CALL ajouter_ligne(f1, p2, 2) 18 CALL editer_facture(f1) 19 CALL ajouter_ligne(f1, p3, 1) 20 CALL editer_facture(f1) 21 22! Suppression de la deuxieme ligne 23 24 CALL supprimer_ligne(f1, 2) CALL editer_facture(f1) 25 26 END PROGRAM main Exercices résolus en F, Semaine 3 c INPT PAD 7/7