- 152 Views
- Uploaded on

Download Presentation
## CS 415: Programming Languages

**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

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

Fortran history reference

- http://www.ibiblio.org/pub/languages/fortran/ch1-1.html

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

- 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

PROGRAM HelloWorld

PRINT *,'Hello world!'

END PROGRAM HelloWorld

Column 1

Column 7

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

- 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

- Output statement:
- print *, "(", tri1x, ", ", tri1y, ")“
- Input statement:
- read *, tri3x
- There are ways to do nicely formatted output
- We aren’t going over them

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

- sqrt()
- log()
- sin()
- cos()
- exp()
- etc.

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

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 statementLoop control

- Exit
- Exits the loop, not the program
- Cycle
- Similar to next or continue in other languages
- Starts the next iteration of the loop

! 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.

! 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

! 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

- 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

- 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 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)

Download Presentation

Connecting to Server..