Top Posters
Since Sunday
A free membership is required to access uploaded content. Login or Register.

TP Delphi 1.docx

Uploaded: 6 years ago
Contributor: tyressjones
Category: Networking
Type: Other
Rating: N/A
Helpful
Unhelpful
Filename:   TP Delphi 1.docx (43.62 kB)
Page Count: 9
Credit Cost: 1
Views: 77
Last Download: N/A
Transcript
TP1 Delphi Nombre secret Rappel de l'énoncé L'interface est, pour cette fois, imposée. Elle doit être similaire à ceci (seuls les textes sont à respecter) : Le bouton « Nouveau nombre secret » fixe un nombre secret entier entre 0 et 100. Ce nombre est choisi par l'ordinateur, et n'est ni demandé ni montré à l'utilisateur. Le bouton « Proposer un nombre » demande un nombre entier à l'utilisateur. Si le nombre entier n'est pas compris entre 0 et 100, l'utilisateur en est informé. Sinon, la position par rapport au nombre secret est indiquée : « Le nombre secret est inférieur/supérieur à (le nombre proposé par l'utilisateur) » Lorsque l'utilisateur trouve le nombre secret, un message l'en informe : « bravo, le nombre secret était (indiquer le nombre secret) », puis le nombre secret est changé et l'utilisateur est informé de ce changement et invité à rejouer : « Nombre secret changé, vous pouvez rejouer ». Ce mini-projet étant le premier, il est possible que vous ayez du mal à le réaliser. Dans ce cas, n'hésitez pas dans ce cas à consulter les indications, puis le guide pas à pas, ou en dernier recours à télécharger le mini-projet terminé (auquel vous avez accès même si vous avez la version téléchargée du site). Rappels et indications indispensables : Pour pouvoir réagir au clic sur un bouton, il faut faire un double-clic dessus dans Delphi, puis écrire les instructions dans la procédure qui est créée à cet effet (Ecrire la procédure et la déclarer sans passer par cette étape du double-clic ne suffit en aucun cas). Indications Indications générales Commencez par créer l'interface de votre projet : il faudra dimensionner correctement la fiche principale, y placer deux boutons, puis les dimensionner à leur tour. N'oubliez pas de changer les textes affichés. Le nombre secret devra être mis en mémoire. Pour cela, une variable sera nécessaire. Le nombre secret étant un nombre entier entre 0 et 100, le type de cette variable peut être 'byte' ou 'integer' par exemple (on préférera alors 'integer'). La variable ne pourra pas être locale à une procédure car serait dans ce cas effacée à la fin de l'exécution de la procédure, mais devra être au contraire globale : accessible dans toute l'unité principale, ou plutôt dans son implémentation. Un clic sur le bouton « Nouveau nombre secret » changera la valeur de cette variable. On utilisera les fonctions 'Trunc' et 'Random'. Un clic sur le bouton « Proposer un nombre » effectuera les tâches suivantes dans l'ordre : Demande d'un nombre sous forme de texte Conversion de ce texte en nombre Suivant trois cas : inférieur, supérieur ou égal, la réaction sera différente : si le nombre proposé est différent, on dit s'il est inférieur ou supérieur au nombre secret, sinon, on félicite l'utilisateur, puis on fixe un nouveau nombre comme avec l'autre bouton, et on en informe l'utilisateur. Indications avancées Pour obtenir un entier entre 0 et 100, il faut écrire : Trunc(Random(101)) Le résultat devra être affecté à la variable destinée à recevoir le nombre secret. Pour demander un nombre à l'utilisateur, deux variables sont nécessaires. Une, de type chaîne, est d'abord initialisée, puis utilisée dans un appel à 'InputQuery'. La deuxième permettra de stocker le résultat de la conversion de la première par 'IntToStr'. Tout cela s'effectue en trois instructions. Pour gérer les trois cas (inférieur, supérieur, égal), voici le squelette du bloc 'if' à utiliser : if ... < ... then   ... else if ... > ... then   ... else   begin     ...   end; Solution pas à pas Cette solution guidée pas à pas vous permettra de construire le projet entier. Rappelez-vous que la version de Delphi employée ici peut différer de la votre, mais que cela n'a normalement que des conséquences mineures. Création du projet Sous Delphi, créez un nouveau projet à l'aide de la commande 'Nouveau Projet' ou 'Nouvelle Application' du menu 'Fichier'. Enregistrez le projet par la commande 'Enregistrer Tout' du menu Fichier. Choisissez de préférence un répertoire créé pour cette occasion. Un nom pour le projet (fichier .dpr) vous sera demandé, entrez « NombreSecret ». Un nom d'unité (.pas) sera également demandé pour stocker l'unique fiche et son unité associée : nommez-la « Principale » (et pensez à toujours donner à vos unités des noms significatifs qui soient également des identificateurs) Création de l'interface Affichez la fiche principale : au besoin, sélectionnez, dans la liste des unités, l'unité 'Principale' et appuyez sur F12 pour passer à sa fiche associée. Une fois la fiche visible, trouvez, dans la barre des composants, le bouton 'Button'. Le fait de cliquer sur ce bouton puis sur la fiche place un 'Button' (un bouton, donc), sur la fiche à l'endroit où vous cliquez. Placez ainsi deux boutons sur la fiche. Le moment est venu de placer tout cela : il va falloir utiliser soit la souris, soit l'inspecteur d'objets. Si vous voulez utiliser la souris, rappelez-vous que les actions que vons effectuez agissent sur le composant sélectionné (la fiche et chaque bouton, je le rappelle, sont des composants), il vous faudra donc par exemple sélectionner un bouton (en cliquant une seule fois dessus) avant de changer sa position ou ses dimensions à l'aide de la souris. En ce qui concerne l'inspecteur d'objets, affichez-le au besoin à l'aide de la touche F11. Le tableau suivant donne les propriétés à changer ainsi que les nouvelles valeurs à donner à ces propriétés ainsi qu'une brève explication (Vous devez savoir utiliser l'inspecteur d'objets au moins de manière rudimentaire si vous avez suivi le cours normal du guide). Fiche Caption Le Nombre Secret Permet de choisir le texte de titre de la fenêtre Height 148 Donne la hauteur de la fiche en pixels Width 193 Donne la largeur de la fiche en pixels Bouton « Nouveau nombre secret » Caption Nouveau nombre secret Fixe le texte qui apparait sur le bouton Height 25 Hauteur du bouton Left 24 Décalage par rapport au bord gauche de la fiche Top 24 Décalage par rapport au haut de la fiche Width 137 Largeur du bouton Bouton « Proposer un nombre » Caption Proposer un nombre Fixe le texte qui apparait sur le bouton Height 25 Hauteur du bouton Left 24 Décalage par rapport au bord gauche de la fiche Top 72 Décalage par rapport au haut de la fiche Width 137 Largeur du bouton Fonctionnement du bouton « Nouveau nombre secret » Maintenant que l'interface est terminée, concentrons-nous sur le code Pascal. Un clic sur le premier bouton doit déclencer une action. Pour cela, le seul moyen que vous connaissiez consiste à double-cliquer sur le bouton sous Delphi, puis à écrire des instructions dans la procédure qui est alors générée (ceci est expliqué en détail dans un chapitre du guide). Double-cliquez donc sur le bouton « Nouveau nombre secret ». Une procédure est générée, prète à recevoir nos instructions. Le principe ici est de fixer une nouvelle valeur, donc de changer la valeur d'une variable. Cette variable, nous pourrions la déclarer dans la procédure qui vient d'être générée, mais alors elle serait non seulement inaccessible depuis d'autres procédures, mais aussi "oubliée" lorsque la procédure se termine (elle n'existerait que pendant l'exécution de la procédure). Il nous faut donc déclarer cette variable dans un endroit plus accessible. Parmi les possibilités, l'interface ou l'implémentation de l'unité 'Principale', ou le fichier-projet. L'endroit le plus indiqué est au début de l'implémentation de l'unité 'Principale' car alors la variable sera accessible à toute procédure qui suivra. En outre, le fichier-projet est à exclure dans la grande majorité des cas, et l'interface est inadaptée car la variable n'a pas à être accessible depuis d'autres unités. Déclarez donc une variable 'NbSecret' de type 'Integer' au début de l'implémentation de l'unité (c.f. code source à la fin de cette solution). Quant à la procédure proprement dite, il va suffir de générer un nombre aléatoire entre 0 et 100, opération que l'on fait en deux temps (mais en une seule instruction) : on génère un nombre aléatoire entre 0 (inclus) et 101 (exclus), puis ce nombre à virgule est tronqué pour donner un entier entre 0 et 100. Enfin, le résultat de ces deux opérations est affecté à 'NbSecret'. Voici l'instruction à inscrire : NbSecret := Trunc(Random(101)); Fonctionnement du bouton « Proposer un nombre » Maintenant, il ne nous reste plus qu'à faire fonctionner le deuxième bouton, c'est un peu plus compliqué. Créez la procédure de réponse au clic sur ce bouton, comme pour le précédent. On va devoir ici dans un premier temps demander un nombre à l'utilisateur. Il est impossible de lui demander directement un entier à ce stade du guide, nous devrons donc passer par une chaîne de caractères et une conversion. Il va donc nous falloir deux variables : une de type chaîne qui stockera la réponse de l'utilisateur, et une autre de type entier pour stocker la réponse convertie (ici encore on supposera l'utilisateur assez gentil pour ne donner que des nombres). Voici la déclaration des deux variables locales à la procédure : var   NbTest: Integer;   Reponse: string; Le questionnement de l'utilisateur passera comme d'habitude par un appel à 'InputQuery'. Il faudra, comme à chaque fois, lui fournir une variable dont la valeur sera utilisée comme réponse suggèrée. La variable 'Reponse' servira à cela et sera initialisée avant utilisation (il faut toujours initialiser les variables avant utilisation). Une instruction convertira ensuite la réponse en nombre. Voici les trois premières instructions de la procédure, qui effectue les tâches décrites ci-dessus : Reponse := '0'; InputQuery('Proposez un nombre', 'Valeur :', Reponse); NbTest := StrToInt(Reponse); Plusieurs cas sont alors à envisager : soit l'utilisateur à entré un nombre inférieur ou supérieur au nombre secret, et on l'en informe, soit il a trouvé le nombre secret et davantage de choses devront être faites. Voici la structure du bloc 'if' qui examinera les cas : if NbTest < NbSecret then   ShowMessage('Le nombre secret est supérieur à ' + IntToStr(NbTest)) else if NbTest > NbSecret then   ShowMessage('Le nombre secret est inférieur à ' + IntToStr(NbTest)) else   begin     ...   end; Vous noterez que dans les deux premiers cas, une simple instruction suffit et rappelle à l'utilisateur sa proposition. Le dernier cas nécessite un bloc d'instructions. En effet, il va falloir féliciter l'utilisateur, fixer un nouveau nombre secret, et en avertir l'utilisateur. Voici les trois instructions à inscrire dans ce bloc (vous remarquerez que la deuxième est identique à celle utilisée par l'autre bouton) : ShowMessage('bravo, le nombre secret était ' + IntToStr(NbSecret)); NbSecret := Trunc(Random(101)); ShowMessage('Nombre secret changé, vous pouvez rejouer'); Le projet est maintenant complet, vous pouvez le compiler et le tester à loisir. Voici le code source complet de l'implémentation de l'unité 'Principale' : implementation {$R *.DFM} var   NbSecret: Integer; procedure TForm1.Button1Click(Sender: TObject); begin   NbSecret := Trunc(Random(101)); end; procedure TForm1.Button2Click(Sender: TObject); var   NbTest: Integer;   Reponse: string; begin   Reponse := '0';   InputQuery('Proposez un nombre', 'Valeur :', Reponse);   NbTest := StrToInt(Reponse);   if NbTest < NbSecret then     ShowMessage('Le nombre secret est supérieur à ' + IntToStr(NbTest))   else if NbTest > NbSecret then     ShowMessage('Le nombre secret est inférieur à ' + IntToStr(NbTest))   else     begin       ShowMessage('bravo, le nombre secret était ' + IntToStr(NbSecret));       NbSecret := Trunc(Random(101));       ShowMessage('Nombre secret changé, vous pouvez rejouer');     end; end; end. Enfin, en guise de conclusion, voici une liste de choses qui pourraient être améliorées dans ce projet. Je ne suis pas assez bête pour dire que cette liste est complète, mais elle donne quelques idées qui feront l'objet de recherches par les plus courageux. Si l'utilisateur entre un nombre qui n'est pas entre 0 et 100, rien ne lui est repproché, ce serait mieux. La limite 0 est peu contestable, par contre, la valeur 100 pourrait être fixée par l'utilisateur au moyen d'une question posée par un troisième bouton (il faudrait dans ce cas recalculer un nouveau nombre secret). L'instruction qui initialise le nombre secret est répètée deux fois. Dans ce genre de cas, il est préférable d'en faire une procédure ou une fonction séparée, qui sera appelée en lieu et place de l'instruction. L'utilisateur pourrait avoir un nombre limité d'essais, et pourrait aussi avoir un score.

Related Downloads
Explore
Post your homework questions and get free online help from our incredible volunteers
  1270 People Browsing
Your Opinion
What's your favorite math subject?
Votes: 293