GEF 243B Programmation informatique appliquée Résolution structurée des problèmes

Preview:

Citation preview

GEF 243BProgrammation informatique

appliquée

Résolution structurée des problèmes

4/11/23 2

Synopsis

• Processus de résolution des problèmes• Exemple• Exercice

4/11/23 3

Processus de résolution des problèmes

• ‘C’ est un langage structuré qui se porte bien au processus structuré de résolution des problèmes

• Une méthode en 6 étapes est présentéePeut être utilisée pour les problèmes en ingénierie ou en

scienceSuppose qu’un ordinateur sera utilisé pour résoudre les

problèmes

4/11/23 4

Design structuré

1. Énoncé le problème clairement (besoins)

2. Décrivez l’information des entrées sorties

3. Travailler le problème à la main (calculatrice)

4. Développez une solution (algorithme)

5. Convertissez l’algorithme en code

6. Testez le programme avec des données variées• Exceptions et conditions frontières

4/11/23 5

Problème exemple

• Nous allons maintenant utiliser la méthode sur un problème

• Exemple: Calculez la distance entre deux points sur un plan

4/11/23 6

1 - Énoncé le problème clairement (besoins)

• Nous devons capturer les besoins du programmeQue doit faire le programme?

• C’est très important pcq notre développement en entier est basé sur cette description.

• On ne doit pas seulement régurgiter l’énoncé de problème, on doit penser au contexte

1. Étant donné 2 points dans un plan calculer la distance en ligne droite (Euclidienne) et afficher cette distance.

4/11/23 7

2 . Décrivez l’information des entrées sorties

• Décrivez en détails les valeurs données (entrées) et les valeurs calculées (sorties)

• Décrives le type, grandeur et unités de ces valeursE.g. entiers positifs, réels, [-3,-2,-1,0,1,2,3]

2. Pour notre problème donné:a. Entrées sont deux points Euclidiens (x1, y1) et (x2, y2)

où chaque coordonnée peut être un nombre réel

b. La sortie est la distance (d) qui est aussi un nombre réel

4/11/23 8

3. Travailler le problème à la main

• Travailler le problème à la main utilisant des diagrammes et un ensemble de données simple.

• Vous pourriez avoir à consulter des référencesTrouvez des équations ou algorithmes (Wikipedia,

Shaum)

3. Considérez deux points : p1 = (1,5) et p2 = (4,7)

4/11/23 9

3. Travailler le problème à la main

• Vous pouvez faire plus d’un exemple pour vous convaincre que vous comprenez les complexités du problème

• Ex: en utilisant des points non entiers ou des valeurs négatives. p1 = (-1.5,5.275) et p2 = (5.25,-3.775)p1 = (0,5) et p2 = (-3,0)

4/11/23 10

4. Développez une solution

• Un algorithme est une solution par étape. Décrivez la solution pour un lecteur (autre que vous)

• Ceci demande souvent de décomposer le problème en plus petits problèmes (on revient à ça bientôt) Approche structurel

• Des algorithmes peuvent déjà exister … recherche

4. Décomposition du problème1. Obtenir les valeurs d’entrée (x,y) des 2 points

2. Calcul la longueur de chaque côté

3. Calcul l’hypoténuse (distance)

4. Retourne ou affiche la distance

4/11/23 11

5. Convertissez l’algorithme en code

• Si la décomposition du problème est complète, elle nous donne tout ce que l’on a de besoinEntrées et leurs typesSorties et leurs typesProcédure pour calculer les sorties à partir des entréesFormat de la sortie

• Ensuite implémentation du code en ‘C’

4/11/23 12

/********************************************************************************* File: distanceexample.c** Author: Dr. Don McGaughey** Description: Given two points in a plane, this program will give the * Euclidean distance between them and output it to the console** Revision History: Created September 2008********************************************************************************/#include <stdio.h>#include <math.h>int main(void){/* declare and initialize variables *///p1 = (1,5) and p2 = (4,7)

double x1=1, y1=5, x2=4, y2=7;double side1, side2, distance;

/* Compute the lengths of the sides */side1 = x2-x1;side2 = y2-y1;

/*Compute the distance */distance = sqrt(side1*side1 + side2*side2);

/* Print Distance */printf("The distance between (%5.2f,%5.2f) and (%5.2f,%5.2f) is %5.2f\n",

x1,y1,x2,y2,distance);

/* Exit Program */getchar();return(0);

}

4/11/23 13

5. Notes sur le code

• L’entête de documentation est requise

• La bibliothèque de math est utilisée (pas besoin de réinventer la roue)

• Pour changer les points, le code doit être recompiléArguments de ligne de commande ou entrée par

fichier…

4/11/23 14

6. Tests

• Même si le code compile (la syntaxe est bonne), il peut y avoir des erreurs (sémantique est mauvaise)

• Exécutez le code sur des cas connues (oracles) pour obtenir les bons résultats

• Il est en général impossible de vérifier touts les cas avec votre programme

• Élaborez de bons tests avec cas frontières et exceptions

4/11/23 15

6. Tests

• Pour nos trois cas de test:

4/11/23 16

C’est maintenant votre tour!!!• Je prend un prêt pour un quelques mois à un taux d’intérêt.

J’ai besoin d’un programme pour calculer le montant des mes taux mensuels

• Utilisez la méthode que nous venons de voir pour dessiner le code qui implémente le calculateur des paiements

4/11/23 17

Solution (1/4)

1. Étant donné une valeur de courrante, un taux d’intérêt, et un nombre de périodes, calculez l’annuité équivalant

2. Entrées et sorties Entrées

• Valeur du prêt (P) est un nombre réel

• L’intérêt mensuel (i) est un nombre réel

• Nombre de périodes (n) est un nombre entier

Sorties: Annuité équivalent (A) est un nombre réel

3. Exemple à la main P = $10,000, i = 1%, n = 60 mois

4/11/23 18

Solution (2/4)

4. Développement de l’algorithme Ceci peut vous demander de retourner à vos notes de

IGF 293

1. Donnez ou entrez la valeur courante, le taux d’intérêt, et le nombre de périodes

2. Calcul la valeur du facteur [P/A, i, n]

3. Calcul l’annuité équivalent

4. Afficher l’Annuité

4/11/23 19

Solution (3/4)

/***************************************************************************** File: paymentCalculator.c** Author: Prof Sylvain P. Leblanc** Description: Given a present value, an interest rate and a number of periods,* this program calculates the equivalent annuity** Revision History: Created 22 December 2009*****************************************************************************/#include <stdio.h>#include <math.h>int main(void){/* declare and initialize variables *///p = 10000, i = 0.01 and n = 60

double p=10000, i=0.01; int n=60;double factor, a;/* Compute the value of factor [P/A,i,n] */factor = i*pow(1+i,n)/(pow(1+i,n)-1);

/*Compute the equivalent annuity */a=p*factor;/* Print the annuity */printf("The annuity equivalent to a present value of $%5.2f, an interest " "rate of %2.2f, and a number of period of %2d is $%5.2f\n", p,i,n,a);/* Exit Program */getchar();return(0);

}

5 – Convertis l’algorithme en code

4/11/23 20

Solution (4/4)6. Tests

P = $10,000, i = 1%, n = 60

P = $10,000, i = 99%, n = 60

P = $10,000, i = 0%, n = 60

• On a un problème.!!!

4/11/23 21

Quiz Time

Which of the following is NOT part of the design methodology?

a. Problem statementb. Testingc. Celebratory beerd. Input and output

You are to calculate the current in a resistor (R=V/I). Give a example of tests you should perform on this code.

Recommended