login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Class upon triangle calculation

Offline Jimbo - 05/12/2009 23:02
Avatar van JimboLid Allen,

Ik heb een vraag betreffende een class definieëren op een driehoek.

De oefening gaat als volgt:

Maak een klasse waarvan objecten een voorstelling zijn van een rechthoekige driehoek.
Een rechthoekige driehoek heeft twee rechthoekzijden waarvan je de lengte kan instellen en opvragen.
Het moet ook mogelijk zijn van deze driehoeken de lengte van de schuine zijde, de omtrek en de oppervlakte op te vragen.

Voor het bepalen van de lengte van de schuine zijde heb je een vierkantswortel berekening nodig, dit kan je doen aan de hand van de Math.Sqrt functie, een voorbeeld :

  1. Module MathSqrtExample
  2. Sub Main()
  3. Console.WriteLine(Math.Sqrt(25.0R) = 5.0R) ' True
  4. End Sub
  5. End Module


Meegegeven is onderstaande testcode, waarvan je niets mag aanpassen :
  1. Module RechthoekigeDriehoekTestFixture
  2. Sub Main()
  3. Dim target As New RechthoekigeDriehoek
  4. Assert.AreEqual(0.0R, target.GetLengteRechthoekzijde1())
  5. Assert.AreEqual(0.0R, target.GetLengteRechthoekZijde2())
  6. Assert.AreEqual(0.0R, target.GetLengteSchuineZijde())
  7. Assert.AreEqual(0.0R, target.GetOmtrek())
  8. Assert.AreEqual(0.0R, target.GetOppervlakte())
  9. '
  10. target.SetLengteRechthoekzijde1(3.0R)
  11. target.SetLengteRechthoekzijde2(4.0R)
  12. Assert.AreEqual(3.0R, target.GetLengteRechthoekzijde1())
  13. Assert.AreEqual(4.0R, target.GetLengteRechthoekZijde2())
  14. Assert.AreEqual(5.0R, target.GetLengteSchuineZijde())
  15. Assert.AreEqual(12.0R, target.GetOmtrek())
  16. Assert.AreEqual(6.0R, target.GetOppervlakte())
  17. '
  18. Console.ReadLine()
  19. End Sub
  20. End Module
  21.  
  22. Module Assert
  23. Sub AreEqual(ByVal expected As Double, ByVal actual As Double)
  24. If expected = actual Then
  25. Console.WriteLine("Assertion correct.")
  26. Else
  27. Console.WriteLine("Assertion failed, expected " & expected & ", actual " & actual & ".")
  28. End If
  29. End Sub
  30. End Module



Het volgende dat ik dus heb is:


  1. Class RechthoekigeDriehoek
  2. Function GetLengthRechthoekZijde1() As Integer
  3.  
  4. End Function
  5. Function GetLengteSchuineZijde() As Decimal
  6. Math.Sqrt(25)
  7. End Function
  8. Function GetOmtrek() As Decimal
  9. GetOmtrek() = GetLengteRechthoekzijde1() + GetLengteRechthoekzijde2() + GetLengteSchuineZijde()
  10. End Function
  11. Function GetOppervlakte() As Decimal
  12.  
  13. End Function
  14.  
  15.  
  16.  
  17. End Class
  18.  
  19. Module MathSqrtExample
  20.  
  21. Sub Main()
  22. Console.WriteLine(Math.Sqrt(25.0R) = 5.0R) ' True
  23. End Sub
  24. End Module
  25.  
  26. Module RechthoekigeDriehoekTestFixture
  27.  
  28. Sub Main()
  29. Dim target As New RechthoekigeDriehoek
  30. Assert.AreEqual(0.0R, target.GetLengteRechthoekzijde1())
  31. Assert.AreEqual(0.0R, target.GetLengteRechthoekZijde2())
  32. Assert.AreEqual(0.0R, target.GetLengteSchuineZijde())
  33. Assert.AreEqual(0.0R, target.GetOmtrek())
  34. Assert.AreEqual(0.0R, target.GetOppervlakte())
  35. '
  36. target.SetLengteRechthoekzijde1(3.0R)
  37. target.SetLengteRechthoekzijde2(4.0R)
  38. Assert.AreEqual(3.0R, target.GetLengteRechthoekzijde1())
  39. Assert.AreEqual(4.0R, target.GetLengteRechthoekZijde2())
  40. Assert.AreEqual(5.0R, target.GetLengteSchuineZijde())
  41. Assert.AreEqual(12.0R, target.GetOmtrek())
  42. Assert.AreEqual(6.0R, target.GetOppervlakte())
  43. '
  44. Console.ReadLine()
  45. End Sub
  46. End Module
  47.  
  48. Module Assert
  49.  
  50. Sub AreEqual(ByVal expected As Double, ByVal actual As Double)
  51. If expected = actual Then
  52. Console.WriteLine("Assertion correct.")
  53. Else
  54. Console.WriteLine("Assertion failed, expected " & expected & ", actual " & actual & ".")
  55. End If
  56. End Sub
  57. End Module


Kan iemand bij de aanvulling helpen? Dit blijft steeds compile fouten oplopen.

4 antwoorden

Gesponsorde links
Offline Mario - 07/12/2009 10:41
Avatar van Mario Crew algemeen je Class RechthoekigeDriehoek zou er ongeveer zo moeten uitzien :




  1. Public Class RechthoekigeDriehoek
  2.  
  3. Private mOmtrek As Decimal
  4. Private mLengteRechthoekzijde1 As Decimal
  5. Private mLengteRechthoekzijde2 As Decimal
  6. Private mLengteSchuineZijde As Decimal
  7.  
  8.  
  9. Private Property GetLengthRechthoekZijde1() As Decimal
  10. Set(ByVal value As Decimal)
  11. mLengteRechthoekzijde1 = value
  12. End Set
  13. Get
  14. Return mLengteRechthoekzijde1
  15. End Get
  16. End Property
  17.  
  18. Private Property GetLengthRechthoekZijde2() As Decimal
  19. Set(ByVal value As Decimal)
  20. mLengteRechthoekzijde2 = value
  21. End Set
  22. Get
  23. Return mLengteRechthoekzijde2
  24. End Get
  25. End Property
  26.  
  27. Private Property GetLengteSchuineZijde() As Decimal
  28. Set(ByVal value As Decimal)
  29. mLengteSchuineZijde = CDec(Math.Sqrt(value))
  30. End Set
  31. Get
  32. Return mLengteSchuineZijde
  33. End Get
  34. End Property
  35.  
  36. Private ReadOnly Property GetOmtrek() As Decimal
  37. Get
  38. Return mLengteRechthoekzijde1 + mLengteRechthoekzijde2 + GetLengteSchuineZijde()
  39. End Get
  40. End Property
  41.  
  42. End Class
Offline Jimbo - 08/12/2009 18:51 (laatste wijziging 08/12/2009 19:20)
Avatar van Jimbo Lid Bedankt voor class verduidelijking.

Als ik je bovenstaande class definitie gebruik boven mijn module, krijg ik een hele hoop meldingen en dat er dingen niet gedeclareerd zijn.

Onderstaande mag je dus niet veranderen. En hierboven heb ik de class definitie gezet.

  1. Module RechthoekigeDriehoekTestFixture
  2.  
  3. Sub Main()
  4. Dim target As New RechthoekigeDriehoek
  5. Assert.AreEqual(0.0R, target.GetLengteRechthoekzijde1())
  6. Assert.AreEqual(0.0R, target.GetLengteRechthoekZijde2())
  7. Assert.AreEqual(0.0R, target.GetLengteSchuineZijde())
  8. Assert.AreEqual(0.0R, target.GetOmtrek())
  9. Assert.AreEqual(0.0R, target.GetOppervlakte())
  10. '
  11. target.SetLengteRechthoekzijde1(3.0R)
  12. target.SetLengteRechthoekzijde2(4.0R)
  13. Assert.AreEqual(3.0R, target.GetLengteRechthoekzijde1())
  14. Assert.AreEqual(4.0R, target.GetLengteRechthoekZijde2())
  15. Assert.AreEqual(5.0R, target.GetLengteSchuineZijde())
  16. Assert.AreEqual(12.0R, target.GetOmtrek())
  17. Assert.AreEqual(6.0R, target.GetOppervlakte())
  18. '
  19. Console.ReadLine()
  20. End Sub
  21. End Module
  22. Module Assert
  23. Sub AreEqual(ByVal expected As Double, ByVal actual As Double)
  24. If expected = actual Then
  25. Console.WriteLine("Assertion correct.")
  26. Else
  27. Console.WriteLine("Assertion failed, expected " & expected & ", actual " & actual & ".")
  28. End If
  29. End Sub
  30. End Module


Dit blijkt zo nog niet te werken. Enige tips hiervoor?

VB:
Voor dit krijg ik de melding "is not member of ...."
  1. target.GetLengteRechthoekzijde1


Assert geeft bv exact dezelfde melding
alsook onderstaande
  1. target.SetLengteRechthoekzijde2
Offline Mario - 09/12/2009 11:55 (laatste wijziging 09/12/2009 11:56)
Avatar van Mario Crew algemeen GetLength RechthoekZijde1 noemt hij in je classe en niet GetLengte Rechthoekzijde1

Foutje van mij  , gewoon even de namen in je classe hernoemen.
Offline Jimbo - 09/12/2009 14:21
Avatar van Jimbo Lid Thanks, het is je vergeven Mario. :-)

Momenteel heb ik mijn codering in Visual Studio wat moeten omgooien van Privates naar Publics want die bleef errors geven.

Onderstaande code heb ik nu:

  1. Public Class RechthoekigeDriehoek
  2. Public mOmtrek As Decimal
  3. Public mLengteRechthoekzijde1 As Decimal
  4. Public mLengteRechthoekzijde2 As Decimal
  5. Public mLengteSchuineZijde As Decimal
  6. Public mOppervlakte As Decimal
  7.  
  8. Public Property GetLengteRechthoekZijde1() As Decimal
  9. Set(ByVal value As Decimal)
  10. mLengteRechthoekzijde1 = value
  11. End Set
  12. Get
  13. Return mLengteRechthoekzijde1
  14. End Get
  15. End Property
  16.  
  17. Public Property GetLengteRechthoekZijde2() As Decimal
  18. Set(ByVal value As Decimal)
  19. mLengteRechthoekzijde2 = value
  20. End Set
  21. Get
  22. Return mLengteRechthoekzijde2
  23.  
  24. End Get
  25. End Property
  26.  
  27. Public Property GetLengteSchuineZijde() As Decimal
  28. Set(ByVal value As Decimal)
  29. mLengteSchuineZijde = CDec(Math.Sqrt(value))
  30. End Set
  31. Get
  32. Return mLengteSchuineZijde
  33. End Get
  34. End Property
  35.  
  36. Public ReadOnly Property GetOmtrek() As Decimal
  37. Get
  38. Return mLengteRechthoekzijde1 + mLengteRechthoekzijde2 + GetLengteSchuineZijde()
  39. End Get
  40. End Property
  41.  
  42. Public ReadOnly Property GetOppervlakte() As Decimal
  43. Get
  44. Return mLengteRechthoekzijde1 + mLengteRechthoekzijde2 + GetLengteSchuineZijde()
  45. End Get
  46. End Property
  47. End Class
  48.  
  49. Module RechthoekigeDriehoekTestFixture
  50.  
  51. Sub Main()
  52. Dim target As New RechthoekigeDriehoek
  53. Assert.AreEqual(0.0R, target.GetLengteRechthoekZijde1())
  54. Assert.AreEqual(0.0R, target.GetLengteRechthoekZijde2())
  55. Assert.AreEqual(0.0R, target.GetLengteSchuineZijde())
  56. Assert.AreEqual(0.0R, target.GetOmtrek())
  57. Assert.AreEqual(0.0R, target.GetOppervlakte())
  58. '
  59. target.SetLengteRechthoekzijde1(3.0R)
  60. target.SetLengteRechthoekzijde2(4.0R)
  61. Assert.AreEqual(3.0R, target.GetLengteRechthoekZijde1())
  62. Assert.AreEqual(4.0R, target.GetLengteRechthoekZijde2())
  63. Assert.AreEqual(5.0R, target.GetLengteSchuineZijde())
  64. Assert.AreEqual(12.0R, target.GetOmtrek())
  65. Assert.AreEqual(6.0R, target.GetOppervlakte())
  66. '
  67. Console.ReadLine()
  68. End Sub
  69. End Module
  70.  
  71. Module Assert
  72. Sub AreEqual(ByVal expected As Double, ByVal actual As Double)
  73. If expected = actual Then
  74. Console.WriteLine("Assertion correct.")
  75. Else
  76. Console.WriteLine("Assertion failed, expected " & expected & ", actual " & actual & ".")
  77. End If
  78. End Sub
  79. End Module


Hier heb ik alleen nog problemen met mijn:
  1. target.SetLengteRechthoekzijde2

en
  1. target.SetLengteRechthoekzijde1


Kun jij met dit nog even verder helpen?

GetOppervlakte heb ik verder zelf kunnen oplossen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.201s