计算数学精解【12】-fortran计算精解(1)

news2024/9/20 18:32:17

文章目录

  • 概述
  • hello,world
    • 环境
    • 接收输入与输出
  • 读取csv文件
  • if and select case
  • 循环
  • format
  • read,write format

概述

FORTRAN是英文“FORmulaTRANslator”的缩写,译为“公式翻译器”,它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。FORTRAN语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。
Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。易学,语法严谨。可以直接对矩阵和复数进行运算,这一点类似matlab。自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。很多专用的大型数值运算计算机针对Fortran做了优化。广泛地应用于并行计算和高性能计算领域。Fortran90,Fortran95,Fortran2003的相继推出使Fortran语言具备了现代高级编程语言的一些特性。

hello,world

环境

codeblock + gfortran

  • linux
    安装 gfortran和codeblock即可
  • windows
    下载相应版本mingw-w64
    https://sourceforge.net/projects/mingw-w64/files/
    然后解压后,配置path路径
    最后,codeblock新增项目,选择fortran
    并配置编译器
    image
    image
program hello
    implicit none

    write (*,*) "Hello,World!"

end program

image

  • code::blocks中文设置
    没有好的方法,直接将文件保存为gbk格式。
    不要使用utf-8

接收输入与输出


program hello
    implicit none
    integer::age
    character(len=10) ::name
    write (*,*) '您叫什么名字?'
    read(*,*) name

    write (*,*) '您今年多少岁?'
    read(*,*) age

    write (*,*) 'Hi,欢迎',name,'加入学习fortran的队伍!'
    write (*,*) '您今年',age,'岁!'

end program


image

读取csv文件

以读取机器学习训练集iris为例。

program aiFortran
    implicit none
    character(20)::class_name
    character(200)::file_name
    integer::record_count=0
    integer::io_status
    integer::read_status
    integer::path_pos
    character(200)::err_msg
    real::sepal_length,sepal_width,petal_length,petal_width
    type::iris_info
        real::iris_sepal_length
        real::iris_sepal_width
        real::iris_petal_length
        real::iris_petal_width
        character(len=20)::iris_class_name
    end type iris_info
    type(iris_info),dimension(200)::iris_datas
    type(iris_info)::iris_data

    character(len=255) :: cmd
    call get_command(cmd)
    path_pos=index(cmd, '\bin' , .true.)
    file_name=trim(cmd(1:path_pos))//"iris\iris.data"

    open (unit=10,file=file_name,status='old',action='read',iostat=io_status,iomsg=err_msg)
    if (io_status/=0)  then
        write(*,90) file_name,err_msg
        90 format ('读取iris文件',A200,'异常:',A200)
    else
        write (*,*) "萼片长度,萼片宽度,花瓣长度,花瓣宽度,分类"
        read_file:do
            read (10,*,iostat=read_status) sepal_length,sepal_width,petal_length,petal_width,class_name
            if (read_status/=0) exit
            record_count=record_count+1
            iris_data=iris_info(sepal_length,sepal_width,petal_length,petal_width,class_name)
            iris_datas(record_count)=iris_data
            write (*,100) iris_data
        end do read_file
        close(unit=10)
        write (*,*) "共读取",record_count,"条数据!"
    endif

    100 format(4(F5.1,1X),A50)


end program aiFortran

if and select case

 您叫什么名字?
张三
 您数学、英语、政治成绩多少分?
98,78,55
 Hi,欢迎张三      !
 您平均分:          77 !
 您真是一个数学天才!
 您政治要加油了!

Process returned 0 (0x0)   execution time : 17.262 s
Press any key to continue.

program hello
    implicit none
    integer::math_score,english_score,politics_score
    character (len=10)::name
    write (*,*) '您叫什么名字?'
    read(*,*) name

    write (*,*) '您数学、英语、政治成绩多少分?'
    read(*,*) math_score,english_score,politics_score

    write (*,*) 'Hi,欢迎',name,'!'
    write (*,*) '您平均分:',(math_score+english_score+politics_score)/3,'!'
    math:select case (math_score)
    case (101:) math
        write (*,*) '您数学成绩真实吗?'
    case (60:79) math
        write (*,*) '您数学及格了!'
    case (80:79)  math
        write (*,*) '您数学比较好了!'
    case (80:95)  math
        write (*,*) '您数学很优异!'
    case (96:100)  math
        write (*,*) '您真是一个数学天才!'
    end select math
    english:if (english_score >85 )then
        write (*,*) '您英语比较好了!'
    else if (english_score >95) then
        write (*,*) '您真是一个英语天才!'
    end if english
    politics:select case (politics_score)
    case (:70)
        write (*,*) '您政治要加油了!'
    case (96,97,98,99,100)
        write (*,*) '您真是一个政治天才!'
    case (101:)
        write (*,*) '您政治成绩真实吗?'
    case default
        write (*,*) '您政治比较好了!'
    end select politics


end program


上面程序有一个错误

    english:if (english_score >85 )then
        write (*,*) '您英语比较好了!'
    else if (english_score >95) then
        write (*,*) '您真是一个英语天才!'
    end if english
 您叫什么名字?
张三
 您数学、英语、政治成绩多少分?
89,98,77
 Hi,欢迎张三      !
 您平均分:          88 !
 您数学很优异!
 您英语比较好了!
 您政治比较好了!

Process returned 0 (0x0)   execution time : 12.550 s
Press any key to continue.

修改一下


program hello
    implicit none
    integer::math_score,english_score,politics_score
    character (len=10)::name
    write (*,*) '您叫什么名字?'
    read(*,*) name

    write (*,*) '您数学、英语、政治成绩多少分?'
    read(*,*) math_score,english_score,politics_score

    write (*,*) 'Hi,欢迎',name,'!'
    write (*,*) '您平均分:',(math_score+english_score+politics_score)/3,'!'
    math:select case (math_score)
    case (101:) math
        write (*,*) '您数学成绩真实吗?'
    case (60:79) math
        write (*,*) '您数学及格了!'
    case (80:79)  math
        write (*,*) '您数学比较好了!'
    case (80:95)  math
        write (*,*) '您数学很优异!'
    case (96:100)  math
        write (*,*) '您真是一个数学天才!'
    end select math
    english:if (english_score >95 )then
        write (*,*) '您真是一个英语天才!'
    else if (english_score >85) then
        write (*,*) '您英语比较好了!'
    end if english
    politics:select case (politics_score)
    case (:70)
        write (*,*) '您政治要加油了!'
    case (96,97,98,99,100)
        write (*,*) '您真是一个政治天才!'
    case (101:)
        write (*,*) '您政治成绩真实吗?'
    case default
        write (*,*) '您政治比较好了!'
    end select politics


end program


 您叫什么名字?
张三
 您数学、英语、政治成绩多少分?

88,99,44
 Hi,欢迎张三      !
 您平均分:          77 !
 您数学很优异!
 您真是一个英语天才!
 您政治要加油了!

Process returned 0 (0x0)   execution time : 11.435 s
Press any key to continue.

循环

求素数


program hello
    implicit none
    integer::num,i
    logical::is_prime_number=.TRUE.

    write (*,*) "请输入数:"
    read (*,*) num

    do i=2,num-1
        if (mod(num,i)==0) then
            is_prime_number=.FALSE.
            write (*,*) num,'/',i,'=',num/i
            exit
        endif
    end do
    if (is_prime_number) then
        write (*,*) num,"是素数"
    else
        write (*,*) num,"不是素数"
    end if


end program



program hello
    implicit none
    integer::i,max_num,n
    logical::is_prime_number

    write (*,*) "请输入求素数的最大范围:"
    read (*,*) max_num
    do n=3,max_num-1
        is_prime_number=.TRUE.
        do i=2,n-1
            if (mod(n,i)==0) then
                is_prime_number=.FALSE.
                write (*,*) n,'/',i,'=',n/i
                exit
            endif
        end do
        if (is_prime_number) then
            write (*,*) n,"是素数"
        end if
    end do



end program


format

11,342,992,345.4253345,202.32454532,0.023435
     11   342 992 345.43      0.20232E+03 2.343500033E-02

Process returned 0 (0x0)   execution time : 14.987 s
Press any key to continue.


program format_output
    implicit none
    integer::i,j,k
    real::x1,x2,x3
    read (*,*) i,j,k,x1,x2,x3
    write (*,100) i,j,k,x1,x2,x3
    100 format(" ",2I6,1X,I0,1X,F0.2,1X,E16.5,1X,ES15.9)

end program format_output


read,write format

program learn
    implicit none
    integer::id
    real::math_score,english_score,politics_score
    write(*,*) "请输入数据(学号,数学成绩,英语成绩,政治成绩):"
    read (*,100) id,math_score,english_score,politics_score
    write (*,100) id,math_score,english_score,politics_score
    100 format(I5,3F6.2)


end program learn

 请输入数据(学号,数学成绩,英语成绩,政治成绩):
1,87.34,98.22,69.54
    1 87.34 98.22 69.54

Process returned 0 (0x0)   execution time : 13.665 s
Press any key to continue.


program learn
    implicit none
    character(10)::name
    integer::id
    real::math_score,english_score,politics_score
    write(*,*) "请输入数据(学号,姓名,数学成绩,英语成绩,政治成绩):"
    read (*,*) id,name,math_score,english_score,politics_score
    write (*,100) id,name,math_score,english_score,politics_score
    100 format(I5,A10,3F6.2)


end program learn

 请输入数据(学号,姓名,数学成绩,英语成绩,政治成绩):
1,张三,89.31,86.81,76.34
    1张三       89.31 86.81 76.34

Process returned 0 (0x0)   execution time : 20.302 s
Press any key to continue.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2033395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024.8.13-算法学习(原创+转载)

一、什么是张量并行(Tensor Parallelism) ? 张量并行(Tensor Parallelism) 是一种分布式矩阵算法。 随着模型越来越大,模型内的矩阵也越来越大。一个大矩阵的乘法可以拆分成多个小矩阵的运算,…

文件上传漏洞(四,靶场详解)

前言: 本文基于github上的upload-labs,PHP study以及bp抓包软件进行操作。 靶场环境搭建及pass-1.pass-2请转到: 文件上传漏洞(二,靶场搭建及漏洞利用) 文件上传漏洞(三,靶场详解…

【机器学习西瓜书学习笔记——半监督学习】

机器学习西瓜书学习笔记【第十二章】 第十三章 半监督学习13.1 未标记样本13.2 生成式方法13.3 半监督 S V M SVM SVM基本思想优点和注意事项适用场景 13.4 图半监督标签传播算法多类标签传播算法Label PropagationLabel Spreading 13.5 基于分歧的方法数据视图协同训练 13.6 半…

映客基于Apache SeaTunnel 打造高效的一站式数据集成平台

背景 随着业务的增加,数据集成任务大量增长,越来越多的数据源的需要支持,原有的系统已经无法完全支撑现有体量。 现有的数据集成平台短板慢慢展现导致部分业务线无法快速对接。数据源的架构在变得繁多和复杂,数据应用也逐渐变得更加垂直和场…

opencv-python图像增强四:多曝光融合(方法一)

文章目录 一、简介:二、多曝光融合方案:三、算法实现步骤3.1 读取图像与曝光时间:3.2 计算响应曲线并合并3.3 色调映射 四:整体代码实现五:效果 一、简介: 在摄影和计算机视觉领域,高动态范围&…

关于IP子网掩码的解释

关于IP子网掩码的解释 1、掩码 10.1.1.0/27 掩码 10.1.1.0/27 表示一个子网,其中/27是子网掩码的表示方式,指的是前27位是网络位,剩下的5位是主机位,这种掩码意味着每个子网有32个IP地址(2^532),其中包括一个网络地址…

GitHub提交PR(GitHub提交个人代码到社区)

GitHub提交PR(GitHub提交个人代码到社区) 1. 设置基本信息 确保你的本地 git 配置中的用户名和邮箱地址与你在 GitHub 账户中设置的信息一致。‌如果不一致,‌使用 git config --global user.name "Your Name" 和 git config --g…

三层架构与解耦——IoCDI机制【后端 7】

三层架构与解耦——IoC&DI机制 在软件开发领域,三层架构(Controller、Service、Dao)是一种广泛采用的架构模式,它通过将应用程序分为三个主要层次来组织代码,旨在提高代码的可维护性、复用性和可扩展性。而解耦&am…

读零信任网络:在不可信网络中构建安全系统17无控制器架构

1. 建立系统框图 1.1. 实现零信任网络的第一步重要工作是建立系统框图 1.2. 系统框图能够帮助我们透彻地理解内部网络和外部网络间的通信模式,有助于系统通信信道的设计 1.3. 对于现有的网络来说,建议首先利用日志工具来记录网络流量,然后…

2万多条初中历史题库ACCESS\EXCEL数据库

这段时间破解了中高学生知识题库,包含高&中英语题库、小&学英语题库、初&中地理题库、初&中历史题库、高&中历史题库、初&中生物题库,数据表结构都一样,今天发的这份是上万条的初中历史题库,截图包含所有…

CSS——伪元素:before

CSS——伪元素&:before 简单介绍: ::after和::before的使用很简单,可以认为其所在元素上存在一前一后的两个的元素,这两个元素默认是内联元素,但我们可以为其增添样式。::after和::before使用的时候一定要注意,必…

数据结构之二叉树详解——包含递归及迭代遍历方式

二叉树的种类 二叉树(binary tree)是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节…

计算机毕业设计 扶贫助农系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

Golang面试题六(GMP)

目录 1.Go线程实现模型 1:1 关系 N:1关系 M:N关系 2.GM模型 3.GMP模型 概念 模型简介 有关P和M的个数问题 P和M何时会被创建 4.调度器的设计策略 5.go func() 调度流程 6.调度器的生命周期 7.Go work stealing 机制 8.Go hand off 机制 9.Go 抢占式调度 9.Sys…

8.3.数据库基础技术-关系代数

并:结果是两张表中所有记录数合并,相同记录只显示一次。交:结果是两张表中相同的记录。差:S1-S2,结果是S1表中有而S2表中没有的那些记录。 笛卡尔积:S1XS2,产生的结果包括S1和S2的所有属性列,并且S1中每条记…

[C++][opencv]基于opencv实现photoshop算法色阶调整

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 Levels.hpp #ifndef OPENCV2_PS_LEVELS_HPP_ #define OPENCV2_PS_LEVELS_HPP_#include "opencv2/core.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp&quo…

Re:从零开始的逆向笔记02day

1-C语言 参数传递 参数传递是通过堆栈的,传递的顺序是从右到左 函数返回值是存储在寄存器eax中 类型 char x -1; //0xFF 1111 1111 int y x; //0xFFFFFFFF 1111 1111 1111 1111 1111 1111 1111 1111 其余位为符号位unsigned char x -1; //0xFF 1111 1111 in…

云快充协议1.5版本的充电桩系统软件

介绍 小程序端:城市切换、附近电站、电桩详情页、扫码充电、充电中动态展示、订单支付、个人中心、会员充值、充值赠送、联系客服; 管理后台:充电数据看板、会员管理、订单管理、充值管理、场站运营、文章管理、财务管理、意见反馈、管理员管…

腾讯云COS和阿里云OSS在Springboot中的使用

引言:之前本来是用OSS做存储的,但是上线小程序发现OSS貌似消费比COS多一些,所以之前做了技术搬迁,最近想起,打算做个笔记记录一下,这里省去在阿里云注册OSS或腾讯云中注册COS应用了。 一、OSS 1、配置yml …

Linux 网络设备驱动

一.网络设备驱动框架 接收 将报文从设备驱动接受并送入协议栈 老API netif_if 编写网络设备驱动 步骤 1.注册一个网络设备 2.填充net_device_ops结构体 3.编写接收发送函数 // SPDX-License-Identifier: GPL-2.0-only /** This module emits "Hello, world"…