program introduccion



!/////////////////////////////////////////////////////////
!//	DECLARAION DE VARIABLES Y TIPOS DE DATO		//
!// Las expresiones más simples en Fortran son las	//
!// variables. Una "variable" es una expresion de un 	//
!// "tipo de dato". Se define por un "nombre" y un	//
!// contenido o "valor" que puede ser alterado en el	//
!// programa luego.					//
!/////////////////////////////////////////////////////////

real aReal			! declaracion de un real
real :: real1 ,real2		! declaracion de varios reales
integer :: anInt = 5		! declaro e inicializo un entero
complex :: aComplex = (1.0,1.2)	! declaro e inicializo un complejo
integer,parameter :: const = 5	! Si agrego el atributo "parameter" luego del
				!   tipo de dato, defino una "constante", no puedo
				!   modificarla luego en el programa

integer,parameter :: maxInt = const*5	! puedo definir una const. en base a otra

logical :: aBool = .true.	! defino la variable boolean de nombre "aBool" y la
				! inicializo on el valor ".true."

character aChar			! defino un var de tipo caracter, de un solo caracter
character(len=5) :: char='12345'	! defino un caracter de tamano 5


! declaro, inicializo algunas vars para prueba
integer :: i,j,k
real    :: x, y=8 , z=3
logical :: bool , bool1 , bool2


print*,
print*, "ESTE PROGRAMA ES UNA INTRODUCCION A: "
print*, " EXPRESIONES, SENTENCIAS y CONTROL DE FLUJO"
print*;
print*;




!/////////////////////////////////////////////////////////
!//	SENTENCIA DE ASIGNACION Y OPERADORES		//
!// Se pueden construir expresiones más complejas, en	//
!// en base a asignaciones y operadores aritmeticos	//
!// y operadores relacionales				//
!/////////////////////////////////////////////////////////

!--- El operador o sentencia de asignación, asigna una expresion a una variable ---
k = i + j	! Operador de asignacion

! Tambien es valido lo siguiente a una var, una expresion que la contiene
k = k+2

!--- Operadores aritmeticos ---------------------------------------
x = y+z		! suma
x = y-z		! resta
x = y*z		! multiplicacion
x = z/y		! si y,z son enteros la division es entera

!--- Operadores relacionales ---------------------------------------
bool =  z < y		! bool es  TRUE si z < y, sino es FALSE
bool =  z > y		!   "      TRUE si z > y, 	"
bool =  z == y 		!   "      TRUE si z es igual a y, sino FALSE
bool =  z <= y 		!   "      TRUE si z es igual o menor a y
bool =  z >= y		!   "	   TRUE si z es igual o mayor a y
bool =  z /= y		!   "	   TRUE si z es distinto de y

! Algunos ejemplos de expresiones relacionales:
print*, "---- EJEMPLO DE EXPRESIONES RELACIONALES ----"
print*,
print*,  "La expresion relacional",z,"<",y,"devuelve:", z<y 
print*,
print*

!--- Opeardores logicos -------------
! Inicializo algunas vars booleanas:
bool1 = .true.
bool2 = .false.

bool = .not.bool1	!Niega a bool1
bool = bool1.and.bool2	!Es TRUE si ambas lo son
bool = bool1.or.bool2	!Es TRUE si alguna lo es

print*, "---- EJEMPLO DE EXPRESION LOGICA ----"
print*,
print*, "bool1 =T , bool2 =F , bool1.OR.bool2=",bool
print*,
print*,




!/////////////////////////////////////////////////////////
!//	CONDICIONALES Y CONTROL DE FLUJO		//
!// El control de como se ejecutan las instrucciones	//
!// una tras otra, se da por: el "condicional IF" que 	//
!// permite bifurcar la ejecucion en una o mas posi-	//
!// -dades y por los "bucles (loops)" "do" 		//
!/////////////////////////////////////////////////////////


!--- El condicional if tiene la sintaxis: ------
!|	if (expresion-logica) then	    	|
!|		bloque de sentencias	    	|	
!|	else					|
!|		bloque de sentencias		|
!|	end if					|
!-----------------------------------------------
		 
print*, "---- EJEMPLO DE CONDICIONAL ----"
print*
print*, "Si x=8, y=3, evalúo la condicion (x<y), dependieno de "
print*, "si es True o False, imprimo un mensaje u otro: "
print*

x = 8
y = 3
if (x < y) then
   print*, "x es menor que y, la condicion es cierta"
else
   print*, "x no es menor que y, la condicion es falsa"
end if

print*;
print*;	 


!--- la sentencia "do" para efectuar un bucle (loop) es: -------
!|	do var = expr-num1,expr-num2,expr-num3			|	
!|		bloque de sentencias				|
!|	end do							|
!---------------------------------------------------------------
!--- la sentencia "do" para una iteracion condicional ----------
!|	do while (expr-logica)					|
!|		bloque de sentencias				|
!|	end do							|
!---------------------------------------------------------------			

! Ejemplo1: Imprimir en pantalla todos los numeros de 1 al 10
print*, "--- EJEMPLO DE ITERACION DADA POR UN RANGO ---"
print*,

do i = 1,10
   print*, "Estoy imprimiendo la iteración:",i
end do

print*,
print*,

!Ejemplo2: Inicialmente x=1 e y=7, evaluo la condicion (x<y), si es TRUE
! itero e imprimo un mensaje, sino salgo de la iteracion. En cada iteracion
! modifico incremento x y decremento y
print*,"--- EJEMPLO DE ITERACION CONDICIONAL ---"
print*;

x = 1
y = 7
do while (x < y)
   print*,x,"es menor que",y
   x = x+1
   y = y-1		
end do  

end program introduccion