Classe Geometrie

Programmation d'applications complexes
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Classe Geometrie

Message par Micoute »

Bonjour à tous, comme mon module géométrie a fait un effet bof (j'aurais préféré un effet bœuf), je vous soumet le même programme mais en interface.

Code : Tout sélectionner

;Classe Geometrie
;-(Tel est le visage public de mes classes qui permettent à PB d'appeler mes méthodes de fonctions).


Interface ObjetCarre
  DefinirCote.d(NouvelleLongueur)
  Surface.d()
  Cote.d()
  Diagonale.d()
  Perimetre.d()
  Detruire()
EndInterface

Interface ObjetCercle
  DefinirRayon.d(NouveauRayon)
  Surface.d()
  Rayon.d()
  Diametre.d()
  Perimetre.d()
  Detruire()
EndInterface

Interface ObjetRectangle
  DefinirLongueur.d(NouvelleLongueur)
  DefinirLargeur.d(NouvelleLargeur)
  Surface.d()
  Longueur.d()
  Largeur.d()
  Diagonale.d()
  Perimetre.d()
  EstCarre.d()
  Detruire()
EndInterface

Interface ObjetAnneau
  DefinirDiametreExterne.d(DiametreExterne)
  DefinirDiametreInterne.d(DiametreInterne)
  DiametreIntermediaire.d()
  Surface.d()
  Largeur.d()
  Detruire()
EndInterface

Interface ObjetTriangleRectangle
  DefinirBase.d()
  DefinirPetitCote.d()
  Surface.d()
  Base.d()
  PetitCote.d()
  Hypothenuse.d()
  Perimetre.d()
  Detruire()
EndInterface

Interface ObjetLosange
  DefinirCote.d()
  Cote.d()
  Surface.d()
  Perimetre.d()
  Detruire()
EndInterface

Interface ObjetParallelogramme
  DefinirLongueur.d(NouvelleLongueur)
  DefinirLargeur.d(NouvelleLargeur)
  Surface.d()
  Longueur.d()
  Largeur.d()
  Perimetre.d()
  EstLosange.d()
  Detruire()
EndInterface


Interface ObjetTrapeze
  DefinirCote1.d(NouveauCote1)
  DefinirCote2.d(NouveauCote2)
  DefinirCote3.d(NouveauCote3)
  DefinirCote4.d(NouveauCote4)
  DefinirHauteur.d(NouvelleHauteur)
  Cote1.d()
  Cote2.d()
  Cote3.d()
  Cote4.d()
  Surface.d()
  Hauteur.d()
  Perimetre.d()
  Longueur_Mediane.d()
  Detruire()
EndInterface


Interface ObjetTriangle
  DefinirHypothenuse.d(NouvelHypothenuse)
  DefinirPetitCote.d(NouveauPetitCote)
  DefinirBase.d(NouvelleBase)
  DefinirHauteur.d(NouvelleHauteur)
  Surface.d()
  CoteA.d()
  CoteB.d()
  CoteC.d()
  Hauteur.d()
  Perimetre.d()
  Detruire()
EndInterface



;-MODELE DE CLASSE CARRE.
Structure _Carre
  *TableVirtuelle
  Cote.d
EndStructure

;-MODELE DE CLASSE CERCLE.
Structure _Cercle
  *TableVirtuelle
  Rayon.d
EndStructure

;-MODELE DE CLASSE RECTANGLE.
Structure _Rectangle
  *TableVirtuelle
  Longueur.d
  Largeur.d
EndStructure

;-MODELE DE CLASSE ANNEAU.
Structure _Anneau
  *TableVirtuelle
  DiametreInterne.d
  DiametreExterne.d
  DiametreIntermediaire.d
  Surface.d
  Largeur.d
EndStructure

;-MODELE DE CLASSE TRIANGLERECTANGLE
Structure _TriangleRectangle
  *TableVirtuelle
  Base.d
  PetitCote.d
  Hypothenuse.d
EndStructure

;-MODELE DE CLASSE LOSANGE
Structure _Losange
  *TableVirtuelle
  Cote.d
EndStructure

;-MODELE DE CLASSE PARALLELOGRAMME.
Structure _Parallelogramme
  *TableVirtuelle
  Longueur.d
  Largeur.d
  Hauteur.d
EndStructure

;-MODELE DE CLASSE TRAPEZE.
Structure _Trapeze
  *TableVirtuelle
  Cote1.d
  Cote2.d
  Cote3.d
  Cote4.d
  Hauteur.d
EndStructure

;-MODELE DE CLASSE TRIANGLE
Structure _Triangle
  *TableVirtuelle
  CoteA.d
  CoteB.d
  CoteC.d
  Hauteur.d
EndStructure
  

Procedure.d CreerCarre(Cote.d = 1)
  Protected *Objet._Carre
  ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_Carre))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_Carre
    ;Initialiser le côté.
    *Objet\Cote = Cote
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure


;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote_Carre(*Auto._Carre, NouveauCote.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouveauCote > 0
    *Auto\Cote = NouveauCote
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirSurface_Carre(*Auto._Carre)
  Protected Surface.d
  Surface = *Auto\Cote * *Auto\Cote
  ProcedureReturn Surface
EndProcedure


Procedure.d ObtenirCote_Carre(*Auto._Carre)
  ProcedureReturn *Auto\Cote
EndProcedure


Procedure.d ObtenirDiagonale_Carre(*Auto._Carre)
  Protected Diagonale.d
  Diagonale = *Auto\Cote * Sqr(2)
  ProcedureReturn Diagonale
EndProcedure


Procedure.d ObtenirPerimetre_Carre(*Auto._Carre)
  If *Auto\Cote > 0
    ProcedureReturn *Auto\Cote * 4
  EndIf
EndProcedure

Procedure Detruire_Carre(*Auto._Carre)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure


Procedure.d CreerCercle(Rayon.d = 1)
  Protected *Objet._Cercle
  ;Tentative d'allouer de la mémoire pour un modèle de Nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_Cercle))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_Cercle
    ;Initialiser le Rayon.
    *Objet\Rayon = Rayon
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure


;Retourne #True si le rayon est modifié avec succès.
Procedure.b DefinirRayon_Cercle(*Auto._Cercle, NouveauRayon.d)
  ;Ne procéder que si l'utilisateur tente de définir une Rayon non-négatif.
  If NouveauRayon > 0
    *Auto\Rayon = NouveauRayon
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirSurface_Cercle(*Auto._Cercle)
  Protected Surface.d
  Surface = 3.1415926536 * (*Auto\Rayon * *Auto\Rayon)
  ProcedureReturn Surface
EndProcedure


Procedure.d ObtenirRayon_Cercle(*Auto._Cercle)
  ProcedureReturn *Auto\Rayon
EndProcedure


Procedure.d ObtenirDiametre_Cercle(*Auto._Cercle)
  ProcedureReturn *Auto\Rayon * 2
EndProcedure


Procedure.d ObtenirPerimetre_Cercle(*Auto._Cercle)
  ProcedureReturn *Auto\Rayon * 2 * 3.1415926536
EndProcedure


Procedure Detruire_Cercle(*Auto._Cercle)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure


Procedure.d CreerRectangle(Longueur.d = 1, Largeur.d = 1)
  Protected *Objet._Rectangle
  ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_Rectangle))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_Rectangle
    ;Initialiser la longueur et la largeur.
    *Objet\Longueur = Longueur
    *Objet\Largeur = Largeur
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure


;Retourne #True si la longeur est modifiée avec succès.
Procedure.b DefinirLongueur_Rectangle(*Auto._Rectangle, NouvelleLongueur.d)
  ;Ne procéder que si l'utilisateur tente de définir une longueur non-négative.
  If NouvelleLongueur > 0
    *Auto\Longueur = NouvelleLongueur
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


;Retourne #True si la largeur est modifiée avec succès.
Procedure.b DefinirLargeur_Rectangle(*Auto._Rectangle, NouvelleLargeur.d)
  ;Ne procéder que si l'utilisateur tente de définir une largeur non-négative.
  If NouvelleLargeur > 0
    *Auto\Largeur = NouvelleLargeur
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirSurface_Rectangle(*Auto._Rectangle)
  Protected Surface.d
  Surface = *Auto\Longueur * *Auto\Largeur
  ProcedureReturn Surface
EndProcedure


Procedure.d ObtenirLongueur_Rectangle(*Auto._Rectangle)
  ProcedureReturn *Auto\Longueur
EndProcedure


Procedure.d ObtenirLargeur_Rectangle(*Auto._Rectangle)
  ProcedureReturn *Auto\Largeur
EndProcedure


Procedure.d ObtenirDiagonale_Rectangle(*Auto._Rectangle)
  Protected Diagonale.d
  Diagonale = Sqr(Pow(*Auto\Longueur, 2) + Pow(*Auto\Largeur, 2))
  ProcedureReturn Diagonale
EndProcedure


Procedure.d ObtenirPerimetre_Rectangle(*Auto._Rectangle)
  If *Auto\Longueur > 0 And *Auto\Largeur > 0
    ProcedureReturn (*Auto\Longueur + *Auto\Largeur) * 2
  EndIf
EndProcedure


Procedure.b Rectangle_EstCarre(*Auto._Rectangle)
  If *Auto\Longueur = *Auto\Largeur
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure


Procedure Detruire_Rectangle(*Auto._Rectangle)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure


Procedure.d CreerAnneau(DiametreInterne.d = 1, DiametreExterne.d = 1)
  Protected *Objet._Anneau
  ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_Anneau))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_Anneau
    ;Initialiser les diamètres intérieur et extérieur.
    *Objet\DiametreInterne = DiametreInterne
    *Objet\DiametreExterne = DiametreExterne
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure


;Retourne #True si la largeur est modifiée avec succès.
Procedure.b DefinirDiametreExterne_Anneau(*Auto._Anneau, NouveauDiametre.d)
  ;Ne procéder que si l'utilisateur tente de définir un diamètre non-négative.
  If NouveauDiametre > 0
    *Auto\DiametreExterne = DiametreExterne
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


;Retourne #True si le diamètre intérieur est modifié avec succès.
Procedure.b DefinirDiametreInterne_Anneau(*Auto._Anneau, NouveauDiametre.d)
  ;Ne procéder que si l'utilisateur tente de définir un diamètre non-négative.
  If NouveauDiametre > 0
    *Auto\DiametreInterne = DiametreInterne
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirDiametreIntermediaire_Anneau(*Auto._Anneau)
  *Auto\DiametreIntermediaire = ((*Auto\DiametreExterne - *Auto\DiametreInterne) / 2) + *Auto\DiametreInterne
  ProcedureReturn *Auto\DiametreIntermediaire
EndProcedure


Procedure.d ObtenirSurface_Anneau(*Auto._Anneau)
  Protected Surface.d
  Surface = #PI * *Auto\DiametreIntermediaire * *Auto\Largeur
  ProcedureReturn Surface
EndProcedure


Procedure.d ObtenirLargeur_Anneau(*Auto._Anneau)
  *Auto\Largeur = *Auto\DiametreExterne - *Auto\DiametreInterne
  ProcedureReturn *Auto\Largeur
EndProcedure


Procedure Detruire_Anneau(*Auto._Anneau)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure


Procedure.d CreerTriangleRectangle(Base.d = 1.0, PetitCote.d = 1.0)
  Protected *Objet._TriangleRectangle
  ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_TriangleRectangle))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_TriangleRectangle
    ;Initialiser la longueur et la largeur.
    *Objet\Base = Base
    *Objet\PetitCote = PetitCote
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure


;Retourne #True si la longeur est modifiée avec succès.
Procedure.b DefinirBase_TriangleRectangle(*Auto._TriangleRectangle, NouvelleBase.d)
  ;Ne procéder que si l'utilisateur tente de définir une longueur non-négative.
  If NouvelleBase > 0
    *Auto\Base = NouvelleBase
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


;Retourne #True si la largeur est modifiée avec succès.
Procedure.b DefinirPetitCote_TriangleRectangle(*Auto._TriangleRectangle, NouveauPetitCote.d)
  ;Ne procéder que si l'utilisateur tente de définir une largeur non-négative.
  If NouveauPetitCote > 0
    *Auto\PetitCote = NouveauPetitCote
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirSurface_TriangleRectangle(*Auto._TriangleRectangle)
  Protected Surface.d
  Surface = (*Auto\Base * *Auto\PetitCote) / 2
  ProcedureReturn Surface
EndProcedure


Procedure.d ObtenirBase_TriangleRectangle(*Auto._TriangleRectangle)
  ProcedureReturn *Auto\Base
EndProcedure


Procedure.d ObtenirPetitCote_TriangleRectangle(*Auto._TriangleRectangle)
  ProcedureReturn *Auto\PetitCote
EndProcedure


Procedure.d ObtenirHypothenuse_TriangleRectangle(*Auto._TriangleRectangle)
  *Auto\Hypothenuse = Sqr(Pow(*Auto\Base, 2) + Pow(*Auto\PetitCote, 2))
  ProcedureReturn *Auto\Hypothenuse
EndProcedure


Procedure.d ObtenirPerimetre_TriangleRectangle(*Auto._TriangleRectangle)
  If *Auto\Base > 0 And *Auto\PetitCote > 0
    ProcedureReturn *Auto\Base + *Auto\PetitCote + *Auto\Hypothenuse
  EndIf
EndProcedure


Procedure Detruire_TriangleRectangle(*Auto._TriangleRectangle)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure


Procedure.d CreerLosange(Cote.d = 1)
  Protected *Objet._Losange
  ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_Losange))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_Losange
    ;Initialiser la longueur et la largeur.
    *Objet\Cote = Cote
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure

;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote_Losange(*Auto._Losange, NouveauCote.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouveauCote > 0
    *Auto\Cote = NouveauCote
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirCote_Losange(*Auto._Losange)
  ProcedureReturn *Auto\Cote
EndProcedure


Procedure.d ObtenirSurface_Losange(*Auto._Losange)
  Protected Surface.d
  Surface = *Auto\Cote * *Auto\Cote
  ProcedureReturn Surface
EndProcedure


Procedure.d ObtenirPerimetre_Losange(*Auto._Losange)
  If *Auto\Cote > 0
    ProcedureReturn *Auto\Cote * 4
  EndIf
EndProcedure


Procedure Detruire_Losange(*Auto._Losange)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure


Procedure.d CreerParallelogramme(Longueur.d = 1, Largeur.d = 1, Hauteur.d = 1)
  Protected *Objet._Parallelogramme
  ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_Parallelogramme))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_Parallelogramme
    ;Initialiser la longueur et la largeur.
    *Objet\Longueur = Longueur
    *Objet\Largeur = Largeur
    *Objet\Hauteur = Hauteur
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure


;Retourne #True si la longeur est modifiée avec succès.
Procedure.b DefinirLongueur_Parallelogramme(*Auto._Parallelogramme, NouvelleLongueur.d)
  ;Ne procéder que si l'utilisateur tente de définir une longueur non-négative.
  If NouvelleLongueur > 0
    *Auto\Longueur = NouvelleLongueur
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


;Retourne #True si la largeur est modifiée avec succès.
Procedure.b DefinirLargeur_Parallelogramme(*Auto._Parallelogramme, NouvelleLargeur.d)
  ;Ne procéder que si l'utilisateur tente de définir une largeur non-négative.
  If NouvelleLargeur > 0
    *Auto\Largeur = NouvelleLargeur
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirSurface_Parallelogramme(*Auto._Parallelogramme)
  Protected Surface.d
  Surface = *Auto\Longueur * *Auto\Hauteur
  ProcedureReturn Surface
EndProcedure


Procedure.d ObtenirLongueur_Parallelogramme(*Auto._Parallelogramme)
  ProcedureReturn *Auto\Longueur
EndProcedure


Procedure.d ObtenirLargeur_Parallelogramme(*Auto._Parallelogramme)
  ProcedureReturn *Auto\Largeur
EndProcedure


Procedure.d ObtenirPerimetre_Parallelogramme(*Auto._Parallelogramme)
  If *Auto\Longueur > 0 And *Auto\Largeur > 0
    ProcedureReturn (*Auto\Longueur + *Auto\Largeur) * 2
  EndIf
EndProcedure


Procedure.b Parallelogramme_EstLosange(*Auto._Parallelogramme)
  If *Auto\Longueur = *Auto\Largeur
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure


Procedure Detruire_Parallelogramme(*Auto._Parallelogramme)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure


Procedure.d CreerTrapeze(Cote1.d = 1, Cote2.d = 1, Cote3.d = 1, Cote4.d = 1, Hauteur.d = 1)
  Protected *Objet._Trapeze
  ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_Trapeze))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_Trapeze
    ;Initialiser la longueur et la largeur.
    *Objet\Cote1 = Cote1
    *Objet\Cote2 = Cote2
    *Objet\Cote3 = Cote3
    *Objet\Cote4 = Cote4
    *Objet\Hauteur = Hauteur
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure

;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote1_Trapeze(*Auto._Trapeze, NouveauCote1.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouveauCote1 > 0
    *Auto\Cote1 = NouveauCote1
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote2_Trapeze(*Auto._Trapeze, NouveauCote2.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouveauCot2e > 0
    *Auto\Cote2 = NouveauCote2
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote3_Trapeze(*Auto._Trapeze, NouveauCote3.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouveauCote3 > 0
    *Auto\Cote3 = NouveauCote3
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

;Retourne #True si le côté est modifié avec succès.
Procedure.b DefinirCote4_Trapeze(*Auto._Trapeze, NouveauCote4.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouveauCote4 > 0
    *Auto\Cote4 = NouveauCote4
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

;Retourne #True si la hauteur est modifiée avec succès.
Procedure.b DefinirHauteur_Trapeze(*Auto._Trapeze, NouvelleHauteur.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouvelleHauteur >= 1
    *Auto\Hauteur = NouvelleHauteur
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirCote1_Trapeze(*Auto._Trapeze)
  ProcedureReturn *Auto\Cote1
EndProcedure


Procedure.d ObtenirCote2_Trapeze(*Auto._Trapeze)
  ProcedureReturn *Auto\Cote2
EndProcedure


Procedure.d ObtenirCote3_Trapeze(*Auto._Trapeze)
  ProcedureReturn *Auto\Cote3
EndProcedure


Procedure.d ObtenirCote4_Trapeze(*Auto._Trapeze)
  ProcedureReturn *Auto\Cote4
EndProcedure


Procedure.d ObtenirSurface_Trapeze(*Auto._Trapeze)
  Protected Surface.d
  Surface = (*Auto\Cote1 + *Auto\Cote3) / 2 * *Auto\Hauteur
  ProcedureReturn Surface
EndProcedure


Procedure.d ObtenirHauteur_Trapeze(*Auto._Trapeze)
  ProcedureReturn *Auto\Hauteur
EndProcedure


Procedure.d ObtenirPerimetre_Trapeze(*Auto._Trapeze)
  If *Auto\Cote1 > 0 And *Auto\Cote2 > 0 And *Auto\Cote3 > 0 And *Auto\Cote4 > 0 And *Auto\Hauteur > 0
    ProcedureReturn *Auto\Cote1 + *Auto\Cote2 + *Auto\Cote3 + *Auto\Cote4
  EndIf
EndProcedure


Procedure.d ObtenirLongueur_Mediane_Trapeze(*Auto._Trapeze)
  If *Auto\Cote1 > 0 And *Auto\Cote3 > 0
    ProcedureReturn (*Auto\Cote1 + *Auto\Cote3) / 2
  EndIf
EndProcedure

Procedure Detruire_Trapeze(*Auto._Trapeze)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure


Procedure.d CreerTriangle(CoteA.d = 4, CoteB.d = 3, CoteC.d = 5, Hauteur.d = 2.4)
  Protected *Objet._Triangle
  ;Tentative d'allouer de la mémoire pour un modèle de nouvelle classe.
  *Objet = AllocateMemory(SizeOf(_Triangle))
  If *Objet
    ;Assurez-vous que les points champs *TableVirtuelle pour notre table virtuelle.
    *Objet\TableVirtuelle = ?TableVirtuelle_Triangle
    ;Initialiser la longueur et la largeur.
    *Objet\CoteA = CoteA
    *Objet\CoteB = CoteB
    *Objet\CoteC = CoteC
    *Objet\Hauteur = Hauteur
  EndIf
  ;Retourne un pointeur à notre objet.
  ProcedureReturn *Objet
EndProcedure


;Retourne #True si le côté a est modifié avec succès.
Procedure.b DefinirHypothenuse_Triangle(*Auto._Triangle, NouvelHypothenuse.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouvelHypothenuse > 0
    *Auto\CoteA = NouvelHypothenuse
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

;Retourne #True si le côté b est modifié avec succès.
Procedure.b DefinirPetitCote_Triangle(*Auto._Triangle, NouveauPetitCote.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouveauPetitCote > 0
    *Auto\CoteB = NouveauPetitCote
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

;Retourne #True si le côté c est modifié avec succès.
Procedure.b DefinirBase_Triangle(*Auto._Triangle, NouvelleBase.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouvelleBase > 0
    *Auto\CoteC = NouvelleBase
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

;Retourne #True si la hauteur est modifiée avec succès.
Procedure.b DefinirHauteur_Triangle(*Auto._Triangle, NouvelleHauteur.d)
  ;Ne procéder que si l'utilisateur tente de définir un côté non-négatif.
  If NouvelleHauteur > 0
    *Auto\Hauteur = NouvelleHauteur
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure


Procedure.d ObtenirSurface_Triangle(*Auto._Triangle)
  If *Auto\CoteC > 0 And *Auto\Hauteur > 0
    Protected Surface.d
    Surface = (*Auto\CoteC * *Auto\Hauteur) / 2
    ProcedureReturn Surface
  EndIf
EndProcedure


Procedure.d ObtenirHypothenuse_Triangle(*Auto._Triangle)
  If *Auto\CoteA > 0
    ProcedureReturn *Auto\CoteA
  EndIf
EndProcedure


Procedure.d ObtenirPetitCote_Triangle(*Auto._Triangle)
  If *Auto\CoteB > 0
    ProcedureReturn *Auto\CoteB
  EndIf
EndProcedure


Procedure.d ObtenirBase_Triangle(*Auto._Triangle)
  If *Auto\CoteC > 0
    ProcedureReturn *Auto\CoteC
  EndIf
EndProcedure


Procedure.d ObtenirHauteur_Triangle(*Auto._Triangle)
  If *Auto\Hauteur > 0
    ProcedureReturn *Auto\Hauteur
  EndIf
EndProcedure


Procedure.d ObtenirPerimetre_Triangle(*Auto._Triangle)
  If *Auto\CoteA > 0 And *Auto\CoteB > 0 And *Auto\CoteC > 0
    ProcedureReturn *Auto\CoteA + *Auto\CoteB + *Auto\CoteC
  EndIf
EndProcedure


Procedure Detruire_Triangle(*Auto._Triangle)
  ;Tout ce qu'il faut faire ici, c'est libérer la mémoire précédemment allouée pour cet objet.
  FreeMemory(*Auto)
EndProcedure





;-TABLES VIRTUELLES.

DataSection
  
  TableVirtuelle_Carre:
  Data.i @DefinirCote_Carre()
  Data.i @ObtenirSurface_Carre()
  Data.i @ObtenirCote_Carre()
  Data.i @ObtenirDiagonale_Carre()
  Data.i @ObtenirPerimetre_Carre()
  Data.i @Detruire_Carre()
  
  
  TableVirtuelle_Cercle:
  Data.i @DefinirRayon_Cercle()
  Data.i @ObtenirSurface_Cercle()
  Data.i @ObtenirRayon_Cercle()
  Data.i @ObtenirDiametre_Cercle()
  Data.i @ObtenirPerimetre_Cercle()
  Data.i @Detruire_Cercle()
  
  
  
  TableVirtuelle_Rectangle:
  Data.i @DefinirLongueur_Rectangle()
  Data.i @DefinirLargeur_Rectangle()
  Data.i @ObtenirSurface_Rectangle()
  Data.i @ObtenirLongueur_Rectangle()
  Data.i @ObtenirLargeur_Rectangle()
  Data.i @ObtenirDiagonale_Rectangle()
  Data.i @ObtenirPerimetre_Rectangle()
  Data.i @Rectangle_EstCarre()
  Data.i @Detruire_Rectangle()
  
  
  TableVirtuelle_Anneau:
  Data.i @DefinirDiametreExterne_Anneau()
  Data.i @DefinirDiametreInterne_Anneau()
  Data.i @ObtenirDiametreIntermediaire_Anneau()
  Data.i @ObtenirSurface_Anneau()
  Data.i @ObtenirLargeur_Anneau()
  Data.i @Detruire_Anneau()
  
  
  TableVirtuelle_TriangleRectangle:
  Data.i @DefinirBase_TriangleRectangle()
  Data.i @DefinirPetitCote_TriangleRectangle()
  Data.i @ObtenirSurface_TriangleRectangle()
  Data.i @ObtenirBase_TriangleRectangle()
  Data.i @ObtenirPetitCote_TriangleRectangle()
  Data.i @ObtenirHypothenuse_TriangleRectangle()
  Data.i @ObtenirPerimetre_TriangleRectangle()
  Data.i @Detruire_TriangleRectangle()
  
  TableVirtuelle_Losange:
  Data.i @DefinirCote_Losange()
  Data.i @ObtenirCote_Losange()
  Data.i @ObtenirSurface_Losange()
  Data.i @ObtenirPerimetre_Losange()
  Data.i @Detruire_Losange()
  
  
  TableVirtuelle_Parallelogramme:
  Data.i @DefinirLongueur_Parallelogramme()
  Data.i @DefinirLargeur_Parallelogramme()
  Data.i @ObtenirSurface_Parallelogramme()
  Data.i @ObtenirLongueur_Parallelogramme()
  Data.i @ObtenirLargeur_Parallelogramme()
  Data.i @ObtenirPerimetre_Parallelogramme()
  Data.i @Parallelogramme_EstLosange()
  Data.i @Detruire_Parallelogramme()
  
  TableVirtuelle_Trapeze:
  Data.i @DefinirCote1_Trapeze()
  Data.i @DefinirCote2_Trapeze()
  Data.i @DefinirCote3_Trapeze()
  Data.i @DefinirCote4_Trapeze()
  Data.i @DefinirHauteur_Trapeze()
  Data.i @ObtenirCote1_Trapeze()
  Data.i @ObtenirCote2_Trapeze()
  Data.i @ObtenirCote3_Trapeze()
  Data.i @ObtenirCote4_Trapeze()
  Data.i @ObtenirSurface_Trapeze()
  Data.i @ObtenirHauteur_Trapeze()
  Data.i @ObtenirPerimetre_Trapeze()
  Data.i @ObtenirLongueur_Mediane_Trapeze()
  Data.i @Detruire_Trapeze()
  
  TableVirtuelle_Triangle:
  Data.i @DefinirHypothenuse_Triangle()
  Data.i @DefinirPetitCote_Triangle()
  Data.i @DefinirBase_Triangle()
  Data.i @DefinirHauteur_Triangle()
  Data.i @ObtenirSurface_Triangle()
  Data.i @ObtenirHypothenuse_Triangle()
  Data.i @ObtenirPetitCote_Triangle()
  Data.i @ObtenirBase_Triangle()
  Data.i @ObtenirHauteur_Triangle()
  Data.i @ObtenirPerimetre_Triangle()
  Data.i @Detruire_Triangle()
  
  TableVirtuelle_Polygone:
  
  
EndDataSection

CompilerIf #PB_Compiler_IsMainFile
  
  EnableExplicit
  
  Define T1.ObjetTriangleRectangle = CreerTriangleRectangle(3.0, 4.0)
  Define T2.ObjetTriangle = CreerTriangle() ;par défaut
  
  ;Define *Inconnu.BaseObjet ; objet prédéfini toujours disponible
  
  
  If T1 And T2
    Debug "Base T1 = " + T1\Base()
    Debug "Largeur T1 = " + T1\PetitCote()
    Debug "Hypoténuse T1 = " + T1\Hypothenuse()
    Debug "Perimetre T1 = " + T1\Perimetre()
    Debug "Surface T1 = " + T1\Surface()
    Debug ""
    
    Debug "Longueur T2 = " + T2\CoteC()
    Debug "Largeur T2 = " + T2\CoteB()
    Debug "Hypoténuse T2 = " + T2\CoteA()
    Debug "Hauteur T2 = " + T2\Hauteur()
    Debug "Perimetre T2 = " + T2\Perimetre()
    Debug "Surface T2 = " + T2\Surface()
    Debug ""
    
    Debug "Detruire T2"
    T2\Detruire()    
    Debug "Detruire T1"
    T1\Detruire()
    
    Debug ""
  EndIf
  
  
  ;Définir deux objets rectangle.
  ;Notez que nous déclarons chaque variable en fonction du type d'interface: "ObjetRectangle" dans ce cas
  Define rect1.ObjetRectangle
  Define rect2.ObjetRectangle
  
  ;Créer les deux objets. D'abord avec la longueur = 100 et la largeur = 10, et le second avec la longueur
  ;= 20 et la largeur = 20.
  rect1 = CreerRectangle(100, 50)
  rect2 = CreerRectangle(20, 20)
  
  ;Récupérer les longueurs, largeurs, surfaces, diagonales et si ce sont des carrés.
  Define Longueur.d = rect1\Longueur()
  Define Largeur.d = rect1\Largeur()
  Debug "Le rectangle 1 à une longueur de " + Str(Longueur) + " unités, une largeur de " + Str(Largeur) + 
        " et une surface de " + Str(ObtenirSurface_Rectangle(rect1)) + " unités²."
  Debug "Le rectangle 1 à une diagonale de " + StrD(ObtenirDiagonale_Rectangle(rect1), 2) + " unités"
  If Rectangle_EstCarre(rect1)
    Debug "Le rectangle 1 est carré"
  Else
    Debug "Le rectangle 1 n'est pas carré"
  EndIf
  Debug ""
  Largeur.d = rect2\Largeur()
  Longueur.d = rect2\Longueur()
  Debug "Le rectangle 2 à une largeur de " + Str(Largeur) + " et une longueur de " + Str(Longueur) + " unités."
  Debug "Le rectangle 2 à une diagonale de " + StrD(ObtenirDiagonale_Rectangle(rect2), 2) + " unités"
  If Rectangle_EstCarre(rect2)
    Debug "Le rectangle 2 est carré"
  Else
    Debug "Le rectangle 2 n'est pas carré"
  EndIf
  
  ;Détruire les objets lorsque nous avons terminé.
  Debug ""
  Debug "Detruire rectangle 1 et 2"
  rect1\Detruire()
  rect2\Detruire()

  CompilerEndIf

Code : Tout sélectionner

;Essai Classe Geometrie.pb
XIncludeFile "D:\Programmation\Prg Perso\P\POO\Classe Geometrie.pbi"

Enumeration Fenetres
  #Fenetre_Geometrie
  #Fenetre_Carre
  #Fenetre_Cercle
  #Fenetre_Rectangle
  #Fenetre_Anneau
  #Fenetre_TriangleR
  #Fenetre_Losange
  #Fenetre_Parallelogramme
  #Fenetre_Trapeze
EndEnumeration

Enumeration Gadgets
  #Str_cote_carre
  #Str_Surface_carre
  #Str_Diagonale_carre
  #Str_perimetre_carre
  #Str_perimetre_cercle
  #Str_Rayon_cercle
  #Str_Surface_Cercle
  #Str_Diametre_Cercle
  #Str_perimetre_Rectangle
  #Str_Largeur_Rectangle
  #Str_Longueur_Rectangle
  #Str_Surface_rectangle
  #Str_Diagonale_rectangle
  #Str_DE
  #Str_DI
  #Str_DIn
  #Str_La
  #Str_SU
  #Str_Epaisseur_Anneau
  #Str_Base_TR
  #Str_Hauteur_TR
  #Str_Hypothenuse_TR
  #Str_Perimetre_TR
  #Str_Surface_TR
  #TriangleRectangle
  #Str_Cote_Losange
  #Str_Surface_Losange
  #Str_Perimetre_Losange
  #Str_Longueur_Parallelogramme
  #Str_Largeur_Parallelogramme
  #Str_Hauteur_Parallelogramme
  #Str_Surface_Parallelogramme
  #Str_Perimetre_Parallelogramme
  #Str_Cote_1_Trapeze
  #Str_Cote_2_Trapeze
  #Str_Cote_3_Trapeze
  #Str_Cote_4_Trapeze
  #Str_Longueur_Mediane_Trapeze
  #Str_Hauteur_Trapeze
  #Str_Surface_Trapeze
  #Str_Perimetre_Trapeze
  #Btn_Carre
  #Btn_Cercle
  #Btn_Anneau
  #Btn_Rectangle
  #Btn_TR
  #Btn_Losange
  #Btn_Parallelogramme
  #Btn_Trapeze
EndEnumeration

Global FontID1
Global FontID2
Global FontID3


  FontID1 = LoadFont(1,"Segoe UI",16,#PB_Font_Bold)
  FontID2 = LoadFont(2,"Segoe UI",40,#PB_Font_Bold)
  FontID3 = LoadFont(3,"Segoe UI",30,#PB_Font_Bold)

  Global Carre.ObjetCarre, Cercle.ObjetCercle, Rectangle.ObjetRectangle, Anneau.ObjetAnneau, 
TriangleRectangle.ObjetTriangleRectangle, Losange.ObjetLosange, Parallelogramme.ObjetParallelogramme, Trapeze.ObjetTrapeze
  

Procedure checkFloatInput(gadget)
  Protected start, count, pointcount, new$
  SendMessage_(GadgetID(gadget), #EM_GETSEL, @start, 0)
  Protected txt$ = GetGadgetText(gadget)
  Protected *p.Character = @txt$
  
  While *p\c
    If *p\c = '.'
      pointcount + 1
      If pointcount < 2
        new$ + Chr(*p\c)
      Else
        If start > count : start-1 : EndIf
      EndIf
    ElseIf count = 0 And *p\c = '-'
      new$ + Chr('-')
    ElseIf *p\c >= '0' And *p\c <= '9'
      new$ + Chr(*p\c)
    Else
      start - 1
    EndIf
    *p + SizeOf(Character)
    count + 1
  Wend
  SetGadgetText(gadget, new$)
  SendMessage_(GadgetID(gadget), #EM_SETSEL, start, start)
EndProcedure

Procedure Ouvrir_Fenetre_Geometrie()
  
  OpenWindow(#Fenetre_Geometrie, 380, 100, 470, 341, "Choisissez une figure géométrique", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(#Btn_Carre, 35, 40, 200, 50, "Carré")
  ButtonGadget(#Btn_Cercle, 35, 110, 200, 50, "Cercle")
  ButtonGadget(#Btn_Rectangle, 35, 180, 200, 50, "Rectangle")
  ButtonGadget(#Btn_Anneau, 35, 250, 200, 50, "Anneau")
  ButtonGadget(#Btn_TR, 250, 40, 200, 50, "Triangle Rectangle")
  ButtonGadget(#Btn_Losange, 250, 110, 200, 50, "Losange")
  ButtonGadget(#Btn_Parallelogramme, 250, 180, 200, 50, "Parallélogramme")
  ButtonGadget(#Btn_Trapeze, 250, 250, 200, 50, "Trapèze")
  
EndProcedure

Procedure Ouvrir_Fenetre_Carre()
  
  If OpenWindow(#Fenetre_carre, 216, 0, 375, 399, "Calcule d'un carré", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    
    StringGadget(#Str_cote_carre, 130, 120, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_cote_carre, "Veuillez entrer le côté du carré")
    SetGadgetFont(#Str_cote_carre, FontID1)
    StringGadget(#Str_Surface_carre, 130, 180, 200, 40, "", #ES_RIGHT)
    SetGadgetFont(#Str_Surface_carre, FontID1)
    StringGadget(#Str_Diagonale_carre, 130, 240, 200, 40, "", #ES_RIGHT)
    SetGadgetFont(#Str_Diagonale_carre, FontID1)
    StringGadget(#Str_perimetre_carre, 130, 300, 200, 40, "", #ES_RIGHT)
    SetGadgetFont(#Str_perimetre_carre, FontID1)
    
    If StartDrawing(WindowOutput(#Fenetre_Carre))
      BackColor(Point(0, 0))
      
      DrawingFont(FontID2)
      
      FrontColor(#Red)
      DrawText(100, 30, "Carré")
      
      
      DrawingFont(FontID1)
      
      FrontColor(#Black)
      DrawText(20, 120, "Largeur :")
      DrawText(20, 180, "Surface :")
      DrawText(20, 240, "Diagonale :")
      DrawText(20, 300, "Périmètre :")
      
      StopDrawing()
    EndIf
    
  EndIf
  
  SetActiveGadget(#Str_cote_carre)
  
EndProcedure

Procedure Ouvrir_Fenetre_Cercle()
  If OpenWindow(#Fenetre_Cercle, 216, 0, 375, 420, "Calcul d'un Cercle", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    
    StringGadget(#Str_Rayon_cercle, 130, 150, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Rayon_cercle, "Veuillez entrer la Rayon du Cercle")
    SetGadgetFont(#Str_Rayon_cercle, FontID1)
    
    StringGadget(#Str_Surface_Cercle, 130, 210, 200, 40, "", #ES_RIGHT)
    SetGadgetFont(#Str_Surface_Cercle, FontID1)
    
    StringGadget(#Str_Diametre_Cercle, 130, 270, 200, 40, "", #ES_RIGHT)
    SetGadgetFont(#Str_Diametre_Cercle, FontID1)
    
    StringGadget(#Str_perimetre_cercle, 130, 330, 200, 40, "", #ES_RIGHT)
    SetGadgetFont(#Str_perimetre_cercle, FontID1)
    
    If StartDrawing(WindowOutput(#Fenetre_Cercle))
      BackColor(Point(0, 0))
      
      DrawingFont(FontID2)
      
      FrontColor(#Red)
      DrawText(100, 30, "Cercle")
      
      DrawingFont(FontID1)
      
      FrontColor(#Black)
      DrawText(20, 150, "Rayon :")
      DrawText(20, 210, "Surface :")
      DrawText(20, 270, "Diamètre:")
      DrawText(20, 330, "Périmètre :")
      
      StopDrawing()
    EndIf
    
    SetActiveGadget(#Str_Rayon_cercle)
    
  EndIf
  
EndProcedure

Procedure Ouvrir_Fenetre_Rectangle()
  If OpenWindow(#Fenetre_Rectangle, 216, 0, 375, 420, "Calcul d'un rectangle", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    
    StringGadget(#Str_Longueur_Rectangle, 130, 120, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Longueur_Rectangle, "Veuillez entrer la longueur du rectangle")
    SetGadgetFont(#Str_Longueur_Rectangle, FontID1)
    StringGadget(#Str_Largeur_Rectangle, 130, 180, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Largeur_Rectangle, "Veuillez entrer la largeur du rectangle")
    SetGadgetFont(#Str_Largeur_Rectangle, FontID1)
    StringGadget(#Str_Surface_rectangle, 130, 240, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Surface_rectangle, FontID1)
    StringGadget(#Str_Diagonale_rectangle, 130, 300, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Diagonale_rectangle, FontID1)
    StringGadget(#Str_perimetre_Rectangle, 130, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_perimetre_Rectangle, FontID1)
    
    If StartDrawing(WindowOutput(#Fenetre_Rectangle))
      BackColor(Point(0, 0))
      
      DrawingFont(FontID2)
      
      FrontColor(#Red)
      DrawText(60, 30, "Rectangle")
      
      DrawingFont(FontID1)
      
      FrontColor(#Black)
      DrawText(20, 120, "Longueur :")
      DrawText(20, 180, "Largeur :")
      DrawText(20, 240, "Surface :")
      DrawText(20, 300, "Diagonale :")
      DrawText(20, 360, "Périmètre :")
      
      StopDrawing()
    EndIf
    
    SetActiveGadget(#Str_Longueur_Rectangle)
    
  EndIf
  
EndProcedure

Procedure Ouvrir_Fenetre_Anneau()
  If OpenWindow(#Fenetre_Anneau, 0, 0, 400, 420, "Anneau", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    
    StringGadget(#Str_DE, 250, 120, 100, 40, "", #ES_RIGHT)
    StringGadget(#Str_DI, 250, 180, 100, 40, "", #ES_RIGHT)
    StringGadget(#Str_DIn, 250, 240, 100, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    StringGadget(#Str_La, 250, 300, 100, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    StringGadget(#Str_SU, 150, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    
    For i = #Str_DE To #Str_SU
      SetGadgetFont(i, FontID1)
    Next
    
    If StartDrawing(WindowOutput(#Fenetre_Anneau))
      BackColor(Point(0, 0))
      
      DrawingFont(FontID2)
      
      FrontColor(#Red)
      DrawText(100, 30, "Anneau")
      
      DrawingFont(FontID1)
      
      FrontColor(#Black)
      DrawText(5, 120, "Diamètre externe :")
      DrawText(5, 180, "Diamètre interne :")
      DrawText(5, 240, "Diamètre intermédiaire :")
      DrawText(5, 300, "Epaisseur :")
      DrawText(5, 360, "Surface :")
      
      StopDrawing()
    EndIf
    
    SetActiveGadget(#Str_DE)
    
  EndIf
  
EndProcedure

Procedure Ouvrir_Fenetre_TriangleRectangle()
  If OpenWindow(#Fenetre_TriangleR, 216, 0, 400, 420, "Calcul d'un triangle rectangle", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    
    StringGadget(#Str_Base_TR, 170, 120, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Base_TR, "Veuillez entrer la base")
    SetGadgetFont(#Str_Base_TR, FontID1)
    StringGadget(#Str_Hauteur_TR, 170, 180, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Hauteur_TR, "Veuillez entrer la hauteur")
    SetGadgetFont(#Str_Hauteur_TR, FontID1)
    StringGadget(#Str_Hypothenuse_TR, 170, 240, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Hypothenuse_TR, FontID1)
    StringGadget(#Str_Surface_TR, 170, 300, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Surface_TR, FontID1)
    StringGadget(#Str_Perimetre_TR, 170, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Perimetre_TR, FontID1)
    
    If StartDrawing(WindowOutput(#Fenetre_TriangleR))
      BackColor(Point(0, 0))
      
      DrawingFont(FontID3)
      
      FrontColor(#Red)
      DrawText(20, 30, "Triangle Rectangle")
      
      DrawingFont(FontID1)
      FrontColor(#Black)
      DrawText(20, 120, "Longueur :")
      DrawText(20, 180, "Largeur :")
      DrawText(20, 240, "Hypothénuse :")
      DrawText(20, 300, "Surface :")
      DrawText(20, 360, "Périmètre :")
      
      StopDrawing()
    EndIf
    
    SetActiveGadget(#Str_Base_TR)
    
  EndIf
  
EndProcedure

Procedure Ouvrir_Fenetre_Losange()
  If OpenWindow(#Fenetre_Losange, 216, 0, 400, 420, "Calcul d'un losange", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    
    StringGadget(#Str_Cote_Losange, 170, 120, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Cote_Losange, "Veuillez entrer la longueur du côté")
    SetGadgetFont(#Str_Cote_Losange, FontID1)
    StringGadget(#Str_Surface_Losange, 170, 240, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Surface_Losange, FontID1)
    StringGadget(#Str_Perimetre_Losange, 170, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Perimetre_Losange, FontID1)
    
    If StartDrawing(WindowOutput(#Fenetre_Losange))
      BackColor(Point(0, 0))
      
      DrawingFont(FontID2)
      
      FrontColor(#Red)
      DrawText(60, 30, "Losange")
      
      
      DrawingFont(FontID1)
      
      FrontColor(#Black)
      DrawText(20, 120, "Côté :")
      DrawText(20, 240, "Surface :")
      DrawText(20, 360, "Périmètre :")
      
      StopDrawing()
    EndIf
    
    SetActiveGadget(#Str_Cote_Losange)
    
  EndIf
  
EndProcedure

Procedure Ouvrir_fenetre_Parallelogramme()
  If OpenWindow(#Fenetre_Parallelogramme, 216, 0, 375, 420, "Calcul d'un parallélogramme", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    
    StringGadget(#Str_Longueur_Parallelogramme, 130, 120, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Longueur_Parallelogramme, "Veuillez entrer la longueur du parallélogramme")
    SetGadgetFont(#Str_Longueur_Parallelogramme, FontID1)
    StringGadget(#Str_Largeur_Parallelogramme, 130, 180, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Largeur_Parallelogramme, "Veuillez entrer la largeur du parallélogramme")
    SetGadgetFont(#Str_Largeur_Parallelogramme, FontID1)
    StringGadget(#Str_Hauteur_Parallelogramme, 130, 240, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Hauteur_Parallelogramme, "Veuillez entrer la hauteur du parallélogramme")
    SetGadgetFont(#Str_Hauteur_Parallelogramme, FontID1)
    StringGadget(#Str_Surface_Parallelogramme, 130, 300, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Surface_Parallelogramme, FontID1)
    StringGadget(#Str_Perimetre_Parallelogramme, 130, 360, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Perimetre_Parallelogramme, FontID1)
    
    If StartDrawing(WindowOutput(#Fenetre_Parallelogramme))
      BackColor(Point(0, 0))
      
      DrawingFont(FontID1)
      
      FrontColor(#Red)
      DrawText(100, 30, "Parallélogramme")
      
      FrontColor(#Black)
      DrawText(20, 120, "Longueur :")
      DrawText(20, 180, "Largeur :")
      DrawText(20, 240, "Hauteur :")
      DrawText(20, 300, "Surface :")
      DrawText(20, 360, "Périmètre :")
      
      StopDrawing()
    EndIf
    
    SetActiveGadget(#Str_Longueur_Parallelogramme)
    
  EndIf
  
EndProcedure

Procedure Ouvrir_Fenetre_Trapeze()
  If OpenWindow(#Fenetre_Trapeze, 216, 0, 375, 600, "Calcul d'un trapèze", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
    
    StringGadget(#Str_Cote_1_Trapeze, 130, 120, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Cote_1_Trapeze, "Veuillez entrer le côté 1")
    SetGadgetFont(#Str_Cote_1_Trapeze, FontID1)
    StringGadget(#Str_Cote_2_Trapeze, 130, 180, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Cote_2_Trapeze, "Veuillez entrer le côté 2")
    SetGadgetFont(#Str_Cote_2_Trapeze, FontID1)
    StringGadget(#Str_Cote_3_Trapeze, 130, 240, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Cote_3_Trapeze, "Veuillez entrer le côté 3")
    SetGadgetFont(#Str_Cote_3_Trapeze, FontID1)
    StringGadget(#Str_Cote_4_Trapeze, 130, 300, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Cote_4_Trapeze, "Veuillez entrer le côté 4")
    SetGadgetFont(#Str_Cote_4_Trapeze, FontID1)
    StringGadget(#Str_Hauteur_Trapeze, 130, 360, 200, 40, "", #ES_RIGHT)
    GadgetToolTip(#Str_Hauteur_Trapeze, "Veuillez entrer la hauteur")
    SetGadgetFont(#Str_Hauteur_Trapeze, FontID1)
    StringGadget(#Str_Longueur_Mediane_Trapeze, 130, 420, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Longueur_Mediane_Trapeze, FontID1)
    StringGadget(#Str_Surface_Trapeze, 130, 480, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Surface_Trapeze, FontID1)
    StringGadget(#Str_Perimetre_Trapeze, 130, 540, 200, 40, "", #PB_String_ReadOnly | #ES_RIGHT)
    SetGadgetFont(#Str_Perimetre_Trapeze, FontID1)
    
    If StartDrawing(WindowOutput(#Fenetre_Trapeze))
      BackColor(Point(0, 0))
      
      DrawingFont(FontID2)
      
      FrontColor(#Red)
      DrawText(80, 30, "Trapèze")
      
      
       DrawingFont(FontID1)
      
       FrontColor(#Black)
       DrawText(20, 120, "Côté 1 :")
       DrawText(20, 180, "Côté 2 :")
       DrawText(20, 240, "Côté 3 :")
       DrawText(20, 300, "Côté 4 :")
       DrawText(20, 360, "Hauteur :")
       DrawText(20, 420, "Médiane :")
       DrawText(20, 480, "Surface :")
       DrawText(20, 540, "Périmètre")
      
      StopDrawing()
    EndIf
    
    SetActiveGadget(#Str_Cote_1_Trapeze)
    
  EndIf
  
EndProcedure

Ouvrir_Fenetre_Geometrie()


Define.i Evenement, EvenementFenetre, EvenementGadget, TypeEvenement

Repeat
  
  Evenement = WaitWindowEvent()
  TypeEvenement = EventType()
  
  Select Evenement
      ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Case #PB_Event_Gadget
      EvenementGadget = EventGadget()
      Select EvenementGadget
        Case #Btn_Carre
          Ouvrir_Fenetre_Carre()
        Case #Btn_Cercle
          Ouvrir_Fenetre_Cercle()
        Case #Btn_Rectangle
          Ouvrir_Fenetre_Rectangle()
        Case #Btn_Anneau
          Ouvrir_Fenetre_Anneau()
        Case #Btn_TR
          Ouvrir_Fenetre_TriangleRectangle()
        Case #Btn_Losange
          Ouvrir_Fenetre_Losange()
        Case #Btn_Parallelogramme
          Ouvrir_fenetre_Parallelogramme()
        Case #Btn_Trapeze
          Ouvrir_Fenetre_Trapeze()
                    
          ;carré
        Case #Str_cote_carre
          If Val(GetGadgetText(#Str_cote_carre)) >= 0
            Carre = CreerCarre(ValD(GetGadgetText(#Str_cote_carre)))
            checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_cote_carre)) <> 0.0
              SetGadgetText(#Str_perimetre_carre, StrD(Carre\Perimetre()))
              SetGadgetText(#Str_Surface_carre, StrD(Carre\Surface()))
              SetGadgetText(#Str_Diagonale_carre, StrD(Carre\Diagonale()))
            EndIf
          EndIf
          
          ;cercle    
        Case #Str_Rayon_cercle
          If Val(GetGadgetText(#Str_Rayon_cercle)) >= 0
            Cercle = CreerCercle(ValD(GetGadgetText(#Str_Rayon_cercle)))
            checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Rayon_cercle)) <> 0.0
            SetGadgetText(#Str_Surface_Cercle,StrD(Cercle\Surface()))
              SetGadgetText(#Str_Diametre_Cercle, StrD(Cercle\Diametre()))
              SetGadgetText(#Str_perimetre_cercle, StrD(Cercle\Perimetre()))
            EndIf
          EndIf
          
          ;rectangle          
        Case #Str_Largeur_Rectangle, #Str_Longueur_Rectangle
          If Val(GetGadgetText(#Str_Largeur_Rectangle)) >= 0 And Val(GetGadgetText(#Str_Longueur_Rectangle)) >= 0
            Rectangle = CreerRectangle(ValD(GetGadgetText(#Str_Longueur_Rectangle)), 
                                      ValD(GetGadgetText(#Str_Largeur_Rectangle)))
            checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Largeur_Rectangle)) <> 0.0 And ValD(GetGadgetText(#Str_Longueur_Rectangle)) <> 0.0
              Surface.s = StrD(Rectangle\Surface())
              SetGadgetText(#Str_Surface_rectangle, Surface)
              SetGadgetText(#Str_Diagonale_rectangle, StrD(Rectangle\Diagonale()))
              SetGadgetText(#Str_perimetre_Rectangle, StrD(Rectangle\Perimetre()))
            EndIf
          EndIf
          
          ;anneau          
        Case #Str_DE,#Str_DI
          If Val(GetGadgetText(#Str_DE)) >= 0 And Val(GetGadgetText(#Str_DI)) >= 0
            Anneau = CreerAnneau(ValD(GetGadgetText(#Str_DI)), ValD(GetGadgetText(#Str_DE)))
            checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_DE)) <> 0.0 And ValD(GetGadgetText(#Str_DI)) <> 0.0
              SetGadgetText(#Str_DIn,StrD(Anneau\DiametreIntermediaire()))
              SetGadgetText(#Str_La,StrD(Anneau\Largeur()))
              SetGadgetText(#Str_SU, StrD(Anneau\Surface()))
            EndIf
          EndIf
          
          ;triangle rectangle
        Case #Str_Base_TR, #Str_Hauteur_TR
          If Val(GetGadgetText(#Str_Base_TR)) >= 0 And Val(GetGadgetText(#Str_Hauteur_TR)) >= 0
            TriangleRectangle = CreerTriangleRectangle(ValD(GetGadgetText(#Str_Base_TR)), 
                                                      ValD(GetGadgetText(#Str_Hauteur_TR)))
            checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Base_TR)) <> 0.0 And ValD(GetGadgetText(#Str_Hauteur_TR)) <> 0.0
              SetGadgetText(#Str_Hypothenuse_TR, StrD(TriangleRectangle\Hypothenuse()))
              SetGadgetText(#Str_Surface_TR, StrD(TriangleRectangle\Surface()))
              SetGadgetText(#Str_Perimetre_TR, StrD(TriangleRectangle\Perimetre()))
            EndIf
          EndIf
          
          ;losange
        Case #Str_Cote_Losange
          If Val(GetGadgetText(#Str_Cote_Losange)) >= 0
            Losange = CreerLosange(ValD(GetGadgetText(#Str_Cote_Losange)))
            checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Cote_Losange)) <> 0.0
              SetGadgetText(#Str_Perimetre_Losange, StrD(Losange\Perimetre()))
              SetGadgetText(#Str_Surface_Losange, StrD(Losange\Surface()))
            EndIf
          EndIf
          
          ;parallelogramme
        Case #Str_Longueur_Parallelogramme,#Str_Largeur_Parallelogramme,#Str_Hauteur_Parallelogramme
          If Val(GetGadgetText(#Str_Longueur_Parallelogramme)) >= 0 And
             Val(GetGadgetText(#Str_Largeur_Parallelogramme))  >= 0 And
             Val(GetGadgetText(#Str_Hauteur_Parallelogramme))  >= 0
            Parallelogramme = CreerParallelogramme(ValD(GetGadgetText(#Str_Longueur_Parallelogramme)), 
                                                  ValD(GetGadgetText(#Str_Largeur_Parallelogramme)),
                                                  ValD(GetGadgetText(#Str_Hauteur_Parallelogramme)))
            checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Longueur_Parallelogramme)) <> 0.0 And
               ValD(GetGadgetText(#Str_Largeur_Parallelogramme)) <> 0.0 And
               ValD(GetGadgetText(#Str_Hauteur_Parallelogramme))  <> 0.0
              SetGadgetText(#Str_Perimetre_Parallelogramme, StrD(Parallelogramme\Perimetre()))
              SetGadgetText(#Str_Surface_Parallelogramme, StrD(Parallelogramme\Surface()))
            EndIf
          EndIf  
          
          ;trapèze
        Case #Str_Cote_1_Trapeze, #Str_Cote_2_Trapeze, #Str_Cote_3_Trapeze, #Str_Cote_4_Trapeze, #Str_Hauteur_Trapeze
          If Val(GetGadgetText(#Str_Cote_1_Trapeze)) >= 0 And
             Val(GetGadgetText(#Str_Cote_2_Trapeze)) >= 0 And
             Val(GetGadgetText(#Str_Cote_3_Trapeze)) >= 0 And
             Val(GetGadgetText(#Str_Cote_4_Trapeze)) >= 0 And
             Val(GetGadgetText(#Str_Hauteur_Trapeze)) >= 0
            Trapeze = CreerTrapeze(ValD(GetGadgetText(#Str_Cote_1_Trapeze)), 
                                  ValD(GetGadgetText(#Str_Cote_2_Trapeze)),
                                  ValD(GetGadgetText(#Str_Cote_3_Trapeze)),
                                  ValD(GetGadgetText(#Str_Cote_4_Trapeze)),
                                  ValD(GetGadgetText(#Str_Hauteur_Trapeze)))
            checkFloatInput(EventGadget())
            If ValD(GetGadgetText(#Str_Cote_1_Trapeze)) <> 0.0 And
               ValD(GetGadgetText(#Str_Cote_2_Trapeze)) <> 0.0 And
               ValD(GetGadgetText(#Str_Cote_3_Trapeze)) <> 0.0 And
               ValD(GetGadgetText(#Str_Cote_4_Trapeze)) <> 0.0 And
               ValD(GetGadgetText(#Str_Hauteur_Trapeze)) <> 0.0
              SetGadgetText(#Str_Longueur_Mediane_Trapeze, StrD(Trapeze\Longueur_Mediane()))
              SetGadgetText(#Str_Perimetre_Trapeze, StrD(Trapeze\Perimetre()))
              SetGadgetText(#Str_Surface_Trapeze, StrD(Trapeze\Surface()))
            EndIf
          EndIf  
          
      EndSelect ; Fin EvenementGadget
      ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Case #PB_Event_CloseWindow
      EvenementFenetre = EventWindow()
      Select EvenementFenetre
        Case #Fenetre_Geometrie
          CloseWindow(#Fenetre_Geometrie)
          Break
        Case #Fenetre_Carre
          CloseWindow(#Fenetre_Carre)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Cercle
          CloseWindow(#Fenetre_Cercle)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Rectangle
          CloseWindow(#Fenetre_Rectangle)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Anneau
          CloseWindow(#Fenetre_Anneau)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_TriangleR
          CloseWindow(#Fenetre_TriangleR)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Losange
          CloseWindow(#Fenetre_Losange)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Parallelogramme
          CloseWindow(#Fenetre_Parallelogramme)
          Ouvrir_Fenetre_Geometrie()
        Case #Fenetre_Trapeze
          CloseWindow(#Fenetre_Trapeze)
          Ouvrir_Fenetre_Geometrie()
      EndSelect
      ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  EndSelect
ForEver
End
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Linda13
Messages : 3
Inscription : mar. 13/janv./2015 7:25

Re: Classe Geometrie

Message par Linda13 »

bonjour,merci pour ces informations ! :D


-----------------
coque galaxy alpha
coque samsung galaxy alpha
Dernière modification par Linda13 le dim. 18/janv./2015 8:56, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Classe Geometrie

Message par Ar-S »

Salut Micoute, je te donne un petit conseils amicale.
Tu peux faire un truc très intéressant mais s'il est très volumineux, tu te dois de faire un fichier d'aide reprenant les fonctions et leur explication sommaires (une page web, pdf, chm ou un simple fichier texte). OK ça demande encore plus de travail mais nul doute que ça attirera plus de monde.
De plus même pour toi ce sera plus facile d'y revenir à terme.
~~~~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
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Classe Geometrie

Message par Micoute »

Bonjour Ar-s et merci pour ton conseil, ce n'est pas la première fois, hélas !

Je vais malgré tout me mettre à la tâche !
Classe Geometrie

Carré :

CreerCarre(Cote.d) Permet d'allouer de la mémoire pour la classe.
DefinirCote_Carre() Définit la longueur de chaque côté.
ObtenirSurface_Carre() Calcule la surface avec le côté défini.
ObtenirCote_Carre() pour s'assurer qu'on a mis la bonne taille.
ObtenirDiagonale_Carre() Donne la diagonale du carré.
ObtenirPerimetre_Carre() Donne le périmètre du carré.
Detruire_Carre() pour libérer la mémoire allouée précédemment.

Cercle :

CreerCercle(Rayon.d = 1) Permet d'allouer de la mémoire pour la classe.
DefinirRayon_Cercle() Définit le rayon du cercle.
ObtenirSurface_Cercle() Calcule la surface avec le rayon donné.
ObtenirRayon_Cercle() Au cas où on en aurait besoin.
ObtenirDiametre_Cercle() Utile dans certains cas.
ObtenirPerimetre_Cercle() Calcule le périmètre du cercle.
Detruire_Cercle() pour libérer la mémoire allouée précédemment.

Rectangle :

CreerRectangle(Longueur.d = 1, Largeur.d = 1) Allouer la mémoire.
DefinirLongueur_Rectangle() Définit la longueur du rectangle.
DefinirLargeur_Rectangle() Définit la largeur du rectangle.
ObtenirSurface_Rectangle() Calcule la surface du rectangle.
ObtenirLongueur_Rectangle() Donne la longueur du triangle.
ObtenirLargeur_Rectangle() Donne la largeur du triangle.
ObtenirDiagonale_Rectangle() donne la diagonale du rectangle.
ObtenirPerimetre_Rectangle() Calcule le périmètre du rectangle.
Rectangle_EstCarre() pour savoir si les côtés sont égaux.
Detruire_Rectangle() Libère la mémoire allouée.

Anneau :

CreerAnneau(DiametreInterne.d = 1, DiametreExterne.d = 1) pour allouer de la mémoire pour la classe.
DefinirDiametreExterne_Anneau() Définit le diamètre externe.
DefinirDiametreInterne_Anneau() Définit le diamètre interne.
ObtenirDiametreIntermediaire_Anneau() Déduit le diamètre intermédiaire,
ObtenirSurface_Anneau() Donne la surface de l'anneau.
ObtenirLargeur_Anneau() Donne la largeur ou épaisseur de l'anneau.
Detruire_Anneau() pour libérer la mémoire allouée.

Triangle rectangle :
CreerTriangleRectangle(CoteB.d = 1.0, CoteC.d = 1.0) alloue de la mémoire pour la classe.
DefinirCoteA_TriangleRectangle() Définit l’hypoténuse.
DefinirCoteB_TriangleRectangle() Définit la base.
DefinirCoteC_TriangleRectangle() Définit la hauteur.
ObtenirSurface_TriangleRectangle() calcule la surface.
ObtenirCoteA_TriangleRectangle() Donne
ObtenirCoteB_TriangleRectangle() les côtés
ObtenirCoteC_TriangleRectangle() du triangle rectangle.
Detruire_TriangleRectangle() pour libérer la mémoire allouée.

Losange :

CreerLosange(Cote.d = 1) Pour allouer la mémoire pour la classe.
DefinirCote_Losange() Voir carré.
ObtenirCote_Losange()
ObtenirSurface_Losange()
ObtenirPerimetre_Losange()
Detruire_Losange() pour libérer la mémoire allouée.

Parallelogramme :

CreerParallelogramme(Longueur.d = 1, Largeur.d = 1, Hauteur.d = 1) Pour allouer la mémoire pour la classe.
DefinirLongueur_Parallelogramme() Définit la longueur.
DefinirLargeur_Parallelogramme() Définit la largeur.
ObtenirSurface_Parallelogramme() Donne la surface calculée.
ObtenirLongueur_Parallelogramme() Donne la longueur.
ObtenirLargeur_Parallelogramme() Donne la largeur.
ObtenirPerimetre_Parallelogramme() Donne le périmètre.
Parallelogramme_EstLosange() pour savoir si les côtés sont égaux.
Detruire_Parallelogramme() Libère la mémoire allouée.

Trapèze :

CreerTrapeze(Cote1.d = 1, Cote2.d = 1, Cote3.d = 1, Cote4.d = 1, Hauteur.d = 1) pour allouer de la mémoire pour la classe.
DefinirCote1_Trapeze() Définit
DefinirCote2_Trapeze() les
DefinirCote3_Trapeze() quatre côtés
DefinirCote4_Trapeze() du trapèze.
DefinirHauteur_Trapeze() définit la hauteur.
ObtenirCote1_Trapeze() Donne
ObtenirCote2_Trapeze() les
ObtenirCote3_Trapeze() 4 côtés
ObtenirCote4_Trapeze()du trapèze.
ObtenirSurface_Trapeze() Calcule la surface du trapèze.
ObtenirHauteur_Trapeze() donne la hauteur du trapèze.
ObtenirPerimetre_Trapeze() calcule le périmètre.
ObtenirLongueur_Mediane_Trapeze() donne la longueur médiane.
Detruire_Trapeze() pour libérer la mémoire allouée.


Triangle quelconque :

CreerTriangle(CoteA.d = 5, CoteB.d = 4, CoteC.d = 3) pour allouer la mémoire pour la classe.
DefinirCoteA_Triangle() définit
DefinirCoteB_Triangle() les côtés
DefinirCoteC_Triangle() du triangle.
ObtenirSurface_Triangle() Calcule la surface du triangle.
ObtenirCoteA_Triangle() Donne
ObtenirCoteB_Triangle() les côtés
ObtenirCoteC_Triangle() du triangle.
ObtenirHauteur_Triangle() Calcule la hauteur du triangle.
ObtenirPerimetre_Triangle() Calcule le périmètre.
ObtenirAngleA_Triangle() Donne la longueur
ObtenirAngleB_Triangle() des côtés
ObtenirAngleC_Triangle() du triangle.
Detruire_Triangle() pour libérer la mémoire allouée.
Dernière modification par Micoute le mer. 14/janv./2015 8:48, modifié 1 fois.
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Classe Geometrie

Message par Ar-S »

Et ben ça c'est déjà bien :)
~~~~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
G-Rom
Messages : 3626
Inscription : dim. 10/janv./2010 5:29

Re: Classe Geometrie

Message par G-Rom »

Salut micoute , je viens de survolé ton code , j'ai tout de suite remarqué quelque chose de redondant , les méthodes détruire() , surface() , etc...
Pourquoi ne pas faire :

Code : Tout sélectionner

interface Objet
 Detruire()
 etc...
endinterface


interface Cercle extends Objet
 ...
endinterface
Tout tes objets (cercle , rectangle , etc... ) hérite donc de objet. non ?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Classe Geometrie

Message par Kwai chang caine »

Tout d'abord merci beaucoup pour le partage de cette quantité de travail 8)
Ca marche chez moi, quand à te dire si les résultats sont bons...y'aurait fallu que je ne dorme pas en cours de math à l'école :oops:
Micoute a écrit :comme mon module géométrie a fait un effet bof (j'aurais préféré un effet bœuf),
Le probleme est toujours le même, c'est exactement ce que j'avais dit à GallyHC qui se plaignait du manque d'interet pour son travail. :cry:
Il y a tellement de sujets dans l'informatique qu'il est rare que lorsque l'on se passionne pour l'un d'eux, il y ai un autre membre du forum qui soit aussi motivé que soi.
Cela n'enleve en rien la qualité et surtout ne reflete pas le réel interet du produit.
Certains sujets sont peut être aussi moins "grand public", ou fréquement uilisés que d'autres..c'est encore une donnée à prendre en compte

Au final, c'est juste une question d'offre et de demande dans un espace temps
Ce qui ne m'interessait pas hier peut m'interesser demain, et je serais content de tomber sur quelqu'un comme toi qui aura généreusement partagé son bien :wink:
Tu rajoutes à cela le peu de membres que nous sommes sur le FR, tu diminues tes chances de motivation d'autrui

En tout cas encore merci 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Classe Geometrie

Message par Ar-S »

Kwai chang caine a écrit : Au final, c'est juste une question d'offre et de demande dans un espace temps
Ce qui ne m’intéressait pas hier peut m’intéresser demain, et je serais content de tomber sur quelqu'un comme toi qui aura généreusement partagé son bien
Je n'aurai pas mieux dit :)
~~~~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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Classe Geometrie

Message par Kwai chang caine »

:D :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Classe Geometrie

Message par Micoute »

G-Rom a écrit :Pourquoi ne pas faire :

Code : Tout sélectionner

interface Objet
 Detruire()
 etc...
endinterface


interface Cercle extends Objet
 ...
endinterface
Tout tes objets (cercle , rectangle , etc... ) héritent donc d'objet. non ?
Mais oui ! Et comment ! Je vais raccourcir mon programme sur le champ !
Merci beaucoup G-Rom, c'est toujours mieux un second regard et merci aussi à Kcc pour sa bonne parole de réconfort !
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 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre