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

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

Embed Size (px)

Citation preview

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

GEF 243BProgrammation informatique

appliquée

Résolution structurée des problèmes

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

4/11/23 2

Synopsis

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

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

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

Page 4: GEF 243B Programmation informatique appliquée Résolution structurée des 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

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

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

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

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.

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

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

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

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)

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

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)

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

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

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

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’

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

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);

}

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

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…

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

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

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

4/11/23 15

6. Tests

• Pour nos trois cas de test:

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

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

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

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

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

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é

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

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

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

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.!!!

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

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.