用fortran可以這麼寫 program main implicit none real(8) :: a(-4:4) integer :: i do i=-4,4 a(i)=dble(abs(i)+1)**sign(1,i) end do write(*,*) "The sequence is ", a end
用fortran可以這麼寫 program main implicit none real(8) :: a(-4:4) integer :: i do i=-4,4 a(i)=dble(abs(i)+1)**sign(1,i) end do write(*,*) "The sequence is ", a end OrangeKitten 发表于 2023-05-11 00:39
您的Fortran比我的Java/Python3牛! 您只要把-4,4改成-5,5就能打印1/6, 1/5, ..., 5, 6 sign(1, i)好强大!数学计算Fortran is the king! 我只会Fortran77,请问现在是否应该学习Fortran90或以上?
前5个数容易 后5个数容易 但是怎么能简洁造出整个序列呢?
您这个题目是典型的UIUC CS Algorithms的牛角尖题目。
不过本虾曾经是湖北省高中数学竞赛一等奖,能够对付。
设想n=1, 2, ..., 9
An=(|5-n|+1)^(2*floor((n-5)/5)+1)
Java code:
// Sequence.java public class Sequence { public static void main(String[] args) { for(int i = 1; i<=9; i++) System.out.println(Math.pow(Math.abs(i-5)+1,2*Math.floor((i-5)/5.0)+1)); } }
Python3 code:
#sequence.py import math
for i in range(1,10): print(pow(abs(i-5)+1,2*math.floor((i-5)/5)+1))
您太牛了!
Java和Python只是我掌握的10几种编程语言中的2种。
我从1984年就开始学计算机编程了。
您发现的规则当然很好,但是也必须写成piece-wise function。
我最开始是用8th-degree polynomial finite difference method解这道题:12/60, 15/60, 20/60, 30/60, 60/60, 120/60, 180/60, 240/60, 300/60
发现对于{12, 15, 20, 30, 60, 120, 180, 240, 300}数据拟合无法得到精确解。于是我意识到这个题目不是代数题,而是计算机算法题。
大家熟悉regular expression的应该可以找到更简洁的解答。
Apple II上码Basic?
是的。当时我们武汉二中从美国买了大约20台原装苹果2,绿色单显,放空调房,老师和学生都穿白大褂。
program main implicit none real(8) :: a(-4:4) integer :: i do i=-4,4 a(i)=dble(abs(i)+1)**sign(1,i) end do write(*,*) "The sequence is ", a end
您的Fortran比我的Java/Python3牛!
您只要把-4,4改成-5,5就能打印1/6, 1/5, ..., 5, 6
sign(1, i)好强大!数学计算Fortran is the king!
我只会Fortran77,请问现在是否应该学习Fortran90或以上?
当然您的程序可读性更强。
因为我在6楼已经证明了本题不可能有非阶段函数的简单解,所以需要if-else。
我现在正在构想Prolog的递归函数解,但是我50多岁了,一时完成不了。
我是高能物理背景,在這個領域裡,大部分的code都是用Fortran77寫的。Fortran90跟77是兼容的。所以就計算而言,77就夠了。
多谢您的帮助!
sign(1,i)在77就有了。我刚刚复习了一下77。
晚安!
还得穿拖鞋 窗帘整天拉上 搞的神秘兮兮的?
哈哈 想到我小学时 学校的计算机房就是这样的 那时候我们学的是basic语言 现在都记不清了 只记得有go to语句 后来大学学c和java才发现go to早就被淘汰了 太乱了容易出错:)
是的配了20双拖鞋,窗帘永远拉上。
当时的计算机老师很有钱,1984年他自己就有日本生产的小型彩色摄录一体机,接到苹果单色显示器只能显示绿色和白色,他不满意,就把他自己那台苹果单色显示器换成了苹果彩色显示器,然后我们编BASIC,他就剪切视频自己玩。
记得BASIC有行号,10, 20, 30,如果在10后面加一句,一般就用新行号11。
记得FORTRAN77也可以用行号。
都是为了go to方便。
这种编程风格影响了我后来学Java,所以我写Java必然有很多break label;
昨天晚上试了一下Prolog的递归解,试了20分钟,程序有点小bug,方括号[ ]太多,尝试用flatten函数也不work,但总体目的达到了。
% sequence.pl
sequence(1,[1]). sequence(I, [1/I, L, I]) :- I > 1, I1 is I - 1, sequence(I1, L).
/* sample run sequence(1,L) L = [1] sequence(4,L) L = [1/4, [1/3, [1/2, [1], 2], 3], 4] */
我在爱荷华学的Prolog基本上都还给老师了。我现在模糊地感觉,它list的head是1个element,而tail是1个list,我可以用head recursion,也可以用tail recursion,但是似乎不能同时用head recursion和tail recursion,所以我的多余方括号问题似乎无解。今晚有空复习一下LISP, Miranda, Haskell,Java lambda,看看有没有更好的解决办法。
go to方便快捷但不可靠 就像笔记本电脑里面的飞线
我知道学霸,但og是什么?
谢谢!
我拆过几台笔记本,但未发现飞线。
联想Thinkpad干过 好像是T60
T60似乎是十几年前的型号了。
今天的笔记本似乎主板都是专门设计的,每一个接口都和外壳匹配非常好,根本就不需要飞线了。
那是,技术先进了太多了 硬件也便宜 以前设计出问题 可舍不得扔掉那么多板子 不过集成度太高也不好 内存焊在主板上 屏幕粘在边框上 电池耶焊在板子上 维修成本过高 甚至不能维修
今天的轻薄笔记本,基本上是既不能升级,也不能维修。