– Typeset by GMNI & FoilTEX –
LENGUAJE C: ´ de los Lenguajes de Programacion ´ Evolucion ´ F. Navarrina, I. Colominas, H. Gomez, J. Par´ıs, M. Casteleiro
GMNI — G RUPO
DE
´ M ETODOS N UM E´ RICOS
EN I NGENIER´I A
´ ´ ´ Departamento de Metodos Matematicos y de Representacion ´ Escuela Tecnica Superior de Ingenieros de Caminos, Canales y Puertos ˜ Espana ˜ Universidad de A Coruna,
e-mail:
[email protected] ´ pagina web: http://caminos.udc.es/gmni ˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
´INDICE ´ I Principales paradigmas de programacion ´ I Lenguaje Maquina I Ensamblador I FORTRAN I Lenguajes compilados I BASIC I Lenguajes interpretados
´ estructurada I Programacion I FORTRAN 77 I Lenguaje C I Tendencias actuales I Curiosidades ˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
´ (I) Principales paradigmas de programacion
PRINCIPALES PARADIGMAS (en Ingenier´ıa): ´ I Lenguaje Maquina:
Hardware
(< 1940 aprox.)
I Ensamblador:
Software
(1940–1950 aprox.)
I FORTRAN/II/IV:
Compiladores
(1950–1960 aprox.)
I BASIC:
´ Interpretes
(1960–1970 aprox.)
I PASCAL:
Prog. Estructurada
(1970–1980 aprox.)
I FORTRAN 77:
(influencia del Pascal)
(1977)
I Lenguaje C:
Portabilidad, S.O. UNIX
(1980–1990 aprox.)
I Lenguaje C++:
Prog. orientada a objeto
(1990–2000 aprox.)
I Fortran 90/95/2003:
(influencia del C)
(1990,1995,2003)
I Java:
Internet
(> 2000 aprox.)
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
´ Lenguaje Maquina (I) ´ LENGUAJE MAQUINA I Secuencia de bits (agrupados en bytes) que corresponden a las instrucciones que debe ejecutar el procesador y a los datos fijos ´ ´ del programa (esencialmente constantes numericas y/o alfanumericas) . ´ directa de un programa en lenguaje maquina ´ I La codificacion es ♠ muy costosa, ♠ muy farragosa, y ♣ ABSOLUTAMENTE DEPENDIENTE DEL HARDWARE.
´ I Ejemplos: (vease la carpeta EjemplosDeArchivosDeTextoYBinarios) • El archivo hello.exe es un archivo binario que contiene un programa ejecutable. • El archivo hello.exe.txt muestra los bytes que forman el archivo hello.exe, • y el archivo hello.exe.b.txt muestra los correspondientes bits.
´ se utiliza en dispositivos muy sencillos. I En la actualidad solo ˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Ensamblador (I) ENSAMBLADOR I Lenguaje de MUY BAJO NIVEL. (*) I El programador dispone de un repertorio de instrucciones elementales ´ sencillas, relativamente faciles de recordar. Por ejemplo: STO N
´ de memoria N. −→ Guardar (“‘store”) en la posicion
RCL N
´ de memoria N. −→ Leer (“recall”) el contenido de la posicion
+,-,*,/
−→ Sumar, restar, multiplicar, dividir.
=
−→ Calcular el resultado de las operaciones anteriores.
JMP #L
−→ Si el resultado anterior es 0, ir (“jump”) a la l´ınea L.
STP
−→ Parar el programa (“stop”).
I Un programa (ASSEMBLER) se encarga de ENSAMBLAR (**) ´ el codigo y construir el correspondiente programa ejecutable
´ ´ (*) Muy proximo al lenguaje maquina. ´ (**) Traducir el programa a lenguaje maquina y ˜ anadir lo que sea necesario para que pueda ejecutarse.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Ensamblador (II) ´ en ENSAMBLADOR sigue siendo I La programacion ♠ muy costosa, ♠ muy farragosa, y ♣ ABSOLUTAMENTE DEPENDIENTE DEL HARDWARE.
´ se utiliza cuando se necesita sacar el maximo ´ I En la actualidad solo partido al hardware.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Ensamblador (III) I Ejemplo: Programa para calcular factoriales realizado en ´ un hipotetico ENSAMBLADOR #01: #02: #03: #04: #05: #06: #07: #08: #09: #10: #11: #12: #13: #14: #15: #16: #17:
STO 1 STO RCL JMP * RCL = STO RCL 1 = STO GTO RCL STP
01 02 01 #16 02 02 01
01 #04 02
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
FORTRAN (I) FORTRAN / II / IV
I Lenguaje de ALTO NIVEL. (*) ˜ I Disenado por John Backus para IBM en 1953, como ´ alternativa al Lenguaje Maquina de un ordenador IBM 704. I El primer compilador fue distribuido en 1957. John Backus (1924–2007). Creador del FORTRAN (1953) en IBM. (Fuente: IBM)
´ (*) Alejado del lenguaje maquina.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
FORTRAN (II)
´ ♣ FORTRAN proviene de FORmula TRANslator (“traductor de formulas”). ´ de las formulas ´ ♥ La codificacion es sencilla. ♣ La sintaxis viene condicionada por el soporte (tarjetas perforadas).
En efecto . . .
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
FORTRAN (IIIa) I Origen: Tarjetas Perforadas (”punch cards”)
Tarjeta Perforada. (Fuente: )
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
FORTRAN (IIIb) I Origen: Perforadora de Tarjetas
Perforadora de Tarjetas. (Fuente: )
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
FORTRAN (IIIc) I Origen: Programa FORTRAN en tarjetas perforadas
Programa FORTRAN en tarjetas perforadas. (Fuente: )
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
FORTRAN (IIId) I Origen: Lectora de Tarjetas
Programa FORTRAN en tarjetas perforadas. (Fuente: )
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
FORTRAN (IV) ´ de memoria es r´ıgida pero predecible. (*) ♣ La gestion ´ ♣ Las instrucciones de control son muy primitivas. Basicamente. .. ♣ GOTO incondicional ´ ♠ IF aritmetico
♣ DO – CONTINUE ♣ CALL
´ PROGRAMA PRINCIPAL + SUBRUTINAS ♣ Modelo de implementacion: • SUBRUTINA = subprograma B CALL transfiere el control a un subprograma B que forma parte del programa ejecutable o ´ conoce el programa ejecutable B cuya localizacion (ejemplo: librer´ıas del sistema)
• La transfencia de argumentos se realiza POR REFERENCIA.
´ de un programa debe haber (*) En principio (siempre que el programa este´ bien hecho) cuando comienza la ejecucion ´ de todos los calculos, ´ memoria suficiente para la realizacion por lo que todo deber´ıa funcionar correctamente (sin detenciones por falta de recursos, “cuelgues” del sistema, etc.)
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
FORTRAN (V) I Ejemplo: Programa FORTRAN IV para calcular factoriales
C 100 500 600
1000 110
PROGRAMA PARA CALCULAR FACTORIALES READ(5,100) N FORMAT(I5) NFAC=1 CONTINUE IF (N) 1000, 1000, 600 CONTINUE NFAC=NFAC*N N=N-1 GOTO 500 WRITE(6,110) NFAC FORMAT(I10) STOP END
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Lenguajes Compilados (I) LENGUAJES COMPILADOS I FORTRAN ES EL PROTOTIPO DE LENGUAJE COMPILADO • El programador escribe el programa fuente (uno o varios archivos *.f, *.for). • Un programa (compilador FORTRAN) se encarga de COMPILAR (*) el programa fuente (uno o varios archivos *.f, *.for) y crear los correspondientes programas objeto (archivos *.o, *.obj) • Otro programa (linker) se encarga de LINKAR (**) el/los programa/s objeto (archivos *.o, *.obj) y ´ crear el correspondiente programa ejecutable (archivo *.exe o sin extension). ´ • Una vez creado, el programa ejecutable (archivo *.exe o sin extension) puede utilizarse cuantas veces sea necesario.
´ (*) Traducirlo/s a lenguaje maquina. (**) Dimensionar la memoria necesaria y unir (“link”) todas las partes.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Lenguajes Compilados (II) Programa Fuente (*.f, *.for)
⇓
´ COMPILACION [compilador]
Programa Objeto (*.o, *.obj)
⇓ Datos
→
LINKADO
[linker]
Programa Ejecutable (*.exe, sin ext.)
⇓
´ EJECUCION
[loader o debugger (*)]
Resultados (*) Debugger (depurador): loader que permite ejecutar paso a paso un programa ´ y que tiene herramientas que permiten localizar donde se producen los errores.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Lenguajes Compilados (III) I ERRORES: ♣ de Planteamiento ˜ que impiden que el programa funcione correctamente. Errores conceptuales o de diseno
´ ♣ de Compilacion Errores gramaticales que impiden compilar el programa fuente y generar el correspondiente programa objeto.
♣ de Linkado Errores estructurales que impiden linkar el programa objeto y generar el correspondiente programa ejecutable.
´ (“run–time”) (*) ♣ de Ejecucion Errores de tipo general que impiden ejecutar el programa ejecutable y obtener los resultados.
´ dif´ıcil de encontrar. (*) Bug: error de ejecucion
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Lenguajes Compilados (IV) Errores de Planteamiento ˜ que impiden que el programa funcione Errores conceptuales o de diseno correctamente: ♠ uso de algoritmos inadecuados o incorrectos, ♠ errores en los datos.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Lenguajes Compilados (V) ´ Errores de Compilacion Errores gramaticales que impiden compilar el programa fuente y generar el correspondiente programa objeto: ´ ♠ errores ortograficos (instrucciones mal escritas) o ´ ♠ errores sintacticos (proposiciones mal construidas).
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Lenguajes Compilados (VI) Errores de Linkado Errores estructurales que impiden linkar el programa objeto y generar el correspondiente programa ejecutable: ♠ dimensionamiento incorrecto de la memoria o ♠ falta de alguna de las subrutinas/funciones.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Lenguajes Compilados (VII) ´ (“run–time”) Errores de Ejecucion Errores de tipo general que impiden ejecutar el programa ejecutable y obtener los resultados: ♠ errores ocultos que no fueron detectados ni al compilar ni al linkar, ♠ incapacidad del ordenador para ejecutar el programa ´ memoria de la que hay disponible o B el programa requiere mas B falta alguna de las subrutinas/funciones del sistema,
´ del ♠ errores ocultos de cualquiera de los tipos anteriores que impiden la ejecucion programa, ´ prohibida B conducen a una operacion ´ por 0, ra´ız cuadrada de un numero (ej: division negativo) o ´ B se producen errores en la lectura de datos.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
BASIC (I) BASIC ´ ordenadores, mas ´ rapidos, ´ ´ pequenos, ˜ ´ baratos. . . ♥ Mas mas mas ´ mas ´ comoda: ´ ♥ Interaccion MONITORES CRT frente a tarjetas perforadas. ´ se pone al alcance de personas sin experiencia ♣ La programacion ´ tecnica ´ con poca formacion y sin mentalidad anal´ıtica. (*) ˜ sobre el FORTRAN ♣ Algunas opiniones de nuevo cuno ♠ Es muy ¡dif´ıcil! programar en este lenguaje. ♠ Es muy ¡fastidioso! tener que compilar y linkar antes de ejecutar. ♣ El estilo del lenguaje se ha quedado anticuado. ´ de memoria es demasiado r´ıgida. ♣ La gestion
(*) Carecer de estas capacidades no tiene por que´ ser malo (en general), ´ de algunas actividades pero dificulta la realizacion ˜ sistemas que funcionen o programar ordenadores). (como calcular integrales, disenar
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
BASIC (II)
´ lo adivina? (*) ♣ BASIC proviene de . . . ¿a ver quien ´ de las formulas ´ ♥ La codificacion es tan sencilla como en FORTRAN. ♣ La sintaxis es muy parecida a la del FORTRAN con algunas novedades que se deben a la nueva forma de trabajar. (**)
(*) BASIC
=⇒ Beginner’s All-purpose Symbolic Instruction Code.
(**) Cada l´ınea tiene ahora un numero. ´ Los numeros de l´ınea establecen el orden en el que deben interpretarse las instrucciones. Se pueden intercalar una ´ nueva l´ınea en cualquier parte del programa: basta con escribir la ll´ınea mediante el teclado, comenzando con un numero intermedio entre los de otras dos l´ıneas correlativas. ´
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
BASIC (III) ´ de memoria es flexible, pero impredecible. (*) ♣ La gestion ♣ Las instrucciones de control son similares a las del FORTRAN. ´ Basicamente. .. ♣ GOTO incondicional ♦ IF – THEN ♥ FOR – NEXT ♠ GOSUB
´ PROGRAMA PRINCIPAL ♣ Modelo de implementacion: SUBRUTINA = parte del programa principal ♠ GOSUB equivale a un GOTO con retorno.
(*) La memoria se dimensiona sobre la marcha. Por tanto, se pueden producir detenciones por falta de recursos, “cuelgues” del sistema, etc.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
BASIC (IV) I Ejemplo: Programa BASIC para calcular factoriales
10 20 30 40 50 60 70 80 90
REM PROGRAMA PARA CALCULAR FACTORIALES READ N NFAC=1 IF (N 0; nf *= n--); printf("%d", nf); }
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Lenguaje C (VIIIb) I Ejemplo: Programa en Lenguaje C (compactado) para calcular factoriales
#include main(){ int n,nf;scanf("%d",&n);for(nf=1;n>0;nf*=n--);printf("%d",nf); }
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Tendencias actuales (I) ´ ORIENTADA A OBJETOS PROGRAMACION ´ que se basa en la utilizacion ´ de I Paradigma de programacion • objetos y de • sus interacciones.
´ I Se basa en varias tecnicas, entre las que se incluyen: • herencia, • modularidad, • polimorfismo, y • encapsulamiento.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Tendencias actuales (II) LENGUAJE C++ I Lenguaje de NIVEL MEDIO. (*) ˜ I Disenado por Bjarne Stroustrup para Bell Laboratories hacia 1980, a partir del Lenguaje C. I En esencia es una de las extensiones del Lenguaje C (**) ´ conocida) (tal vez la mas ´ orientada a objetos. que incluye herramientas de programacion
´ combina elementos caracter´ısticos de lenguajes tanto de alto como de bajo nivel. (*) Su organizacion (**) C++ es muy habitual en entornos Linux. C++ y C# son muy habituales en entornos Windows. Objective C es muy habitual en entornos Mac OS.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Tendencias actuales (III) JAVA I En esencia es otra de las extensiones del Lenguaje C ´ orientada a objetos que incluye herramientas de programacion y de la que se han eliminado operaciones de bajo nivel (para evitar que se cometan errores). ˜ 90. I Fue desarrollada por Sun Microsystems a principios de los anos ´ de aplicaciones y a la I Esta´ especialmente orientado a la ejecucion ´ a traves ´ de Internet. visualizacion
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Tendencias actuales (IV) Fortran 90/95/2003 ´ ... ♣ El Fortran se acomoda a las nuevas tendencias (una vez mas)
♥ El lenguaje existe como standard ANSI a partir de 1992. ´ ♥ Se incorporan conceptos propios de otros lenguajes y estilos de programacion: ´ ALLOCATABLE e instruccion ´ ALLOCATE. (*) ♦ Declaracion ´ de 80 caracteres ´ ♥ Archivos fuente tipo Free-form (mas por l´ınea).
♣ Punteros, recursividad, operaciones vectoriales, prog. orientada a objetos, etc.
♥ Se procura eliminar inconsistencias internas y causas de errores frecuentes: ♠ En Fortran 90 se declaran obsoletas algunas instrucciones, aunque se permite su uso. ´ (**) En Fortran 95 se proh´ıbe su utilizacion.
´ potente y versatil ´ que sus precedentes, pero tambien ´ ♥ El nuevo lenguaje es mas ´ dif´ıcil de aprender, ♠ menos intuitivo y mas
[=⇒ no gusta a programadores noveles]
♠ menos atractivo que otros lenguajes modernos. [=⇒ no gusta a programadores profesionales]
´ (*) Es posible dimensionar memoria adicional en tiempo de ejecucion. (**) Algunos programas antiguos no pueden ser recompilados directamente.
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Curiosidades (I) I The Hello World Collection http://www.roesler-ac.de/wolfram/hello.htm
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Curiosidades (IIa) ´ ´ los lenguajes de programacion ´ en el futuro? I ¿Como seran
Cartel de FUTURAMA (izda.) y Robot BENDER (derecha). [Matt Groening y David X. Cohen, FOX Broadcasting Company]
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Curiosidades (IIb) ´ ´ los lenguajes de programacion ´ en el futuro? I ¿Como seran
BENDER con FRY (izda.) y BENDER (derecha) bebiendo. [Matt Groening y David X. Cohen, FOX Broadcasting Company]
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A
Curiosidades (IIc) ´ ´ los lenguajes de programacion ´ en el futuro? I ¿Como seran
Caja (izda.) y botella (derecha) de OLDE FORTRAN. [Matt Groening y David X. Cohen, FOX Broadcasting Company]
˜ — G RUPO DE M ETODOS ´ U NIVERSIDAD DE A C ORU NA N UM E´ RICOS EN I NGENIER´I A