FORTRAN模拟计算器程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FORTRAN实验报告
给水排水1001班
武俊槟
1004030134
模拟计算器程序
一、实验目的:
设计一个程序来模拟一个简单的手持计算器,程序支持算数运算+,-,*,/,=以及C(清除),A(全清除)等操作。
二、实验要求:
在运行程序时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在串口中,用户键入‘=’符号后,窗口显示结果。
三、实验步骤:
1
2、程序代码见附录。
3、测试数据:经检验程序无错
四、实验心得:
经过这次编程,我熟练掌握了VF课程所教授的知识,理论联系实际,这次作业提高了我的编程水平,发现了自己平时所忽略的知识点,同时也增强了团队合作意识。
在基本确定编程思路画出大致流程草图后,我们对编程做出了安排,大家分工合作。在编程过程中,我们都或多或少的遇到一些困难,有时可以通过自己的查阅相关资料得到解决,而有时却不得甚解,此时,团队的力量便展现了出来,大家共同探讨遇到的问题。通过大家的共同努力,一起解决在编程中所遇到的问题如:如何实现清屏,输出格式的美观化等。尤其是实现清除命令的过程中,我们最后通过文件操作解决了这个问题。
最后再将大家做的程序进行整合,对程序进行debug,查找程序中的错误,大家共同探讨出现的错误,不断地将程序进行改进,最后实现编程要求并美观化。
编程不仅仅但是编程,它最大乐趣是在编程的过程中不断对自己VF知识的总结和完善,同时也考验一个团队的合作意识。通过这次编程,我觉得我的收获是巨大的,编程锻炼了我在遇到问题时的解决能力及思维方式,加强了我的团队合作意识,使我感觉到了团队的力量,并提高了个人分析能力综合素质。
!武俊槟
!西安科技大学建工学院给排1001
!学号:1004030134
!模拟计算器程序
!调用C/C++库函数清屏命令
interface to function system[c](string)
integer*2 system
character string[reference]
end
!fortran主程序
implicit none
integer::i,j,l=0,num(120),nn=0
integer*2 system
real::a,b,c
character::str(120)
character(len=125)::string,substring1,substring2
print*
print*,' 请输入运算式(len<=125):'
print*," 输入格式:'1+1='"
print*,' 小提示:输入exit可退出程序。按C清除,按A全清除。'
print*
do
j=1
!生成数据库database.txt
open(unit=1,file='database.txt')
read*,string
if(string/='A'.or.string/='C') nn=nn+1
if(string=='exit') then
close(unit=1)
exit
!清除
elseif(string=='C') then
string=system("cls")
print*
print*,' 请输入运算式(len<=125):'
print*," 输入格式:'1+1='"
print*,' 小提示:输入exit可退出程序。按C清除,按A全清除。'
print*
rewind 1
do i=1,nn
read(1,*) string
write(*,*) string
enddo
!清屏
elseif(string=='A') then
string=system("cls")
rewind 1
close(unit=1)
print*
print*,' 请输入运算式(len<=125):'
print*," 输入格式:'1+1='"
print*,' 小提示:输入exit可退出程序。按C清除,按A全清除。'
print*
else
l=len_trim(string)
if(string(l:l)/='=') then
print*,"请输入完整、合理的表达式,输入“=”,按回车。(输入格式:'1+1=')"
else
do i=1,l
if(string(i:i)=='+'.or.string(i:i)=='-'.or.string(i:i)=='*'.or.string(i:i)=='/'.or.string(i:i) =='=') then
num(j)=i
str(j)=string(i:i)
j=j+1
endif
enddo
j=j-1
substring1=string(1:num(1)-1)
read(substring1,*) a
do i=1,j
substring2=string(num(i)+1:num(i+1)-1)
read(substring2,*) b
call f(a,b,c,str(i))
a=c
enddo
write(*,*) string,c
write(1,*) string,c
endif
string='________________________________________________________ __________________'
print*,string
write(1,*) string
endif
enddo
!内部子例行程序
contains
subroutine f(a,b,c,str)
real::a,b,c
character str
if(str=='+') c=a+b
if(str=='-') c=a-b
if(str=='*') c=a*b
if(str=='/') c=a/b
if(str=='=') c=a
endsubroutine
end