Как я могу исправить этот код и добавить эту функцию десятичного разряда к моему выводу другой функции - PullRequest
0 голосов
/ 18 февраля 2019

Итак, я создаю математическую программу, в ней есть пара функций, одна из функций - это десятичный разделитель, что это такое:

пользователя спрашивают, сколько десятичных знаков ему бы хотелосьего ответы будут показаны для различных математических решателей, поэтому, например, если он скажет 3, тогда мой ответ для другой функции, например, 1 + 1, будет равен 2.000

Их просят в диапазоне от 1 до 5, у меня естькод для этого, но не знаю, как реализовать его для ответа функций

'десятичное место

Sub Accuracy()

Line1: 
Dim DP Console.WriteLine("Please Enter the Decimial Limit between 1-5: ") DP = Double.Parse(Console.ReadLine()) If (DP > 5) Then Console.WriteLine("Error, Decimial Limit is between 1 and 5, Please Try Again!") GoTo Line1

Else
    DP = DP
    Console.Write("Decimial Limit has been Set Succuesfully to " & DP & " Decimal Places")
End If
End Sub

' квадратное уравнение

Sub QuadraticFunction() Dim a, b, c As Integer Dim d, x1, x2 As Double

line1:

Console.WriteLine("Please Input a Non-Zero Number, A: ")
a = Console.ReadLine()
If (a = 0) Then
    Console.WriteLine("Error, Number must not be 0, Try Again!")
    GoTo line1
End If
Console.WriteLine("Please Input The Value of, B: ")
b = Console.ReadLine()

Console.Write("Please Input the Value of, C: ")
c = Console.ReadLine()

d = b * b - (4 * a * c)
If (d = 0) Then

    Console.WriteLine("Both Roots Are Equal.")
    x1 = -b / (2.0 * a)
    x2 = x1
    x1 = Math.Round(x1, DP)
    x2 = Math.Round(x1, DP)
    Console.WriteLine("First Root, (Root1) = {0}", x1)
    Console.WriteLine("Second Root, (Root2) = {0}", x2)

ElseIf (d > 0) Then

    Console.WriteLine("Both Roots are Real and Different")

    x1 = (-b + Math.Sqrt(d)) / (2 * a)
    x2 = (-b - Math.Sqrt(d)) / (2 * a)


    x1 = (Math.Round(x1, DP))
    x2 = (Math.Round(x2, DP))

    Console.WriteLine("First Root, (Root1) = {0}", x1)
    Console.WriteLine("Second Root, (Root2) = {0}", x2)

Else

    Console.Write("Root are Imaginary " & "No Solution")
End If

End Sub

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

В настоящее время принято избегать операторов GoTo, поскольку они могут усложнить отслеживание и поддержание кода.

Вместо этого можно использовать различные структуры циклов, например:

Option Infer On
Option Strict On

Module Module1

    Dim decimalPlaces As Integer = 2 ' default value

    Sub Accuracy()
        Dim validEntry = False

        Do
            Console.Write("Please enter the decimal limit between 1-5: ")
            Dim a = Console.ReadLine()

            If Integer.TryParse(a, decimalPlaces) Then
                validEntry = decimalPlaces >= 1 AndAlso decimalPlaces <= 5
            End If

            If Not validEntry Then
                Console.WriteLine("Error: value must be an integer from 1 to 5.")
            End If

        Loop Until validEntry

        Dim plural = ""
        If decimalPlaces <> 1 Then plural = "s"
        Console.Write("Decimal limit has been set succesfully to " & decimalPlaces & " decimal place" & plural)

    End Sub

    Sub QuadraticFunction()
        ' other code...
        Console.WriteLine(String.Format("First Root, (Root1) = {0:F" & decimalPlaces & "}", x1))
        ' other code...

    End Sub

    Sub Main()
        ' code ....

    End Sub

End Module

Вы можетеиспользуйте стандартную строку числового формата: Спецификатор формата с фиксированной точкой ("F") , который будет, скажем, "F2" для двух десятичных знаков, для форматирования вывода, например:

Console.WriteLine("0.123456 to " & decimalPlaces & "D.P. is " & String.Format("{0:F" & decimalPlaces & "}", 0.123456))

Использование отдельной переменной для считывания введенных пользователем данных означает, что было бы легко, скажем, добавить для них опцию для ввода "q" для выхода.

Я ввел код, чтобы сделать«помещать» множественное число при необходимости: оно делает вывод более аккуратным.


[Кстати, бесплатная Visual Studio 2017 Community Edition доступна для Windows 7 и более поздних версий.В нем есть такие вещи, как «интерполяция строк», которые могут облегчить форматирование вывода.]

0 голосов
/ 18 февраля 2019

Вы можете использовать символ ":", чтобы указать формат.Вы заметите, что у меня есть формат «0».& strDup ().Будет выведен формат 0,000, если DP равен 3, так как функция StrDup дублирует «DP» символ времени DP и добавляет его к «0».

Module Module1

    Dim DP As Integer  '<---- Notice that it is not declared in a sub().

    Sub Main()

        Dim DecimalPlace As Integer

        Dim blnGoodAnswer As Boolean

        Dim x1 As Double = 3
        Dim x2 As Double = 16

        blnGoodAnswer = False
        Do Until blnGoodAnswer
            Console.WriteLine("Please Enter the Decimial Limit between 1-5:    ")
            Integer.TryParse(Console.ReadLine(), DecimalPlace)
            If (DecimalPlace < 1) Or (DecimalPlace > 5) Then
                Console.WriteLine("Error, Decimial Limit is between 1 and 5, Please Try Again!")

            Else
                DP = DecimalPlace

                blnGoodAnswer = True

                Console.WriteLine("Decimial Limit has been Set Succuesfully to " &
                                  DP & " Decimal Places")

                Console.WriteLine("First Root, (Root1) = " & String.Format("{0:0." &
                                  StrDup(DP, "0") & "}", x1))
                Console.WriteLine("Second Root, (Root2) = " & String.Format("{0:0." &
                                  StrDup(DP, "0") & "}", x2))

            End If
        Loop
    End Sub

End Module

Надеюсь, это поможет.

...