主题:菜鸟求编一个fortran小程序
3297269
[专家分:0] 发布于 2011-06-09 20:06:00
编写求n个数中最大最小值的子程序,再调用子程序求矩阵某些元素的最大最小值
“某些元素”到时可能有具体例子,比如对角线上的,第X行,第X列,正数,麻烦高手也顺便给我举个例子...矩阵是二维数组吗?那怎么转换成一维数组呢?感激不尽!!
明天要考上机了,可是我一个学期都没有学...T.T...
来这里提问菜鸟问题,就有被骂的觉悟了...但求各位帮帮忙,举手之劳...我是第一次在论坛发帖子求助,不知道最后会怎样...虽然大家都是隔着网络的陌生人,但是我想说,哪一位帮帮我,我也希望能在他困苦时尽力帮助他!留下邮箱 qq3297269@yahoo.com.cn 本人大一,女,19,向各位真心求助,绝不是哗众取宠!
回复列表 (共55个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-06-09 22:54:00
對于FORTRAN这根本就是现成的,MAXVAL和MINVAL两个函数就是做这个用的。
板凳
dongyuanxun [专家分:7180] 发布于 2011-06-09 23:18:00
这个明显是征友帖
3 楼
cgl_lgs [专家分:21040] 发布于 2011-06-09 23:52:00
哈哈~~~~~
董兄应征吧:)
4 楼
3297269 [专家分:0] 发布于 2011-06-10 00:03:00
首先感谢一楼的帮助,虽然我不懂那两个语句……T_T……不过这是我们的期末考试题,老师大概是想考我们怎么编程,不会让我们用现成命令吧……再回复二楼,我真的不是征友……我明白这个帖子在这么专业的论坛出现真是太水了,简直就像白痴一样……可是我是真的一学期没学编程,所以才这么烂……而这门课也并不是跟我专业相关的……我也是没有办法才来这儿求助的……不知该怎么办……不管怎样感谢你,希望你相信我的解释,并且感谢你肯回复……
5 楼
cgl_lgs [专家分:21040] 发布于 2011-06-10 01:04:00
哈哈,楼主不需要解释太多,董兄比较开朗,是风情万种的那种成熟男性:)
如果不能用内部函数,那简直就是对FORTRAN的一种折磨~~~~~
当然,也可以用循环来解决:)二维数组无非就是二重循环而已:)
不过你要是一点不懂的话还真不好解释了。所以嘛。。。您能说一下您现在都了解什么吗:)
6 楼
3297269 [专家分:0] 发布于 2011-06-10 02:21:00
额……风情万种……-_-///……真期待……
咳咳!言归正传。其实单独求最大最小值我是会的……可是怎么结合成子程序主程序就有点迷糊了……是不是这么个顺序,先编好求正常一维数组最大最小值的function(顺便请教子例行子程序和函数子程序的区别?这里应该用哪个呢?)再开始主程序,输入一个矩阵,筛选出矩阵中符合某条件的几项(比如所有最外圈…但是这个我不会编…-_-#),再把这几个二维数组转化为一维数组,再引用子程序编?大致是这样的吗?
我是刚背完近代史上床的手机党啊~真心求指导~明天下午就考了……真的不是征友……T.T……继续向各位大神求指点!
最后,感谢楼上的热心帮助~请早点休息,我是被迫熬夜的……::>_<::
7 楼
fortran2008 [专家分:750] 发布于 2011-06-10 09:11:00
楼主也太给力了吧,熬夜了。还弄得楼上那帮人半夜争着起来回贴,真不容易了。
好吧,就给你一个示例。
integer,parameter::n=4
integer a(n,n)
!将数组赋值a= 2 3 4 5
! 3 4 5 6
! 4 5 6 7
! 5 6 7 8
do i=1,n
do j=1,n
a(i,j)=i+j
end do
end do
write(*,*)"A="
write(*,"(4i5)")A
call maxmix(n,a,max,mix)
write(*,*)max,mix
end
subroutine maxmix(n,a,max,mix)
integer n,max,mix
integer a(n*n) !将a定义为一维数组。注意这里被调用后
!a(1)=a(1,1),a(2)=a(2,1),a(3)=a(3,1),a(4)=a(4,1)
!a(5)=a(1,2).........................a(8)=a(4,2)
!a(9)=a(1,3).........................a(8)=a(4,3)
!a(13)=a(1,4)........................a(8)=a(4,4)
!即是按列对应关系,先把第一列对应,接着是第二列,第三列。。。。。。
max=a(1)
mix=a(1)
do i=2,n*n
if(a(i)>max) max=a(i)
if(a(i)<mix) mix=a(i)
end do
end
8 楼
cgl_lgs [专家分:21040] 发布于 2011-06-10 10:53:00
《近代史上床》是神马课程啊:)
子程序没有返回值,函数则有返回值,它们的主要差别就是这个了。
你的思路其实也是可以的,先把二维的数据整成一维的然后再调用,或者是多次调用,并将结果存到新数组里最后再调用一次就像这样:
!整数组的:)
do i=1,n
b(i)=mymax(a(i,:),1,m)
end do
write(*,*)mymax(b(:),1,n)
!外圈的:)
b(1)=mymax(a(1,:),1,m) // 上
b(2)=mymax(a(n,:),1,m) // 下
b(3)=mymax(a(:,1),1,n) // 左
b(4)=mymax(a(:,m),1,n) // 右
write(*,*)mymax(b(:),1,4)
!其它情况自由发挥吧:)
end
real function mymax(a,low,up) ! a是一维数组,low是数组下界,up是上界
!以下代码自由发挥:)
9 楼
cgl_lgs [专家分:21040] 发布于 2011-06-10 10:55:00
以后多来论坛泡,保证你技艺猛进~~~~~
哈哈~~~~
10 楼
3297269 [专家分:0] 发布于 2011-06-10 13:06:00
谢楼上几位的指点~现在不是一窍不通了~我们2点开考,计划等会见到具体题就贴上来~做好自己的答案也贴上来求指正~(当然计划赶不上变化,到了考场做不出来也是可能的……o>_<o~……)
我来回复