UNIDAD 1 Introduccion



 Introducción a la programación estructurada
La computadora automática debe su derecho a existir, su utilidad, precisamente a su capacidad de efectuar vastos cálculos que no pueden realizar los seres humanos. Deseamos que la computadora efectúe lo que nunca podríamos hacer nosotros, y la potencia de las máquinas actuales es tal, que inclusive los cálculos pequeños, por su tamaño, escapan al poder de nuestra imaginación limitada.
Sin embargo, debemos organizar el cálculo de manera tal que nuestros limitados poderes sean suficientes para asegurar que se establecerá el efecto deseado. Esta organización incluye la composición de los programas.
Los avances en la tecnología siempre van parejos con progresos en los lenguajes de programación y con nuevas ayudas para simplificar el uso del computador, con lo cual un número mayor de usuarios se beneficia de él. Pero la necesidad de hacer programas para resolver problemas específicos quizás nunca desaparecerá.


LENGUAJE MÁQUINA
Aquel cuyas instrucciones son directamente entendibles por la computadora y no necesitan traducción posterior para que la CPU pueda comprender y ejecutar el programa.
Las instrucciones en lenguaje máquina se expresan en términos de dígitos binarios (0,1) que es la unidad de memoria más pequeña (bit).


Componentes de un ordenador


Las PC forman parte de una de las muchas categorías de computadoras que hay, en nuestra actualidad este tipo de computadora es la que mejor tendremos acceso. Las principales partes de un PC son:


Monitor: Los monitores los podemos clasificar por tamaño o por tipo de monitor. Si es por tamaño dependerá de el largo de la diagonal de la pantalla, es decir 14, 15, 17, 19, 21 pulgadas, etc. Hay que tomar en cuenta que esta distancia no es real, es la diagonal del tubo pero por los plásticos que lo cubren se reduce hasta 1 pulgada o un poco mas, por eso es que vemos que al comprar nuestro monitor de 17" en las especificaciones indica "viewable" que es la distancia que se puede ver es de 16".
Por otra parte, si es por el tipo de monitor es un poco más técnico, se diferencian en los monitores de tubo sencillo, los de tubo de pantalla plana y los flat panel. La diferencia principal entre los de tubo es que los de pantalla plana poseen mejor tecnología y ofrecen mejor imagen(colores mas vivos) y resolución(mas detalle) que los de tuvo sencillo curvos. Ahora el último grito de la moda son los flat panel como el de las computadoras portátiles ya que no ocupan casi espacio y ofrecen altas resoluciones y tamaños adecuados, la única desventaja es que son sumamente caros, cuestan hasta diez veces lo que cuesta uno de tuvo del mismo tamaño de diagonal, muy pronto profundizaré un poco mas en el tema, no se preocupen.


Raton: los ratones se diferencian principalmente en dos bandos. Los que se conectan al puerto serial, los cuales son estos...(muestra imagen) y los PS-2 (muestra imagen). Los PS2 son el estándar hoy día pero tienes que tomar en cuenta si tu computadora tiene el puerto PS2 o no, aunque todas tienen puerto serial.
son los que están reemplazando a los seriales ya que en las computadoras se creo este puerto especialmente para el mouse
Sabes que el puerto PS2 fue creado por la IBM especialmente para el mouse y el teclado, ya que al tener un purto (conector) dedicado a los periféricos principales como teclado y mouse se puede liberar el puerto serial para conectar otros dispositivos como por ejemplo un MODEM.
Los mouse existen en distintas formas, unas más sencillas que otras, una de las variantes de mouse son los track ball, estos son un mouse pero invertido, en vez de mover el ratón entero, se mueve directamente la bola en dirección a la cual se quiere dirigir el cursor, o los touchpad como en las computadoras portátiles.



Teclado: hay dos tipos de ellos si los diferencias por el conector, AT y PS2, como podemos ver (mostrar figura comparatoria), la diferencia principal es el tamaño del conector. El conector del mouse PS2 es idéntico al del teclado PS2, tengan cuidado al invertirlos, no va a pasar nada, simplemente no les va a funcionar. Los teclados han evolucionado bastante también, hoy día poseen botones especiales para navegar en Internet o para abrir programas específicos con solo oprimirlos, también los tienen ergonómicos (adecuados a la fisonomía del hombre) y sencillos, inalámbricos, con bocinas, diferentes colores, etc.. En fin hay teclados para cada usuario.


CPU: Unidad de procesamiento central, esta es la parte más importante ya que es el cerebro de la computadora, dentro de ella se realizan todas las tareas comandadas por el usuario, ella consta de partes especificas internas que serán explicadas más adelante.


Gabinete: El gabinete es la parte externa de la computadora y hay dos tipos principales, torre y de escritorio. En la clase de torre, las hay mini torre, media torre y torre completa que son los que se utiliza para servidores. Dentro del gabinete se encuentran todos los dispositivos principales. Fuente de poder, microprocesador, memorias, tarjeta de video, tarjeta de sonido, motherboard, ventiladores. Hoy día encontramos gabinetes mucho más elaborados en donde no sólo se toma en cuenta el diseño futurístico fuera del gabinete sino mucho mas importante, el diseño por dentro, el cual permite mejor flujo de aire y distribución correcta de los dispositivos internos.


Microprocesador: El microprocesador es la pieza principal en una computadora, es el cerebro en donde se realizan todos los cálculos y tomas de desición. Los microprocesadores los podemos encontrar también en casi todos los dispositivos digitales, desde relojes hasta en los sistemas de inyección en los autos.
Sus características principales son: su ancho de banda y su velocidad del reloj.
El ancho de banda define el numero de bits que puede procesar por cada instrucción. Esto es lo que se refiere a 8 bits, 16 bits, 32 bits, 64 bits. (recordar lo de los video juegos)
La velocidad del reloj, dada en Hz que define cuantas instrucciones por segundo puede ejecutar. Esto es lo que escuchamos decir cuando un microprocesador de X marca es de 600MHz , 800 MHz, 1.5 GHz, donde MHz (Mega Hertz es millones de intrucciones y GHz (Mil millones de instrucciones)
La combinación de los dos (ancho de banda y velocidad de reloj) es lo que define el poder del microprocesador siendo más poderoso mientras mayor sean ambas.

Algunas marcas de los principales microprocesadores son: AMD, Cyrix, Intel y Motorola.
 

EQUIPO MULTIMEDIA: Equipo necesario para capturar video, reproducir y grabar sonidos.




Compilador

Un compilador es un programa nformatico que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser simplemente texto. Este proceso de traducción se conoce como compilación.
Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.




Partes de un compilador La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto.
  • Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis Léxico (que consiste en la descomposición del programa fuente en componentes léxicos), Análisis Sintáctico (agrupación de los componentes léxicos en frases gramaticales ) y Análisis Semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).
  • Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible).
Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en Front-end y Back-end:
  • Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. 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 Análisis Léxico y la Generación de Código Intermedio.
  • Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas distintas. Suele incluir la generación y optimización del código dependiente de la máquina.
El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador.


Tipos de compiladores
Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías:
  • Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
  • Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
  • Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
  • Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
  • Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
Pauta de creación de un compilador: En las primeras épocas de la informática, el software de los compiladores era considerado como uno de los más complejos existentes.
Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador.
Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del lenguaje de partida, especificada normalmente mediante una gramática formal y barata, dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas.

Programa fuente
Programas escritos en lenguajes de alto nivel.
Programa objeto o código objeto
Es el programa traducido (compilado) que está listo para ejecutarse en la computadora.


PROGRAMACIÓN
Es la planificación, proyección o ejecución de una tarea o proceso.
Es el establecimiento de un programa, se utiliza especialmente en el sentido de elaborar los datos necesarios para que una máquina ejecute operaciones determinadas.


Programación estructurada
Durante los años 60’s, el desarrollo de software se encontró con severas dificultades.  Por lo regular, los programas de entrega del software se retrasaban, sus costos excedían en gran medida los presupuestos, y los productos terminados no eran confiables.
Las personas empezaron a darse cuenta que el desarrollo de software era una actividad mucho más compleja de lo que se habían imaginado.
La actividad de investigación en los años 60’s dio como resultado la evolución de la programación estructurada –un método disciplinado de escribir programas que sean claros, que se demuestre que son correctos y fáciles de modificar.
Uno de los resultados más tangibles de esta investigación, fue el desarrollo en 1971 hecho por el profesor Nicklaus Wirth del lenguaje de programación Pascal.  Pascal, al que se le da ese nombre en honor a Blaise Pascal, matemático y filósofo del siglo XVII, fue diseñado para la enseñanza de la programación estructurada en entornos académicos, y se convirtió con rapidez en el lenguaje introductoria de programación de la mayor parte de las universidades. 
Por desgracia, el lenguaje carece de muchas características necesarias para hacerlo útil en aplicaciones comerciales, industriales y de gobierno, por lo que no ha sido muy aceptado en estos últimos ámbitos.
Quizá la historia registre que la verdadera significación del Pascal fue su elección como base del lenguaje de programación Ada.
Ada fue desarrollado bajo el patrocinio del Departamento de Defensa de los Estados Unidos (DOD) durante los años 70 y principio de los 80.  Se estaban utilizando cientos de lenguajes distintos para producir los sistemas masivos de software de comando y de control de DOD.  DOD deseaba un solo lenguaje que pudiera llenar sus objetivos.  Pascal fue seleccionado como base, pero el lenguaje final Ada, es muy distinto de Pascal.  Este lenguaje se llamó así en honor de Lady Ada Lovelace, hija del poeta Lord Byron.  A Lady Lovelace se le da por lo general el crédito de haber escrito el primer programa de computación del mundo a principios de 1800.  Una capacidad importante de Ada se conoce como multitareas; esto permite a los programadores especificar qué actividades deben ocurrir en paralelo.  Otros lenguajes muy utilizados de alto nivel que hemos incluyendo C y C++ permiten al programado escribir programas que sólo ejecuten una actividad a la vez. 
La programación estructurada permite la escritura de programas fáciles de leer y modificar.  En un programa estructurado el flujo lógico se gobierna por las estructuras de control básicas: - secuenciales, repetitivas y selectivas.


a) Estructura secuencial.  Las instrucciones de un programa son ejecutadas en el mismo orden en que ellas aparecen en el programa.
Es decir, es aquella en que una acción sigue a otra en secuencia.  Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente.
b) Estructura selectiva.  Se utilizan para tomar decisiones lógicas.  En éstas se evalúa una condición y en función del resultado de la misma se realiza una opción u otra.  Las estructuras selectivas pueden ser:
- Simples. Ejecuta una determinada acción cuando se cumple una determinada condición.
- Doble.  Permite elegir entre dos opciones posibles en función del cumplimiento o no de una determinada condición.
- Múltiple. La estructura de selección múltiple evaluará una expresión que podrá tomar n valores distintos 1, 2, 3, … , n.  Según se elija uno de estos valores en la condición, se realizará una de las n acciones.
c) Estructura repetitiva. Estructura que repiten una secuencia de instrucciones un número determinado de veces.
Se llaman bucles o iteración por el hecho de repetir la ejecución de una secuencia de acciones.

La historia de C
-       Evolucionó a partir de los lenguaje BCPL y B.
-       Lenguaje BCPL (1967) de Martín Richards, era una lenguaje para escribir software y compiladores de sistemas operativos.
-       Lenguaje B (1970) de Ken Thompson, para crear versiones iniciales del sistema operativo UNÍX
-       C, derivado del lenguaje B (1972) por Dennis Ritchie, de los Laboratorios Bell, lenguaje de desarrollo del sistema operativo UNÍX
-       C es independiente del hardware.
-       Es posible escribir programas en C que sean portátiles hacia la mayor parte de las computadoras.
-       A finales de los 70’s evoluciona lo que es el C tradicional.
-       En 1978, Kernighan y Ritchie, desarrollan “The C Programming Language”.
-       La expansión rápida de C sobre varios tipos de computadoras trajo consigo muchas variantes, por lo que los desarrolladores de programas necesitaban escribir códigos que pudieran funcionar en varias plataformas.
-       En 1983, el Comité Técnico X3J11, bajo la American National Standards Comité on Computers an Information Processing (X3), trabajan para “proporcionar una definición no ambigua e independiente de máquina del lenguaje”.
-       En 1989 se aprueba el estándar ANSI / ISO 9899:1990.
Biblioteca estándar de C
Los programas en C consisten de módulos o piezas que se denominan funciones.
La mayor parte de los programadores de C aprovechan una gran recopilación de funciones existentes, que se conocen como la Biblioteca Estándar de C.
Debemos aprender el lenguaje C mismo, así como a utilizar sus funciones de la Biblioteca estándar.
Debemos reutilizar el software.
Cuando se está programando en C, por lo regular se utilizan los siguientes bloques constructivos:
a)    Funciones de la biblioteca estándar de C
b)    Funciones que debe crear usted mismo
c)    Funciones a su disposición que creen otras personas


Forma general de un pseudocódigo

               Variables
CABECERA

                           Constantes

   Inicio
     - - - - - - -
   CUERPO         - - - - - - -
       DEL              - - - - - - -
ALGORITMO                 - - - - - - -
                           Fin
ALGORITMO
Es un procedimiento paso a paso para resolver un problema en una cantidad finita de tiempo.
Es una lista de instrucciones para efectuar paso a paso un proceso.

Ø  Diagramas de flujo.
El arte de la programación de computadoras se basa en la integración lógica de las diversas etapas del procesamiento.  Los diagramas de flujo proponen enseñar a integrar en forma lógica los procesos de programación.
Ø  Pseudocódigo
Es un lenguaje de especificación de algoritmos, el uso de tal lenguaje hace que el paso de la codificación final sea relativamente fácil.  La ventaja del pseudocódigo es que su uso en la planificación de un programa, el programador se puede concentrar en la lógica y en las estructuras de control y no preocuparse de las reglas del lenguaje que se trate.
Es también fácil modificar el pseudocódigo si se descubren errores en la lógica del programa.  El pseudocódigo utiliza palabras como:
            Mientras          Si                    Hasta
            Leer                Entonces        Desde
Escribir           Repetir            Para
La escritura del pseudocódigo exige normalmente una identación (sangría en el margen izquierdo) de diferentes columnas.

Programación Modular.  El programa se divide en módulos, cada uno de los cuales ejecuta una única actividad o tarea y se codifican independientemente de otros módulos.   Cada uno de estos módulos se analizan, codifican y ponen a punto por separado.    Cada programa contiene un módulo llamado programa principal que controla todo lo que sucede; se transfiere el control a submódulos de modo que ellos puedan ejecutar sus funciones.  Los módulos son independientes en el sentido en el que ningún módulo puede tener acceso directo a cualquier otro módulo excepto el módulo al que llama y sus propios submódulos.
Tamaño de los módulos.  No existe una regla fija que permita definir el tamaño estándar del módulo, una buena aproximación es considerar el tamaño físico de una página (30 ó 40 líneas de instrucciones). 
Implementación.  Se implementan utilizando módulos que toman diferentes nombres según el lenguaje de programación: subrutinas en BASIC y FORTRAN, procedimientos en Pascal, secciones en COBOL, etc.
Programación estructurada. Se refiere a un conjunto de técnicas que han ido evolucionando.  Estas técnicas aumentan considerablemente la productividad del programa reduciendo el tiempo requerido para escribir, verificar, depurar y mantener los programas.
Recursos abstractos:  Consiste en descomponer una determinada acción compleja en términos de un número de acciones más simples capaz de ejecutarlas.
Diseño descendente:  Consiste en efectuar una relación entre las sucesivas etapas de estructuración.  Es decir, se descompone el problema en etapas o estructuras jerárquicas.
Estructuras básicas de control: En un programa estructurado el flujo lógico se gobierna por las estructuras de control básicas:
  • Secuenciales
  • Repetitivas
  • Selectivas


PROGRAMA
Indica al procesador la serie de acciones que éste debe efectuar para llevar a cabo un determinado procesamiento de información.
Es un conjunto de reglas para manipular la información, escritas como instrucciones de código máquina.

LENGUAJE DE PROGRAMACIÓN
Es una notación formal para describir algoritmos o funciones que serán ejecutados por un ordenador.  Permite comunicar instrucciones al ordenador/sistema.
Los lenguajes de programación pretenden:
  • Disponer de instrucciones para programar más cercanas al entendimiento y forma de razonar humanos, y así facilitar la tarea del programador.
  • Conseguir que los programas sean independientes del procesador, de forma que sirvan para distintos procesadores.
El nivel de un lenguaje de programación se mide según la posición que éste ocupe entre el código máquina y el lenguaje natural humano.
-       LENGUAJE DE BAJO NIVEL.  Lenguaje máquina, sus instrucciones son codificadas en secuencias numéricas binarias (0 y 1’s).
-       LENGUAJE ENSAMBLADOR.  Es una versión simbólica de un lenguaje máquina, donde cada operación y asignación de memoria se da con nombres simbólicos (ADD, MUL, DIV, PAGO, NOMBRE).
-       LENGUAJE DE ALTO NIVEL.  Este utiliza palabras en lugar de símbolos que son fácilmente entendibles, están diseñados para que las personas entiendan y escriban los programas de un modo más fácil (Turbo Pascal, C, Basic, Fortran).
Es fundamental que un programa pueda ser traducido a lenguaje máquina de forma automática.