Archief - [PROG]vb.net VB.Net Grootste Gemene Deler (laatse foutje in code)

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Croinarius

Legacy Member
Hallo,

Ik moet voor een opdracht een consoleprogje schrijven waarbij de Grootste gemene deler van 2 getallen wordt berekend. Dit alles is geen probleem.
Het progje moet echter doorlopen zolang er na de berekening Y of y wordt ingegeven. Dit lukt me niet.

Dit is mijn code
Code:
Module GGD

    Sub Main()
        Do
            Console.WriteLine("Number 1 ?")
            Dim Number1 As Integer = Console.ReadLine()
            Console.WriteLine("Number 2 ?")
            Dim Number2 As Integer = Console.ReadLine
            Dim Ggd As Integer = Number1
            Dim result As Integer

            Do
                If Number1 Mod Ggd = 0 And Number2 Mod Ggd = 0 Then
                    result = Ggd
                Else
                    Ggd = Ggd - 1
                End If
            Loop Until result > 0

            Console.WriteLine("Result : " & result)
            Console.WriteLine("Again ? (Y or y): ")

        Loop While Console.ReadLine = ("y" Or "Y")
        Console.ReadLine()
    End Sub

End Module

En zo'n resultaat moet ik krijgen op de console
PHP:
Number 1 : 20
Number 2 : 18
Result : 2
Again ? ( Y or y ) : Y
Number 1 : 25
Number 2 : 15
Result : 5
Again ? ( Y or y ) : y
Number 1 : 10
Number 2 : 20
Result : 10
Again ? ( Y or y ) : Y
Number 1 : 30
Number 2 : 20
Result : 10
Again ? ( Y or y ) : n

Thanks in advance

Kn0t

Legacy Member
VB is heel lang geleden maar dit lijkt me toch iets raar:

Console.ReadLine = ("y" Or "Y")

Je zal hetgeen je van de console leest moeten opslaan in een variabele en deze dan testen met 'myVariable = "Y" Or myVariable = "y"' en niet met 'myVariable = ("Y" Or "y")'. Je moet het opslaan in een variable omdat ie anders 2 maal de console input zal uitlezen.

Moet je trouwens geen == gebruiken om tests te doen, of is dit niet nodig in VB? = dient normaal om assignments te doen, == om te testen op equality.

Om performantie redenen kan je ook je GGD initialiseren met het minimum van number1 en number2. Beeld je maar eens in hoeveel maal je lus onnodig zal doorlopen worden als je 10.000 geeft als number1 en 2 als number2.

Croinarius

Legacy Member
Ok probleem van het herhalen is opgelost, maar ik heb nu nog steeds een probleem....

Als ik een tweede keer getallen ingeef (dus twee andere getallen) blijft hij de zelfde uitkomst geven als de eerste keer. Kan er me iemand zeggen waar mijn fout in mijn code zit?

Code:
        Dim tekst As String
        Do
            Console.WriteLine("Number 1 ?")
            Dim number1 As Integer
            number1 = Console.ReadLine()
            Console.WriteLine("Number 2 ?")
            Dim number2 As Integer
            number2 = Console.ReadLine()
            Dim ggd As Integer = number1
            Dim result As Integer

            Do

                If number1 Mod ggd = 0 AndAlso number2 Mod ggd = 0 Then
                    result = ggd
                Else
                    ggd = ggd - 1
                End If
            Loop Until result > 0

            Console.WriteLine("Result : " & result)
            Console.WriteLine("Again ? (Y or y): ")
            tekst = Console.ReadLine
        Loop While tekst = "y"

Ice

Legacy Member
vervang
Code:
      Dim result As Integer

            Do
door
Code:
      Dim result As Integer
result = 0
            Do
Uw result werd nooit gereset, dus uw loop werd bij de 2de reeks gegevens maar 1x uitgevoerd want result was al groter dan 0.

Qrea

Legacy Member
edit: Laat maar... antwoord op oude code.

Code:
Module GGD

    Sub Main()
        Do
            Console.WriteLine("Number 1 ?")
            Dim Number1 As Integer = Console.ReadLine()
            Console.WriteLine("Number 2 ?")
            Dim Number2 As Integer = Console.ReadLine
            Dim Ggd As Integer = Number1
            Dim result As Integer

            Do
                If Number1 Mod Ggd = 0 And Number2 Mod Ggd = 0 Then
                    result = Ggd
                Else
                    Ggd = Ggd - 1
                End If
            Loop Until result > 0

            Console.WriteLine("Result : " & result)
            Console.WriteLine("Again ? (Y or y): ")

        Loop While Console.ReadLine = ("y" Or "Y")
        Console.ReadLine()
    End Sub

End Module
Vervang deze regel
Code:
Loop While Console.ReadLine = ("y" Or "Y")
eens door
Code:
Loop While Console.Readline.ToUpper = "Y"

En wat Ice zegt.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan