fortran to c workshop - personal psu
TRANSCRIPT
![Page 1: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/1.jpg)
FORTRAN to C Workshop
Joe Lambert
Computer Science and Engineering Department
August 1994
![Page 2: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/2.jpg)
CONTENTS
Simple Programs in FORTRAN and C 1
Control Structures in FORTRAN and C16
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 3: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/3.jpg)
CONTENTS
) Simple Programs in FORTRAN and C :
1Hello WorldAverage Of ValuesArithmetic OperationsIntrinsic functionsPeriod of a Pendulum
Control Structures in FORTRAN and C16
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 4: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/4.jpg)
FORTRAN to C Workshop
Simple Programs in FORTRAN and C
Hello World
FORTRAN
********************************************
PROGRAM HELLO
* THIS PROGRAM PRINTS HELLO WORLD
********************************************
PRINT*,'Hello World'
STOP
END
C
Joe Lambert 1
![Page 5: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/5.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
/* This program prints Hello World */
#include <stdio.h>
void main(void)
{
printf("Hello World \n");
}
Joe Lambert 2
![Page 6: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/6.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
Average Of Values
FORTRAN
Joe Lambert 3
![Page 7: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/7.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
********************************************
PROGRAM COMPUT
* THIS PROGRAM COMPUTES THE AVERAGE OF
* A SET OF DATA VALUES. NOTE ERROR!
********************************************
INTEGER COUNT
REAL X, SUM, AVERG
*
SUM = 0.0
COUNT = 0
READ*, X
1 IF(X.NE.0.0) THEN
SUM=SUM+X
COUNT = COUNT + 1
READ*, X
GO TO 1
ENDIF
AVERG = SUM/REAL(COUNT)
PRINT 5, AVERG
5 FORMAT (1X,'THE AVERAGE IS ',F6.2)
STOP
END
Joe Lambert 4
![Page 8: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/8.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
C
/* This program computes the average of
* a set of data values. Note error. */
#include <stdio.h>
void main(void)
{
int count;
float x, sum, average;
sum= 0;
count=0;
scanf("%f", &x);
start: if ( x != 0.0)
sum = sum + x;
count = count + 1;
scanf("%f", &x);
goto start;
}
average = sum/count;
printf("The average is %6.2f ",average);
}
Joe Lambert 5
![Page 9: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/9.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
Better C
/* This program computes the average of
* a set of data values */
#include <stdio.h>
void main(void)
{
int count =0;
float x,average,
sum= 0;
do {
scanf("%f", &x);
sum = sum + x;
count = count + 1;
}while (x != 0.0);
average = sum/count;
printf("The average is %6.2f ",average);
}
Joe Lambert 6
![Page 10: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/10.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
Classical C
/* This program computes the average of
* a set of data values */
#include <stdio.h>
void main(void)
{
int count =0;
float x,average,
sum= 0;
do {
scanf("%f", &x);
sum += x;
count++ ;
}while (x != 0.0);
average = sum/count;
printf("The average is %6.2f ",average);
}
Joe Lambert 7
![Page 11: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/11.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
Arithmetic Operations
FORTRAN
Joe Lambert 8
![Page 12: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/12.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
********************************************
PROGRAM COMPUT
* THIS PROGRAM GIVES EXAMPLES OF
* ARITHMETIC OPERATIONS
********************************************
INTEGER I,J,K
DOUBLE PRECISION X, Y,Z
*
I=1
J=2
X=1.0
Y=2.0
*
Z=X*Y
K=I/J
Z=X**J
STOP
END
Joe Lambert 9
![Page 13: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/13.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
C
/* This program gives examples of
* arithmetic operations */
#include <stdio.h>
#include <math.h>
void main(void)
{
int k,i=1,j=2;
double x=1.0,y=2.0,z;
z=x+y;
k=i/j;
z = pow(x,j);
/* double pow( double u, double v) */
}
Joe Lambert 10
![Page 14: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/14.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
Intrinsic functions
.Function Fortran Cp
x SQRT(X) double sqrt(double x)jxj ABS(X) double fabs(double x)
sin(x) SIN(X) double sin(double x)cos(x) COS(X) double cos(double x)tan(x) TAN(X) double tan(double x)ex EXP(X) double exp(double x)
loge(x) LOG(X) double log(double x)
log10(x) LOG10(X) double log10(double x)Modulus MOD(I,J) i%j
Joe Lambert 11
![Page 15: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/15.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
Period of a Pendulum
FORTRAN
Joe Lambert 12
![Page 16: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/16.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
********************************************
PROGRAM PERIOD
* THIS PROGRAM CALCULATES THE PERIOD
* OF A PENDULUM
********************************************
REAL L,ALPHA,P,TEMP
PARAMETER (PI=3.1415,G=980)
*
PRINT *, 'ENTER LENGTH OF PENDULUM IN CM'
READ *, L
PRINT *,'ENTER ANGLE OF DISPLACEMENT'
PRINT *, IN RADIANS'
READ *,ALPHA
*
TEMP = SIN( ALPHA/2)
P=2*PI*SQRT(L/G)*(1+0.25*TEMP*TEMP)
*
PRINT *, P, ' IS THE PENDULUM PERIOD'
STOP
END
Joe Lambert 13
![Page 17: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/17.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
C
Joe Lambert 14
![Page 18: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/18.jpg)
FORTRAN to C Workshop Simple Programs in FORTRAN and C
/* This program Calculates the period
* of a pendulum*/
#include <stdio.h>
#include <math.h>
void main(void)
{
double l,alpha,p,temp;
constant double g = 980;
constant double pi = 3.1415;
printf("Enter the length of the pendulum");
printf(" in cm:");
scanf("%lf",&l);
printf("\n Enter the angle of ");
printf("displacement in radians:");
scanf("%lf",&alpha);
temp = sin(alpha/2);
p=2*pi*sqrt(l/g)*(1+0.25*temp*temp);
printf("\n %f is the pendulum period",p);
}
Joe Lambert 15
![Page 19: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/19.jpg)
CONTENTS
Simple Programs in FORTRAN and C 1
Control Structures in FORTRAN and C16
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 20: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/20.jpg)
CONTENTS
pSimple Programs in FORTRAN and C 1
) Control Structures in FORTRAN and C16
SelectionRepetitionRelational OperatorsLogical OperatorsIteration
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 21: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/21.jpg)
FORTRAN to C Workshop
Control Structures in FORTRAN and C
Selection
FORTRAN
Joe Lambert 16
![Page 22: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/22.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
********************************************
PROGRAM SLCT1
* THIS PROGRAM SHOWS IF
* STRUCTURE
********************************************
REAL FRACT, DEN, NUM
READ *, FRACT,DEN,NUM
IF ( DEN .NE. 0.0) THEN
FRACT=NUM/DEN
PRINT *, FRACT
ENDIF
PRINT *,' END OF PROGRAM'
STOP
END
Joe Lambert 17
![Page 23: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/23.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
C
/* This program shows if structure*/
#include <stdio.h>
void main(void)
{
float fract,den,num;
scanf(" %f %f %f ",&fract,&den,&num);
if (den != 0.0)
{
fract = num/den;
printf("%f \n",fract);
}
printf("End of Program\n");
}
Joe Lambert 18
![Page 24: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/24.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
FORTRAN
********************************************
PROGRAM SLCT2
* THIS PROGRAM SHOWS IF THEN ELSE
* STRUCTURE
********************************************
REAL FRACT, DEN, NUM
READ *, FRACT,DEN,NUM
IF ( DEN .NE. 0.0) THEN
FRACT=NUM/DEN
ELSE
FRACT = -1
ENDIF
PRINT *, FRACT
STOP
END
Joe Lambert 19
![Page 25: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/25.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
C
/* This program shows if else structure*/
#include <stdio.h>
void main(void)
{
float fract,den,num;
scanf(" %f %f %f ",&fract,&den,&num);
if (den != 0.0)
{
fract = num/den;
}
else
{
fract = -1;
}
printf("%f\n",fract);
}
Joe Lambert 20
![Page 26: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/26.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
FORTRAN
Joe Lambert 21
![Page 27: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/27.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
********************************************
PROGRAM SLCT3
* THIS PROGRAM SHOWS IF ELSEIF ELSE
* STRUCTURE
********************************************
REAL FRACT, DEN, NUM
READ *, FRACT,DEN,NUM
IF ( DEN .LT. 0.0) THEN
FRACT=NUM/DEN
ELSEIF(DEN .GT 0.0) THEN
FRACT= NUM
ELSE
FRACT = -1
ENDIF
PRINT *, FRACT
STOP
END
Joe Lambert 22
![Page 28: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/28.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
C
/* This program shows if elseif structure*/
#include <stdio.h>
void main(void)
{
float fract,den,num;
scanf(" %f %f %f ",&fract,&den,&num);
if (den < 0.0)
fract = num/den;
else if(den > 0.0)
fract =num;
else
fract = -1;
printf("%f\n",fract);
}
Joe Lambert 23
![Page 29: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/29.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
Repetition
FORTRAN
Joe Lambert 24
![Page 30: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/30.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
********************************************
PROGRAM FLIGHT
* THIS PROGRAM SIMULATES Rocket FLIGHT
********************************************
REAL TIME, HEIGHT
LOGICAL DONE
*
DONE = .FALSE.
TIME= 0.0
HEIGHT= 0
1 IF(.NOT. DONE) THEN
HEIGHT=HEIGHT +3.0*TIME
IF (HEIGHT .LT. 50) THEN
TIME = TIME +.05
ELSE
TIME = TIME + 2
ENDIF
DONE = HEIGHT .GT. 100 .OR.
+ TIME .GT. 100
GO TO 1
ENDIF
END
Joe Lambert 25
![Page 31: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/31.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
C
Joe Lambert 26
![Page 32: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/32.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
/* This program simulates
* rocket flight. */
#include <stdio.h>
void main(void)
{
#define TRUE 1
#define FALSE 0
float time,height;
int done = FALSE;
time=0;
height=0;
while( !done)
{
height += 3*time;
if (height < 50)
time+= .05;
else
time +=2;
done = (height > 100) || (time > 100);
}
Joe Lambert 27
![Page 33: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/33.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
}
Joe Lambert 28
![Page 34: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/34.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
Relational Operators
.
Operator Fortran C
equal .EQ. ==not equal .NE. !=less than .LT. <
less than or equal .LE. <=greater than .GT. >
greater than or equal .GE. >=
Joe Lambert 29
![Page 35: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/35.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
Logical Operators
.
Operator Fortran C
and .AND. &&or .OR. jjnot .NOT. !
Joe Lambert 30
![Page 36: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/36.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
Iteration
FORTRAN
********************************************
PROGRAM POLY1
* THIS PROGRAM CALCULATES 3*T*T+4.5
********************************************
INTEGER TIME
REAL POLY
*
DO 15 TIME = 1,10
POLY= 3.0*REAL(TIME)**2+4.5
PRINT 10,TIME,POLY
10 FORMAT(1X,I2,5X,F6.2)
15 CONTINUE
END
Joe Lambert 31
![Page 37: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/37.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
C
/* This program calculates
* 3*t*t+4.5. */
#include <stdio.h>
void main(void)
{
float poly;
int time;
for( time = 1; time <= 10;time++)
{
poly = 3.0*time*time +4.5;
printf("%2d %6.2f\n",time,poly);
}
}
Joe Lambert 32
![Page 38: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/38.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
FORTRAN
********************************************
PROGRAM NEST
* THIS PROGRAM EXHIBITS NESTED INTERATION
********************************************
INTEGER I,J
*
DO 15 I = 1,10
DO 10 J = 1,12
PRINT*, I,J
10 CONTINUE
15 CONTINUE
END
Joe Lambert 33
![Page 39: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/39.jpg)
FORTRAN to C Workshop Control Structures in FORTRAN and C
C
/* This program exhibits
* nested for loops */
#include <stdio.h>
void main(void)
{
int i,j;
for( i = 1; i <= 10;i++)
for( j = 1; j <= 12;j++)
printf("%d %d \n",i,j);
}
Joe Lambert 34
![Page 40: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/40.jpg)
CONTENTS
Simple Programs in FORTRAN and C 1
Control Structures in FORTRAN and C16
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 41: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/41.jpg)
CONTENTS
pSimple Programs in FORTRAN and C 1
pControl Structures in FORTRAN and C16
) Subprograms in FORTRAN and C : 35Functions
Subroutines and Procedures
Call by Reference / Value
Pointers,Addresses, Values
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 42: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/42.jpg)
FORTRAN to C Workshop
Subprograms in FORTRAN and C
Functions
FORTRAN
Joe Lambert 35
![Page 43: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/43.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
********************************************
PROGRAM FUN
* THIS PROGRAM SHOWS FUNCTION
* STRUCTURE
********************************************
INTEGER I
REAL CENT, FAHREN,TEMP,NEW,OLD
CENT(TEMP)=(TEMP-32.0)*.5555556
FAHREN(TEMP)= 1.8*TEMP +32.0
OLD = 44.0
NEW = CENT(OLD)
OLD = -15.0
NEW = FAHREN(OLD)
PRINT *,' END OF PROGRAM'
STOP
END
Joe Lambert 36
![Page 44: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/44.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
C
Joe Lambert 37
![Page 45: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/45.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
/* This program shows function structure*/
#include <stdio.h>
void main(void)
{
int i;
float cent(float x);
float fahren(float x);
float new,old;
old=44;
new= cent(old);
old =-16;
new= fahren(old);
}
float cent(float temp)
{
return( (temp-32)*5/9);
}
float fahren(float temp)
{
return( 9*temp/5 +32);
}
Joe Lambert 38
![Page 46: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/46.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
Joe Lambert 39
![Page 47: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/47.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
Subroutines and Procedures
FORTRAN
Joe Lambert 40
![Page 48: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/48.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
********************************************
PROGRAM ANGLE
* THIS PROGRAM SHOWS SUBROUTINE CALLS
********************************************
INTEGER DEGS, MINUTS, SECONS, RESP
10 CONTINUE
PRINT *,'ENTER DEGREES, MINUTES,SECS'
READ *, DEGS,MINUTS,SECONS
CALL PRNDEG(DEGS,MINUTS,SECONS)
PRINT *,' MORE ( 0= NO, 1= YES)'
READ *, RESP
IF (RESP .NE. 0) GO TO 10
PRINT *,' END OF PROGRAM'
STOP
END
********************************************
SUBROUTINE PRNDEG(DEG,MIN,SEC)
********************************************
INTEGER DEG,MIN,SEC
REAL X
X= DEG+REAL(MIN)/60.0 + REAL(SEC)/3600.0
PRINT *, X
END
Joe Lambert 41
![Page 49: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/49.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
C
Joe Lambert 42
![Page 50: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/50.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
/* This program shows function calls*/
#include <stdio.h>
void main(void)
{
int degs, minuts,secons,resp;
void prndeg( int deg, int min, int sec);
do{
printf("enter degrees, minutes,secs:");
scanf("%d %d %d",°s,&minuts,&secons);
prndeg(degs,minuts,secons);
printf("more ? (0 = no, 1 =yes):");
scanf(" %d",&resp);
}while (resp != 0);
printf("End of Program\n");
}
void prndeg( int deg, int min, int sec)
{
float x;
x= deg + min/60.0 + sec/ 3600.0;
printf("%f \n",x);
}
Joe Lambert 43
![Page 51: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/51.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
Call by Reference / Value
FORTRAN
Joe Lambert 44
![Page 52: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/52.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
*********************************************
PROGRAM POLAR
** CALL BY REFERENCE AND VALUE
*********************************************
REAL RCRD,TCRD,XCRD,YCRD
PRINT *,'ENTER POLAR COORDINATES'
READ *, RCRD , TCRD
CALL CONVER(RCRD,(TCRD),XCRD,YCRD)
** WORKS FVCG,NOT WF,F77 ;(TCRD) is VALUE**
PRINT *, XCRD, YCRD, RCRD, TCRD
TCRD = 150
CALL CONVER(RCRD,TCRD,XCRD,YCRD)
PRINT *, XCRD, YCRD, RCRD, TCRD
PRINT *,' END OF PROGRAM'
STOP
END
*********************************************
SUBROUTINE CONVER(R,THETA,X,Y)
*********************************************
REAL R, THETA, X, Y
X= R* COS(THETA)
Y= R* SIN(THETA)
THETA= 1.0
END
Joe Lambert 45
![Page 53: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/53.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
C
Joe Lambert 46
![Page 54: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/54.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
/* call by reference and call by value */
#include <stdio.h>
#include <math.h>
void main(void)
{
double rcrd,tcrd,xcrd,ycrd;
void cnvr(double, double, double* ,double* );
void cnvr3(double, double *, double* ,double* );
printf("enter polar coordinates:\n");
scanf("%lf %lf",&rcrd, &tcrd);
printf("enter polar coordinates:\n");
cnvr(rcrd,tcrd,&xcrd,&ycrd);
printf("%f %f %f %f\n",xcrd,ycrd,rcrd,tcrd);
tcrd=150;
cnvr3(rcrd,&tcrd,&xcrd,&ycrd);
printf("%f %f %f %f\n",xcrd,ycrd,rcrd,tcrd);
printf("End of Program\n");
}
void cnvr(double r,double t,double *x,double *y)
{
*x=r*cos(t);
*y=r*sin(t);
t=1.0;
}
Joe Lambert 47
![Page 55: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/55.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
void cnvr3(double r,double *t,double *x,double *y)
{
*x=r*cos(*t);
*y=r*sin(*t);
*t=1.0;
}
Joe Lambert 48
![Page 56: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/56.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
Pointers,Addresses, Values
C
Joe Lambert 49
![Page 57: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/57.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
A pointer is scalar type
whose value holds an address.
int i;
printf("%x \n",&i);
/* prints the address of i..*/
Pointers are separate data types.
Each type int,char,float,etc.,
has a corresponding pointer type.
int *j;
declares j to be a pointer(an address)
that points to an integer.
#include<stdio.h>
void main()
{
int i,*j;
printf(" *j = %x \n",j);
j= &i;
printf(" address of i is %x \n",&i);
printf(" *j = %x \n",j);
}
Joe Lambert 50
![Page 58: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/58.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
C isms
#include<stdio.h>
void main()
{
int i,*j;
char c, *d = &c;
j= &i;
printf(" *j = %x \n",j);
printf(" address of c is %x \n",d);
printf(" address of i is %x \n",j);
}
Joe Lambert 51
![Page 59: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/59.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
Joe Lambert 52
![Page 60: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/60.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
Passing Parameters
Parameters in C passed by value
i.e. are not changed
BUT you can force
call by reference by using pointers
void main()
{
int x,y,*ip;
void changit(int x, int *ip);
x=1;
y=3;
ip=&y;
printf("%d %d %d\n",x,y,*ip);
changit(x,ip);
printf("%d %d %d\n",x,y,*ip);
}
void changit( int x, int *ip);
{
x +=5;
*ip +=5;
Joe Lambert 53
![Page 61: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/61.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
printf("inside %d %d \n" ,x,*ip);
}
Joe Lambert 54
![Page 62: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/62.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
yields
1 3 3
inside 6 8
1 8 8
Note x unchanged but y is changed.
Joe Lambert 55
![Page 63: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/63.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
Do you really understand?
void swap ( int x ,int y)
{
int temp;
temp=x;
x=y;
y= temp;
}
a=3;
b=5;
swap(a,b); yields ??
a=3;
b=5;
Joe Lambert 56
![Page 64: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/64.jpg)
FORTRAN to C Workshop Subprograms in FORTRAN and C
void swap ( int *x ,int *y)
{
int temp;
temp=*x;
*x=*y;
*y= temp;
}
a=3;
b=5;
swap(&a,&b); yields ??
a=5;
b=3;
Joe Lambert 57
![Page 65: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/65.jpg)
CONTENTS
Simple Programs in FORTRAN and C 1
Control Structures in FORTRAN and C16
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 66: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/66.jpg)
CONTENTS
pSimple Programs in FORTRAN and C 1
pControl Structures in FORTRAN and C16
pSubprograms in FORTRAN and C : : 35
) Array Structures in FORTRAN and C :
58
One Dimensional Arrays
Two Dimensional Arrays
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 67: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/67.jpg)
FORTRAN to C Workshop
Array Structures in FORTRAN and C
One Dimensional Arrays
FORTRAN
Joe Lambert 58
![Page 68: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/68.jpg)
FORTRAN to C Workshop Array Structures in FORTRAN and C
********************************************
PROGRAM VLIST
* THIS PROGRAM SHOWS ARRAY
* STRUCTURE
********************************************
INTEGER LIMIT,NUMVEL,I
PARAMETER (LIMIT =50)
REAL VELOC(LIMIT)
PRINT *,"ENTER NUMBER OF VELOCITIES"
READ *, NUMVEL
PRINT*,"ENTER VELOCITIES , 1 PER LINE"
DO 10 I =1,NUMVEL
READ *, VELOC(I)
10 CONTINUE
PRINT *,' END OF PROGRAM'
STOP
END
Joe Lambert 59
![Page 69: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/69.jpg)
FORTRAN to C Workshop Array Structures in FORTRAN and C
C
/* This program shows array structure*/
#include <stdio.h>
void main(void)
{
#define LIMIT 50
int numvel,i
float veloc[LIMIT];
printf("Enter number of velocities:");
scanf(" %d",&numvel);
printf("Enter the velocities ,1 per line\n");
for (i=0;i<numvel;i++) /* i=0?? < numvel*/
scanf("%f",&veloc[i]);
printf("End of Program\n");
}
Joe Lambert 60
![Page 70: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/70.jpg)
FORTRAN to C Workshop Array Structures in FORTRAN and C
Two Dimensional Arrays
FORTRAN
Joe Lambert 61
![Page 71: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/71.jpg)
FORTRAN to C Workshop Array Structures in FORTRAN and C
********************************************
PROGRAM MATMUL
* THIS PROGRAM SHOWS MATRIX MULTIPLICATION
********************************************
INTEGER I,J,K,M,N,P,Q
PARAMETER (M=5,N=6,P=6,Q=7)
REAL M1(M,N),M2(P,Q),M3(M,Q)
DO 30 I =1,M
DO 20 J=1,Q
SUM=0
D0 10 K=1,N
SUM = SUM+M1(I,K)*M2(K,J)
10 CONTINUE
M3(I,J)=SUM
20 CONTINUE
30 CONTINUE
PRINT *,' END OF PROGRAM'
STOP
END
Joe Lambert 62
![Page 72: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/72.jpg)
FORTRAN to C Workshop Array Structures in FORTRAN and C
C
Joe Lambert 63
![Page 73: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/73.jpg)
FORTRAN to C Workshop Array Structures in FORTRAN and C
/* This program shows matrix multiplication*/
#include <stdio.h>
void main(void)
{
int i,j,k;
int m=5,n=6,p=6,q=7;
float m1[m][n],m2[p][q],m3[m][q];
for (i=0;i<m;i++)
{
for (j=0;j<q;j++)
{
m3[i][j]=0;
for (k=1;k<n;k++)
m3[i][j] += m1[i][k]*m2[k][j];
}
}
/* again off by one */
printf("End of Program\n");
}
Joe Lambert 64
![Page 74: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/74.jpg)
CONTENTS
Simple Programs in FORTRAN and C 1
Control Structures in FORTRAN and C16
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 75: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/75.jpg)
CONTENTS
pSimple Programs in FORTRAN and C 1
pControl Structures in FORTRAN and C16
pSubprograms in FORTRAN and C : : 35
pArray Structures in FORTRAN and C :
58
) Files in FORTRAN and C : : : : : : : : : 65I/O FilesFORTRAN FILE StatementsC FILE Mode StatementsFORTRAN File PositioningC FILE Positioning
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 76: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/76.jpg)
FORTRAN to C Workshop
Files in FORTRAN and C
I/O Files
FORTRAN
Joe Lambert 65
![Page 77: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/77.jpg)
FORTRAN to C Workshop Files in FORTRAN and C
********************************************
PROGRAM FUN
* THIS PROGRAM FILE I/O
********************************************
REAL R1,R2,R3,RC
OPEN(UNIT=10,FILE='RES3',STATUS='OLD')
OPEN(UNIT=11,FILE='RESC',STATUS='NEW')
READ(10,*) R1,R2,R3
RC=1.0/(1.0/R1+1.0/R2+1.0/R3)
WRITE(11,*) RC
CLOSE(10)
CLOSE(11)
PRINT *,' END OF PROGRAM'
STOP
END
Joe Lambert 66
![Page 78: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/78.jpg)
FORTRAN to C Workshop Files in FORTRAN and C
C
/* This program shows file i/o*/
#include <stdio.h>
void main(void)
{
FILE *fip,*fop;
float r1,r2,r3,rc;
fip= fopen("res3","r");
fop= fopen("resc","w");
fscanf(fip,"%f %f %f",&r1,&r2,&r3);
rc=1/(1/r1+1/r2+1/r3);
fprintf(fop,"%f\n",rc);
fclose(fip);
fclose(fop);
}
Joe Lambert 67
![Page 79: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/79.jpg)
FORTRAN to C Workshop Files in FORTRAN and C
FORTRAN FILE Statements
Statement Parameter Values Meaning
OPEN FILE File name
STATUS OLD File existsNEW File created
SCRATCH No FILE speci�edUNKNOWN None of above
IOSTAT 0 Successpositive No success
ERR number GOTO
ACCESS SEQUENTIAL
DIRECT
FORM FORMATTEDUNFORMATTED
RECL number rec length
CLOSE IOSTAT
ERR
STATUS KEEPDELETE
Joe Lambert 68
![Page 80: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/80.jpg)
FORTRAN to C Workshop Files in FORTRAN and C
C FILE Mode Statements
FILE *fopen(const char *�lename, const char *mode)
fopen("my�le","r");
Mode Values Meaning
r open �le for read
w create �le, if exists delete current
a append,open or create �le,write at end
r+ open for update, read-write
w+ create for update,if exists delete currentread write
a+ append read-write
Joe Lambert 69
![Page 81: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/81.jpg)
FORTRAN to C Workshop Files in FORTRAN and C
FORTRAN File Positioning
Statement Parameter Values Meaning
REWIND Start of �le
IOSTAT 0 Successpositive No success
ERR number GOTO
BACKSPACE to previous record startIOSTAT 0 Success
positive No success
ERR number GOTO
ENDFILE writes EOF
Joe Lambert 70
![Page 82: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/82.jpg)
FORTRAN to C Workshop Files in FORTRAN and C
C FILE Positioning
void rewind(FILE *stream);
rewind("my�le");
int fseek(FILE *stream, long int o�set, int whence);
fseek("my�le",1000, SEEK_SET);
Statement Parameter Values Meaning
fseek stream FILE * �le name
o�set long ints num of chars to move
whence SEEK_SET from begin positionSEEK_CUR from current position
SEEK_END from end position
Joe Lambert 71
![Page 83: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/83.jpg)
CONTENTS
Simple Programs in FORTRAN and C 1
Control Structures in FORTRAN and C16
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 84: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/84.jpg)
CONTENTS
pSimple Programs in FORTRAN and C 1
pControl Structures in FORTRAN and C16
pSubprograms in FORTRAN and C : : 35
pArray Structures in FORTRAN and C :
58
pFiles in FORTRAN and C : : : : : : : : : : 65
) Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
Characters
Strings
String Comparison
Complex Data Type
C calls FORTRAN subroutines : : : : : 93
![Page 85: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/85.jpg)
FORTRAN to C Workshop
Additional Data Types in FORTRAN and C
Characters
FORTRAN
Joe Lambert 72
![Page 86: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/86.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
********************************************
PROGRAM CHARS
********************************************
CHARACTER*20 ITEM
CHARACTER*4 NAME(50)
PRINT*,'ENTER ITEM ENCLOSED IN '''
READ *, ITEM
PRINT 5,ITEM
5 FORMAT(1X,'ITEM IS ',A)
NAME(1) = 'MARY'
NAME(2) = 'JOHN'
PRINT *,' END OF PROGRAM'
STOP
END
Joe Lambert 73
![Page 87: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/87.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
C
/* This program shows char data type */
#include<stdio.h>
void main()
{
char c, item[20];
char *name[50];
printf("Enter item \n",item);
scanf("%s",item);
c='9';
name[0]="mary";
name[1]="Johnny";
printf("%s %c %s %s\n",item, c, name[0],name[1]);
}
Joe Lambert 74
![Page 88: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/88.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
Strings
FORTRAN
Joe Lambert 75
![Page 89: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/89.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
********************************************
PROGRAM STRNG
********************************************
CHARACTER*10 ITEM,NEXT
CHARACTER*20 LAST
ITEM = 'FORTRAN'
NEXT='C'
LAST= ITEM//NEXT
PRINT 5,ITEM
PRINT 5,ITEM(2:4)
PRINT 5,LAST
LAST= NEXT//LAST
PRINT 5,LAST
5 FORMAT(1X,'ITEM IS ',A)
PRINT *,' END OF PROGRAM'
STOP
END
yields
ITEM IS FORTRAN
ITEM IS ORT
ITEM IS FORTRAN C
ITEM IS C FORTRAN
END OF PROGRAM
Joe Lambert 76
![Page 90: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/90.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
Joe Lambert 77
![Page 91: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/91.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
C
Joe Lambert 78
![Page 92: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/92.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
#include<stdio.h>
#include<string.h>
void main(void)
{
char *strcpy(char *s1,const char *s2);
char *strcat(char *s1,const char *s2);
char item[10],next[10],last[20];
strcpy(item,"FORTRAN");
strcpy(next,"C");
printf("item is %s\n",item);
strcpy(last,item);
strcat(last,next);
printf("item is %s\n",last);
strncpy(last,item+1,3);
last[3]='\0';
printf("item is %s\n",last);
}
yields
item is FORTRAN
item is FORTRANC
item is ORT
Joe Lambert 79
![Page 93: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/93.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
String Comparison
FORTRAN
Function Meaning Result
LLT(S1,S2) less than .TRUE..FALSE.
LLE(S1,S2) less than or equal .TRUE..FALSE.
LGT(S1,S2) greater than .TRUE.
.FALSE.
LGE(S1,S2) greater than or equal .TRUE..FALSE.
Joe Lambert 80
![Page 94: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/94.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
C
#include<string.h>
int strcmp(const char *s1,const char *s2);
Function Meaning Result
strcmp(S1,S2) S1 less than S2 negativestrcmp(S1,S2) S1 equal S2 zero
strcmp(S1,S2) S1 grater than S2 positive
Joe Lambert 81
![Page 95: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/95.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
Complex Data Type
FORTRAN
Joe Lambert 82
![Page 96: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/96.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
********************************************
PROGRAM CMPLX
********************************************
REAL R,C,W,MAG,PH
COMPLEX I,HW
I=(0.0,1.0)
R=3.5
C=2.1
W=1.7
HW=(W*R*C*I)/(1.0 + W*R*C*I)
MAG=CABS(HW)
PH= ATAN(AIMAG(HW)/REAL(HW))
PRINT *, HW, MAG, PH
PRINT *,' END OF PROGRAM'
STOP
END
yields
( 0.993636, 7.95227E-02) 0.996813 7.98618E-02
END OF PROGRAM
Joe Lambert 83
![Page 97: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/97.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
C
Joe Lambert 84
![Page 98: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/98.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
#include<stdio.h>
#include<stdlib.h>
typedef struct {
float real;
float imag;
}complex;
void casgn(float , float , complex * );
complex *cmul (complex *,complex *);
complex *cadd(complex *,complex *);
complex *cdiv(complex *,complex *);
complex *coerce(float);
void main(void)
{
float r=3.5,c=2.1,w=1.7;
complex i,hw;
complex *tp,*tn,*tr;
casgn(0,1,&i);
tp=cmul(cmul(cmul(coerce(r),coerce(c)),coerce(w)),&i);
tn=cadd(coerce(1),tp);
tr=cdiv(tp,tn);
Joe Lambert 85
![Page 99: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/99.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
printf(" %f %f \n",tr->real,tr->imag);
}
Joe Lambert 86
![Page 100: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/100.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
Joe Lambert 87
![Page 101: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/101.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
void casgn(float r, float j, complex *c)
{
c->real=r;
c->imag=j;
}
complex *cmul (complex *u ,complex *v)
{
complex *temp;
temp=malloc(sizeof(complex));
temp->real=u->real*v->real-u->imag*v->imag;
temp->imag=u->imag*v->real+u->real*v->imag;
return(temp);
}
complex *cadd(complex *u ,complex *v)
{
complex *temp;
temp=malloc(sizeof(complex));
temp->real=u->real+v->real;
temp->imag=u->imag+v->imag;
Joe Lambert 88
![Page 102: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/102.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
return(temp);
}
Joe Lambert 89
![Page 103: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/103.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
Joe Lambert 90
![Page 104: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/104.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
complex *cdiv(complex *u ,complex *v)
{
complex *temp;
float mag;
mag = v->real*v->real+ v->imag*v->imag;
temp=malloc(sizeof(complex));
temp->real=(u->real*v->real
+u->imag*v->imag)/mag;
temp->imag=(u->imag*v->real
-u->real*v->imag)/mag;
return(temp);
}
complex *coerce(float x)
{
complex *temp;
temp=malloc(sizeof(complex));
temp->real=x;
temp->imag=0;
return(temp);
}
yields
Joe Lambert 91
![Page 105: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/105.jpg)
FORTRAN to C Workshop Additional Data Types in FORTRAN and C
0.993636 0.079523
Joe Lambert 92
![Page 106: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/106.jpg)
CONTENTS
Simple Programs in FORTRAN and C 1
Control Structures in FORTRAN and C16
Subprograms in FORTRAN and C : : 35
Array Structures in FORTRAN and C :
58
Files in FORTRAN and C : : : : : : : : : : 65
Additional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
C calls FORTRAN subroutines : : : : : 93
![Page 107: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/107.jpg)
CONTENTS
pSimple Programs in FORTRAN and C 1
pControl Structures in FORTRAN and C16
pSubprograms in FORTRAN and C : : 35
pArray Structures in FORTRAN and C :
58
pFiles in FORTRAN and C : : : : : : : : : : 65
pAdditional Data Types in FORTRANand C : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 72
) C calls FORTRAN subroutines : : : : : 93
Common Question with Answers
Simple Example
For More Information
![Page 108: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/108.jpg)
FORTRAN to C Workshop
C calls FORTRAN subroutines
Common Question with Answers
Joe Lambert 93
![Page 109: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/109.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
: .......
: * How to call NAG Fortran Library with C (under Unix) ? *
: We have a NAG Fortran Library on our machine but I do not
: know how to call them in my C program. Can anybody give
: me some advice about how to do this?
Hello,
we have some programs written in C calling the NAG library (which
is written in Fortran). There are a number of
important things you must be aware of:
1) Fortran uses a column wise storage of matrices while C stores them
row wise. This means that when you want to parse a matrix from your
C-program to the NAG (-fortran-) routine you must transpose the matrix
in your program before entering the routine. Of course, any output
from such a routine must be transposed again.
If you omit this step, then probably your program will run (because
it has data to compute on) but it will generate wrong answers.
B.T.W. if you have the Fortran source code (of any routine) then
on some platforms you may use compiler directives specifying
that the Fortran compiler must use row wise storage. Some platforms
support these directives. However watch out with this if you call
the same routine from another Fortran routine/program.
2) Your Fortran compiler may add an underscore "_" to the routine name
in the symbol table e.g. subroutine example(..,..,..) becomes
example_ in the table. Hence in the calling C-program/routine
you must add a trailing underscore ! Otherwise the loader will complain
about an undefined symbol "example" while "example_" is loaded.
However, check your compiler for this. For example the Fortran compiler
on VAX-VMS systems does NOT add a trailing underscore (there watch out
with the fact that the VAX-Fortran compiler translates everything
in uppercase).
3) Fortran passes its variables by reference. This means that you MUST
give addresses in your calling C-program (i know, this is a stupid
remark but it is too often forgotten (my experience ....)).
Joe Lambert 94
![Page 110: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/110.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
Joe Lambert 95
![Page 111: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/111.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
4) Watch out especially with float's and double's. Make sure that the
size of the variable in the calling program is identical to the size
in the Fortran routine e.g. double <----> real*8, float <---> real.
5) Remember that the array index in Fortran starts at 1 while in C
this is at index 0; hence a parsed array fortran_array[1:100]
must be used in the C-routine/program as c_array[0:99].
--
Rudi Vankemmel | These are my opinions, not those of
IMEC vzw. - ASP division | my employer, so don't take them away
Process and Device Modelling group |________________________________________
Kapeldreef 75 phone: (32)-(0)16/28 13 37
3001 Leuven fax: (32)-(0)16/28 12 14
Belgium email: [email protected]
- -----------------------------------------------------------------------------
--
another post:
--From: [email protected] (Reginald Beardsley)
--Subject: A: [F77-C] Fortran to c and c to fortran
--Message-ID: <[email protected]>
I do a lot of this. The following is true on the following machines. I cannot
say about others.
Sun 3 & 4
IBM RS/6000
SGI
DECstation
Intergraph Clipper (Apogee & Green Hills compilers)
H-P 7xx
1) If possible, do not pass strings to FORTRAN from C or vice versa.
2) Do not mix I/O on the same file descriptors.
3) Do all your math in FORTRAN, and all the rest in C if at all possible.
4) NEVER ever attempt to write the equivalent of a FORTRAN function that
returns a character variable in C. Life is too short for the suffering
it causes.
5) If you do ANY I/O in FORTRAN, you MUST use a FORTRAN main program.
Joe Lambert 96
![Page 112: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/112.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
6) FORTRAN always passes pointers.
Joe Lambert 97
![Page 113: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/113.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
7) FORTRAN passes string lengths BY VALUE in the order the strings appear in
the argument list. These do NOT appear in the FORTRAN argument list,
but will appear in the C argument list.
8) You will need to take care of nulls and blanks spaces explicitly if you
ignore #1 above.
9) The Sun FORTRAN compiler used lex and yacc to do the conversion of a run
time format from a character variable. If you use lex and yacc either
rename the variables and functions or partially link before you link
to the FORTRAN libraries.
10) FORTRAN symbols have trailing underscores appended. Some compilers require
a compiler flag to get this. Use it! It makes the code more portable.
11) Don't pass structures. If you must access a structure element, pass a
pointer through to a routine which passes back the element pointer.
12) Don't forget that the storage orders for arrays is opposite and
transposition is expensive.
- ------------------------------------------------------------------------
Reginald H. Beardsley Contract Consultant/Programmer
Mobil Exploration and Production Technology
Office: (214)-851-8547 [email protected]
Home: (214)-306-3907
- ---------------------------------------------------------------------------
Joe Lambert 98
![Page 114: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/114.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
Simple Example
Joe Lambert 99
![Page 115: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/115.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
Subroutine CmplxRef(w)
complex w
w =(6,7)
return
end
main()
{
struct complex(float r,i);
struct complex d1;
struct complex *w=&d1;
extern cmplxref_();
complxref_(w);
}
f77 -c CmplexRef
cc -c main.c
f77 CmplxRef.o main.o
a.out
Joe Lambert 100
![Page 116: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/116.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
For More Information
From: [email protected] (Keith [email protected]::SunPro)
Netnews: comp.lang.fortran
Subject: Fortran FAQ
Date: 05 Jun 1994 19:33:43 GMT
Q14) How do I call f77 from C (and visa versa)
This is quite platform dependent. For Suns see the FORTRAN User's
Guide, Chapter 14.
There is a package available from usenet which attempts to make
this "quick and easy" for a wide range of platforms:
Host ftp.germany.eu.net
Location: /newsarchive/comp.sources.misc/volume20
DIRECTORY drwxr-xr-x 512 Jul 7 1993 cfortran
Host ftp.sunet.se
Location: /pub/usenet/comp.sources.misc/volume20
DIRECTORY drwxrwxr-x 512 May 28 1993 cfortran
Host ftp.wustl.edu
Location: /usenet/comp.sources.misc/volume20
DIRECTORY drwxr-xr-x 8192 Oct 30 15:09 cfortran
Host halcyon.com
Location: /dec/.0/usenet/comp.sources.misc/volume20
DIRECTORY dr-xr-xr-x 512 Jul 8 1993 cfortran
Joe Lambert 101
![Page 117: FORTRAN to C Workshop - Personal Psu](https://reader036.vdocuments.us/reader036/viewer/2022090905/613c8904a9aa48668d4a256b/html5/thumbnails/117.jpg)
FORTRAN to C Workshop C calls FORTRAN subroutines
Host lth.se
Location: /pub/netnews/sources.misc/volume20
DIRECTORY drwxr-xr-x 512 Jun 7 1993 cfortran
Host math.mps.ohio-state.edu
Location: /pub/archives/comp.sources.misc/vol20
DIRECTORY drwxrwxr-x 512 Jun 2 1993 cfortran
It is on many other sites (around the world) too. See archie if
you need other pointers.
For some systems, you have to initialize a runtime system explicitly
if you call a different language, and stopping execution from the
other program may not work.
The most recent version of cfortran.h is available via anon. ftp at
zebra.desy.de.
Joe Lambert 102