PV de recette
Transcription
PV de recette
SI4 – Programmation de bases BTS SIO Programme Boucle en fenêtre GUI (Purebasic) TP N°3 1 OBJECTIF Découvrir la création de fenêtre (Windows). Tester des boucles. 1.1 CRÉATION D’UNE FENÊTRE L’utilisation des programmes en mode console est de moins en moins utilisé et est à réserver aux scripts ou programmes n’ayant pas d’interaction avec l’utilisateur final. Ce petit chapitre introduit la création d’un programme graphique sous Windows, notamment en créant votre première fenêtre. Attention : dans ce mode, les actions de l’utilisateur sont gérées sous forme d’événement : l’objectif n’est pas de comprendre les événements pour le moment. L’objectif est uniquement d’avoir une fenêtre graphique plutôt qu’une console texte (noire). Nous pourrons ainsi utiliser des fonctions COPIER/COLLER. Voici le code à copier dans Purebasic : ; Création d'une fenêtre vide, centrée dans l'écran et un bouton fermeture à droite OpenWindow(0,0,0,600,400,"Fenêtre",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) ; Création d'une boite de texte simple pour écrire dedans #BT_Texte = 1 ; Constante qui sera le numéro de la boite de texte EditorGadget(#BT_Texte,5,5,590,370) Procedure Affiche(texte.s) ; change le contenu de l'objet boite de texte SetGadgetText(#BT_Texte,GetGadgetText(#BT_Texte)+texte.s+#LF$) EndProcedure ; Boucle de test -----------------------------------------For t=1 To 5 Debug t Affiche("Boucle N°"+Str(t)) Next t ; Fin Boucle de test -------------------------------------; Boucle principale Repeat ; Récupération des événements que Microsoft a détecté sur ma fenêtre evenement = WaitWindowEvent(50) Until evenement = #PB_Event_CloseWindow ; On sort de la boucle lorsque l'événement est l'appui sur la croix rouge Testez ce code en cliquant sur le bouton Compiler/Exécuter. 1/8 SI4 – Programmation de bases BTS SIO Programme Boucle en fenêtre GUI (Purebasic) TP N°3 Vous disposez désormais d’un véritable programme graphique. Cependant, en attendant d’avoir vu le cours sur les objets et les événements, nous n’irons pas plus loin sur les objets graphiques. Copiez ici le résultat du test 1.2 BOUCLE DE MULTIPLICATION L'ordinateur est l'outil idéal pour effectuer des calculs et les afficher. Nous allons afficher la table de multiplication d'un nombre, de un à dix (en réutilisant le code précédent). Pour le nombre 5 par exemple, le résultat devra être : 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45 5x10=50 Pour rappel, le résultat d'une multiplication est un entier, les deux multiplicateurs sont des entiers. Ecrivez ci-dessous votre algorithme comme vous l'imaginez : 2/8 SI4 – Programmation de bases BTS SIO Programme Boucle en fenêtre GUI (Purebasic) TP N°3 Astuce : pour ceux qui ne voit pas comment utiliser la boucle, voici la ligne de calcul : Resultat.i = Nombre.i * t Copiez ci-dessous le résultat de la table de 168. A NOTER : Il est important de commenter son code : en mettant des commentaires aujourd'hui dans vos programmes, vous comprendrez mieux plus tard ce que vous avez écrit. De même, ajouter un entête avec quelques informations rend votre programme plus lisible pour un autre codeur qui pourrait travailler avec vous. Par exemple : ; ; ; ; ; ; ; ; ; ---------------------------------------------------------------------------@author David ROUMANET @version 1.0 Description Programme de test pour fonction WaitWindowEvent(n) ---------------------------------------------------------------------------07/01/2015 Modification des variables 05/01/2015 Correction sur la procédure Envoyer() 02/01/2015 Création du code ---------------------------------------------------------------------------- EnableExplicit Global texte.s ... ; texte non limité mais toujours en majuscule 3/8 SI4 – Programmation de bases BTS SIO Programme Boucle en fenêtre GUI (Purebasic) TP N°3 1.3 BOUCLE SUR LE PRÉNOM Nous allons maintenant modifier le programme pour afficher les lettres de votre prénom les unes sous les autres (écriture « verticale »). Nous utiliserons la variable MonPrenom.s pour stocker votre prénom. Écrivez comment vous allez placer votre prénom dans cette variable. Ensuite nous allons utiliser la fonction len(). Voici la syntaxe. Resultat.i = len(variableString.s) Remplacez le paramètre de la fonction len() par votre variable. Resultat.i = Nous connaissons maintenant la longueur de votre prénom (ou de tout prénom qui sera placé dans la variable MonPrenom.s) Nous allons ensuite modifier la boucle dans le programme précédent. Pour cela, il faut n’afficher qu’un seul caractère par ligne. La fonction mid() s’utilise comme ceci : Lettre.s = mid(chaine.s, position, 1) Proposez les informations manquantes dans la suite d'instruction ci-dessous : ; Boucle de test -----------------------------------------MonPrenom.s = " Resultat.i =len( For t=1 To Debug t Affiche(mid(MonPrenom.s, , 1) Next t ; Fin Boucle de test -------------------------------------- " ) 4/8 SI4 – Programmation de bases BTS SIO Programme Boucle en fenêtre GUI (Purebasic) TP N°3 Remplacer la boucle dans Purebasic par votre boucle. Appelez le professeur pour faire vérifier votre code. 1.4 BOUCLE DE CODAGE / DÉCODAGE Vous avez vu par le passé, le principe du code César : ce dernier décalait les lettres du message qu'il souhaitait envoyer. Ses centurions connaissaient le nombre utilisé pour le décalage et effectuaient l'opération inverse. Nous allons créer les deux fonctions CodeTexte(chaine.s) et DecodeTexte(chaine.s). Le décalage ne sera que de un pour éviter certains pièges d'affichage. 1.4.1 Codage Nous appellerons la fonction dans Purebasic comme suit : Resultat.s = CodeTexte(chaine.s) La fonction à écrire est la suivante : Procedure.s CodeTexte(chaine.s) Decalage.i = 1 TexteCode.s="" For t=1 To Len(chaine.s) carcode.s = Chr(Asc(Mid(chaine.s,t,1))+Decalage.i) textecode.s = textecode.s + carcode.s Next t ProcedureReturn TexteCode.s EndProcedure La fonction Chr() est l'opposée de la fonction Asc() : Asc(caractere.s) renvoie le nombre ASCII du caractère X, chr(nombre.i) renvoie le caractère correspondant au code ASCII nombre. Si nous décalons les lettres de l'alphabet de +1, la lettre A devient B, la lettre 'o' devient 'p', etc. Sans utiliser Purebasic, trouvez le code du mot Geek : 5/8 SI4 – Programmation de bases BTS SIO Programme Boucle en fenêtre GUI (Purebasic) TP N°3 Maintenant, utilisons le programme suivant (copiez-le dans Purebasic) : ; Création d'une fenêtre vide, centrée dans l'écran et un bouton fermeture à droite OpenWindow(0,0,0,600,500,"Codeur",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) ; Création de deux boites de texte simple pour écrire dedans EditorGadget(1,5,5,590,230,#PB_Editor_ReadOnly) ; champ du haut ButtonGadget(2,5,240,590,25,"Code") ; bouton EditorGadget(3,5,275,590,190) ; champ où écrire Procedure Affiche(texte.s) ; modifie le texte de la boite de texte n°1 SetGadgetText(1,GetGadgetText(1)+texte.s+#LF$) EndProcedure Procedure.s CodeTexte(chaine.s) Decalage.i = 1 TexteCode.s="" For t=1 To Len(chaine.s) carcode.s = Chr(Asc(Mid(chaine.s,t,1))+Decalage.i) textecode.s = textecode.s + carcode.s Next t ProcedureReturn TexteCode.s EndProcedure ; Boucle principale Repeat ; Récupération des événements que Microsoft a détecté sur ma fenêtre evenement = WaitWindowEvent(50) If evenement = #PB_Event_Gadget If EventGadget() = 2 ; appui sur le Bouton (gadget n°2) Affiche(CodeTexte(GetGadgetText(3))) EndIf EndIf Until evenement = #PB_Event_CloseWindow ; On sort de la boucle lorsque l'événement est l'appui sur la croix rouge Le programme se présente avec deux zones de texte et un bouton « Code ». Tapez du texte dans la zone du bas, puis appuyez sur le bouton [Code]. Le texte codé s’affiche en haut. Indiquez le résultat pour la phrase (sans guillemets) « Zorro est arrivé sans se presser. » Sauvegardez votre programme sous le nom « Code.pb » puis créez l'exécutable « Code.exe ». Astuce : aidez-vous du TP N°2 pour compiler. (menu Compilateur → Créer un exécutable...) 6/8 SI4 – Programmation de bases BTS SIO Programme Boucle en fenêtre GUI (Purebasic) TP N°3 1.4.2 Décodage Reprenez le fichier code.pb (si vous l’aviez fermé) et enregistrez-le sous decode.pb (menu Fichier → Enregistrer sous...) Essayez de modifier le code pour décoder les messages ! Pour cela, il faudra soustraire la valeur de décalage et renommer la fonction code(chaine.s) en decode(chaine.s) Pensez également à modifier l’endroit où la fonction est appelée (utilisée). Copiez le code de votre fonction ci-dessous : Vous devriez désormais pouvoir décoder le texte suivant : Wpvt!bwf{!sêvttj!" Copiez le texte décodé ci-dessous : 7/8 SI4 – Programmation de bases BTS SIO Programme Boucle en fenêtre GUI (Purebasic) TP N°3 1.4.3 Amélioration Testez un message avec un décalage de 6 caractères. Vous devriez trouver le résultat du message suivant : Rk&ZV&kyz&zkxsotï4 Collez ici le résultat de votre décodage. Nous verrons dans d’autres TP qu’en utilisant une boucle imbriquée, nous pourrons améliorer le codage. 1.4.4 Piste ROUGE Votre code ne doit pas permettre le plantage du programme Vous pouvez choisir comme événement déclencheur la boite de texte N°1 ou N°3 (et ne plus utiliser le bouton) : • cela signifie qu'écrire du texte dans la boite N°1 modifie immédiatement le texte dans la boite N°3 • l'inverse peut déclencher l'usage d'une nouvelle fonction décodage. • Il faut enlever le paramètre #PB_Editor_ReadOnly de la boite N°1 Pensez à utiliser des procédures/fonctions avec passage de paramètres : cela évitera la déclaration de variables globales (recherchez le mot-clé global dans l'aide de Purebasic) Lors de la fermeture vous demanderez une confirmation, voici les instructions qui pourront vous aider (utilisez l'aide de PureBasic pour comprendre leurs usages) • Repeat … until • MessageRequester() Enfin, vous commenterez votre code (entête obligatoire) 8/8