![]() |
Développement :
Auteur : Jean HENRI - Dernière mise à jour : 27 novembre 2003 |
![]() Pour m'écrire |
Pour une fois, il ne s'agit pas de développer une application qui dit "bonjour" à la face du monde...
Cette application va permettre de solutionner un petit problème de maths amusant (?) : Comment décomposer un entier en une somme d'entiers qui se suivent ? Par exemple, 12 = 3 + 4 + 5
Sans entrer dans la démonstration mathématique, on utilisera une unité Pascal qui contient la procédure Décomposer définie comme suit :
procedure decomposer (Nombre : longword; var NbDebut, NbFin : longword)
où :
- LongWord est le type d'entier naturel (c'est à dire positif ou nul) qui permet de représenter la plus grande valeur entière : 4 294 967 295
- Nombre représente le nombre à décomposer (12 avec l'exemple ci-dessus)
- NbDebut représente le premier entier de la somme (3, toujours dans l'exemple ci-dessus)
- NbFin représente le dernier entier de la somme (5 dans l'exemple ci-dessus).
Si un entier ne peut pas être décomposé en somme, NbDebut et NbFin contiendront 0.
Le source de l'unité est téléchargeable ici : unité un_exomath.pas
Il faut d'abord créer un dossier pour sauvegarder tous les fichiers du projet. Si nous décidons que l'application s'appellera decomposition.exe, le dossier sera nommé : pj_decomposition
Dans ce dossier, nous plaçons un exemplaire de l'unité un_exomath.pas
Sous Delphi nous commençons un nouveau projet :
menu Fichier / commande Nouveau... / commande Application
que nous enregistrons immédiatement dans le dossier pj_decomposition par la commande :
menu Fichier / commande Tout enregistrer
Delphi nous demande d'enregistrer d'abord une unité (normalement, le nom par défaut est unit1.pas). Cette unité correspond à la fenêtre principale c'est à dire la seule pour cette première application. Nous appellerons cette fenêtre "principale" et nous nommons donc le fichier : un_principale.pas
Ensuite nous devons enregistrer le projet (normalement, le nom par défaut est project1.dpr). Puisque notre application devra s'appeler decomposition.exe, le projet doit porter comme nom : decomposition.dpr
Par la suite, nous pourrons sauvegarder le projet par la même séquence "menu Fichier / Tout enregistrer" sans qu'il soit nécessaire de redonner ces noms.
Compte tenu du problème de math à résoudre, il faut :
- demander à l'utilisateur un nombre,
- calculer la décomposition
- afficher le premier entier de la somme et le dernier entier de la somme
Nous allons donc définir l'interface selon l'exemple suivant :
Le couple Label1/Edit1 servira à demander à l'utilisateur de saisir le nombre à décomposer
Le bouton Button1 permettra de déclencher le calcul de la décomposition (et l'affichage des résultats)
Le couple Label2/Edit2 servira à afficher le premier entier de la somme
Le couple Label3/Edit3 servira à afficher le dernier entier de la somme
Une fois les composants posés sur la fenêtre, il faut fixer un certain nombre des propriétés de chaque composant utilisé :
Composants Propriétésfenêtre form1 name : frm_principale
caption : Décomposer
width : 201
height : 221borderstyle : bsSingle
borderIcons/biMaximize : false
position : poScreenCenterétiquette label1 name : lb_NombreChoisi
caption : Saisissez un entier strictement positif
zone d'édition edit1 name : ed_NombreChoisi
text : 1
bouton Button1 name : bt_Decomposer
caption : Décomposer
étiquette label2 name : lb_NbDebut
caption : Début de la somme
zone d'édition edit2 name : ed_NbDebut
text :
readonly : trueétiquette label3 name : lb_NbFin
caption : Fin de la somme
zone d'édition edit3 name : ed_NbFin
text :
readonly : trueÀ ce stade, il est possible de tester l'interface en compilant le projet (menu Projet / Compiler décomposition) : aucune erreur, aucun avertissement, aucun conseil ne doivent être signalés. Si vous exécutez l'application (menu Exécuter / Exécuter), vous pourrez tout faire... sauf effectuer la décomposition !
Le traitement consiste en l'exécution de la procédure Decomposer avec comme paramètre d'entrée la valeur saisie dans la zone d'édition ed_NombreChoisi. Au retour de la procédure, il faudra renseigner les zones d'édition ed_NbDebut et ed_NbFin.
Ajout de l'unité un_ExoMath au projet
Pour inclure l'unité dans le projet, nous utiliserons : menu Projet / Ajouter au projet... et nous choisirons un_ExoMath.pas
Pour pouvoir déclencher la procédure Decomposer au travers du bouton bt_Decomposer, il faut suivre les étapes suivantes :
- Sélectionner la fenêtre frm_principale ou l'unité associée un_principale.pas
- Menu Fichier / Utiliser l'unité...
- Choisir dans la liste l'unité un_exoMath.pas
Écriture du traitement à effectuer pour réaliser la décomposition
Effectuer un double-clic sur le bouton bt_Decomposer, ce qui a pour effet d'afficher le code suivant :
procedure Tfrm_principale.bt_DecomposerClick(Sender: TObject);
begin
end;Il faut donc écrire dans cette procédure le code suivant :
procedure Tfrm_principale.bt_DecomposerClick(Sender: TObject);
var
NombreChoisi,
NbDebut,
NbFin : longword;
begin
NombreChoisi := strtoint (ed_NombreChoisi.Text);
Decomposer (NombreChoisi, NbDebut, NbFin);
ed_NbDebut.Text := inttostr (NbDebut);
ed_NbFin.Text := inttostr (NbFin);
end;La fonction strtoint convertit une chaine de caractères numériques en valeur numérique entière
La fonction inttostr convertit une valeur numérique entière en une chaine de caractères numériquesCette première application est maintenant terminée : en compilant le projet puis en exécutant l'application, vous pourrez maintenant vérifier quelle est la décomposition d'un entier sous forme de somme.
Les fichiers sources de ce projet sont téléchargeables ici sous forme d'une archive : pj_decomposer.zip