Sei sulla pagina 1di 23

Universidad de Panamá

Centro Regional Universitario de Veraguas


Facultad de Informática Electrónica Y
Comunicación

Estructura de los lenguaje de


Programación.

Parcial # 1:
Importancia del estudio de los lenguajes de
Programación.

Facilitador:
Diego Santimateo.

Participantes:

Santillana, Fabricio. 2-718-1147

Septiembre, 2007
Enunciado:
Parcial #1

Importancia del estudio de los lenguajes de programación

Para concretar la lectura del capítulo 1: El estudio de los lenguajes de


programación del libro Lenguajes de Programación de Terrence W. Pratt,
proponemos la realización del siguiente ejercicio, el cual debe ser entregado
individualmente el 1 de septiembre.

Resumen:
¿Por qué estudiar Los Lenguajes de Programación?

Para entender el diseño e implementación de los lenguajes:


 sintaxis - reglas de construcción de los programas
 semántica - significado de los programas
 implementación - cómo se ejecutan
 pragmática - aspectos prácticos de su uso

Para saber qué lenguaje es más apropiado para resolver cierto tipo de
problemas:
 imperativo: PascaL / C / PHP
 Orientado a Objetos: SMALLTALK / C++ / JAVA
 Funcional: Haskell / LISP/ ML
 Lógico: Prolog / Mercury / Goedel

Para mejorar el conocimiento de los lenguajes que ya utilizamos


Para mejorar nuestras técnicas de programación
Programar = definir nuevas extensiones de un lenguaje
Para saber proyectar nuevos lenguajes
Para poder aprender fácilmente nuevos lenguajes

Aspectos a desarrollar en la tarea:

1. Mejora el conocimiento del lenguaje que está usando


El lenguaje más utilizado por ustedes es el C, no obstante, le invitamos a
leer sobre expresiones regulares y luego hacer uso del scanf(“% [ ]”)
para identificar cuál es la verdadera función del scanf(“% [ ]”). Presente
los ejemplos utilizados por usted con sus respectivas observaciones y
comentarios. ¿Cuál es el papel de las expresiones regulares en el
scanf?(10 ptos)

2. Enriquece su vocabulario de construcciones útiles de


programación
Elabore un glosario de 10 términos nuevos para usted, que considere de
importancia en el área de programación. Seleccione uno y haga un
ejemplo. (10 ptos)

3. Permite una mejor selección del lenguaje de programación


Determine cual de los siguientes lenguajes recomienda para leer una
línea de texto y separarla en palabras: C, Pascal, PHP. Explique,
ejemplifique y concluya.(10 ptos)

4. Facilita el diseño de un nuevo lenguaje


Analice la estructura de control conocida como GOTO. Identifique
lenguajes que la incluyen en su diseño y comente sobre nuevas
estructuras de control inspiradas en el uso del GOTO y en qué lenguajes
aparecen. Explique, ejemplifique y concluya. (10 ptos)
Resumen del Capitulo 1: El estudio de los lenguajes de programación del
libro Lenguaje de Programación de Terrence W. Pratt

¿Por qué estudiar los lenguajes de programación?

1. Mejora el conocimiento del lenguaje que está usando.

Conocer ciertas características de los lenguajes que un programador utiliza


puede beneficiarlo dado que se puede ahorrar tiempo de computadora y evitar
los errores de lógica.

2. Enriquece su vocabulario de construcciones útiles de programación.

Cuando se busca la solución de un problema, se tiende a busca datos y


estructuras de programaciones adecuadas, al estudiar las construcciones
proporcionada por una amplia variedad de lenguajes y la manera como se
implementan aumenta nuestro lenguaje de construcción, porque para emplear
un constructor mientras se programa en un lenguaje que no lo proporciona
directamente, el programador debe dar su propia implementación.

3. Permite una mejor selección del lenguaje de programación.

Algunos lenguaje son mejores para la solución de problemas que otros, no


porque sean lenguajes malos, sino, porque ofrecen mejores procesamientos de
datos para los cuales requerimos para dicha solución, reduciendo
enormemente el esfuerzo de codificación. Por ejemplo: si se desea un lenguaje
para procesar una cadena es más fácil en SNOBOL4 que en FORTRAN o
COBOL.

4. Hace más fácil el aprendizaje de un nuevo lenguaje.

Al tener conocimiento profundo de las estructuras de los lenguajes de


programación se pueden aprender otros lenguajes más fácilmente, pues se
conoce en que fueron basados cuando fueron diseñados.
5. Facilita el diseño de un nuevo lenguaje.

Si se esta familiarizado con varias construcciones y métodos de


implementación de lenguajes comunes se simplifica el diseño del programa,
porque no es necesario crearlas nuevamente.

Principales influencias en la evolución de diseños de lenguajes:

1. Hardware de la computadora y sistemas operativos.

Al evolucionar las computadoras también lo hicieron los lenguaje de


programación, porque se hizo necesario acceder al hardware de la máquina de
distinta forma a lo que se hacia, además con las nuevas tecnologías de
hardware no se hizo necesario que los sistemas operativos lo controlen todo el
tiempo, para ello el hardware incluye ahora su propia sistema operativo.

2. Aplicaciones.

Las aplicaciones han evolucionado de aplicaciones con fines militares,


científicos, negocios, e industriales a paquetes de ofimáticas, juegos entre
otros. Por lo cual se necesitan lenguajes cumplen tal fin. Como por ejemplo
para elaborar gráficos.

3. Métodos de programación.

Los lenguajes de programación han evolucionado a la medida como han


aumentado nuestros conocimientos.

4. Método de implementación.

El desarrollo de métodos para una mejor implementación ha afectado a la


selección de las características que se deben incluir en nuevos diseños.
5. Estudios teóricos.

La investigación en las fundaciones conceptúales para diseños de lenguajes e


implementación, usando métodos de matemática formal.

6. Estandarización

La necesidad de lenguajes estándares que se pueden aplicar en cualquier


sistema informático.

Características de un buen lenguaje.

1. Claridad, simplicidad y unidad de los conceptos del lenguaje.

El lenguaje debe proporcionar una estructura conceptual para pensar acerca


del algoritmo, debe ser una ayuda para el programador.

2. Claridad de la sintaxis del programa.

El lenguaje debe poseer una sintaxis que sea fácil de utilizar en la codificación
del programa y que permita y refleje las estructuras propias de un lenguaje.

3. Naturalidad es su aplicación.

El lenguaje debe proporcionar estructuras de datos adecuadas, operaciones,


estructuras de control y una sintaxis natural para resolver el problema.

4. Soporte de la abstracción.

Permitir el uso de términos dentro de los lenguajes de programación que


utilizamos como lenguaje natural.
5. Facilidad de verificación del programa.

El lenguaje de programación debe estar diseñado de tal forma que al codificar


un programa con el sea fácil de encontrar errores de sintaxis o de lógicas.

6. Medio ambiente de la programación.

El lenguaje de programación debe contar con una gran variedad de


herramientas que le facilite al programador editar, documentar los códigos
escritos, material de ayuda entre otros.

7. Portabilidad de los programas.

Los programas escritos con el lenguaje deben ser fáciles de transporta de un


sistema a otro.

8. Costo de uso.

El costo que es ciertamente un elemento principal en la evolución de cualquier


lenguaje de programación.

a. Costo de la ejecución del programa. El costo que con lleva la


ejecución, en la optimización, la localización de registros eficientes y
diseño de compiladores.

b. Costo de la traducción del programa. Aplicaciones optimizadas por


compiladores tiendan a costar más en el proceso de traducción que una
que no ha sido optimizada.

c. Costo de la creación de un programa, prueba y uso. El tiempo que


demora en diseñar, codificar y probar una aplicación determina si es
rentable o no.
d. Costo de mantenimiento de un programa. Mantener un software en
funcionamiento durante años para que haga frente a las nuevas
plataformas y aplicaciones trae un costo elevado.

Desarrollo de la tarea:

1. Mejorar el conocimiento del lenguaje que está usando

La función de librería scanf es la encargada de esperar y capturar una entrada


por parte del usuario. Esta función esta definida para dos argumentos siendo el
primero para determinar el tipo de datos que debe introducir el usuario y el
segundo la variable en la cual será almacenado dichos datos y que haya sido
definido. El primer argumento es conocido como formato de datos y esta
formado por dos partes: el caracter % y otro caracter o caracteres que
interpretan el dato de entrada. Las más usuales que hemos utilizados son: d, s,
c, f; Adicional a los mencionados anterior mente están las caracteres [ ], estos
corchetas agrupan tiene como función caracteres o grupos de caracteres, como
si se tratase de un vector, scanf interpreta este parámetro como un cambio en
el modo como trabaja, ahora no solo asigna una cadena de caracteres a una
variable, también realiza una búsqueda dentro de la cadena o cadenas
tecleadas por el usuario. Como si se tratase de un autómata finito determinista
y aplicando el concepto de expresión regular (patrón), la función scanf analiza
la cadena introducida recorriéndola de derecha a izquierda y almacenando
solo la parte de la cadena que cumpla con los caracteres que hallamos
designados dentro de los corchetes.
Si definidos dentro de los corchetes las letras a, e, i, o, u la función scanf solo
aceptara y asignara parte o toda la cadena que solo contengan las letras
designadas, en este caso las vocales.
Utilizando el compilador y entorno de desarrollo Dev – C++ presento una serie
de ejemplos que describe tales afirmaciones:
Ejemplo 1: en este ejemplo se introducirá en el programa una cadena
constituida solo por vocales

Código fuente:

Ejecución:

Como se puede observar la cadena fue aceptada y asignada a la variable


definida (cadena), porque estaba formada solo por vocales.

Ejemplo 2: Si deseamos capturar cadenas solo por consonantes podemos


utilizar el carácter “^”, este caracter es interpretado por scanf como una
negación. Por ejemplo si utilizamos como parámetro “%[^aeiou]”, scanf
aceptara cadenas o parte de ellas que solo estén formada por caracteres
diferentes a los asignados, en este contexto por consonantes.

Código:

Ejecución:

Ejemplo 3: ahora en este ejemplo mostrare lo que ocurre cuando la cadena


esperada por scanf esta compuesta por vocales, pero recibe una cadena
formada por consonantes:
Al desplegar la variable (cadena) se muestran símbolos sin ningún sentido,
esto es indicativo de que a dicha variables no se le ha asignado valor.

Ejemplo 4: en este ejemplo se muestra como scanf analiza la cadena de


izquierda a derecha truncando la cadena al encontrar un carácter que no
cumpla con los símbolos definidos.

Utilizando el código del código del ejemplo obtenemos el siguiente resultado:

Como se observa en esta ejecución la cadena fue truncada justo al encontrar


una consonante.

Ejemplo 5: Otra funcionalidad de scanf(“%[ ]), es el uso de “|” que se describe


como la disyunción (o) y es útil para encontrar varias alternativas de patrones la
cadena. Como se muestra en el siguiente código se espera aceptar cadenas
con patrones como: norte, sur, este y oeste. Hay que recordar que scanf
realizara una búsqueda y aceptara como símbolos válidos aquellos por los
cuales están constituidos dichas palabras
Código:

Ejecución:

La cadena fue aceptada porque tiene el patrón “norte” y todos sus caracteres
están formados por caracteres definidos dentro de los corchetes en scanf.

Esta función de scanf es útil en la búsqueda de patrones o expresiones


regulares de cadenas, aquí, en este punto de la asignación se presentaron
ejemplos sencillos, pero puede ser una herramienta poderosa en el manejo de
caracteres, para finalizar este punto considero que la función scanf busca
dentro de la cadena solo lo que definamos necesario por lo que algunas de las
cadenas pueda que no sean expresiones regulares.
2. Enriquece su vocabulario de construcciones útiles de programación

Durante el desarrollo de esta asignación me he encontrado con una gran


variedad de térmicos, pero por su importancia he elegido los siguientes
términos:

1. Conversión: características de los lenguajes de programación que nos


permiten que una expresión de un tipo sea tratada como una expresión
de otro tipo, dichas conversiones pueden ser implícitas o explícitas, por
ejemplo la conversión de un tipo int a long es implícita, sin embargo la
conversión de un tipo long a un tipo int es explícita.

2. Corrutina: Estructura de control de subprogramas donde se permite


regresar a su programa de llamada antes de que complete su ejecución,
es decir, cuando una corrutina recibe el control de otro subprograma, se
ejecuta parcialmente y luego se suspende cuando regresa el control.

3. Estandarización: Filosofía en el desarrollo de los lenguajes de


programación donde se pretende que dichos lenguajes pueden
implementar con facilidad en diversos sistemas de computadoras y que
posean características similares, pero sin alejarse demasiado de los
principios básicos de programación.

4. Implementación: se trata de un proceso donde se lleva a cabo la


aplicación de un diseño.

5. Interfaz: formatos de datos y comando que son proporcionados por el


programa (software) o programador (conjunto de métodos, funciones,
etc.) que son proporcionados con el programa.

6. Interprete: un intérprete es un programa de computadora que ejecuta o


lleva a cabo instrucciones escritas en un lenguaje de programación. La
interpretación es una de las formas de ejecución de los programas de
computadoras o códigos lenguajes, la otra es la compilación.
7. Plataforma: Es un gran software, como un sistema operativo, que sirve
como base para ejecutar determinadas aplicaciones compatibles con
este. También son plataformas la arquitectura de hardware, los
lenguajes de programación y sus librerías en tiempo de ejecución, las
consolas de videojuegos, etc.

8. Regular: en la programación, se utiliza para describir la manera como se


repiten ciertos patrones en cadenas de caracteres o en la repetición de
códigos fuentes.

9. Traducción: proceso mediante el cual se traduce un programa de un


lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente
lenguaje máquina).

10.Virtual: En computación se utiliza para designar a todo aquellos que


tiene existencia dentro de una simulación informática.

Con frecuencia nos encontramos con lenguaje débil o fuertemente tipado esto
quiero decir que, depende del nivel en que se encuentre, se permite o no
realizar asignaciones entre tipos distintos de datos con la finalidad de evitar la
pérdida de precisión en operaciones, no obstante, las conversiones se realizan
en forma automáticos por el compilador:

A continuación presento los siguientes ejemplos:

Ejemplo 1: En este ejemplo se presentan dos códigos escritos en lenguajes


diferentes: C y pascal. C es un lenguaje tipado en un nivel medio mientras que
pascal lo es fuertemente. En ambos códigos fuentes se utilizo el mismo
algoritmo, se trata de una simple suma.
En C:

Al compilar el compilador indica que:

No obstante, se permita la ejecución del programa, pues, se trata de una


advertencia.
Pero en Pascal:

Al compilar no se muestra un mensaje de advertencia, por lo contrario, un


mensaje de error impide la ejecución del programa:

Ejemplo 2: para este ejemplo se modificaron los códigos levemente, no se


realizara la asignación:
En C:

Al compilar no se muestra ninguna advertencia y la ejecución del programa se


realiza.

En Pascal:
Y el resultado es el mismo, una compilación exitosa:

En este ejemplo se realiza la conversión de tipos, mientras que en el primer


ejemplo se realiza la conversión de tipo, pero no se permite la asignación
(Pascal) dado que puede existir perdida de precisión en las operaciones.

3. Permite una mejor selección del lenguaje de programación

Al elegir un lenguaje para la realización de una tarea debemos de pensar más


que todo en su claridad en la sintaxis y que posea una gran variedad de
funciones internas o de librerías y herramientas que nos permita ahorrar
tiempo en el diseño y escritura del código fuente. Para elegir cuál de estos tres
lenguajes: C, Pascal y PHP me basare en los puntos señalados. Los tres
lenguajes tienen una sintaxis clara y funciones que nos permite utilizar, sin
embargo, un de los lenguajes, Pascal, no posee una función que nos permite
leer un línea completa desde el teclado o desde un archivo y dividirla por
palabras. Por otro lado, C y PHP son similares ambos poseen funciones
similares y la sintaxis de PHP es similar a la de C y poseen una amplia
colección de funciones para el manejo de caracteres:

Ahora supongamos que deseamos leer una línea desde el teclado y dividirla
por palabras, en PHP sería:
En C sería:
Al parecer un código en PHP, para realizar esta tarea, requiere de una mayor
cantidad de líneas, pero al comparar los códigos encontramos que son
similares, ambos lenguajes de programación poseen funciones con las cuales
podemos leer y separar la línea de texto. No obstante, se hace más sencillo en
PHP que en C, porque en C para separar la cadena se requiere el uso de
punteros que puede resultar confuso y llevar a cometer errores de lógica. Otro
punto que hay que mencionar es que en C se limita aún más la cantidad de
palabras que puede tener la línea de texto dado que se utiliza un vector para
almacenarla. Ambos lenguajes realizan la misma tarea en la misma forma sólo
que en C nos acercamos un poco más a un nivel bajo de programación y en
PHP a la programación Web. Pienso que la elección de que lenguaje es mejor
para esta operación estará definidas para que entorno estará definido el
programa que hagamos. Por la sencillez para separar palabras de una línea de
texto funciones recomendaría a PHP siempre que se para la Web.

4. Facilita el diseño de un nuevo lenguaje

La estructura de control GOTO es una sentencia utilizada para cambiar o


controlar el flujo de control del programa a una etiqueta sin utilizar condiciones.
Es una instrucción primitiva para traspasar el control de una parte del programa
a otra, tal es así que muchos compiladores traducen muchas instrucciones de
control como BRAKE en GOTO.

Muchas lenguajes de programación incluyen GOTO en su diseños tal es el


caso de FORTRAN, Algol, COBOL, SNOBOL, BASIC, Lisp, C, C++, Pascal,
Perl, ensamblador, entre otros. Conocido en este último como BRA, JMP o
JUMP.

Sin embargo, esta sentencia que tiene sus inicios desde los primeros lenguajes
de programación tiene sus ventajas y desventajas, algunas de sus ventajas y
desventajas que he investigado son:
Entre sus principales ventajas están:

• Puede eliminar código duplicado.

• Permitir simular construcciones de control estructuradas ausentes en


lenguajes de programación primitivos.

• Alterar la linealidad del flujo de un programa es otro argumento a su


favor.

• Rapidez de desarrollo de los programas, y en algunos casos la mayor


velocidad y el menor tamaño del código resultante.

Desventajas:

• Conduce a código de más baja calidad por cuanto es más difícil


comprender, depurar, probar y mantener programas que emplean esta
instrucción.

• Obstaculiza las optimizaciones del compilador.

• El empleo de subprogramas en los lenguajes modernos evita la


necesidad de su utilización.

• Si bien GOTO simula estructuras de control en lenguajes primitivos, en


las situaciones en la que se utilicen lenguajes de programación
modernos se recomienda emplear las que éstos ofrecen para evitar la
creación de código con un estilo de programación pobre, defectuoso y
de baja calidad.

Como se ha visto, la sentencia GOTO cambia el control en el flujo del


programa, pero muchas sentencias han sido inspiradas GOTO que ha sido
utilizada desde los primeros lenguajes. Estas sentencias se encuentran en la
mayoría, sino, que en todos lenguajes de programación de nivel medio y alto
nivel. Estas son: switch, case, if, bucles como: for, do/while y while.

Presento el siguiente ejemplo. En este ejemplo simulo un bucle (for) utilizando


GOTO en lenguaje de programación C

Sin expresión GOTO:

Con expresión GOTO:


En el código escrito en C en donde se utiliza la sentencia GOTO se observa
que el código posee más líneas. Pienso que esta sentencia es útil, pero de
igual forma, como se menciona en las desventajas, el código puede resultar
confuso, pues, si no se tiene cuidado en un código más extenso puede resultar
muy difícil de corregir o encontrar el problema de una ejecución no
satisfactoria. Además, un código con sentencias GOTO pueda que no cumpla
con la metodología de programación estructurada, en este caso por haber
usado C, porque el código en algunos casos parece dar “saltos” en vez de
ejecutarse secuencialmente o en forma ordenada.

Potrebbero piacerti anche