laser_bleu
fenetre pour entrer valeurs et calcul
-
Laser_bleu
fenetre pour entrer valeurs et calcul
bonjour, je suis novice, j'aimerais avoir un exemple de fenetre de sortie pour entrer une valeur dans un rectangle approprié et une sortie de calcul par exemple dans un autre rectangle de cette fenetre , merci par avance.
laser_bleu
laser_bleu
Re: fenetre pour entrer valeurs et calcul
Salut, j'ai rien compris à ce que tu veux...Laser_bleu a écrit :bonjour, je suis novice, j'aimerais avoir un exemple de fenetre de sortie pour entrer une valeur dans un rectangle approprié et une sortie de calcul par exemple dans un autre rectangle de cette fenetre , merci par avance.
laser_bleu
En gros tu veux deux string gadget, un pour entrer des valeurs et l'autre pour afficher des resultats ??
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Sans déconner, comment tu veux répondre à cà?
Maintenant il faut être doué en programmation et avoir une licence en lettres option ingénierie inversée pour comprendre cette langue inconnue venue d'ailleurs...
Maintenant il faut être doué en programmation et avoir une licence en lettres option ingénierie inversée pour comprendre cette langue inconnue venue d'ailleurs...
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Slt Laser_bleu !
j'ai essayé de lire dans tes pensées car j'ai pas bien compris ce que tu voulais.
tu dois garder quelque chose de très important si tu veux apprendre à programmer :
1. Lire l'aide de PureBasic afin d'avoir une bonne base(c'est primordial)
2. faire tout pour comprendre les exemples données dans l'aide
3. Poser clairement des questions
il n'ya que des gens bien ici. Et ils ne demandent qu'à aider donc la balle est dans ton camp
voici un exemple de code quand j'avais débuté. j'ai éssayé de le commenter afin qu'il soit un peu plus comprehensible pour toi
Du courage
j'ai essayé de lire dans tes pensées car j'ai pas bien compris ce que tu voulais.
tu dois garder quelque chose de très important si tu veux apprendre à programmer :
1. Lire l'aide de PureBasic afin d'avoir une bonne base(c'est primordial)
2. faire tout pour comprendre les exemples données dans l'aide
3. Poser clairement des questions
il n'ya que des gens bien ici. Et ils ne demandent qu'à aider donc la balle est dans ton camp
voici un exemple de code quand j'avais débuté. j'ai éssayé de le commenter afin qu'il soit un peu plus comprehensible pour toi
Code : Tout sélectionner
Enumeration
#window_0
#bouton_1
#bouton_2
#bouton_3
#Gadget
#chaine_1
#chaine_2
#chaine_3
#Text
#Text_0
#Text_1
EndEnumeration
Enumeration
#font
EndEnumeration
;ces valeurs seront accessibles dans tous le code
Global Resultat.l
Global Resultat2.l
Global Resultat$
Global Resultat2$
If OpenWindow(#window_0, 443, 86, 350, 260, "Davida", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
; pour afficher les cases dans lesquelles s'affichent les valleurs
; " #PB_String_ReadOnly " ----> pour signifier que cette case ne pourra pas etre écrit(donc lecture seule)
; " #PB_String_Numeric " ----> pour signifier que cette case ne contiendra que des valeurs numériques
StringGadget(#chaine_1, 220, 35, 110, 25, "", #PB_String_ReadOnly | #PB_Text_Right)
StringGadget(#chaine_2, 220, 95, 110, 25, "", #PB_String_ReadOnly | #PB_Text_Right)
StringGadget(#chaine_3, 220, 155, 110, 25, "0", #PB_String_Numeric | #PB_Text_Right)
ButtonGadget(#bouton_1, 230, 220, 110, 22, "Quitter") ;pour créer le bouton "Quitter"
ButtonGadget(#bouton_2, 10, 220, 110, 22, "Commencer", #PB_EventType_LeftClick)
ButtonGadget(#bouton_3, 120, 220, 110, 22, "Verifier")
TextGadget(#Text, 100, 40, 160, 20, "1er Nombre :") ; pour afficher le texte "1er Nombre :"
TextGadget(#Text_0, 90, 105, 170, 20, "2ème Nombre :")
TextGadget(#Text_1, 125, 165, 55, 20, "Resultat :")
TextGadget(#Text_0, 185, 65, 20, 20, "+")
EndIf
;cette partie permet de choisir les valeurs à afficher pour les operérations
;ces valeurs sont choisies de façon allétoire.
;la premiere valeur est comprise entre 0 et 7000
;la premiere valeur est comprise entre 0 et 4560
;juste des valeurs prises au hasard
Procedure Autres_operations()
Autres_operations :
Resultat.l = Random(7000)
Resultat2.l = Random(4560)
Resultat$ = Str (Resultat.l)
Resultat2$ = Str (Resultat2.l)
SetGadgetText(#chaine_1, Str (Val(Resultat$)))
SetGadgetText(#chaine_2, Str (Val(Resultat2$)))
DisableGadget(#bouton_2, 1)
EndProcedure
Repeat
EventID = WaitWindowEvent()
If Event = #PB_Event_Gadget
EndIf
Select EventID ; Gadget()
Case #PB_Event_Gadget
Select EventGadget()
Case 1 : Event = #bouton_1
; Affichage des nombres alléatoires
Case 2 : Evebt = #bouton_2
Autres_operations()
Case 3 : Event3 = #bouton_3
;un message à afficher si l'utilisateur ne met rien dans la case et clique sur le bouton
;Vérifier
If GetGadgetText(#chaine_3) = "0" Or GetGadgetText(#chaine_3) = ""
MessageRequester("Désolé", "La case est vide,Entrez d'abord votre réponse.", #PB_MessageRequester_Ok)
Else
nombre + 1
If nombre = 5 ;pour limiter le nombre d'opération à 5
MessageRequester("Désolé", "Toutes les opérations sont terminées.", #PB_MessageRequester_Ok)
DisableGadget(#bouton_2, 0)
Else
; si le resultat est faut,voici un message à afficher
If GetGadgetText(#chaine_3) <> Str (Resultat + Resultat)
rep = MessageRequester("Désolé", "Mauvaise réponse. Voulez-vous voir la bonne réponse ?", #PB_MessageRequester_YesNo)
If rep = 6
;un autre message à afficher pour demander à l'utilisateur s'il veut réessayer
; ou s'il souhaite voir la bonne reponse
MessageRequester("Reponse", "La bonne réponse est:" + Str (Resultat + Resultat), #PB_MessageRequester_Ok)
SetGadgetText(#chaine_3, "")
ElseIf rep = 7
SetGadgetText(#chaine_3, "")
EndIf
Else
rep_2 = MessageRequester("Thank", "Bravo", #PB_MessageRequester_Ok)
Autres_operations()
nombre = 0
EndIf
EndIf
EndIf
EndSelect
Case #PB_Event_CloseWindow
Event = #bouton_1
EndSelect
Until Event = #bouton_1
Salut Laser_bleu,
Ne t'inquiète pas, le code de SpaceMan contient deux bugs. La correction est tout en bas...
Bienvenu! Voici un code un peu plus simple qui contient DEUX zones dans une fenêtre.
Ce sont deux «StringGadget»
Si tu écris en minuscule dans celle du haut, tu verras ton mot écrit en majuscule dans la zone du bas.
Dans l'aide de PureBasic, le code d'exemple qui se rapproche le plus de ce code-ci est accessible en faisant ceci:
1) Tu tapes StringGadget() dans l'éditeur
2) Tu tapes F1 (c'est l'aide)
Compare ce code ci-dessous et le code dans l'aide. ça te donnera un peu une idée de départ pour comprendre le PureBasic.
N'hésite à observer d'autres exemples de gadgets. La liste est exhaustive.
Que dire de plus?
>> Que ce qui se trouve entre REPEAT et UNTIL se répète indéfiniment tant qu'il n'y a pas d'événement de sortie (clic sur la croix)
>> Que DEFINE permet de définir des variables
>> Que UCASE() (abrégé de Upper CASE) est la fonction qui met en majuscule
>> Que chacun de ces termes expliqués a un exemple dans l'aide de PureBasic.
>> Que je te conseille de t'intéresser à IF ... ELSE ... ENDIF dans l'aide de PureBasic pour découvrir pourquoi un programme n'est pas seulement une suite de lignes qui s'exécutent successivement. Ainsi, tu verras que selon les entrées, tu pourras faire exécuter certaines lignes et pas d'autres.
Bon début.
Ci-dessous, c'est le code de SpaceMan plus mais SANS LES BUGS!!!
Ne t'inquiète pas, le code de SpaceMan contient deux bugs. La correction est tout en bas...
Bienvenu! Voici un code un peu plus simple qui contient DEUX zones dans une fenêtre.
Ce sont deux «StringGadget»
Si tu écris en minuscule dans celle du haut, tu verras ton mot écrit en majuscule dans la zone du bas.
Dans l'aide de PureBasic, le code d'exemple qui se rapproche le plus de ce code-ci est accessible en faisant ceci:
1) Tu tapes StringGadget() dans l'éditeur
2) Tu tapes F1 (c'est l'aide)
Compare ce code ci-dessous et le code dans l'aide. ça te donnera un peu une idée de départ pour comprendre le PureBasic.
N'hésite à observer d'autres exemples de gadgets. La liste est exhaustive.
Que dire de plus?
>> Que ce qui se trouve entre REPEAT et UNTIL se répète indéfiniment tant qu'il n'y a pas d'événement de sortie (clic sur la croix)
>> Que DEFINE permet de définir des variables
>> Que UCASE() (abrégé de Upper CASE) est la fonction qui met en majuscule
>> Que chacun de ces termes expliqués a un exemple dans l'aide de PureBasic.
>> Que je te conseille de t'intéresser à IF ... ELSE ... ENDIF dans l'aide de PureBasic pour découvrir pourquoi un programme n'est pas seulement une suite de lignes qui s'exécutent successivement. Ainsi, tu verras que selon les entrées, tu pourras faire exécuter certaines lignes et pas d'autres.
Bon début.
Code : Tout sélectionner
;***********************************
;***********************************
;***********************************
; Passe une chaîne en majuscule
;***********************************
;***********************************
;***********************************
;===================================
; INITIALISATION
;===================================
#FenetreTest = 1
#StyleStandard = $CF0001
Enumeration
#Entree1
#Sortie1
EndEnumeration
Define Event0.L
Define Texte.S
;===================================
; DEMARRAGE
;===================================
If OpenWindow(#FenetreTest, 0, 0, 156, 96, "Test", #StyleStandard)
StringGadget(#Entree1, 16, 16, 128, 24, "")
StringGadget(#Sortie1, 16, 40, 128, 24, "")
EndIf
;===================================
; BOUCLE PRINCIPALE
;===================================
Repeat
; On attend un événement système...
Event0 = WaitWindowEvent() ; ...stocké dans Event0
; On récupère le texte d'entrée
Texte = GetGadgetText(#Entree1)
; On le met en majuscule
Texte = UCase(Texte)
; On le place dans la zone de sortie
SetGadgetText(#Sortie1, Texte)
; On laisse le CPU se reposer un peu...
Delay(15)
; Si l'événement système est une sortie (code 16)...
Until Event0 = 16
; ...On ne remonte pas à la ligne REPEAT (début de boucle)
EndCode : Tout sélectionner
Enumeration
#window_0
#bouton_1
#bouton_2
#bouton_3
#Gadget
#chaine_1
#chaine_2
#chaine_3
#Text
#Text_0
#Text_1
EndEnumeration
Enumeration
#font
EndEnumeration
;ces valeurs seront accessibles dans tous le code
Global Resultat.l
Global Resultat2.l
Global Resultat$
Global Resultat2$
If OpenWindow(#window_0, 443, 86, 350, 260, "Davida", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
; pour afficher les cases dans lesquelles s'affichent les valleurs
; " #PB_String_ReadOnly " ----> pour signifier que cette case ne pourra pas etre écrit(donc lecture seule)
; " #PB_String_Numeric " ----> pour signifier que cette case ne contiendra que des valeurs numériques
StringGadget(#chaine_1, 220, 35, 110, 25, "", #PB_String_ReadOnly | #PB_Text_Right)
StringGadget(#chaine_2, 220, 95, 110, 25, "", #PB_String_ReadOnly | #PB_Text_Right)
StringGadget(#chaine_3, 220, 155, 110, 25, "0", #PB_String_Numeric | #PB_Text_Right)
ButtonGadget(#bouton_1, 230, 220, 110, 22, "Quitter") ;pour créer le bouton "Quitter"
ButtonGadget(#bouton_2, 10, 220, 110, 22, "Commencer", #PB_EventType_LeftClick)
ButtonGadget(#bouton_3, 120, 220, 110, 22, "Verifier")
TextGadget(#Text, 100, 40, 160, 20, "1er Nombre :") ; pour afficher le texte "1er Nombre :"
TextGadget(#Text_0, 90, 105, 170, 20, "2ème Nombre :")
TextGadget(#Text_1, 125, 165, 55, 20, "Resultat :")
TextGadget(#Text_0, 185, 65, 20, 20, "+")
EndIf
;cette partie permet de choisir les valeurs à afficher pour les operérations
;ces valeurs sont choisies de façon allétoire.
;la premiere valeur est comprise entre 0 et 7000
;la premiere valeur est comprise entre 0 et 4560
;juste des valeurs prises au hasard
Procedure Autres_operations()
Autres_operations :
Resultat.l = Random(7000)
Resultat2.l = Random(4560)
Resultat$ = Str (Resultat.l)
Resultat2$ = Str (Resultat2.l)
SetGadgetText(#chaine_1, Str (Val(Resultat$)))
SetGadgetText(#chaine_2, Str (Val(Resultat2$)))
DisableGadget(#bouton_2, 1)
EndProcedure
Repeat
EventID = WaitWindowEvent()
If Event = #PB_Event_Gadget
EndIf
Select EventID ; Gadget()
Case #PB_Event_Gadget
Select EventGadget()
Case 1 : Event = #bouton_1
; Affichage des nombres alléatoires
Case 2 : Evebt = #bouton_2
Autres_operations()
Case 3 : Event3 = #bouton_3
;un message à afficher si l'utilisateur ne met rien dans la case et clique sur le bouton
;Vérifier
If GetGadgetText(#chaine_3) = "0" Or GetGadgetText(#chaine_3) = ""
MessageRequester("Désolé", "La case est vide,Entrez d'abord votre réponse.", #PB_MessageRequester_Ok)
Else
nombre + 1
If nombre = 5 ;pour limiter le nombre d'opération à 5
MessageRequester("Désolé", "Toutes les opérations sont terminées.", #PB_MessageRequester_Ok)
DisableGadget(#bouton_2, 0)
Else
; si le resultat est faut,voici un message à afficher
If GetGadgetText(#chaine_3) <> Str (Resultat + Resultat2)
rep = MessageRequester("Désolé", "Mauvaise réponse. Voulez-vous voir la bonne réponse ?", #PB_MessageRequester_YesNo)
If rep = 6
;un autre message à afficher pour demander à l'utilisateur s'il veut réessayer
; ou s'il souhaite voir la bonne reponse
MessageRequester("Reponse", "La bonne réponse est:" + Str (Resultat + Resultat2), #PB_MessageRequester_Ok)
SetGadgetText(#chaine_3, "")
ElseIf rep = 7
SetGadgetText(#chaine_3, "")
EndIf
Else
rep_2 = MessageRequester("Thank", "Bravo", #PB_MessageRequester_Ok)
Autres_operations()
nombre = 0
EndIf
EndIf
EndIf
EndSelect
Case #PB_Event_CloseWindow
Event = #bouton_1
EndSelect
Until Event = #bouton_1 Salut Laser_bleu,
Tout d'abord, évite de changer de pseudo parce que sinon, on ne va pas s'en sortir pour t'expliquer les choses facilement!
Je réponds publiquement à ton pm pour que d'autres puissent éventuellement en profiter.
Donc, en résumé tu veux automatiser un calcul particulier.
Je reprends le code minuscule/majuscule que j'ai posté plus haut. La première étape consiste à préparer le programme à ce qu'il y ait un nombre inconnu de gadgets (sachant que, dans ton cas, 1 gadget = 1 valeur physique).
Résultat: pas de changement en apparence. J'ai défini (avec Define) une variable entière 32 bits (un «Long» donc «.L») appelée GadgetCurseurY.
Cette variable va gérer la position d'affichage des gadgets.
Dans la partie «Démarrage», j'ai fait en sorte que la position commence à 16 pixels de haut pour le premier gadget. Chaque gadget créé est descendu de 32 pixels.
[/u]
Tout d'abord, évite de changer de pseudo parce que sinon, on ne va pas s'en sortir pour t'expliquer les choses facilement!
Je réponds publiquement à ton pm pour que d'autres puissent éventuellement en profiter.
Donc, en résumé tu veux automatiser un calcul particulier.
Je reprends le code minuscule/majuscule que j'ai posté plus haut. La première étape consiste à préparer le programme à ce qu'il y ait un nombre inconnu de gadgets (sachant que, dans ton cas, 1 gadget = 1 valeur physique).
Résultat: pas de changement en apparence. J'ai défini (avec Define) une variable entière 32 bits (un «Long» donc «.L») appelée GadgetCurseurY.
Cette variable va gérer la position d'affichage des gadgets.
Dans la partie «Démarrage», j'ai fait en sorte que la position commence à 16 pixels de haut pour le premier gadget. Chaque gadget créé est descendu de 32 pixels.
Code : Tout sélectionner
;***********************************
;***********************************
;***********************************
; Passe une chaîne en majuscule
;***********************************
; On prépare le code pour afficher
; d'autres gadgets
;***********************************
;***********************************
;===================================
; INITIALISATION
;===================================
#FenetreTest = 1
#StyleStandard = $CF0001
Enumeration
#Entree1
#Sortie1
EndEnumeration
Define Event0.L
Define Texte.S
; On rajoute la notion de position de gadget
Define GadgetCurseurY.L
;===================================
; DEMARRAGE
;===================================
If OpenWindow(#FenetreTest, 0, 0, 156, 96, "Test", #StyleStandard)
GadgetCurseurY = 16 ; On règle la position à 16 pixels
StringGadget(#Entree1, 16, GadgetCurseurY, 128, 24, "")
GadgetCurseurY + 32 ; On descend de 32 pixels
StringGadget(#Sortie1, 16, GadgetCurseurY, 128, 24, "")
; On rajoute le redimensionnement de la fenêtre
; en fonction du nombre de gadgets créés
ResizeWindow(#FenetreTest, #PB_Ignore, #PB_Ignore, #PB_Ignore, 32 + GadgetCurseurY)
EndIf
;===================================
; BOUCLE PRINCIPALE
;===================================
Repeat
; On attend un événement système...
Event0 = WaitWindowEvent() ; ...stocké dans Event0
; On récupère le texte d'entrée
Texte = GetGadgetText(#Entree1)
; On le met en majuscule
Texte = UCase(Texte)
; On le place dans la zone de sortie
SetGadgetText(#Sortie1, Texte)
; On laisse le CPU se reposer un peu...
Delay(15)
; Si l'événement système est une sortie (code 16)...
Until Event0 = 16
; ...On ne remonte pas à la ligne REPEAT (début de boucle)
EndEnsuite, on rajoute une valeur physique d'entrée.(#Entree2)
>> A) dans les énumérations (Cf F1=ENUMERATION)
>> B) un copier/coller/modifier dans la partie démarrage
A l'exécution, tu devrait voir 3 gadgets au lieu de deux désormais. Si tu comprends ce principe, tu pourras alors rajouter autant de valeurs physiques que tu veux par la suite.
>> A) dans les énumérations (Cf F1=ENUMERATION)
>> B) un copier/coller/modifier dans la partie démarrage
A l'exécution, tu devrait voir 3 gadgets au lieu de deux désormais. Si tu comprends ce principe, tu pourras alors rajouter autant de valeurs physiques que tu veux par la suite.
Code : Tout sélectionner
;***********************************
;***********************************
;***********************************
; Passe une chaîne en majuscule
;***********************************
; 2) On rajoute une entrée
;***********************************
;***********************************
;===================================
; INITIALISATION
;===================================
#FenetreTest = 1
#StyleStandard = $CF0001
Enumeration
#Entree1
#Entree2
#Sortie1
EndEnumeration
Define Event0.L
Define Texte.S
Define GadgetCurseurY.L
;===================================
; DEMARRAGE
;===================================
If OpenWindow(#FenetreTest, 0, 0, 156, 96, "Test", #StyleStandard)
GadgetCurseurY = 16
StringGadget(#Entree1, 16, GadgetCurseurY, 128, 24, "")
GadgetCurseurY + 32
StringGadget(#Entree2, 16, GadgetCurseurY, 128, 24, "")
GadgetCurseurY + 32
StringGadget(#Sortie1, 16, GadgetCurseurY, 128, 24, "")
ResizeWindow(#FenetreTest, #PB_Ignore, #PB_Ignore, #PB_Ignore, 32 + GadgetCurseurY)
EndIf
;===================================
; BOUCLE PRINCIPALE
;===================================
Repeat
; On attend un événement système...
Event0 = WaitWindowEvent() ; ...stocké dans Event0
; On récupère le texte d'entrée
Texte = GetGadgetText(#Entree1)
; On le met en majuscule
Texte = UCase(Texte)
; On le place dans la zone de sortie
SetGadgetText(#Sortie1, Texte)
; On laisse le CPU se reposer un peu...
Delay(15)
; Si l'événement système est une sortie (code 16)...
Until Event0 = 16
; ...On ne remonte pas à la ligne REPEAT (début de boucle)
EndEnsuite, on passe au calcul. Alors, comme la prog c'est étape par étape (sinon, ça n'est pas très évident), je vais prendre un calcul physique simple :
P = U * I
Ce n'est plus un texte qui va être traité, mais des grandeurs physiques. Donc, dans les définitions, on remplacepar
D c'est l'initiale de Double. ça signifie que ces 3 variables ont un type flottant double précision (nombre réel stocké sur 64 bits)
Dans la boucle principale, on place le calcul P = U * I.
Comme les gadgets donnent un texte, et que le texte n'est pas un calcul, il faut confiner le calcul, c'est-à-dire convertir le texte d'entrée en nombre (Grâce à ValD() ), faire le calcul, puis convertir le résultat en texte (Grâce à StrD() ).
P = U * I
Ce n'est plus un texte qui va être traité, mais des grandeurs physiques. Donc, dans les définitions, on remplace
Code : Tout sélectionner
Define Texte.SCode : Tout sélectionner
Define Tension.D
Define Intensite.D
Define Puissance.DDans la boucle principale, on place le calcul P = U * I.
Comme les gadgets donnent un texte, et que le texte n'est pas un calcul, il faut confiner le calcul, c'est-à-dire convertir le texte d'entrée en nombre (Grâce à ValD() ), faire le calcul, puis convertir le résultat en texte (Grâce à StrD() ).
Code : Tout sélectionner
;***********************************
;***********************************
;***********************************
; Calcul de la puissance P en
; fonction de l'intensité I
; et la tension U
;***********************************
; (3/4) On programme le calcul
;***********************************
;***********************************
;===================================
; INITIALISATION
;===================================
#FenetreTest = 1
#StyleStandard = $CF0001
Enumeration
#Entree1
#Entree2
#Sortie1
EndEnumeration
Define Event0.L
Define Tension.D
Define Intensite.D
Define Puissance.D
Define GadgetCurseurY.L
;===================================
; DEMARRAGE
;===================================
If OpenWindow(#FenetreTest, 0, 0, 156, 96, "Test", #StyleStandard)
GadgetCurseurY = 16
StringGadget(#Entree1, 16, GadgetCurseurY, 128, 24, "")
GadgetCurseurY + 32
StringGadget(#Entree2, 16, GadgetCurseurY, 128, 24, "")
GadgetCurseurY + 32
StringGadget(#Sortie1, 16, GadgetCurseurY, 128, 24, "")
ResizeWindow(#FenetreTest, #PB_Ignore, #PB_Ignore, #PB_Ignore, 32 + GadgetCurseurY)
EndIf
;===================================
; BOUCLE PRINCIPALE
;===================================
Repeat
; On attend un événement système...
Event0 = WaitWindowEvent() ; ...stocké dans Event0
; On récupère la tension
Tension = ValD(GetGadgetText(#Entree1) )
; On récupère l'intensité
Intensite = ValD(GetGadgetText(#Entree2) )
; On fait le calcul
Puissance = Tension * Intensite
; On le place dans la zone de sortie
SetGadgetText(#Sortie1, StrD(Puissance, 3) )
; On laisse le CPU se reposer un peu...
Delay(15)
; Si l'événement système est une sortie (code 16)...
Until Event0 = 16
; ...On ne remonte pas à la ligne REPEAT (début de boucle)
EndPour (presque!) finir, on va CREER notre propre type d'utilisation.
Au lieu de mettre un S, pour le texte
ou au lieu de mettre un D, pour le nombre réel
on va mettre un «GrandeurPhysique» et définir ce que c'est, pour nous, dans ce programme, une grandeur physique.
On peut faire cela grâce à la Structure (F1 pour comprendre)
Si, dans la partie Initialisation, on rajoute cette Structure:Structure
et que l'on remplace par
L'objet défini et appelé «Tension» aura alors les 6 éléments précisés par la structure ci-dessus. Il n'aura pas que la valeur du nombre (D). Au total, il aura:
1) Un nom (texte ici : "Tension")
2) Un numéro de gadget pour afficher le nom
3) La valeur (nombre réel)
4) Un numéro de gadget qui contient et peut saisir la valeur
5) Une unité (texte ici : le "volt")
6) Un numéro de gadget pour afficher l'unité
Dans la partie préparation, au lieu de créer un simple gadget, on va créer les 3 gadgets (Nom, valeur et unité). Pour ne pas encombrer la partie Préparation, on appelle une Procédure nommée GrandeurInstaller(). Et c'est dans cette procédure (c'est un sous-programme qui t'évite de recopier toutes les instructions quand tu dois répéter certaines actions), les 3 gadgets seront créés à chaque fois que l'on appellera GrandeurInstaller() dans la partie Préparation.
Ainsi, on installe
>> la tension (3 gadgets pour la tension)
>> l'intensité (3 gadgets pour l'intensité)
>> la puissance (3 gadgets pour la puissance)
chacun avec un nom, une valeur et une unité.
Pour te repérer, j'ai mis des petits signes de commentaire /!\ dans le code. Ce sont les endroits que tu peux modifier pour changer les grandeurs physiques et les calculs.
Au lieu de mettre un S, pour le texte
ou au lieu de mettre un D, pour le nombre réel
on va mettre un «GrandeurPhysique» et définir ce que c'est, pour nous, dans ce programme, une grandeur physique.
On peut faire cela grâce à la Structure (F1 pour comprendre)
Si, dans la partie Initialisation, on rajoute cette Structure:Structure
Code : Tout sélectionner
Structure GrandeurPhysique
Nom.S
GadgetNom.L
Valeur.D
GadgetVal.L
Unite.S
GadgetUnite.L
EndStructureCode : Tout sélectionner
Define Tension.DCode : Tout sélectionner
Define Tension.GrandeurPhysique1) Un nom (texte ici : "Tension")
2) Un numéro de gadget pour afficher le nom
3) La valeur (nombre réel)
4) Un numéro de gadget qui contient et peut saisir la valeur
5) Une unité (texte ici : le "volt")
6) Un numéro de gadget pour afficher l'unité
Dans la partie préparation, au lieu de créer un simple gadget, on va créer les 3 gadgets (Nom, valeur et unité). Pour ne pas encombrer la partie Préparation, on appelle une Procédure nommée GrandeurInstaller(). Et c'est dans cette procédure (c'est un sous-programme qui t'évite de recopier toutes les instructions quand tu dois répéter certaines actions), les 3 gadgets seront créés à chaque fois que l'on appellera GrandeurInstaller() dans la partie Préparation.
Ainsi, on installe
>> la tension (3 gadgets pour la tension)
>> l'intensité (3 gadgets pour l'intensité)
>> la puissance (3 gadgets pour la puissance)
chacun avec un nom, une valeur et une unité.
Pour te repérer, j'ai mis des petits signes de commentaire /!\ dans le code. Ce sont les endroits que tu peux modifier pour changer les grandeurs physiques et les calculs.
Code : Tout sélectionner
;***********************************
;***********************************
;***********************************
; Calcul de la puissance P en
; fonction de l'intensité I
; et la tension U
;***********************************
; (4) Rajout de texte
; & Mise en structure
;***********************************
;***********************************
;===================================
; INITIALISATION
;===================================
#FenetreTest = 1
#StyleStandard = $CF0001
Structure GrandeurPhysique
Nom.S
GadgetNom.L
Valeur.D
GadgetVal.L
Unite.S
GadgetUnite.L
EndStructure
Define Event0.L
Define Tension.GrandeurPhysique
Define Intensite.GrandeurPhysique
Define Puissance.GrandeurPhysique
;/!\
Global GadgetCurseurY.L
Procedure GrandeurInstaller(*C.GrandeurPhysique, Nom.S, Unite.S)
With *C
\GadgetNom = TextGadget(-1, 16, GadgetCurseurY, 80, 24, Nom)
\GadgetVal = StringGadget(-1, 96, GadgetCurseurY, 128, 24, "")
\GadgetUnite = TextGadget(-1, 240, GadgetCurseurY, 128, 24, Unite)
EndWith
GadgetCurseurY + 32
EndProcedure
;===================================
; DEMARRAGE
;===================================
If OpenWindow(#FenetreTest, 0, 0, 320, 96, "Test", #StyleStandard)
GadgetCurseurY = 16
GrandeurInstaller(Tension, "Tension", "Volt(s)")
GrandeurInstaller(Intensite, "Intensité", "Ampère(s)")
GrandeurInstaller(Puissance, "Puissance", "Watt(s)")
;/!\
ResizeWindow(#FenetreTest, #PB_Ignore, #PB_Ignore, #PB_Ignore, GadgetCurseurY)
EndIf
;===================================
; BOUCLE PRINCIPALE
;===================================
Repeat
; On attend un événement système...
Event0 = WaitWindowEvent() ; ...stocké dans Event0
; On récupère la tension
Tension\Valeur = ValD(GetGadgetText(Tension\GadgetVal) )
; On récupère l'intensité
Intensite\Valeur = ValD(GetGadgetText(Intensite\GadgetVal) )
; /!\
; On fait le calcul
Puissance\Valeur = Tension\Valeur * Intensite\Valeur
; /!\ Modifier le calcul
; On place le résultat dans la zone de sortie
SetGadgetText(Puissance\GadgetVal, StrD(Puissance\Valeur, 3) )
; /!\ Modifier le nom de la sortie /!\
; /!\ car ça n'est pas forcément la puissance /!\
; On laisse le CPU se reposer un peu...
Delay(15)
; Si l'événement système est une sortie (code 16)...
Until Event0 = 16
; ...On ne remonte pas à la ligne REPEAT (début de boucle)
EndEnfin (!), voici comment on peut rajouter les échelles (micro, méga, etc...). Comme chaque grandeur physique (en entrée comme en sortie) a sa propre échelle, on peut rajouter cette échelle dans la structure récemment créée.
Petit rappel de maths :
n puissance 1 = n
n puissance 2 = n * n (peut se lire n au carré)
n puissance 3 = n * n * n (peut se lire n au cube)
n puissance -1 = 1 / n
n puissance -2 = 1 / (n * n)
n puissance -3 = 1 / (n * n * n)
n puissance (a + b) = (n puissance a) * (n puissance b)
n puissance (a - b) = (n puissance a) / (n puissance b)
n puissance 0 = n puissance (1 - 1) = (n puissance 1) / (n puissance 1) = n / n = 1
n puissance (1/2) = Racine carrée de n (on peut pas écrire le symbole ici)
n puissance (1/3) = Racine cubique de n
n puissance (1/x) = Racine x ième de n
Petit rappel d'anglais : puissance se dit POWER
D'où l'instruction PureBasic Pow(a, b)
Pow(a, b) signifie a puissance b
Le champ appelé "Exposant" dans la structure ci-dessus, stocke en fait la valeur n tel que
le nombre réel traité = Valeur * Pow(10, n)
Exemples:
***********
Valeur = 15
Exposant = 3
>> Valeur réelle = 15 000
Valeur = 26
Exposant = 2
>> Valeur réelle = 2 600
Valeur = 31
Exposant = 0
>> Valeur réelle = 31
Valeur = 171
Exposant = 1
>> Valeur réelle = 1710
Valeur = 12
Exposant = -1
>> Valeur réelle = 1.2
Remarque: L'exposant est un nombre entier
J'ai rajouté une procédure appelée StrExpo(n)
Elle retourne un texte en fonction de l'exposant n spécifié
Exemple:
**********
Debug StrExpo(3) affichera "Kilo"
Debug StrExpo(-6) affichera "Micro"
Il y a aussi les symboles abrégés. Pour cela, il faut rajouter un argument de valeur entière 1.
Debug StrExpo(6, 1) affichera "M" (parce que "Méga")
Debug StrExpo(1, 1) affichera "Da" (parce que "Déca")
Etc...
Au moment où les textes des gadgets sont convertis en nombres, ils doivent subir la conversion des échelles (D'où la présence de *Pow(10, blabla) dans la boucle principale)
Au moment où le résultat est converti en texte pour être réaffiché, il doit aussi subir la conversion d'échelle.
Résultat: le calcul reste confiné et tu n'as donc pas à te soucier des échelles dans le calcul même.
Tu dois gérer les échelles dans la partie "Préparation" du programme, et plus précisément quand tu crées une grandeur avec GrandeurInstalle(). C'est le dernier argument entre parenthèses.
Si tu as des questions, il n'y a aucun souci. N'oublie pas les petits signes /!\ qui indiquent les endroits qui sont importants pour toi dans le code, et permettent d'arriver facilement à ce que tu m'as demandé en pm. C'est logiquement un bon repérage.
Bon courage.
Code : Tout sélectionner
Structure GrandeurPhysique
Nom.S
GadgetNom.L
Valeur.D
GadgetVal.L
Unite.S
GadgetUnite.L
Exposant.L ; <<<<<<<< ICI
EndStructuren puissance 1 = n
n puissance 2 = n * n (peut se lire n au carré)
n puissance 3 = n * n * n (peut se lire n au cube)
n puissance -1 = 1 / n
n puissance -2 = 1 / (n * n)
n puissance -3 = 1 / (n * n * n)
n puissance (a + b) = (n puissance a) * (n puissance b)
n puissance (a - b) = (n puissance a) / (n puissance b)
n puissance 0 = n puissance (1 - 1) = (n puissance 1) / (n puissance 1) = n / n = 1
n puissance (1/2) = Racine carrée de n (on peut pas écrire le symbole ici)
n puissance (1/3) = Racine cubique de n
n puissance (1/x) = Racine x ième de n
Petit rappel d'anglais : puissance se dit POWER
D'où l'instruction PureBasic Pow(a, b)
Pow(a, b) signifie a puissance b
Le champ appelé "Exposant" dans la structure ci-dessus, stocke en fait la valeur n tel que
le nombre réel traité = Valeur * Pow(10, n)
Exemples:
***********
Valeur = 15
Exposant = 3
>> Valeur réelle = 15 000
Valeur = 26
Exposant = 2
>> Valeur réelle = 2 600
Valeur = 31
Exposant = 0
>> Valeur réelle = 31
Valeur = 171
Exposant = 1
>> Valeur réelle = 1710
Valeur = 12
Exposant = -1
>> Valeur réelle = 1.2
Remarque: L'exposant est un nombre entier
J'ai rajouté une procédure appelée StrExpo(n)
Elle retourne un texte en fonction de l'exposant n spécifié
Exemple:
**********
Debug StrExpo(3) affichera "Kilo"
Debug StrExpo(-6) affichera "Micro"
Il y a aussi les symboles abrégés. Pour cela, il faut rajouter un argument de valeur entière 1.
Debug StrExpo(6, 1) affichera "M" (parce que "Méga")
Debug StrExpo(1, 1) affichera "Da" (parce que "Déca")
Etc...
Au moment où les textes des gadgets sont convertis en nombres, ils doivent subir la conversion des échelles (D'où la présence de *Pow(10, blabla) dans la boucle principale)
Au moment où le résultat est converti en texte pour être réaffiché, il doit aussi subir la conversion d'échelle.
Résultat: le calcul reste confiné et tu n'as donc pas à te soucier des échelles dans le calcul même.
Tu dois gérer les échelles dans la partie "Préparation" du programme, et plus précisément quand tu crées une grandeur avec GrandeurInstalle(). C'est le dernier argument entre parenthèses.
Si tu as des questions, il n'y a aucun souci. N'oublie pas les petits signes /!\ qui indiquent les endroits qui sont importants pour toi dans le code, et permettent d'arriver facilement à ce que tu m'as demandé en pm. C'est logiquement un bon repérage.
Bon courage.
Code : Tout sélectionner
;***********************************
;***********************************
;***********************************
; Calcul de la puissance P en
; fonction de l'intensité I
; et la tension U
;***********************************
; (4) Rajout de texte
; & Mise en structure
;***********************************
;***********************************
;===================================
; INITIALISATION
;===================================
#FenetreTest = 1
#StyleStandard = $CF0001
Structure GrandeurPhysique
Nom.S
GadgetNom.L
Valeur.D
GadgetVal.L
Unite.S
GadgetUnite.L
Exposant.L
EndStructure
Define Event0.L
Define Tension.GrandeurPhysique
Define Intensite.GrandeurPhysique
Define Puissance.GrandeurPhysique
;/!\
Global GadgetCurseurY.L
Procedure.S StrExpo(n.L, Abrege.L = 0)
Protected Result.S
Static Ech3.S = "atto/a;pico/p;nano/n;micro/µ;milli/m;/;kilo/K;méga/M;giga/G;tera/T"
Static Ech10.S = "centi/c;déci/d;/;déca/Da;hecto/H"
If Abs(n) <= 2
Result = StringField(Ech10, n + 3, ";")
Else
Result = StringField(Ech3, (n / 3) + 6, ";")
EndIf
If Abrege
Result = StringField(Result, 2, "/")
Else
Result = StringField(Result, 1, "/")
Result = UCase(Left(Result, 1) ) + Right(Result, Len(Result) - 1)
EndIf
ProcedureReturn Result
EndProcedure
Procedure GrandeurInstaller(*C.GrandeurPhysique, Nom.S, Unite.S, Exposant.L = 0)
With *C
\GadgetNom = TextGadget(-1, 16, GadgetCurseurY, 80, 24, Nom)
\GadgetVal = StringGadget(-1, 96, GadgetCurseurY, 128, 24, "")
\GadgetUnite = TextGadget(-1, 240, GadgetCurseurY, 128, 24, StrExpo(Exposant) + Unite)
\Exposant = Exposant
EndWith
GadgetCurseurY + 32
EndProcedure
;===================================
; DEMARRAGE
;===================================
If OpenWindow(#FenetreTest, 0, 0, 320, 96, "Test", #StyleStandard)
GadgetCurseurY = 16
GrandeurInstaller(Tension, "Tension", "Volt(s)", -3)
GrandeurInstaller(Intensite, "Intensité", "Ampère(s)", 6)
GrandeurInstaller(Puissance, "Puissance", "Watt(s)", 3)
;/!\
ResizeWindow(#FenetreTest, #PB_Ignore, #PB_Ignore, #PB_Ignore, GadgetCurseurY)
EndIf
;===================================
; BOUCLE PRINCIPALE
;===================================
Repeat
; On attend un événement système...
Event0 = WaitWindowEvent() ; ...stocké dans Event0
; On récupère la tension
Tension\Valeur = ValD(GetGadgetText(Tension\GadgetVal) ) * Pow(10, Tension\Exposant)
; On récupère l'intensité
Intensite\Valeur = ValD(GetGadgetText(Intensite\GadgetVal) ) * Pow(10, Intensite\Exposant)
; /!\
; On fait le calcul
Puissance\Valeur = Tension\Valeur * Intensite\Valeur
; /!\ Modifier le calcul
; On place le résultat dans la zone de sortie
SetGadgetText(Puissance\GadgetVal, StrD(Puissance\Valeur * Pow(10, 0.0 - Puissance\Exposant), 3) )
; /!\ Modifier le nom de la sortie /!\
; /!\ car ça n'est pas forcément la puissance /!\
; On laisse le CPU se reposer un peu...
Delay(15)
; Si l'événement système est une sortie (code 16)...
Until Event0 = 16
; ...On ne remonte pas à la ligne REPEAT (début de boucle)
End