计算每行和每列的总和

Find the sum of each rows and each columns

需要使用 SUM()dim

sum()算法中的问题计算不正确,我无法解决,我需要帮助

    program main
  use environment

  implicit none
  
   character(*), parameter    :: input_file = "../data/input.txt", output_file = "output.txt"
   integer                    :: In = 0, Out = 0, rows = 0, columns = 0!, i = 0
   integer, allocatable       :: A(:,:)
   integer                    :: res_rows = 0, res_columns = 0 
         
   open (file=input_file, newunit=In)
    read(In, *) rows, columns
    allocate(A(rows, columns))
    read (In, *) A
   close (In)

   res_rows = sum(A(1:columns+1,1), dim=1)

   res_columns = sum(A(1:rows+1,1), dim=1)

   !outout data
   open (file=output_file, encoding=E_, newunit=Out, position='append')
      write(*,*)"rows:",res_rows
      write(*,*)"columns:",res_columns
   close (Out)

end program main

从txt文件输入数据

4 3
  1  1  2 
  4  3  4 
  1  1  2 
  4  3  2 

输出数据到txt文件

rows: 4 11 4 9
columns: 10 8 10

Fortran 是一种 column-major 语言。您的 read(in,*) a 以错误的顺序填充矩阵。尝试写出矩阵的第一行 a。您对 sum 内在函数的使用也是错误的。见下文。

program main

   implicit none
  
   character(*), parameter :: input_file = "a.dat"
   integer i, in, out, rows, columns
   integer, allocatable :: a(:,:)
   integer :: res_rows = 0, res_columns = 0 
         
   open(file=input_file, newunit=in, status='old')
   read(in, *) rows, columns
   allocate(a(rows, columns))
   do i = 1, rows
      read(in,*) a(i,:)
   end do
   close(in)

   print '(A,4(1X,I0))', 'Sum of each row:', sum(a,dim=2)
   do i = 1, rows
      print '(3I3,A,I0)', a(i,:),' = ', sum(a(i,:))
   end do
   print *

   print '(A,4(1X,I0))', 'Sum of each column:',  sum(a,dim=1)
   do i = 1, columns
      print '(4I3,A,I0)', a(:,i),' = ',sum(a(:,i))
   end do

end program main