Está en la página 1de 24

INDICE SEMANA 01

1.
Introduccin.
2.
Los Ordenadores.
3.
Algoritmo: definicin, caractersticas fundamentales.
4.
Programa: concepto, Tipos: programa fuente, programa objeto.
5.
Instruccin.
6.
Lenguaje de Programacin: definicin, tipos: Bajo nivel
(lenguaje mquina, intermedios (Lenguaje ensamblador) y alto nivel.
7.
Intrpretes y compiladores.

1. Introduccin
La Informacin
Es ms que un conjunto de datos suficientemente organizados y entendibles
(algunas veces organizados utilizando tecnologa pero no necesariamente).
Informtica.
Es la Ciencia que estudia, aplica y optimiza el tratamiento eficiente de
la informacin.

2. Los Ordenadores
Un computador es bsicamente una mquina que realiza dos funciones
bsicas: ejecuta en forma muy rpida una secuencia de instrucciones
(programa) y almacena y recupera grandes cantidades de informacin
(datos). De acuerdo a esto, un computador puede caracterizarse por su
velocidad de operacin (medida en Hertz o ciclos por segundo), el tipo de
instrucciones que puede ejecutar (esto determina el tipo de computador) y
la capacidad de su memoria (medida en bytes).
Organizacin de una computadora
Unidad de entrada. Es la seccin receptora de la computadora. Obtiene
informacin (datos y programas de cmputo) desde varios dispositivos de
entrada y pone esta informacin a disposicin de las otras unidades para
que pueda procesarse.
Unidad de salida. Toma informacin que ya ha sido procesada por sta y la
coloca en los diferentes dispositivos de salida, para que est disponible
fuera de la computadora.
Unidad de memoria primaria Almacena los programas de la computadora
mientras se ejecutan. Retiene la informacin que se introduce a travs de
la unidad de entrada, para que la informacin pueda estar disponible de
manera inmediata para procesarla cuando sea necesario.
Unidad aritmtica y lgica (ALU). Es la responsable de realizar clculos
como suma, resta, multiplicacin y divisin. Contiene los mecanismos de
decisin que permiten a la computadora hacer operaciones como, por
1

ejemplo, comparar dos elementos de la unidad de memoria para determinar


si son iguales o no.
Unidad central de procesamiento (CPU). Es la seccin administrativa de
la computadora. Coordina y supervisa la operacin de las dems secciones.
Unidad de almacenamiento secundario. Es la seccin de almacn de alta
capacidad y de larga duracin de la computadora. Los programas o datos
que no se encuentran en ejecucin por las otras unidades, normalmente se
colocan en dispositivos de almacenamiento secundario, como el disco duro.

3. Algoritmos
Conceptos bsicos.
En el campo de las ciencias de la computacin la solucin de problemas se
describe mediante el diseo de procedimientos llamados algoritmos, los
cuales posteriormente se implementan como programas.
Ahora definamos mejor Qu es un Algoritmo?
Un algoritmo es un conjunto de pasos secuenciales y ordenados que
permiten resolver un problema.
Que sean pasos secuenciales significa que deben ser ejecutados uno
despus de otro y que sean pasos ordenados quiere decir que deben llevar
un orden casi obligatorio (u obligatorio en la mayora de los casos).
Veamos un ejemplo:
Desarrollar un algoritmo que nos permita adquirir el libro "Cien aos de
soledad" de Gabriel Garca Mrquez.
Algoritmo: Salimos del lugar en donde estemos y nos dirigimos hacia una
librera. En caso de que ya estemos en una pues sencillamente solicitamos
si tienen el libro, si lo tienen lo adquirimos y si no lo tienen vamos a
otra libreria en donde repetimos el proceso.
Algoritmo_Libro
Inicio
1.
Saber cul es el libro que se quiere adquirir
2.
Desplazarnos hacia la librera.
3.
Preguntar si tienen el libro que necesitamos
4.
Si lo tienen:
adquirirlo y Parar all(dentro de este algoritmo)
Si no lo tienen:
ir al paso 2
FIN
Caractersticas de un algoritmo
>>>No ambiguo: explicito, siempre sabe que comando ejecutar.
>>>Finito: El algoritmo termina en un numero finito de pasos.
>>>Tener cero o ms entradas: Datos son proporcionados a un algoritmo
2

como insumo (o estos son generados de alguna forma) para llevar a cabo
las operaciones que comprende.
>>>Tener una o ms salidas: Debe siempre devolver un resultado; de nada
sirve un algoritmo que hace algo y nunca sabemos que fue.
>>> La definicin de un algoritmo debe describir tres partes: Entrada,
Proceso y Salida.
Entrada: definir lo que necesita el algoritmo.
Proceso: realizar una secuencia de acciones.
Salida: definir lo que produce.
>>>Los algoritmos son independientes tanto del lenguaje de programacin
en que se expresan como de la computadora que los ejecuta. En cada
problema el algoritmo se puede expresar en un lenguaje diferente de
programacin y ejecutarse en una computadora distinta; sin embargo, el
algoritmo ser siempre el mismo. As, por ejemplo, en una analoga con la
vida diaria, una receta de un plato de cocina se puede expresar en
espaol, ingls o francs, pero cualquiera que sea el lenguaje, los pasos
para la elaboracin del plato se realizaran sin importar el idioma del
cocinero.
>>>Los algoritmos son ms importantes que los lenguajes de programacin o
las computadoras. Un lenguaje de programacin es tan solo un medio para
expresar un algoritmo y una computadora es solo un procesador para
ejecutarlo. Tanto el lenguaje de programacin como la computadora son los
medios para obtener un fin: conseguir que el algoritmo se ejecute y se
efectu el proceso correspondiente.
Los algoritmos se clasifican en:
>>>Algoritmos Informales
Definidos como todos aquellos algoritmos que no son realizables a travs
de un computador o al menos no fcilmente. Son aquellos algoritmos en
donde el ejecutor real es el ser humano como el algoritmo para dar un
beso, el algoritmo para fritar unos huevos o el algoritmo para conseguir
un libro.
>>>Algoritmos Computacionales
Se consideran como tales todos aquellos algoritmos que deben ser
preferiblemente implementados en un computador para aprovechar su
velocidad de procesamiento. Un ejemplo de estos puede ser el algoritmo
que genere los primeros 100 nmeros primos.

Conceptos bsicos de algoritmos II: Eficiencia


Un objetivo natural en el desarrollo de un programa computacional es
mantener tan bajo como sea posible el consumo de los diversos
recursos(tiempo, espacio, etc.), aprovechndolos de la mejor manera que
se encuentre. Se desea un buen uso eficiente de los recursos disponibles,
sin desperdiciarlos. Es por eso que existen criterios para determinar qu
tan "bueno" es un algoritmo o cual es el ms adecuado para la solucin de
3

un problema, distinto de ver si trabaja o no, o hasta qu punto es


general la aplicabilidad del mismo. Dichos criterios involucran aspectos
tales como: velocidad, eficiencia, etc.
Concepto de Eficiencia
Un algoritmo es eficaz cuando alcanza el objetivo primordial, el anlisis
de resolucin del problema lo realiza prioritariamente, y claro, esa es
el objetivo de todo algoritmo. Pero un algoritmo logra ser eficiente
cuando llega a sus objetivos planteados utilizando la menor cantidad de
recursos posibles, es decir, minimizando el uso memoria, de pasos y de
esfuerzo humano.
Puede darse el caso de que exista un algoritmo eficaz pero no eficiente,
en lo posible debemos de manejar estos dos conceptos conjuntamente.
La eficiencia de un programa tiene dos ingredientes fundamentales:
espacio y tiempo.
La eficiencia en espacio es una medida de la cantidad de memoria
requerida por un programa.
La eficiencia en tiempo se mide en trminos de la cantidad de tiempo de
ejecucin del programa.
Ambas dependen del tipo de computador y compilador.
La calidad de un algoritmo puede ser avalada utilizando varios criterios.
Uno de los criterios ms importantes es el tiempo utilizado en la
ejecucin del algoritmo.
Normalmente, un problema se puede resolver por mtodos distintos, con
diferentes grados de eficiencia. Por ejemplo: bsqueda de un numero en
una gua telefnica.
Cuando se usa un computador es importante limitar el consumo de recursos.
Recurso Tiempo:
Aplicaciones informticas que trabajan en tiempo real requieren que los
clculos se realicen en el menor tiempo posible.
Aplicaciones que manejan un gran volumen de informacin si no se tratan
adecuadamente pueden necesitar tiempos impracticables.
Recurso Memoria:
Las maquinas tienen una memoria limitada.
Concepto de Instancia
Un problema computacional tiene una o ms instancias, que son valores
particulares para los datos de entrada, sobre los cuales se puede
ejecutar el algoritmo para resolver el problema.
Ejemplo: el problema computacional de multiplicar dos nmeros enteros
tiene por ejemplo, las siguientes instancias: multiplicar 345 por 4653,
multiplicar 2637 por 10000, multiplicar 32341 por 12, etc.
Un problema computacional abarca a otro problema computacional si las
instancias del segundo pueden ser resueltas como instancias del primero
en forma directa.

Tamao de los Datos


Es claro que para cada algoritmo la cantidad de recurso (tiempo, memoria)
utilizados depende fuertemente de los datos de entrada. En general, la
cantidad de recursos crece a medida que crece el tamao de la entrada.
El anlisis de esta cantidad de recursos no es viable de ser realizado
instancia por instancia.

4. Programas
Los programas son procedimientos que solucionan problemas y que se
expresan en un lenguaje conocido por el computador.
Programa Fuente: Es un conjunto de instrucciones que estan expresados
bajo las regla sintcticas y semnticas de un lenguaje de programacin.
Programa Objeto: El cdigo objeto es el resultado de la compilacin del
cdigo fuente. Para obtener un programa ejecutable se han de enlazar
todos los archivos de cdigo objeto con un programa llamado
enlazador(linker).

5. Instrucciones
En programacin, una instruccin indica a la computadora la o las
operaciones que sta debe realizar con unos datos determinados.

6. Lenguaje de Programacin
Los lenguajes de programacin son idiomas artificiales diseados para
expresar clculos y procesos que sern llevados a cabo por ordenadores.
Un lenguaje de programacin est formado por un conjunto de palabras
reservadas, smbolos y reglas sintcticas y semnticas que definen su
estructura y el significado de sus elementos y expresiones.

Lenguajes de Bajo Nivel


Son aquellos lenguajes en los cuales sus instrucciones son para nosotros
complejas de entender pero que son extremadamente sencillas para ser
entendidas por el computador.
Existen dos tipos de lenguajes de bajo nivel: el lenguaje mquina y el
lenguaje ensamblador.
>>>El lenguaje de mquina (tambin denominado lenguaje de primera
generacin) es el sistema de cdigos directamente interpretable por un
circuito micro-programable, como el microprocesador de una computadora.
Este lenguaje est compuesto por un conjunto de instrucciones que
determinan acciones a ser tomadas por la mquina. Un programa consiste en
una cadena de estas instrucciones de lenguaje de mquina (ms los datos).
Estas instrucciones son normalmente ejecutadas en secuencia, con
eventuales cambios de flujo causados por el propio programa o eventos
5

externos. El lenguaje de mquina es especfico de cada mquina o


arquitectura de la mquina, aunque el conjunto de instrucciones
disponibles pueda ser similar entre ellas[os].
8B542408
FA027706
B9010000
C84AEBF1

83FA0077 06B80000 0000C383


B8010000 00C353BB 01000000
008D0419 83FA0376 078BD98B
5BC3

Funcin en 32-bits en cdigo de maquina x86, para calcular el ensimo


nmero de la serie de Fibonacci[1]
>>>Lenguaje ensamblador
Este lenguaje, tambin es conocido como lenguaje de segunda generacin.
En general se utiliza este tipo de lenguaje para programar controladores
(drivers).El lenguaje de bajo nivel por excelencia es el ensamblador.
Las instrucciones en lenguaje ensamblador son instrucciones de un
programa usando abreviaturas del ingls, tambin llamadas palabras
nemotcnicas, tales como: ADD, DIV, SUB, etc. . Una instruccin tpica de
suma sera:
ADD M, N, P
Un programa escrito en lenguaje ensamblador no puede ser ejecutado
directamente por la computadora en esto se diferencia esencialmente del
lenguaje mquina, sino que requiere una fase de traduccin al lenguaje
mquina.
El programa original escrito en lenguaje ensamblador se denomina programa
fuente y el programa traducido en lenguaje mquina se conoce como
programa objeto, ya directamente entendible por la computadora.
El traductor de programas fuente a objeto es un programa llamado
ensamblador, existente en casi todos los computadores.

Lenguajes de Alto Nivel


Precisamente pensando en estas desventajas de la programacin a Bajo
Nivel y sabiendo que quien realmente desarrollaba los programas era el
ser humano y no la mquina y que la maquina gracias a su velocidad era
solo la encargada de ejecutar la orden que se le diera, se pens en crear
unos Lenguajes de programacin que fueran ms entendibles al ser humano o
sea unos Lenguajes de Programacin en donde las ordenes fueran tan
sencillas de comprender que programar se convirtiera en algo realmente
sencillo. Estos Lenguajes fueron llamados Lenguajes de Alto Nivel
sabiendo que de todas maneras el computador necesitara otro programa que
6

tomara lo que se escribiera y lo convirtiera a lenguaje de bajo nivel (ya


que no podemos olvidar que este es el verdadero lenguaje del computador).
De all surgi la idea de los Interpretadores y los Compiladores.

Ventajas:

Genera un cdigo ms sencillo y comprensible.

La escritura de los programas se basa en reglas sintcticas


similares a los lenguajes humanos, nombres de las instrucciones
tales como READ, WRITE, PRINT,OPEN, etc.

Permite una mejor documentacin.


Desventajas

Algunos requieren que la maquina cliente posea una determinada


plataforma.

No se aprovechan los recursos internos de la mquina que se


explotan mucho mejor en lenguajes mquina y ensambladores.

Aumento de la ocupacin de memoria.

El tiempo de ejecucin de los programas es mucho mayor.


>>>Lenguajes Interpretados
Son aquellos lenguajes de programacin en donde existe un programa
interpretador que no es ms que un programa que coge nuestro programa y
lo convierte lnea a lnea a Lenguaje de Bajo Nivel
y as mismo lo va ejecutando (o sea lnea a lnea). Estos lenguajes
tenan de inconveniente que si el programa tena un error en una de las
ltimas lneas solo hasta cuando el interpretador llegaba hasta all era
que se detectaba, luego de que ya se habia ejecutado todo un gran bloque
de instrucciones.
Lenguajes interpretados de uso comn:
ActionScript, ASP (hasta la versin 3), Bash, Gambas, Cobol, JavaScript,
Lua, Python
,VBScript, Ruby, entre otros.
>>>Lenguajes Compilados
Son aquellos lenguajes en donde un programa llamado compilador toma TODO
el programa que hemos escrito (que normalmente se denomina Programa
Fuente), lo revisa y solo hasta cuando este completamente bien, solo
hasta all lo convierte a su equivalente en Lenguaje de Bajo Nivel para
ser ejecutado por el computador.
Algunos ejemplos tpicos de lenguajes compilados:
Fortran.
La familia de lenguajes de C, incluyendo C++ y Objective C pero no Java.
Ada, Pascal (incluyendo su dialecto Delphi).

7. Interprete y Compilador
Interprete
Para cada sentencia que compone el texto de entrada, se realiza una
traduccin, ejecuta dicha sentencia y vuelve a iniciar el proceso con la
sentencia siguiente.
Ventajas del intrprete frente al compilador:
El programa se puede ejecutar de inmediato, sin esperar a ser
compilado.
Puede ser interrumpido con facilidad.
puede ser rpidamente modificado y ejecutado nuevamente.
Resultan muy apropiados durante la fase de desarrollo de un
programa, ya que la compilacin no permite la ejecucin paso a paso
del programa y con ello impide la edicin seguimiento y depuracin
del programa.
Desventajas del intrprete frente al compilador:
La ejecucin es ms lenta, pues cada intruccin debe ser traducida
a cdigo mquina tantas veces como sea ejecutada.
No son adecuados en la fase de explotacin del programa ya que el
proceso de interpretacin se ha de repetir cada vez que se ejecuta
el programa, mientras que con la compilacin, una vez obtenido el
programa en leguaje mquina ste puede ser ejecutado sin necesidad
de compilarlo de nuevo.
Un intrprete facilita la bsqueda de errores, pues la ejecucin de un
programa puede interrumpirse en cualquier momento para estudiar el
entorno (valores de las variables, etc.). Adems, el programa puede
modificarse sobre la marcha, sin necesidad de volver a comenzar la
ejecucin.
Compilador
Un compilador es un programa especial que procesa las instrucciones
escritas en un lenguaje de programacin de alto nivel y las convierte a
lenguaje de mquina.
Un compilador suele generar programas ms rpidos y eficientes, ya que el
anlisis del lenguaje fuente se hace una sola vez, durante la generacin
del programa equivalente. En cambio, un intrprete se ve obligado
generalmente a analizar cada instruccin tantas veces como se ejecute.
Partes de un compilador
El anlisis del programa fuente y la sntesis del programa objeto.
Anlisis: Se trata de la comprobacin de la correccin del programa
fuente, e incluye las fases correspondientes al Anlisis lxico
(que consiste en la descomposicin del programa fuente en
componentes lxicos), Anlisis sintctico (agrupacin de los
componentes lxicos en frases gramaticales ) y Anlisis semntico
8

(comprobacin de la validez semntica de las sentencias aceptadas


en la fase de Anlisis Sintctico).
Sntesis: Su objetivo es la generacin de la salida expresada en el
lenguaje objeto y suele estar formado por una o varias
combinaciones de fases de Generacin de Cdigo (normalmente se
trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de
Cdigo (en las que se busca obtener un cdigo lo ms eficiente
posible).
Alternativamente, las fases descritas para las tareas de anlisis y
sntesis se pueden agrupar en Front-end y Back-end:
Front-end: es la parte que analiza el cdigo fuente, comprueba su
validez, genera el rbol de derivacin y rellena los valores de la
tabla de smbolos. Esta parte suele ser independiente de la
plataforma o sistema para el cual se vaya a compilar, y est
compuesta por las fases comprendidas entre el Anlisis Lxico y la
Generacin de Cdigo Intermedio.
Back-end: es la parte que genera el cdigo mquina, especfico de
una plataforma, a partir de los resultados de la fase de anlisis,
realizada por el Front End.
Esta divisin permite que el mismo Back End se utilice para generar el
cdigo mquina de varios lenguajes de programacin distintos y que el
mismo Front End que sirve para analizar el cdigo fuente de un lenguaje
de programacin concreto sirva para generar cdigo mquina en varias
plataformas distintas. Suele incluir la generacin y optimizacin del
cdigo dependiente de la mquina.
El cdigo que genera el Back End normalmente no se puede ejecutar
directamente, sino que necesita ser enlazado por un programa enlazador
(linker).
Errores detectados por un Compilador
Errores de sintaxis
Son las omisiones que cometemos cuando transcribimos el programa. Es
normal que se nos olvide cerrar un parntesis que hemos abierto o
declarar una variable. El compilador nos dice a travs de un aviso cul
es el error y nos ubica aproximadamente en donde est. Cabe anotar que
estos errores no dejan que el programa sea ejecutado.
Errores fatales:
Son raros. Indican errores internos del compilador.
Cuando ocurre la compilacin se detiene inmediatamente.
Advertencias o avisos (warnings):
Indican que hay lneas de cdigo sospechosas que a pesar de no infringir
ninguna regla sintctica, el compilador las encuentra susceptibles de
provocar un error. Cuando se detecta un warning la compilacin no se
detiene. Si en un programa fuente slo se detectan warnings s que se
podr obtener un programa objeto, que tras el linkado dar lugar a un
programa ejecutable.

Tipos
Compiladores cruzados: generan cdigo para un sistema distinto del que
estn funcionando.
Compiladores optimizadores: realizan cambios en el cdigo para
mejorar su eficiencia, pero manteniendo la funcionalidad del
programa original.
Compiladores de una sola pasada: generan el cdigo mquina a partir
de una nica lectura del cdigo fuente.
Compiladores de varias pasadas: necesitan leer el cdigo fuente
varias veces antes de poder producir el cdigo mquina.

Proceso de Compilacin
Un programa fuente se puede dividir en mdulos almacenados en archivos
distintos. La tarea de reunir el programa fuente a menudo se confa a un
programa distinto, llamado preprocesador.
Normalmente la creacin de un programa ejecutable (un tpico.exe para
Microsoft Windows o DOS) conlleva dos pasos. El primer paso se llama
compilacin (propiamente dicho) y traduce el cdigo fuente escrito en un
lenguaje de programacin almacenado en un archivo a cdigo en bajo nivel
(normalmente en cdigo objeto, no directamente a lenguaje mquina). El
segundo paso se llama enlazado en el cual se enlaza el cdigo de bajo
nivel generado de todos los ficheros y subprogramas que se han mandado
compilar y se aade el cdigo de las funciones que hay en las bibliotecas
del compilador para que el ejecutable pueda comunicarse directamente con
el sistema operativo, traduciendo as finalmente el cdigo objeto a
cdigo mquina, y generando un mdulo ejecutable.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de
la fase de compilacin en archivos objetos (un tpico.obj para Microsoft
Windows, DOS o para Unix); para enlazarlos en fases posteriores, o crear
directamente el ejecutable; con lo que la fase de compilacin se almacena
slo temporalmente. Un programa podra tener partes escritas en varios
lenguajes (por ejemplo C, C++ y Asm), que se podran compilar de forma
independiente y luego enlazar juntas para formar un nico mdulo
ejecutable.
Un preprocesador es un programa separado que es invocado por el compilador
antes de que comience la traduccin real. Un preprocesador de este tipo puede
eliminar los comentarios, incluir otros archivos y ejecutar sustituciones de
macros.

Funciones
Procesamiento de macros. Un preprocesador puede permitir a un usuario
definir macros, que son abreviaturas de construcciones ms grandes.
Inclusin de archivos. Un preprocesador puede insertar archivos de
encabezamiento en el texto del programa. Por ejemplo, el preprocesador de C

10

hace que el contenido del archivo <global.h> reemplace a la proposicin


#include <global.h> cuando procesa un archivo que contenga a esa proposicin.
Preprocesadores "racionales". Estos preprocesadores enriquecen los
lenguajes antiguos con recursos ms modernos de flujo de control y de
estructuras de datos. Por ejemplo, un preprocesador de este tipo podra
proporcionar al usuario macros incorporadas para construcciones, como
proposiciones while o if, en un lenguaje de programacin que no las tenga.

Un enlazador (en ingls, linker) es un programa que toma los objetos generados
en los primeros pasos del proceso de compilacin, la informacin de todos los
recursos necesarios (biblioteca), quita aquellos recursos que no necesita, y
enlaza el cdigo objeto con su(s) biblioteca(s) con lo que finalmente produce
un fichero ejecutable o una biblioteca.

Etapas del proceso


>>>Fase de anlisis
Anlisis lxico
El anlisis lxico constituye la primera fase, aqu se lee el programa
fuente de izquierda a derecha y se agrupa en componentes lxicos (tokens),
que son secuencias de caracteres que tienen un significado. Adems, todos
los espacios en blanco, lneas en blanco, comentarios y dems informacin
innecesaria se elimina del programa fuente. Tambin se comprueba que los
smbolos del lenguaje (palabras clave, operadores, etc.) se han escrito
correctamente.
Un token o tambin llamado componente lxico es una cadena de caracteres que
tiene un significado coherente en cierto lenguaje de programacin. Ejemplos de
tokens, podran ser palabras clave (if, else, while, int, ...), identificadores,
nmeros, signos, o un operador de varios caracteres, (por ejemplo, :=).
SI Nuevo > MxNm ENTONCES... los tokens son: "SI" "NUEVO" ">" "MxNm"
"entonces" los tokens se describen por lo general en dos partes, un tipo o
clase y un valor: Token=(Tipo,Valor) para la secuencia anterior, los tokens
pueden describirse como: (palabra reservada, SI) (identificador, "NUEVO")
(operador, >) (identificador, "MxNm") (palabra reservada,ENTONCES).

Anlisis sintctico
En esta fase los caracteres o componentes lxicos se agrupan
jerrquicamente en frases gramaticales que el compilador utiliza para
sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es
sintcticamente correcto (obedece a la gramtica del lenguaje). Por lo
general, las frases gramaticales del programa fuente se representan
mediante un rbol de anlisis sintctico.
Anlisis semntico
La fase de anlisis semntico revisa el programa fuente para tratar de
encontrar errores semnticos y rene la informacin sobre los tipos para
11

la fase posterior de generacin de cdigo. En ella se utiliza la


estructura jerrquica determinada por la fase de anlisis sintctico para
identificar los operadores y operandos de expresiones y proposiciones.
Un componente importante del anlisis semntico es la verificacin de
tipos. Aqu, el compilador verifica si cada operador tiene operandos
permitidos por la especificacin del lenguaje fuente. Por ejemplo, las
definiciones de muchos lenguajes de programacin requieren que el
compilador indique un error cada vez que se use un nmero real como
ndice de una matriz. Sin embargo, la especificacin del lenguaje puede
imponer restricciones a los operandos, por ejemplo, cuando un operador
aritmtico binario se aplica a un nmero entero y a un nmero real.
Revisa que los arreglos tengan definido el tamao correcto.
Fase de sntesis
Consiste en generar el cdigo objeto equivalente al programa fuente. Slo se genera cdigo objeto
cuando el programa fuente est libre de errores de anlisis, lo cual no quiere decir que el programa
se ejecute correctamente, ya que un programa puede tener errores de concepto o expresiones mal
calculadas. Por lo general el cdigo objeto es cdigo de mquina relocalizable o cdigo
ensamblador.
Generacin de cdigo intermedio
Despus de los anlisis sintctico y semntico, algunos compiladores
generan una representacin intermedia explcita del programa fuente. Se
puede considerar esta representacin intermedia como un programa para una
mquina abstracta. Esta representacin intermedia debe tener dos
propiedades importantes; debe ser fcil de producir y fcil de traducir
al programa objeto.
Optimizacin de cdigo
La fase de optimizacin de cdigo consiste en mejorar el cdigo
intermedio, de modo que resulte un cdigo mquina ms rpido de ejecutar.
Esta fase de la etapa de sntesis es posible sobre todo si el traductor
es un compilador (difcilmente un intrprete puede optimizar el cdigo
objeto). Hay mucha variacin en la cantidad de optimizacin de cdigo que
ejecutan los distintos compiladores. En los que hacen mucha optimizacin,
llamados compiladores optimizadores, una parte significativa del tiempo
del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones
sencillas que mejoran sensiblemente el tiempo de ejecucin del programa
objeto sin retardar demasiado la compilacin.

12

INDICE SEMANA 02
1. Conceptos Fundamentales y Programacin.
2. Datos, tipos de datos, identificadores y variables.
3. Expresiones: aritmticas, relacionales y lgicas.
4. Instrucciones bsicas de programacin: Asignacin, lectura
y escritura.
5. Laboratorio: Resolver problemas de la vida diaria mediante
el uso de algoritmos en lenguaje natural (secuencia de pasos).
1. Conceptos Fundamentales de Programacin
La programacin es el proceso de disear, codificar, depurar y mantener
el cdigo fuente de programas computacionales. El cdigo fuente es
escrito en un lenguaje de programacin. El propsito de la programacin
es crear programas que exhiban un comportamiento deseado. El proceso de
escribir cdigo requiere frecuentemente conocimientos en varias reas
distintas, adems del dominio del lenguaje a utilizar, algoritmos
especializados y lgica formal. Programar no involucra necesariamente
otras tareas tales como el anlisis y diseo de la aplicacin (pero s el
diseo del cdigo), aunque s suelen estar fusionadas en el desarrollo de
pequeas aplicaciones.
La programacin se rige por reglas y un conjunto ms o menos reducido de
rdenes, expresiones, instrucciones y comandos que tienden a asemejarse a
una lengua natural acotada (en ingls); y que adems tienen la
particularidad de una reducida ambigedad. Cuanto menos ambiguo es un
lenguaje de programacin, se dice, es ms potente. Bajo esta premisa, y
en el extremo, el lenguaje ms potente existente es el binario, con
ambigedad nula (lo cual lleva a pensar as del lenguaje ensamblador).
Se han propuesto diversas tcnicas de programacin cuyo objetivo es
mejorar tanto el proceso de creacin de software como su mantenimiento.
Entre ellas, se pueden mencionar las siguientes:
programacin estructurada
programacin modular
programacin orientada a objetos
Un paradigma de programacin es una propuesta tecnolgica que es adoptada
por una comunidad de programadores cuyo ncleo central es incuestionable
en cuanto a que unvocamente trata de resolver uno o varios problemas
claramente delimitados.
La programacin estructurada es un paradigma de programacin orientado a
mejorar la claridad, calidad y tiempo de desarrollo de un programa de
computadora, utilizando nicamente subrutinas y tres estructuras:
secuencia, seleccin (if y switch) e iteracin (bucles for y while),
13

considerando innecesario y contraproducente el uso de la instruccin de


transferencia incondicional (GOTO), que podra conducir a "cdigo
espagueti", que es mucho ms difcil de seguir y de mantener, y era la
causa de muchos errores de programacin.
Ventajas de la programacin estructurada

Ventajas de la programacin estructurada comparada con el modelo


anterior (hoy llamado despectivamente cdigo espagueti).

Los programas son ms fciles de entender, pueden ser ledos de


forma secuencial y no hay necesidad de hacer engorrosos seguimientos en
saltos de lneas (GOTO) dentro de los bloques de cdigo para intentar
entender la lgica.

La estructura de los programas es clara, puesto que las


instrucciones estn ms ligadas o relacionadas entre s.

Reduccin del esfuerzo en las pruebas y depuracin. El seguimiento


de los fallos o errores del programa ("debugging") se facilita debido a
su estructura ms sencilla y comprensible, por lo que los errores se
pueden detectar y corregir ms fcilmente.

Reduccin de los costos de mantenimiento. Anlogamente a la


depuracin, durante la fase de mantenimiento, modificar o extender los
programas resulta ms fcil.

Los programas son ms sencillos y ms rpidos de confeccionar.

Se incrementa el rendimiento de los programadores, comparado con la


forma anterior que utiliza GOTO.
La programacin modular es un paradigma de programacin que consiste en
dividir un programa en mdulos o subprogramas con el fin de hacerlo ms
legible y manejable.
Se presenta histricamente como una evolucin de la programacin
estructurada para solucionar problemas de programacin ms grandes y
complejos de lo que sta puede resolver.
Al aplicar la programacin modular, un problema complejo debe ser
dividido en varios subproblemas ms simples, y estos a su vez en otros
subproblemas ms simples. Esto debe hacerse hasta obtener subproblemas lo
suficientemente simples como para poder ser resueltos fcilmente con
algn lenguaje de programacin. sta tcnica se llama refinamiento
sucesivo, divide y vencers anlisis descendente (Top-Down).
Un mdulo es cada una de las partes de un programa que resuelve uno de
los subproblemas en que se divide el problema complejo original. Cada uno
de estos mdulos tiene una tarea bien definida y algunos necesitan de
otros para poder operar. En caso de que un mdulo necesite de otro, puede
comunicarse con ste mediante una interfaz de comunicacin que tambin
debe estar bien definida.
Si bien un mdulo puede entenderse como una parte de un programa en
cualquiera de sus formas y variados contextos, en la prctica se los
suele tomar como sinnimos de procedimientos y funciones. Pero no
necesaria ni estrictamente un mdulo es una funcin o un procedimiento,
ya que el mismo puede contener muchos de ellos, no debe confundirse el
trmino "modulo" (en el sentido de programacin modular) con trminos
14

como "funcin" o "procedimiento", propios del lenguaje que lo soporte.


La programacin orientada a objetos o POO (OOP segn sus siglas en ingls)
es un paradigma de programacin que usa los objetos en sus interacciones,
para disear aplicaciones y programas informticos.

Objetivos de la programacin
Correccin. Un programa es correcto si hace lo que debe hacer
tal y como se estableci en las fases previas a su desarrollo.
Para determinar si un programa hace lo que debe, es muy
importante especificar claramente qu debe hacer el programa
antes de desarrollarlo y, una vez acabado, compararlo con lo
que realmente hace.
Claridad. Es muy importante que el programa sea lo ms claro y

legible posible, para facilitar as su desarrollo y posterior


mantenimiento.
Eficiencia. Se trata de que el programa, adems de realizar
aquello para lo que fue creado (es decir, que sea correcto),
lo haga gestionando de la mejor forma posible los recursos que
utiliza.
Portabilidad. Un programa es portable cuando tiene la

capacidad de poder ejecutarse en una plataforma, ya sea


hardware o software, diferente a aqulla en la que se elabor.
La portabilidad es una caracterstica muy deseable para un
programa, ya que permite, por ejemplo, a un programa que se ha
desarrollado para sistemas GNU/Linux ejecutarse tambin en la
familia de sistemas operativos Windows. Esto permite que el
programa pueda llegar a ms usuarios ms fcilmente.
2.

Datos y tipos de datos, variables e identificadores.

Variables y tipos de datos


Variable
Informalmente algo variable es algo que puede cambiar de un momento a
otro. Tcnicamente una variable es un campo de memoria al que se le puede
cambiar su contenido cuantas veces sea necesario.
La diferencia entre una variable y otra radica precisamente en su
contenido o ms bien en el tipo de su contenido.
Los tipos de datos de las variables pueden ser:

Tipo Entero
Un dato de tipo entero es un nmero que no tiene punto decimal, por lo
tanto en sus operaciones jams va a generar decimales. Por ejemplo 25, 96
y 0.
15


Tipo Real
Un dato de tipo real es un nmero que tiene punto decimal, por lo tanto
en sus operaciones puede generar decimales. Por ejemplo 12.3, 78.56 o
45.0.

Tipo Char
Un dato tipo carcter es un equivalente del Cdigo ASCII. Que es el
cdigo ASCII..? Es el Cdigo Internacional de equivalencias Internas en
el Sistema Binario.
Como se llevan los datos a las variables..? O sea Como se cargan las
variables..? Pues a travs de un signo muy conocido por usted y es el
signo =
A = 'g'; {Se asigna el caracter g a la variable A}
B = A; {Se asigna el valor de A, a la variable B}
C = #65; {Se asigna el caracter numero 65 de la tabla ASCII a la variable
C}

Tipos de dato string


Los tipos de datos cadena {String} son secuencia de caracteres.
Las cadenas se pueden definir del tamano que se necesite. El
comportamiento de los String es similar al de los arreglos.
Nombre = 'Pedro Perez';

Tipos de datos Boolean


Algunos lenguajes de programacin poseen este tipo de dato. El tipo
boolean solo tiene dos valores posibles: False (00) o True(01). Una
variable que se declare de tipo boolean tendr asignado siempre uno de
los dos valores, o verdadero o falso.
>>Palabras reservadas
Palabras utilizadas por los algoritmos o lenguajes de programacion para
representar sentencias,ordenes,etc.
Ejemplos: inicio,fin,hacer,sientoncessino,mientras,desde.
>>Identificadores
Son nombres para identificar a los objetos y demas elementos de un
programa:
variables, constantes, operadores, funciones, procedimientos, etc.
Existen reglas para construir identificadores vlidos y son los
siguientes.
>>constantes
Una constante toma o recibe un valor que no cambia durante el desarrollo
de un algoritmo o la ejecucin del programa.
>>instrucciones
Especifican las operaciones o acciones que deben ser realizadas o
ejecutadas.
Expresiones son combinaciones de constantes, variables, smbolos de
16

operacin, parntesis y nombres de funciones especiales, que cumplen


determinadas reglas.

INDICE SEMANA 03
1.
La solucin de problemas con computadora.
2.
Fases de resolucin de un problema con computadora: Anlisis
del problema, diseo del algoritmo, codificacin, compilacin y
ejecucin.
3.
Herramientas para disear algoritmos: Diagramas N-S (NassiSchneiderman), pseudocdigos, diagramas de flujo convencional.
4.

Prueba de escritorio de un algoritmo.

5.
Laboratorio:
Disear algoritmos para resolver problemas sencillos (que
involucren sentencias secuenciales).
6.

Estructura bsica de un programa en C.

2. Resolucin de Problemas con Computadoras


Etapas en la solucin de problemas.
Las fases en la construccin de un programa para resolver un problema
mediante la computadora son, en orden, las siguientes:
*
*
*
*
*

Anlisis del problema


Diseo del algoritmo
Programacin - Codificacion
compilacion
Ejecucin y pruebas

El paso cero sera Entender el problema.


Comprender la importancia de entender con claridad el problema antes de
abocarnos a encontrar una solucin.
El anlisis consiste en una clara definicin del problema, donde se
contemple exactamente lo que debe hacer el programa y el resultado o
solucin deseada.
Dado que se busca una solucin por computadora,
especificaciones detalladas de entradas y salidas.

se

precisan

Para resolver un problema con un ordenador hay que disponer de los datos
de entrada, estudiar el tratamiento que se ha de realizar a dichos datos,
la informacin que se desea obtener como resultado y de qu manera debe
presentarse.
Es decir, despus de analizar el problema, se han de conocer claramente
tres cosas.
17

*
*
*

Datos de Entrada de que se dispone


Proceso o Tratamiento que ha de realizarse con estos datos.
Information de saliva deseeds.

Una de las tcnicas ms empleadas recibe el nombre de H.I.P.O. (Hierarchy


the plus input process output) que consiste en esquematizar cada programa,
o una parte del mismo en los tres bloques (los descritos anteriormente)..

Diseo del algoritmo


Teniendo en cuenta que un algoritmo es un mtodo para resolver problemas,
una vez analizado el mismo se precisa disear un algoritmo que indique
claramente los pasos a seguir para resolverlo.
Para realizar un determinado proceso, se le debe suministrar al ordenador
una frmula para la resolucin de un problema (algoritmo), cuyo diseo
debe ser independiente de la computadora que resuelve el problema.
Dada la importancia del algoritmo en la ciencia de la computacin, un
aspecto muy importante ser el diseo del algoritmo.
En esta etapa se realizar una representacin de la secuencia. Estas
representaciones son las herramientas de:
diagramas de flujo,
pseudocdigos y/o tablas de decisin.
Programacin-codificacin
Una vez que el diagrama de flujo o el algoritmo de resolucin del
problema est definido se pasa a la fase de codificacin del programa en
cualquier lenguaje (C, basic, cobol, pascal, etc.) cuyo resultado ser
el programa fuente, el cual sigue las reglas de sintaxis que el lenguaje
escogido exija.
Despus de codificado el programa, se introduce en el ordenador mediante
unos programas especiales llamados editores.
Una vez dentro del ordenador, el programa deber ser traducido al nico
lenguaje que ste entiende: Lenguaje de mquina. Dicha operacin se
realiza mediante el correspondiente programa traductor o compilador del
lenguaje en el que est escrito el programa.
Ejecucin y pruebas.
El hecho de haber diseado un buen algoritmo y luego haberlo codificado
en algn lenguaje de programacin no significa que el programa resuelva
correctamente el problema en cuestin.
Por eso, antes de dar por finalizada cualquier labor de programacin, es
fundamental preparar un conjunto de datos lo ms representativo posible
del problema, que permitan probar el programa cuando se ejecute y as
verificar los resultados.
18

Cuanto ms exhaustivas sean las pruebas de un programa, mayor seguridad


se tendr de que ste funcione correctamente y, por lo tanto, menor
posibilidad de errores.
El programa se considera terminado cuando se han realizado pruebas y
ensayo de su fiabilidad con el conjunto de datos seleccionados y otros
nuevos, hasta incluso con datos reales, y no se encuentren errores de
ningn tipo.
Documentacin
Es la gua o comunicacin escrita es sus variadas formas, ya sea en
enunciados, procedimientos, dibujos o diagramas.
A menudo un programa escrito por una persona, es usado por otra. Por ello
la documentacin sirve para ayudar a comprender o usar un programa o para
facilitar futuras modificaciones (mantenimiento).
La documentacin se divide en tres partes:
1.
2.
3.

Documentacin Interna
Documentacin Externa
Manual del Usuario

Documentacin Interna: Son los comentarios o mensaje que se aaden al


cdigo fuente para hacer ms claro el entendimiento de un proceso.
Documentacin Externa: Se define en un documento escrito los siguientes
puntos:
1.
Descripcin del Problema
2.
Nombre del Autor
3.
Algoritmo (diagrama de flujo o pseudocdigo)
4.
Diccionario de Datos
5.
Cdigo Fuente (programa)
Manual del Usuario: Describe paso a paso la manera cmo funciona el
programa, con el fin de que el usuario obtenga el resultado deseado.
3. Representacin de Algoritmos
Existen diversas formas de representacin de algoritmos, pero no hay un
consenso con relacin a cul de ellas es mejor.
Algunas formas de representacin de algoritmos tratan los problemas a un
nivel lgico, abstrayndose de detalles de implementacin, muchas veces
relacionados con un lenguaje de programacin especfico. Por otro lado,
existen formas de representacin de algoritmos que poseen una mayor
riqueza de detalles y muchas veces acaban por oscurecer la idea principal,
el algoritmo, dificultando su entendimiento.
Dentro de las formas de representacin de algoritmos ms conocidas,
sobresalen:
Pseudocdigo
Diagrama de flujo

19

Diagrama de flujo
Un diagrama de flujo es un dibujo que utiliza smbolos estndar de diagramacin de
algoritmos para computador, en el que cada paso del algoritmo se visualiza dentro del
smbolo adecuado y el orden en que estos pasos se ejecutan. Se indica su secuencia
conectndolos con flechas llamadas lneas de flujo porque indican el flujo lgico del
algoritmo.
Una de las ventajas de los diagramas de flujo es que favorece la comprensin del proceso
al mostrarlo como un dibujo. El cerebro humano reconoce muy fcilmente los dibujos.
Smbolos utilizados en la construccin de diagramas de flujo:

20

DIAGRAMA ESTRUCTURADO o N-S:


Se trata de un mtodo de representacin de algoritmos en forma de bloque compacto. Es
un diagrama algo similar a los diagramas de flujo(convencionales) en el que se omiten las
flechas y las figuras que se usan son rectngulos contiguos.
La representacin del algoritmo se basa en los siguientes puntos:
Un programa se representa por un solo diagrama, en el que se incluyen todas las
operaciones a realizar para la resolucin del problema. la forma de conectar una pgina
con la siguiente es similar al mtodo anterior es decir mediante un numero o un nombre
encerrados en uno de los rectngulos que componen el algoritmo.
Todo diagrama comienza con un rectngulo que tiene la palabra inicio y al ltimo del
algoritmo un rectngulo con la palabra fin.
Las acciones sucesivas se escriben en rectngulos sucesivos En un solo rectngulo se
pueden escribir diferentes acciones.
Un proceso puede ser un subprograma.
La lectura del diagrama se hace de arriba hacia abajo.
La forma grfica de representar un algoritmo en diagrama estructurado o N-S es el
siguiente:

Condicional Si-entonces-sino

21

Seleccin Mltiple

Condicional anidado

Ciclo Mientras

22

Ciclo Para

Pseudocdigo
El pseudocdigo es una herramienta de programacin en la que las instrucciones se
escriben en palabras similares al ingls o espaol, que facilitan tanto la escritura como la
lectura de programas.
Es decir, est diseado para la lectura humana en lugar de la lectura mediante mquina.

Caractersticas
1. No existe una sintaxis estndar para el pseudocdigo, algunos IDE's que manejan
pseudocdigo tienen su sintaxis propia.
2. Con independencia de cualquier otro lenguaje de programacin.
3. Utiliza las convenciones estructurales de un lenguaje de programacin verdadero.
4. Normalmente, el pseudocdigo omite detalles que no son esenciales para la
comprensin humana del algoritmo, tales como declaraciones de variables, codigo
especifico del sistema y algunas subrutinas.

Ventajas
Se puede ejecutar en un ordenador (con un IDE como por ejemplo SLE, LPP, PilatoX,
Maruga Script, Seudocodigo o PSeInt).
Es una forma de representacin sencilla de utilizar y de manipular.
Ventajas del pseudocdigo sobre los diagramas de flujo
23

Ocupan mucho menos espacio en el desarrollo del problema.


Permite representar de forma fcil operaciones repetitivas complejas.
Es ms sencilla la tarea de pasar de pseudocdigo a un lenguaje de programacin formal.
Si se siguen las reglas de identacion se puede observar claramente los niveles en la
estructura del programa.
En los procesos de aprendizaje de los alumnos de programacin, estos estn ms cerca
del paso siguiente (codificacin en un lenguaje determinado, que los que se inician en esto
con la modalidad Diagramas de Flujo).
Mejora la claridad de la solucin de un problema.
Si usamos el ejercicio de la mayora de edad, su forma escrita en pseudocdigo por PSint
es la siguiente:

Proceso_edad
Escribir "Cual es tu nombre: ";
Definir edad Como Entero;
Leer edad;
Si edad>17 Entonces
Escribir "Es mayor de edad.";
Sino
Escribir "Es menor de edad";
FinSi
FinProceso

4.

Prueba de Escritorio de un algoritmo:

5.
Laboratorio: Disear algoritmos para resolver problemas sencillos
(que involucren sentencias secuenciales).

24