Трети вариант

 avatar
unknown
plain_text
2 months ago
3.7 kB
2
Indexable
Module Program
    Sub Main(args As String())
        'Променливи
        Dim V(,) As Double
        Dim M, N As Double
        Dim I, J As Integer
        Dim Min, Max As Double
        Dim negativeAverage As Double
        Dim positiveNSum, negativeN, negativeNCount As Double

        ReadFromFile(V, M, N)

        MatrixValues(V, M, N, Min, Max, negativeN, negativeNCount)

        negativeAverage = Average(negativeNCount, negativeN)
        ' Изважда резултатите
        If M = N Then
            Console.WriteLine("Matricata e kvadratna")
            Console.WriteLine("Eto e s promeneni diagonali")
            SecondTask(V, M, N, positiveNSum)
            For I = 0 To M - 1
                For J = 0 To N - 1
                    Console.Write(V(I, J) & " ")
                Next
                Console.WriteLine()
            Next
        End If

        Console.WriteLine($"Minimalnata stoinost v matricata e: {Min}")
        Console.WriteLine($"Maximalnata stoinost  v matricata e: {Max}")
        Console.WriteLine($"Sredno aritmetichnato na oricatelnite elementi e: {negativeAverage}")
        Console.WriteLine($"Sumata ot polojitelni elementi e: {positiveNSum}")
    End Sub

    Sub ReadFromFile(ByRef V(,) As Double, ByRef M As Double, ByRef N As Double)
        'Входни данни
        Dim F1 As Short
        Dim Fname As String
        Dim I, J As Integer
        Console.WriteLine("Vuvedete direktoriata na faila:")
        Fname = Console.ReadLine()
        F1 = FreeFile()

        'Изчислителна част
        FileOpen(F1, Fname, OpenMode.Input)
        Input(F1, M) : Input(F1, N)

        ReDim V(M - 1, N - 1)

        For I = 0 To M - 1
            For J = 0 To N - 1
                Input(F1, V(I, J))
            Next J
        Next I
        FileClose(F1)
    End Sub

    Sub MatrixValues(ByVal V(,) As Double, ByVal M As Double, ByVal N As Double, ByRef Min As Double, ByRef Max As Double, ByRef negativeN As Double, ByRef negativeNCount As Double)
        Dim I As Integer
        Dim J As Integer
        Min = V(0, 0)
        Max = V(0, 0)
        For I = 0 To M - 1
            For J = 0 To N - 1
                If V(I, J) < Min Then Min = V(I, J)
                If V(I, J) > Max Then Max = V(I, J)
                If V(I, J) < 0 Then
                    negativeN += V(I, J)
                    negativeNCount += 1
                End If
            Next
        Next
    End Sub

    'Функция за средното аритметично на отрицателните елементи 
    Function Average(ByVal negativeNCount As Double, ByVal negativeN As Double) As Double
        If negativeNCount > 0 Then
            Return negativeN / negativeNCount
        Else
            Return 0
        End If
    End Function

    Sub SecondTask(ByVal V(,) As Double, ByVal M As Double, ByVal N As Double, ByRef positiveNSum As Double)
        Dim I As Integer
        Dim J As Integer
        positiveNSum = 0
        If M = N Then
            For I = 0 To M - 1
                For J = 0 To N - 1
                    If V(I, J) > 0 Then
                        positiveNSum += V(I, J)
                    End If
                Next
            Next
            For I = 0 To M - 1
                For J = 0 To N - 1
                    If I < J Then
                        V(I, J) += positiveNSum
                    ElseIf I > J Then
                        V(I, J) -= positiveNSum
                    End If
                Next
            Next
        End If
    End Sub
End Module
Leave a Comment