fortran - 如何在fortran上正确记录矩阵的最小值和最大值之间的平均值计数
问题描述
我试图编写一个程序来计算平均值而不考虑列的最小值和平均值,最好的方法是什么?首先,我想简单地将列的平均值输出到文件中,没有错误,但没有输出。
Program Matrix
Implicit None
Real,Allocatable,dimension(:,:)::A
Real,Allocatable,dimension(:):: b
Integer varStr,varStlb
Integer i, j
real summa
Open(1,file='in.txt')
Open(8,file='out.txt')
Do
read(*,*)varStr,varStlb
Allocate(A(1:varStr,1:varStlb),B(1:varStlb))
Read(1,*) ( A(i,:), i = 1,varStr )
do j = 1, varStlb
summa = 0
do i = 1, varStr
summa = summa + a(j,i)
end do
b(j) = summa/varStr
write(8,'(A,F8.2,A)')'b = ',b(j), ' - сумма всех элементов'
end do
Deallocate(A)
Enddo
End Program Matrix
在文件中是
10.05 -22.0 3.0
4.0 0.0 60.0
8.0 13.0 22.5
解决方案
正如我所写,您的问题中有太多要点。因此,很难做出一个很好地涵盖您的问题的答案,并且在没有真正理解问题的情况下不会只为您的家庭作业提供解决方案。
你的代码中有很多问题或奇怪的地方
我看不出外
Do
循环的原因。在此循环中,您将尝试多次读取文件。没有保护读取超过文件末尾的内容。从文件中读取时,您始终使用
allocate
数组。但是您永远不会deallocate
在外Do
循环的下一次迭代中尝试再次分配它们,但这是不允许的,它们已经分配了。
也许您只想读取整个文件一次?我总是建议分步学习。首先根据需要阅读文件,打印它,确认它是您需要的形式。仅计算正常平均值。然后才计算排除最大值和最小值的平均值。
忽略最大值和最小值很简单,只需从总和中减去它们,然后将元素的数量减少 2。但是,由于您的代码的其余部分非常混乱,因此不可能仅将其添加到那里。我将仅展示该过程的草图:
数组的正常平均值a(1:n)
:
avg = sum(a) / n
除最大值和最小值外的所有元素的平均值:
avg2 = (sum(a) - minval(a) - maxval(a)) / (n - 2)
推荐阅读
- microsoft-graph-api - Microsoft Graph API - 课堂笔记本
- jenkins - 使用 Job-DSL 创建 Jenkins 凭证
- apache-spark - 如何查找火花列是否包含某个值?
- php - 我如何将 php 连接到 arduino esp32
- r - 有没有办法修复 R Plotly 中水平条形图的条形高度?
- c++ - 在深 std::unordered_map 中插入唯一指针
- json - 尝试在 Groovy 中创建 JSON 结构时出现令人困惑的错误
- javascript - 如果取决于选择的下拉选项,如何隐藏 div
- google-cloud-platform - 无法使用公司 Google 帐户将 GCP 与 Dialogflow 连接起来
- file-put-contents - file_put_contents 需要限制行数