cs 415 programming languages n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
CS 415: Programming Languages PowerPoint Presentation
Download Presentation
CS 415: Programming Languages

Loading in 2 Seconds...

play fullscreen
1 / 25

CS 415: Programming Languages - PowerPoint PPT Presentation


  • 147 Views
  • Uploaded on

CS 415: Programming Languages. Fortran Aaron Bloomfield Fall 2005. The IBM 704. Standard Fortran joke. “GOD is REAL (unless declared INTEGER)." . Fortran I program control. IF (arithmetic expression) N1, N2, N3 DO N1 variable = first_value, last_value. Punch cards.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'CS 415: Programming Languages' - dallon


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
cs 415 programming languages

CS 415: Programming Languages

Fortran

Aaron Bloomfield

Fall 2005

standard fortran joke
Standard Fortran joke
  • “GOD is REAL (unless declared INTEGER)."
fortran i program control
Fortran I program control
  • IF (arithmetic expression) N1, N2, N3
  • DO N1 variable = first_value, last_value
fortran history reference
Fortran history reference
  • http://www.ibiblio.org/pub/languages/fortran/ch1-1.html
installing fortran on windows
Installing Fortran on Windows
  • We’ll use Fortran 77 for this course
    • The compiler has “some” Fortran 90 features
  • Install Cygwin: http://www.cygwin.com/
    • It’s a Unix-like shell for Windows
    • In particular, when you install it:
      • Install the gcc-g77 package in the Devel section
      • We may use Ocaml – if so, then you will need to install the ocaml package (also in Devel)
        • This can be done later, too
  • Install a good editor
    • I like Emacs: http://www.gnu.org/software/emacs/emacs.html
      • Quite a learning curve, but the best editor out there
      • Binaries at http://ftp.gnu.org/pub/gnu/emacs/windows/
      • You can also install and use it as part of Cygwin
      • Tutorials can be found online
compiling a fortran program
Compiling a Fortran program
  • Edit the program using your favorite editor
    • All program code must start on the 7th column!
  • In Cygwin, change to that directory
    • The c drive is at /cygdrive/c, etc.
  • Enter the command:
    • g77 –ff90 file.f
  • Then run the file:
    • ./a.exe
hello world in fortran
Hello world in Fortran

PROGRAM HelloWorld

PRINT *,'Hello world!'

END PROGRAM HelloWorld

Column 1

Column 7

fortran syntax
Fortran syntax
  • Lines can only be 72 characters long
  • Comments start with a !
  • First 6 columns must be spaces
    • Unless it’s a comment
  • No semi-colons after each line
    • A newline is a statement terminator
variable declaration
Variable declaration
  • The types are real, integer, etc.
  • real :: x, y, z
  • integer :: a, b, c
  • character :: g
  • Always put ‘implicit none’ at the beginning
    • Right after the ‘program’ line
    • Prevents implicit variable declaration
input and output
Input and output
  • Output statement:
    • print *, "(", tri1x, ", ", tri1y, ")“
  • Input statement:
    • read *, tri3x
  • There are ways to do nicely formatted output
    • We aren’t going over them
operators
Operators
  • Boolean operators: .and., .or., .not., etc.
    • Basically the name of the operation in periods
    • Boolean values are .true. and .false.
  • Relational operators: <, >, <=, >=, ==, /=
built in functions
Built-in functions
  • sqrt()
  • log()
  • sin()
  • cos()
  • exp()
  • etc.
if statements
If statements
  • Forms are (exp is a Boolean expression):

if (exp ) then

...

endif

if ( exp ) then

...

else

...

endif

if ( exp ) then

...

else if ( exp ) then

...

else if ( exp ) then

...

endif

case statement
Form is:

select case ( expr )

case ( value )

...

case ( value )

...

case ( value )

...

case default

...

end case

Where value can be:

A single value

(300:)

A range of values

(200:400)

Case default is not required

Case statement
looping
Form is:

do i = 1, 10

...

end do

do i = 1, 10, 2

...

end do

The first loops from 1 to 10

The second loops from 1 to 10, but odd numbers only

Looping
loop control
Loop control
  • Exit
    • Exits the loop, not the program
  • Cycle
    • Similar to next or continue in other languages
    • Starts the next iteration of the loop
demo program
! This program allows the user to input the number of degrees in an angle

! and then computes the cosine, sine, and tangent. It continues until the

! user inputs "n" or "N".

PROGRAM angle

IMPLICIT none

! Type variables.

REAL :: cosine, sine, tangent, degrees

REAL :: pi = 3.141592

CHARACTER :: choice

DO

! Enter and read the number of degrees in the angle.

PRINT *, "Enter the number of degrees in the angle."

READ *, degrees

! Convert number of degrees in angle to radians.

degrees = degrees*(pi/180)

! Use intrinsic functions to compute values.

cosine=cos(degrees)

sine=sin(degrees)

tangent=tan(degrees)

! Print results.

PRINT *, "cosine=", cosine, " sine=", sine, " tangent=", tangent

! Give user chance to exit program.

PRINT *

PRINT *, "Would you like to do this again?"

PRINT *,"(Press n to exit - any other key to continue.)"

READ *, choice

! Exit loop if the value in choice is N or n.

IF (choice == "N" .or. choice == "n") EXIT

END DO

STOP

END PROGRAM angle

Demo program
  • Computes the sin, cos, tan, etc.
demo program1
! This program averages a series of numbers input

! from the keyboard.

PROGRAM average

IMPLICIT none

! Type variables.

REAL :: data, sum, avg

INTEGER num, i

! Prompt for and enter number of numbers to average.

PRINT *,"Enter the number of numbers to average."

READ *,num

sum = 0.0

! Loop goes from 1 to number of values to average.

DO i = 1, num

! Prompt for and enter a number.

PRINT *,"Enter a value for the number"

READ *,data

! Add number to total.

sum = sum + data

END DO

! Calculate average.

avg = sum/real(num)

! Print results.

PRINT *,"The average = ",avg

STOP

END

Demo program
  • Computes the average
demo program2
! This program uses a function to find the average of three numbers.

PROGRAM func_ave

! Type variables in main program (a, b, and c are local variables).

REAL :: a,b,c,average

! Prompt for and get numbers to be averaged.

PRINT *,"Enter the three numbers to be averaged."

READ *, a,b,c

! Invoke function average

PRINT *,"The three numbers to be averaged are ",a,b,c

PRINT *,"The average of the three numbers is ", average(a,b,c)

STOP

END PROGRAM func_ave

! Function average

REAL FUNCTION average(x,y,z)

! Type variables in function (x, y, and z are local varialbes).

REAL :: x,y,z

! Function name contains the average the function calculates and returns.

average = (x + y + z)/3.0

RETURN

END FUNCTION average

Demo program
  • Computes the average via a defined function
fortran gotchas
Fortran gotchas
  • All variables must be declared at the beginning
  • Remember line limit of 72 characters!
    • Consider:
    • The 8th variable is named ‘ei’
    • There is no 9th variable declared
  • No continuation lines in Fortran 77
  • == is comparison for if's
  • Can’t seem to be able to change the values of parameters in functions

integer :: first, second, third, fourth, fifth, sixth, seventh, eighth, ninth

Column 72!

john backus
John Backus
  • Chemistry major at UVA (entered 1943)
  • Flunked out after second semester
  • Joined IBM as programmer in 1950
  • Developed Fortran, first commercially successful programming language and compiler
fortran issues
Fortran issues…
  • Fortran language was described using English
    • Imprecise
    • Verbose, lots to read
    • Ad hoc

DO 10 I=1.10

Assigns 1.10 to the variable DO10I

Early Fortrans didn’t care about spaces!

DO 10 I=1,10

Loops for I = 1 to 10

(Often incorrectly blamed for loss of Mariner-I)