Добавил:
Chupapi_Munyanya
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
program lab_5_2_variant_4
integer, parameter :: NMAX = 100
integer :: rows, cols, zero_quantity
real :: matrix(NMAX,NMAX)
real :: matrix_sum
logical :: flag
zero_quantity = 0
flag = .true.
write (*,*) "Введите кол-во строк и столбцов матрицы: "
read (*,*) rows, cols
write (*,*) "Введите матрицу: "
read (*,*) ((matrix(i,j),i=1,rows),j=1,cols)
call check_matrix(rows, cols, matrix, zero_quantity, flag)
if(flag .eqv. .true.) then
matrix_sum = sum_elements_upper_main_diagonal(rows, cols, matrix)
write (*,*) "Сумма элементов выше и находящихся на главной дивгонале равна: "
write (*,*) matrix_sum
else
write (*,*) "Ошибка"
end if
end program lab_5_2_variant_4
SUBROUTINE check_matrix(rows, cols, matrix, zero_quantity, flag)
integer, parameter :: NMAX = 100
integer :: rows, cols, i, zero_quantity
real :: matrix(NMAX,NMAX)
logical:: flag
flag = .true.
i=1
do while(i<=rows .AND. flag)
zero_quantity = 0
do j=1,cols
if(matrix(i,j)==0) then
zero_quantity = zero_quantity + 1
end if
end do
if(zero_quantity<2) then
flag = .true.
else
flag = .false.
end if
i=i+1
end do
end SUBROUTINE check_matrix
real function sum_elements_upper_main_diagonal(rows, cols, matrix) result(amount)
integer, parameter :: NMAX = 100
integer :: rows, cols
real :: matrix(NMAX,NMAX)
amount = 0
do i=1, rows
amount = amount + matrix(i,i)
end do
do i=1, rows
do j=i+1, cols
amount = amount + matrix(j,i)
end do
end do
end function
integer, parameter :: NMAX = 100
integer :: rows, cols, zero_quantity
real :: matrix(NMAX,NMAX)
real :: matrix_sum
logical :: flag
zero_quantity = 0
flag = .true.
write (*,*) "Введите кол-во строк и столбцов матрицы: "
read (*,*) rows, cols
write (*,*) "Введите матрицу: "
read (*,*) ((matrix(i,j),i=1,rows),j=1,cols)
call check_matrix(rows, cols, matrix, zero_quantity, flag)
if(flag .eqv. .true.) then
matrix_sum = sum_elements_upper_main_diagonal(rows, cols, matrix)
write (*,*) "Сумма элементов выше и находящихся на главной дивгонале равна: "
write (*,*) matrix_sum
else
write (*,*) "Ошибка"
end if
end program lab_5_2_variant_4
SUBROUTINE check_matrix(rows, cols, matrix, zero_quantity, flag)
integer, parameter :: NMAX = 100
integer :: rows, cols, i, zero_quantity
real :: matrix(NMAX,NMAX)
logical:: flag
flag = .true.
i=1
do while(i<=rows .AND. flag)
zero_quantity = 0
do j=1,cols
if(matrix(i,j)==0) then
zero_quantity = zero_quantity + 1
end if
end do
if(zero_quantity<2) then
flag = .true.
else
flag = .false.
end if
i=i+1
end do
end SUBROUTINE check_matrix
real function sum_elements_upper_main_diagonal(rows, cols, matrix) result(amount)
integer, parameter :: NMAX = 100
integer :: rows, cols
real :: matrix(NMAX,NMAX)
amount = 0
do i=1, rows
amount = amount + matrix(i,i)
end do
do i=1, rows
do j=i+1, cols
amount = amount + matrix(j,i)
end do
end do
end function
Соседние файлы в папке Коды 5.2