calcul surface d'un rectangle pour me familiariser avec pb .

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

Re: calcul surface d'un rectangle pour me familiariser avec

Message par klystron »

Merci Marc56 de ta modif, oui c'est bon

Marc56 m'a donné une solution pour l'ajout du bouton calculer 8O

merci

je vais noté tout ça , cela me servira de model .

merci Falsam et Marc56 pour m'avoir aider un maximum.

bonne journée a vous deux.
je dois m'absenter pour la matinée, je vous reverrais en fin d'apres-midi.
encore merci pour tout.

Yves, A+
Dernière modification par klystron le ven. 05/déc./2014 11:26, modifié 1 fois.
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: calcul surface d'un rectangle pour me familiariser avec

Message par Marc56 »

(mince, j'aurais dû te laisser bosser :oops: )

Une chose à considérer: Déclencher le calcul sur #PB_EventType_Change est bien pour avoir un affichage en temps réel, mais le problème est que la procédure se déclenche à chaque nouveau caractère entré (on peut le voir en mettant un affichage de debug dans la procédure). Donc si on met 15 chiffres, on déclenche 15 fois la procédure! (dans un petit programme ça se voit pas, mais toujours considérer la possible évolution)

Il est préférable de déclencher sur ordre (ex: un bouton) ou sur perte de focus.

Par contre le déclenchement sur #PB_EventType_Change peut être très utile pour faire un contrôle de saisie en temps réel (c'est ce qu'on fait sur un programme pro). Comme contrôler que l'utilisateur n'entre que des chiffres et/ou un point et vérifier le nombre de caractères entrés

On peut même s'en servir pour passer automatiquement au champs suivant

si #PB_EventType_Change
0 à 9 et '.' = OK
Chr(13) = Entrée = Passer au champ suivant
si Chr(13) et qu'on est sur le deuxième champs alors calculer.

:wink:
Dernière modification par Marc56 le ven. 05/déc./2014 11:29, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: calcul surface d'un rectangle pour me familiariser avec

Message par falsam »

Je n'avais pas vu la réponse de Marc.

@Marc56: klystron étant débutant en programmation, le but de ma démarche depuis le premier message était de lui montrer progressivement comment fonctionne Pure Basic.

Bien sur que je pouvais donner une réponse à klystron avec des codes tout fait, mais c'est peu didacticiel. :)

Redit :
Marc56 a écrit :(mince, j'aurais dû te laisser bosser )
Oui mais rien de grave.
Dernière modification par falsam le ven. 05/déc./2014 11:30, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

Re: calcul surface d'un rectangle pour me familiariser avec

Message par klystron »

Merci Marc56
non, mais je vais regardé tout ca a tete reposée, pour moi je découvre tout en purebasic, :D
a+
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: calcul surface d'un rectangle pour me familiariser avec

Message par falsam »

@klystron : As tu une version d'évaluation de Pure Basic ? ou une version commerciale ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: calcul surface d'un rectangle pour me familiariser avec

Message par Marc56 »

Je te laisse continuer :wink:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: calcul surface d'un rectangle pour me familiariser avec

Message par falsam »

Marc56 a écrit :Je te laisse continuer :wink:
Non non je ne souhaites pas du tout être le seul au contraire. Juste que chacun continue dans cette même démarche quand il s'agit d'un débutant.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

Re: calcul surface d'un rectangle pour me familiariser avec

Message par klystron »

Falsam,

j'ai une version de PB commerciale oui.
je vais réfléchir pour ajouter au programme code pour y mettre le calcul de l'hypoténuse , et aussi du périmètre , soit deux cases de plus , c'est mon challange :D
Yves,A+
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: calcul surface d'un rectangle pour me familiariser avec

Message par Marc56 »

falsam a écrit :Non non je ne souhaites pas du tout être le seul au contraire. Juste que chacun continue dans cette même démarche quand il s'agit d'un débutant.
OK, c'est effectivement la bonne méthode d'apprentissage.
Je donnerais juste des conseils, mais pas la soluce :wink:
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

Re: calcul surface d'un rectangle pour me familiariser avec

Message par klystron »

Bonsoir,
j'ai commencé pour modifier mon petit code , mais j'ai une erreur a la page 79 variable déjà déclarée BC l'hypotenuse il faut pourtant prendre BC pour faire le calcul du perimetre du triangle ,amoins de mettre une autre variable ?

Code : Tout sélectionner

Enumeration Window
  #MaFenetre
EndEnumeration

Enumeration Gadget
  #Longueur
  #Largeur
  #Surface
  #Hypotenuse
  #Perimetre
  #Bouton_Calculer ; *** Déclarer l'ID du bouton Calculer
EndEnumeration

;Création de la fenetre et des différents gadgets
Procedure Open_MainForm()
  OpenWindow(#MaFenetre, 100, 100, 800, 600, " -Elements d'un triangle rectangle- ")

  TextGadget(#PB_Any, 10, 35, 100, 22, "Longueur")
  StringGadget(#Longueur, 120, 30, 80, 22, "")

  TextGadget(#PB_Any, 10, 65, 100, 22, "Largeur")
  StringGadget(#Largeur, 120, 60, 80, 22, "")

  TextGadget(#PB_Any, 10, 100, 100, 22, "Surface")
  StringGadget(#Surface, 120, 100, 80, 22, "", #PB_String_ReadOnly) ;Ce gadget sera en lecture seule
  

  TextGadget(#PB_Any, 10, 135, 100, 22, "Hypotenuse")
  StringGadget(#Hypotenuse, 120, 135, 80, 22, "", #PB_String_ReadOnly) ;Ce gadget sera en lecture seule


  TextGadget(#PB_Any, 10, 170, 100, 22, "Perimetre")
  StringGadget(#Perimetre, 120, 170, 80, 22, "", #PB_String_ReadOnly) ;Ce gadget sera en lecture seule



  ButtonGadget(#Bouton_Calculer, 10, 220, 100, 25, "Calculer") ; *** Le bouton Calculer
EndProcedure

;Calcul de la surface d'un triangle rectangle
Procedure CalculSurface(Longueur.f, largeur.f)
  Protected AB.f = longueur
  Protected AC.f = largeur
  Protected Resultat.f

  Resultat = (AB * AC)/2 ;Inutile de repeter le typage .f (float) à résultat car déja déclaré

  SetGadgetText(#Surface, StrF(Resultat, 3)) ;Affichage du résultat avec 3 décimales
EndProcedure



; calcul de l'ypotenuse 

;********************avoir si ok ****************************************
Procedure Calculhypetenuse(Longueur.f, Largeur.f)
  Protected AB.f = longueur
  Protected AC.f = largeur
  Protected Resultat.f
  
  Protected BC.f     ;C'est la longueur de l'hypotenuse à retrouver
  
  Resultat = Pow(AB,2) + Pow(AC,2)    ; puissances 2
  
  BC = Sqr(Resultat)    ; racine carree
  
  SetGadgettext(#Hypotenuse,Strf(BC,3))     ;affichage du resultat avec 3 decimales
EndProcedure
;**************************************************************


; calcul du perimetre du triangle

;********************avoir si ok ****************************************
Procedure Calculperimetre(Longueur.f, Largeur.f,BC.f)
  Protected AB.f = longueur
  Protected AC.f = largeur
  Protected BC.f = hypotenuse
  Protected Resultat.f
  
  Resultat = AB + AC + BC
  
    
  SetGadgettext(#perimetre,Strf(Resultat,3))     ;affichage du resultat avec 3 decimales
EndProcedure
;**************************************************************




;Le programme commence ici : On ouvre la fenêtre
Open_MainForm()

;Boucle événementielle
Repeat
  Select WaitWindowEvent() ;Un événement est arrivé
    Case #PB_Event_Gadget  ;Est ce un gadget qui a provoqué l'événement ?
      Select EventGadget() ;Apparemment oui : On cherche qui
; *** Je désactive ici le déclenchement automatique sur changement de valeur d'un des deux champs               
;         ;Le gadget #Longueur et #largeur faisant appel à la meme procédure, on va simplifier le code. 
;         Case #Longueur, #Largeur ;Apparemment c'est le gadget #Longueur ou #largeur qui provoque l’événement
;          
;           Select EventType() ;Quel type d'évenement il y a eu sur ces deux gadgets?             
;             Case #PB_EventType_Change ;? il y a du changement dans le gadget : Là ça nous intéresse
;               CalculSurface(ValF(GetGadgetText(#Longueur)), ValF(GetGadgetText(#Largeur)));On appelle la procédure de calcul de la surface
;           EndSelect ;Fin du Seledt EventType()
;       EndSelect ;Fin du Seledt EventGadget()   
            
; *** Je provoque le déclenchement par le bouton Calculer
        Case #Bouton_Calculer
             CalculSurface(ValF(GetGadgetText(#Longueur)), ValF(GetGadgetText(#Largeur)));On appelle la procédure de calcul de la surface
       EndSelect   
         
    Case #PB_Event_CloseWindow ;Est ce une fermeture de la fenêtre ?
      End ;Apparemment oui : Fermeture de la fenêtre.
     
  EndSelect
ForEver


; IDE Options = PureBasic 5.31 (Windows - x64)
; CursorPosition = 68
; FirstLine = 32
; Folding = -
; EnableUnicode
; EnableXP
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: calcul surface d'un rectangle pour me familiariser avec

Message par Micoute »

Bonsoir klystron,

à la ligne 75, remplace BC par hypothenuse et ça fonctionnera !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

Re: calcul surface d'un rectangle pour me familiariser avec

Message par klystron »

Bonsoir Micoute,
merci pour l'info, je vais faire l'essai.
a+
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: calcul surface d'un rectangle pour me familiariser avec

Message par Ollivier »

Bonjour Klystron,

bienvenu sur le site.
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

Re: calcul surface d'un rectangle pour me familiariser avec

Message par klystron »

Je viens de modifier une partie de mon petit code, je ne sais pas si c'est bon, il passe en test mais bon...
reste le plus difficile pour moi, afficher les valeurs dans les bonnes cases :D
là c'est pas gagner.

Code : Tout sélectionner

Enumeration Window
  #MaFenetre
EndEnumeration

Enumeration Gadget
  #Longueur
  #Largeur
  #Surface
  #Hypotenuse
  #Perimetre
  #Bouton_Calculer ; *** Déclarer l'ID du bouton Calculer
EndEnumeration

;Création de la fenetre et des différents gadgets
Procedure Open_MainForm()
  OpenWindow(#MaFenetre, 100, 100, 800, 600, " -Elements d'un triangle rectangle- ")

  TextGadget(#PB_Any, 10, 35, 100, 22, "Longueur")
  StringGadget(#Longueur, 120, 30, 80, 22, "")

  TextGadget(#PB_Any, 10, 65, 100, 22, "Largeur")
  StringGadget(#Largeur, 120, 60, 80, 22, "")

  TextGadget(#PB_Any, 10, 100, 100, 22, "Surface")
  StringGadget(#Surface, 120, 100, 80, 22, "", #PB_String_ReadOnly) ;Ce gadget sera en lecture seule
  

  TextGadget(#PB_Any, 10, 135, 100, 22, "Hypotenuse")
  StringGadget(#Hypotenuse, 120, 135, 80, 22, "", #PB_String_ReadOnly) ;Ce gadget sera en lecture seule


  TextGadget(#PB_Any, 10, 170, 100, 22, "Perimetre")
  StringGadget(#Perimetre, 120, 170, 80, 22, "", #PB_String_ReadOnly) ;Ce gadget sera en lecture seule



  ButtonGadget(#Bouton_Calculer, 10, 220, 100, 25, "Calculer") ; *** Le bouton Calculer
EndProcedure

;Calcul de la surface d'un triangle rectangle
Procedure CalculSurface(Longueur.f, largeur.f)
  Protected AB.f = longueur
  Protected AC.f = largeur
  Protected Resultat.f

  Resultat = (AB * AC)/2 ;Inutile de repeter le typage .f (float) à résultat car déja déclaré

  SetGadgetText(#Surface, StrF(Resultat, 3)) ;Affichage du résultat avec 3 décimales
EndProcedure



; calcul de l'ypotenuse 

Procedure Calculhypotenuse(Longueur.f, Largeur.f)
  Protected AB.f = longueur
  Protected AC.f = largeur
  Protected Resultat.f
  
  Protected BC.f     ;C'est la longueur de l'hypotenuse à retrouver
  
  Resultat = Pow(AB,2) + Pow(AC,2)    ; puissances 2
  
  BC = Sqr(Resultat)    ; racine carree
  
  SetGadgetText(#Hypotenuse,StrF(BC,3))     ;affichage du resultat avec 3 decimales
EndProcedure



; calcul du perimetre du triangle


Procedure Calculperimetre(Longueur.f, Largeur.f,BC.f)
  Protected AB.f = longueur
  Protected AC.f = largeur 
  Protected Resultat.f
  
  Resultat = AB + AC + BC
  
    
  SetGadgetText(#perimetre,StrF(Resultat,3))     ;affichage du resultat avec 3 decimales
EndProcedure


;Le programme commence ici : On ouvre la fenêtre
Open_MainForm()

;Boucle événementielle
Repeat
  Select WaitWindowEvent() ;Un événement est arrivé
    Case #PB_Event_Gadget  ;Est ce un gadget qui a provoqué l'événement ?
      Select EventGadget() ;Apparemment oui : On cherche qui
; *** Je désactive ici le déclenchement automatique sur changement de valeur d'un des deux champs               
;         ;Le gadget #Longueur et #largeur faisant appel à la meme procédure, on va simplifier le code. 
;         Case #Longueur, #Largeur ;Apparemment c'est le gadget #Longueur ou #largeur qui provoque l’événement
;          
;           Select EventType() ;Quel type d'évenement il y a eu sur ces deux gadgets?             
;             Case #PB_EventType_Change ;? il y a du changement dans le gadget : Là ça nous intéresse
;               CalculSurface(ValF(GetGadgetText(#Longueur)), ValF(GetGadgetText(#Largeur)));On appelle la procédure de calcul de la surface
;           EndSelect ;Fin du Seledt EventType()
;       EndSelect ;Fin du Seledt EventGadget()   
            
; *** Je provoque le déclenchement par le bouton Calculer
        Case #Bouton_Calculer
             CalculSurface(ValF(GetGadgetText(#Longueur)), ValF(GetGadgetText(#Largeur)));On appelle la procédure de calcul de la surface
       EndSelect   
         
    Case #PB_Event_CloseWindow ;Est ce une fermeture de la fenêtre ?
      End ;Apparemment oui : Fermeture de la fenêtre.
     
  EndSelect
ForEver


; IDE Options = PureBasic 5.31 (Windows - x64)
; CursorPosition = 81
; FirstLine = 65
; Folding = -
; EnableUnicode
; EnableXP
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: calcul surface d'un rectangle pour me familiariser avec

Message par falsam »

Code : Tout sélectionner

Procedure Calculperimetre(Longueur.f, Largeur.f,BC.f)
  Protected AB.f = longueur
  Protected AC.f = largeur
  Protected BC.f = hypotenuse
A la compilation le message d'erreur est pourtant clair.

:idea: Une variable ne peut pas être déclarée deux fois.

Dans cet extrait tu déclares BC en entrée de procédure et en variable interne à la procédure.

Pas d'inquiétude ....ça va venir :)

Tes variables peuvent se nommer comme tu veux

Code : Tout sélectionner

;********************avoir si ok ****************************************
Procedure Calculperimetre(Pomme.f, Poire.f, Abricot.f)
  Protected AB.f = Pomme
  Protected AC.f = Poire
  Protected BC.f = Abricot
  
  Protected Resultat.f
  
  Resultat = AB + AC + BC
  
    
  SetGadgetText(#perimetre,StrF(Resultat,3))     ;affichage du resultat avec 3 decimales
EndProcedure
et ça fonctionne aussi :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre