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

Documents pareils