miércoles, 14 de diciembre de 2016

Modelo OSI de Red

Modelo OSI

Pila de capas o niveles del modelo de redes OSI (Open System Interconnection).

El modelo de interconexión de sistemas abiertos (ISO/IEC 7498-1), más conocido como “modelo OSI”, (en inglés, Open System Interconnection) es un modelo de referencia para los protocolos de la red de arquitectura en capas, creado en el año 1980 por la Organización Internacional de Normalización (ISO, International Organization for Standardization). Se ha publicado desde 1983 por la Unión Internacional de Telecomunicaciones (UIT) y, desde 1984, la Organización Internacional de Normalización (ISO) también lo publicó con estándar. Su desarrollo comenzó en 1977.


Modelo de 7 capas.


El problema de trasladar información entre computadores se divide en siete problemas más pequeños y de tratamiento más simple en el modelo de referencia OSI. Cada uno de los siete problemas más pequeños está representado por su propia capa en el modelo. Las siete capas del modelo de referencia OSI son:

Capa 7: La capa de aplicación  
Capa 6: La capa de presentación  
Capa 5: La capa de sesión
Capa 4: La capa de transporte
Capa 3: La capa de red
Capa 2: La capa de enlace de datos
Capa 1: La capa física

Durante el transcurso de este semestre veremos las capas, comenzando por la Capa 1 y estudiando el modeloOSI capa por capa. Al estudiar una por una las capas del modelo de referencia OSI, comprenderá de qué manera los paquetes de datos viajan a través de una red y qué dispositivos operan en cada capa a medida que los paquetes de datos las atraviesan. Como resultado, comprenderá cómo diagnosticar las fallas cuando se presenten problemas de red, especialmente durante el flujo de paquetes de datos.






Arquitectura Cliente Servidor


La arquitectura cliente-servidor es un modelo de aplicación distribuida en el que las tareas se reparten entre los proveedores de recursos o servicios, llamados servidores, y los demandantes, llamados clientes. Un cliente realiza peticiones a otro programa, el servidor, quien le da respuesta. Esta idea también se puede aplicar a programas que se ejecutan sobre una sola computadora, aunque es más ventajosa en un sistema operativo multiusuario distribuido a través de una red de computadoras.

Algunos ejemplos de aplicaciones computacionales que usen el modelo cliente-servidor son el Correo electrónico, un Servidor de impresión y la World Wide Web


En esta arquitectura la capacidad de proceso está repartida entre los clientes y los servidores, aunque son más importantes las ventajas de tipo organizativo debidas a la centralización de la gestión de la información y la separación de responsabilidades, lo que facilita y clarifica el diseño del sistema.

La separación entre cliente y servidor es una separación de tipo lógico, donde el servidor no se ejecuta necesariamente sobre una sola máquina ni es necesariamente un sólo programa. Los tipos específicos de servidores incluyen los servidores web, los servidores de archivo, los servidores del correo, etc. Mientras que sus propósitos varían de unos servicios a otros, la arquitectura básica seguirá siendo la misma.

Una disposición muy común son los sistemas multicapa en los que el servidor se descompone en diferentes programas que pueden ser ejecutados por diferentes computadoras aumentando así el grado de distribución del sistema.

La red cliente-servidor es una red de comunicaciones en la cual los clientes están conectados a un servidor, en el que se centralizan los diversos recursos y aplicaciones con que se cuenta; y que los pone a disposición de los clientes cada vez que estos son solicitados. Esto significa que todas las gestiones que se realizan se concentran en el servidor, de manera que en él se disponen los requerimientos provenientes de los clientes que tienen prioridad, los archivos que son de uso público y los que son de uso restringido, los archivos que son de sólo lectura y los que, por el contrario, pueden ser modificados, etc. Este tipo de red puede utilizarse conjuntamente en caso de que se esté utilizando en una red mixta.


El lenguaje de programación Pascal

Lenguaje de Programación Pascal, llamado así en honor del matemático y filósofo francés BlaisePascal.
El Lenguaje Pascal es un lenguaje strongly typed.


  Breve historia del lenguaje Pascal


    El lenguaje de programación Pascal es un lenguaje de alto nivel y propósito general (aplicable a una gran cantidad de aplicaciones diversas) desarrollado por el profesor suizo Niklaus Wirth (Instituto Tecnológico de Zurich, Suiza). El propósito de Wirth era crear un lenguaje para la enseñanza de técnicas de programación a estudiantes universitarios. Pero a medida que pasaban los años, Pascal se iba convirtiendo en un estándar en el mundo de la programación.

    Una versión preliminar del lenguaje apareció en 1968 y el primer compilador totalmente completo apareció a finales de 1970. Desde entonces, muchos compiladores han sido construídos y están disponibles para diferentes máquinas. Durante muchos años, el libro Pascal User Manual and Report , publicado por Wirth y Kathleen Jensen en 1974, ha servido de facto como estándar de todas las versiones.

    Las diferentes versiones ofrecían iterpretaciones ligeramente diferentes que impedían la compatibilidad entre ellas. Por estas razones, diferentes proyectos se iniciaron para producir una definición estándar del lenguaje y culminaron en dos estándar: uno de la Internacional Standard Organization (ISO) en 1982 y otro por un comité conjunto del American National Standards Institute (ANSI) y del Institute of Electrical and Electronics Engineers (IEEE). Estas dos versiones o definiciones se conocen como ISO Pascal y ANSI/IEEE Pascal, y difieren en algunos aspectos no especialmente significativos. Sin embargo, una versión no estándar se ha popularizado considerablemente: Turbo Pascal (marca registrada por Borland International, Inc.). Esta versión ha contribuido en gran medida a la popularización del lenguaje Pascal.



    PASCAL es un lenguaje relativamente moderno, desarrollado por Niklaus Wirth
( Turing award 1984 ) y su grupo de Zurich en 1971. Se trata de un lenguaje de propósito general, esto quiere decir que se puede emplear para construir todo tipo de aplicaciones. En la práctica también quiere decir que se trata de un lenguaje no diseñado para desarrollar ningún tipo específico de aplicaciones. Pero el PASCAL es especialmente útil para algo: para la enseñanza de buenos modos de programación. El PASCAL es hoy en día el lenguaje más usado para la enseñanza de la programación por varios motivos:



    - Posee unas reglas sencillas de sintaxis.



    - Es un lenguaje muy estructurado.



    - Realiza una comprobación exhaustiva de tipos de datos




    El hecho de que tenga una estructuración muy marcada permite que los programas sean fáciles de leer e interpretar, y facilita la escritura de programas del modo que hoy en día se estima correcto.

    El compilador de PASCAL es relativamente sencillo de realizar, por lo que se ha extendido a muchos tipos de plataformas, desde los ordenadores personales a los grandes ordenadores corporativos. Cuando una aplicación se escribe en PASCAL estandard puede compilarse en cualquier máquina en la que exista compilador de PASCAL, que son la mayoría.

Programa HelloWord en lenguaje Pascal


Program HeloWord(Input,Output);
Begin
 Writeln("Hello World!!!!!!!!");
End.





LISP: Manipulación de Listas

Especificado originalmente en 1958 por John McCarthy y sus colaboradores en el Instituto Tecnológico de Massachusetts, el Lisp es el segundo más viejo lenguaje de programación de alto nivel de extenso uso hoy en día; solamente el FORTRAN es más viejo.

Al igual que el FORTRAN, el Lisp ha cambiado mucho desde sus comienzos, y han existido un gran número de dialectos en su historia. Hoy, los dialectos Lisp de propósito general más ampliamente conocidos son el Common Lisp y el Scheme.

El Lisp fue creado originalmente como una notación matemática práctica para los programas de computadora, basada en el cálculo lambda de Alonzo Church. Se convirtió rápidamente en el lenguaje de programación favorito en la investigación de la inteligencia artificial (AI). Como uno de los primeros lenguajes de programación, el Lisp fue pionero en muchas ideas en ciencias de la computación, incluyendo las estructuras de datos de árbol, el manejo de almacenamiento automático, tipos dinámicos, y el compilador auto contenido.

El nombre LISP deriva del "LISt Processing" (Procesamiento de LIStas). Las listas encadenadas son una de las estructuras de datos importantes del Lisp, y el código fuente del Lisp en sí mismo está compuesto de listas. Como resultado, los programas de Lisp pueden manipular el código fuente como una estructura de datos, dando lugar a los macro sistemas que permiten a los programadores crear una nueva sintaxis de lenguajes de programación de dominio específico empotrados en el Lisp.

La intercambiabilidad del código y los datos también da a Lisp su instantáneamente reconocible sintaxis. Todo el código del programa es escrito como expresiones S, o listas entre paréntesis. Una llamada de función o una forma sintáctica es escrita como una lista, con la función o el nombre del operador en primer lugar, y los argumentos a continuación; por ejemplo, una función f que toma tres argumentos puede ser llamada usando (f x y z)


El Cálculo lambda


El cálculo lambda es un sistema formal diseñado para investigar la definición de función, la noción de aplicación de funciones y la recursión. Fue introducido por Alonzo Church y Stephen Kleene en la década de 1930; Church usó el cálculo lambda en 1936 para resolver el Entscheidungsproblem. Puede ser usado para definir de manera limpia y precisa qué es una "función computable". El interrogante de si dos expresiones del cálculo lambda son equivalentes no puede ser resuelto por un algoritmo general. Esta fue la primera pregunta, incluso antes que el problema de la parada, cuya indecidibilidad fue probada. El cálculo lambda tiene una gran influencia sobre los lenguajes funcionales, como Lisp, ML y Haskell.

Se puede considerar al cálculo lambda como el lenguaje universal de programación más pequeño. Consiste en una regla de transformación simple (sustitución de variables) y un esquema simple para definir funciones.

El cálculo lambda es universal porque cualquier función computable puede ser expresada y evaluada a través de él. Por lo tanto, es equivalente a las máquinas de Turing. Sin embargo, el cálculo lambda no hace énfasis en el uso de reglas de transformación y no considera las máquinas reales que pueden implementarlo. Se trata de una propuesta más cercana al software que al hardware.

Este artículo se enfocará sobre el cálculo lambda sin tipos, como fue diseñado originalmente por Church.




El lenguaje de programación C

 
Historia del Lenguaje C .



C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje B, a su vez basado en BCPL. Al igual que B, es un lenguaje orientado a la implementación de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones.

Se trata de un lenguaje débilmente tipificado ( weakly typed ) de medio nivel pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar código en ensamblador con código C o acceder directamente a memoria o dispositivos periféricos.

La primera estandarización del lenguaje C fue en ANSI, con el estándar X3.159-1989. El lenguaje que define este estándar fue conocido vulgarmente como ANSI C. Posteriormente, en 1990, fue ratificado como estándar ISO (ISO/IEC 9899:1990). La adopción de este estándar es muy amplia por lo que, si los programas creados lo siguen, el código es portátil entre plataformas y/o arquitecturas.



Filosofía

Uno de los objetivos de diseño del lenguaje C es que sólo sean necesarias unas pocas instrucciones en lenguaje máquina para traducir cada elemento del lenguaje, sin que haga falta un soporte intenso en tiempo de ejecución. Es muy posible escribir C a bajo nivel de abstracción; de hecho, C se usó como intermediario entre diferentes lenguajes.

En parte a causa de ser de relativamente bajo nivel y de tener un modesto conjunto de características, se pueden desarrollar compiladores de C fácilmente. En consecuencia, el lenguaje C está disponible en un amplio abanico de plataformas (seguramente más que cualquier otro lenguaje). Además, a pesar de su naturaleza de bajo nivel, el lenguaje se desarrolló para incentivar la programación independiente de la máquina. Un programa escrito cumpliendo los estándares e intentando que sea portátil puede compilarse en muchos computadores.

C se desarrolló originalmente (conjuntamente con el sistema operativo Unix, con el que ha estado asociado mucho tiempo) por programadores para programadores. Sin embargo, ha alcanzado una popularidad enorme, y se ha usado en contextos muy alejados de la programación de sistemas, para la que se diseñó originalmente.
Historia

El desarrollo inicial de C se llevó a cabo en los Laboratorios Bell de AT&T entre 1969 y 1973; según Ritchie, el periodo más creativo tuvo lugar en 1972. Se le dio el nombre "C" porque muchas de sus características fueron tomadas de un lenguaje anterior llamado "B".

Hay muchas leyendas acerca del origen de C y el Sistema de Operación con el que está íntimamente relacionado, Unix. Algunas de ellas son:

El desarrollo de C fue el resultado del deseo de los programadores de jugar con Space Travel. Habían estado jugando en el mainframe de su compañía, pero debido a su poca capacidad de proceso y al tener que soportar 100 usuarios, Thompson y Ritchie no tenían suficiente control sobre la nave para evitar colisiones con los asteroides.

Por ese motivo decidieron portar el juego a un PDP-7 de la oficina que no se utilizaba; pero esa máquina no tenía sistema operativo, así que decidieron escribir uno. Finalmente decidieron portar el sistema operativo del PDP-11 que había en su oficina, pero era muy costoso, pues todo el código estaba escrito en lenguaje ensamblador.

Entonces decidieron usar un lenguaje de alto nivel y portátil para que el sistema operativo se pudiera portar fácilmente de un ordenador a otro. Consideraron usar B, pero carecía de las funcionalidades necesarias para aprovechar algunas características avanzadas del PDP-11. Entonces empezaron a crear un nuevo lenguaje, C.

La justificación para obtener el ordenador original que se usó para desarrollar Unix fue crear un sistema que automatizase el archivo de patentes. La versión original de Unix se desarrolló en lenguaje ensamblador. Más tarde, el lenguaje C se desarrolló para poder reescribir el sistema operativo.

En 1973, el lenguaje C se había vuelto tan potente que la mayor parte del kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo implementados en un lenguaje distinto al ensamblador. (Algunos casos anteriores son el sistema Multics, escrito en PL/I, y Master Control Program para el B5000 de Burroughs, escrito en ALGOL en 1961).




El C de Kernighan y Ritchie

En 1978, Ritchie y Brian Kernighan publicaron la primera edición de El lenguaje de programación C, también conocido como La biblia de C. Este libro fue durante años la especificación informal del lenguaje. El lenguaje descrito en este libro recibe habitualmente el nombre de "el C de Kernighan y Ritchie" o simplemente "K&R C" (La segunda edición del libro cubre el estándar ANSI C, descrito más abajo.)

Kernighan y Ritchie introdujeron las siguientes características al lenguaje:

    El tipo de datos struct.
    El tipo de datos long int.
    El tipo de datos unsigned int.
    Los operadores (=+ y =-) fueron sustituidos por (+= y -=) para eliminar la ambigüedad sintáctica de expresiones como (i=-10), que se podría interpretar bien como (i =- 10) o bien como (i = -10).

El C de Kernighan y Ritchie es el subconjunto más básico del lenguaje que un compilador debe de soportar. Durante muchos años, incluso tras la introducción del ANSI C, fue considerado "el mínimo común denominador" en el que los programadores debían programar cuando deseaban que sus programas fueran transportables, pues no todos los compiladores soportaban completamente ANSI, y el código razonablemente bien escrito en K&R C es también código ANSI C válido.

En estas primeras versiones de C, las únicas funciones que necesitaban ser declaradas si se usaban antes de la definición de la función eran las que retornaban valores no enteros. Es decir, se presuponía que una función que se usaba sin declaración previa (prototipo) devolvería un entero.
Variantes

Desde el inicio del lenguaje han surgido varias ramas de evolución que han generado varios lenguajes:

    Objective-C es un primer intento de proporcionar soporte para la programación orientada a objetos en C, de escasa difusión, pero actualmente usado en Mac OS X y GNUstep.
    C++ (pronunciado C Plus Plus) diseñado por Bjarne Stroustrup fue el segundo intento de proporcionar orientación a objetos a C y es la variante más difundida y aceptada. Esta versión combina la flexibilidad y el acceso de bajo nivel de C con las características de la programación orientada a objetos como abstracción, encapsulación y ocultación.

También se han creado numerosos lenguajes inspirados en la sintaxis de C, pero que no son compatibles con él:

    Java, que une una sintaxis inspirada en la del C++ con una orientación a objetos más similar a la de Smalltalk y Objective C.
    JavaScript, un lenguaje de scripting creado en Netscape e inspirado en la sintaxis de Java diseñado para dar a las páginas web mayor interactividad. A la versión estandarizada se la conoce como ECMAScript.
    C# (pronunciado C Sharp) es un lenguaje desarrollado por Microsoft derivado de C/C++ y Java.



El programa HelloWord escrito en lenguaje C

 
 
#include <stdio.h>

int main()
{
        printf("Hola mundo");
        return 0;
}
 
 

Para descargar

 
El programa HelloWord pdf
 
Software Testing Tools 
 
Software Tools
 
The C Programming language Kernighan-Ritchie 
 
lenguaje C
 
The C programming Language 
 
SoftwareTools  Swap 

FORTRAN:lenguaje de programación alto nivel

John Warner Backus (Dic 3, 1924 – Mar17, 2007) dirigió el equipo que inventó el lenguaje de programación FORTRAN ( FORmula TRANslator ) e inventor de la Backus–Naur form (BNF),  notation para definir la sintaxis de un lenguaje formal. La primera versión de  FORTRAN fué dada en el año 1957 como "programming tool" para el  IBM 704. Ganador del Premio Turing en 1977.

 Ejemplo de programa en FORTRAN



PROGRAM EJEMPLO
REAL :: A, B, C
A=1
B=A+1
PRINT *, A,B
C=A+B+1
PRINT *,'C es igual a=',C
END



PROGRAM ejemplo1
          !
          ! Este programa lee tres números y calcula su suma y su media
          !
            IMPLICIT NONE
            REAL :: N1, N2, N3, Average = 0.0, Total = 0.0
            INTEGER :: N = 3
            PRINT *,' Introduce tres numeros (separados por espacio o coma).'
            PRINT *,' '
            READ(*,*),N1,N2,N3
            Total =  N1 + N2 + N3
            Average = Total/N
            PRINT *,'La suma de los tres numeros es ',Total
            PRINT *,'Y su promedio es ',Average
 
 END PROGRAM ejemplo1


11. Subprogramas

Cuando un programa tiene más de cien líneas, es difícil de seguir. Los códigos de Fortran que resuelven problemas reales de ingeniería por lo general tienen decenas de miles de líneas. La única forma para manejar códigos tan grandes, es usar una aproximación modular y dividir el programa en muchas unidades independientes pequeñas llamadas subprogramas. Un subprograma es una pequeña pieza de código que resuelve un subproblema bien definido. En un programa grande, se tiene con frecuencia que resolver el mismo subproblema con diferentes tipos de datos. En vez de replicar el código, estas tareas pueden resolverse con subprogramas. El mismo subprograma puede ser llamado varias veces con distintas entradas de datos.
En Fortran se tienen dos tipos diferentes de subprogramas, conocidas como funciones y subrutinas.

Funciones

Las funciones en Fortran son bastante similares a las funciones matemáticas: ambas toman un conjunto de variables de entrada (parámetros) y regresan un valor de algún tipo. Al inicio de la sección se comento de los subprogramas definidas por el usuario, pero Fortran 77 tiene también funciones incorporadas. Un ejemplo simple muestra como usar una función:
      x = cos(pi/3.0)
En este caso la función coseno cos de 60º, asignará a la variable x el valor de 0.5 (si pi ha sido definido correctamente; Fortran 77 no tiene constantes incorporadas). Hay varias funciones incorporadas en Fortran 77. Algunas de las más comunes son:

      abs     valor absoluto
      min     valor mínimo
      max     valor máximo
      sqrt    raíz cuadrada
      sin     seno
      cos     coseno
      tan     tangente
      atan    arco tangente
      exp     exponencial (natural)
      log     logaritmo (natural) 
 
En general, una función siempre tiene un tipo. Varias de las funciones incorporadas mencionadas anteriormente son sin embargo genéricas. Por lo tanto en el ejemplo anterior pi y x podrían ser del tipo real o del tipo double precision. El compilador revisará los tipos y usará la versión correcto de la función cos (real o double precision). Desafortunadamente, Fortran no es un lenguaje polimórfico, por lo que en general, el programador debe hacer coincidir los tipos de las variables y las funciones. Se revisa a continuación como implementar las funciones escritas por el usuario. Supongamos el siguiente problema: un meteorólogo ha estudiado los niveles de precipitación en el área de una bahía y ha obtenido un modelo (función) ll(m,t) donde ll es la cantidad de lluvia, m es el mes, y t es un parámetro escalar que depende de la localidad. Dada la fórmula para ll y el valor de t, calcular la precipitación anual
La forma obvia de resolver el problema es escribir un ciclo que corra sobre todos los meses y sume los valores de ll. Como el cálculo del valor de ll es un subproblema independiente, es conveniente implementarlo como una función. El siguiente programa principal puede ser usado:

      program lluvia
      real r, t, suma
      integer m
 
      read (*,*) t
      suma = 0.0
      do m = 1, 12
         suma = suma + ll(m, t)
      end do
      write (*,*) 'La precipitación Anual es ', suma, 'pulgadas'

      stop
      end
Además, la función ll tiene que ser definida como una función de Fortran. La fórmula del meteorólogo es:
      ll(m,t) = t/10 * (m**2 + 14*m + 46) si la expresión es positiva
      ll(m,t) = 0                         otro caso               
La correspondiente función en Fortran es
      real function ll(m,t)
         integer m
         real t

         ll = 0.1*t * (m**2 + 14*m + 46)
         if (ll .LT. 0) ll = 0.0

         return
      end
Se puede observar que la estructura de una función es parecida a la del programa principal. Las diferencias son:
  • Las funciones tienen un tipo. El tipo debe coincidir con el tipo de la variable que recibirá el valor.
  • El valor que devolverá la función, deberá ser asignado en una variable que tenga el mismo nombre que la función.
  • Las funciones son terminadas con la sentencia return en vez de la sentencia stop.
Para resumir, la sintaxis general de una función en Fortran 77 es:
      tipo function nombre (lista_de parámetros)
         declaraciones
         sentencias
         return
      end
La función es llamada simplemente usando el nombre de la función y haciendo una lista de argumentos entre paréntesis.

Subrutinas

Una función de Fortran puede devolver únicamente un valor. En ocasiones se desean regresar dos o más valores y en ocasiones ninguno. Para este propósito se usa la construcción subrutina. La sintaxis es la siguiente:
      subroutine nombre (lista_de_parámetros)
         declaraciones
         sentencias
         return
      end
Observar que las subrutinas no tienen tipo y por consecuencia no pueden hacerse asignación al momento de llamar al procedimiento. Se da un ejemplo de una subrutina muy sencilla. El propósito de la subrutina es intercambiar dos valores enteros.
      subroutine iswap (a, b)
         integer a, b
c Variables Locales
         integer tmp

         tmp = a
         a = b
         b = tmp

         return
      end
Se debe observar que hay dos bloques de declaración de variables en el código. Primero, se declaran los parámetros de entrada/salida, es decir, las variables que son comunes al que llama y al que recibe la llamada. Después, se declaran las variables locales, esto es, las variables que serán sólo conocidas dentro del subprograma. Se pueden usar los mismos nombres de variables en diferentes subprogramas.

Llamada por referencia

El lenguaje Fortran 77 usa el paradigma de llamada por referencia. Esto significa que en vez de pasar los valores de los argumentos a la función o la subrutina (llamada por valor), se pasa la dirección (apuntadores) de los argumentos.
      program llamaint
         integer m, n
c
         m = 1
         n = 2 

         call iswap(m, n)
         write(*,*) m, n

         stop
      end
La salida de este programa es "2 1", justo como se habría esperado. Sin embargo, si Fortran 77 hubiera hecho una llamada por valor entonces la salida hubiera sido "1 2", es decir, las variables m y n hubieran permanecido sin cambio. La razón de esto último, es que solamente los valores de m y n habrían sido copiados a la subrutina iswap, a pesar de que a y b hubieran sido cambiados dentro de la subrutina, por lo que los nuevos valores no sería regresados al programa que hizo la llamada. En el ejemplo anterior, la llamada por referencia era lo que se quería hacer. Se debe tener cuidado al escribir código en Fortran, porque es fácil introducir efectos laterales no deseados. Por ejemplo, en ocasiones es tentador usar un parámetro de entrada en un subprograma como una variable local y cambiar su valor. No se deberá hacer nunca, ya que el nuevo valor se propagará con un valor no esperado.
Se revisará más conceptos cuando se vea la sección de Arreglos en subprogramas para pasar arreglos como argumentos.


Ejercicios

Ejercicios A
Escribir una función llamada fac que tome un entero n como entrada y regrese n! (factorial de n). Probar la función usando el siguiente programa main
      program prbfac
c
c Ejercicio A, seccion 11.
c Programa Main para probar la función factorial.
c
      integer n, fac

  10  continue
         write(*,*) 'Dame n: '
         read (*,*) n
         if (n.gt.0) then
            write(*,*) ' El factorial de', n, ' es', fac(n)
            goto 10
         endif
c     End of loop

      stop
      end
(Tip: Se tiene que usar un ciclo para implementar la función ya que Fortran 77 no soporta llamadas recursivas.)
Ejercicio B
Escribir una subrutina cuad que tome tres números reales a,b,c como entrada y encuentre las raíces de la ecuación ax**2 + bx + c = 0. Si las raíces son complejas, se deberá mostrar un mensaje de error como el siguiente:
      write(*,*) 'Advertencia: Raices Complejas.'
También se deberá escribir un programa main que pruebe la subrutina.



Programando en FORTRAN pdf download

Introducción al FORTRAN pdf  

Programación en FORTRAN pdf