Está en la página 1de 361

Programacin I

Unidad Temas 1 Introduccin a la computacin Subtemas 1.1 Breve resea de la computacin 1.2 Impacto de las computadoras en la sociedad 1.3 Definiciones Lenguaje de Alto Nivel, bajo nivel, ensamblador y maquina. Compilador Traductor Sistemas Numricos Arquitectura de computadoras Sistemas operativos 1.4 Descripcin de tipos de programacin 1.4.1 Programacin estructurada 1.4.2 Programacin orientada a objetos 1.4.3 Programacin de descripcin de Hardware sistemas numricos 1.5 Lenguajes de programacin Diseo de Algoritmos 2.1 Conceptos bsicos 2.2 Metodologa de la programacin 2.3 Diagramas de flujo 2.4 Pseudocodigos Fundamentos del 3.1 Desarrollo histrico del lenguaje Lenguaje estructurado 3.2 Estructura general de un programa 3.3 Palabras reservadas 3.4 Representacin de datos bsicos 3.5 Declaracin de variables, Constantes, Procedimientos y Funciones 3.6 Operaciones aritmticas, lgicas y relacionales. 3.7 Diseo, Edicin, Compilacin y Ejecucin de programas Estructuras de 4.1 Estructura secuencial Decisin y Control 4.2 Estructuras de Transferencia Incondicionales 4.3 Estructuras de Transferencia Condicionales 4.4 Estructuras Repetitivas (Bucles) Arreglos y Archivos 5.1 Arreglos (Vectores y Matrices) 5.2 Manejo Archivos Mdulos 6.1 Diferencia entre Funciones y Procedimientos. 6.2 Activacin / Invocacin de Funciones y Procedimientos

5 6

Graficacin

Puertos

6.3 Uso de Funciones y Procedimientos con Parmetros. 7.1 Conceptos bsicos de grficas. 7.2 Introduccin bsica de manejo de grficas. 7.3 Uso de libreras para la realizacin de graficas. 7.4 Graficacin de un punto y lneas rectas 7.5 Graficacin de Funciones Matemticas en el plano cartesiano. 7.6 Introduccin a la potencia grafica 8.1 Conceptos generales de manejos de puertos 8.2 Configuracin de los puertos en las computadoras 8.3 Uso de instrucciones para manejo de puertos

Unidad 1. Introduccin a la computacin


1.1 Breve

resea de la computacin

Historia de la Computacin COMPUTADORA


Mquina capaz de efectuar una secuencia de operaciones mediante un programa, de tal manera, que se realice un procesamiento sobre un conjunto de datos de entrada, obtenindose otro conjunto de datos de salida. TIPOS DE COMPUTADORAS Se clasifican de acuerdo al principio de operacin de Analgicas y Digitales.
COMPUTADORA ANALGICA

1. Aprovechando el hecho de que diferentes fenmenos fsicos se describen por


relaciones matemticas similares (v.g. Exponenciales, Logartmicas, etc.) pueden entregar la solucin muy rpidamente. Pero tienen el inconveniente que al cambiar el problema a resolver, hay que realambrar la circuitera (cambiar el Hardware). COMPUTADORA DIGITAL

1. Estn basadas en dispositivos biestables, i.e., que slo pueden tomar uno de dos valores posibles: 1 0. Tienen como ventaja, el poder ejecutar diferentes programas

para diferentes problemas, sin tener que la necesidad de modificar fsicamente la mquina.

HISTORIA DE LA COMPUTACIN Uno de los primeros dispositivos mecnicos para contar fue el baco, cuya historia se remonta a las antiguas civilizaciones griega y romana. Este dispositivo es muy sencillo, consta de cuentas ensartadas en varillas que a su vez estn montadas en un marco rectangular. Al desplazar las cuentas sobre varillas, sus posiciones representan valores almacenados, y es mediante dichas posiciones que este representa y almacena datos. A este dispositivo no se le puede llamar computadora por carecer del elemento fundamental llamado programa. Otro de los inventos mecnicos fue la Pascalina inventada por Blaise Pascal (1623 - 1662) de Francia y la de Gottfried Wilhelm von Leibniz (1646 - 1716) de Alemania. Con estas mquinas, los datos se representaban mediante las posiciones de los engranajes, y los datos se introducan manualmente estableciendo dichas posiciones finales de las ruedas, de manera similar a como leemos los nmeros en el cuentakilmetros de un automvil.

La primera computadora fue la mquina analtica creada por Charles Babbage, profesor matemtico de la Universidad de Cambridge en el siglo XIX. La idea que tuvo Charles Babbage sobre un computador naci debido a que la elaboracin de las tablas matemticas era un proceso tedioso y propenso a errores. En 1823 el gobierno Britnico lo apoyo para crear el proyecto de una mquina de diferencias, un dispositivo mecnico para efectuar sumas repetidas.

Mientras tanto Charles Jacquard (francs), fabricante de tejidos, haba creado un telar que poda reproducir automticamente patrones de tejidos leyendo la informacin codificada en patrones de agujeros perforados en tarjetas de papel rgido. Al enterarse de este mtodo Babbage abandon la mquina de diferencias y se dedico al proyecto de la mquina analtica que se pudiera programar con tarjetas perforadas para efectuar cualquier clculo con una precisin de 20 dgitos. La tecnologa de la poca no bastaba para hacer realidad sus ideas. El mundo no estaba listo, y no lo estara por cien aos ms.

En 1944 se construy en la Universidad de Harvard, la Mark I, diseada por un equipo encabezado por Howard H. Aiken. Esta mquina no est considerada como computadora electrnica debido a que no era de propsito general y su funcionamiento estaba basado en dispositivos electromecnicos llamados relevadores.

En 1947 se construy en la Universidad de Pennsylvania la ENIAC (Electronic Numerical Integrator And Calculator) que fue la primera computadora electrnica, el equipo de diseo lo encabezaron los ingenieros John Mauchly y John Eckert. Esta mquina ocupaba todo un stano de la Universidad, tena ms de 18 000 tubos de vaco, consuma 200 KW de energa elctrica y requera todo un sistema de aire acondicionado, pero tena la capacidad de realizar cinco mil operaciones aritmticas en un segundo. El proyecto, auspiciado por el departamento de Defensa de los Estados Unidos, culmin dos aos despus, cuando se integr a ese equipo el ingeniero y matemtico hngaro John von Neumann (1903 - 1957). Las ideas de von Neumann resultaron tan fundamentales para su desarrollo posterior, que es considerado el padre de las computadoras. La EDVAC (Electronic Discrete Variable Automatic Computer) fue diseada por este nuevo equipo. Tena aproximadamente cuatro mil bulbos y usaba un tipo de memoria basado en tubos llenos de mercurio por donde circulaban seales elctricas sujetas a retardos. La idea fundamental de von Neumann fue: permitir que en la memoria coexistan datos con instrucciones, para que entonces la computadora pueda ser programada en un lenguaje, y no por medio de alambres que elctricamente interconectaban varias secciones de control, como en la ENIAC. Todo este desarrollo de las computadoras suele divisarse por generaciones y el criterio que se determin para determinar el cambio de generacin no est muy bien definido, pero resulta aparente que deben cumplirse al menos los siguientes requisitos:
La forma en que estn construidas. Forma en que el ser humano se comunica con ellas.

Primera Generacin En esta generacin haba una gran desconocimiento de las capacidades de las computadoras, puesto que se realiz un estudio en esta poca que determin

que con veinte computadoras se saturara el mercado de los Estados Unidos en el campo de procesamiento de datos. Esta generacin abarco la dcada de los cincuenta. Y se conoce como la primera generacin. Estas mquinas tenan las siguientes caractersticas:
Estas mquinas estaban construidas por medio de tubos de vaco. Eran programadas en lenguaje de mquina.

En esta generacin las mquinas son grandes y costosas (de un costo aproximado de ciento de miles de dlares).

En 1951 aparece la UNIVAC (NIVersAl Computer), fue la primera computadora comercial, que dispona de mil palabras de memoria central y podan leer cintas magnticas, se utiliz para procesar el censo de 1950 en los Estados Unidos. En las dos primeras generaciones, las unidades de entrada utilizaban tarjetas perforadas, retomadas por Herman Hollerith (1860 - 1929), quien adems fund una compaa que con el paso del tiempo se conocera como IBM (International Bussines Machines). Despus se desarroll por IBM la IBM 701 de la cual se entregaron 18 unidades entre 1953 y 1957. Posteriormente, la compaa Remington Rand fabric el modelo 1103, que competa con la 701 en el campo cientfico, por lo que la IBM desarrollo la 702, la cual present problemas en memoria, debido a esto no dur en el mercado. La computadora ms exitosa de la primera generacin fue la IBM 650, de la cual se produjeron varios cientos. Esta computadora que usaba un esquema de memoria secundaria llamado tambor magntico, que es el antecesor de los discos actuales. Otros modelos de computadora que se pueden situar en los inicios de la segunda generacin son: la UNIVAC 80 y 90, las IBM 704 y 709, Burroughs 220 y UNIVAC 1105. Segunda Generacin Cerca de la dcada de 1960, las computadoras seguan evolucionando, se reduca su tamao y creca su capacidad de procesamiento. Tambin en esta

poca se empez a definir la forma de comunicarse con las computadoras, que reciba el nombre de programacin de sistemas. Las caractersticas de la segunda generacin son las siguientes:
Estn construidas con circuitos de transistores. Se programan en nuevos lenguajes llamados lenguajes de alto nivel.

En esta generacin las computadoras se reducen de tamao y son de menor costo. Aparecen muchas compaas y las computadoras eran bastante avanzadas para su poca como la serie 5000 de Burroughs y la ATLAS de la Universidad de Manchester. Algunas de estas computadoras se programaban con cintas perforadas y otras ms por medio de cableado en un tablero. Los programas eran hechos a la medida por un equipo de expertos: analistas, diseadores, programadores y operadores que se manejaban como una orquesta para resolver los problemas y clculos solicitados por la administracin. El usuario final de la informacin no tena contacto directo con las computadoras. Esta situacin en un principio se produjo en las primeras computadoras personales, pues se requera saberlas "programar" (alimentarle instrucciones) para obtener resultados; por lo tanto su uso estaba limitado a aquellos audaces pioneros que gustaran de pasar un buen nmero de horas escribiendo instrucciones, "corriendo" el programa resultante y verificando y corrigiendo los errores o bugs que aparecieran. Adems, para no perder el "programa" resultante haba que "guardarlo" (almacenarlo) en una grabadora de astte, pues en esa poca no haba discos flexibles y mucho menos discos duros para las PC; este procedimiento poda tomar de 10 a 45 minutos, segn el programa. El panorama se modific totalmente con la aparicin de las computadoras personales con mejore circuitos, ms memoria, unidades de disco flexible y sobre todo con la aparicin de programas de aplicacin general en donde el usuario compra el programa y se pone a trabajar. Aparecen los programas procesadores de palabras como el clebre Word Star, la impresionante hoja de clculo (spreadsheet) Visicalc y otros ms que de la noche a la maana cambian la imagen de la PC. El sortware empieza a tratar de alcanzar el paso del hardware. Pero aqu aparece un nuevo elemento: el usuario. El usuario de las computadoras va cambiando y evolucionando con el tiempo. De estar totalmente desconectado a ellas en las mquinas grandes pasa la PC a ser pieza clave en el diseo tanto del hardware como del software. Aparece el concepto de human interface que es la relacin entre el usuario y su computadora. Se habla entonces de hardware ergonmico (adaptado a las dimensiones humanas para reducir el cansancio), diseos de pantallas antirreflejos y teclados que descansen la mueca. Con respecto al software se inicia una verdadera carrera para encontrar la manera en que el usuario pase menos tiempo capacitndose y entrenndose y ms tiempo produciendo. Se ponen al alcance programas con mens (listas de opciones) que orientan en todo momento al usuario (con el consiguiente aburrimiento de los usuarios expertos); otros programas ofrecen toda una artillera de teclas de control y teclas de funciones (atajos) para efectuar toda suerte de efectos en el trabajo

(con la consiguiente desorientacin de los usuarios novatos). Se ofrecen un sinnmero de cursos prometiendo que en pocas semanas hacen de cualquier persona un experto en los programas comerciales. Pero el problema "constante" es que ninguna solucin para el uso de los programas es "constante". Cada nuevo programa requiere aprender nuevos controles, nuevos trucos, nuevos mens. Se empieza a sentir que la relacin usuario-PC no est acorde con los desarrollos del equipo y de la potencia de los programas. Hace falta una relacin amistosa entre el usuario y la PC. Las computadoras de esta generacin fueron: la Philco 212 (esta compaa se retir del mercado en 1964) y la UNIVAC M460, la Control Data Corporation modelo 1604, seguida por la serie 3000, la IBM mejor la 709 y sac al mercado la 7090, la National Cash Register empez a producir mquinas para proceso de datos de tipo comercial, introdujo el modelo NCR 315. La Radio Corporation of America introdujo el modelo 501, que manejaba el lenguaje COBOL, para procesos administrativos y comerciales. Despus sali al mercado la RCA 601. Tercera generacin

Con los progresos de la electrnica y los avances de comunicacin con las computadoras en la dcada de los 1960, surge la tercera generacin de las computadoras. Se inaugura con la IBM 360 en abril de 1964.3 Las caractersticas de esta generacin fueron las siguientes:
Su fabricacin electrnica esta basada en circuitos integrados. Su manejo es por medio de los lenguajes de control de los sistemas operativos.

La IBM produce la serie 360 con los modelos 20, 22, 30, 40, 50, 65, 67, 75, 85, 90, 195 que utilizaban tcnicas especiales del procesador, unidades de cinta de nueve canales, paquetes de discos magnticos y otras caractersticas que ahora son estndares (no todos los modelos usaban estas tcnicas, sino que estaba dividido por aplicaciones). El sistema operativo de la serie 360, se llam OS que contaba con varias configuraciones, inclua un conjunto de tcnicas de manejo de memoria y del procesador que pronto se convirtieron en estndares.

En 1964 CDC introdujo la serie 6000 con la computadora 6600 que se consider durante algunos aos como la ms rpida. En la dcada de 1970, la IBM produce la serie 370 (modelos 115, 125, 135, 145, 158, 168). UNIVAC compite son los modelos 1108 y 1110, mquinas en gran escala; mientras que CDC produce su serie 7000 con el modelo 7600. Estas computadoras se caracterizan por ser muy potentes y veloces. A finales de esta dcada la IBM de su serie 370 produce los modelos 3031, 3033, 4341. Burroughs con su serie 6000 produce los modelos 6500 y 6700 de avanzado diseo, que se reemplazaron por su serie 7000. Honey - Well participa con su computadora DPS con varios modelos. A mediados de la dcada de 1970, aparecen en el mercado las computadoras de tamao mediano, o minicomputadoras que no son tan costosas como las grandes (llamadas tambin como mainframes que significa tambin, gran sistema), pero disponen de gran capacidad de procesamiento. Algunas minicomputadoras fueron las siguientes: la PDP - 8 y la PDP - 11 de Digital Equipment Corporation, la VAX (Virtual Address eXtended) de la misma compaa, los modelos NOVA y ECLIPSE de Data General, la serie 3000 y 9000 de Hewlett - Packard con varios modelos el 36 y el 34, la Wang y Honey Well -Bull, Siemens de origen alemn, la ICL fabricada en Inglaterra. En la Unin Sovitica se utiliz la US (Sistema Unificado, Ryad) que ha pasado por varias generaciones. Cuarta Generacin

Aqu aparecen los microprocesadores que es un gran adelanto de la microelectrnica, son circuitos integrados de alta densidad y con una velocidad impresionante. Las microcomputadoras con base en estos circuitos son extremadamente pequeas y baratas, por lo que su uso se extiende al mercado industrial. Aqu nacen las computadoras personales que han adquirido proporciones enormes y que han influido en la sociedad en general sobre la llamada "revolucin informtica". En 1976 Steve Wozniak y Steve Jobs inventan la primera microcomputadora de uso masivo y ms tarde forman la compaa conocida como la Apple que fue la segunda compaa ms grande del mundo, antecedida tan solo por IBM; y esta por su parte es an de las cinco compaas ms grandes del mundo. En 1981 se vendieron 800 00 computadoras personales, al siguiente subi a 1 400 000. Entre 1984 y 1987 se vendieron alrededor de 60 millones de

computadoras personales, por lo que no queda duda que su impacto y penetracin han sido enormes. Con el surgimiento de las computadoras personales, el software y los sistemas que con ellas de manejan han tenido un considerable avance, porque han hecho ms interactiva la comunicacin con el usuario. Surgen otras aplicaciones como los procesadores de palabra, las hojas electrnicas de clculo, paquetes grficos, etc. Tambin las industrias del Software de las computadoras personales crece con gran rapidez, Gary Kildall y William Gates se dedicaron durante aos a la creacin de sistemas operativos y mtodos para lograr una utilizacin sencilla de las microcomputadoras (son los creadores de CP/M y de los productos de Microsoft). No todo son microcomputadoras, por su puesto, las minicomputadoras y los grandes sistemas continan en desarrollo. De hecho las mquinas pequeas rebasaban por mucho la capacidad de los grandes sistemas de 10 o 15 aos antes, que requeran de instalaciones costosas y especiales, pero sera equivocado suponer que las grandes computadoras han desaparecido; por el contrario, su presencia era ya ineludible en prcticamente todas las esferas de control gubernamental, militar y de la gran industria. Las enormes computadoras de las series CDC, CRAY, Hitachi o IBM por ejemplo, eran capaces de atender a varios cientos de millones de operaciones por segundo. Quinta Generacin En vista de la acelerada marcha de la microelectrnica, la sociedad industrial se ha dado a la tarea de poner tambin a esa altura el desarrollo del software y los sistemas con que se manejan las computadoras. Surge la competencia internacional por el dominio del mercado de la computacin, en la que se perfilan dos lderes que, sin embargo, no han podido alcanzar el nivel que se desea: la capacidad de comunicarse con la computadora en un lenguaje ms cotidiano y no a travs de cdigos o lenguajes de control especializados. Japn lanz en 1983 el llamado "programa de la quinta generacin de computadoras", con los objetivos explcitos de producir mquinas con innovaciones reales en los criterios mencionados. Y en los Estados Unidos ya est en actividad un programa en desarrollo que persigue objetivos semejantes, que pueden resumirse de la siguiente manera:
Procesamiento en paralelo mediante arquitecturas y diseos especiales y circuitos de gran velocidad. Manejo de lenguaje natural y sistemas de inteligencia artificial.

El futuro previsible de la computacin es muy interesante, y se puede esperar que esta ciencia siga siendo objeto de atencin prioritaria de gobiernos y de la sociedad en conjunto. MODELO DE VON NEUMANN

Las computadoras digitales actuales se ajustan al modelo propuesto por el matemtico John Von Neumann. De acuerdo con el, una caracterstica importante de este modelo es que tanto los datos como los programas, se almacenan en la memoria antes de ser utilizados. http://www.monografias.com/trabajos/histocomp/histocomp.shtml HISTORIA DE LA COMPUTACIN 1.1 RESEA HISTRICA

Todo comenz con mquinas destinadas a manejar nmeros, es as como nos remitimos a el baco, inventado por los babilonios all por el ao 1000 A.C.. Utilizado sobre todo por los chinos para la realizacin de operaciones sencillas, esta formado por una tablilla con una serie de cuentas que sirven para efectuar sumas y restas.

Justo antes de morir en 1617, el matemtico escocs John Napier (mejor conocido por su invencin de logaritmos) desarroll un juego de palitos para calcular a las que llam "Napier Bones." As llamados porque se tallaron las ramitas de hueso o marfil, los "bones" incorporaron el sistema logartmico. Los Huesos de Napier tuvieron una influencia fuerte en el desarrollo de la regla deslizante (cinco aos ms tarde) y mquinas calculadoras subsecuentes que contaron con logaritmos.

En 1621 la primera regla deslizante fue inventada por el del matemtico ingls William Oughtred. La regla deslizante (llam "Crculos de Proporcin") era un juego de discos rotatorios que se calibraron con los logaritmos de Napier. Uno de los primeros aparatos de la informtica analgica, la regla deslizante se us normalmente (en un orden lineal) hasta que a comienzos de 1970, cuando calculadoras porttiles comenzaron a ser ms popular.

En 1623 la primera calculadora mecnica fue diseada por Wilhelm Schickard en Alemania. Llamado "El Reloj Calculador", la mquina incorpor los logaritmos de Napier, hacia rodar cilindros en un albergue grande. Se comision un Reloj Calcualdor para Johannes Kepler, el matemtico famoso, pero fue destruido por fuego antes de que se terminara.

Uno de los antepasados mas directos de la computadora actual, fue creada por el cientfico francs Blaise Pasca en el siglo XVII(1642). A sus 18 aos, Pascal invento su primera maquina calculadora, capaz de sumar y restar ; y todo ello a base de engarzar mltiples ruedas dentadas.

En 1666 la primera mquina de multiplicar se invent por Sir Samuel Morland, entonces Amo de mecnicas a la corte de Rey Charles II de Inglaterra. El aparato const de una serie de ruedas, cada representaba, dieses, cientos, etc. Un alfiler del acero mova los diales para ejecutar las calculaciones. A diferencia de la Pascalina, el aparato no tena avanz automtico de en columnas.

Aos mas tarde, en 1673, Gottfied Von Leibnitz perfecciono los estudios de Pascal, y llego a construir una maquina que no solo sumaba y restaba, sino que tambin multiplicaba, divida e incluso calculaba races cuadradas.

En 1769 el Jugador de Ajedrez Autmata fue inventado por Barn Empellen, un noble hngaro. El aparato y sus secretos se le dieron a Johann Nepomuk Maelzel, un inventor de instrumentos musicales, quien recorri Europa y los Estados Unidos con el aparato, a finales de 1700 y temprano 1800. Pretendi ser una mquina pura, el Autmata inclua un jugador de ajedrez "robtico". El Automatn era una sensacin dondequiera que iba, pero muchas comentaristas, incluso el Edgar Allen Poe famoso, ha escrito crticas detalladas diciendo que ese era una "mquina pura." En cambio, generalmente, siempre se crey que el aparato fue operado por un humano oculto en el armario debajo del tablero de ajedrez. El Autmata se destruy en un incendio en 1856.

Se invent la primera mquina lgica en 1777 por Charles Mahon, el Conde de Stanhope. El "demostrador lgico" era un aparato tamao bolsillo que resolva silogismos tradicionales y preguntas elementales de probabilidad. Mahon es el precursor de los componentes lgicos en computadoras modernas.

En 1790 Joseph-Marie Jacquard(1572-1834) utilizo tarjetas perforadas para controlar un telar. El "Jacquard Loom" se invent en 1804 por Joseph-Marie Jacquard. Inspirado por instrumentos musicales que se programaban usando papel agujereados, la mquina se pareca a una atadura del telar que podra controlar automticamente de dibujos usando una lnea tarjetas agujereadas. La idea de Jacquard, que revolucion el hilar de seda, estaba formar la base de muchos aparatos de la informtica e idiomas de la programacin.

La primera calculadora de produccin masiva se distribuy, empezando en 1820, por Charles Thomas de Colmar.

Originalmente se les vendi a casas del seguro Parisienses, el "aritmmetro" de Colmar operaba usando una variacin de la rueda de Leibniz. Ms de mil aritmmetro se vendieron y eventualmente recibi una medalla a la Exhibicin Internacional en Londres en 1862.

1.2 PIONEROS DE LA INFORMATICA

Blaise Pascal, Gottfied Von Leibnitz, Charles Babbage, Augusta Byron Herman Hollerith, James Powers, Alan Turing, Konrad Zuse, John Von Neumann, Chuck Peddle, Linus Trovlas, Bill Gates

1.3 DEFINICIONES DE COMPUTADORA

Mquina capaz de efectuar una secuencia de operaciones mediante un programa, de tal manera, que se realice un procesamiento sobre un conjunto de datos de entrada, obtenindose otro conjunto de datos de salida.

Dispositivo electrnico capaz de recibir un conjunto de instrucciones y ejecutarlas realizando clculos sobre los datos numricos, o bien compilando y correlacionando otros tipos de informacin. Es un calculador electrnico de elevada potencia equipado de memorias de gran capacidad y aparatos perifricos, que permite solucionar con gran rapidez y sin intervencin humana, durante el desarrollo del proceso problemas lgicos y aritmticos muy complejos.

1.4 LA PRIMERA COMPUTADORA

Fue en 1830, cuando se establecieron los principios de funcionamiento de las modernas computadoras. Su paternidad se debe al matemtico ingles Charles Babbage, quien tras lanzar en 1822 la denominada maquina diferencial- con nada menos que 96 ruedas

dentadas y 24 ejes, se lanzo en pos de su proyecto mas relevante:la mquina analtica(1833).

La primera computadora fue la mquina analtica creada por Charles Babbage, profesor matemtico de la Universidad de Cambridge en el siglo XIX. La idea que tuvo Charles Babbage sobre un computador naci debido a que la elaboracin de las tablas matemticas era un proceso tedioso y propenso a errores. En 1823 el gobierno Britnico lo apoyo para crear el proyecto de una mquina de diferencias, un dispositivo mecnico para efectuar sumas repetidas.

Mientras tanto Charles Jacquard (francs), fabricante de tejidos, haba creado un telar que poda reproducir automticamente patrones de tejidos leyendo la informacin codificada en patrones de agujeros perforados en tarjetas de papel rgido. Al enterarse de este mtodo Babbage abandon la mquina de diferencias y se dedic al proyecto de la mquina analtica que se pudiera programar con tarjetas perforadas para efectuar cualquier clculo con una precisin de 20 dgitos.

En 1944 se construy en la Universidad de Harvard, la Mark I, diseada por un equipo encabezado por Howard H. Aiken. Esta mquina no est considerada como computadora electrnica debido a que no era de propsito general y su funcionamiento estaba basado en dispositivos electromecnicos llamados relevadores.

1.5 TIPOS DE COMPUTADORAS

1. Anloga La computadora anloga es la que acepta y procesa seales continuas, tales como: fluctuaciones de voltaje o frecuencias. Ejemplo: El termostato es la computadora anloga ms sencilla. 2. Digital La computadora digital es la que acepta y procesa datos que han sido convertidos al sistema binario. La mayora de las computadoras son digitales. 3. Hbrida La computadora hbrida es una computadora digital que procesa seales anlogas que han sido convertidas a forma digital. Es utilizada para control de procesos y en robtica. 4. Propsito especial La computadora de propsito especial est dedicada a un solo propsito o tarea. Pueden ser usadas para producir informes del tiempo, monitorear desastres naturales, hacer

lecturas de gasolina y como medidor elctrico. Ejemplo: carros de control remoto, horno microoondas, relojes digitales, cmaras, procesador de palabras, etc. 5. Propsito general La computadora de propsito general se programa para una variedad de tareas o aplicaciones. Son utilizadas para realizar clculos matemticos, estadsticos, contabilidad comercial, control de inventario, nmina, preparacin de inventario, etc. Ejemplo: "mainframes" o minicomputadoras.

Categoras de las computadoras Supercomputadora La supercomputadora es lo mximo en computadora, es la ms rpida y, por lo tanto, la ms cara. Cuesta millones de dlares y se hacen de dos a tres al ao. Procesan billones de instrucciones por segundo. Son utilizadas para trabajos cientficos, particularmente para crear modelos matemticos del mundo real, llamados simulacin.

"Mainframe" Los "mainframe" son computadoras grandes, ligeras, capaces de utilizar cientos de dispositivos de entrada y salida. Procesan millones de instrucciones por segundo. Su velocidad operacional y capacidad de procesar hacen que los grandes negocios, el gobierno, los bancos, las universidades, los hospitales, compaas de seguros, lneas areas, etc. confin en ellas. Su principal funcin es procesar grandes cantidades de datos rpidamente. Estos datos estn accesibles a los usuarios del "mainframe" o a los usuarios de las microcomputadoras cuyos terminales estn conectados al "mainframe". Su costo flucta entre varios cientos de miles de dlares hasta el milln. Requieren de un sistema especial para controlar la temperatura y la humedad. Tambin requieren de un personal profesional especializado para procesar los datos y darle el mantenimiento. Minicomputadora La minicomputadora se desarroll en la dcada de 1960 para llevar a cabo tareas especializadas, tales como el manejo de datos de comunicacin. Son ms pequeas, ms baratas y ms fciles de mantener e instalar que los "mainframes". Su costo est entre los cincuenta mil hasta varios cientos de miles. Usadas por negocios, colegios y agencias gubernamentales. Su mercado ha ido disminuyendo desde que surgieron las microcomputadoras.

Microcomputadora La microcomputadora es conocida como computadora personal o PC. Es la ms pequea, gracias a los microprocesadores, ms barata y ms popular en el mercado. Su costo flucta entre varios cientos de dlares hasta varios miles de dlares. Puede funcionar como unidad independiente o estar en red con otras microcomputadoras o como un terminal de un "mainframe" para expandir sus capacidades. Puede ejecutar las mismas operaciones y usar los mismos programas que muchas computadoras

superiores, aunque en menor capacidad. Ejemplos: MITS Altair, Macintosh, serie Apple II, IBM PC, Dell, Compaq, Gateway, etc. 1.6 GENERACIONES DE COMPUTADORAS

Primera Generacin

En esta generacin haba una gran desconocimiento de las capacidades de las computadoras, puesto que se realiz un estudio en esta poca que determin que con veinte computadoras se saturara el mercado de los Estados Unidos en el campo de procesamiento de datos.

Esta generacin abarco la dcada de los cincuenta. Y se conoce como la primera generacin. Estas mquinas tenan las siguientes caractersticas: Estas mquinas estaban construidas por medio de tubos de vaco. Eran programadas en lenguaje de mquina.

En esta generacin las mquinas son grandes y costosas (de un costo aproximado de ciento de miles de dlares).

En 1951 aparece la UNIVAC (NIVersAl Computer), fue la primera computadora comercial, que dispona de mil palabras de memoria central y podan leer cintas magnticas, se utiliz para procesar el censo de 1950 en los Estados Unidos.

En las dos primeras generaciones, las unidades de entrada utilizaban tarjetas perforadas, retomadas por Herman Hollerith (1860 - 1929), quien adems fund una compaa que con el paso del tiempo se conocera como IBM (International Bussines Machines).

Despus se desarroll por IBM la IBM 701 de la cual se entregaron 18 unidades entre 1953 y 1957.

Posteriormente, la compaa Remington Rand fabric el modelo 1103, que competa con la 701 en el campo cientfico, por lo que la IBM desarrollo la 702, la cual present problemas en memoria, debido a esto no dur en el mercado.

La computadora ms exitosa de la primera generacin fue la IBM 650, de la cual se produjeron varios cientos. Esta computadora que usaba un esquema de memoria secundaria llamado tambor magntico, que es el antecesor de los discos actuales.

Otros modelos de computadora que se pueden situar en los inicios de la segunda generacin son: la UNIVAC 80 y 90, las IBM 704 y 709, Burroughs 220 y UNIVAC 1105.

Segunda Generacin

Cerca de la dcada de 1960, las computadoras seguan evolucionando, se reduca su tamao y creca su capacidad de procesamiento. Tambin en esta poca se empez a definir la forma de comunicarse con las computadoras, que reciba el nombre de programacin de sistemas.

Las caractersticas de la segunda generacin son las siguientes: Estn construidas con circuitos de transistores. Se programan en nuevos lenguajes llamados lenguajes de alto nivel.

En esta generacin las computadoras se reducen de tamao y son de menor costo. Aparecen muchas compaas y las computadoras eran bastante avanzadas para su poca como la serie 5000 de Burroughs y la ATLAS de la Universidad de Manchester.

Algunas de estas computadoras se programaban con cintas perforadas y otras ms por medio de cableado en un tablero. Los programas eran hechos a la medida por un equipo de expertos: analistas, diseadores, programadores y operadores que se manejaban como una orquesta para resolver los problemas y clculos solicitados por la administracin. El usuario final de la informacin no tena contacto directo con las

computadoras. Esta situacin en un principio se produjo en las primeras computadoras personales, pues se requera saberlas "programar" (alimentarle instrucciones) para obtener resultados; por lo tanto su uso estaba limitado a aquellos audaces pioneros que gustaran de pasar un buen nmero de horas escribiendo instrucciones, "corriendo" el programa resultante y verificando y corrigiendo los errores o bugs que aparecieran. Adems, para no perder el "programa" resultante haba que "guardarlo" (almacenarlo) en una grabadora de astte, pues en esa poca no haba discos flexibles y mucho menos discos duros para las PC; este procedimiento poda tomar de 10 a 45 minutos, segn el programa. El panorama se modific totalmente con la aparicin de las computadoras personales con mejores circuitos, ms memoria, unidades de disco flexible y sobre todo con la aparicin de programas de aplicacin general en donde el usuario compra el programa y se pone a trabajar. Aparecen los programas procesadores de palabras como el clebre Word Star, la impresionante hoja de clculo (spreadsheet) Visicalc y otros ms que de la noche a la maana cambian la imagen de la PC. El sortware empieza a tratar de alcanzar el paso del hardware. Pero aqu aparece un nuevo elemento: el usuario. Las computadoras de esta generacin fueron: la Philco 212 (esta compaa se retir del mercado en 1964) y la UNIVAC M460, la Control Data Corporation modelo 1604, seguida por la serie 3000, la IBM mejor la 709 y sac al mercado la 7090, la National Cash Register empez a producir mquinas para proceso de datos de tipo comercial, introdujo el modelo NCR 315.

Tercera generacin

Con los progresos de la electrnica y los avances de comunicacin con las computadoras en la dcada de los 1960, surge la tercera generacin de las computadoras. Se inaugura con la IBM 360 en abril de 1964.3

Las caractersticas de esta generacin fueron las siguientes:


Su fabricacin electrnica esta basada en circuitos integrados. Su manejo es por medio de los lenguajes de control de los sistemas operativos.

La IBM produce la serie 360 con los modelos 20, 22, 30, 40, 50, 65, 67, 75, 85, 90, 195 que utilizaban tcnicas especiales del procesador, unidades de cinta de nueve canales, paquetes de discos magnticos y otras caractersticas que ahora son estndares (no todos los modelos usaban estas tcnicas, sino que estaba dividido por aplicaciones).

El sistema operativo de la serie 360, se llam OS que contaba con varias configuraciones, inclua un conjunto de tcnicas de manejo de memoria y del procesador que pronto se convirtieron en estndares.

En 1964 CDC introdujo la serie 6000 con la computadora 6600 que se consider durante algunos aos como la ms rpida.

En la dcada de 1970, la IBM produce la serie 370 (modelos 115, 125, 135, 145, 158, 168). UNIVAC compite son los modelos 1108 y 1110, mquinas en gran escala; mientras que CDC produce su serie 7000 con el modelo 7600. Estas computadoras se caracterizan por ser muy potentes y veloces.

A finales de esta dcada la IBM de su serie 370 produce los modelos 3031, 3033, 4341. Burroughs con su serie 6000 produce los modelos 6500 y 6700 de avanzado diseo, que se reemplazaron por su serie 7000. Honey - Well participa con su computadora DPS con varios modelos.

A mediados de la dcada de 1970, aparecen en el mercado las computadoras de tamao mediano, o minicomputadoras que no son tan costosas como las grandes (llamadas tambin como mainframes que significa tambin, gran sistema), pero disponen de gran capacidad de procesamiento. Algunas minicomputadoras fueron las siguientes: la PDP 8 y la PDP - 11 de Digital Equipment Corporation, la VAX (Virtual Address eXtended) de la misma compaa, los modelos NOVA y ECLIPSE de Data General, la serie 3000 y 9000 de Hewlett - Packard con varios modelos el 36 y el 34, la Wang y Honey - Well -Bull, Siemens de origen alemn, la ICL fabricada en Inglaterra. En la Unin Sovitica se utiliz la US (Sistema Unificado, Ryad) que ha pasado por varias generaciones.

Cuarta Generacin

Aqu aparecen los microprocesadores que es un gran adelanto de la microelectrnica, son circuitos integrados de alta densidad y con una velocidad impresionante. Las microcomputadoras con base en estos circuitos son extremadamente pequeas y baratas, por lo que su uso se extiende al mercado industrial. Aqu nacen las computadoras personales que han adquirido proporciones enormes y que han influido en la sociedad en general sobre la llamada "revolucin informtica".

En 1976 Steve Wozniak y Steve Jobs inventan la primera microcomputadora de uso masivo y ms tarde forman la compaa conocida como la Apple que fue la segunda compaa ms grande del mundo, antecedida tan solo por IBM; y esta por su parte es an de las cinco compaas ms grandes del mundo.

En 1981 se vendieron 800 00 computadoras personales, al siguiente subi a 1 400 000. Entre 1984 y 1987 se vendieron alrededor de 60 millones de computadoras personales, por lo que no queda duda que su impacto y penetracin han sido enormes.

Con el surgimiento de las computadoras personales, el software y los sistemas que con ellas de manejan han tenido un considerable avance, porque han hecho ms interactiva la comunicacin con el usuario. Surgen otras aplicaciones como los procesadores de palabra, las hojas electrnicas de clculo, paquetes grficos, etc. Tambin las industrias del Software de las computadoras personales crece con gran rapidez, Gary Kildall y William Gates se dedicaron durante aos a la creacin de sistemas operativos y mtodos para lograr una utilizacin sencilla de las microcomputadoras (son los creadores de CP/M y de los productos de Microsoft).

No todo son microcomputadoras, por su puesto, las minicomputadoras y los grandes sistemas continan en desarrollo. De hecho las mquinas pequeas rebasaban por mucho la capacidad de los grandes sistemas de 10 o 15 aos antes, que requeran de instalaciones costosas y especiales, pero sera equivocado suponer que las grandes computadoras han desaparecido; por el contrario, su presencia era ya ineludible en prcticamente todas las esferas de control gubernamental, militar y de la gran industria.

Las enormes computadoras de las series CDC, CRAY, Hitachi o IBM por ejemplo, eran capaces de atender a varios cientos de millones de operaciones por segundo.

Quinta Generacin

En vista de la acelerada marcha de la microelectrnica, la sociedad industrial se ha dado a la tarea de poner tambin a esa altura el desarrollo del software y los sistemas con que se manejan las computadoras. Surge la competencia internacional por el dominio del mercado de la computacin, en la que se perfilan dos lderes que, sin embargo, no han podido alcanzar el nivel que se desea: la capacidad de comunicarse con la computadora en un lenguaje ms cotidiano y no a travs de cdigos o lenguajes de control especializados.

Japn lanz en 1983 el llamado "programa de la quinta generacin de computadoras", con los objetivos explcitos de producir mquinas con innovaciones reales en los criterios mencionados. Y en los Estados Unidos ya est en actividad un programa en desarrollo que persigue objetivos semejantes, que pueden resumirse de la siguiente manera:

Procesamiento en paralelo mediante arquitecturas y diseos especiales y circuitos de gran velocidad. Manejo de lenguaje natural y sistemas de inteligencia artificial.

El futuro previsible de la computacin es muy interesante, y se puede esperar que esta ciencia siga siendo objeto de atencin prioritaria de gobiernos y de la sociedad en conjunto. http://www.gestiopolis.com/recursos4/docs/eco/histocom.htm#HISTORIA %20DE%20LA%20COMPUTACIN

1.2 Impacto de las computadoras en la sociedad 1.3 Definiciones Lenguaje de Alto Nivel, bajo nivel, ensamblador y maquina.

Lenguaje Mquina
Son aqullos que estn escritos en lenguajes directamente inteligibles por la mquina (computadora), ya que sus instrucciones son cadenas binarias (cadenas o series de caracteres de dgitos 0 y 1) que especifican una operacin y las posiciones (direccin) de memoria implicadas en la operacin se denominan instrucciones de mquina o cdigo mquina. El cdigo mquina es el conocido cdigo binario. Las instrucciones en lenguaje mquina dependen del hardware de la computadora y, por tanto, diferirn de una computadora a otra.

Ventajas del Lenguaje Mquina Posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traduccin posterior, lo que supone una velocidad de ejecucin superior a cualquier otro lenguaje de programacin.

Desventajas del Lenguaje Mquina Dificultad y lentitud en la codificacin. Poca fiabilidad.

Gran dificultad para verificar y poner a punto los programas. Los programas solo son ejecutables en el mismo procesador (CPU).

En la actualidad, las desventajas superan a las ventajas, lo que hace prcticamente no recomendables a los lenguajes mquinas.

Lenguajes de Bajo Nivel


Son ms fciles de utilizar que los lenguajes mquina, pero al igual que ellos, dependen de la mquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotcnicos. Por ejemplo, nemotcnicos tpicos de operaciones aritmticas son : en ingls : ADD, SUB, DIV, etc. ; en espaol : SUM, RES, DIV, etc.

Una instruccin tpica de suma sera : ADD M, N, P

Esta instruccin significa "sumar el contenido en la posicin de memoria M al nmero almacenado en la posicin de memoria N y situar el resultado en la posicin de memoria P" . Evidentemente es ms sencillo recordar la instruccin anterior con un nemotcnico que su equivalente en cdigo mquina. 0110 1001 1010 1011 Un programa escrito en lenguaje ensamblador, requiere de una fase de traduccin al lenguaje mquina para poder ser ejecutado directamente por la computadora. El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje mquina se conoce como programa objeto, el cual ya es directamente entendible por la computadora.

Ventajas del lenguaje ensamblador frente al lenguaje mquina Mayor facilidad de codificacin y, en general, su velocidad de clculo.

Desventajas del lenguaje ensamblador Dependencia total de la mquina lo que impide la transportabilidad de los programas (posibilidad de ejecutar un programa en diferentes mquinas. El lenguaje ensamblador del PC es distinto del lenguaje ensamblador del Apple Machintosh.

La formacin de los programadores es ms compleja que la correspondiente a los programadores de alto nivel, ya que exige no solo las tcnicas de programacin, sino tambin el conocimiento del interior de la mquina.

Los lenguajes ensamblador tienen sus aplicaciones muy reducidas, se centran bsicamente en aplicaciones de tiempo real, control de procesos y de dispositivos electrnicos.

Lenguajes de Alto Nivel


Estos lenguajes son los ms utilizados por los programadores. Estn diseados para que las personas escriban y entiendan los programas de un modo mucho ms fcil que los lenguajes mquina y ensambladores. Un programa escrito en lenguaje de alto nivel es independiente de la mquina (las instrucciones no dependen del diseo del hardware o de una computadora en particular), por lo que estos programas son portables o transportables. Los programas escritos en lenguaje de alto nivel pueden ser ejecutados con poca o ninguna modificacin en diferentes tipos de computadoras.

Ventajas de los lenguajes de alto nivel

El tiempo de formacin de los programadores es relativamente corto comparado con otros lenguajes. La escritura de programas se basa en reglas sintcticas similares a los lenguajes humanos. Nombres de las instrucciones tales como READ, WRITE, PRINT, OPEN, etc. Las modificaciones y puestas a punto de los programas son ms fciles. Reduccin del coste de los programas. Transportabilidad.

Desventajas de los lenguajes de alto nivel Incremento del tiempo de puesta a punto al necesitarse diferentes traducciones del programa fuente para conseguir el programa definitivo. 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.

Para una mejor compresin de este tema se definir el concepto de programa, por ser este un trmino muy utilizado en el diseo estructurado de algoritmos.

El nico lenguaje que realmente maneja una computadora es el lenguaje Mquina, este lenguaje est formado exclusivamente por nmeros binarios. Adems un programa en lenguaje mquina debe especificar todos los detalles referentes al hardware, lo que hace que adems de muy largo, sea dependiente de la mquina en que se trabaje. Por su parte un programa escrito en un lenguaje de alto nivel, est compuesto de sentencias en un lenguaje ms cercano al lenguaje natural con respecto al primero. Un lenguaje de alto nivel es por tanto ms fcil de entender y aprender, permite a los programadores olvidarse de los detalles del hardware y concentrarse en la lgica del programa; adems produce programas que se pueden ejecutar en diferentes equipos de cmputo con pocos o ningn cambio. Este curso se basar en el lenguaje ANSI C. LENGUAJE DE ALTO NIVEL Lenguaje de programacin parecidos a la lengua del usuario (generalmente al ingls). Los lenguajes de bajo nivel estn ms cercanos a los lenguajes comprensibles para el ordenador. Como los lenguajes de alto nivel han de pasarse a una forma que el ordenador pueda comprender antes de procesarlos, su ejecucin es ms lenta que la de los lenguajes de bajo nivel.

LENGUAJE DE BAJO NIVEL Lenguaje parecido al utilizado en el ordenador. LENGUAJE MAQUINA: Es el escaln inferior al lenguaje de bajo nivel; es el lenguaje que el ordenador entiende directamente . http://www.indaya.com/modules/dictionary/letter.php?letter=L&limite=10 Que es ensamblador y para que sirve? Cuando se empezaron a utilizar smbolos nmotcnicos, se escribieron programas para traducir automticamente los programas escritos en lenguaje ensamblador a lenguaje mquina. A estos programas traductores se les llamo ensambladores.

LENGUAJE DE ALTO NIVEL - Es un tipo de lenguaje de programacin en el que el ordenador necesita un intrprete para traducir las instrucciones enviadas debido a que son muy parecidas al lenguaje humano. LENGUAJE DE BAJO NIVEL - Es aquel lenguaje de programacin que permite aumentar la velocidad de ejecucin de los programas, ya que son instrucciones simples y no necesita un intrprete para traducirlas. http://www.vegavaldavia.com/lafertt/ll.htm Un lenguaje de bajo nivel es aquel que se programa en modo de programacin baja, como assembler(Ensamblador) Y un lenguaje de alto nivel es aquel le se programa utilizando un lenguaje avanzado (Como Visual Basic, C++ u otros) Lenguajes de alto nivel Son lenguajes que no dependen del ordenador sobre el que se van a ejecutar, aunque en algunos casos, el mismo lenguaje necesita diferentes dialectos, segn la arquitectura del ordenador o el sistema operativo sobre el que se ejecute. Son cada vez ms parecidos al lenguaje empleado para la comunicacin verbal. Por supuesto se escriben en ingls. Aunque se han propuesto deversos estndares, la estandarizacin hace menos eficiente la productividad en su escritura y ejecucin, por lo que los fabricantes prefieren crear programas cada vez ms ajustados a la mquina sobre la que se van a ejecutar y mucho ms eficaces, apareciendo en pocos aos distintas versiones mejoradas de cada uno de ellos. En la actualidad, la generacin de cdigo fuente se va reduciendo cada vez ms debido a los generadores automticos de cdigo a partir de diseos visuales creados por los programadores. Estos lenguajes poseen rdenes que ejecutan instrucciones, operadores que relacionan datos de tipo numrico, de texto, de fecha, lgicos, etc. Tambin poseen instrucciones declarativas para definir constantes o variables y permiten incluir tantos comentarios como se desee. En algunos lenguajes se pueden crear bibliotecas mal traducidas, como libreras, que contienen extensiones del lenguaje con nuevas instrucciones. Estas

bibliotecas puden ser adquiridas o creadas por los programadores insertando su cdigo fuente como parte del cdigo original de ese lenguaje. Un ejemplo puede ser cuando se definen dos variables en las que se desarrollan los valores numricos a sumar. Se escriben los textos "Primer nmero: " y "Segundo nmero: ". La instruccin read se especifica para informar a la memoria de los datos de teclado que se hayan introducido. En la memoria se efecta la suma y aparece en una determinada posicin de la pantalla. Los lenguajes de alto nivel necesitan de programas traductores para poder ser ejecutados. Hay dos tipos de traductores: los compiladores y los intrpretes. Ensambladores Son lenguajes en los que a cada instruccin en cdigo fuente le corresponde una instruccin en cdigo mquina. Poseen relativamente pocas instrucciones y no utilizan direcciones fsicas de memoria, sino que permiten el uso de direcciones simblicas y de comentarios. Para ser ejecutado un programa escrito con lenguaje ensamblador necesita ser traducido, utilizndose para ello un "ensamblador" que genera cdigo mquina y elimina los comentarios. El ensamblador genera una tabla que mantiene referencias entre las direcciones simblicas de datos con las direcciones fsicas. En algunos lenguajes ensambladores, que poseen cdigo extendido, a determinadas instrucciones les corresponden varias instrucciones de cdigo mquina. Lenguaje mquina El lenguaje mquina depende de la arquitectura del ordenador, siendo interpretado directamente por el ordenador sin ninguna modificacin. Por las dos razones antes expuestas, su velocidad de ejecucin es muy alta. La codificacin de los programas en lenguaje mquina se hace en binario, octal o hexadecimal, por lo que no es fcilmente legible por el programador. Los programas en lenguaje mquina utilizan direcciones fsicas de memoria para almacenar datos. Son interpretables por ordenadores con el mismo tipo de arquitectura. Por ejemplo, un programa escrito para una estacin de trabajo de Digital no puede ser interpretado correctamente por una estacin de trabajo de IBM o por un ordenador personal, y viceversa. En cambio, un programa escrito en lenguaje mquina para un ordenador personal con procesador 286 puede ser inerpretado por un 486, ya que ambos procesadores comparten las mismas instrucciones. Este tipo de lenguaje ejecuta multitud de operaciones sencillas rpidamente. Por ejemplo, algunos programas no tienen instrucciones para la multiplicacin, por lo que han de ejecutarlas como una sucesin de sumas, es decir, almacenando valores intermedios en memoria. http://www.galeon.com/kronen/lenguajes.htm

La entrada para un ensamblador es un programa fuente escrito en lenguaje ensamblador. La salida es un programa objeto, escrito en lenguaje de mquina. El programa objeto incluye tambin la informacin necesaria para que el cargador pueda preparar el programa objeto para su ejecucin. Para evitar confusiones, de aqu en adelante llamaremos lenguaje ensamblador al conjunto de nemotcnicos y a las reglas para su manejo. Al programa que traduce un programa objeto a partir de un programa escrito en lenguaje ensamblador lo llamaremos ensamblador. Motivos para utilizarlo.

Rapidez: Como el programador directamente selecciona las instrucciones que se ejecutan en el programa, el programa final queda mas optimizado que un programa generado por un compilador. Mayor control de la computadora: Un programa puede accesar directamente cualquier componente y perifrico de la computadora. Independencia del lenguaje: No depende de libreras o del lenguaje mismo para realizar una tarea especifica. Lenguajes como el Basic limitan al programador a lo que el lenguaje puede hacer. La mayora de las computadoras pueden ensamblar: Los recursos necesarios para ensamblar un programa son mucho menores que los compiladores o interpretes. El ensamblador generalmente es ms rpido ensamblando un programa que un compilador generando un archivo ejecutable.

Motivos para no utilizarlo. Desafortunadamente, tambin existen motivos para no crear los programas con ensamblador.

Dependencia del hardware: El cdigo se hace en extremo dependiente del microprocesador, de los dispositivos, de los controladores, etc. Este punto ser analizado con mas detenimiento en dependencias de hardware. Mayor tiempo de codificacin: El numero de lneas de un programa hecho en ensamblador es mayor a uno hecho en un lenguaje de alto nivel (por ejemplo: Funcin en C puede realizar varias decenas o centenas de instrucciones del microprocesador). Comprensin mas profunda de la computadora: Entender un lenguaje de alto nivel es generalmente ms sencillo que el ensamblador. Comprender ensamblador requiere conocimientos ms exactos sobre el funcionamiento interno de la computadora. Errores mas frecuentes en el programa: El evitar un error o encontrar alguno que ya exista es difcil. Las herramientas para este caso (como el CodeView y el TurboDebbuger) ayudan en gran medida a ver lo que esta ocurriendo en la maquina, pero no localizan los errores.

Entonces, cuando utilizo ensamblador y cuando no?

Depende del programa a desarrollar. Si el programa debe controlar en gran medida los componentes internos de la computadora o debe ser lo suficientemente veloz, entonces es recomendable utilizarlo. Si se requiere un sistema grande y no se dispone de mucho tiempo para entregarlo, entonces es mejor juntar un lenguaje de alto nivel con ensamblador (las funciones bsicas del programa realizarlas en ensamblador, y el programa en general codificarlo con el lenguaje de alto nivel). Este punto se discute mas adelante en ensamblador y lenguajes de alto nivel. http://www.itlp.edu.mx/publica/tutoriales/progsis1/tema22.htm

Tipos de Ensambladores.
Aunque todos los ensambladores realizan bsicamente las mismas tareas, podemos clasificarlos de acuerdo a caractersticas. As podemos clasificarlos en:

Ensambladores Cruzados (Cross-Assembler).

Se denominan as los ensambladores que se utilizan en una computadora que posee un procesador diferente al que tendrn las computadoras donde va a ejecutarse el programa objeto producido. El empleo de este tipo de traductores permite aprovechar el soporte de medios fsicos (discos, impresoras, pantallas, etc.), y de programacin que ofrecen las mquinas potentes para desarrollar programas que luego los van a ejecutar sistemas muy especializados en determinados tipos de tareas.

Ensambladores Residentes.

Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecucin, al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro, como se haca en cross-assembler, y sin necesidad de programas simuladores. Sin embargo, puede presentar problemas de espacio de memoria, ya que el traductor ocupa espacio que no puede ser utilizado por el programador. Asimismo, tambin ocupar memoria el programa fuente y el programa objeto. Esto obliga a tener un espacio de memoria relativamente amplio. Es el indicado para desarrollos de pequeos sistemas de control y sencillos automatismo empleando microprocesadores. La ventaja de estos ensambladores es que permiten ejecutar inmediatamente el programa; la desventaja es que deben mantenerse en la memoria principal tanto el ensamblador como el programa fuente y el programa objeto.

Macroensambladores.

Son ensambladores que permiten el uso de macroinstrucciones (macros). Debido a su potencia, normalmente son programas robustos que no permanecen en memoria una vez generado el programa objeto. Puede variar la complejidad de los mismos, dependiendo de las posibilidades de definicin y manipulacin de las macroinstrucciones, pero normalmente son programas bastantes complejos, por lo que suelen ser ensambladores residentes.

Microensambladores.

Generalmente, los procesadores utilizados en las computadoras tienen un repertorio fijo de instrucciones, es decir, que el intrprete de las mismas interpretaba de igual forma un determinado cdigo de operacin. El programa que indica al intrprete de instrucciones de la UCP cmo debe actuar se denomina microprograma. El programa que ayuda a realizar este microprograma se llama microensamblador. Existen procesadores que permiten la modificacin de sus microprogramas, para lo cual se utilizan microensambladores.

Ensambladores de una fase.

Estos ensambladores leen una lnea del programa fuente y la traducen directamente para producir una instruccin en lenguaje mquina o la ejecuta si se trata de una pseudoinstruccin. Tambin va construyendo la tabla de smbolos a medida que van apareciendo las definiciones de variables, etiquetas, etc. Debido a su forma de traduccin, estos ensambladores obligan a definir los smbolos antes de ser empleados para que, cuando aparezca una referencia a un determinado smbolo en una instruccin, se conozca la direccin de dicho smbolo y se pueda traducir de forma correcta. Estos ensambladores son sencillos, baratos y ocupan poco espacio, pero tiene el inconveniente indicado.

Ensambladores de dos fases.

Los ensambladores de dos fases se denominan as debido a que realizan la traduccin en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de smbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de los smbolos utilizados y las posiciones que se les ha asignado. Estos ensambladores son los ms utilizados en la actualidad. http://www.itlp.edu.mx/publica/tutoriales/progsis1/tema221.htm

El proceso de ensamble de uno, dos o ms pasos.


Como se vio en la seccin anterior, existen ensambladores que realizan su tarea en una o ms fases o pasos. El proceso de ensamble de un paso consiste en leer una lnea de programa fuente y traducirla a lenguaje mquina cuando se trata de una instruccin, o se ejecuta si es una seudoinstruccin. La tabla de smbolos se va construyendo a medida que se avanza en la lectura de las lneas del programa fuente. Para que el ensamble de un paso funciones, todos los smbolos deben estar definidos antes de emplearse. Esto debido a que, para traducir correctamente cada instruccin, se debe conocer la direccin de cada uno de los smbolos que intervienen en ella. En otras palabras, no pueden quedar referencias pendientes porque ya no habr otra oportunidad de resolverlas. Tampoco podrn hacerse saltos hacia lneas posteriores. No es posible saltar hacia una lnea cuya etiqueta todava no ha sido definida. Para resolver el problema que presenta el proceso de ensamble de un paso, se utiliza el proceso de ensamble de dos pasos o fases. En la primera fase, se lee el programa fuente y se construye la tabla de smbolos. En la segunda fase, se vuelve a leer el programa fuente y se traduce totalmente ya que se conoce la totalidad de los smbolos utilizados (incluyendo las etiquetas) y las posiciones de memoria que se les han asignado. Como ya se conocen las direcciones de las etiquetas utilizadas, pueden realizarse saltos hacia adelante. http://www.itlp.edu.mx/publica/tutoriales/progsis1/tema222.htm
INTRODUCCIN El ensamblador es el lenguaje mas directo con el ordenador, aunque tambin se le ha llamado Cdigo Mquina, en realidad no es as, esto es debido a la mala utilizacin del trmino Lenguaje Mquina o Cdigo Mquina, ste lenguaje en realidad est formado por unos y ceros, que son los datos que realmente utilizan los ordenadores. Lenguaje Ensamblador, es en realidad el lenguaje propio del microprocesador del ordenador, el microprocesador , tambin llamado uP, es en realidad el centro del ordenador, normalmente los conocemos por sus nombre, 286, 386, 486 , Pentium, etc.. Estos son los nombres que les dan las fbricas de dichos microprocesadores. El lenguaje que utilizan los microprocesadores es el lenguaje ensamblador, ste lenguaje est formado por una serie de palabras o instrucciones las cuales son las ms directas con el microprocesador, es por ello , por lo que es el lenguaje ms rpido que hay, dado que es el lenguaje directo y no necesita ninguna conversin, y es por ello , por lo que se recurre a ste lenguaje para hacer determinadas

funciones o programas que requieren mucha velocidad , como los juegos , inteligencia artificial, etc... ste curso pretende que una vez terminado, tenga usted los conocimientos necesarios para adentrarse profundamente en la utilizacin de ste lenguaje para cuando le sea necesario hacer ritunas, funcione, etc. que le requieran ms velocidad.

http://ayudatecnica.solodrivers.com/manuales_programacion_ensamblador.htm

Uso y aplicaciones del lenguaje ensamblador.

Importancia del Estudio y Uso de Ensamblador Ayuda a conocer a detalle cmo trabaja un CPU Util para Electrnica y Sistemas Desarrolla Habilidades de Programacin Avanzada Mejores Oportunidades de Empleo en la Industria Aplicaciones del Lenguaje Ensamblador Sistemas embebidos:impresoras, cmaras, autos, armas, juguetes, etc. Tiempo Real: en la industria y manufactura, e.g. adquisicin datos, control robots Transporte: barcos, aviones, sondas espaciales, etc. Entretenimiento: Graficacin, Multimedia, Cine y VideoJuegos DSP: Procesamiento de Seales, Voz e Imgenes Otras: Medicina, Aeronatica, Armamento, etc.

Uso de lenguaje ensamblador


Hay algn debate encima de la utilidad del lenguaje ensamblador. En muchos casos, compiladores modernos pueden rendir lenguajes de alto nivel en el cdigo como eso corre tan rpido como la mano que escribe en ensamblador. Sin embargo, algunos clculos discretos aun pueden darse mas rpidamente corriendo cdigo en ensamblador, y alguna programacin de bajo nivel es simplemente mas fcil de hacer en ensamblador. Algunas tareas de sistemas-dependientes realizadas por sistemas operativos simplemente no pueden ser expresadas en lenguajes de alto nivel. Muchos compiladores tambin rinden lenguajes de alto nivel en ensamblador antes de compilar completamente, permitiendo visualizar el cdigo de ensamblador para depurar [debug] y propsito de optimizacin. Muchos dispositivos integrados son tambin programados en ensamblador a exprimir la funcionalidad mxima absoluta fuera de los que es frecuente recursos computacionales muy limitados, aunque esto esta gradualmente cambiando en algunas reas como mas chips poderosos volviendo disponible para el mismo mnimo costo. http://www.geocities.com/SiliconValley/Haven/2037/documentos/Lenguaje_Ensamblador.htm

Tipos de lenguajes ensambladores.

Este lenguaje da la facilidad y las herramientas necesarias para tomar el control de todo lo que la PC puede realizar fsicamente. Como resultado de operaciones muy bsicas suministradas por el ensamblador que realiza tareas simples de transferencia de datos y operaciones lgicas, una pgina de cdigos en lenguaje ensamblador palidece en comparacion con una pgina de cdigo en lenguaje de alto nivel. Hablar del lenguaje mquina requiere comprender muchos conceptos extraos para los programadores de alto nivel, el programador de lenguaje ensamblador debe considerar la segmentacin de memoria; cuando hay control directo del acceso de memoria deben ser tomadas decisiones al minuto, se debe decidir el tamao y tipo de cada dato, muchas de estas consideraciones son nicas a la programacin en lenguaje ensamblador.

ENSAMBLADOR.
Un ensamblador es un software que traduce un programa en memoria escrito en mnemnicos por el usuario, a lenguaje mquina que pueda ser ejecutado por el microprocesador. Al programa en mnemnicos se le llama PROGRAMA FUENTE y al programa en lenguaje mquina se le denomina PROGRAMA OBJETO. Por lo tanto, la entrada al ensamblador es un programa fuente y la salida es un programa objeto.

FUNCIONES DEL ENSAMBLADOR.


A dems de su tarea principal que es traducir mnemnicos a lenguaje mquina, un ensamblador generalmente realiza las siguientes funciones:
o

o o o o

Permite al usuario asignar nombres a localidades de memoria, constantes numricas, dispositivo de E/S y una secuencia de instrucciones. Acepta datos o direcciones en varios sistemas numricos (decimal y hexadecimal) y las convierte en binario. Ejecuta algunas operaciones aritmticas en expresiones como parte del proceso de ensamblador. Permite al usuario designar las reas de memoria donde ser colocados el programa a los datos en el momento de ejecucin. Proporciona la informacin requerida para incluir otros programas o subrutinas de biblioteca dentro del programa que s esta realizando. Permite al usuario controlar el formato del listado del programa resultante del ensamblador.

El lenguaje ensamblador utiliza mnemnicos para representar los cdigos de operacin de las instrucciones y smbolos alfanumricos para representar las direcciones y los datos del programa. Entonces el programa se puede escribir como: MOV AX, (150) MOV BX, AX MOV AX, (151) ADD AX, BX MOV (152), AX Las direcciones y los datos del programa anterior se expresaron directamente en hexadecimal. A continuacin se muestra el mismo programa utilizando todas las propiedades del lenguaje ensamblador. MOV AX, NUM1 MOV BX, AX MOV AX, NUM2 ADD AX, B MOV SUMA, AX La ventaja de utilizar nombres simblicos en las instrucciones, en lugar de su valor numrico, es facilitar la escritura del programa, y tambin simplifica la insercin y eliminacin de instrucciones, haciendo ms fcil el redireccionamiento. La desventaja de un programa en lenguaje ensamblador, es que requiere un programa especial llamado ENSAMBLADOR, que se encarga de traducir los mnemnicos y los smbolos alfanumricos a lenguaje mquina. Adems sigue siendo necesario un conocimiento detallado de la arquitectura del microprocesador. El lenguaje ensamblador es una variante legible para el ser humano del lenguaje mquina que usan las computadoras para ejecutar programa. Al

mismo tiempo la mejor manera de comunicarse con la PC y con el lenguaje mquina de programacin que utilice. El lenguaje ensamblador resulta indispensable cuando se desea escribir programas que controlen las E/S de la PC, agregar nuevas interfaces de E/S, escribir rutinas que aprovechen y maximicen el uso del hardware y en general realizar cualquier tarea que no pueden llevar acabo los dems lenguajes de programacin. El lenguaje ensamblador le brinda la oportunidad de conocer ms afondo la operacin de su PC esto le permite implementar software o hardware de una manera ms consiente. El lenguaje ensamblador hace que se conserve el control total de lo que desea hacer su PC. Una de las mayores importancias del ensamblador es que uno puede optimizar al mximo sus programas (tanto tamao, como velocidad de ejecucin). Otra importancia es la gran velocidad a la que ejecuta el cdigo. El lenguaje ensamblador permite a los ingenieros de software hacer interfaces con el sistema operativo y les da control directo de las operaciones de entrada y salida a monitores, impresoras, y a los importantes dispositivos de memoria de disco duro/flotante. Los programadores de aplicaciones con frecuencia tienen que hacer tambin interfaces directamente con el sistema operativo. Estas rutinas se escriben en lenguaje ensamblador. El lenguaje ensamblador es simplemente una representacin simblica del lenguaje mquina asociado, lo cual permite una programacin menos tediosa que con el anterior. Sin embargo es necesario un conocimiento de la arquitectura mecnica subyacente para realizar una programacin efectiva en cualquiera de estos niveles de lenguaje. La mayora de los ensambladores son ENSAMBLADORES DE DOS ETAPAS (two-pass Asemblers). La PRIMERA ETAPA determina la direccin de memoria en la cual es ensamblado el primer byte de cada instruccin y genera una tabla para los valores de todos los nombres simblicos y etiquetas definidos en el programa. El ensamblador posee una tabla de cdigos de operacincon una entrada por cada cdigo de operacin, cada entrada contiene el mnemnico de la instruccin, su equivalente en lenguaje mquina y el nmero de bytes de la intruccin. Tambin el ensamblador tiene un Contador de localizacin (Location Counter, LC), el cul al inicio se carga con 0 con el valor especificado por una directiva ORG, sta corresponde a la direccin inicial u origen del programa y se le asigna el primer byte de la primera instruccin.

Si un programa tiene una etiqueta, esta se aade a la tabla de smbolos y se le asocia el valor conteniendo del LC en ese momento. El cdigo de operacin de la instruccin se extrae de la tabla de cdigo de operacin incrementando el contador de localizacin igual al nmero de bytes de la instruccin. Esta etapa termina cuando el ensamblador detecta la directiva END. En la SEGUNDA ETAPA, el ensamblador hace un recorrido por el programa, utilizando la tabla de smbolos de los cdigos de operacin, sustituye el mnemnico de cada instruccin por su equivalente en el lenguaje de mquina.

Estructura de un Compilador.

Compilador

Cualquier compilador debe realizar dos tareas principales: anlisis del programa a compilar y sntesis de un programa en lenguaje maquina que, cuando se ejecute, realizara correctamente las actividades descritas en el programa fuente. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformacin al cdigo fuente para obtener el cdigo objeto. La siguiente figura representa los componentes en que se divide un compilador. Las tres primeras fases realizan la tarea de anlisis, y las dems la sntesis. En cada una de las fases se utiliza un administrador de la tabla de smbolos y un manejador de errores http://mx.geocities.com/alfonsoaraujocardenas/compiladores.html

ver archivo: compilacion.pdf y compilador.doc

Ventajas de compilador frente a un intrprete Se compila una vez, se ejecuta n-veces En bucles, la compilacin genera cdigo equivalente al bucle pero un interpretndolo se traduce tantas veces una lnea como veces se repite el bucle El compilador tiene una visin global del programa, por lo que la informacin de mensajes de errores es ms detallada. Ventajas de un intrprete frente a compilador Un interprete necesita menos memoria que un compilador Permite una mayor interactividad con el cdigo en tiempo de desarrollo. Un compilador, no es programa que funciona de manera aislada sino que necesita otro programa para conseguir su objetivo, obtener un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel. Clasificacin de compiladores El programa compilador traduce las instrucciones en un lenguaje de alto nivel a instrucciones que la computadora pueda interpretar y ejecutar. Para cada lenguaje de programacin se requiere un compilador separado, el compilador traduce todo el programa antes de ejecutarlo. En otras palabras un compilador traduce programas insertados en la memoria por el sistema operativo para convertirlos en pulsaciones electrnicas ejecutables (lenguaje mquina). Los compiladores pueden ser de: Una sola pasada: Examina el cdigo fuente una vez, generando el cdigo o programa objeto. Pasadas mltiples: Requiere pasos intermedios para producir un cdigo en otro lenguaje y una pasada final para producir y optimizar el cdigo producido durante los pasos anteriores. Optimizacin: Lee un cdigo fuente, lo analiza y descubre errores potenciales sin ejecutar el programa. Compiladores incrementales: Generan un cdigo objeto, instruccin por instruccin, cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente. Ensamblador: Es un lenguaje fuente y posee una estructura sencilla. Compilador cruzado: Se genera cdigo en un lenguaje objeto para una mquina diferente de la que se esta utilizando para compilar. U compilador cruzado nos permite programar, por ejemplo en Windows para un ambiente como Linux. Compiladores con montador: Ese tipo de compilador compila distintos mdulos de forma independiente y despus es capaz de enlazarlos. Autocompilador: Compilador que esta escrito en el mismo lenguaje que se va a compilar, evidentemente no se puede ejecutar la primera vez. Sirve para hacer ampliaciones de lenguaje, mejorar el cdigo generado, etc. Metacompilador: Es sinnimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones de lenguaje, para el que desea obtener un compilador y genera como salida un compilador de ese lenguaje. Descompilador: Es un programa que acepta como entrada cdigo mquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilacin. Partes en las que trabaja un compilador

Conceptualmente FORTRAN diseo un compilador que trabajaba en fases. Es decir, las fases de un compilador transforman el programa fuente de una representacin a otra, en la prctica se agrupan fases y las representaciones intermedias entre las fases no necesitan ser construidas explcitamente. Anlisis lxico Es la primera fase de un compilador. Su principal funcin consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes lxicos que utiliza el analizador sintctico para hacer el anlisis. Aspectos del anlisis lxico Hay varias razones para dividir en fases el anlisis de la compilacin. El anlisis lxico y anlisis sintctico: Un diseo sencillo es la consideracin ms importante, separar a estos dos tipos de anlisis a menudo permite simplificar una u otra de dichas fases. Se mejora la eficiencia del compilador adems de permitir construir un procesador especializado y potencialmente ms eficiente para esa funcin. Con algunas tcnicas de manejo de buffers para la lectura de caracteres de entrada y procesamiento de componentes lxicos se pueden mejorar significativamente el rendimiento de un compilador. Errores lxicos Son pocos los errores simplemente en el nivel lxico ya que tiene una visin muy restringida de un programa fuente. El analizador lxico debe devolver el componente lxico de un identificador y dejar a otra fase se ocupe de los errores. Suponga que una situacin en la cual el analizador lxico no puede continuar por que ninguno de los patrones concuerda con un prefijo de la entrada. Tal vez la estrategia de recuperacin ms sencilla sea recuperacin EN MODO PANICO (este mtodo de recuperacin es donde se borra caracteres sucesivos de la entrada hasta que el analizador lxico pueda encontrar un componente lxico bien formado). Administrador de entradas Utilizar 2 buffer de entrada resulta til cuando es necesario un pre-anlisis en la entrada para identificar los componentes lxicos despus se introducen algunas tcnicas bsicas para encontrar la velocidad del analizador lxico, como es el uso de centinelas que sirven para marcar el final de buffer, hay tres mtodos generales de implantar un lxico: Utilizar un generador de analizadores lxicos, como el compilador LEX para producir el analizador lxico a partir de una especificacin basada en expresiones regulares, en este caso el generador proporciona rutinas para leer la entrada y manejarla con buffers. Escribir el analizador lxico en un lenguaje convencional de programacin de sistemas utilizando las posibilidades de entrada y salida de este lenguaje para leer la entrada. Escribir el analizador lxico en lenguaje ensamblador y manejar explcitamente la lectura de la entrada. Parejas de buffers Se utiliza un buffer dividido en dos mitades de n-caracteres cada una como se indica en la figura: Texto lenguaje fuente Traductor Texto lenguaje objeto Programa objeto Compilador

Programa fuente Mensajes de error Programa fuente Analizador lxico Analizador sintctico Anlisis semntico Generacin de cdigo intermedio Optimizacin de cdigo Generador de cdigo Programa objeto Manejo de errores Manejo de tabla de smbolos Analizador lxico Analizador sintctico Tabla de smbolos Componente lxico Obtn el siguiente componente lxico Programa fuente Buffer = espacio en memoria

http://html.rincondelvago.com/fundamentos-de-programacion_7.html

Traductores Un traductor es un programa que recibe como entrada cdigo escrito en un cierto lenguaje y produce como salida cdigo en otro lenguaje. Generalmente el lenguaje de entrada es de ms alto nivel que el de salida. Ejemplos de traductores son los ensambladores y los compiladores. Un ensamblador es un programa que traduce de un lenguaje ensamblador a lenguaje mquina, mientras que un compilador es un programa que traduce de un lenguaje de alto nivel a un lenguaje de bajo nivel o a lenguaje mquina. Un traductor es un programa que toma el texto escrito en un lenguaje (el lenguaje fuente) y lo convierte en el texto equivalente en un segundo lenguaje (el lenguaje destino u objeto). Si el fuente es un lenguaje abstracto o de alto nivel y si el objetivo es un lenguaje de ensamble de bajo nivel o de mquina, el traductor es un compilador.

Traductor

http://mx.geocities.com/alfonsoaraujocardenas/compiladores.html

Representacin de la informacin.
Introduccin.

Sistemas Numricos

En el sistema de nmeros decimales se dice que la base o raz es 10 debido a que usa 10 dgitos, y los coeficientes se multiplican por potencias de 10. El sistema binario unicamente posee dos valores posibles que son 0 y 1, en los cuales cada coeficiente Aj se multiplica por 2j, como ejemplo tendremos el desarrollo del nmero binario 11010.11 el cual ser representado por la siguiente manera : 1*24+1*23+0*22+1*21+0*20+1*2-1+1*2-2 16+8+0+2+0+0.5+0.25 = 26.75 Por lo tanto tenemos que un nmero en un sistema de base(r) tiene coeficientes multiplicados por potencias de (r) y quedara representado de la siguiente manera : an*rn+ an-1*rn-1+ . . . + a2*r2+ a1*r1+ a0*r0+ a-1*r-1+ . . . + a-m*r-m

Tipos de sistemas numricos.


Los sistemas de numeracin son conjuntos de dgitos usados para representar cantidades, as se tienen los sistemas de numeracin decimal, binario, octal, hexadecimal, romano, etc. Los cuatro primeros se caracterizan por tener una base (nmero de dgitos diferentes: diez, dos, ocho, dieciseis respectivamente) mientras que el sistema romano no posee base y resulta ms complicado su manejo tanto con nmeros, as como en las operaciones bsicas. Los sistemas de numeracin que poseen una base tienen la caracterstica de cumplir con la notacin posicional, es decir, la posicin de cada nmero le da un valor o peso, as el primer dgito de derecha a izquierda despus del punto decimal, tiene un valor igual a b veces el valor del dgito, y as el dgito tiene en la posicin n un valor igual a: (bn) * A donde: b = valor de la base del sistema n = nmero del dgito o posicin del mismo A = dgito. Por ejemplo:

digitos: 1 2 4 9 5 3 . 3 2 4 posicion 5 4 3 2 1 0 . -1 -2 -3 El sistema numrico decimal El sistema de numeracin decimal es el ms usado, tiene como base el nmero 10, o sea que posee 10 dgitos (o simbolos) diferentes (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). El sistema de numeracin decimal fu desarrollado por los hindes, posteriormente lo introducen los rabes en Europa, donde recibe el nombre de sistema de numeracin decimal o arbigo. Si se aplica la notacin posicional al sistema de numeracin decimal entonces el dgito nmero n tiene el valor: (10n)* A Sistema Binario El sistema de numeracin ms simple que usa la notacin posicional es el sistema de numeracin binario. Este sistema, como su nombre lo indica, usa solamente dos dgitos (0,1). Por su simplicidad y por poseer nicamente dos dgitos diferentes, el sistema de numeracin binario se usa en computacin para el manejo de datos e informacin. Normalmente al dgito cero se le asocia con cero voltios, apagado, desenergizado, inhibido (de la computadora) y el dgito 1 se asocia con +5, +12 volts, encendido, energizado (de la computadora) con el cual se forma la lgica positiva. Si la asociacin es inversa, o sea el nmero cero se asocia con +5 volts o encendido y al nmero 1 se asocia con cero volts o apagado, entonces se genera la lgica negativa. A la representacin de un dgito binario se le llama bit (de la contraccin binary digit) y al conjunto de 8 bits se le llama byte, as por ejemplo: 110 contiene 3 bits, 1001 contiene 4 y 1 contiene 1 bit. Como el sistema binario usa la notacin posicional entonces el valor de cada dgito depende de la posicin que tiene en el nmero, as por ejemplo el nmero 110101b es: 1*(20) + 0*(21) + 1*(22) + 0*(23) + 1*(24) + 1*(25) = 1 + 4 + 16 + 32 = 53d La computadora est diseada sobre la base de numeracin binaria (base 2). Por eso este caso particular merece mencin aparte. Siguiendo las reglas generales para cualquier base expuestas antes, tendremos que: Existen dos dgitos (0 o 1) en cada posicin del nmero. Numerando de derecha a izquierda los dgitos de un nmero, empezando por cero, el valor decimal de la posicin es 2n. Por ejemplo,11012 (en base 2) quiere decir:

1*(23) + 1*(22) + 0*(21) + 1*(20) = 8 + 4 + 0 + 1 = 1310

Sistema Octal El sistema de numeracin octal es tambin muy usado en la computacin por tener una base que es potencia exacta de 2 o de la numeracin binaria. Esta caracterstica hace que la conversin a binario o viceversa sea bastante simple. El sistema octal usa 8 dgitos (0,1,2,3,4,5,6,7) y tienen el mismo valor que en el sistema de numeracin decimal. Como el sistema de numeracin octal usa la notacin posicional entonces para el nmero 3452.32q tenemos: 2*(80) + 5*(81) + 4*(82) + 3*(83) + 3*(8-1) + 2*(8-2) = 2 + 40 + 4*64 + 64 + 3*512 + 3*0.125 + 2*0.015625 = 2 + 40 + 256 + 1536 + 0.375 + 0.03125 = 1834 + 40625dentonces, 3452.32q = 1834.40625d El subindice q indica nmero octal, se usa la letra q para evitar confusin entre la letra o y el nmero 0. Sistema Hexadecimal Un gran problema con el sistema binario es la verbosidad. Para representar el valor 20210 se requieren ocho dgitos binarios, la versin decimal slo requiere de tres dgitos y por lo tanto los nmeros se representan en forma mucho ms compacta con respecto al sistema numrico binario. Desafortunadamente las computadoras trabajan en sistema binario y aunque es posible hacer la conversin entre decimal y binario, ya vimos que no es precisamente una tarea cmoda. El sistema de numeracin hexadecimal, o sea de base 16, resuelve este problema (es comn abreviar hexadecimal como hex aunque hex significa base seis y no base dieciseis). El sistema hexadecimal es compacto y nos proporciona un mecanismo sencillo de conversin hacia el formato binario, debido a sto, la mayora del equipo de cmputo actual utiliza el sistema numrico hexadecimal. Como la base del sistema hexadecimal es 16, cada dgito a la izquierda del punto hexadecimal representa tantas veces un valor sucesivo potencia de 16, por ejemplo, el nmero 123416 es igual a: 1*163 + 2*162 + 3*161 + 4*160 lo que da como resultado: 4096 + 512 + 48 + 4 = 466010 Cada dgito hexadecimal puede representar uno de dieciseis valores entre 0 y 1510. Como slo tenemos diez dgitos decimales, necesitamos inventar seis dgitos adicionales para representar los valores entre 1010 y 1510. En lugar de crear nuevos simbolos para estos dgitos, utilizamos las letras A a la F. La conversin entre hexadecimal y binario es sencilla, considere la siguiente tabla: Binario 0000 0001 0010 0011 0100 Hexadecimal 0 1 2 3 4

0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

5 6 7 8 9 A B C D E F

Esta tabla contiene toda la informacin necesaria para convertir de binario a hexadecimal y visceversa. Para convertir un nmero hexadecimal en binario, simplemente sustituya los correspondientes cuatro bits para cada dgito hexadecimal, por ejemplo, para convertir 0ABCDh en un valor binario: 0 A B C D (Hexadecimal) 0000 1010 1011 1100 1101 (Binario) Por comodidad, todos los valores numricos los empezaremos con un dgito decimal; los valores hexadecimales terminan con la letra h y los valores binarios terminan con la letra b. La conversin de formato binario a hexadecimal es casi igual de fcil, en primer lugar necesitamos asegurar que la cantidad de dgitos en el valor binario es mltiplo de 4, en caso contrario agregaremos ceros a la izquierda del valor, por ejemplo el nmero binario 1011001010, la primera etapa es agregarle dos ceros a la izquierda para que contenga doce ceros: 001011001010. La siguiente etapa es separar el valor binario en grupos de cuatro bits, as: 0010 1100 1010. Finalmente buscamos en la tabla de arriba los correspondientes valores hexadecimales dando como resultado, 2CA, y siguiendo la convencin establecida: 02CAh.

Conversiones.
Decimal a binario, Octal, Hexadecimal
Cuando deseamos efectuar la conversin de decimal a binario o ha cualquier otro sistema con base r es ms conveniente si el nmero se separa en parte entera y en una parte fraccionaria, y la conversin de cada parte se efecta por separado : Ejemplo : Convertir el numero (41)10 a binario 41 1 LSB 20 0 21 22 10 5 0 1

23 24 (41)10 = (101001)2

2 1

0 1

MSB

Para convertir cualquier entero decimal ha cualquier sistema de base r la divisin se hace entre r en lugar de 2. Ejemplo : Convertir el numero (153)10 a base 8 153 154 155 1 LSB 19 3 2 2 MSB

(153)10=(231)8 Para convertir una fraccin decimal a binario, el sistema que se sigue es similar al que utilizamos para los enteros, sin embargo, se usa la multiplicacin en lugar de la divisin, y los enteros se acumulan en lugar de los residuos. Ejemplo : convertir (0.6875)10 a base 2 Entero Fraccin Coeficiente = 1 = 0 = 1 = 1

0.6875 *2 1 0.3750 (a-1) 0.3750 *2 0 0.75 0.75 0.5 *2 1 0.5 *2 1 0.0 (a-2) (a-3) (a-4)

(0.6875)10=(0.1011)2 Cuando deseamos convertir una fraccin decimal en nmero expresado en base r, el procedimiento es similar, la multiplicacin se hace con r en lugar de 2 y los coeficientes se encuentran con los enteros. Ejemplo : convertir (0.513)10 a base 8 Entero 0.513 0.104 0.832 0.656 * * * * 8 8 8 8 Fraccin 4 0 6 5 0.104 0.832 0.656 0.248 a-1 a-2 a-3 a-4 Coeficiente = = = = 4 0 6 5

0.248 0.984 *

* 8 7 0.872 a-6

8 = 7

0.984

a-5

Cuando deseamos hacer la conversin de un nmero decimal de una parte entera y una parte fraccionaria la conversin se hace por separado y posteriormente se combinan las dos respuestas. Ejemplo : (41.6875)10 -> (101001.1011)2

Binario a Decimal, Octal, Hexadecimal.


Un nmero binario x puede convertirse en decimal efectuando la suma de las potencias cuyo valor es uno. Ejemplo : (1010.011)2 = 1*23+0*22+1*21+0*20+0*2-1+1*2-2+1*2-3 = 8+0+2+0+0+0.25+0.125 = 10.375 Las conversiones entre cdigo binario, octal y hexadecimal es muy importante en las comparaciones digitales, ya que cada dgito octal corresponde a tres dgitos binarios y a cada dgito hexadecimal corresponde cuatro dgitos binarios. (10110001101011.111100000110)2 -> (26153.7406)8 Cuando deseamos convertir un nmero binario a hexadecimal, el proceso es similar excepto que el nmero binario se divide en grupos de 4. (10110001101011.11110010)2 -> (2C6B.F2)16 Los nmeros binarios son difciles de manejar ya que se requiere dos o cuatro veces mas dgitos que su equivalente decimal. Ejemplo : (111111111111)2 -> (4095)10 Una forma de reducir esta deficiencia es emplear la relacin entre el sistema de nmeros binarios con el sistema octal o hexadecimal. El nmero binario (111111111111)2 tiene 12 dgitos y los podemos expresar en octal (7777)8 (cuatro dgitos) o en hexadecimal como (FFF)16 (tres dgitos), la representacin octal o hexadecimal es mas deseable ya que se representa en forma mas compacta, como un tercio o un cuarto del nmero de dgitos requeridos por el nmero binario equivalente.

lgebra booleana.
Las lgebras booleanas, estudiadas por primera vez en detalle por George Boole , constituyen un rea de las matemticas que ha pasado a ocupar un lugar prominente con el advenimiento de la computadora digital. Son usadas ampliamente en el diseo de circuitos de distribucin y computadoras, y sus aplicaciones van en aumento en muchas otras reas. En el nivel de lgica digital de una computadora, lo que comnmente se llama hardware, y que est formado por los componentes electrnicos de la mquina, se trabaja con diferencias de tensin, las cuales generan funciones que son calculadas por los circuitos que forman el nivel. stas funciones, en la etapa de disea del hardware, son interpretadas como funciones de boole. En el presente trabajo se intenta dar una definicin de lo que es un lgebra de boole; se tratan las funciones booleanas, haciendo una correlacin con las frmulas proposicionales. Asimismo, se plantean dos formas cannicas de las funciones booleanas, que son tiles para varios propsitos, tales como el de determinar si dos expresiones representan o no la misma funcin. Pero para otros propsitos son a menudo engorrosas, por tener ms operaciones que las necesarias. Particularmente, cuando estamos construyendo los circuitos electrnicos con que implementar funciones booleanas, el problema de determinar una expresin mnima para una funcin es a menudo crucial. No resultan de la misma eficiencia en dinero y tiempo, principalmente, dos funciones las cuales calculan lo mismo pero donde una tiene menos variables y lo hace en menor tiempo. Como solucin a este problema, se plantea un mtodo de simplificacin, que hace uso de unos diagramas especiales llamados mapas o diagramas de Karnaugh, y el cual tiene la limitacin de poder trabajar adecuadamente slo con pocas variables. Se realizan estas presentaciones con el fin de demostrar la afinidad existente entre el lgebra de boole y la lgica proposicional, y con el objeto de cimentar el procedimiento de simplificacin presentado en la lgica de proposiciones. 2. Resea Histrica A mediados del siglo XIX, George Boole (1815-1864), en sus libros: "The Mathematical Analysis of Logic" (1847) y "An Investigation of te Laws of Thought" (1854), desarroll la idea de que las proposiciones lgicas podan ser tratadas mediante herramientas matemticas. Las proposiciones lgicas (asertos, frases o predicados de la lgica clsica) son aquellas que nicamente pueden tomar valores Verdadero/Falso, o preguntas cuyas nicas respuestas posibles sean S/No. Segn Boole, estas proposiciones pueden ser representadas mediante smbolos y la teora que permite trabajar con estos smbolos, sus entradas (variables) y sus salidas (respuestas) es la Lgica Simblica desarrollada por l. Dicha lgica simblica cuenta con operaciones lgicas que siguen el comportamiento de reglas algebraicas. Por ello, al conjunto de reglas de la Lgica Simblica se le denomina LGEBRA DE BOOLE. A mediados del siglo XX el lgebra Booleana result de una gran importancia prctica, importancia que se ha ido incrementando hasta nuestros das, en el manejo de informacin digital (por eso hablamos de Lgica Digital). Gracias a

ella, Shannon (1930) pudo formular su teora de la codificacin y John Von Neumann pudo enunciar el modelo de arquitectura que define la estructura interna de los ordenadores desde la primera generacin. Todas las variables y constantes del lgebra booleana, admiten slo uno de dos valores en sus entradas y salidas: S/No, 0/1 o Verdadero/Falso. Estos valores bivalentes y opuestos pueden ser representados por nmeros binarios de un dgito (bits), por lo cual el lgebra booleana se puede entender cmo el lgebra del Sistema Binario. Al igual que en lgebra tradicional, tambin se trabaja con letras del alfabeto para denominar variables y formar ecuaciones para obtener el resultado de ciertas operaciones mediante una ecuacin o expresin booleana. Evidentemente los resultados de las correspondientes operaciones tambin sern binarios. Todas las operaciones (representadas por smbolos determinados) pueden ser materializadas mediante elementos fsicos de diferentes tipos (mecnicos, elctricos, neumticos o electrnicos) que admiten entradas binarias o lgicas y que devuelven una respuesta (salida) tambin binaria o lgica. Ejemplos de dichos estados son: Abierto/Cerrado (interruptor), Encendida/Apagada (bombilla), Cargado/Descargado (condensador) , Nivel Lgico 0/Nivel lgico 1 (salida lgica de un circuito semiconductor), etctera. Los dispositivos con los cuales se implementan las funciones lgicas son llamados puertas (o compuertas) y, habitualmente, son dispositivos electrnicos basados en transistores. Estos dispositivos, y otros que veremos a lo largo de esta unidad, son los que permiten el diseo, y la ulterior implementacin, de los circuitos de cualquier ordenador moderno, as como de muchos de los elementos fsicos que permiten la existencia de las telecomunicaciones modernas, el control de mquinas, etctera. De hecho, pensando en los ordenadores como una jerarqua de niveles, la base o nivel inferior sera ocupada por la lgica digital (en el nivel ms alto del ordenador encontraramos los actuales lenguajes de programacin de alto nivel). En esta unidad se representan las puertas lgicas elementales, algunas puertas complejas y algunos ejemplos de circuitos digitales simples, as como algunas cuestiones de notacin. Por otra parte se plantean actividades de trabajo, muchas de las cuales implican una respuesta escrita en vuestro cuaderno de trabajo. El deseo del autor es que os resulte sencillo y ameno adentraros en el mundo de la lgica digital y despertaros la curiosidad, tanto por ella, como por la matemtica que subyace en ella.

3. lgebra Booleana El lgebra booleana es un sistema matemtico deductivo centrado en los valores cero y uno (falso y verdadero). Un operador binario " " definido en ste juego de valores acepta un par de entradas y produce un solo valor booleano, por ejemplo, el operador booleano AND acepta dos entradas booleanas y produce una sola salida booleana. Para cualquier sistema algebraico existen una serie de postulados iniciales, de aqu se pueden deducir reglas adicionales, teoremas y otras propiedades del sistema, el lgebra booleana a menudo emplea los siguientes postulados:
Cerrado. El sistema booleano se considera cerrado con respecto a un operador binario si para cada par de valores booleanos se produce un solo resultado booleano. Conmutativo. Se dice que un operador binario " " es conmutativo si A B = B A para todos los posibles valores de A y B. Asociativo. Se dice que un operador binario " " es asociativo si (A B) C = A (B C) para todos los valores booleanos A, B, y C. Distributivo. Dos operadores binarios " " y " % " son distributivos si A (B % C) = (A B) % (A C) para todos los valores booleanos A, B, y C. Identidad. Un valor booleano I se dice que es un elemento de identidad con respecto a un operador binario " " si A I = A. Inverso. Un valor booleano I es un elemento inverso con respecto a un operador booleano " " si A I = B, y B es diferente de A, es decir, B es el valor opuesto de A.

Para nuestros propsitos basaremos el lgebra booleana en el siguiente juego de operadores y valores: - Los dos posibles valores en el sistema booleano son cero y uno, a menudo llamaremos a stos valores respectivamente como falso y verdadero. - El smbolo representa la operacin lgica AND. Cuando se utilicen nombres de variables de una sola letra se eliminar el smbolo , por lo tanto AB representa la operacin lgica AND entre las variables A y B, a esto tambin le llamamos el producto entre A y B. - El smbolo "+" representa la operacin lgica OR, decimos que A+B es la operacin lgica OR entre A y B, tambin llamada la suma de A y B. - El complemento lgico, negacin NOT es un operador unitario, en ste texto utilizaremos el smbolo " ' " para denotar la negacin lgica, por ejemplo, A' denota la operacin lgica NOT de A. - Si varios operadores diferentes aparecen en una sola expresin booleana, el resultado de la expresin depende de la procedencia de los operadores, la cual es de mayor a menor, parntesis, operador lgico NOT, operador lgico AND y operador lgico OR. Tanto el operador lgico AND como el OR son asociativos por la izquierda. Si dos operadores con la misma procedencia estn adyacentes, entonces se evalan de izquierda a derecha. El operador lgico NOT es asociativo por la derecha. Utilizaremos adems los siguientes postulados:
P1 El lgebra booleana es cerrada bajo las operaciones AND, OR y NOT P2 El elemento de identidad con respecto a es uno y con respecto a + es cero. No existe elemento de identidad para el operador NOT P3 Los operadores y + son conmutativos. P4 y + son distributivos uno con respecto al otro, esto es, A (B+C) = (AB)+(AC) y A+ (BC) = (A+B) (A+C). P5 Para cada valor A existe un valor A' tal que AA' = 0 y A+A' = 1. ste valor es el complemento lgico de A. P6 y + son ambos asociativos, sto es, (AB) C = A (BC) y (A+B)+C = A+ (B+C).

Es posible probar todos los teoremas del lgebra booleana utilizando stos postulados, adems es buena idea familiarizarse con algunos de los teoremas ms importantes de los cuales podemos mencionar los siguientes:
Teorema 1: A + A = A Teorema 2: A A = A Teorema 3: A + 0 = A Teorema 4: A 1 = A Teorema 5: A 0 = 0 Teorema 6: A + 1 = 1 Teorema 7: (A + B)' = A' B' Teorema 8: (A B)' = A' + B' Teorema 9: A + A B = A Teorema 10: A (A + B) = A Teorema 11: A + A'B = A + B Teorema 12: A' (A + B') = A'B' Teorema 13: AB + AB' = A Teorema 14: (A' + B') (A' + B) = A' Teorema 15: A + A' = 1 Teorema 16: A A' = 0

Los teoremas siete y ocho son conocidos como Teoremas de DeMorgan en honor al matemtico que los descubri. Caractersticas: Un lgebra de Boole es un conjunto en el que destacan las siguientes caractersticas: 1- Se han definido dos funciones binarias (que necesitan dos parmetros) que llamaremos aditiva (que representaremos por x + y) y multiplicativa (que representaremos por xy) y una funcin monaria (de un solo parmetro) que representaremos por x'. 2- Se han definido dos elementos (que designaremos por 0 y 1) Y 3- Tiene las siguientes propiedades:
Conmutativa respecto a la primera funcin: x + y = y + x Conmutativa respecto a la segunda funcin: xy = yx Asociativa respecto a la primera funcin: (x + y) + z = x + (y +z) Asociativa respecto a la segunda funcin: (xy)z = x(yz) Distributiva respecto a la primera funcin: (x +y)z = xz + yz Distributiva respecto a la segunda funcin: (xy) + z = (x + z)( y + z) Identidad respecto a la primera funcin: x + 0 = x Identidad respecto a la segunda funcin: x1 = x Complemento respecto a la primera funcin: x + x' = 1 Complemento respecto a la segunda funcin: xx' = 0

Propiedades Del lgebra De Boole 1. Idempotente respecto a la primera funcin: x + x = x


Idempotente respecto a la segunda funcin: xx = x Maximalidad del 1: x + 1 = 1 Minimalidad del 0: x0 = 0 Involucin: x'' = x Inmersin respecto a la primera funcin: x + (xy) = x Inmersin respecto a la segunda funcin: x(x + y) = x Ley de Morgan respecto a la primera funcin: (x + y)' = x'y' Ley de Morgan respecto a la segunda funcin: (xy)' = x' + y'

Funcin Booleana Una funcin booleana es una aplicacin de A x A x A x....A en A, siendo A un conjunto cuyos elementos son 0 y 1 y tiene estructura de lgebra de Boole. Supongamos que cuatro amigos deciden ir al cine si lo quiere la mayora. Cada uno puede votar si o no. Representemos el voto de cada uno por xi. La funcin devolver s (1) cuando el numero de votos afirmativos sea 3 y en caso contrario devolver 0. Si x1 vota 1, x2 vota 0, x3 vota 0 y x4 vota 1 la funcin booleana devolver 0. Producto mnimo (es el nmero posible de casos) es un producto en el que aparecen todas las variables o sus negaciones. El nmero posible de casos es 2n. Siguiendo con el ejemplo anterior. Asignamos las letras A, B, C y D a los amigos. Los posibles casos son: Votos Resultado

ABCD 1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000

1 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0

Las funciones booleanas se pueden representar como la suma de productos mnimos (minterms) iguales a 1. En nuestro ejemplo la funcin booleana ser: f(A,B,C,D) = ABCD + ABCD' + ABC'D + AB'CD + A'BCD Diagramas De Karnaugh Los diagramas de Karnaugh se utilizan para simplificar las funciones booleanas. Se construye una tabla con las variables y sus valores posibles y se agrupan los 1 adyacentes, siempre que el nmero de 1 sea potencia de 2. En esta pgina tienes un programa para minimizacin de funciones booleanas mediante mapas de Karnaugh 4. lgebra Booleana y circuitos electrnicos La relacin que existe entre la lgica booleana y los sistemas de cmputo es fuerte, de hecho se da una relacin uno a uno entre las funciones booleanas y los circuitos electrnicos de compuertas digitales. Para cada funcin booleana es posible disear un circuito electrnico y viceversa, como las funciones booleanas solo requieren de los operadores AND, OR y NOT podemos construir nuestros circuitos utilizando exclusivamente stos operadores utilizando las compuertas lgicas homnimas Un hecho interesante es que es posible implementar cualquier circuito electrnico utilizando una sola compuerta, sta es la compuerta NAND Para probar que podemos construir cualquier funcin booleana utilizando slo compuertas NAND, necesitamos demostrar cmo construir un inversor (NOT), una compuerta AND y una compuerta OR a partir de una compuerta NAND, ya que como se dijo, es posible implementar cualquier funcin booleana utilizando slo los operadores booleanos AND, OR y NOT. Para construir un inversor simplemente conectamos juntas las dos entradas de una compuerta NAND. Una vez que tenemos un inversor, construir una compuerta AND es fcil, slo

invertimos la salida de una compuerta NAND, despus de todo, NOT ( NOT (A AND B)) es equivalente a A AND B. Por supuesto, se requieren dos compuertas NAND para construir una sola compuerta AND, nadie ha dicho que los circuitos implementados slo utilizando compuertas NAND sean lo ptimo, solo se ha dicho que es posible hacerlo. La otra compuerta que necesitamos sintetizar es la compuerta lgica OR, sto es sencillo si utilizamos los teoremas de DeMorgan, que en sntesis se logra en tres pasos, primero se reemplazan todos los "" por "+" despus se invierte cada literal y por ltimo se niega la totalidad de la expresin: A OR B A AND B.......................Primer paso para aplicar el teorema de DeMorgan A' AND B'.....................Segundo paso para aplicar el teorema de DeMorgan (A' AND B')'..................Tercer paso para aplicar el teorema de DeMorgan (A' AND B')' = A' NAND B'.....Definicin de OR utilizando NAND Si se tiene la necesidad de construir diferentes compuertas de la manera descrita, bien hay dos buenas razones, la primera es que las compuertas NAND son las ms econmicas y en segundo lugar es preferible construir circuitos complejos utilizando los mismos bloques bsicos. Observe que es posible construir cualquier circuito lgico utilizando slo compuertas de tipo NOR (NOR = NOT(A OR B)). La correspondencia entre la lgica NAND y la NOR es ortogonal entre la correspondencia de sus formas cannicas. Mientras que la lgica NOR es til en muchos circuitos, la mayora de los diseadores utilizan lgica NAND.

http://www.monografias.com/trabajos14/algebra-booleana/algebrabooleana.shtml
Circuitos combinatorios.
Un circuito combinacional es un sistema que contiene operaciones booleanas bsicas (AND, OR, NOT), algunas entradas y un juego de salidas, como cada salida corresponde a una funcin lgica individual, un circuito combinacional a menudo implementa varias funciones booleanas diferentes, es muy importante recordar ste echo, cada salida representa una funcin booleana diferente. Un ejemplo comn de un circuito combinacional es el decodificador de siete segmentos, se trata de un circuito que acepta cuatro entradas y determina cul de los siete segmentos se deben iluminar para representar la respectiva entrada, de acuerdo con lo dicho en el prrafo anterior, se deben implementar siete funciones de salida diferentes, una para cada segmento. Las cuatro entradas para cada una de stas funciones booleanas son los cuatro bits de un nmero binario en el rango de 0 a 9. Sea D el bit de alto orden de ste nmero y A el bit de bajo orden, cada funcin lgica debe producir un uno (para el segmento encendido) para una entrada dada si tal segmento en particular debe ser iluminado, por ejemplo, el segmento e debe iluminarse para los valores 0000, 0010, 0110 y 1000.

En la siguiente tabla se puede ver qu segmentos deben iluminarse de acuerdo al valor de entrada, tenga en cuenta que slo se estn representando valores en el rango de 0 a 9, los decodificadores para las pantallas de siete segmentos comerciales tienen capacidad para desplegar valores adicionales que corresponden a las letras A a la F para representaciones hexadecimales, sin embargo la mecnica para iluminar los respectivos segmentos es similar a la aqu representada para los valores numricos. 0 1 2 3 4 5 6 7 8 9 a a a a a a a b b b b b b b b c c c c c c c c c d d d d d d e e f f f f f f g g g g g g g

e e

Los circuitos combinacionales son la base de muchos componentes en un sistema de cmputo bsico, se puede construir circuitos para sumar, restar, comparar, multiplicar, dividir y muchas otras aplicaciones ms. Circuitos Secuenciales Un problema con la lgica secuencial es su falta de "memoria". En teora, todas las funciones de salida en un circuito combinacional dependen del estado actual de los valores de entrada, cualquier cambio en los valores de entrada se refleja (despus de un intervalo de tiempo llamado retardo de propagacin) en las salidas. Desafortunadamente las computadoras requieren de la habilidad para "recordar" el resultado de clculos pasados. ste es el dominio de la lgica secuencial. Una celda de memoria es un circuito electrnico que recuerda un valor de entrada despus que dicho valor ha desaparecido. La unidad de memoria ms bsica es el flip-flop Set/Reset. Aunque recordar un bit sencillo es importante, la mayora de los sistemas de cmputo requieren recordar un grupo de bits, sto se logra combinando varios flip-flop en paralelo, una conexin de ste tipo recibe el nombre de registro. A partir de aqu es posible implementar diferentes circuitos como registros de corrimiento y contadores, stos ltimos tambin los conocemos como circuitos de reloj. Con los elementos mencionados es posible construir un microprocesador completo. 6. Relacin entre la lgica combinacional y secuencial con la programacin En sta leccin hemos dado una repasada muy bsica a los elementos que forman la base de los modernos sistemas de cmputo, en la seccin dedicada

al diseo electrnico estudiaremos a profundidad los conceptos aqu presentados, pero para aquellos que estn ms interesados en el aspecto programtico podemos decir que con los elementos vistos en sta leccin es posible implementar mquinas de estado, sin embargo la moraleja de sta leccin es muy importante: cualquier algoritmo que podamos implementar en software, lo podemos a su vez implementar directamente en hardware. sto sugiere que la lgica booleana es la base computacional en los modernos sistemas de cmputo actuales. Cualquier programa que Usted escriba, independientemente del lenguaje que utilice, sea ste de alto bajo nivel, se puede especificar como una secuencia de ecuaciones booleanas. Un hecho igualmente interesante es el punto de vista opuesto, es posible implementar cualquier funcin de hardware directamente en software, en la actualidad sta es la funcin principal del lenguaje ensamblador y otros con capacidad de trabajar directamente en hardware, como el C y el C++. Las consecuencias de ste fenmeno apenas se estn explotando, se infiere la existencia de un futuro muy prometedor para el profesional de la programacin, especialmente aquellos dedicados a los sistemas incrustados (embedded systems), los microcontroladores y los profesionales dedicados a la Programacin Orientada a Objetos. Para tener xito en stos campos de la investigacin es fundamental comprender las funciones booleanas y la manera de implementarlas en software. An y cuando Usted no desee trabajar en hardware, es importante conocer las funciones booleanas ya que muchos lenguajes de alto nivel procesan expresiones booleanas, como es el caso de los enunciados if-then los bucles while.

http://www.monografias.com/trabajos14/algebra-booleana/algebrabooleana.shtml Propiedades.
Propiedades del algebra de Boole. 1. Propiedad de cierre. Para un conjunto s se dice que es cerrado para un operador binario si para cada elemento de S el operador binario especifica una regla para obtener un elemento nico de S. Para el conjunto N = {1,2,3,4,} es cerrado con respecto al operador binario (+) por las reglas de la adicin aritmtica, ya que para que cualquier elemento a,b pertenecientes a N por la operacin a + b = c el conjunto de los nmeros naturales no esta cerrado con respecto al operador binario (-) por la regla de la resta aritmtica, debido a que 2-3 = -1 y 2,3 pertenecen a N pero -1 no pertenece a N. 2. Ley asociativa. El operador binario (*) es un conjunto S es asociativo siempre que x*y*z = x*(y*z) para toda x, y pertenecientes a S. 3. Ley conmutativa.

Un operador binario (*) para un conjunto S es conmutativo siempre que: x*y = y*x para toda x,y pertenecientes a S. 4. Elemento identidad. El conjunto S tendr un elemento identidad multiplicativo identidad (*) en S si existe un e perteneciente a S con la propiedad e*x = x*e =e para cada x pertenecientes a S. 5. Inversa. El conjunto S tiene un elemento identidad (e) con respecto al operador (*) siempre que para cada x perteneciente a S exista un elemento y perteneciente a S tal que x*y=e. 6. Ley distributiva. Si el operador (*) y el operador (.), son operadores binarios de S, (*) se dice que es distributivo sobre (.). Siempre que: x*(y . z) = (x*y) . (x*z) - El operador binario (+) define la adicin. - Identidad aditiva es el cero. - La inversa aditiva define la sustraccin. - El operador binario (.) define la multiplicacin. - Identidad multiplicativa es 1. - Inversa multiplicativa de A es igual a 1/A define la divisin esto es A * 1/A = 1 - La nica ley distributiva aplicable es la de operador (.) sobre el operador + (.) sobre (+) a(b+c)=(a.b) +(a.c) Para definir formalmente el lgebra de Boole se emplean postulados de Huntington. 1. a) Cierre con respecto al operador (+) b) Cierre con respecto al operador (.) 2. a) Un elemento identidad con respecto al operador (+), designado por el cero x+0 =0+x=x b) Un elemento identidad con respecto al operador (.) designado por el uno x*1=1*x=x 3. a) Conmutativo con respecto al operador (+) : x+y = y+x b) Conmutativo con respecto al operador (.) : x*y =y*x 4. a) El operador (.) es distributivo sobre el operador (+) : x.(y+z) = (x.y) + (y.z) b) El operador (+) es distributivo sobre el operador (.) : x+(x.z) = (x+y) . (x+z) 5. Para cada elemento de x pertenencia a B existe un elemento x complemento perteneciente a B denominado complemento de x tal que:

a) x+x = 1 b) x = 0 6. Existen cuando menos dos elementos x,y pertenecientes a B tal que x diferente de y. Por lo tanto tenemos que el lgebra de Boole difiere de la aritmtica y del lgebra ordinaria en la sig: a) Los postulados Huntington: no incluyen al ley asociativa, no obstante esta ley es valida para el lgebra booleana (para ambos operadores) b) La ley distributiva del operador (+) sobre el operador (.) esto es: x+(y.z) = (x+y).(x+z), la cual es valida para el lgebra de boole pero no para el lgebra ordinaria. c) El lgebra booleana no tiene inversa aditiva a multiplicativa, por lo tanto no hay operaciones de sustracciones o divisin. d) El postulado 5 define un operador llamado completo que no se encuentra en el lgebra ordinaria. e) En el algebra de Boole se define un conjunto B de dos elementos (0 y 1) y el lgebra ordinaria trata con el conjunto de los nmeros reales. Postulado 2 Postulado 5 Teorema 1 Teorema 2 Teorema 3 involucin Teorema 3 conmutativo Teorema 4 asociativo Postulado 4 distributivo Teorema 5 morgan Teorema 6 absorcin Ejemplos: x+x=x x + x = (x + x) . 1 x + x = (x + x) (x + x) x + x = x + xx x+x=x+0 x+x=x x + xy = x x . 1 + xy = x x (1 + y) = x x (y + 1) = x x (1) = x x=x a) x + 0 = x a) x + x = 1 a) x + x = x a) x + 1 = 1 (x) = x a) x + y = y + x a) x + (y + z) = (x + y) +z a) x (y + z) = xy +xz a) ( x + y) = x y a) x + xy = x b) x . 1 = x b) x . x = 0 b) x . x = x b) x . 0 = 0 b) xy = yx b) x (yz) = (xy) z b) x + yz = (x + y)(x +z) b) (xy) = x + y b) x (x + y) = x

Las variables booleanas pueden tomar varios valores de 1 0. Una funcin booleana es una expresin formada por variables binarias. Ejemplo: F1 = xyz Para F1 considerar que es igual a 1 si: x = 1; y = 1 ; z = 1; de otra manera F1 = 0.

Por lo tanto tendremos que una funcin booleana tambin puede representarse en una tabla de verdad. Para representar una funcin booleana en una tabla de verdad se necesita una lsit de 2ncombinaciones de 1 y 0 de las n variables binarias, y una columna que muestra combinaciones para las cuales f es igual a 1 0. xyz 000 001 010 011 100 101 110 111 F1 F2 F3 F4 0 0 1 0 0 1 0 0 1 0 0 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 1 1 0 1 0 1

F1 = xyz + xyz + xyz + xyz = xy (z+z) + xz (y+y) = xy + xz F2 = xyz + xyz + xyz + xyz = xz (y+y) + xy (z+z) = xz + xy F3 = xyz + xyz + xyz + xyz F4 = xyz + xyz + xyz + xyz + xyz = xy (z+z) + xy (z+z) + xyz = xy + xy + xyz = x (y+y) + xyz = x + xyz

Funciones lgicas.

Manipulacin algebraica Cuando una funcin se incrementa con compuertas lgicas, cada literal en la funcin denota una entrada a una compuerta. 1. Cada literal denota la entrada a una compuerta. 2. Cada termino se implanta con una compuerta.

Por el momento nos limitaremos a la minimizacin por literales. Por lo cual debe quedar muy claro que en la manipulacin algebraica no hay reglas especificas a seguir a que garanticen la respuesta final. Ejemplo: Reducir las siguientes funciones booleanas. 1. x (x+y) = xx + xy = xy 2. xyz + xyz + xy = xz (y+y) + xy = xz + xy 3. x + xy = (x+x)(x+y) = x+y Complemento de una funcin. El complemento de una funcin F es F obteniendose por el intercambio de 1s y 0s y de 0s y 1s. Ejemplo: (A+B+C) = (A+X) para X = B+C A . X ? A . (B+C) ? A . B .C (A+B+C+D+E+F+..I) (A.B.C.D.E.F.I) La forma generalizada de DMorgan enuncia que el complemento de una funcin se obtiene del intercambio de los operadores AND y OR y complementando cada literal. F1 = (xyz + xyz) = (x+y+z . x+y+z) F2 = ? x (yz+yz)? = x + ? x (y+z).(y+z)? Otra forma ms simple para derivar el complemento de una funcin es tomar el dual de la funcin y complementar cada literal. Hay que recordar que el cual de una funcin se obtiene por el intercambio de los operadores AND y OR y los 1s y los 0s. Ejemplo: F1 = xyz + xyz el dual: F1 = (x+y+z) . (x+y+z) Las variables pueden ser normales (x) complemento (x). Cuando tenemos un conjunto de n variables nosotros podemos formar 2n miniterminos de acuerdo a la siguiente tabla: Para n=3 2n-1 combinaciones iniciando a partir de cero.

Cada minitrmino lo obtenemos de un trmino AND de las n variables y complementado cada variable si el nmero binario que representa es un 0 y no complementando si es un 1. Cada minitermino se representa por mj donde j representa el equivalente decimal del nmero binario del minitermino de la misma forma podemos tener los maxiterminos con las n variables formando un trmino OR para cada maxitermino. En estas se hace la consideracin de que cada variable no complementada corresponde al bit 0 y complementada al bit 1.

F1= xyz + xyz + xyz = m1+m4+m7 F2= xyz + xyz + xyz + xyz = m3+m5+m6+m7 F1= xyz + xyz + xyz + xyz + xyz (F1) = (x+y+z) . (x+y+z) . (x+y+z) . (x+y+z) . (x+y+z) = M0 . M2 . M3 . M5 . M6 El complemento de una funcin booleana lo podemos obtener al formar miniterminos para cada combinacin que produce un cero en la funcin y aplicando el operador OR a esos trminos. Las funciones booleanas expresadas como una suma de miniterminos o productos de maxiterminos se dice que esta en forma cannica. Simplificacion de Funciones Suma de miniterminos.

Como sabemos cualquier funcin booleana puede expresarse como una suma de miniterminos. La suma de estos elementos que son los que definen una funcin booleana son aquellos que dan los 1s de la funcin en una tabla de verdad. Algunas veces es conveniente expresar la funcin booleana en la forma de suma de miniterminos. Si no puede hacerse en esta forma entonces puede realizarse primero por la expansin de la expresin en una suma de los trminos AND. Despus cada trmino se inspecciona para ver si contiene todas las variables, si se han perdido una o ms variables, se aplica el operador AND con una expresin x+x en donde x es una de las variables perdidas. Ejemplo: Expresar la funcin F = A+BC en una suma de miniterminos. F= A+BC F(A,B,C) A= A(B+B) = AB+AB = AB(C+C) + AB(C+C) = ABC + ABC + ABC +ABC BC = BC (A+A) = ABC + ABC F = ABC+ABC+ABC+ABC+ABC+ABC F = ABC+ABC +ABC+ABC+ABC F = m1+ m4+m5+ m6+ m7 F(A,B,C)=SUM(1,4,5,6,7) La SUMatoria representa al operador OR que opera en los trminos y nmeros siguientes son los minitrminos de la funcin. Las letras entre parntesis que siguen a F forman una lista de las variables en el orden tomado cuando el minitrmino se convierte en un trmino AND. Producto de los maxitrminos. Para expresar una funcin booleana como un producto de maxitrminos, primero debe llevarse a una forma de trminos OR. Esto es posible al uso de la ley distributiva; esto es si x+yz = (x+y) (x+z); para cualquier variable perdida x en cada trmino se opera a OR con xx. Ejemplo: F = (x+y) (x+z) (y+z) (x+y) = x+y+zz = (x+y+z) (x+y+z) (x+z) = x+z+yy = (x+y+z) (x+y+z) (y+z) = y+z+xx = (x+y+z) (x+y+z) F = (x+y+z) (x+y+z) (x+y+z) (x+y+z) (x+y+z) (x+y+z) F = (x+y+z) (x+y+z) (x+y+z) (x+y+z) F = (x+y+z) (x+y+z) (x+y+z) (x+y+z)

M0 M2 M4 M5 F(x,y,z) = PI(0,2,4,5) El operador PI denota la operacin AND de maxitrminos; y los nmeros son los maxitrminos de la funcin. Conversin entre formas cannicas. El complemento de una funcin expresada como suma de minitrminos es igual a la suma de los minitrminos perdidos de la funcin original. Ejemplo: F(A,B,C) = SUM(1,4,5,6,7) F(A,B,C) = SUM(0,2,3) = m0+m2+m3 Si obtenemos el complemento de F porque el teorema de DMorgan se obtiene F en una forma diferente. (F) = (m0+m2+m3) = m0.m2.m3 = M0 . M2 . M3 = PI(0,2,3) = (x+y+z) . (x+y+z) . (x+y+z) F = AD+BD+BD AD = AD(B+B) = ABD+ABD = ABD(C+C) = ABCD+ABCD = ABD(C+C) = ABCD+ABCD BD = BD(A+A) = ABD+ABD = ABD(C+C) = ABCD+ABCD = ABD(C+C) = ABCD+ABCD BD = BD(A+A) = ABD+ABD = ABD(C+C) = ABCD+ABCD = ABD(C+C) = ABCD+ABCD F = ABCD+ABCD+ABCD+ABCD+ABCD+ABCD+ABCD+ABCD

ARQUITECTURA DE UNA COMPUTADORA 2.1 Concepto de Hardware.

Arquitectura de computadoras

Podemos denominar al hardware como todo el conjunto fsico de la computadora, lo cual incluye el CPU (el cual contiene todas las tarjetas de procesamiento, ya sean de sonidos, grficos, mdem, unidades de discos, procesador, memoria RAM, etc.), el monitor, bocinas, escner, impresora, mouse, teclado, micrfono, entre otros. El Hardware es la unin de componentes fsicos capaces de realizar la comunicacin entre el usuario y el software. (De manera anloga, el software o sistema operativo es el traductor entre la maquina y el hombre, convirtiendo las seales digitales o anlogas en lenguaje humano). Todo sistema de cmputo tiene componentes de hardware dedicados a estas funciones: 1. Unidad de entrada 2. Unidad de salida 3. Unidad central de procesamiento. 4. Memoria y dispositivos de almacenamiento. 2.2 Unidad Central de Procesamiento. Una unidad central de procesamiento (UCP) es donde ocurre el procesamiento de datos. Se le conoce como el cerebro de la computadora. En las microcomputadoras la CPU se encuentra en un chip llamado microprocesador. La CPU consiste de dos componentes bsicos: unidad de control y unidad de aritmtica y lgica.

2.3 Unidad de control La funcin de la unidad de control es coordinar todas las actividades de la computadora. Todos los recursos de la computadora son administrados por la unidad de control. Esta unidad contiene las instrucciones de la CPU para llevar a cabo comandos. En resumen, la unidad de control es la que supervisa, controla las dems partes de la computadora y regula el trabajo que debe realizar, o sea, selecciona, verifica e interpreta las instrucciones del programa y despus verifica que se ejecuten. 2.4 Unidad de aritmtica lgica ALU En la unidad de aritmtica lgica (ALU) es donde ocurre el procesamiento real de los datos. Se realizan todos los clculos y todas las comparaciones y genera los resultados. Cuando la unidad de control encuentra una instruccin de aritmtica o de lgica, le enva el control a la unidad de aritmtica lgica. La ALU contiene una memoria construida directamente en la CPU que se usa para guardar los datos que se estn procesando por la instruccin actual. 2.5 Unidad de entrada Son todos los elementos que permiten la unin del usuario con la unidad de procesamiento central y la memoria.: Entre estos tenemos. Teclado: Dispositivos de entrada que traducen los datos a una forma que la computadora pueda interpretar, para luego procesarlos y almacenarlos, los hay de forma: Teclado alfanumrico y para perfoverificacin Mouse y Joysticks: Dispositivos que convierten el movimiento fsico en seales elctricas binarias y que la misma sea repetida en el monitor. Escner o digitalizador de imgenes: Estn concebidos para interpretar caracteres, combinacin de caracteres, dibujos grficos escritos a mano o en maquinas o impresoras y traducirlos al lenguaje que la computadora entiende. Dispositivos pticos: entre estos tenemos, Lector de marcas o rastreador de marca ptica, Digitalizador de imgenes (scanner), Cmara digital: Digitalizador de audio: entre estos tenemos, Micrfonos 2.6 Unidad de salida Estos dispositivos permiten al usuario ver los resultados de los clculos o de las manipulaciones de datos de la computadora. El dispositivo de salida ms comn es el monitor, impresora, mdem. Monitor: sirve como dispositivo de salida para recibir mensajes del computador. Impresora: seguro Una impresora permite obtener una copia dura o fsica de cualquier informacin que pueda aparecer en pantalla. Hay dos grupos bsicos que son: impresora de Impacto y no impacto o de pgina. Mdem: , dispositivo que sirve para enlaza dos ordenadores transformando las seales digitales. 2.7 Concepto de Memoria La memoria, es una de las partes mas importantes de las computadoras. Cualquier usuario desea agregarle mas memoria a su computadora. Para definirla, diremos que es la capacidad de la PC en retener datos o informacin de manera permanente o temporal. Memoria hay de dos tipos, la memoria RAM y memoria ROM, a continuacin se explican: 2.8 Tipos De Memorias. Memoria ROM (del ingls Read Only Memory, memoria de slo lectura). Es una memoria de slo lectura, de dimensiones ms pequeas que el microprocesador. Si se levanta la capa protectora de los circuitos integrados, se encuentra informacin sobre el tipo de

memoria ROM, y el tamao mximo de informacin que puede contener. La ROM BIOS (Basic Input/Output System, sistema bsico de entrada/salida) traduce todas las rdenes a cdigo mquina, para que la computadora pueda entenderlas. 2.9 Dispositivos Y Perifricos Los perifricos son los dispositivos externos conectados a la computadora que permiten a este recibir los datos de entrada, permitir la informacin de salida y almacenar los datos. Se pueden clasificar de tres formas, de entrada, de almacenamiento, que son a la vez de entrada y salida y finalmente los de salida. 2.10 Dispositivo de almacenamiento Es todo aparato que se utilice para grabar los datos de la computadora de forma permanente o temporal. Una unidad de disco, junto con los discos que graba, es un dispositivo de almacenamiento. A veces se dice que una computadora tiene dispositivos de almacenamiento primarios (o principales) y secundarios (o auxiliares). Cuando se hace esta distincin, el dispositivo de almacenamiento primario es la memoria de acceso aleatorio (RAM) de la computadora, un dispositivo de almacenamiento permanente pero cuyo contenido es temporal. El almacenamiento secundario incluye los dispositivos de almacenamiento ms permanentes, como unidades de disco y de cinta. http://www.gestiopolis.com/recursos4/docs/eco/histocom.htm#HISTORIA%20DE%20LA %20COMPUTACIN

SOFTWARE

Sistemas operativos

3.1 Concepto de Software El Software es un conjunto de programas, documentos, procedimientos, y rutinas asociadas con la operacin de un sistema de cmputo. Distinguindose de los componentes fsicos llamados hardware. Comnmente a los programas de computacin se les llama software; el software asegura que el programa o sistema cumpla por completo con sus objetivos, opera con eficiencia, esta adecuadamente documentado, y suficientemente sencillo de operar. Es simplemente el conjunto de instrucciones individuales que se le proporciona al microprocesador para que pueda procesar los datos y generar los resultados esperados. El hardware por si solo no puede hacer nada, pues es necesario que exista el software, que es el conjunto de instrucciones que hacen funcionar al hardware. 3.2 Sistema Operativo Un Sistema Operativo es un programa que acta como intermediario entre el usuario y el hardware de un computador y su propsito es proporcionar un entorno en el cual el usuario pueda ejecutar programas. El objetivo principal de un Sistema Operativo es, entonces, lograr que el Sistema de computacin se use de manera cmoda, y el objetivo secundario es que el hardware del computador se emplee de manera eficiente. 3.3 Tipos de Sistemas Operativos. Actualmente los sistemas operativos se clasifican en tres clasificaciones: sistemas operativos por su estructura (visin interna), sistemas operativos por los servicios que ofrecen y sistemas operativos por la forma en que ofrecen sus servicios (visin externa). Sistemas Operativos por Servicios(Visin Externa). Esta clasificacin es la ms comnmente usada y conocida desde el punto de vista del usuario final. Por Nmero de Usuarios: Sistema Operativo Monousuario. Los sistemas operativos monousuarios son aqullos que soportan a un usuario a la vez, sin importar el nmero de procesadores que tenga la computadora o el nmero de procesos o tareas que el usuario pueda ejecutar en un mismo instante de tiempo. Las computadoras personales tpicamente

se han clasificado en este rengln. En otras palabras los sistemas monousuarios son aquellos que nada ms puede atender a un solo usuario, gracias a las limitaciones creadas por el hardware, los programas o el tipo de aplicacin que se este ejecutando. Sistema Operativo Multiusuario. Los sistemas operativos multiusuarios son capaces de dar servicio a ms de un usuario a la vez, ya sea por medio de varias terminales conectadas a la computadora o por medio de sesiones remotas en una red de comunicaciones. No importa el nmero de procesadores en la mquina ni el nmero de procesos que cada usuario puede ejecutar simultneamente. En esta categora se encuentran todos los sistemas que cumplen simultneamente las necesidades de dos o ms usuarios, que comparten mismos recursos. Este tipo de sistemas se emplean especialmente en redes. En otras palabras consiste en el fraccionamiento del tiempo (timesharing). Por el Nmero de Tareas: Sistema Operativo Monotarea. Los sistemas monotarea son aquellos que slo permiten una tarea a la vez por usuario. Puede darse el caso de un sistema multiusuario y monotarea, en el cual se admiten varios usuarios al mismo tiempo pero cada uno de ellos puede estar haciendo solo una tarea a la vez. Los sistemas operativos monotareas son ms primitivos y, solo pueden manejar un proceso en cada momento o que solo puede ejecutar las tareas de una en una. Sistema Operativo Multitarea. Un sistema operativo multitarea es aqul que le permite al usuario estar realizando varias labores al mismo tiempo. Es el modo de funcionamiento disponible en algunos sistemas operativos, mediante el cual una computadora procesa varias tareas al mismo tiempo. Existen varios tipos de multitareas. La conmutacin de contextos (context Switching) es un tipo muy simple de multitarea en el que dos o ms aplicaciones se cargan al mismo tiempo, pero en el que solo se esta procesando la aplicacin que se encuentra en primer plano (la que ve el usuario. En la multitarea cooperativa, la que se utiliza en el sistema operativo Macintosh, las tareas en segundo plano reciben tiempo de procesado durante los tiempos muertos de la tarea que se encuentra en primer plano, y siempre que esta aplicacin lo permita. En los sistemas multitarea de tiempo compartido, como OS/2, cada tarea recibe la atencin del microprocesador durante una fraccin de segundo. Un sistema operativo multitarea puede estar editando el cdigo fuente de un programa durante su depuracin mientras compila otro programa, a la vez que est recibiendo correo electrnico en un proceso en background. Es comn encontrar en ellos interfaces grficas orientadas al uso de mens y el ratn, lo cual permite un rpido intercambio entre las tareas para el usuario, mejorando su productividad. Un sistema operativo multitarea se distingue por su capacidad para soportar la ejecucin concurrente de dos o ms procesos activos. La multitarea se implementa generalmente manteniendo el cdigo y los datos de varios procesos simultneamente en memoria y multiplexando el procesador y los dispositivos de E/S entre ellos. La multitarea suele asociarse con soporte hardware y software para proteccin de memoria con el fin de evitar que procesos corrompan el espacio de direcciones y el comportamiento de otros procesos residentes. Por el Nmero de Procesadores: Sistema Operativo de Uniproceso. Un sistema operativo uniproceso es aqul que es capaz de manejar solamente un procesador de la computadora, de manera que si la computadora tuviese ms de uno le sera intil. El ejemplo ms tpico de este tipo de sistemas es el DOS y MacOS. Sistema Operativo de Multiproceso.Un sistema operativo multiproceso se refiere al nmero de procesadores del sistema, que es ms de uno y ste es capaz de usarlos todos para distribuir su

carga de trabajo. Generalmente estos sistemas trabajan de dos formas: simtrica o asimtricamente. Asimtrica. Cuando se trabaja de manera asimtrica, el sistema operativo selecciona a uno de los procesadores el cual jugar el papel de procesador maestro y servir como pivote para distribuir la carga a los dems procesadores, que reciben el nombre de esclavos. Simtrica. Cuando se trabaja de manera simtrica, los procesos o partes de ellos (threads) son enviados indistintamente a cual quiera de los procesadores disponibles, teniendo, tericamente, una mejor distribucin y equilibrio en la carga de trabajo bajo este esquema. Se dice que un thread es la parte activa en memoria y corriendo de un proceso, lo cual puede consistir de un rea de memoria, un conjunto de registros con valores especficos, la pila y otros valores de contexto. Un aspecto importante a considerar en estos sistemas es la forma de crear aplicaciones para aprovechar los varios procesadores. Existen aplicaciones que fueron hechas para correr en sistemas monoproceso que no toman ninguna ventaja a menos que el sistema operativo o el compilador detecte secciones de cdigo paralelizable, los cuales son ejecutados al mismo tiempo en procesadores diferentes. Por otro lado, el programador puede modificar sus algoritmos y aprovechar por s mismo esta facilidad, pero esta ltima opcin las ms de las veces es costosa en horas hombre y muy tediosa, obligando al programador a ocupar tanto o ms tiempo a la paralelizacin que a elaborar el algoritmo inicial. 4. Sistemas Operativos por su Estructura (Visin Interna). Segn, se deben observar dos tipos de requisitos cuando se construye un sistema operativo, los cuales son: Requisitos de usuario: Sistema fcil de usar y de aprender, seguro, rpido y adecuado al uso al que se le quiere destinar. Requisitos del software: Donde se engloban aspectos como el mantenimiento, forma de operacin, restricciones de uso, eficiencia, tolerancia frente a los errores y flexibilidad. A continuacin se describen las distintas estructuras que presentan los actuales sistemas operativos para satisfacer las necesidades que de ellos se quieren obtener. Estructura Monoltica.Es la estructura de los primeros sistemas operativos constituidos fundamentalmente por un solo programa compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una puede llamar a cualquier otra. Las caractersticas fundamentales de este tipo de estructura son: Construccin del programa final a base de mdulos compilados separadamente que se unen a travs del ligador. Buena definicin de parmetros de enlace entre las distintas rutinas existentes, que puede provocar mucho acoplamiento. Carecen de protecciones y privilegios al entrar a rutinas que manejan diferentes aspectos de los recursos de la computadora, como memoria, disco, etc. 3.4 Programas De Aplicaciones Los programas de aplicacin son un conjunto de programas que indican a la computadora cmo analizar tareas especficas para el usuario. La aplicacin es el objeto para el cual se usa la computadora. La computadora obtiene instrucciones a partir del programa de aplicacin. El programa de aplicacin lo escribe un programador de aplicacin, y trabaja bajo la direccin del sistema operativo de la computadora. 3.5 Tipos De Programas De Aplicaciones Los programas de aplicacin se dividen en paquetes de software (edicion de texto, almacenamiento y gestion de datos, realizacin de calculos generar informes, comunicacin con otros ordenadores, enviar y reciver correo etc.) y aplicaciones especficas (facturacin, contabilidad, nominas etc.) Ejemplos de programas de aplicacin:

Procesador de palabras Simplifica la tarea de escribir, editar e imprimir un documento. Tambin mejora la produccin personal permitiendo la duplicacin de un documento sin rescribirlo, o recuperar el documento sin tener que ir sobre una tonelada de papeles para encontrarlo. El usuario puede ver la carta en la pantalla, leerla, corregirla y cambiarla antes de mandarla a imprimir. Puede guardar la carta en un disco y recuperarla ms tarde para hacerle leves cambios o usarla de nuevo en el futuro. Tambin puede cotejar y corregir la gramtica y sugerir sinnimos. Ahorra mucho tiempo. Ejemplos: Word, Wordperfect, Word Star. Hoja electrnica Es una hoja de clculo que permite la manipulacin de datos arreglados en filas y columnas. Una celda puede contener texto, un nmero o una frmula que establece una relacin con otras celdas. Cada vez que se cambia el contenido de una celda, la hoja electrnica libera de lo tedioso de hacer reclculos a mano, ahorrando una gran cantidad de tiempo. Tipos de aplicaciones: inventario, registro de datos, balanceo de chequera, planificacin de producto, requerimientos de materiales y labores, produccin del informe del tiempo, presupuesto, adquisicin y bsqueda de bienes races, anlisis de bienes races y mercadeo. Los paquetes complejos de hojas electrnicas pueden hacer comparaciones de lgica como "if-then-else" o pruebas de "less than/greater than". Estas operaciones se utilizan en tareas como el clculo de nminas. Ejemplos: Excel, Lotus 123. 3.6 Lenguajes de Programacin Los computadores interpretan (comprenden) un lenguaje muy simple llamado lenguaje de mquina. Cada instruccin del lenguaje de mquina es elemental. Un programa escrito en lenguaje de mquina necesita muchas instruccciones para hacer cosas simples (es decir, es difcil de escribir) y slo funciona en un computador del mismo tipo. Los lenguajes de programacin de alto nivel constituyen un paso evolutivo y pretenden brindar cierto nivel de abstraccin e independencia del computador. 3.7 Programas Los programas de computadora son simples largas listas de instrucciones para la computadora a ejecutar, tal vez con tablas de datos. Muchos programas de computadora contienen millones de instrucciones, y muchas de esas instrucciones son ejecutadas repetidamente. Una tpica PC moderna (en el aos 2003) puede ejecutar alrededor de 2-3 billones de instrucciones por segundo. Las computadoras no hacen beneficio de su extraordinaria capacidades por la habilidad de ejecutar complejas instrucciones. Preferiblemente, estas hacen millones de simples instrucciones ordenadas por gente inteligente, "programadores" [programmers]. Buenos programadores desarrollan juegos de instrucciones para hacer tareas comunes (por instancia, dibujar un punto en pantalla) y entonces haces esos juegos de instrucciones disponibles a otros programadores. http://www.gestiopolis.com/recursos4/docs/eco/histocom.htm#HISTORIA%20DE%20LA %20COMPUTACIN

Definicin y concepto.
Un sistema operativo es el programa que oculta la verdad del hardware al programador y presenta una vista simple y agradable de los archivos nominados que pueden leerse y escribirse. Es sistema operativo resguarda al programador del hardware del disco y presenta una interfaz simple orientada al archivo, tambin disimula mucho del trabajo concerniente a interrupciones, relojes o cronmetros, manejo de memoria y otras caractersticas de bajo nivel.

Desde su creacin, las computadoras digitales han utilizado un sistema de codificacin de instrucciones en sistema de numeracin binaria, es decir con los 0S. Esto se debe a que los circuitos integrados funcionan con este principio, es decir, hay corriente o no hay corriente. En el origen de la historia de las computadoras ( hace unos cuarenta aos), los sistemas operativos no existan y la introduccin de un programa para ser ejecutado se converta en un increble esfuerzo que solo poda ser llevado a cabo por muy pocos expertos.

Esto hacia que las computadoras fueran muy complicadas de usar y que se requiriera tener altos conocimientos tcnicos para operarlas. Era tan complejo su manejo, que en algunos casos el resultado llegaba a ser desastroso. Adems, el tiempo requerido para introducir un programa en aquellas grandes mquinas de lento proceso superaba por mucho el de ejecucin y resultaba poco provechosa la utilizacin de computadoras para resolucin de problemas prcticos. Se buscaron medios ms elaborados para manipular la computadora, pero que a su vez simplificaran la labor del operador o el usuario. Es entonces cuando surge la idea de crear un medio para que el usuario pueda operar la computadora con un entorno, lenguaje y operacin bien definido para hacer un verdadero uso y explotacin de esta. Surgen los sistemas operativos. Un sistema operativo es el encargado de brindar al usuario una forma amigable y sencilla de operar, interpretar, codificar y emitir las ordenes al procesador central para que este realice las tareas necesarias y especificas para completar una orden. El sistema operativo, es el instrumento indispensable para hacer de la computadora un objeto til. Bajo este nombre se agrupan todos aquellos programas que permiten a los usuarios la utilizacin de este enredo de cables y circuitos, que de otra manera serian difciles de controlar. Un sistema operativo se define como un conjunto de procedimientos manuales y automticos, que permiten a un grupo de usuarios compartir una instalacin de computadora eficazmente.

Existen diversas definiciones de lo que es un Sistema Operativo, pero no hay una definicin exacta, es decir una que sea estndar; a continuacin se presentan algunas: 1.- Se pueden imaginar un Sistema Operativo como los programas, instalados en el software o firmware, que hacen utilizable el hardware. El hardware proporciona la "capacidad bruta de cmputo"; los sistemas operativos ponen dicha capacidad de cmputo al alcance de los usuarios y administran cuidadosamente el hardware para lograr un buen rendimiento. 2.- Los Sistemas Operativos son ante todo administradores de recursos; el principal recurso que administran es el hardware del computador ;adems de los procesadores, los medios de almacenamiento, los dispositivos de entrada/salida, los dispositivos de comunicacin y los datos. 3.- Un Sistema Operativo es un programa que acta como intermediario entre el usuario y el hardware del computador y su propsito es proporcionar el entorno en el cual el usuario pueda ejecutar programas. Entonces, el objetivo principal de un Sistema Operativo es, lograr que el sistema de computacin se use de manera cmoda, y el objetivo secundario es que el hardware del computador se emplee de manera eficiente. 4.- Un Sistema Operativo es un conjunto de programas que controla la ejecucin de programas de aplicacin y acta como una interfaz entre el usuario y el hardware de una computadora, esto es, un Sistema Operativo explota y administra los recursos de hardware de la computadora con el objeto de proporcionar un conjunto de servicios a los usuarios del sistema. En resumen, se podra decir que los Sistemas Operativos son un conjunto de programas que crean la interfaz del hardware con el usuario, y que tiene dos funciones primordiales, que son: o o Gestionar el hardware.- Se refiere al hecho de administrar de una forma ms eficiente los recursos de la mquina. Facilitar el trabajo al usuario.-Permite una comunicacin con los dispositivos de la mquina.

El Sistema Operativo se encuentra almacenado en la memoria secundaria. Primero se carga y ejecuta un pedazo de cdigo que se encuentra en el procesador, el cual carga el BIOS, y este a su vez carga el Sistema Operativo que carga todos los programas de aplicacin y software variado.

Funciones y caractersticas.
La funcin del sistema operativo es la de presentar al usuario con el equivalente de una mquina ampliada o mquina virtual que sea ms fcil de programar que el hardware implcito. Interpreta los comandos que permiten al usuario comunicarse con el ordenador. Coordina y manipula el hardware de la computadora, como la memoria, las impresoras, las unidades de disco, el teclado o el mouse. Organiza los archivos en diversos dispositivos de almacenamiento, como discos flexibles, discos duros, discos compactos o cintas magnticas. Gestiona los errores de hardware y la prdida de datos. Servir de base para la creacin del software logrando que equipos de marcas distintas funcionen de manera anloga, salvando las diferencias existentes entre ambos. Configura el entorno para el uso del software y los perifricos; dependiendo del tipo de mquina que se emplea, debe establecerse en forma lgica la disposicin y caractersticas del equipo. Como por ejemplo, una microcomputadora tiene fsicamente dos unidades de disco, puede simular el uso de otras unidades de disco, que pueden ser virtuales utilizando parte de la memoria principal para tal fin. En caso de estar conectado a una red, el sistema operativo se convierte en la plataforma de trabajo de los usuarios y es este quien controla los elementos o recursos que comparten. De igual forma, provee de proteccin a la informacin que almacena.

Funciones de los sistemas operativos. 1.- Aceptar todos los trabajos y conservarlos hasta su finalizacin. 2.- Interpretacin de comandos: Interpreta los comandos que permiten al usuario comunicarse con el ordenador. 3.- Control de recursos: Coordina y manipula el hardware de la computadora, como la memoria, las impresoras, las unidades de disco, el teclado o el Mouse. 4.- Manejo de dispositivos de E/S: Organiza los archivos en diversos dispositivos de almacenamiento, como discos flexibles, discos duros, discos compactos o cintas magnticas. 5.- Manejo de errores: Gestiona los errores de hardware y la prdida de datos. 6.- Secuencia de tareas: El sistema operativo debe administrar la manera en que se reparten los procesos. Definir el orden. (Quien va primero y quien despus). 7.- Proteccin: Evitar que las acciones de un usuario afecten el trabajo que esta realizando otro usuario. 8.- Multiacceso: Un usuario se puede conectar a otra mquina sin tener que estar cerca de ella. 9.- Contabilidad de recursos: establece el costo que se le cobra a un usuario por utilizar determinados recursos. Caractersticas de los sistemas operativos. En general, se puede decir que un Sistema Operativo tiene las siguientes caractersticas: Conveniencia. Un Sistema Operativo hace ms conveniente el uso de una computadora. Eficiencia. Un Sistema Operativo permite que los recursos de la computadora se usen de la manera ms eficiente posible. Habilidad para evolucionar. Un Sistema Operativo deber construirse de manera que permita el desarrollo, prueba o introduccin efectiva de nuevas funciones del sistema sin interferir con el servicio.

Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de una mejor manera los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte del procesador para poder compartir los recursos. Relacionar dispositivos (gestionar a travs del kernel). El Sistema Operativo se debe encargar de comunicar a los dispositivos perifricos, cuando el usuario as lo requiera. Organizar datos para acceso rpido y seguro. Manejar las comunicaciones en red. El Sistema Operativo permite al usuario manejar con alta facilidad todo lo referente a la instalacin y uso de las redes de computadoras. Procesamiento por bytes de flujo a travs del bus de datos. Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle fcil al usuario el acceso y manejo de los dispositivos de Entrada/Salida de la computadora. El software de aplicacin son programas que se utilizan para disear, tal como el procesador de palabras, lenguajes de programacin, hojas de clculo, etc. El software de base sirve para interactuar el usuario con la mquina, son un conjunto de programas que facilitan el ambiente plataforma, y permite el diseo del mismo. El Software de base est compuesto por : o o o o Cargadores. Compiladores. Ensambladores. Macros.

Evolucin histrica.
Los Sistemas Operativos, al igual que el Hardware de los computadores, han sufrido una serie de cambios revolucionarios llamados generaciones. En el caso del Hardware, las generaciones han sido marcadas por grandes avances en los componentes utilizados, pasando de vlvulas ( primera generacin ) a transistores ( segunda generacin ), a circuitos integrados ( tercera generacin), a circuitos integrados de gran y muy gran escala (cuarta generacin). Cada generacin Sucesiva de hardware ha ido acompaada de reducciones substanciales en los costos, tamao, emisin de calor y consumo de energa, y por incrementos notables en velocidad y capacidad. Generacion Cero (dcada de 1940) Los primeros sistemas computacionales no posean sistemas operativos. Los usuarios tenan completo acceso al lenguaje de la maquina. Todas las instrucciones eran codificadas a mano. Primera Generacion (dcada de 1950) Los sistemas operativos de los aos cincuenta fueron diseados para hacer mas fluida la transicin entre trabajos. Antes de que los sistemas fueran diseados, se perda un tiempo considerable entre la terminacin de un trabajo y el inicio del siguiente. Este fue el comienzo de los sistemas de procesamiento por lotes, donde los trabajos se reunan por grupos o lotes. Cuando el trabajo estaba en ejecucin, este tenia control total de la maquina. Al terminar cada trabajo, el control era devuelto al sistema operativo, el cual limpiaba y lea e iniciaba el trabajo siguiente. Al inicio de los 50's esto haba mejorado un poco con la introduccin de tarjetas perforadas (las cuales servan para introducir los programas de lenguajes de mquina), puesto que ya no haba necesidad de utilizar los tableros enchufables.

Adems el laboratorio de investigacin General Motors implement el primer sistema operativo para la IBM 701. Los sistemas de los 50's generalmente ejecutaban una sola tarea, y la transicin entre tareas se suavizaba para lograr la mxima utilizacin del sistema. Esto se conoce como sistemas de procesamiento por lotes de un slo flujo, ya que los programas y los datos eran sometidos en grupos o lotes. La introduccin del transistor a mediados de los 50's cambi la imagen radicalmente. Se crearon mquinas suficientemente confiables las cuales se instalaban en lugares especialmente acondicionados, aunque slo las grandes universidades y las grandes corporaciones o bien las oficinas del gobierno se podan dar el lujo de tenerlas. Para poder correr un trabajo (programa), tenan que escribirlo en papel (en Fortran o en lenguaje ensamblador) y despus se perforara en tarjetas. Enseguida se llevara la pila de tarjetas al cuarto de introduccin al sistema y la entregara a uno de los operadores. Cuando la computadora terminara el trabajo, un operador se dirigira a la impresora y desprendera la salida y la llevara al cuarto de salida, para que la recogiera el programador. Segunda Generacion (a mitad de la dcada de 1960) La caracterstica de los sistemas operativos fue el desarrollo de los sistemas compartidos con multiprogramacin, y los principios del multiprocesamiento. En los sistemas de multiprogramacin, varios programas de usuario se encuentran al mismo tiempo en el almacenamiento principal, y el procesador se cambia rpidamente de un trabajo a otro. En los sistemas de multiprocesamiento se utilizan varios procesadores en un solo sistema computacional, con la finalidad de incrementar el poder de procesamiento de la maquina. La independencia de dispositivos aparece despus. Un usuario que desea escribir datos en una cinta en sistemas de la primera generacin tenia que hacer referencia especifica a una unidad de cinta particular. En la segunda generacin, el programa del usuario especificaba tan solo que un archivo iba a ser escrito en una unidad de cinta con cierto numero de pistas y cierta densidad. Se desarrollo sistemas compartidos, en la que los usuarios podan acoplarse directamente con el computador a travs de terminales. Surgieron sistemas de tiempo real, en que los computadores fueron utilizados en el control de procesos industriales. Los sistemas de tiempo real se caracterizan por proveer una respuesta inmediata. Tercera Generacion (mitad de dcada 1960 a mitad dcada de 1970) Se inicia en 1964, con la introduccin de la familia de computadores Sistema/360 de IBM. Los computadores de esta generacin fueron diseados como sistemas para usos generales . Casi siempre eran sistemas grandes, voluminosos, con el propsito de serlo todo para toda la gente. Eran sistemas de modos mltiples, algunos de ellos soportaban simultneamente procesos por lotes, tiempo compartido, procesamiento de tiempo real y multiprocesamiento. Eran grandes y costosos, nunca antes se haba construido algo similar, y muchos de los esfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho despus de lo que el planificador marcaba como fecha de terminacin. Estos sistemas introdujeron mayor complejidad a los ambientes computacionales; una complejidad a la cual, en un principio, no estaban acostumbrados los usuarios. Cuarta Generacion (mitad de dcada de 1970 en adelante) Los sistemas de la cuarta generacin constituyen el estado actual de la tecnologa. Muchos diseadores y usuarios se sienten aun incmodos, despus de sus experiencias con los sistemas operativos de la tercera generacin.

Con la ampliacin del uso de redes de computadores y del procesamiento en lnea los usuarios obtienen acceso a computadores alejados geogrficamente a travs de varios tipos de terminales. Los sistemas de seguridad se ha incrementado mucho ahora que la informacin pasa a travs de varios tipos vulnerables de lneas de comunicacin. La clave de cifrado esta recibiendo mucha atencin; han sido necesario codificar los datos personales o de gran intimidad para que; aun si los datos son expuestos, no sean de utilidad a nadie mas que a los receptores adecuados. El porcentaje de la poblacin que tiene acceso a un computador en la dcada de los ochenta es mucho mayor que nunca y aumenta rpidamente. El concepto de maquinas virtuales es utilizado. El usuario ya no se encuentra interesado en los detalles fsicos de; sistema de computacin que esta siendo accedida. En su lugar, el usuario ve un panorama llamado maquina virtual creado por el sistema operativo. Los sistemas de bases de datos han adquirido gran importancia. Nuestro mundo es una sociedad orientada hacia la informacin, y el trabajo de las bases de datos es hacer que esta informacin sea conveniente accesible de una manera controlada para aquellos que tienen derechos de acceso. Historia de los Sistemas Operativos. Para tratar de comprender los requisitos de un Sistema Operativo y el significado de las principales caractersticas de un Sistema Operativo contemporneo, es til considerar como han ido evolucionando stos con el tiempo. Existen diferentes enfoques o versiones de como han ido evolucionando los Sistemas Operativos La primera de estas versiones podra ser esta: En los 40's, se introducen los programas bit a bit, por medio de interruptores mecnicos y despus se introdujo el leng. mquina que trabajaba por tarjetas perforadas. Con las primeras computadoras, desde finales de los aos 40 hasta la mitad de los aos 50, el programador interactuaba de manera directa con el hardware de la computadora, no exista realmente un Sistema Operativo; las primeras computadoras utilizaban bulbos, la entrada de datos y los programas se realizaban a travs del lenguaje mquina (bits) o a travs de interruptores. Durante los aos 50's y 60's.- A principio de los 50's, la compaa General's Motors implanto el primer sistema operativo para su IBM 170. Empiezan a surgir las tarjetas perforadas las cuales permiten que los usuarios (que en ese tiempo eran programadores, diseadores, capturistas, etc.), se encarguen de modificar sus programas. Establecan o apartaban tiempo, metan o introducan sus programas, corregan y depuraban sus programas en su tiempo. A esto se le llamaba trabajo en serie. Todo esto se traduca en prdida de tiempo y tiempos de programas excesivos. En los aos 60's y 70's se genera el circuito integrado, se organizan los trabajos y se generan los procesos Batch (por lotes), lo cual consiste en determinar los trabajos comunes y realizarlos todos juntos de una sola vez. En esta poca surgen las unidades de cinta y el cargador de programas, el cual se considera como el primer tipo de Sistema Operativo. En los 80's, inici el auge de la INTERNET en los Estados Unidos de Amrica. A finales de los aos 80's comienza el gran auge y evolucin de los Sistemas Operativos. Se descubre el

concepto de multiprogramacin que consiste en tener cargados en memoria a varios trabajos al mismo tiempo, tema principal de los Sistemas Operativos actuales. Los 90's y el futuro, entramos a la era de la computacin distribuida y del multiprocesamiento a travs de mltiples redes de computadoras, aprovechando el ciclo del procesador. Se tendr una configuracin dinmica con un reconocimiento inmediato de dispositivos y software que se aada o elimine de las redes a travs de procesos de registro y localizadores. La conectividad se facilita gracias a estndares y protocolos de sistemas abiertos por organizaciones como la Org. Intern. de normas, fundacin de software abierto, todo estar mas controlado por los protocolos de comunicacin OSI y por la red de servicios digital ISDN. Se ha desarrollado otra versin, la cual se ha hecho en base a etapas o generaciones: 1a. Etapa (1945-1955) : Bulbos y conexiones. Despus de los infructuosos esfuerzos de Babbage, hubo poco progreso en la construccin de las computadoras digitales, hasta la Segunda Guerra Mundial. A mitad de la dcada de los 40's, Howard Aiken (Harvard), John Von Newman (Instituto de Estudios Avanzados, Princeton), J. Prespe R. Eckert y Williams Mauchley (Universidad de Pennsylvania), as como Conrad Zuse (Alemania), entre otros lograron construir mquinas de clculo mediante bulbos. Estas mquinas eran enormes y llenaban cuartos completos con decenas de miles de bulbos, pero eran mucho ms lentas que la computadora casera ms econmica en nuestros das. Toda la programacin se llevaba a cabo en lenguaje de mquina absoluto y con frecuencia se utilizaban conexiones para controlar las funciones bsicas de la mquina. Los lenguajes de programacin eran desconocidos (incluso el lenguaje ensamblador). No se oa de los Sistemas Operativos el modo usual de operacin consista en que el programador reservaba cierto perodo en una hoja de reservacin pegada a la pared, iba al cuarto de la mquina, insertaba su conexin a la computadora y pasaba unas horas esperando que ninguno de los 20,000 o ms bulbos se quemara durante la ejecucin. La inmensa mayora de los problemas eran clculos numricos directos, por ejemplo, el clculo de valores para tablas de senos y cosenos. A principio de la dcada de los 50's la rutina mejoro un poco con la introduccin de las tarjetas perforadas. Fue entonces posible escribir los programas y leerlas en vez de insertar conexiones, por lo dems el proceso era el mismo. 2a. Etapa. (1955-1965) : Transistores y Sistemas de Procesamiento por lotes. La introduccin del transistor a mediados de los aos 50's modific en forma radical el panorama. Las computadoras se volvieron confiables de forma que podan fabricarse y venderse a clientes, con la esperanza de que ellas continuaran funcionando lo suficiente como para realizar un trabajo en forma. Dado el alto costo del equipo, no debe sorprender el hecho de que las personas buscaron en forma por dems rpidas vas para reducir el tiempo invertido. La solucin que, por lo general se adopt, fue la del sistema de procesamiento por lotes. 3ra Etapa (1965-1980 ) : Circuitos integrados y multiprogramacin. La 360 de IBM fue la primera lnea principal de computadoras que utiliz los circuitos integrados, lo que proporcion una gran ventaja en el precio y desempeo con respecto a las mquinas de la segunda generacin, construidas a partir de transistores individuales. Se trabajo con un sistema operativo enorme y extraordinariamente complejo. A pesar de su enorme tamao y sus problemas el sistema operativo de la lnea IBM 360 y los sistemas operativos similares de esta generacin producidos por otros fabricantes de computadoras realmente pudieron satisfacer, en forma razonable a la mayora de sus clientes. Tambin

popularizaron varias tcnicas fundamentales, ausentes de los sistemas operativos de la segunda generacin, de las cuales la ms importante era la de multiprogramacin. Otra caracterstica era la capacidad de leer trabajos de las tarjetas al disco, tan pronto como llegara al cuarto de cmputo. As, siempre que concluyera un trabajo el sistema operativo poda cargar un nuevo trabajo del disco en la particin que quedara desocupada y ejecutarlo. 4ta Etapa (1980-Actualidad) : Computadoras personales. Un interesante desarrollo que comenz a llevarse a cabo a mediados de la dcada de los ochenta ha sido el crecimiento de las redes de computadoras personales, con sistemas operativos de red y sistemas operativos distribuidos. En los sistema operativo de red, los usuarios estn conscientes de la existencia de varias computadoras y pueden conectarse con mquinas remotas y copiar archivos de una mquina a otra. Cada mquina ejecuta su propio sistema operativo local y tiene su propio usuario. Por el contrario, un sistema operativo distribuido es aquel que aparece ante sus usuarios como un sistema tradicional de un solo procesador, aun cuando est compuesto por varios procesadores. En un sistema distribuido verdadero, los usuarios no deben ser conscientes del lugar donde su programa se ejecute o de lugar donde se encuentren sus archivos; eso debe ser manejado en forma automtica y eficaz por el sistema operativo.

Clasificacin.
Sistema Operativo Multitareas. Es el modo de funcionamiento disponible en algunos sistemas operativos, mediante el cual una computadora procesa varias tareas al mismo tiempo. Existen varios tipos de multitareas. La conmutacin de contextos (context Switching) es un tipo muy simple de multitarea en el que dos o ms aplicaciones se cargan al mismo tiempo, pero en el que solo se esta procesando la aplicacin que se encuentra en primer plano (la que ve el usuario). Para activar otra tarea que se encuentre en segundo plano, el usuario debe traer al primer plano la ventana o pantalla que contenga esa aplicacin. En la multitarea cooperativa, la que se utiliza en el sistema operativo Macintosh, las tareas en segundo plano reciben tiempo de procesado durante los tiempos muertos de la tarea que se encuentra en primer plano (por ejemplo, cuando esta aplicacin esta esperando informacin del usuario), y siempre que esta aplicacin lo permita. En los sistemas multitarea de tiempo compartido, como OS/2, cada tarea recibe la atencin del microprocesador durante una fraccin de segundo. Para mantener el sistema en orden, cada tarea recibe un nivel de prioridad o se procesa en orden secuencial. Dado que el sentido temporal del usuario es mucho ms lento que la velocidad de procesamiento del ordenador, las operaciones de multitarea en tiempo compartido parecen ser simultneas. Sistema Operativo Monotareas. Los sistemas operativos monotareas son ms primitivos y es todo lo contrario al visto anteriormente, es decir, solo pueden manejar un proceso en cada momento o que solo puede ejecutar las tareas de una en una. Por ejemplo cuando la computadora esta imprimiendo un documento, no puede iniciar otro proceso ni responder a nuevas instrucciones hasta que se termine la impresin. Sistema Operativo Monousuario.

Los sistemas monousuarios son aquellos que nada ms puede atender a un solo usuario, gracias a las limitaciones creadas por el hardware, los programas o el tipo de aplicacin que se este ejecutando. Estos tipos de sistemas son muy simples, porque todos los dispositivos de entrada, salida y control dependen de la tarea que se esta utilizando, esto quiere decir, que las instrucciones que se dan, son procesadas de inmediato; ya que existe un solo usuario. Y estn orientados principalmente por los microcomputadores. Sistema Operativo Multiusuario. Es todo lo contrario a monousuario; y en esta categora se encuentran todos los sistemas que cumplen simultneamente las necesidades de dos o ms usuarios, que comparten mismos recursos. Este tipo de sistemas se emplean especialmente en redes. En otras palabras consiste en el fraccionamiento del tiempo (timesharing). Secuencia por Lotes. La secuencia por lotes o procesamiento por lotes en microcomputadoras, es la ejecucin de una lista de comandos del sistema operativo uno tras otro sin intervencin del usuario. En los ordenadores ms grandes el proceso de recogida de programas y de conjuntos de datos de los usuarios, la ejecucin de uno o unos pocos cada vez y la entrega de los recursos a los usuarios. Procesamiento por lotes tambin puede referirse al proceso de almacenar transacciones durante un cierto lapso antes de su envo a un archivo maestro, por lo general una operacin separada que se efecta durante la noche. Los sistemas operativos por lotes (batch), en los que los programas eran tratados por grupos (lote) en ves de individualmente. La funcin de estos sistemas operativos consista en cargar en memoria un programa de la cinta y ejecutarlo. Al final este, se realizaba el salto a una direccin de memoria desde donde reasuma el control del sistema operativo que cargaba el siguiente programa y lo ejecutaba. De esta manera el tiempo entre un trabajo y el otro disminua considerablemente. Tiempo Real. Un sistema operativo en tiempo real procesa las instrucciones recibidas al instante, y una vez que han sido procesadas muestra el resultado. Este tipo tiene relacin con los sistemas operativos monousuarios, ya que existe un solo operador y no necesita compartir el procesador entre varias solicitudes. Su caracterstica principal es dar respuestas rpidas; por ejemplo en un caso de peligro se necesitaran respuestas inmediatas para evitar una catstrofe. Tiempo Compartido. El tiempo compartido en ordenadores o computadoras consiste en el uso de un sistema por ms de una persona al mismo tiempo. El tiempo compartido ejecuta programas separados de forma concurrente, intercambiando porciones de tiempo asignadas a cada programa (usuario). En este aspecto, es similar a la capacidad de multitareas que es comn en la mayora de los microordenadores o las microcomputadoras. Sin embargo el tiempo compartido se asocia generalmente con el acceso de varios usuarios a computadoras ms grandes y a organizaciones de servicios, mientras que la multitarea relacionada con las microcomputadoras implica la realizacin de mltiples tareas por un solo usuario.

CLASIFICACIN DE LOS SISTEMAS OPERATIVOS Los sistemas operativos se clasifican en:


Sistemas operativos por lotes. Sistemas operativos multiprogramacin o de multitarea. Sistemas operativos multiusuario. Sistemas operativos de tiempo compartido. Sistemas operativos de tiempo real. Sistemas operativos distribuidos. Sistemas operativos de red. Sistemas operativos paralelos. Sistemas operativos por lotes.

Los sistemas operativos por lotes requieren que la informacin est reunida en bloque o "lote" (el programa, los datos, y las instrucciones). Los trabajos son procesados en el orden de admisin, segn el modelo de "primero en llegar primero en ser atendido". En estos sistemas la memoria se divide en dos zonas. Una de ellas es ocupada por el sistema operativo, y la otra se usa para cargar programas transitorios para su ejecucin. Cuando termina la ejecucin de un programa se carga un nuevo programa en la misma zona de memoria. Algunos ejemplos de Sistemas Operativos por lotes exitosos son el SCOPE, del DC6600, el cual est orientado a procesamiento cientfico pesado, y el EXEC II para el UNIVAC 1107, orientado a procesamiento acadmico. Algunas otras caractersticas Operativos por lotes son:

con

que

cuentan

los

Sistemas

Requiere que el programa, datos y rdenes al sistema sean remitidos todos juntos en forma de lote. Permiten poca o ninguna interaccin usuario/programa en ejecucin. Mayor potencial de utilizacin de recursos que procesamiento serial simple en sistemas multiusuarios. No conveniente para desarrollo de programas por bajo tiempo de retorno y depuracin fuera de lnea. Conveniente para programas de largos tiempos de ejecucin (Ej., anlisis estadsticos, nminas de personal, etc.). Se encuentra en muchos computadores personales combinados con procesamiento serial. Planificacin del procesador sencilla, tpicamente procesados en orden de llegada. Planificacin de memoria sencilla, generalmente se divide en dos: parte residente del S.O. y programas transitorios.

No requieren gestin crtica de dispositivos en el tiempo. Suelen proporcionar gestin sencilla de manejo de archivos: se requiere poca proteccin y ningn control de concurrencia para el acceso.

Figura. Trabajos ms comunes que realiza el Sistema Operativo por lotes. Sistemas operativos multiprogramacin o de multitareas. Los sistemas de multiprogramacin son capaces de soportar dos o ms procesos concurrentes mltiples, permiten que residan al mismo tiempo en la memoria primaria las instrucciones y los datos procedentes de dos o ms procesos. Estos sistemas implican la operacin de multiproceso, para el manejo de la informacin. Se caracterizan principalmente por un gran nmero de programas activos simultneamente que compiten por los recursos del sistema, como el procesador, la memoria, y los "dispositivos de E/S". Estos sistemas monitorean el estado de todos los programas activos y recursos del sistema. Sistemas Operativos como UNIX, Windows 95, Windows 98, Windows NT, MAC-OS, OS/2, soportan la multitarea. Las caractersticas de un Sistema Operativo de multiprogramacin o multitarea son las siguientes: Mejora productividad del sistema y utilizacin de recursos. Multiplexa recursos entre varios programas. Generalmente soportan mltiples usuarios (multiusuarios). Proporcionan facilidades para mantener el entorno de usuarios individuales. Requieren validacin de usuario para seguridad y proteccin. Proporcionan contabilidad del uso de los recursos por parte de los usuarios. Multitarea sin soporte multiusuario se encuentra en algunos computadores personales o en sistemas de tiempo real.

Sistemas multiprocesadores son sistemas multitareas por definicin ya que soportan la ejecucin simultnea de mltiples tareas sobre diferentes procesadores. En general, los sistemas de multiprogramacin se caracterizan por tener mltiples programas activos compitiendo por los recursos del sistema: procesador, memoria, dispositivos perifricos.

Sistemas operativos multiusuario. Los sistemas operativos multiusuario permiten acceder simultneamente a un sistema de computadoras a travs de dos o ms terminales. Este tipo de sistema operativo es fundamental en el manejo de redes de computadoras actualmente. Sistemas operativos de tiempo compartido Los sistemas operativos de tiempo compartido tratan de proporcionar un reparto equitativo de los recursos comunes para dar la impresin a los usuarios de que poseen una computadora independiente. En estos sistemas el administrador de memoria proporciona aislamiento y proteccin de los programas, ya que generalmente no tienen necesidad de comunicarse entre ellos. El control de E/S se encarga de proporcionar o retirar la asignacin a los dispositivos de forma que se preserve la integridad del sistema y se proporcione servicio a todos los usuarios. El administrador de archivos proporciona proteccin y control en el acceso de la informacin, dada la posibilidad de concurrencia y conflictos al tratar de acceder a los archivos. Ejemplos de Sistemas Operativos de tiempo compartido son Multics, OS/360 y DEC-10. Caractersticas de los Sistemas Operativos de tiempo compartido:

Populares representantes de sistemas multiprogramados multiusuario, Ej.: sistemas de diseo asistido por computador, procesamiento de texto, etc. Dan la ilusin de que cada usuario tiene una mquina para s. Mayora utilizan algoritmo de reparto circular. Programas se ejecutan con prioridad rotatoria que se incrementa con la espera y disminuye despus de concedido el servicio. Evitan monopolizacin del sistema asignando tiempos de procesador (time slot). Gestin de memoria proporciona proteccin a programas residentes. Gestin de archivo debe proporcionar proteccin y control de acceso debido a que pueden existir mltiples usuarios accesando a un mismo archivo.

Sistemas operativos de tiempo real Los Sistemas Operativos de tiempo real son aquellos en los cuales no tiene importancia el usuario, sino los procesos. Por lo general, estn subutilizados sus recursos con la finalidad de prestar atencin a los procesos en el momento que lo requieran. Se utilizan en entornos donde son procesados un gran nmero de sucesos o eventos. Muchos Sistemas Operativos de tiempo real son construidos para aplicaciones muy especficas como control de trfico areo, bolsas de valores, control de refineras, control de laminadores. Tambin en el ramo automovilstico y de la electrnica de consumo, las aplicaciones de tiempo real estn creciendo muy rpidamente. Otros campos de

aplicacin de los Sistemas Operativos de tiempo real son los siguientes:


Control de trenes. Telecomunicaciones. Sistemas de fabricacin integrada. Produccin y distribucin de energa elctrica. Control de edificios. Sistemas multimedia.

Algunos ejemplos de Sistemas Operativos de tiempo real son: VxWorks, Solaris, Lyns OS y Spectra. Los Sistemas Operativos de tiempo real, cuentan con las siguientes caractersticas: Se dan en entornos en donde deben ser aceptados y procesados gran cantidad de sucesos, la mayora externos al sistema computacional, en breve tiempo o dentro de ciertos plazos. Se utilizan en control industrial, conmutacin telefnica, control de vuelo, simulaciones en tiempo real., aplicaciones militares, etc. Objetivo es proporcionar rpidos tiempos de respuesta. Procesa rfagas de miles de interrupciones por segundo sin perder un solo suceso. Proceso se activa tras ocurrencia de suceso, mediante interrupcin. Proceso de mayor prioridad expropia recursos. Por tanto generalmente se utiliza planificacin expropiativa basada en prioridades. Gestin de memoria menos exigente que tiempo compartido, usualmente procesos son residentes permanentes en memoria. Poblacin de procesos esttica en gran medida. Poco movimiento de programas entre almacenamiento secundario y memoria. Gestin de archivos se orienta ms a velocidad de acceso que a utilizacin eficiente del recurso.

Sistemas Operativos distribuidos. Permiten distribuir trabajos, tareas o procesos, entre un conjunto de procesadores. Puede ser que este conjunto de procesadores est en un equipo o en diferentes, en este caso es transparente para el usuario. Existen dos esquemas bsicos de stos. Un sistema fuertemente acoplado es a es aquel que comparte la memoria y un reloj global, cuyos tiempos de acceso son similares para todos los procesadores. En un sistema dbilmente acoplado los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local. Los sistemas distribuidos deben de ser muy confiables, ya que si un componente del sistema se compone otro componente debe de ser capaz de reemplazarlo. Entre los diferentes Sistemas Operativos distribuidos que existen tenemos los siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc. Caractersticas de los Sistemas Operativos distribuidos: Coleccin de sistemas autnomos capaces de comunicacin y cooperacin mediante interconexiones hardware y software. Gobierna operacin de un S.C. y proporciona abstraccin de mquina virtual a los usuarios. Objetivo clave es la transparencia.

Generalmente proporcionan medios para la comparticin global de recursos. Servicios aadidos: denominacin global, sistemas de archivos distribuidos, facilidades para distribucin de clculos (a travs de comunicacin de procesos internodos, llamadas a procedimientos remotos, etc.).

Sistemas Operativos de red. Son aquellos sistemas que mantienen a dos o ms computadoras unidas a travs de algn medio de comunicacin (fsico o no), con el objetivo primordial de poder compartir los diferentes recursos y la informacin del sistema. El primer Sistema Operativo de red estaba enfocado a equipos con un procesador Motorola 68000, pasando posteriormente a procesadores Intel como Novell Netware. Los Sistemas Operativos de red ms ampliamente usados son: Novell Netware, Personal Netware, LAN Manager, Windows NT Server, UNIX, LANtastic.

Figura. Se muestra un Sistema Operativo en red. Sistemas Operativos paralelos. En estos tipos de Sistemas Operativos se pretende que cuando existan dos o ms procesos que compitan por algn recurso se puedan realizar o ejecutar al mismo tiempo. En UNIX existe tambin la posibilidad de ejecutar programas sin tener que atenderlos en forma interactiva, simulando paralelismo (es decir, atender de manera concurrente varios procesos de un mismo usuario). As, en lugar de esperar a que el proceso termine de ejecutarse (como lo hara normalmente), regresa a atender al usuario inmediatamente despus de haber creado el proceso. Ejemplos de estos tipos de Sistemas Operativos estn: Alpha, PVM, la serie AIX, que es utilizado en los sistemas RS/6000 de IBM.

Con el paso del tiempo, los Sistemas Operativos fueron clasificndose de diferentes maneras, dependiendo del uso o de la aplicacin que se les daba. A continuacin se mostrarn diversos tipos de Sistemas Operativos que existen en la actualidad, con algunas de sus caractersticas: Sistemas Operativos por lotes. Los Sistemas Operativos por lotes, procesan una gran cantidad de trabajos con poca o ninguna interaccin entre los usuarios y los programas en ejecucin. Se renen todos los trabajos comunes para realizarlos al mismo tiempo, evitando la espera de dos o ms trabajos como sucede en el procesamiento en serie. Estos sistemas son de los ms tradicionales y antiguos, y fueron introducidos alrededor de 1956 para aumentar la capacidad de procesamiento de los programas.

Cuando estos sistemas son bien planeados, pueden tener un tiempo de ejecucin muy alto, porque el procesador es mejor utilizado y los Sistemas Operativos pueden ser simples, debido a la secuenciabilidad de la ejecucin de los trabajos. Algunos ejemplos de Sistemas Operativos por lotes exitosos son el SCOPE, del DC6600, el cual est orientado a procesamiento cientfico pesado, y el EXEC II para el UNIVAC 1107, orientado a procesamiento acadmico. Algunas otras caractersticas con que cuentan los Sistemas Operativos por lotes son: Requiere que el programa, datos y rdenes al sistema sean remitidos todos juntos en forma de lote. Permiten poca o ninguna interaccin usuario/programa en ejecucin. Mayor potencial de utilizacin de recursos que procesamiento serial simple en sistemas multiusuarios. No conveniente para desarrollo de programas por bajo tiempo de retorno y depuracin fuera de lnea. Conveniente para programas de largos tiempos de ejecucin (ej, anlisis estadsticos, nminas de personal, etc.) Se encuentra en muchos computadores personales combinados con procesamiento serial. Planificacin del procesador sencilla, tpicamente procesados en orden de llegada. Planificacin de memoria sencilla, generalmente se divide en dos: parte residente del S.O. y programas transitorios. No requieren gestin crtica de dispositivos en el tiempo. Suelen proporcionar gestin sencilla de manejo de archivos: se requiere poca proteccin y ningn control de concurrencia para el acceso.

Figura. Trabajos ms comunes que realiza el Sistema Operativo por lotes. Sistemas Operativos de tiempo real. Los Sistemas Operativos de tiempo real son aquelos en los cuales no tiene importancia el usuario, sino los procesos. Por lo general, estn subutilizados sus recursos con la finalidad de prestar atencin a los procesos en el momento que lo requieran. se utilizan en entornos donde son procesados un gran nmero de sucesos o eventos. Muchos Sistemas Operativos de tiempo real son construidos para aplicaciones muy especficas como control de trfico areo, bolsas de valores, control de refineras, control de laminadores. Tambin en el ramo automovilstico y de la electrnica de consumo, las aplicaciones de tiempo real estn creciendo muy rpidamente. Otros campos de aplicacin de los Sistemas Operativos de tiempo real son los siguientes: Control de trenes. Telecomunicaciones. Sistemas de fabricacin integrada. Produccin y distribucin de energa elctrica. Control de edificios. Sistemas multimedia.

Algunos ejemplos de Sistemas Operativos de tiempo real son: VxWorks, Solaris, Lyns OS y Spectra. Los Sistemas Operativos de tiempo real, cuentan con las siguientes caractersticas: Se dan en entornos en donde deben ser aceptados y procesados gran cantidad de sucesos, la mayora externos al sisterma computacional, en breve tiempo o dentro de ciertos plazos.

Se utlizan en control industrial, conmutacin telefnica, control de vuelo, simulaciones en tiempo real., aplicaciones militares, etc. Objetivo es proporcionar rpidos tiempos de respuesta. Procesa rfagas de miles de interrupciones por segundo sin perder un solo suceso. Proceso se activa tras ocurrencia de suceso, mediante interrupcin. Proceso de mayor prioridad expropia recursos. Por tanto generalmente se utliza planificacin expropiativa basada en prioridades. Gestin de memoria menos exigente que tiempo compartido, usualmente procesos son residentes permanentes en memoria. Poblacin de procesos esttica en gran medida. Poco movimiento de programas entre almacenamiento secundario y memoria. Gestin de archivos se orienta ms a velocidad de acceso que a utlizacin eficiente del recurso.

Sistemas Operativos de multiprogramacin (o Sistemas Operativos de multitarea). Se distinguen por sus habilidades para poder soportar la ejecucin de dos o ms trabajos activos (que se estn ejecutado) al mismo tiempo. Esto trae como resultado que la Unidad Central de Procesamiento (UCP) siempre tenga alguna tarea que ejecutar, aprovechando al mximo su utilizacin. Su objetivo es tener a varias tareas en la memoria principal, de manera que cada uno est usando el procesador, o un procesador distinto, es decir, involucra mquinas con ms de una UCP. Sistemas Operativos como UNIX, Windows 95, Windows 98, Windows NT, MAC-OS, OS/2, soportan la multitarea. Las caractersticas de un Sistema Operativo de multiprogramacin o multitarea son las siguientes: Mejora productividad del sistema y utilizacin de recursos. Multiplexa recursos entre varios programas. Generalmente soportan mltiples usuarios (multiusuarios). Proporcionan facilidades para mantener el entorno de usuarios inndividuales. Requieren validacin de usuario para seguridad y proteccin. Proporcionan contabilidad del uso de los recursos por parte de los usuarios. Multitarea sin soprte multiusuario se encuentra en algunos computadores personales o en sistemas de tiempo real. Sistemas multiprocesadores son sistemas multitareas por definicin ya que soportan la ejecucin simultnea de mltiples tareas sobre diferentes procesadores. En general, los sistemas de multiprogramacin se caracterizan por tener mltiples programas activos compitiendo por los recursos del sistema: procesador, memoria, dispositivos perifricos.

Sistemas Operativos de tiempo compartido. Permiten la simulacin de que el sistema y sus recursos son todos para cada usuarios. El usuario hace una peticin a la computadora, esta la procesa tan pronto como le es posible, y la respuesta aparecer en la terminal del usuario. Los principales recursos del sistema, el procesador, la memoria, dispositivos de E/S, son continuamente utilizados entre los diversos usuarios, dando a cada usuario la ilusin de que tiene el sistema dedicado para s mismo. Esto trae como consecuencia una gran carga de trabajo al Sistema Operativo, principalmente en la administracin de memoria principal y secundaria.

Ejemplos de Sistemas Operativos de tiempo compartido son Multics, OS/360 y DEC-10. Caractersticas de los Sistemas Operativos de tiempo compartido: Populares representantes de sistemas multiprogramados multiusuario, ej: sistemas de diseo asistido por computador, procesamiento de texto, etc. Dan la ilusin de que cada usuario tiene una mquina para s. Mayora utilizan algoritmo de reparto circular. Programas se ejcutan con prioridad rotatoria que se incrementa con la espera y disminuye despus de concedido el servicio. Evitan monopolizacin del sistema asignando tiempos de procesador (time slot). Gestin de memoria proporciona proteccin a programas residentes. Gestin de archivo debe proporcionar proteccin y control de acceso debido a que pueden existir mltiples usuarios accesando un mismo archivos.

Sistemas Operativos distribuidos. Permiten distribuir trabajos, tareas o procesos, entre un conjunto de procesadores. Puede ser que este conjunto de procesadores est en un equipo o en diferentes, en este caso es trasparente para el usuario. Existen dos esquemas bsicos de stos. Un sistema fuertemente acoplado es a es aquel que comparte la memoria y un reloj global, cuyos tiempos de acceso son similares para todos los procesadores. En un sistema dbilmente acoplado los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local. Los sistemas distribuidos deben de ser muy confiables, ya que si un componente del sistema se compone otro componente debe de ser capaz de reemplazarlo. Entre los diferentes Sistemas Operativos distribuidos que existen tenemos los siguientes: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos, etc. Caracteristicas de los Sistemas Operativos distribuidos: Coleccin de sistemas autnomos capaces de comunicacin y cooperacin mediante interconexiones hardware y software . Gobierna operacin de un S.C. y proporciona abstraccin de mquina virtual a los usuarios. Objetivo clave es la transparencia. Generalmente proporcionan medios para la comparticin global de recursos. Servicios aadidos: denominacin global, sistemas de archivos distribuidos, facilidades para distribucin de clculos (a travs de comunicacin de procesos internodos, llamadas a procedimientos remotos, etc.).

Sistemas Operativos de red. Son aquellos sistemas que mantienen a dos o ms computadoras unidas atravs de algn medio de comunicacin (fisico o no), con el objetivo primordial de poder compartir los diferentes recursos y la informacin del sistema. El primer Sistema Operativo de red estaba enfocado a equipos con un procesador Motorola 68000, pasando posteriormente a procesadores Intel como Novell Netware. Los Sistemas Operativos de red mas ampliamente usados son: Novell Netware, Personal Netware, LAN Manager, Windows NT Server, UNIX, LANtastic.

Sistemas Operativos paralelos. En estos tipos de Sistemas Operativos se pretende que cuando existan dos o ms procesos que compitan por algn recurso se puedan realizar o ejecutar al mismo tiempo. En UNIX existe tambin la posibilidad de ejecutar programas sin tener que atenderlos en forma interactiva, sinulando paralelismo (es decir, atender de manera concurrente varios procesos de un mismo usuario). As, en lugar de esperar a que el proceso termine de ejecutarse (como lo hara normalmente), regresa a atender al usuario inmediatamente despus de haber creado el proceso. Ejemplos de estos tipos de Sistemas Operativos estn: Alpha, PVM, la serie AIX, que es utilizado en los sistemas RS/6000 de IBM.

Estructura (niveles o estratos de diseo).


Internamente los sistemas operativos estructuralmente de se clasifican segn como se hayan organizado intrnamente en su diseo, por esto la clasificacin ms comn de los S.O. son: Sistemas monolticos:

En estos sistemas operativos se escriben como un conjunto de procedimientos, cada uno de los cuales puede llamar a cualquiera de los otros siempre que lo necesite. Cuando se emplea esta tcnica, cada procedimiento del sistema tiene una interfaz bien definida en trminos de parmetros y resultados, y cada una tiene la libertad de llamar a cualquiera otra, si la ltima ofrece algn clculo til que la primera necesite. Para construir el programa objeto real del sistema operativo cuando se usa este mtodo, se compilan todos los procedimientos individuales a archivos que contienen los procedimientos y despus se combinan todos en un solo archivo objeto con el enlazador. En trminos de ocultamiento de informacin, esencialmente no existe ninguno; todo procedimiento es visible para todos (al contrario de una estructura que contiene mdulos o paquetes, en los cuales mucha informacin es local a un mdulo y slo pueden llamar puntos de registro designados oficialmente del exterior del mdulo) Esta organizacin sugiere una estructura bsica del sistema operativo: 1.- Un programa central que invoque el procedimiento de servicio solicitado (Shell o Kernel) 2.- Un conjunto de procedimientos de servicios que realice las llamadas al sistema. 3.- Un conjunto de procedimientos de uso general que ayude a los procedimientos de servicio Sistemas en estratos:

Estos sistemas operativos se organizan como una jerarqua de estratos, cada uno construido arriba del que est debajo de l. El primer sistema construido en esta forma fuel el sistema THE que se fabric en Technische Hogeschool Eindhoven de Holanda por E. W Dijkstra (1968) y sus alumnos. El sistema THE era un sistema de lote para una computadora alemana, la Electrolgica X8, que tena 32K de palabras de 27 bits ( los bits eran costosos en aquellos das) El sistema tena 6 estratos, estos se muestran en la siguiente tabla: 5 Operador de THE

4 3 2 1 0

Programas del usuario Administracin de Entrada/Salida Comunicacin entre el operador y el proceso Administracin de la memoria y el tambor magntico Distribucin del procesador y multiprogramacin

- El estrato 0 trabajaba con la distribucin del procesador, cambiando entre procesos cuando ocurran interrupciones o los relojes expiraban. Sobre el estrato 0, el sistema constaba de procesos secuenciales, cada uno de los cuales poda programarse sin tener que preocuparse por el hecho de que mltiples procesos estuvieran corriendo en un solo procesador. En otras palabras, el estarto 0 ofreca la multiprogramacin bsica de la CPU. El estrato 1 realizaba el manejo de memoria. Este distribua espacio para procesos contenidos en la memoria central y en un tambor de 512K palabras que se usaba para contener partes de procesos (pginas) para las cuales no haba espacio en la memoria central. Sobre el estrato 1, los procesos no tena que preocuparse de si estaban en la memoria o en el tambor; el software del estrato 1 se haca cargo de asegurar que las pginas se trajeran a la memoria siempre que se necesitaran. El estrato 2 manejaba la comunicacin entre cada proceso y la consola de operador. El estrato 3 se haca cargo de manejar los dispositivos de E/S y de separar la informacin en flujo que entraba y sal de ellos. Sobre el estrato 3 cada proceso poda trabajar con dispositivos de E/S abstractos con propiedades agradables, en vez de dispositivos reales con muchas peculiaridades El estrato 4 era donde se encontraban los programas de los usuarios. No tenan que preocuparse por el manejo de los procesos, memoria, consola o E/S. El proceso operador del sistema se localizaba en el estrato 5. En esta unidad examinaremos cuatro estructuras distintas que ya han sido probadas, con el fin de tener una idea ms extensa de cmo esta estructurado el sistema operativo. Veremos brevemente algunas estructuras de diseos de sistemas operativos. Estructura modular. Tambin llamados sistemas monolticos. Este tipo de organizacin es con mucho la mas comn; bien podra recibir el subtitulo de "el gran embrollo". La estructura consiste en que no existe estructura alguna. El sistema operativo se escribe como una coleccin de procedimientos, cada uno de los cuales puede llamar a los dems cada vez que as lo requiera. Cuando se usa esta tcnica, cada procedimiento del sistema tiene una interfaz bien definida en trminos de parmetros y resultados y cada uno de ellos es libre de llamar a cualquier otro, si este ultimo proporciona cierto clculo til para el primero. Sin embargo incluso en este tipo de sistemas es posible tener al menos algo de estructura. Los servicios (llamadas al sistema) que proporciona el sistema operativo se solicitan colocando los parmetros en lugares bien definidos, como en los registros o en la pila, para despus ejecutar una instruccin especial de trampa de nombre "llamada al ncleo" o "llamada al supervisor". Esta instruccin cambia la mquina del modo usuario al modo ncleo y transfiere el control al sistema operativo, lo que se muestra en el evento (1) de la figura 1. El sistema operativo examina entonces los parmetros de la llamada, para determinar cual de ellas se desea realizar, como se muestra en el evento (2) de la figura 1. A continuacin, el sistema operativo analiza una tabla que contiene en la entrada k un apuntador al procedimiento que realiza la kesima llamada al sistema. Esta operacin que se muestra en (3) de la figura 1, identifica el procedimiento de servicio, al cual se llama. Por ultimo, la llamada al sistema termina y el control regresa al programa del usuario.

Figura 1. La forma en que debe hacerse una llamada al sistema: (1) el programa del usuario es atrado hacia el ncleo. (2) el sistema operativo determina el nmero del servicio solicitado. (3) el sistema operativo localiza y llama al procedimiento correspondiente al servicio. (4) el control regresa al programa del usuario. Esta organizacin sugiere una organizacin bsica del sistema operativo: 1.- un programa principal que llama al procedimiento del servicio solicitado. 2.- un conjunto de procedimientos de servicio que llevan a cabo las llamadas al sistema. 3.- un conjunto de procedimientos utilitarios que ayudan al procedimiento de servicio. En este modelo, para cada llamada al sistema existe un procedimiento de servicio que se encarga de l. Los procedimientos utilitarios hacen cosas necesarias para varios procedimientos de servicio, por ejemplo buscar los datos de los programas del usuario.

Estructura por microkernel. Las funciones centrales de un SO son controladas por el ncleo (kernel) mientras que la interfaz del usuario es controlada por el entorno (shell). Por ejemplo, la parte ms importante del DOS es un programa con el nombre "COMMAND.COM" Este programa tiene dos partes. El kernel, que se mantiene en memoria en todo momento, contiene el cdigo mquina de bajo nivel para manejar la administracin de hardware para otros programas que necesitan estos servicios, y para la segunda parte del COMMAND.COM el shell, el cual es el interprete de comandos Las funciones de bajo nivel del SO y las funciones de interpretacin de comandos estn separadas, de tal forma que puedes mantener el kernel DOS corriendo, pero utilizar una interfaz de usuario diferente. Esto es exactamente lo que sucede cuando cargas Microsoft Windows, el cual toma el lugar del shell, reemplazando la interfaz de lnea de comandos con una interfaz grfica del usuario. Existen muchos "shells" diferentes en el mercado, ejemplo: NDOS (Norton DOS), XTG, PCTOOLS, o inclusive el mismo SO MS-DOS a partir de la versin 5.0 incluy un Shell llamado DOS SHELL.

Estructura por anillos concntricos (capas). El sistema por "capas" consiste en organizar el sistema operativo como una jerarqua de capas, cada una construida sobre la inmediata inferior. El primer sistema construido de esta manera fue el sistema THE (Technische Hogeschool Eindhoven), desarrollado en Holanda por E. W. Dijkstra (1968) y sus estudiantes. El sistema tenia 6 capas, como se muestra en la figura 3. La capa 0 trabaja con la asignacin del procesador y alterna entre los procesos cuando ocurren las interrupciones o expiran los cronmetros. Sobre la capa 0, el sistema consta de procesos secunciales, cada uno de los cuales se podra programar sin importar que varios procesos estuvieran ejecutndose en el mismo procesador, la capa 0 proporcionaba la multiprogramacin bsica de la CPU. La capa 1 realizaba la administracin de la memoria. Asignaba el espacio de memoria principal para los procesos y un recipiente de palabras de 512K se utilizaba para almacenar partes de los procesos (pginas) para las que no exista lugar en la memoria principal. Por encima de la capa 1, los procesos no deban preocuparse si estaban en la memoria o en el recipiente; el software de la capa 1 se encargaba de garantizar que las pginas llegaran a la memoria cuando fueran necesarias. La capa 2 se encargaba de la comunicacin entre cada proceso y la consola del operador. Por encima de esta capa, cada proceso tiene su propia consola de operador. La capa 3 controla los dispositivos de E/S y guarda en almacenes (buffers) los flujos de informacin entre ellos. Por encima de la capa 3, cada proceso puede trabajar con dispositivos exactos de E/S con propiedades adecuadas, en vez de dispositivos reales con muchas peculiaridades. La capa 4 es donde estaban los programas del usuario, estos no tenan que preocuparse por el proceso, memoria, consola o control de E/S. el proceso operador del sistema se localizaba en la capa 5 Una generalizacin mas avanzada del concepto de capas se presento en el sistema MULTICS. En lugar de capas, MULTICS estaba organizado como una serie de anillos concntricos, siendo los anillos interiores los privilegiados. Cuando un procedimiento de un anillo exterior deseaba llamar a un procedimiento de un anillo interior, debi hacer el equivalente a una llamada al sistema Mientras que el esquema de capas de THE era en realidad un apoyo al diseo, debido a que todas las partes del sistema estaban ligadas entre si en un solo programa objeto, en MULTICS, el mecanismo de anillos estaba mas presente durante el tiempo de ejecucin y era reforzado por el hardware. La ventaja del mecanismo de anillos es su facilidad de extensin para estructurar subsistemas del usuario. 5 4 3 El operador Programas del usuario Control de entrada/salida

2 1 0

Comunicacin operador-proceso Administracin de la memoria y del disco Asignacin del procesador y multiprogramacin

Figura 3. Estructura del sistema operativo THE. Estructura cliente servidor Una tendencia de los sistemas operativos modernos es la de explotar la idea de mover el cdigo a capas superiores y eliminar la mayor parte posible del sistema operativo para mantener un ncleo mnimo. El punto de vista usual es el de implantar la mayora de las funciones del sistema operativo en los procesos del usuario. Para solicitar un servicio, como la lectura de un bloque de cierto archivo, un proceso del usuario (denominado proceso cliente) enva la solicitud a un proceso servidor, que realiza entonces el trabajo y regresa la respuesta. En este modelo, que se muestra en la figura 4, lo nico que hace el ncleo es controlar la comunicacin entre los clientes y los servidores. Al separar el sistema operativo en partes, cada una de ellas controla una faceta del sistema, como el servicio a archivos, servicios a procesos, servicio a terminales o servicio a la memoria, cada parte es pequea y controlable. Adems como todos los servidores se ejecutan como procesos en modo usuario y no en modo ncleo, no tienen acceso directo al hardware. En consecuencia si hay un error en el servidor de archivos, ste puede fallar, pero esto no afectar en general a toda la mquina.

Otra de las ventajas del modelo cliente-servidor es su capacidad de adaptacin para su uso en los sistemas distribuidos Si un cliente se comunica con un servidor mediante mensajes, el cliente no necesita saber si el mensaje se maneja en forma local, en su mquina, o si se enva por medio de una red a un servidor en una mquina remota. En lo que respecta al cliente, lo mismo ocurre en ambos casos: se envi una solicitud y se recibi una respuesta.

Sistemas Operativos por su Estructura (Visin Interna). Segn, se deben observar dos tipos de requisitos cuando se construye un sistema operativo, los cuales son: Requisitos de usuario: Sistema fcil de usar y de aprender, seguro, rpido y adecuado al uso al que se le quiere destinar. Requisitos del software: Donde se engloban aspectos como el mantenimiento, forma de operacin, restricciones de uso, eficiencia, tolerancia frente a los errores y flexibilidad. A continuacin se describen las distintas estructuras que presentan los actuales sistemas operativos para satisfacer las necesidades que de ellos se quieren obtener. Estructura Monoltica. Es la estructura de los primeros sistemas operativos constituidos fundamentalmente por un solo programa compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una puede llamar a cualquier otra. Las caractersticas fundamentales de este tipo de estructura son: Construccin del programa final a base de mdulos compilados separadamente que se unen a travs del ligador. Buena definicin de parmetros de enlace entre las distintas rutinas existentes, que puede provocar mucho acoplamiento. Carecen de protecciones y privilegios al entrar a rutinas que manejan diferentes aspectos de los recursos de la computadora, como memoria, disco, etc.

Generalmente estn hechos a medida, por lo que son eficientes y rpidos en su ejecucin y gestin, pero por lo mismo carecen de flexibilidad para soportar diferentes ambientes de trabajo o tipos de aplicaciones. Estructura Jerrquica. A medida que fueron creciendo las necesidades de los usuarios y se perfeccionaron los sistemas, se hizo necesaria una mayor organizacin del software, del sistema operativo, donde una parte del sistema contena subpartes y esto organizado en forma de niveles. Se dividi el sistema operativo en pequeas partes, de tal forma que cada una de ellas estuviera perfectamente definida y con un claro interface con el resto de elementos. Se constituy una estructura jerrquica o de niveles en los sistemas operativos, el primero de los cuales fue denominado THE (Technische Hogeschool, Eindhoven), de Dijkstra, que se utiliz con fines didcticos. Se puede pensar tambin en estos sistemas como si fueran `multicapa'. Multics y Unix caen en esa categora.

En la estructura anterior se basan prcticamente la mayora de los sistemas operativos actuales. Otra forma de ver este tipo de sistema es la denominada de anillos concntricos o "rings".

En el sistema de anillos, cada uno tiene una apertura, conocida como puerta o trampa (trap), por donde pueden entrar las llamadas de las capas inferiores. De esta forma, las zonas ms internas del sistema operativo o ncleo del sistema estarn ms protegidas de accesos indeseados desde las capas ms externas. Las capas ms internas sern, por tanto, ms privilegiadas que las externas. Mquina Virtual. Se trata de un tipo de sistemas operativos que presentan una interface a cada proceso, mostrando una mquina que parece idntica a la mquina real subyacente. Estos sistemas operativos separan dos conceptos que suelen estar unidos en el resto de sistemas: la multiprogramacin y la mquina extendida. El objetivo de los sistemas operativos de mquina virtual es el de integrar distintos sistemas operativos dando la sensacin de ser varias mquinas diferentes. El ncleo de estos sistemas operativos se denomina monitor virtual y tiene como misin llevar a cabo la multiprogramacin, presentando a los niveles superiores tantas mquinas virtuales como se soliciten. Estas mquinas virtuales no son mquinas extendidas, sino una rplica de la mquina real, de manera que en cada una de ellas se pueda ejecutar un sistema operativo diferente, que ser el que ofrezca la mquina extendida al usuario

Cliente-Servidor(Microkernel). El tipo ms reciente de sistemas operativos es el denominado Cliente-servidor, que puede ser ejecutado en la mayora de las computadoras, ya sean grandes o pequeas. Este sistema sirve para toda clase de aplicaciones por tanto, es de propsito general y cumple

con las mismas actividades que los sistemas operativos convencionales. El ncleo tiene como misin establecer la comunicacin entre los clientes y los servidores. Los procesos pueden ser tanto servidores como clientes. Por ejemplo, un programa de aplicacin normal es un cliente que llama al servidor correspondiente para acceder a un archivo o realizar una operacin de entrada/salida sobre un dispositivo concreto. A su vez, un proceso cliente puede actuar como servidor para otro." [Alcal92]. Este paradigma ofrece gran flexibilidad en cuanto a los servicios posibles en el sistema final, ya que el ncleo provee solamente funciones muy bsicas de memoria, entrada/salida, archivos y procesos, dejando a los servidores proveer la mayora que el usuario final o programador puede usar. Estos servidores deben tener mecanismos de seguridad y proteccin que, a su vez, sern filtrados por el ncleo que controla el hardware. Actualmente se est trabajando en una versin de UNIX que contempla en su diseo este paradigma.

Ncleo.
El Ncleo del Sistema Operativo. Todas las operaciones en las que participan procesos son controladas por la parte del sistema operativo denominada ncleo (nucleus, core o kernel, en ingls). El ncleo normalmente representa slo una pequea parte de lo que por lo general se piensa que es todo el sistema operativo, pero es tal vez el cdigo que ms se utiliza. Por esta razn, el ncleo reside por lo regular en la memoria principal, mientras que otras partes del sistema operativo son cargadas en la memoria principal slo cuando se necesitan. Los ncleos se disean para realizar "el mnimo" posible de procesamiento en cada interrupcin y dejar que el resto lo realice el proceso apropiado del sistema, que puede operar mientras el ncleo se habilita para atender otras interrupciones. El ncleo de un sistema operativo normalmente contiene el cdigo necesario para realizar las siguientes funciones: Manejo de interrupciones. Creacin y destruccin de procesos. Cambio de estado de los procesos. Despacho. Suspensin y reanudacin de procesos. Sincronizacin de procesos. Comunicacin entre procesos. Manipulacin de los bloques de control de procesos. Apoyo para las actividades de entrada/salida. Apoyo para asignacin y liberacin de memoria. Apoyo para el sistema de archivos. Apoyo para el mecanismo de llamada y retorno de un procedimiento. Apoyo para ciertas funciones de contabilidad del sistema. Ncleo o Kernel y niveles de un Sistema Operativo. El Kernel consiste en la parte principal del cdigo del sistema operativo, el cual se encargan de controlar y administrar los servicios y peticiones de recursos y de hardware con respecto a uno o varios procesos, este se divide en 5 capas: Nivel 1. Gestin de Memoria: que proporciona las facilidades de bajo nivel para la gestin de memoria secundaria necesaria para la ejecucin de procesos. Nivel 2. Procesador: Se encarga de activar los cuantums de tiempo para cada uno de los procesos, creando interrupciones de hardware cuando no son respetadas. Nivel 3. Entrada/Salida: Proporciona las facilidades para poder utilizar los dispositivos de E/S requeridos por procesos. Nivel 4. Informacin o Aplicacin o Interprete de Lenguajes: Facilita la comunicacin con los lenguajes y el sistema operativo para aceptar las ordenes en cada una de las aplicaciones. Cuando se solicitan ejecutando un programa el software de este nivel crea el ambiente de trabajo e invoca a los procesos correspondientes. Nivel 5. Control de Archivos: Proporciona la facilidad para el almacenamiento a largo plazo y manipulacin de archivos con nombre, va asignando espacio y acceso de datos en memoria.

El ncleo y los procesos. El ncleo (Kernel) de un sistema operativo es un conjunto de rutinas cuya misin es la de gestionar el procesador, la memoria, la entrada/salida y el resto de procesos disponibles en la instalacin. Toda esta gestin la realiza para atender al funcionamiento y peticiones de los trabajos que se ejecutan en el sistema. Los procesos relacionados con la entidad bsica de los sistemas operativos actuales: Los procesos. El esquema general del mismo es el siguiente: Definicin y concepto de proceso. El Bloque de Control de Proceso (PCB) como imagen donde el sistema operativo ve el estado del proceso. Estados por los que pasa un proceso a lo largo de su existencia en la computadora. Operaciones que se pueden realizar sobre un proceso. Clasificacin de los procesos segn su forma de ejecucin, de carga, etc.

Interrupciones (FLIH).
El GESTOR DE INTERRUPCIONES DE PRIMER NIVEL: FLIH (First Level Interruption Handler): `Algo' que gestione las interrupciones EL CONTROLADOR DE INTERRUPCIONES DE PRIMER NIVEL: EL FLIH En principio, una seal es una indicacin por la que se altera la secuencia de ejecucin. Hay varios tipos de interrupcin, que se clasifican en funcin de su origen: ! EXTERNAS: Se producen fuera del procesador ! INTERNAS: Se producen dentro del procesador Si precisamos ms: Las interrupciones EXTERNAS, las denominamos: INTERRUPCIONES Las interrupciones INTERNAS, pueden ser:

EXTRACDIGOS: Operaciones que manipulan elementos internos del

procesador

TRAPS o EXCEPCIONES

La misin del FLIH, est en el ncleo, para dar una respuesta a cualquier tipo de seal que se produce en el sistema. Al producirse una seal, la atrapa el Hardware de interrupciones, que como mnimo, salva el contenido del PC en el PCB del proceso. Adems, puede que tambin salve el resto del entorno voltil (tambin en el PCB). Tambin direcciona al FLIH, es decir, pone en el PC la direccin del FLIH. Por lo tanto, podemos decir, que el FLIH es un elemento software, es un proceso. Ya hemos dicho que el FLIH es Software, pues se trata de un sencillo programa definido sobre un rea de memoria dedicada a l, un rea de memoria especfica; es decir, el FLIH siempre est en la misma parte de la memoria.

El FLIH hace dos cosas: 1) Determina el origen de la interrupcin (Averigua qu interrupcin se ha producido) 2) Direcciona la rutina que trata esa interrupcin Si el FLIH es un programa, necesita parte del entorno voltil: PC, ACC, ... Por ello, debe salvarse el entorno voltil del proceso interrumpido. El entorno voltil del proceso interrumpido, se puede salvar en dos momentos: Puede salvarlo el Hardware de interrupciones Si no lo salva el Hardware de interrupciones, ser lo primero que haga el FLIH, antes incluso de determinar el origen de la interrupcin NOTA: Hay sistemas que definen unos registros mquina para uso exclusivo por parte del Sistema Operativo, para evitar tener que estar salvando y restaurando el contenido del entorno voltil. Formas de determinar el origen de una interrupcin: MEDIANTE SOFTWARE: Mediante una cadena de saltos o IFs (o con una CASE) El FLIH, tiene un nico punto de entrada: Ventaja: ! Es muy sencillo Desventaja: ! Rendimiento muy pobre (Cuantas ms interrupciones, peor rendimiento) Posible solucin:

Poner al principio de la cadena de saltos las comprobaciones de las

interrupciones ms frecuentes. MEDIANTE HARDWARE: Mediante el uso de un comparador simultneo, incluido en el Hardware de interrupciones. El origen de la interrupcin, no lo va a detectar el FLIH, lo va a detectar el Hardware de interrupciones. El FLIH, tiene N puntos de entrada, siendo N el nmero de interrupciones que reconoce el sistema. Ventaja: ! Es casi simultneo, mucho ms rpido que la secuencia de IFs Desventaja: ! Coste Elevado: Un comparador para muchas interrupciones es muy caro COMBINANDO SOFTWARE Y HARDWARE: El comparador distingue los TIPOS de interrupcin.

Las interrupciones se agrupan por tipos. EL Hardware de interrupciones: 1) Salva el contenido del entorno voltil 2) Mediante un comparador simultneo, determina el tipo al que pertenece la interrupcin producida 3) Se direcciona al FLIH, donde una pequea cadena de saltos determina la interrupcin en concreto que se ha producido Si N es el nmero de tipos de interrupciones, el FLIH tiene N puntos de entrada. Cuando el FLIH est atendiendo una interrupcin, pueden producirse otras. Qu hacemos con esas otras interrupciones que se producen?

Inhibir (ignorar) el resto de interrupciones mientras se atiende una. Pero esto no puede hacerse siempre Las interrupciones ms prioritarias deben tratarse nada ms producirse

Posible solucin:

Definir niveles de prioridad entre las interrupciones, de forma que si

se est atendiendo una interrupcin, quedarn pendientes (o inhibidas) las de menor o igual prioridad. Problema:

Si se produce una interrupcin ms prioritaria que la que se est atendiendo, debe dejarse de atender la que se estaba atendiendo para atender la ms prioritaria. Por lo tanto, debe guardarse el entorno voltil de la interrupcin que estaba atendiendo. La interrupcin que pasa a ser atendida, tambin puede tener que dejarse, al llegar otra de mayor prioridad ... Por tanto, es necesario un lugar a para almacenar entornos voltiles, es decir, un PCB, por cada prioridad de interrupcin - 1.

Inicio del servicio de una interrupcin: Las interrupciones no pueden estar inhibidas mucho tiempo, es decir, el tiempo de tratamiento del FLIH debe ser corto. Problema:

Hay interrupciones cuyo tratamiento lleva mucho tiempo. En ese caso, el FLIH, slo inicia su tratamiento, y luego, lama a otra rutina ajena o externa a l, que realiza el resto del tratamiento.

Una interrupcin puede implicar cambio(s) de estado en algn(os) proceso(s). TIPOS DE INTERRUPCIONES:

Interrupciones que provocan cambios de estado del proceso en ejecucin Algunos extracdigos: Peticiones de E/S

Seales de error para suspensin Interrupciones de reloj: Interrupciones por expiracin del temporizador Interrupciones que provocan cambios de estado en procesos que no estn en ejecucin Interrupciones de E/S

http://html.rincondelvago.com/sistemasoperativos_29.html Despachador(Scheduler).
Schedulling.-

Colas de Schedulling: Los procesos que estn en estado de espera se quedan en una lista llamada lista o cola de ready. Los procesos que hacen uso de E/S se guardan en una cola de E/S. Hay una cola de E/S por cada dispositivo. Schedullers: Componente del sistema operativo responsable de decidir quien hara uso de la CPU.
Algoritmos de Schedulling.FCFS (First Come First Served)

Cuando un proceso llega a la cola de ready su PCB es agregado al final de la lista. El uso de la CPU es otorgado al primero de la lista y una vez que un proceso comienza a ejecutar no deja de hacerlo hasta que se termina. El tiempo medio de espera para este algoritmo suele ser bastante alto.
SJF (Shortest Job First)

Una vez que un proceso ejecuta no deja de hacerlo hasta que voluntariamente cambia de estado (no hay interrupcin por tiempo). Asocia a cada proceso el tiempo de CPU que habr de usar en su prxima vuelta y va a decidir por el ms pequeo. Si hubiera mas de uno utiliza FCFS para desempatar. El mayor problema de este algoritmo radica en el clculo de tiempo de uso de CPU. Este se puede aproximar a: Tn+1= .tn+(1- )Tn 0< <1 Tiempo calculado en la vuelta n Prximo uso de CPU Tiempo usado en la vuelta n El problema de este algoritmo es que el tiempo de espera para los procesos largos puede ser demasiado largo. Constantemente se estn entregando los procesos mas cortos y el ms grande nunca ser ejecutado. El FJS se puede subdividir en 2 tipos de algoritmos: PREEMPTIVO o NO PREEMPTIVO Preemptivo significa que si mientras un proceso se esta ejecutando, entra a la cola de ready un proceso mas corto, el proceso en la cola de ready se apropia de la CPU y comienza su ejecucin.

Priority Schedulling

Asocia a cada proceso una prioridad. Luego selecciona el proceso con mas prioridad para desempatar. En caso de que hubieran dos o mas procesos con la misma prioridad, se usa FCFS para desempatar. Hay dos tipo de prioridad en los procesos: la prioridad externa definidas a travs del sistema operativo y la prioridad interna definida por el tiempo de uso de la CPU, el control de E/S, etc. Este algoritmo tambin se puede ejecutar de dos maneras: preemptivo y no preemptivo. El algoritmo soluciona el problema del looping pero el problema es que los procesos con prioridad muy baja tienen chance de no ejecutarse nunca. Para solucionar este problema de espera infinita el envejecimiento de un proceso eleva su prioridad.
Round Robin

Este es un algoritmo basado en FCFS. Trata la cola de ready como una lista circular. Introduce el concepto de "Quantum" o "Time slice" : mayor tiempo de cpu que podr hacer uso un proceso en cada vuelta. Si el valor del Quantum fuese muy grande, el algoritmo funcionara como un FCFS. Si el Quantum fuera muy chico se produce un overhead por context switch (significa que el Quantum se setea en un tiempo menor al que demora el context switch). Este algoritmo es fuertemente dependiente del Quantum o Time Slice. El Quantum debe ser mayor que el 80% de los tiempos de CPU que hagan uso los procesos, pero no el proceso entero sino por cada burst.
MQS (Multilevel Queue Schedulling)

Este algoritmo parte la cola de ready en un numero de colas n. Luego existe un criterio para clasificar en que cola ser colocado un proceso cuando que queda en estado de ready. Cada cola puede manejar su propio algoritmo de schedulling
MFQS (Multilevel Feed Back Queue Schedulling)

Define los siguientes parmetros: Numero de colas Algoritmo de schedulling usado en cada cola Mtodo para decidir a que cola entrara un proceso cuando entre a estado de ready Mtodo para decidir cuando un proceso ser enviado a una cola de menor prioridad.

Mltiple CPU

Para que mas de una CPU no tomen el mismo proceso de la cola de ready se utilizan mecanismos de sincronizacin. Otro mecanismo seria partir la cola en n colas (n CPUs), pero si se hiciera esto podra llegar a suceder que los procesos de una CPU fueran todos cortos y los de otra fueran largos por lo cual habra una CPU que quedara libre y otra ejecutando. Otra forma sera que una CPU decidiera cual CPU va a ejecutar cual proceso. Esto puede llevar a que la CPU que esta seleccionando quede un poco mas cargada porque en algn momento estar ejecutando el algoritmo de seleccin y un proceso asignado a ella.

Primitivas de comunicacin(IPC).
Hay varias primitivas de comunicacin entre procesos (IPC abreviadamente). La mayora de ellas requieren algn tipo de modificacin a los programas para poder usarlas, pero hay una que es fcilmente accesible desde la lnea de comandos usando la metfora de ficheros estndar en UNIX y que no requiere modificacin alguna a los programas. Se trata de las tuberas. Siguiendo la metfora, UNIX nos permite manejar tuberas como si fueran ficheros normales.

http://www.es.embnet.org/Doc/ECJ/ECJ-1998-02/dbpipes.es.html Primitivas de comunicacin Algunos kernel tienen operaciones especficas ajustadas a la invocacin remota. Amoeba, por ejemplo, tiene DoOperation/GetRequest--SendReply. Es ms eficiente que el simple Send-Receive (y ms fiable y legible). Amoeba y otros sistemas tienen tambin comunicacin con grupos o radiado (parcial) (broadcast). Es importante para tolerancia de fallos, mejora de rendimiento y reconfigurabilidad. Diversas variantes: como mensajes, como mltiples RPCs, con un slo valor devuelto, con varios valores devueltos (todos juntos o pidiendo uno a uno), etc. En la prctica, mecanismos de comunicacin de alto nivel tales como RPC/RMI, radiado y notificacin de sucesos (parecido a los manejadores de interrupciones), se implementan en middleware y no en el kernel. Normalmente, sobre un nivel TCP/IP, por razones de transportabilidad, (aunque resulta ``caro").

La IPC ofrece un mecanismo que permite a los procesos cumunicarse y sincronizar sus acciones. La mejor forma de proveer la comunicacin entre procesos es mediante un sistema de mensajes. La funcin de un sistema de mensaje es permitir a los procesos comunicarse entre s sin tener que recurrir a variables compartidas. Un recurso IPC ofrece por los menos 2 operaciones: enviar (mensaje) (send) y recibir (mesanje) (receive). Sea P y Q dos procesos que requieren comunicarse debern enviarse mensajes; para ello debe existir un enlace de comunicacin entre ellos. Este enlace puede implementarse de diversas maneras. Los mtodos para implementar lgicamente un enlace y las operaciones de enviar / recibir son:

Comunicacin directa o indirecta Uso de buffer automtico o explcito Envo por copia o envo por referencia Mensajes de tamao fijo o variables

Comunicacin directa: Aqu cada proceso que desee comunicarse debe nombrar explcitamente el destinatario o el remitente de la comunicacin. Este esquema se define las primitivas de la sig. manera:

Enviar(P,mensaje): Enviar un mensaje al proceso P. Recibir(Q. Mensaje): Recibir un mensaje del proceso Q. Con las siguientes propiedades:

Se establece automticamente el enlace entre cada par de procesos. Lo procesos slo necesitan conocer la identidad de otro para la comunicacin. Solo hay un enlace entre cada par de procesos. El enlace puede ser unidireccional o bidireccional.

Este esquema exhibe un simetra de direccionamiento; es decir, los procesos tanto emisor como receptor necesitan nombrar al otro para comunicarse. Otra variante de este esquema es utilizar asimetra de direccionamiento, con la sig. primitivas: Enviar(P,mensaje): enviar un mensaje al proceso P. Recibir(Id,mensaje) : recibir un mensaje de cualquier proceso con el que hubo comunicacin. Aqu slo el emisor nombra al destinatario; el destinatario no sta obligado a nombrar al emisor. Comunicacin indirecta: Aqu los mensajes se envan a, y se reciben de, buzones (tambin llamados PUERTOS). Un buzn puede considerarse en lo abstracto como un objeto en el que los procesos pueden colocar mensajes y del cual se pueden sacar mensajes. Cada buzn tiene una identificacin nica. Aqu dos proceso se pueden comunicarse slo si comparten un buzn. Las primitivas se definen como: Enviar (A,mensaje): enviar un mensaje al buzn A. Recibir (A,mensaje): recibir un mensaje del buzn A. Un enlace de comunicacin tiene las sig. propiedades:

Se establece un enlace entre un par de procesos slo si tienen un buzn compartido. Un enlace puede estar asociado a ms de dos procesos. Entre cada par de procesos en comunicacin puede haber varios enlaces distintos, cada uno de los cuales corresponder a un buzn. Los enlaces pueden ser unidireccionales o bidereccionales.

Hay varias formas de designar el dueo de y los usuarios de un buzn dado. Una posibilidad es permitir que un proceso declare variables de tipo buzn. El proceso que declara un buzn es el dueo de ese buzn. Cualquier otro proceso que conozca el nombre de dicho buzn podr usarlo. Por otro lado, un buzn propiedad del S.O tiene existencia propia; es independiente y no est unido a ningn proceso especfico. El S.O establece un mecanismo que permite a un proceso:

Crear un buzn nuevo Enviar y recibir mensajes a travs del buzn Destruir un buzn.

http://html.rincondelvago.com/sistemas-operativos_26.html

Comunicacin entre procesos (IPC)


Los procesos en UNIX no comparten memoria, ni siquiera los padres con sus hijos. Por tanto, hay que establecer algn mecanismo en caso de que se quiera comunicar informacin entre procesos concurrentes. El sistema operativo UNIX define tres clases de herramientas de comunicacin entre procesos (IPC): los semforos, la memoria compartida y los mensajes. El tipo de llamadas al sistema para estos IPCs es anlogo al de los semforos: existen sendas funciones shmget y msgget para crear o enlazarse a un segmento de memoria compartida o a una cola de mensajes, respectivamente. Para alterar propiedades de estos IPCs, incluyendo su borrado, estn las funciones shmctl y msgctl. Para enviar o recibir mensajes, se utilizan las funciones msgsnd y msgrcv. En este apartado se describirn brevemente algunas llamadas al sistema disponibles para el uso de las IPCs dentro de la programacin en C.

Semforos
Qu es un semforo para el UNIX? Formalmente es muy similar a la definicin clsica de Dijkstra, en el sentido de que es una variable entera con operaciones atmicas de inicializacin, incremento y decremento con bloqueo. El UNIX define tres operaciones fundamentales sobre semforos: * semget Crea o toma el control de un semforo * semctl Operaciones de lectura y escritura del estado del semforo. Destruccin del semforo * semop Operaciones de incremento o decremento con bloqueo Como el lenguaje C no tiene un tipo "semforo" predefinido, si queremos usar semforos tenemos que crearlos mediante una llamada al sistema (semget). Esta llamada permite crear un conjunto de semforos, en lugar de uno solo. Las operaciones se realizan atmicamente sobre todo el conjunto; esto evita interbloqueos y oscuras programaciones en muchos casos, pero para esta prctica es ms bien un engorro. Al crear un semforo se nos devuelve un nmero identificador, que va a funcionar casi igual que los identificadores de fichero de las llamadas open, creat, etc. La funcin semget nos permite adems "abrir" un semforo que ya est creado. As, por ejemplo, si un proceso crea un semforo, otros procesos pueden sincronizarse con aqul (con ciertas restricciones) disponiendo del semforo con semget. Para darle un valor inicial a un semforo, se utiliza la funcin semctl.

El UNIX no ofrece las funciones clsicas P y V o equivalentes, sino que dispone de una funcin general llamada semop que permite realizar una gama de operaciones que incluyen las P y V.
semctl

tambin se emplea para destruir un semforo.

Llamadas al sistema para semforos


Esta es una descripcin resumida de las tres llamadas al sistema para operar con semforos (semget, semctl y semop). Para una informacin ms completa y fidedigna, dirjanse al manual de llamadas al sistema (seccin 2). Para el correcto uso de todas estas funciones, han de incluir el fichero cabecera
<sys/sem.h>

Las tres funciones devuelven -1 si algo ha ido mal y en tal caso la variable errno informa del tipo de error.

Apertura o creacin de un semforo


Sintaxis:
int semget ( key_t semget

key, int nsems, int semflg );

devuelve el identificador del semforo correspondiente a la clave key. Puede ser un semforo ya existente, o bien semget crea uno nuevo si se da alguno de estos casos: a) key vale IPC_PRIVATE. Este valor especial obliga a semget a crear un nuevo y nico identificador, nunca devuelto por ulteriores llamadas a semget hasta que sea liberado con semctl. b) key no est asociada a ningn semforo existente, y se cumple que (semflg & IPC_CREAT) es cierto. A un semforo puede accederse siempre que se tengan los permisos adecuados. Si se crea un nuevo semforo, el parmetro nsems indica cuntos semforos contiene el conjunto creado; los 9 bits inferiores de semflg contienen los permisos estilo UNIX de acceso al semforo (usuario, grupo, otros). semflg es una mscara que puede contener IPC_CREAT, que ya hemos visto, o IPC_EXCL, que hace crear el semforo, pero fracasando si ya exista. Ejemplo:
int semid = semget ( IPC_PRIVATE, 1, IPC_CREAT | 0744 );

Operaciones de control sobre semforos


Sintaxis:
int semctl ( int

semid, int semnum, int cmd... );

Esta es una funcin compleja (y de interfaz poco elegante) para realizar ciertas operaciones con semforos. semid es un identificador de semforo (devuelto previamente por semget) y semnum, el semforo del conjunto sobre el que quieren trabajar. cmd es la operacin aplicada; a continuacin puede aparecer un parmetro opcional segn la operacin definida por cmd. Las operaciones que les interesan a ustedes son
GETVAL semctl SETVAL

retorna el valor actual del semforo

se modifica el valor del semforo (un cuarto parmetro entero da el nuevo destruye el semforo

valor)
IPC_RMID

Ejemplos:
valor = semctl (semid,semnum,GETVAL); semctl (semid,semnum,SETVAL,nuevo_valor);

Operaciones sobre semforos


Sintaxis:
int semop ( int

semid, struct sembuf* sops, unsigned nsops );

Esta funcin realiza atmicamente un conjunto de operaciones sobre semforos, pudiendo bloquear al proceso llamador. semid es el identificador del semforo y sops es un apuntador a un vector de operaciones. nsops indica el nmero de operaciones solicitadas. La estructura sembuf tiene estos campos:
struct sembuf { unsigned short sem_num; // nmero del semforo dentro del conjunto short sem_op; // clase de operacin // segn sea >0, <0 o ==0 short sem_flg; // modificadores de operacin };

Cada elemento de sops es una operacin sobre algn semforo del conjunto de semid. El algoritmo simplificado de la operacin realizada es ste (semval es el valor entero contenido en el semforo donde se aplica la operacin).

si semop<0 si semval >= |semop| semval -= |semop| si semval < |semop| si (semflag & IPC_NOWAIT)!=0 la funcin semop() retorna si no bloquearse hasta que semval >= |semop| semval -= |semop| si semop>0 semval += semop si semop==0 si semval = 0 SKIP si semval != 0 si (semflag & IPC_NOWAIT)!=0 la funcin semop() retorna si no bloquearse hasta que semval == 0

Resumiendo un poco, si el campo semop de una operacin es positivo, se incrementa el valor del semforo. Asimismo, si semop es negativo, se decrementa el valor del semforo si el resultado no es negativo. En caso contrario el proceso espera a que se d esa circunstancia. Es decir, semop==1 produce una operacin V y semop==-1, una operacin P.

Ejemplos de uso
Para ilustrar de forma concreta el empleo de semforos bajo UNIX, les mostramos unos ejemplos de subrutinas en C que les pueden servir como modelos para elaborar sus rutinas de sincronizacin en las prcticas de la asignatura. En concreto, son unas funciones que implementan las operaciones P y V de un semforo clsico (inicializacin, incremento y decremento con posible bloqueo del proceso llamador). As definidas, o con pocas modificaciones, les pueden servir como la interfaz para uso de semforos en sus aplicaciones.
#include <sys/types.h> /* para key_t */ /* Crea un semforo con un valor inicial, dada una clave */ /* Devuelve el identificador (vlido o no) del semforo */ int crea_sem ( key_t clave, int valor_inicial ); /* Operaciones P y V sobre un semforo */ void sem_P ( int semid ); void sem_V ( int semid ); /***********************************/ /******** IMPLEMENTACIN *******/ /***********************************/ #include <sys/ipc.h> #include <sys/sem.h> #define PERMISOS 0644 /* crea_sem: abre o crea un semforo */

int crea_sem ( key_t clave, int valor_inicial { int semid = semget( /* Abre o crea clave, */ 1, elemento */ IPC_CREAT|PERMISOS con */ );

) un semforo... */ /* con una cierta clave /* con un solo /* lo crea (IPC_CREAT) unos PERMISOS

if ( semid==-1 ) return -1; /* Da el valor inicial al semforo */ semctl ( semid, 0, SETVAL, valor_inicial ); return semid; } /* abre_sem: Abrir un semforo que otro proceso ya cre */ int abre_sem (key_t clave) { return semget(clave,1,0); } /* Operaciones P y V */ void sem_P ( int semid ) /* Operacin P */ { struct sembuf op_P [] = { 0, -1, 0 /* Decrementa semval o bloquea si cero */ }; } semop ( semid, op_P, 1 );

void sem_V ( int semid ) /* Operacin V */ { struct sembuf op_V [] = { 0, 1, 0 /* Incrementa en 1 el semforo */ }; semop ( semid, op_V, 1 ); }

http://labsopa.dis.ulpgc.es/prog_c/IPC.HTM

1.4 Descripcin de tipos de programacin 1.4.1 Programacin estructurada


La programacin estructurada es una teoria de programacin que consiste en

construir programas de facil comprension. La programacin estructurada es especialmente util, cuando se necesitan realizar correciones o modificaciones despues de haber concluido un programa o aplicacion. Al haberse utilizado la programacin estructurada, es mucho ms sencillo entender la codificacion del programa, que se habra hecho en diferentes secciones. La programacin estructurada se basa en una metodologi de desarrollo de programas llamda refinamiento sucesivos: Se plantea una operacion como un todo y se divide en segmentos ms sencillos o de menor complejidad. Una vez terminado todos los segmentos del programa, se procede a unificar las aplicaciones realizadas por el pool de programadores. Si se ha utilizado adecuadamente la programacin estructurada, esta integracion debe ser sencilla y no presentar problemas al integrar la misma , y de presentar algun problema, sera rapidamente detectable para su correccion. La representacion grafica de la programacin estructurada se realiza a traves de diagramas de flujo o flow chart, el cual representa el programa con sus entradas, procesos y salidas. La programacin estructurada propone segregar los procesos en estructuras lo ms simple posibles, las cuales se conocen como secuencia, seleccion e interaccion. Ellas estan disponibles en todos los lenguajes modernos de programacin imperativa en forma de sentencias. Combinando esquemas sencillos se pueden llegar a construir sistemas amplios y complejos pero de facil entendimiento.

http://lenguajes-de-programacion.com/programacion-estructurada.shtml

Programacin estructurada
El creciente empleo de los computadores ha conducido a buscar un abaratamiento del desarrollo de software, paralelo a la reduccin del costo del hardware obtenido gracias a los avances tecnolgicos. Los altos costos del mantenimiento de las aplicaciones en produccin normal tambin han urgido la necesidad de mejorar la productividad del personal de programacin. DEFINICIONES La programacin estructurada (en adelante simplemente PE ), es un estilo de programacin con el cual el programador elabora programas, cuya estructura es la ms clara posible, mediante el uso de tres estructuras bsicas de control lgico, a saber : a. SECUENCIA. b. SELECCIN. c. ITERACIN. Un programa estructurado se compone de funciones,segmentos, mdulos y/o subrutinas, cada una con una sola entrada y una sola salida. Cada uno de estos mdulos (an en el mismo programa completo), se denomina programa apropiado cuando, adems de estar compuesto slamente por las tres estructuras bsicas,

tiene slo una entrada y una salida y en ejecucin no tiene partes por las cuales nunca pasa ni tiene ciclos infinitos. La PE tiene un teorema estructural o teorema fundamental, el cual afirma que cualquier programa, no importa el tipo de trabajo que ejecute, puede ser elaborado utilizando nicamente las tres estructuras bsicas ( secuencia, seleccin, iteracin ). DEFINICIN DE LAS ESTRUCTURAS BSICAS DE CONTROL LGICO 1.- SECUENCIA Indica que las instrucciones de un programa se ejecutan una despus de la otra, en el mismo orden en el cual aparecen en el programa. Se representa grficamente como una caja despus de otra, ambas con una sola entrada y una nica salida.

Las cajas A y B pueden ser definidas para ejecutar desde una simple instruccin hasta un mdulo o programa completo, siempre y cuando que estos tambin sean programas apropiados. 2.- SELECCIN Tambin conocida como la estructura SI-CIERTO-FALSO, plantea la seleccin entre dos alternativas con base en el resultado de la evaluacin de una condicin o predicado; equivale a la instruccin IF de todos los lenguajes de programacin y se representa grficamente de la siguiente manera :

En el diagrama de flujo anterior, C es una condicin que se evala; A es la accin que se ejecuta cuando la evaluacin de este predicado resulta verdadera y B es la accin ejecutada cuando indica falso. La estructura tambin tiene una sola entrada

y una sola salida; y las funciones A y B tambin pueden ser cualquier estructura bsica o conjunto de estructuras. 3.- ITERACIN Tambin llamada la estructura HACER-MIENTRAS-QUE, corresponde a la ejecucin repetida de una instruccin mientras que se cumple una determinada condicin. El diagrama de flujo para esta estructura es el siguiente :

Aqu el bloque A se ejecuta repetidamente mientras que la condicin C se cumpla o sea cierta. Tambin tiene una sola entrada y una sola salida; igualmente A puede ser cualquier estructura bsica o conjunto de estructuras. VENTAJAS DE LA PROGRAMACIN ESTRUCTURADA Con la PE, elaborar programas de computador sigue siendo una labor que demanda esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este nuevo estilo podemos obtener las siguientes ventajas : 1. Los programas son ms fciles de entender. Un programa estructurado puede ser ledo en secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio a otro en la lgica, lo cual es tpico de otros estilos de programacin. La estructura del programa es ms clara puesto que las instrucciones estn ms ligadas o relacionadas entre si, por lo que es ms fcil comprender lo que hace cada funcin. 2. Reduccin del esfuerzo en las pruebas. El programa se puede tener listo para produccin normal en un tiempo menor del tradicional; por otro lado, el seguimiento de las fallas o depuracin (debugging) se facilita debido a la lgica ms visible, de tal forma que los errores se pueden detectar y corregir ms fcilmente. 3. Reduccin de los costos de mantenimiento. 4. Programas ms sencillos y ms rpidos. 5. Aumento en la productividad del programador. 6. Se facilita la utilizacin de las otras tcnicas para el mejoramiento de la productividad en programacin. 7. Los programas quedan mejor documentados internamente. http://www.itlp.edu.mx/publica/tutoriales/pascal/u1_1_4.html

:: PARADIGMA ESTRUCTURADO ::

La Programacin estructurada fija su atencin en el conjunto de acciones que manipulan el flujo de datos, mientras que la OOP se fija en la interrelacin que existe entre los datos y las acciones a realizar con ellos.

Descomposicin funcional: el sistema es considerado una unidad funcional que se disgrega en procesos. El resultado del proceso de abstraccin para la solucin de un problema macro lo constituyen pequeos subprogramas. Un problema macro se subdivide en unidades ms pequeas llamadas procesos, estos se pueden distribuir entre diferentes personas que se vean involucradas en la solucin de un problema y as efectuar los desarrollos de software de una manera ms rpida y eficiente. Los procesos son la parte central de este modelo pues a partir de estos se manejan las variantes (datos) que solucionarn el problema. Generalmente se manejan muchos procesos lo cual hace largos cdigos. El mantenimiento de los desarrollos deben efectuarse minuciosamente. Los procedimientos empleados en una aplicacin pueden reutilizarse teniendo cuidado en el manejo de los datos. Las operaciones se ajustan a las caractersticas propias de los lenguajes procedimentales. Los procesos que se modelan en el desarrollo de un problema plasman las operaciones necesarias para resolverlo

:: EJEMPLO MODELO ESTRUCTURAL ::

R = ( a1 + b1, a2 + b2, a3 + b3 )

R = ( c1 .d1 + c2 .d2 + c3 .d3 )

R = ( e2 x f3 - e3 x f2, e3 x f1 - e1 x f3, e1 x f2 - e2 x f1)

R = ( kg1, kg2, kg3 )

R = Raz cuadrada de (h1 x h1, h2 x h2, h3 x h3)

INTRODUCCION A LA PROGRAMACION ESTRUCTURADA


La programacin estructurada permite la escritura de programas fciles de leer y modificar. En un programa estructurado el flujo lgico se gobierna por las estructuras de control bsicas: - secuenciales, repetitivas y selectivas. Tcnicas de Programacin: Las nuevas teoras de la programacin se centran en las tcnicas de programacin modular y programacin estructurada. El diseo de un

programa entraa la descomposicin del problema en mdulos (partes independientes) programacin modular , la programacin de cada mdulo mediante mtodos estructurados programacin estructurada y su unin posterior. Programacin Modular: El programa se divide en mdulos, cada uno de los cuales ejecuta una nica actividad o tarea y se codifican independientemente de otros mdulos. Cada uno de estos mdulos se analizan, codifican y ponen a punto por separado. Cada programa contiene un mdulo llamado programa principal que controla todo lo que sucede; se transfiere el control a submdulos de modo que ellos puedan ejecutar sus funciones. Los mdulos son independientes en el sentido en el que ningn mdulo puede tener acceso directo a cualquier otro mdulo excepto el mdulo al que llama y sus propios submdulos. Tamao de los mdulos: No existe una regla fija que permita definir el tamao estndar del mdulo, una buena aproximacin es considerar el tamao fsico de una pgina (30 40 lneas de instrucciones). Implementacin: Se implementan utilizando mdulos que toman diferentes nombres segn el lenguaje de programacin: subrutinas en BASIC y FORTRAN, procedimientos en Pascal, secciones en COBOL, etc. Programacin Estructurada: Se refiere a un conjunto de tcnicas que han ido evolucionando. Estas tcnicas aumentan considerablemente la productividad del programa reduciendo el tiempo requerido para escribir, verificar, depurar y mantener los programas. La programacin estructurada utiliza un nmero limitado de estructuras de control que minimizan la complejidad de los problemas y que reducen los errores. Esta incorpora: diseo descendente, recursos abstractos y estructuras bsicas. Recursos abstractos: Consiste en descomponer una determinada accin compleja en trminos de un nmero de acciones ms simples capaz de ejecutarlas. Diseo descendente: Consiste en efectuar una relacin entre las sucesivas etapas de estructuracin. Es decir, se descompone el problema en etapas o estructuras jerrquicas, de modo que se puede considerar cada estructura desde dos puntos de vista: lo que hace? y cmo lo hace? Teorema de la programacin estructurada: Se ha demostrado que un programa propio puede ser escrito utilizando solamente tres tipos de estructuras de control: secuenciales, selectivas y repetitivas. Un programa es propio si posee un solo punto de entrada y uno de salida, existen caminos desde el inicio hasta el fin que se pueden seguir y que pasan por todas las partes del programa y, todas las instrucciones son ejecutables sin que hayan bucles infinitos. Estructura secuencial: Es aquella en que una accin sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente. Estructura selectiva: Se utilizan para tomar decisiones lgicas. En stas se evala una condicin y en funcin del resultado de la misma se realiza una opcin u otra. Las condiciones se especifican usando expresiones lgicas. En pseudocdigo stas

palabras son if, then, else. Las estructuras selectivas pueden ser: simples, dobles o mltiples. Selectivas simples: Ejecuta una determinada accin cuando se cumple una determinada condicin. La seleccin if then (si entonces) evala la condicin y si es verdadera ejecuta la accin de lo contrario no har nada. Selectiva doble: Permite elegir entre dos opciones posibles en funcin del cumplimiento o no de una determinada condicin. Si la condicin es verdadera, se ejecuta la accin 1, si es falsa, se ejecuta la accin 2. La selectiva en pseudocdigo es if then else. Selectivas mltiples: La estructura de seleccin mltiple (case en pseudocdigo) evaluar una expresin que podr tomar n valores distintos 1, 2, 3, 4, ..n. Segn que elija uno de estos valores en la condicin, se realizar una de las n acciones. Estructuras repetitivas: Las estructuras que repiten una secuencia de instrucciones un nmero determinado de veces se llaman bucles e iteracin al hecho de repetir la ejecucin de una secuencia de acciones. Estructura mientras: La estructura repetitiva mientras es aquella en que el cuerpo del bucle se repite mientras se cumple una determinada condicin. Cuando se ejecuta esta instruccin, la primera cosa que sucede es que se evala la condicin. Si la expresin es verdadera, entonces se ejecuta el cuerpo del bucle. Este proceso se repite una y otra vez mientras la condicin sea verdadera. Estructura repetir: Se ejecuta hasta que se cumpla una condicin determinada que se comprueba al final del bucle, esto permite que la iteracin se ejecute al menos una vez antes de la condicin ser evaluada. Estructuras desde/para (for): Se utilizan las estructuras for cuando se conocen con certeza el nmero de veces que desea repetir un bucle, es decir, cuando es un nmero fijo de veces. Estructura de decisin anidadas: Es cuando if then else contiene otra dentro de s, y sta a su vez contiene otra dentro de s. Estas estructuras contendrn varios si..entonces dentro de otros. Debido a que puede ser confuso se implementa la identacin para evitar perder el hilo de dnde comienza y dnde termina cada estructura. La instruccin goto (ir a): Se utiliza cuando queremos hacer una bifurcacin incondicional. Sin embargo, se recomienda usarla lo menos posible (si bien no usarla en absoluto). http://www.geocities.com/ymarte/trab/infprgest.html

1.4.2 Programacin orientada a objetos


:: PARADIGMA ORIENTADO A OBJETOS ::

Descomposicin en objetos. El sistema es considerado un objeto o conjunto de objetos. Los cuales son el resultado del proceso de abstraccin para la solucin del problema macro. Dado que un problema macro puede ser dividido en objetos, estos pueden ser tratados por diferentes personas que luego lo integraran para dar la solucin final.

Los datos (estados) son la parte central del modelo y los mtodos que los modifican muestran el comportamiento del objeto. El mantenimiento de programas y aplicaciones generalmente son fciles de realizar. Los objetos que se modelan en el desarrollo de un sistema se ajustan a la realidad que representa el problema, este puede representare como un objeto o conjunto de objetos abstractos. El modelo orientado a objetos no es una tcnica de programacin sino un medio de plasmar el mundo real.
:: EJEMPLO MODELO ORIENTADO A OBJETOS ::

Adicin: R = A + B, R =(a1 + b1, a2 + b2, a3 + b3) Producto Punto: R = A . B, R =(a1 .b1 + a2 .b2 + a3 .b3) Producto Cruz: R=AxB, R =(a2*f3-a3*b2, a3*b1-a1*b3, a1*b2-a2*b1) Producto por escalar: R = k A, R = ( ka1, ka2, ka3 ) Norma: R = /R/I, R = Raz cuadrada de (A*A) Ventajas del Modelo orientado a objetos con respecto al modelo estructurado Un modelo de objetos es ms cercano a la realidad que un modelo funcional.

Un desarrollo realizado con el modelo orientado a objetos es ms fcil de mantener y de reutilizar. El modelo orientado a objetos evita la redundancia en los procesos luego los cdigos son ms entendibles y resumidos. La integridad que dan los objetos a los datos evita ambigedades en su uso, dando mayor seguridad en los resultados. El modelo orientado a objetos facilita la integridad de mdulos que hallan sido realizados por separado sin correr riesgos en el manejo de los datos. http://ieee.udistrital.edu.co/concurso/programacion_orientada_objetos/poo/poovsest.htm l
La programacin orientada a objetos, intenta simular el mundo real a traves del significado de objetos que contiene caracteristicas y funciones. Los lenguajes orientados a objetos se clasifican como lenguajes de quinta generacion. Como su mismo nombre indica, la programacin orientada a objetos se basa en la idea de un objeto, que es una combinacion de variables locales y procedimientos llamados metodos que juntos conforman una entidad de programacin. El termino encapsulacion se usa para describir la combinacion de estructuras de datos y de metodos que son manipulados por el objeto. La llamada a un objeto es lo que se denomina pasar un "aviso" a un objeto. En la programacin orientada a objetos, encapsular significa, reunir y controlar el grupo resultante como un todo y no individualmente. En la programacin orientada a objetos la abstraccion es un termino externo al objeto, que controla la forma en que es visto por los demas. En la programacin orientada a objetos la modularidad se considera de la siguiente manera: Un programa grande siempre sera ms complicado que la suma de varios programas pequeos, con lo que se considera ventajoso dividir un gran sistema en diversos modulos. En la programacin orientada a objetos tenemos la jerarquia, la cual consiste en la clasificacion y organizacion de las abstracciones segun su naturaleza. El ms claro ejemplo de jerarquia es la herencia. En la programacin orientada a objetos se define la herencia como una jerarquia de extracciones, y la relacion entre clases, donde se comparte la estructura y el comportamiento de una o ms clase considerada como clases superiores o una superclase, con lo cual se resume que la herencia es una unidad independiente por si misma heredada de una abstraccion o superclase. Un ejemplo cotidiano lo encontramos en las aplicaciones que existen cactualmente en el mercado, donde un formulario cualquiera hereda las caracteristicas de uan ventana del sistema operativo Windows (Maximizar, Minimizar, Cerrar

http://lenguajes-de-programacion.com/programacion-orientada-a-objetos.shtml

La programacin Orientada a objetos (POO) es una forma especial de programar, ms cercana a como expresaramos las cosas en la vida real que otros tipos de programacin. Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en trminos de objetos, propiedades, mtodos y otras cosas que veremos rpidamente para aclarar conceptos y dar una pequea base que permita soltarnos un poco con este tipo de programacin. Motivacin Durante aos, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvan una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se cre la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el cdigo se pueda reutilizar. La POO no es difcil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede ser diferente segn el programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difcil no es programar orientado a objetos sino programar bien. Programar bien es importante porque as nos podemos aprovechar de todas las ventajas de la POO. Cmo se piensa en objetos Pensar en trminos de objetos es muy parecido a cmo lo haramos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diramos que el coche es el elemento principal que tiene una serie de caractersticas, como podran ser el color, el modelo o la marca. Adems tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar. Pues en un esquema POO el coche sera el objeto, las propiedades seran las caractersticas como el color o el modelo y los mtodos seran las funcionalidades asociadas como ponerse en marcha o parar. Por poner otro ejemplo vamos a ver cmo modelizaramos en un esquema POO una fraccin, es decir, esa estructura matemtica que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2. La fraccin ser el objeto y tendr dos propiedades, el numerador y el denominador. Luego podra tener varios mtodos como simplificarse, sumarse con otra fraccin o nmero, restarse con otra fraccin, etc. Estos objetos se podrn utilizar en los programas, por ejemplo en un programa de matemticas hars uso de objetos fraccin y en un programa que gestione un taller de coches utilizars objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos tambin son objetos. Es decir, el taller de coches ser un objeto que utilizar objetos coche, herramienta, mecnico, recambios, etc. Clases en POO

Las clases son declaraciones de objetos, tambin se podran definir como abstracciones de objetos. Esto quiere decir que la definicin de un objeto es la clase. Cuando programamos un objeto y definimos sus caractersticas y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablbamos de las clases coche o fraccin porque slo estuvimos definiendo, aunque por encima, sus formas. Propiedades en clases Las propiedades o atributos son las caractersticas de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo as como variables donde almacenamos datos relacionados con los objetos. Mtodos en las clases Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos mtodos. Los mtodos son como funciones que estn asociadas a un objeto. Objetos en POO Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crear. Esta accin de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccin de la palabra instace que en ingls significa ejemplar). Por ejemplo, un objeto de la clase fraccin es por ejemplo 3/5. El concepto o definicin de fraccin sera la clase, pero cuando ya estamos hablando de una fraccin en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto. Para crear un objeto se tiene que escribir una instruccin especial que puede ser distinta dependiendo el lenguaje de programacin que se emplee, pero ser algo parecido a esto. miCoche = new Coche() Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacin. Dentro de los parntesis podramos colocar parmetros con los que inicializar el objeto de la clase coche. Estados en objetos Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomar un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de una propiedad de un objeto se llama estado. Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto. miCoche.color = rojo El objeto es miCoche, luego colocamos el operador punto y por ltimo el nombre e la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacin.

Mensajes en objetos Un mensaje en un objeto es la accin de efectuar una llamada a un mtodo. Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasndole el mensaje ponte en marcha. Para mandar mensajes a los objetos utilizamos el operador punto, seguido del mtodo que deseamos imbocar. miCoche.ponerseEnMarcha() En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar parntesis igual que cualquier llamada a una funcin, dentro iran los parmetros. Otras cosas Hay mucho todava que conocer de la POO ya que slo hemos hecho referencia a las cosas ms bsicas. Tambin existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades ms potentes de la POO. La herencia sirve para crear objetos que incorporen propiedades y mtodos de otros objetos. As podremos construir unos objetos a partir de otros sin tener que reescribirlo todo. El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando, y abstraernos para definir un cdigo que sea compatible con objetos de varios tipos. Son conceptos avanzados que cuesta explicar en las lneas de ese informe. No hay que olvidar que existen libros enteros dedicados a la POO y aqu solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengis que poneros delante de ellas en los lenguajes de programacin que debe conocer un desarrollador del web.

http://www.desarrolloweb.com/articulos/499.php?manual=15

CONCEPTOS DE PROGRAMACIN ORIENTADA A OBJETOS


1.1 Introduccin Un concepto muy importante introducido por la programacin estructurada es la abstraccin. La abstraccin se puede definir como la capacidad de examinar algo sin preocuparse de los detalles internos. En un programa estructurado es suficiente conocer que un procedimiento dado realiza una tarea especfica. El cmo se realiza la tarea no es importante; mientras el procedimiento sea fiable se puede utilizar sin tener que conocer cmo funciona su interior. Esto se conoce como abstraccin funcional. Una debilidad de la programacin estructurada aparece cuando programadores diferentes trabajan en una aplicacin como un equipo. Dado que programadores diferentes manipulan funciones separadas que pueden referirse a tipos de datos mutuamente compartidos, los cambios de un programador se deben reflejar en el trabajo del resto del equipo. Otro problema de la programacin estructurada es que raramente es posible anticipar el diseo de un sistema completo antes de

que se implemente realmente. En esencia, un defecto de la programacin estructurada, como se acaba de ver, consiste en la separacin conceptual de datos y cdigo. Este defecto se agrava a medida que el tamao del programa crece. 1.2 Abstraccin de datos La abstraccin de datos permite no preocuparse de los detalles no esenciales. Existe en casi todos los lenguajes de programacin. Las estructuras de datos y los tipos de datos son un ejemplo de abstraccin. Los procedimientos y funciones son otro ejemplo. Slo recientemente han emergido lenguajes que soportan sus propios tipos abstractos de datos (TAD), como Pascal, Ada, Modula-2 y C++. 1.3 Qu es la programacin orientada a objetos? Se puede definir POO como una tcnica o estilo de programacin que utiliza objetos como bloque esencial de construccin. Los objetos son en realidad como los tipos abstractos de datos. Un TAD es un tipo definido por el programador junto con un conjunto de operaciones que se pueden realizar sobre ellos. Se denominan abstractos para diferenciarlos de los tipos de datos fundamentales o bsicos. En C se puede definir un tipo abstracto de datos utilizando typedef y struct y la implementacin de las operaciones con un conjunto de funciones. C++ tiene muchas facilidades para definir y utilizar un tipo TAD. Al igual que los tipos de datos definidos por el usuario, un objeto es una coleccin de datos, junto con las funciones asociadas, utilizadas para operar sobre esos datos. Sin embargo la potencia real de los objetos reside en las propiedades que soportan: herencia, encapsulacin y polimorfismo, junto con los conceptos bsicos de objetos, clases, mtodos y mensajes. 1.4 Trabajando con objetos En programacin convencional los programas se dividen en dos componentes: procedimientos y datos. Este mtodo permite empaquetar cdigo de programa en procedimientos, pero Qu sucede con los datos? Las estructuras de datos utilizadas en programacin son globales o se pasan como parmetros. En esencia los datos se tratan separadamente de los procedimientos. En POO un programa se divide en componentes que contienen procedimientos y datos. Cada componente se considera un objeto. Un objeto es una unidad que contiene datos y las funciones que operan sobre esos datos. A los elementos de un objeto se les conoce como miembros; las funciones que operan sobre los datos se denominan mtodos (en C++ tambin se llaman funciones miembro) y los datos se denominan miembros datos. En C+ + un programa consta de objetos. Los objetos de un programa se comunican entre s mediante el paso o envo de mensajes (acciones que debe ejecutar el objeto). En POO los objetos pueden se cualquier entidad del mundo real:

Objetos fsicos * automviles en una simulacin de trfico * aviones en un sistema de control de trfico areo * animales mamferos, etc Elementos de interfaces grficos de usuarios * ventanas * iconos * mens * ratones Estructuras de datos * arrays * pilas * rboles binarios Tipos de datos definidos por el usuario * nmeros complejos * hora del da 1.5 Definicin de objetos Un objeto es una unidad que contiene datos y las funciones que operan sobre esos datos. Los datos se denominan miembros dato y las funciones mtodos o funciones miembro. Los datos y las funciones se encapsulan en una nica entidad. Los datos estn ocultos y slo mediante las funciones miembro es posible acceder a ellos. 1.6 Clases Una clase es un tipo definido por el usuario que determina las estructuras de datos y las operaciones asociadas con ese tipo. Cada vez que se construye un objeto de una clase, se crea una instancia de esa clase. En general, los trminos objetos e instancias de una clase se pueden utilizar indistintamente. Una clase es una coleccin de objetos similares y un objeto es una instancia de una definicin de una clase. La comunicacin con el objeto se realiza a travs del paso de mensajes. El envo a una instancia de una clase produce la ejecucin de un mtodo o funcin miembro. El paso de mensajes es el trmino utilizado para referirnos a la invocacin o llamada de una funcin miembro de un objeto. 1.7 Mensajes: activacin de objetos Los objetos pueden ser activados mediante la recepcin de mensajes. Un mensaje es simplemente una peticin para que un objeto se comporte de una determinada manera, ejecutando una de sus funciones miembro. La tcnica de enviar mensajes se conoce como paso de mensajes. Estructuralmente un mensaje consta de tres partes: la identidad del objeto receptor - la funcin miembro del receptor cuya ejecucin se ha solicitado - cualquier otra informacin adicional que el receptor pueda necesitar para

ejecutar En C++, la notacin utilizada es

el

mtodo requerido. nombre_del_objeto.funcin_miembro

Ejemplo: Se tiene un objeto o1 con los siguientes miembros dato: nombre_alumno y curso y con las funciones miembro: leer_nombre e imprimir. Si el objeto o1 recibe el mensaje imprimir, esto se expresa: o1.imprimir() La sentencia anterior se lee: "enviar mensaje imprimir al objeto o1". El objeto o1 reacciona al mensaje ejecutando la funcin miembro de igual nombre que el mensaje. El mensaje puede llevar parmetros: o1.leer_nombre("Pedro Prez") Sin los mensajes los objetos que se definan no podrn comunicarse con otros objetos. Desde un punto de vista convencional, el paso de mensajes no es ms que el sinnimo de llamada a una funcin. 1.8 Programa orientado a objetos Un programa orientado a objetos es una coleccin de clases. Necesitar una funcin principal que cree objetos y comience la ejecucin mediante la invocacin de sus funciones miembro. Esta organizacin conduce a separar partes diferentes de una aplicacin en distintos archivos. La idea consiste en poner la descripcin de la clase para cada una de ellas en un archivo separado. La funcin principal tambin se pone en un archivo independiente. El compilador ensamblar el programa completo a partir de los archivos independientes en una nica unidad. En realidad, cuando se ejecuta un programa orientado a objetos, ocurren tres acciones: 1. Se crean los objetos cuando se necesitan 2. Los mensajes se envan desde uno objetos y se reciben en otros 3. Se borran los objetos cuando ya no son necesarios y se recupera la memoria ocupada por ellos 1.9 Herencia La herencia es la propiedad que permite a los objetos construirse a partir de otros objetos. Una clase se puede dividir en subclases. En C++ la clase original se denomina clase base; las clases que se definen a partir de la clase base, compartiendo sus caractersticas y aadiendo otras nuevas, se denominan clases derivadas. Las clases derivadas pueden heredar cdigo y datos de su clase base aadiendo su propio cdigo y datos a la misma. La herencia impone una relacin jerrquica entre clases en la cual una clase hija hereda de su clase padre. Si una clase slo puede recibir caractersticas de otra clase base, la herencia se denomina herencia simple. Si una clase recibe propiedades de ms de una clase base, la herencia se denomina herencia mltiple.

1.10 Polimorfismo En un sentido literal, significa la cualidad de tener ms de una forma. En el contexto de POO, el polimorfismo se refiere al hecho de que una misma operacin puede tener diferente comportamiento en diferentes objetos. Por ejemplo, consideremos la operacin sumar. El operador + realiza la suma de dos nmeros de diferente tipo. Adems se puede definir la operacin de sumar dos cadenas mediante el operador suma. http://programarenc.webcindario.com/Cplus/capitulo1.htm La programacin orientada a objetos es una nueva forma de ver viejos conceptos de modularidad: hay poco nuevo; pero al adaptar un lenguaje a los planteamientos de POO e incitar a los programadores a utilizarlos, se consigue una mejora de productividad apreciable. 1. Conceptos 2. Palabras reservadas 3. Estructuras dinmicas y objetos

1. Conceptos
Encapsulamiento Consiste en agrupar valores con mtodos (PROCEDURES y FUNCTIONS). La agrupacin de valores sigue el esquema de los RECORDS. La agrupacin de mtodos sigue el esquema de la UNITS. Dicha combinacin se denomina OBJECT. Los OBJECTS entran dentro de la categora de los TYPES; ms tarde pueden crearse variables de los tipos declarados.

Ocultacin Los componentes de un OBJECT pueden ser PUBLIC o PRIVATE. Cada una de estas palabras, reservadas, inicia una zona en la que se declaran datos o mtodos. Pueden haber varias zonas pblicas y/o varias zonas privadas. No obstante esta libertad, se recomienda disponer nicamente de 2 zonas, una pblica al principio y una privada a continuacin. La zona pblica al principio puede prescindir de la marca PUBLIC. Los objetos quedan pues de la siguiente forma:
TYPE x= object elementos pblicos, datos y/o mtodos private elementos privados, datos y/o mtodos end;

Casustica: OBJECT declarado en un PROGRAM:

Todos los campos son utilizables desde cualquier sitio del programa. La distincin entre PUBLIC y PRIVATE es puramente formal. Se aplican las reglas tradicionales de mbitos de Pascal. OBJECT declarado en UNIT INTERFACE: Los campos PUBLIC del OBJECT son utilizables desde cualquier sitio de la UNIT, y en cualquier otra UNIT/PROGRAM que USES esta. Los campos PRIVATE del OBJECT son utilizables desde cualquier sitio de esta UNIT, pero en ningn otro sitio. OBJECT declarado en UNIT IMPLEMENTATION: Todos los campos, sean PUBLIC o PRIVATE, son utilizables desde cualquier sitio de la IMPLEMENTATION. La distincin entre PUBLIC y PRIVATE es puramente formal. Se aplican las reglas tradicionales de mbitos de Pascal. Los componentes de un OBJECT, sean PUBLIC o PRIVATE, se pueden usar libremente para programar el contenido de los m&eacute;todos del OBJECT en cuestin. Herencia Un objeto puede ser descendiente de otro. La tcnica consiste en coger un objeto ya cerrado, sacar una copia y escribirle cosas encima: ms datos y/o ms mtodos. Aparece una relacin asimtrica de ascendientes/descendientes. La relacin es transitiva. Los datos de los ascendientes existen en los descendientes; que no pueden definir nuevos campos con igual nombre. Los mtodos de los ascendientes en principio los pueden usar los descendientes; pero estos pueden redefinirlos de nuevo, ocultando los de sus ascendientes. Se puede llegar a m'etodos de ancestros remotos explicitando el tipo al que nos referimos. Por ejemplo, si On es un objeto que procede de O1 a trav'es de varias herencias, los m'etodos de O1 son accesibles en On como
O1.metodo (...) El ascendiente inmediato INHERITED metodo (...)

es accesible como

Pascal slo permite heredar de 1 ascendiente. Hay lenguajes que permiten heredar de varios (herencia mltiple) Asignacin de valores Cuando tenemos variables que son de tipos objeto, sus contenidos pueden asignarse. Con ciertas condiciones. El contenido de una variable V2 es asignable a una variable V1 (V1:= V2;) si y slo si

V1 y V2 son del mismo tipo V1 es de un tipo ascendiente del tipo de V2

Al asignar un objeto a otro objeto, se copian los contenidos de los datos comunes. La filosofa subyacente es que un descendiente tiene siempre los componentes de sus ascendientes (inmediatos o remotos) y por tanto la asignacin siempre sabe cmo llenar los componentes de destino, aunque haya que tirar algunos que sobran. Al reves, sin embargo, no sera posible, pues un ascendiente tiene menos cosas que sus descendientes y dejara campos sin cargar (las variables con contenidos indefinidos son muy peligrosas, fuente de mil errores, y conviene evitarlas a toda costa). Los mtodos asociados no se alteran: cada objeto mantiene los propios de su tipo. La asignacin de valores tiene lugar en sentencias de asignacin (ej. V1:= V2;) en el paso de parmetros por valor (ej. PROCEDURE P (V1: ...); llamado como P (V2); )

Comparticin de valores Se da cuando hay dos formas de acceder a un mismo objeto, cosa que tiene lugar al asignar punteros (aparecen aliases apuntando a la misma cosa) en el paso de parmetros por referencia (VAR) (aparecen varios nombres para la misma cosa)

Polimorfismo Se llama polimorfismo a la utilizacin del mismo nombre para referirse a diferentes cosas. Hay muchos casos de polimorfismo en Pascal sin objetos, ej: Write es un procedimiento polimrfico, pues puede trabajar sobre parmetros de diferentes tipos Dos campos que se denominen igual pueden existir en RECORDS diferentes Dos variables o procedimientos que se denominen igual pueden existir en mbitos diferentes; por ejemplo, en diferentes UNITs.

En OBJECTS: Dos campos que se denominan igual pueden existir en OBJECTS diferentes, nos referimos tanto a datos como a mtodos. Un tipo heredado puede redefinir la funcionalidad de un mtodo que se llame igual en algn ascendiente. De hecho, el elemento del ancestro queda oculto por el nuevo elemento.

El polimorfismo es muy natural, intuitivo y carece de emoci'on cuando afecta a objetos no relacionados entre s'i. El polimorfismo pasa a ser especialmente emocionante cuando se aplica entre objetos que mantienen una relaci'on de herencia. Esto es as porque con el tipo de un ascendiente podemos estar refirindonos a una cosa de un tipo descendiente. Como esto slo se sabe cuando estamos ejecutando el programa, se suele asociar al concepto de "late binding". Late Binding [traducible por ligadura tarda, dinmica, ...] La regla bsica es que dado el tipo de un objeto, los mtodos que le son aplicables son los que le son propios, independientemente de que otros descendientes puedan haberlos redefinido. En un contexto en el que exista posibilidad de polimorfismo en el sentido del ltimo prrafo del punto anterior, es posible que el mtodo asociado a un objeto no sea necesariamente el asociado a su tipo, sino que podamos referirnos al mtodo asociado al tipo del que es el contenido real de la cosa.

2. Palabras reservadas
Pascal asocia una serie de palabras novedosas para plasmar cada uno de estos conceptos. La asociacin no es todo lo elegante que sera de desear, y a veces hay palabras reservadas que se utilizan para diferentes conceptos, y conceptos que requieren de muchas palabras reservadas. Encapsulamiento OBJECT, que sirve para definir TYPES objeto VAR, que sirve para crear variables de TYPES objeto SELF, que es una variable que slo existe dentro de un mtodo y se refiere a la variable sobre la que se aplica el mtodo. o En procedures/functions aisladas es necesario pasar un argumento para saber sobre qu variable se aplica
PROCEDURE pop (VAR p: pila);

al llamarlo como
pop (mipila);

dentro de "pop", la variable externa "mipila" se conoce por p. o Como los mtodos de los objetos estn estrechamente ligados a los objetos en s, la asociacin es directamente
mipila.pop

y dentro de "pop", la variable externa "mipila" se conoce por SELF. Ocultacin PUBLIC, que sirve para dar amplia visibilidad a un componente, dato o mtodo

PRIVATE, que sirve para acotar la visibilidad de un componente, dato o mtodo

Herencia TYPE descendiente= OBJECT (ascendiente) declara un tipo derivado de otro INHERITED, que permite que un descendiente se refiera a un mtodo de su ascendiente inmediato

Asignacin de valores

:= en asignacin convencional paso de parmetros por valor

Comparticin de valores

:= de punteros (aliases) paso de parmetros por referencia (VAR)

Polimorfismo Late Binding VIRTUAL 1. palabra que se utiliza adjetivar un mtodo de forma que sea susceptible de un "late binding". 2. Los mtodos no VIRTUAL se asocian en base al continente. 3. Los mtodos VIRTUAL se asocian en base al contenido. CONSTRUCTOR 1. Si un objeto tiene mtodos VIRTUAL, tambin debe tener mtodos CONSTRUCTOR. 2. Cualquier mtodo (PROCEDURE o FUNCTION) puede ser CONSTRUCTOR, y debe haber alguno para ser llamado antes de usar algn mtodo virtual. 3. Si sobre una variable de un cierto tipo OBJECT se intenta utilizar un mtodo VIRTUAL antes de utilizar algn mtodo CONSTRUCTOR, ocurre un error. 4. Se puede activar un chequeo {$R+} para que el programa de un error si se intenta utilizar un VIRTUAL antes que un CONSTRUCTOR. 5. Probablemente sea suicida trabajar sin {$R+} 6. Todo esto son manas de Turbo Pascal; no ocurre necesariamente en otros lenguajes. DESTRUCTOR 1. Cualquier mtodo puede ser DESTRUCTOR. 2. Estos mtodos sirven para indicarle a la mquina que cuando libere memoria (con DISPOSE) lo haga bien.

3. Slo son necesarios cuando se trabaja con objetos ubicados dinmicamente y que son polimrficos. 4. En estos casos es obligado que el DESTRUCTOR sea adems VIRTUAL.

3. Estructuras dinmicas y objetos


La utilizacin de tcnicas orientadas a objetos no altera sustancialmente las tcnicas clsicas en cuanto a programacin con estructuras dinmicas y punteros como mecanismo de referencia a las mismas en tiempo de ejecucin. Las mismas estructuras que venamos utilizando se pueden envolver como objetos y tratar como tipos abstractos de datos. Es decir, tenemos una forma alternativa de encapsulamiento o mdularizacin. Pero si aparecen nuevas posibilidades en torno a los conceptos de polimorfismo y ligadura tarda ("late binding").

3.1. Polimorfismo y mtodos virtuales


Los objetos introducen una posibilidad nueva: los mtodos virtuales, que aprovechan la ignorancia del programa respecto de lo que un puntero est apuntando para introducir un concepto de genericidad en la estructuracin de programas. Ms claramente: la esencia de los objetos es asociar los mtodos (procedimientos y funciones) a los datos. Esta asociacin se puede realizar a travs de un puntero: dado un puntero, se persigue para localizar el dato y de l averiguamos qu mtodo aplicar. De esta tcnica podemos "abusar" de la tolerancia del sistema a base de pasar punteros de un sitio para otro y slo en el ltimo momento ("late binding") preocuparnos de averiguar a qu estamos apuntando. Si somos capaces de relajar el chequeo de tipos, podemos encontrarnos en tiempo de ejecucin con una variedad de objetos diferentes apuntados. Esta relajacin debe ser cuidadosa para no crear un caos. En programacin orientada a objetos la forma controlada de combinar varios tipos de objetos de denomina polimorfismo y consiste en tolerar que a un objeto de un cierto tipo T1 se le asigne otro objeto de otro tipo T2, con la restriccin de que T2 sea un descendiente (tipo derivado) de T1. En particular, esta relajacin se puede aplicar a los punteros:
TYPE PT1= ^T1; T1= OBJECT ... END; PT2= ^T2; T2= OBJECT (T1) ... END; VAR O1: PT1; O2: PT2; PROCEDURE P (X: PT1); BEGIN ... END; BEGIN O1:= O2; (* polimorfismo legal *) P (O2); (* polimorfismo legal *)

Esta tolerancia tiene cierta lgica. Un tipo derivado slo puede ser un enriquecimiento de otro tipo. Los datos de un ascendiente son un subconjunto de los datos de un descendiente, y por tanto todo lo que el antecesor conoce puede localizarse en el

descendiente. Pero, aparte de no dejar ningn vacio, un descendiente puede tener un diferente concepto de lo que hace un cierto mtodo (un refinamiento): existe siempre algo que se llama igual, pero su ejecucin puede ser diferente. Estos mtodos son los que se denominan virtuales:
T1= OBJECT PROCEDURE X; virtual; END; T2= OBJECT (T1) PROCEDURE X; virtual; END; T1.X y T2.X pueden tener implementaciones distintas.

Un puntero a un objeto de tipo PT1, puede apuntar a un objeto de tipo T1, en cuyo caso O1^.X ejecutar T1.X. Pero tambin puede encontrarse apuntando a un objeto de tipo T2, en cuyo caso ejecutara T2.X. Slo se sabe en tiempo de ejecucin a qu est apuntando en cada momento. Estos procedimientos requieren una atencin especial, razn por la cual se le informa al sistema adosndoles la palabra VIRTUAL.

3.2. Constructores y destructores


Los objetos susceptibles de ser apuntados se encuentran con otros detalles operacionales relativos a su inicializacin y a su liquidacin (destruccin). Nos referimos a las operaciones de ubicacin de memoria (NEW) y de liberacin (DISPOSE). La ubicacin de memoria requiere al menos dos fases: (1) ubicar sitio y (2) inicializar los datos. Como un objeto suele tener datos privados slo accesibles a travs de los mtodos que aporta pblicamente (al menos esto es lo que recomiendan los tratados de buenas maneras de programar), ocurre que tendremos algn mtodo que se denomine "carga" o similar. Por ejemplo:
T1= OBJECT PROCEDURE X; virtual; CONSTRUCTOR init (valor: tipo); PRIVATE dato: tipo; END; CONSTRUCTOR T1.init (valor) BEGIN dato:= valor; END;

Y la creacin de un objeto de este tipo viene en dos fases:


NEW (O1); O1^.init (...);

que, por comodidad y por sistematizar operaciones, se pueden combinar en una sla operacin:
NEW (O1, init (...));

Aparte de las razones aducidas de comodidad, en el caso de Turbo Pascal el sistema requiere que si un objeto tiene mtodos virtuales, antes de utilizar estos se haya utilizado algn constructor. Esto es pura mana de Turbo Pascal; pero si no se hace, los programas no funcionan. La operacin simtrica, DISPOSE sufre una evolucin similar:
T1= OBJECT PROCEDURE X; virtual; CONSTRUCTOR init (valor: tipo); DESTRUCTOR final; PRIVATE dato: tipo; END; DESTRUCTOR T1.final; BEGIN (* lo que haga falta ... *) END;

Donde "lo que haga falta" quiere decir que antes de eliminar un objeto puede ser necesario atender a otras facetas del programa. Casos tpicos:

que un objeto tenga un puntero a otro objeto y no nos interese que se pierda memoria por eliminar al que apunta. que el objeto sea parte integrante de una estructura de datos ms compleja y debamos ajustar el entorno antes de eliminar uno concreto.

Sea por la razn que sea, podemos eliminar en una o dos operaciones:
O1^.final; DISPOSE (O1); DISPOSE (O1, final);

Cuando trabajamos con mtodos vrituales, adems de la problemtica expuesta nos encontramos con situaciones en las que no se sabe hasta tiempo de ejecucin que es lo que hay que destruir. Esto lleva simplemente a que los mtodos destructores sean de tipo VIRTUAL.

3.3. Objetos genricos


Los mtodos virtuales nos llevan a la posibilidad de escribir unidades que trabajan sobre cualquier tipo de datos dentro de una jerarquizacin de objetos derivados. La tcnica consiste en identificar un tipo muy bsico con las mnimas funciones necesarias, que se etiquetan como virtuales. Sobre este tipo elemental se desarrollan algoritmos que hacen referencia a los mtodos virtuales. Estas unidades se pueden cerrar sin necesidad de que se conozca exactamente a que descendientes del tipo bsico se van a aplicar. Ms tarde, se pueden derivar nuevos objetos a partir del tipo bsico, dando contenido diverso a los mtodos virtuales que quedaron abiertos. Se monta todo junto y en tiempo de ejecucin los algoritmos genricos que habiamos codificado se materializan sobre las instancias precisas de los objetos derivados.

Esta posibilidad de escribir unidades genricas lleva a una posibilidad prctica de disponer cdigo reutilizable o incluso comercializable por separado. http://www.upv.es/protel/usr/jotrofer/pascal/poo.htm

1.4.3 Programacin de descripcin Hardware sistemas numricos 1.5 Lenguajes de programacin


Lenguajes de programacion

de

Un programa es un conjunto de instrucciones que indica al ordenador las tareas a realizar. Un programa consta de rdenes y de declaraciones. Las rdenes indican las tareas a ejecutar. Las declaraciones informan sobre determinados aspectos de los elementos de un programa. Las rdenes y declaraciones se escriben correlativamente utilizando la sintaxis de uno de los lenguajes de programacion. Esta sintaxis pretende ser lo ms parecida al lenguaje utilizado en la comunicacin verbal. Los programas as escritos, en lenguaje o cdigo fuente, no pueden ser interpretados directamente por el ordenador, necesitan ser traducidos a lenguaje mquina. Lenguaje mquina es el lenguaje que puede ser entendido y ejecutado directamente por el ordenador. Para conseguir que el cdigo fuente sea interpretado como cdigo mquina se emplean compiladores y linkadores, que son dos tipos de programas ensambladores. Los diferentes lenguajes se pueden clasificar en dos grupos: lenguaje mquina y lenguaje de programacin. Dentro de stos, a su vez, hay dos grupos, los lenguajes de alto nivel y los lenguajes ensambladores. Se crean tres tipos de ficheros para obtener un ejecutable. En primer lugar, el programa fuente dar origen a un fichero objeto, que a su vez es el origen del fichero ejecutable. Las fases por las que pasa un programa, desde que se crea el cdigo fuente hasta que termina su ejecucin, son: edicin del texto escrito para depurar los errores gramaticales. Los errores lgicos, sintcticos, no detectados anteriormente se detectan en la fase de compilacin, no permiten continuar con la creacin del fichero ejecutable. En este caso se ha de reescribir el cdigo errneo antes de un nuevo linkado. http://www.galeon.com/kronen/lenguajes.htm

Qu es un Lenguaje de Programacin
Antes de hablar de C++, es necesario explicar qu es un lenguaje de programacin. Un lenguaje de programacin es un lenguaje escrito utilizado para escribir programas que se ejecutan en un computador. Existen muchos lenguajes de programacin de entre los que se destacan los siguientes: 1. C 2. C++

3. 4. 5. 6. 7. 8. 9.

Basic Ada Java Pascal Python Fortran Smalltalk

http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C_M%C3%A1s_M %C3%A1s#Qu.C3.A9_es_un_Lenguaje_de_Programaci.C3.B3n

Lenguaje de programacin es un conjunto de sintaxis y reglas semnticas que definen los programas del computador. Es una tcnica estndar de comunicacin para entregarle instrucciones al computador. Un lenguaje le da la capacidad al programador de especificarle al computador, qu tipo de datos actan y que acciones tomar bajo una variada gama de circunstancias, utilizando un lenguaje relativamente proximo al lenguaje humano. Un programa escrito en un lenguaje de programacin necesita pasar por un proceso de compilacin, es decir, ser traducido al lenguaje de mquina para que pueda ser ejecutado por el ordenador.

http://encyclopediees.snyke.com/articles/lenguaje_de_programacion.html Qu es un Lenguaje de Programacin? Un lenguaje de programacin es un conjunto de normas lingsticas que permiten escribir un programa y que ste sea entendido por el ordenador y pueda ser trasladado a ordenadores similares para su funcionamiento en otros sistemas. Un programa es una serie de instrucciones ordenadas correctamente que permiten realizar una tarea o trabajo especfico. Ahora bien, un lenguaje de programacin se basa en dos elementos muy importantes:
Sintaxis: que se refiere a la utilizacin correcta de cada una de las sentencias de cierto lenguaje de programacin. Semntica: se encarga de que cada "oracin" del lenguaje de programacin utilizado tenga un significado correcto.

A medida que la complejidad de los programas ha ido aumentando, se han requerido de nuevos lenguajes para poder describir esos problemas y que sean resueltos por el ordenador. Generaciones de Lenguajes de Programacin

Las generaciones de los lenguajes de programacin, se han venido dando debido a que las necesidades que plantean los problemas son cada da ms grandes y complejo, a continuacin se hace un pequeo resumen de cada una de las generaciones de lenguajes de programacin. a. Primera Generacin: Los lenguajes de primera generacin o tambin conocidos como
lenguajes maquina, son en los que se utiliza el cdigo binario(unos y ceros) para comunicarse con la computadora, esta generacin de lenguajes es muy complicada, ya que al usar pocos signos, no puede expresar cosas muy complicadas. En la actualidad ya casi no se trabaja con lenguajes maquina, los nicos que lo hacen son los diseadores de los "chips" de los procesadores. Segunda Generacin: Los lenguajes de esta segunda generacin son conocidos tambin como ensambladores, y se distinguen de los lenguajes maquina por su eficiencia(en comparacin con sus antecesores). Estos lenguajes ensambladores se basan en lo que es la comprensin de varias palabras en una sola, por ejemplo:

b.

ADC significara "sumar con reserva"(en ingles: ADd with Carry) Haciendo notoria la aclaracin, de que esta serie de instrucciones sern traducidas al lenguaje maquina por el compilador del lenguaje. c. Tercera Generacin: Los lenguajes de tercera generacin o de alto nivel son los
lenguajes ms comunes o que ms conocemos(C, Pascal, Algol, Cobol, Fortran, BASIC). Estos lenguajes se asemejan ya un poco ms al lenguaje humano, al utilizar palabras completas( en ingles) para la codificacin de los programas. Cuarta Generacin: Son los lenguajes de "programacin asistida" por medio de ayudantes o wizards, estos lenguajes se han diseado para facilitar la realizacion de muy variadas tareas, como lo son la simulacin de fenmenos fsicos, manipulacin de datos estadsticos, etc. Algunos de estos lenguajes son: Visual Basic, INFORMIX 4GL, Visual J++, Visual C, he inclusive algunos autores consideran las planillas de calculo dentro de esta generacin. Quinta Generacin: En esta generacin, el programador solo ingresa hechos y hace consultas, no se preocupa de cmo hacer los algoritmos que entregan la respuesta, algunos autores hasta hace poco todava consideraban a esta generacin como un sueo, pero gracias al avance de la tecnologa, hoy en da es toda una realidad, como lo veremos a continuacin.

d.

e.

http://www.monografias.com/trabajos5/proco/proco.shtml

Unidad 2. Diseo de Algoritmos


2.1 Conceptos bsicos
El diseo de algoritmos es una actividad que consiste en especificar los pasos necesarios para alcanzar la solucin de un problema. Debe considerarse que algunos de esos pasos sern otros algoritmos. Caractersticas de un algoritmo: 1. Alcanzar la solucin (correcta) en un tiempo finito. 2. Constar de pasos claros, precisos y no ambiguos 3. Mostrar claramente cules son los datos iniciales y cules son los resultados.

Por cada problema se debe considerar lo siguiente: 1. 2. 3. 4. Definir con precisin qu datos se utilizarn como entradas. Definir con precisin qu datos se obtendrn como salidas. Si ya existen algoritmos adecuados, aprovecharlos prudentemente. Determinar qu acciones se deben efectuar sobre las entradas hasta convertirlas en resultados, y describir cada una con frases no ambiguas.

Por lo general las acciones que pueden integrarse en un algoritmo son: 1. 2. 3. 4. Pedir datos, Desplegar datos, Evaluar condiciones y Ejecutar operaciones matemticas.

ETAPAS DEL DESARROLLO DE PROGRAMAS Un programa se elabora para resolver un problema mediante la computadora. En computacin un problema consiste en obtener ciertos resultados a partir de unos datos previos. Un programa es un grupo de instrucciones, escritas en un lenguaje especializado, cuya finalidad es indicarle a una mquina cmo efectuar un trabajo. A cada lnea de un algoritmo le corresponden una o ms lneas de cdigo; un programa puede constar de uno o ms algoritmos Para desarrollar un programa y tener mayor confianza sobre su correcto funcionamiento es conveniente seguir las siguientes etapas: 1. 2. 3. 4. 5. Definicin del problema, Anlisis del problema, Diseo del algoritmo, Programacin y pruebas, Mantenimiento del programa.

El algoritmo define la lgica con que fluyen las instrucciones de un programa. http://www.cyta.com.ar/biblioteca/bddoc/010304/rrhh/rrhh.htm CONCEPTO DE PROBLEMA.
Entendemos por problema una situacin en la que las cosas que tenemos son diferentes de las que deseamos.

Ejemplo: Una persona quien desea tener una casa nueva, sin embargo, el solo dispone de los maderos, las pinturas y las herramientas, en sntesis desea una casa pero solo cuenta con los materiales.

Fig. 8.1 Para enfrentar estas situaciones problemticas proponemos un mtodo para desenredar el problema y paulatinamente construir la situacin

1.1.2 ALGORITMO

Definicin: Es una serie de pasos ordenados lgicamente que permiten resolver un problema.
Algoritmos de la vida cotidiana.
En la vida diaria podemos encontrar muchos ejemplos como son: A) Receta de cocina 1. Tener listo los ingredientes 2. Encender el fuego 3. Colocar el sartn sobre el fuego 4. Poner aceite en la sartn 5. Agregar los huevos y dejarlos frer 2 minutos 6. Retirar los huevos 7. Apagar el fuego Podemos encontrar algoritmos hasta en la actividad ms sencilla, dar un paso por ejemplo:

1. 2. 3. 4. 5. 6. 7. 8.

Apoyar el cuerpo sobre el pie izquierdo Levantar el pie derecho Avanzar el pie derecho Bajar el pie derecho Apoyar el cuerpo sobre el pie derecho Levantar el pie izquierdo Avanzar el pie izquierdo Bajar el pie izquierdo

Aqu podemos apreciar que importante es seguir el orden marcado por el algoritmo, piense que ocurrira si despus de realizar el numero 2 se salte al paso 6.

1.1.3 CARACTERSTICAS DE LOS ALGORITMOS

Finitud: El algoritmo debe alcanzar la solucin correcta en un limite de tiempo Precisin: Las instrucciones de un algoritmo deben ser claras, precisan y no prestarse a interpretaciones (es decir evitar la ambigedad) Entradas y Salidas claramente definidas: Las entradas se transformaran para obtener las salidas, por ello un algoritmo debe mostrar con claridad cuales sern los resultados (datos iniciales ) Efectividad: Los pasos de un algoritmo deben conducir a la solucin del problema original

Realizar un algoritmo tipo agenda sobre las actividades que hace durante el da, siguiendo los pasos de la definicin de algoritmos
Tarea 1:

1.1.4 DIAGRAMAS Definicin: Es la representacin grafica de la solucin de un problema o un procedimiento

Definicin de Pseudo cdigo: Consiste en redactar (en espaol) cada paso del algoritmo, utilizando oraciones breves y sin incluir adjetivos y artculos.
http://www.angelfire.com/theforce/trabajo/trabajo.htm

2.2 Metodologa de la programacin

Definicin del problema


Est dada en s por el enunciado del problema, el cual debe ser claro y complejo. Es importante que conozcamos exactamente "que se desea obtener al final del proceso" ; mientras esto no se comprenda no puede pasarse a la siguiente etapa.

Anlisis de los datos


Para poder definir con precisin el problema se requiere que las especificaciones de entrada y salida sean descritas con detalle ya que esto es un requisito para lograr una solucin eficaz. Una vez que el problema ha sido definido y comprendido, deben analizarse los siguientes aspectos :

Los resultados esperados. Los datos de entrada disponibles. Herramientas a nuestro alcance para manipular los datos y alcanzar un resultado (frmulas, tablas, accesorios diversos). Una medida aconsejable para facilitar esta etapa consiste en colocarnos en lugar de la computadora deduciendo los elementos que necesitaremos para alcanzar el resultado. Ejemplo 2.1 Leer el radio de un crculo y calcular e imprimir su superficie y circunferencia. Anlisis Las entradas de datos en este problema se concentran en el radio del crculo. Dado que el radio puede tomar cualquier valor dentro del rango de los nmeros reales, el tipo de datos radio debe ser real. Las salidas sern dos variables : superficie y circunferencia que tambin sern de tio real. Entradas : Radio del crculo (variable RADIO). Salidas : Superficie del crculo (variable AREA). Circunferencia del crculo (variable CIRCUNFERENCIA). Variables : RADIO, AREA, CIRCUNFERENCIA tipo real.

Diseo de la solucin
Una computadora no tiene capacidad para solucionar problemas ms que cuando se le proporcionan los sucesivos pasos a realizar, esto se refiere a la obtencin de un algoritmo que resuelva adecuadamente el problema. En caso de obtenerse varios algoritmos, seleccionar uno de ellos utilizando criterios ya conocidos. Esta etapa incluye la descripcin del algoritmo resultante en un lenguaje natural, de diagrama de flujo o natural de programacin. Como puede verse, solo se establece la metodologa para alcanzar la solucin en forma conceptual, es decir ; sin alcanzar la implementacin en el sistema de cmputo.

De acuerdo al ejemplo 2.1 tenemos que la informacin proporcionada constituye su entrada y la informacin producida por el algoritmo constituye su salida. Los problemas complejos se pueden resolver ms eficazmente por la computadora cuando se dividen en subproblemas que sean ms fcil de solucionar. El problema de clculo de la longitud y superficie de un crculo se puede descomponer en subproblemas ms simples : Leer datos de entrada. Calcular superficie y longitud. Escribir resultados (datos de salida).

Codificacin
Se refiere a la obtencin de un programa definitivo que pueda ser comprensible para la mquina. Incluye una etapa que se reconoce como compilacin. Si la codificacin original se realiz en papel, previo a la compilacin deber existir un paso conocido como transcripcin.

Programa Fuente Esta escrito en un lenguaje de programacin. (pascal, C++,Visual Fox, Visual Basic, etc). Es entendible por el programador.

Programa Ejecutable Est en lenguaje mquina. Entendible por la mquina.

Prueba y depuracin
Una vez que se ha obtenido el programa ejecutable, este es sometido a prueba a fin de determinar si resuelve o no el problema planteado en forma satisfactoria. Las pruebas que se le aplican son de diversa ndole y generalmente dependen del tipo de problema que se est resolviendo. Comnmente se inicia la prueba de un programa introduciendo datos vlidos, invlidos e incongruentes y observando como reacciona en cada ocasin. El proceso de depuracin consiste en localizar los errores y corregirlos en caso de que estos existan. Si no existen errores, puede entenderse la depuracin como una etapa de refinamiento en la que se ajustan detalles para optimizar el desempeo del programa.

Documentacin
Debido a que el programa resultante en esta etapa se encuentra totalmente depurado (sin errores), se procede a la utilizacin para resolver problemas del tipo que di origen a su diseo. En vista de que esta utilizacin no podr ser supervizada en todas las ocasiones por el programador, debe crearse un manual o gua de operacin que indique los pasos a seguir para utilizar el programa.

Mantenimiento
Se refiere a las actualizaciones que deban aplicarse al programa cuando las circunstancias as lo requieran. Este programa deber ser susceptible de ser modificado para adecuarlo a nuevas condiciones de operacin. Cualquier actualizacin o cambio en el programa deber reflejarse en su documentacin.
METODOLOGIA

IDENTIFICACIN DEL PROBLEMA


Un problema siempre surge en una situacin mas o menos compleja. Esto provoca que muchas veces no se aprecia el verdadero problema. Para identificar el problema es necesario encontrar dentro de la situacin todos los elementos importantes: aquellos que estn presentes( lo que tenemos) y aquellos que estn ausentes ( lo que deseamos) Ejemplo: Nuestro personaje esta sentado en su casa viendo la televisin. Afuera esta lloviendo y como su techo esta en mal estado el agua se introduce a la habitacin. Fig 8.2 Cul es su problema? 1. El problema es que 2. El problema es que 3. El problema es que 4. El problema es que la televisin no se ve bien el silln no es cmodo las gotas hacen ruido se esta metiendo el agua a su casa

Un anlisis profundo de la situacin ( y un poco de sentido comn) podemos determinar que en realidad el problema consiste en que se esta metiendo el agua a la casa: nuestro personaje tiene una gotera, pero no quiera la gotera

1.2.2 PLANTEAMIENTO DE ALTERNATIVAS DE SOLUCION


La solucin a un problema es la accin que permite eliminar las diferencias entre lo que tenemos y queremos. Para un mismo problema se puede tener varias soluciones, y la eleccin de la mejor depender de las circunstancias especificas. En el ejemplo de la gotera se mostraron 4 posibilidades de solucin

1. 2. 3. 4.

Esperar con resignacin a que acabe la lluvia Colocar el paraguas en el techo Repara el techo Colocar una cubeta bajo la gotera.

Cualquiera de estas soluciones es posible llevarla a la practica; sin embargo, resulta casi obvio que las dos primera son risibles: la resignacin provocara que se dae el piso y los muebles, y colocar un paraguas le da la vuelta al problema. La tercera solucin es la mejor, pero considerando que esta lloviendo, la solucin inmediata es colocar la cubeta ( y cuando no llueva reparar el techo).

En algunos otros casos las soluciones propuestas son poco factibles, otras fantsticas y algunas otras falsas, pues no resuelven el problema sino lo evitan o crean otro. Un ejemplo, un problema de nutricin se soluciona ( falsamente) con comida chatarra.

La solucin es una estrategia que sirve para alcanzar el resultado deseado de un problema, dicha estrategia consta de un conjunto de transformaciones que convierten los elementos disponibles en los objetos deseados. Fig 8.3

Regresando al primer ejemplo el de la persona que desea una casa debe seguir para lograr su propsito:

1. Elaboracin de planos de la casa


2. Cortar los maderos al tamao adecuado 3. Construir puertas y techos 4. Pintar la casa Si nuestro personaje sigue los pasos es seguro que podr disfrutar de una casa nueva. En general a la serie de pasos que permiten resolver un problema se le conoce como algoritmo.

Actividad: Determine cual es el error en el siguiente problema: El siguiente algoritmo presenta un sencillo procedimiento de inscripcin en la escuela de manejo. 1. 2. 3. 4. 5. Llegar a la oficina de inscripcin Recoger solicitud de inscripcin Llenar solicitud con los datos Entregar la solicitud Salir de la oficina

Tarea.- Resolver el siguiente problema: Determinar los pasos para ensear a un ciego de nacimiento que pueda representar grficamente los colores.

DISENO DE ALGORITMOS
Diseo de algoritmos es preparar una estrategia para solucionar un problema, sin embargo para hacer el diseo se debe tener completamente entendido el problema y comprendida la solucin que se desea alcanzar. Efectuar un anlisis de la situacin

1. Problema identificado: El personaje no puede ser su camino (debido


ala llanta ponchada) y debe continuar su viaje.

2. Solucin: Cambiar la llanta ponchada por otra en buen estado


Diseo de estrategia para obtener la solucin. Que debemos considerar: a) b) c) d) e) Existe un llanta de refraccin en buen estado Existe la herramienta necesaria (gato, llave de cruz, etc) Las herramientas y la llanta de refraccin estn en la cajuela Se tiene las llaves de la cajuela El carro ya fue estacionado ( en la orilla de la carretera)

Como realizar el algoritmo para efectuar el cambio de la llanta 1. Bajar del carro 2. Abrir la cajuela 3. Sacar llanta de refraccin y herramientas 4. Colocar el gato bajo el carro 5. Quitar el tapn y aflojar tuercas (birlo) de la llanta daada 6. Levantar el carro con el gato 7. Quitar los birlo y sacar la llanta 8. Colocar la llanta de refraccin 9. Bajar el carro 10.Apretar los birlo y poner tapones 11.Guardar herramienta y la llanta de la cajuela 12.Cerrar la cajuela 13.Subir al carro y continuar el viaje

DESARROLLO DE SOLUCIONES
Tarea 2. Actividades en parejas la metodologa de solucin
Baar al perro Consideraciones: si tiene perro y en su casa hay jabn, toallas, agua, etc. Escribir y enviar una carta

Consideraciones: tiene que enviar una tarjeta de felicitaciones a un viejo amigo. No tiene la tarjeta, ni los timbres. En su casa tiene sobres, papel y plumas. Puede depositar la carta en un buzn o en la oficina de correos. Preparar un emparedado Consideraciones: Tiene hambre. El emparedado ser de tipo tradicional (jamn y queso). En su casa no hay jamn ni queso, pero tiene el pan y los dems ingredientes necesarios. Por si desea calentarlo, si tiene gas y estufa. Adornar una rbol de navidad Consideraciones: ya es navidad, ya compro el rbol ( no importa si es natural o artificial). En su casa hay todos los adornos necesarios. Realice un algoritmo que convierta dlares a pesos Elabore un algoritmo que me solucione el problema de encontrar el rea de un rectngulo. Realice un algoritmo que obtenga el rea y el permetro de una circunferencia. Frmula para el permetro: P=2 x r x pi Frmula para el rea: A=pi x r x r
http://www.angelfire.com/theforce/trabajo/trabajo.htm METODOLOGA DE LA PROGRAMACIN Una aplicacin informtica se compone de programas que tienen por objeto la realizacin automtica de una o varias tareas mediante el uso de un sistema informtico. El proceso desde el planteamiento del problema hasta que se tiene la solucin informtica instalada en una o varias computadoras, se denomina ciclo de vida de una aplicacin informtica. Este se descompone en varias fases: FASES de DISEO FASES de INSTALACIN Problema Ingenieros Especificacin Programa fuente Diplomados/IT Algoritmo Programa objeto Tcnicos FP Ejecutable Aplicacin

Anlisis. Consiste en el examen y descripcin detallada de los siguientes aspectos relativos al problema: equipo a utilizar, personal informtico necesario, estudio de los datos de entrada, estudio de los resultados que se pretenden obtener, relacin entre la entrada y la salida, y descomposicin del problema en mdulos.

Resultado: documentos que componen la especificacin del problema.

Programacin. Consiste en el diseo de la solucin al problema planteado en forma de algoritmo. Resultado: documentos integrados por herramientas de representacin de algoritmos como seudocdigo, ordinogramas, etc... Codificacin. Transcripcin del algoritmo resultante de la fase anterior a un lenguaje de codificacin concreto. Resultado: se denomina programa y antiguamente sola devolverse o generarse un documento en papel denominado hoja de codificacin o cuaderno de carga. Edicin. Se escribe el programa fuente a partir de las hojas de codificacin en la memoria del ordenador, y se graba en algn soporte permanente. Compilacin. Traduccin del programa fuente an programa objeto o compilado, con programas traductores. Fase de montaje o linkado. Se aade al programa objeto una serie de rutinas del sistema. Resultado: programa ejecutable directamente en la mquina sin necesidad de traductor. Prueba de ejecucin. Consiste en ejecutar el programa con una serie de conjuntos de datos de prueba para comprobar si el funcionamiento de ste entra dentro de los estndares de calidad fijados. Explotacin y mantenimiento. La explotacin consiste en el uso continuo y habitual por parte de los usuarios de la aplicacin en un entorno. El mantenimiento de la aplicacin consiste en la comprobacin del buen funcionamiento de sta y en la adaptacin a cualquier nueva circunstancia que implique su actualizacin.

Segn el momento en el que se detectan los errores, podemos clasificarlos en los siguientes tipos:

Errores de compilacin. Corresponden al incumplimiento de las reglas sintcticas del lenguaje. Por ejemplo palabras clave mal escritas, falta de delimitadores. Son los mas fciles de corregir. Errores de ejecucin. Se deben a operaciones no permitidas, como dividir por cero, leer un dato numrico en una variable numrica, etc...Se detectan porque se produce una parada anormal del programa. Errores de lgica. Corresponden a la obtencin por el programa de resultados que no son correctos. Son bastantes difciles de encontrar, slo se puede ser ejecutando un nmero suficiente de juegos de prueba y compararlos con los datos producidos por el programa con los que generaramos a mano, o bien con una aplicacin suficientemente probada. Errores de especificacin. Se deben a la realizacin de unas especificaciones incorrectas, debidas a la mala comunicacin entre el equipo de desarrollo y quien platea el problema.

La eleccin del algoritmo ms adecuado se debe basar en una serie de requerimientos de calidad que adquieren gran importancia a la hora de evaluar costes de diseo y mantenimiento, que son los siguientes:

Legibilidad. Claro y sencillo, que resulte fcil su lectura y su compresin. Fiabilidad. Robusto, es decir, capaz de recuperarse ante errores y usos inadecuados. Portabilidad. A dos niveles: 1) los algoritmos generados en la fase de programacin deben ser implementables en diferentes lenguajes; 2) los cdigos fuente obtenidos deben ser independientes de la mquina y del SO. Modificabilidad. El cdigo ha de ser fcil de mantener, o sea, ha de permitir que se realicen cambios para adaptarlos a nuevas situaciones. Eficiencia. El programa generado tendr que hacer un uso correcto y ajustado de los recursos que no son ilimitados.

La metodologa de la programacin es un conjunto de mtodos y tcnicas disciplinadas que ayudan al desarrollo de unos programas que cumplan los requisitos anteriormente expuestos. Estos objetivos suelen ser la programacin modular que consista en una serie de descomposiciones del problema hasta llegar a un conjunto de mdulos implementables. La programacin estructurada consiste en el uso exclusivo de las estructuras secuencia, seleccin e iteracin para el control de flujo de las instrucciones. La Documentacin de los Programas est constituida principalmente por una serie de anotaciones dentro del propio cdigo fuente y por una serie de documentos que acompaan a la aplicacin software. Su fin es facilitar la explotacin y el mantenimiento de la aplicacin, y debe ser amplia, clara y precisa. Existen dos tipos de documentos:

Interna. Est constituida bsicamente por el listado del programa fuente y su objetivo es facilitar la lectura y comprensin del mismo. Se considera parte de la documentacin interna los siguientes aspectos:

Comentarios. Son frases explicativas que se colocan en cualquier parte del programa fuente, ignoradas por el compilador. Es conveniente incluir comentarios con aquellos razonamientos que nos hayan sido difciles de alcanzar y que preveamos que van a ser difciles de comprender pasado un tiempo. Cdigo autodocumentado. Las palabras reservadas de los lenguajes de alto nivel se podran considerar como parte de la documentacin por corresponder con trminos en ingls que expresan su contenido.

Externa. Es el conjunto de documentos que se acompaa con el programa, pero sin formar parte de los ficheros fuente. La documentacin externa debe influir a los siguientes apartados: especificacin del anlisis, descripcin del diseo del programa, de las versiones si las hubiera, del programa principal y los subprogramas, de los manuales del usuario y el anual del mantenimiento.

Las tcnicas de desarrollo y diseo de programas usadas en la programacin convencional tienen inconvenientes sobre todo a la hora de verificar y modificar un programa. Una tcnica que se est implantando, para paliar los problemas exteriores al ciclo de vida de la aplicacin, es la descomposicin de un problema en problemas cada vez ms pequeos hasta llegar a mdulos implementables, Topdown, en el cual tenemos la programacin estructurada. Las tcnicas de programacin estructurada pretenden resolver los saltos condicionales y los incondicionales, las cuales se pueden definir como la programacin sin saltos condicionales e incondicionales. Las caractersticas de un programa estructurado son las siguientes: fcil de leer y comprender, fcil de codificar en una amplia variedad de lenguajes y sistemas, fcil de mantener, eficiente (aprovechando al mximo los recursos del sistema) y modularizable. Un diagrama propio es aquel que slo posee una entrada y una salida. Un programa propio es el que solo tiene un punto de entrada y otro de salida, y donde todo elemento del programa es accesible, es decir, existe al menos un camino de los que van del inicio al fin que pasa por l; es un programa que no tiene bucles infinitos. Dos programas son equivalentes si ante cualquier situacin de datos proporcionan el mismo resultado pero de distinta forma. Todo programa propio tiene siempre al menos un programa propio equivalente que slo utiliza las estructuras bsicas de programacin, que son la secuencia, seleccin e iteracin. O sea, que diseando programas con sentencias primitivas y estructuras bsicas podremos hacer cualquier trabajo y considerar en mejorar la creacin, lectura, comprensin y mantenimiento de los programas. La programacin estructurada utiliza:

Diseo Top Down. Los programas se disean de lo ms genrico a lo ms particular por medio de sucesivos refinamientos o descomposiciones que nos llevarn a las instrucciones particulares de cada programa. Recursos abstractos. Es el complemento perfecto para el diseo Top-Down y, en el cual, utilizamos el concepto de abstraccin, es decir, en cada descomposicin suponemos que las

partes resultantes estn resueltas, dejando su realizacin al siguiente refinamiento y considerando que al final estarn formadas por un conjunto de instrucciones y estructuras bsicas.

Estructuras bsicas. Toda accin se puede realizar usando las 3 estructuras bsicas de control, es decir, la secuencial, alternativa y la repetitiva.

Estructura secuencial. Es una estructura con una entrada y una salida, cuya ejecucin es lineal y las acciones se ejecutarn en el orden en el que aparecen. Cada accin slo tendr una entrada y una salida. Estructuras alternativas. Es una estructura con una sola entrada y una sola salida, de la cual se realiza una opcin segn una condicin. sta puede ser simple o compuesta. Las alternativas pueden ser de dos tipos: 1, dos salidas condicionales, una de las cuales puede ser nula; y 2, tres o ms salidas. Estructura repetitiva. Estructura con una entrada y una salida, en la cual se repite un nmero determinado o indeterminado de veces, dependiendo de una determinada condicin. FOR: se repite una accin un determinado nmero de veces representado normalmente por N. no si WHILE: Se repite una accin mientras que se cumpla la condicin que calcula el bucle. La condicin es evaluada siempre antes de cada repeticin. no si DO/WHILE: Se repite una accin mientras se cumpla la condicin que controla el bucle. La condicin se evaluar despus de cada repeticin del bucle. si Un rbol o estructura arborescente es un grafo en el que se distinguen generalmente tres clases de nodos: raz, nodos intermedios y hojas. La raz es el nodo del que parte toda la estructura del rbol, es decir, es un nodo que slo tiene salidas. Los nodos intermedios son los que tienen una entrada o enlace de entrada o al menos una salida o enlace de salida. Las hojas son nodos que se sitan en la parte ms lejana a la raz y que slo tienen entradas. Existen tres tipos de ordenar un rbol: Preorden. Consiste en los siguientes tres pasos: 1, consultar la raz; 2, consultar el subrbol; y 3, consultar el subrbol derecho. Inorden. 1, Recorrer el subrbol izquierdo hasta llegar a una hoja y tratar esa hoja. 2 Consultar la raz. 3, recorrer el subrbol derecho hasta llegar a una hoja y tratarla. Postorden. 1, recorrer el subrbol izquierdo hasta llegar a una hoja. 2, recorrer el subrbol derecho hasta llegar a una hoja. 3, consultar la raz. El mtodo de Jackson es un mtodo de representacin de programas en forma de rbol y que se denomina diagrama arborescente de Jackson. Consta de las siguientes partes: Definicin detallada de los datos de E/S, incluyendo los archivos lgicos utilizados.

Representacin del proceso o algoritmo. La simbologa utilizada en este mtodo se puede describir como el uso de rectngulos que tienen los siguientes aspectos: Accin Decisin Repeticin La lectura del diagrama generado se hace en preorden y la representacin de un algoritmo se basa en los siguientes tres puntos: Un programa se representa por un solo diagrama en el que se incluyen todas las operaciones necesarias para solucionar el problema. La forma para conectar dos pginas es mediante la palabra `proceso' encerrada en un rectngulo y con un nmero o nombre. Todo diagrama comienza con un rectngulo en cuyo interior figura el nombre del programa. Se ha de procurar, para facilitar la lectura, que el diagrama que generemos sea lo ms simtrico posible. FOR: en el rectngulo de condicin se escribir o bien en nmero de veces que se va a repetir el bucle o bien el nombre de la variable contador, su valor inicial, su valor final y el incremento. Ej.: queremos que la condicin se repita 5 veces. MIENTRAS/WHILE: en el rectngulo de Condicin se escribir la condicin que rige el bucle. HASTA: En el rectngulo de Condicin se pondr `hasta' y la condicin. Por ej.: El mtodo de Chapin se trata de una forma de representar programas como un bloque compacto que consta de dos cosas:

Definicin detallada de los datos de E/S, incluyendo los archivos lgicos utilizados. Representacin del proceso o algoritmo.

Su simbologa se basa en el empleo de rectngulos y la lectura del grfico generado se hace de arriba a abajo. 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. Todo diagrama comienza en un rectngulo en el que su parte superior y fuera de l figura el nombre del programa.

Estructura secuencial. Son como un conjunto de acciones secuenciales, donde ABCD se ejecutarn de arriba a abajo. Estructura alternativa. Puede ser: simple o de una opcin, doble o mltiple. Estructura iterativa.

FUNDAMENTO DE PROGRAMACIN (3) El diseo descendente o toc-down consiste en una serie de descomposiciones sucesivas del problema inicial que reciben un refinamiento progresivo del repertorio de instrucciones que van a formar parte del programa. Sus objetivos son: Simplificacin del problema y de los subprogramas resultantes de cada descomposicin. Programacin independiente de cada uno de los mdulos, incluso por diferentes personas. Simplificacin de la lectura y el mantenimiento del programa final. Un programa diseado en Toc-Down tiene dos partes bien diferenciadas:

Programa principal. Describe la solucin completa del programa y consta principalmente de llamadas a subprogramas. Estas llamadas son indicaciones al procesador de que debe continuar la ejecucin del programa en el comienzo del subprograma llamado, regresando al punto de partida una vez que lo haya concluido. Adems, puede contener operaciones e instrucciones primitivas del lenguaje, y sentencias de control ejecutables por el procesador. Debe ser breve. Subprogramas. Figuran agrupados en un lugar distinto al programa. Su estructura es parecida a la del programa principal, salvo en el encabezamiento y la finalizacin. ste puede tomar sus propios subprogramas correspondientes. La funcin de un subprograma es la de resolver una parte del problema. stos se dividen en: Subprogramas internos. Son aquellos subprogramas que estn localizados en el mismo archivo que el programa principal. Subprogramas externos. Son aquellos que figuran fsicamente separados del programa principal, es decir, en distintos ficheros fuente. Se pueden compilar independientemente y tambin los podemos encontrar en un lenguaje diferente del programa principal. Los objetos manipulados por un programa se clasifican segn su porcin de programa y/o subprogramas en que son definidos y conocidos. Los objetos globales son los declarados en el programa principal, cuyo mbito se extiende al mismo y a todos sus subprogramas. Se pueden ver desde cualquier parte del programa. Los objetos locales de un subprograma son los declarados en dicho subprograma, cuyo mbito est restringido a l mismo y a los subprogramas declarados en l. Slo se puede ver dentro de l. Cada vez que se llama a un subprograma, los datos de entrada le son pasados por medio de determinadas variables, y anlogamente, cuando termina la ejecucin los resultados regresan mediante otras o las mismas unidades. Los parmetros pueden ser: Parmetros formales. Son variables locales de un subprograma utilizadas para la recepcin y el envo de los datos. Siempre son fijos. Parmetros actuales. Son las variables y datos enviados en cada llamada de subprograma por el programa o subprograma llamante. Son los valores y cambian. Se denomina paso de parmetros al proceso de transmisin y recepcin de datos y resultados mediante variables de enlace. Puede realizarse de dos modos: Paso por valor o copia. Cuando pasamos una variable a un subprograma, realmente le pasamos una copia de su valor, conservndose el valor de la variable aunque se modifique dentro del subprograma a la salida de ste. Paso por referencia o variable. Cuando le enviamos una variable, le pasamos la direccin de sta. En este caso, el cambio que se produzca en el programa aparecer reflejado al acabar la ejecucin de ste. Un parmetro actual pasado por valor es un dato de entrada al subprograma, y se copia en su parmetro formal correspondiente. No se proporciona la variable al subprograma, sino slo su contenido. Un parmetro actual pasado por referencia es una variable del programa llamante, para el programa llamado, el cual coloca un resultado en esa variable, que queda a disposicin del llamante una vez ha concluido la ejecucin del programa. Proporciona su direccin de memoria al parmetro formal asociado, pudiendo modificarla, y dejando en ellas los valores que va a devolver. Estos parmetros suponen un ahorro de memoria, puesto que la variable local no existe realmente, sino que se asocia a la global en cada llamada. Una funcin es un subprograma que recibir una serie de parmetros en la posicin y de los tipos indicados en su lista de parmetros y que va a devolver un nico valor de un tipo determinado que ser el tipo de la funcin. Los procedimientos son un tipo de subprogramas que recibirn una serie de parmetros o argumentos en la cantidad, tipo y posicin que indique su lista de parmetros realizar un determinado proceso y no

devolver ningn resultado de modo explcito. Es para cuando queremos modificar o devolver ms de un valor o variable u operar con una estructura de datos compleja. Las funciones en C son el bloque principal en la construccin de programas. La forma general es: Especificador_de_tipo nombre_de_funcin (lista_de_parmetros) { <secuencia de acciones> } El especificador_de_tipo es el tipo de dato que devolver la funcin mediante la sentencia `return'. Si no lo especificamos, el compilador asume un tipo de vuelta concreto. La lista_de_parmetros es la lista de nombre de variables separadas por comas y con sus tipos asociados que reciben los valores de loa parmetros o argumentos cuando se llama a una funcin. Puede no tener ningn parmetro, y entonces pondremos `void'. Return tiene dos usos importantes: Forzar una salida inmediata de la funcin en la que nos encontramos. Devolver un valor, generalmente, calculado en la funcin. Hay dos formas de cmo una funcin puede terminar su ejecucin y que sta devuelva al sitio desde el que se la llam: Modo implcito. Se produce al llegar a la llave que cierra el cdigo de la funcin. Modo explcito. Porque tienen que devolver un valor o para simplificar el cdigo de la funcin y hacerlo ms eficiente permitiendo varios puntos de salida. Todas las funciones, excepto void, devuelven un valor. Si la funcin no es especificada como `void' y no se especifica un valor de vuelta, entonces el valor devuelto por la funcin queda tcnicamente indefinido. Hay varios tipos de funciones: Funciones computacionales. Diseadas para operar con sus argumentos y devolver un valor basado en esos clculos. Son aquellas funciones que manipulan la informacin y nos devuelven un valor que indica nicamente el xito o fracaso de tal manipulacin. Como eje: la funcin de librera fwrite() que sirve para escribir en un fichero. Son funciones que no tienen un valor de vuelta explcito y son estrictamente de tipo procedimiento sin generar un valor. Por ejemplo, la funcin srand() que inicializa la semilla del generador de nmeros aleatorios. Algunas funciones devuelven algo de todas formas, aunque no sea de inters, como por ejemplo printf que devuelve el n de caracteres escritos. Cuando se utiliza una sentencia RETURN en main, el programa devuelve un cdigo de terminacin al proceso que lo llam, y debe ser un entero. En sistemas operativos como MS-DOS o OS/2, un valor de vuelta 0 indica que el programa ha terminado normalmente. Todos los dems indica que se ha producido algn error. Las reglas de mbito de la funcin son reglas que controlan si un fragmento de cdigo conoce o tiene acceso a otro fragmento de cdigo o datos. Cada funcin es un bloque de cdigo y es privado a esa funcin sin poder accederse a l a menos que se llame a esa funcin. El cdigo que comprende el cuerpo de la funcin est oculto al resto del programa y no se puede acceder ni modificar.

Se denominan variables locales a las variables definidas de cada funcin. Existen a partir de que entra en la funcin y se destruye cuando sale de ella, es decir, que no conservan su valor entre dos llamadas consecutivas, a excepcin de cuando una variable local se declara con el modificador `static'. Cuando es as, el compilador la trata como s fuera global, salvo que slo sigue siendo visible en el mbito de la funcin en la que se declar. No se puede definir una funcin dentro de otra funcin. Para usar argumentos se deben declarar variables que acepten los valores de los argumentos. Tambin se denominan parmetros, los cuales se comportan como variables locales de la funcin, crendose al entrar en sta y destruyndose al salir de ella. Se utiliza la llamada por valor para pasar argumentos. Una funcin por valor se la pasa copia del valor de la variable. Es posible causar una llamada por referencia pasando un puntero al argumento. El paso de arrays o matrices como argumentos es una excepcin al convenio de paso por valor que se tiene en C. Cuando se usa un array como argumento de una funcin slo se pasa la direccin de la matriz, no una copia de los datos de la matriz entera. C soporta tres argumentos, pero slo dos son definidos por ANSII: argc y argv. Permiten pasar informacin al programa de C mediante la lnea de comandos. Un argumento de lnea de comandos es una informacin que sigue al nombre del programa en la lnea de comandos del sistema operativo. El parmetro argc contiene el n de argumentos de la lnea de rdenes, o sea, el n de parmetros que podemos poner. El parmetro argv es un puntero a un array de punteros de caracteres. Cada elemento del array apunta a un argumento de la lnea de rdenes. Todos los argumentos de esta lnea son tratados como cadenas de caracteres. Un prototipo de funcin es una copia prcticamente literal de la cabecera de la declaracin de sta que se sita generalmente al principio de los ficheros C y forzosamente antes de la 1 llamada a esa funcin. Tiene dos objetivos fundamentales: Identificar el tipo de vuelta de la funcin para que el compilador pueda realizar una generacin de cdigo correcta. Especificar el tipo y n de argumentos que utiliza la funcin. Su forma es: tipo nombre funcin (lista de argumentos) http://html.rincondelvago.com/fundamentos-de-la-programacion.html

2.3 Diagramas de flujo


1.1 DIAGRAMAS

1.3.1 DIAGRAMAS DE ENTRADA-PROCESO-SALIDA

SIMBOLOGIA
Figuras para la representacin del algoritmo en un diagrama de EntradaProceso-Salida

Entrada o Salida

Proceso

ESTRUCTURA
Ejemplos Realice un algoritmo que convierta dlares a pesos Datos de entrada de salida Dlares Pesos Proceso Multiplicar de dlares por 11.00 pesos la Datos cantidad

Capturar los dlares Multiplicar la cantidad de dlares por 11.00 pesos Mostrar los pesos

D D Dolares

M M Multiplicar

dolares por pesosPesos P P

1.3.2 DIAGRAMAS DE FLUJO Diagrama de Flujo: Representacin grafica utilizando figuras en forma de caja, que se usan segn corresponda a cada paso del algoritmo. Estas figuras se conectan mediante flechas, indicando la secuencia a seguir entre los pasos.

SIMBOLOGIA

Figuras para la representacin del algoritmo en un diagrama de Flujo

I Inicio

/ Fin

Conector

Flechas

Condicio n

I Impresora

ESTRUCTURA
Elabore un algoritmo que me solucione el problema de encontrar el rea de un rectngulo. Conociendo los datos de entrada, el proceso (clculos) y los datos de salida ya se puede elaborar el algoritmo ms fcilmente: Pseudocodigo 1.Inicio 2.Conocer la base del rectngulo 3.Conocer la altura del rectngulo 4.Multiplicar la base por la altura 5.El resultado de la multiplicacin es el rea del rectngulo i i inicio 6.Fin DIAGRAMA DE FLUJO DE ESTE ALGORITMO base
a a altura

A A Area=base*altura

f f fin

Realice un algoritmo que obtenga el rea y el permetro de una circunferencia. Frmula para el permetro: P=2 x r x pi Frmula para el rea: A=pi x r x r Datos de entrada salida radio rea y pi Proceso Sustituir las variable en las 2 fmulas, para rea y el permetro Datos de Mostrar el el permetro

Conociendo los datos de entrada, el proceso (clculos) y los datos I Inicio de salida ya se puede elaborar el algoritmo ms fcilmente: 1.Inicio Ingre sar 2.Conocer el valor delelradio valor 3.Conocer el valor de pi de 4.Multiplicar el radio por 2 por pi para obtener el permetro r radio 5.Multiplicar radio por radio por pi para obtener el rea 6.Mostrar el permetro y el rea del circulo Ingre 7.Fin sar el

d de pi

valor

Diagrama de Flujo Per


metro =2xrx pi p Area = pixrxr p Per metr o Area A F Fin

DESARROLLO DE SOLUCIONES

Tarea 3. Actividades en parejas representndolos en diagramas de flujos


Baar al perro Consideraciones: si tiene perro y en su casa hay jabn, toallas, agua, etc. Escribir y enviar una carta Consideraciones: tiene que enviar una tarjeta de felicitaciones a un viejo amigo. No tiene la tarjeta, ni los timbres. En su casa tiene sobres, papel y plumas. Puede depositar la carta en un buzn o en la oficina de correos. Preparar un emparedado Consideraciones: Tiene hambre. El emparedado ser de tipo tradicional (jamn y queso). En su casa no hay jamn ni queso, pero tiene el pan y los dems ingredientes necesarios. Por si desea calentarlo, si tiene gas y estufa. Adornar una rbol de navidad Consideraciones: ya es navidad, ya compro el rbol ( no importa si es natural o artificial). En su casa hay todos los adornos necesarios. Realice un algoritmo que convierta dlares a pesos Elabore un algoritmo que me solucione el problema de encontrar el rea de un rectngulo.

Realice un algoritmo que obtenga el rea y el permetro de una circunferencia. Frmula para el permetro: P=2 x r x pi Frmula para el rea: A=pi x r x r

http://www.angelfire.com/theforce/trabajo/trabajo.htm 1. Introduccin Un Diagrama de Flujo representa la esquematizacin grfica de un algoritmo , el cual muestra grficamente los pasos o procesos a seguir para alcanzar la solucin de un problema . Su correcta construccin es sumamente importante porque , a partir del mismo se escribe un programa en algn Lenguaje de Programacin. Si el Diagrama de Flujo est completo y correcto ,el paso del mismo a un Lenguaje de Programacin es relativamente simple y directo. Es importante resaltar que el Diagrama de Flujo muestra el sistema como una red de procesos funcionales conectados entre s por " Tuberas " y "Depsitos" de datos que permite describir el movimiento de los datos a travs del Sistema. Este describir : Lugares de Origen y Destino de los datos , Transformaciones a las que son sometidos los datos, Lugares en los que se almacenan los datos dentro del sistema , Los canales por donde circulan los datos. Adems de esto podemos decir que este es una representacin reticular de un Sistema ,el cual lo contempla en trminos de sus componentes indicando el enlace entre los mismos. En el presente Trabajo se representar a travs de un Diagrama de Flujo el Procedimiento que debe efectuarse para calcular el pago de los trabajadores de una Empresa . 2. Situacin Planteada A continuacin se representara a travs de un Diagrama de Flujo el procedimiento utilizado para el calculo de pago de los trabajadores por La Empresa FrutiPack , C.A. , la cual se encarga de elaborar, procesar y empacar jugos de excelentes calidad para la Regin Centro Occidental del Pas. Para estos clculos se debe tomar en cuenta lo siguiente :
Sueldo Bsico y las horas extras trabajadas . Para el pago de las horas extras se tienen en cuenta adems la categora del trabajador , la cual se muestra a continuacin : Cada trabajador puede tener como mximo 10 horas extras , si tienen ms slo se les pagarn 10. A los trabajadores con categora mayor a 4 no se les debe pagar horas extras.

Datos SUE : Es una variable Real que expresa el sueldo bsico del trabajador. CATE : Es una variable de tipo entero , que expresa la categora del trabajador . 1 < CATE < CATE 8. HE : Es una variable de tipo entero , que expresa las horas extras trabajadas por el trabajador. PHE : Es una variable de tipo real. Almacena el costo de la hora extra ,

teniendo en cuenta la categora del trabajador. NSUE : Es una variable de tipo real . Almacena lo que hay que pagarle al trabajador teniendo en cuenta su sueldo y las horas extras trabajadas. Diagrama de Flujo Inicio SUE , CATE , HE CATE PHE = 15.000 PHE = 25.000 PHE = 30.000 PHE = 40.000 PHE = 0 SI NO HE >10 NSUE=SUE+10*PHE NSUE =SUE+HE*PHE NSUE

3. Bibliografa - Manual de Normas y Procedimientos .Empresa FrutiPack , C.A. http://www.monografias.com/trabajos12/diflu/diflu.shtml

Diagramas de flujo
Un diagrama de flujo es una representacin grfica de un algoritmo o de una parte del mismo. Los diagramas de flujo ayudan en la comprensin de la operacin de las estructuras de control (Si, Mientras). La ventaja de utilizar un algoritmo es que se lo puede construir independiente mente de un lenguaje de programacin, pues al momento de llevarlo a cdigo se lo puede hacer en cualquier lenguaje. Dichos diagramas se construyen utilizando ciertos smbolos de uso especial como son rectngulos, diamantes, valos, y pequeos crculos, estos smbolos estn conectados entre s por flechas, conocidas como lneas de flujo. A continuacin se detallarn estos smbolos.

Terminal. Representa el inicio y fin de un programa. Proceso. Son acciones que el programa tiene que realizar

Decisin. Indica operaciones lgicas o de comparacin, as como expresiones Entrada / Salida. Nos permite ingresar datos, de un perifrico, as como mostrarlos

Salida. Es usado para mostrar datos o resultados Conector. Se coloca al principio y fin de un pedazo de programa, enlaza dos partes cualquiera de un programa Lnea de flujo o indicador de direccin. Representaremos el correspondiente diagrama de flujo del ejemplo 2.1

http://www.geocities.com/inf135/tutc/Tema02.htm#_Toc523213550

2.4 Pseudocodigos Pseudocdigo


Pseudocdigo Es un lenguaje artificial e informal que ayuda a los programadores a desarrollar algoritmos. El Pseudocdigo es similar al lenguaje cotidiano; es cmodo y amable con el usuario, aunque no es realmente in verdadero lenguaje de

computadora. No se ejecutan en las computadoras mas bien sirven para ayudar al programadora razonar un programa antes de intentar escribirlo en algn lenguaje. Un programa ejecutado en Pseudocdigo puede ser fcilmente convertido en un programa en C++, si es que esta bien elaborado. Por ejemplo supongamos que la nota para aprobar un examen es de 60. El enunciado en Pseudocdigo sera: Si calificacin >= 60 entonces Mostrar "Aprobado" FinSi El mismo enunciado se puede escribir en C++ como: if ( calif >= 60 ) cout << "Aprobado"; Ntese que la operacin de trasladar el Pseudocdigo a cdigo fuente, se lo realiza con el mnimo esfuerzo, no se necesita de un mayor anlisis. Llevando el Ejemlo2.1 a Pseudocdigo. Se puede refinar ms aun el algoritmo: Inicializar variables. Inicializar los aprobados (aprobados) en 0 Inicializar los reprobados (reprobados) en 0 Inicializar el nmero de estudiantes (estudiantes) en 0 Introducir las primeras 10 calificaciones y contar los aprobados y los reprobados. Mientras (while) el contador estuantes es menor o igual que 10 entonces Introducir el siguiente resultado de examen Si el estudiante aprob Sumar 1 a aprobados Si no Sumar 1 a reprobados FinSi Sumar 1 al contador estudiantes FinMientras Imprimir un resumen de los resultados de exmenes y decidir si se debe aumentar o no la colegiatura. Imprimir el nmero de aprobados Imprimir el nmero de reprobados Si estudiantes es ms 8 entonces Imprimir "Aumentar la colegiatura". FinSi Simplificando el problema queda escrito en Pseudocdigo de la siguiente forma:

El problema anterior escrito en C++

http://www.geocities.com/inf135/tutc/Tema02.htm#_Toc523213550

Pseudocdigo
Es un lenguaje de especificacin de algoritmos. El uso de tal lenguaje hace el paso de codificacin final (esto es, la traduccin a un lenguaje de programacin) relativamente fcil.

El pseudocdigo naci como un lenguaje similar al ingls y era un medio representar bsicamente las estructuras de control de programacin estructurada. Se considera un primer borrador, dado que el pseudocdigo tiene que traducirse posteriormente a un lenguaje de programacin. Cabe sealar que el pseudocdigo no puede ser ejecutado por una computadora.

La ventaja del pseudocdigo es que en su uso en la planificacin de un programa, el programador se puede concentrar en la lgica y en las estructuras de control y no preocuparse de las reglas de un lenguaje especfico. Es tambin fcil modificar el pseudocdigo si se descubren errores o anomalas en la lgica del programa, adems de todo esto es fcil su traduccin a lenguajes como pascal, COBOL, C, FORTRAN o BASIC.

El pseudocdigo utiliza para representar las acciones sucesivas palabras reservadas en ingls (similares a sus homnimos en los lenguajes de programacin), tales como star,begin, end, stop, if-then-else, while, repeatuntil.etc

Secuencia
Inicio accin1 accin2 : accin n Fin

Decisin
Simple si condicin entonces accin1 accin2 : accin n Doble si condicin then accin1 accin2

: en caso contrario accin1 acci2

Iteraccin
Fija para var. Entera inicial hasta final accin1 accin2 : accin n hacer

Condicional al inicio mientras condicin accin1 accin2 : accin n hacer

Condicional al final Repetir

accin1 accin2 : accin n Hasta que condicin

Seleccin
casos selector de valor1 : accin1 accin2

valor2 : accin1 accin2

valor n : accin1 accin2

Ejercicio : Se requiere preguntar dos valores, y a continuacin ofrecer un men con las operaciones bsicas (+, -, *, /). Despus de presentar el resultado se ofrecer la posibilidad de una nueva operacin.

Declaracin de variables : Real : X, Y, RESPUESTA

Entero : OPCION Carcter : OP

Inicio Repetir escribir(Primer valor : ) leer(X) escribir(Segundo valor : ) leer(Y) escribir(1) Suma ) escribir(2) Resta ) escribir(3) Multiplicacin ) escribir(4) Divisin ) escribir(Qu operacin deseas realizar ? : ) leer(OPCION) casos OPCION de 1 : RESULTADO 2 : RESULTADO 3 : RESULTADO 4 : si Y=0 entonces escribir( Error ) RESULTADO en caso contrario RESULTADO X/Y 0 X+Y X-Y X*Y

escribir (Resultado : ,RESULTADO) escribir(Deseas otro clculo : [S/N] ) leer(OP) Hasta que RES = N Fin

Ejercicio : Preguntar un nombre y repetirse en pantalla tantas veces como se desee. (preguntar cantidad de repeticiones), indicando el nmero de repeticin.

Declaracin de variables Cadena : nom entero : x, n

Inicio escribir(Nombre : ) leer(nom) escribir(Cuntas veces quieres repetirlo ? : ) leer(n) para x 1 hasta n hacer

escribir(x.- , nom) Fin


http://www.itlp.edu.mx/publica/tutoriales/algoritmos/tema_52.htm

Unidad 3. Fundamentos del Lenguaje


3.1 Desarrollo histrico del lenguaje estructurado
El lenguaje estructurado se base en: 1) la lgica estructurada, o en instrucciones que se organizan en procesos agrupados y cclicos; y en 2) planteamientos sencillos del idioma espaol tales como sumar, multiplicar, mover y otros similares. El ejemplo anterior de la Compaa de Seguros Fortress hace uso del lenguaje estructurado, esto lo podemos observar en la tabla 5.2.1. En ella se ordenan con una secuencia las reglas de decisiones y a todo lo largo se hace uso de la clusula (S ENTONCES- DE LO CONTRARIO).

TABLA 5.2.1: EJEMPLO DE LA COMPAIA DE SEGUROS FORTRESS Calcular la prima base IF la construccin de tabique THEN deducir 10 % del total ENDIF IF se elige la opcin de reemplazo THEN agregar 10% de la base al subtotal ENDIF IF el propietario elige un deducible de $100 THEN aumentar 15% del subtotal al total ENDIF IF la casa cuenta con alarma THEN deducir 5% del subtotal ajustado al subtotal ajustado ENDIF

Con el fin de escribir en lenguaje estructurado, es conveniente apegarse a las siguientes convenciones: 1. Exprese toda la lgica, en trminos de estructuras secuenciales, estructuras de decisin, estructuras case (decisin mltiple) o iteraciones (como ejemplo, vase la figura 5.2.1). 2. Utilice y aproveche trminos tales como: IF, THEN, ELSE, DO, DO WHILE, DO UNTIL, y PERFORM (S, ENTOCES, DE LO CONTRARIO, EJECUTE, EJECUTE MIENTRAS, EJECUTE HASTA QUE y REALICE).

3. Para mostrar con claridad la jerarqua (anidando), utilice sangras en los bloques de proposiciones. 4. Cuando la palabra o frase utilizadas hayan sido definida en un diccionario de datos, destaque tales palabras o frases para indicar que tienen una connotacin reservada y especializada. 5. Sea cuidadoso cuando utilice los operadores lgicos "y" (and) y "o" (or), evitando la confusin al distinguir entre "mayor que" e "igual que" de relaciones similares. Aclare los planteamientos lgicos en el momento y no espere hasta la etapa de codificacin del programa. http://www.itlp.edu.mx/publica/tutoriales/analisis/52.htm

3.2 Estructura general de un programa


Estructura general de un programa en C#
Los programas en C# pueden constar de uno o varios archivos. Cada archivo puede contener uno o varios espacios de nombres. Un espacio de nombres puede contener tipos como clases, estructuras, interfaces, enumeraciones y delegados, adems de otros espacios de nombres. A continuacin, se muestra el esqueleto de un programa en C# que contiene todos estos elementos. // A skeleton of a C# program using System; namespace MyNamespace1 { class MyClass1 { } struct MyStruct { } interface IMyInterface { } delegate int MyDelegate(); enum MyEnum { } namespace MyNamespace2 { } class MyClass2 { public static void Main(string[] args) {

} } }

http://msdn.microsoft.com/library/spa/default.asp? url=/library/SPA/cscon/html/vclrfgeneralstructureofcsharpprogram_pg.as p

Estructura general de un programa.

3.1.- Cabecera, declaraciones y cuerpo del programa.


El esquema general de un programa en PASCAL es el que sigue: PROGRAM nombre (INPUT,OUTPUT);
CONST

CABECERA

(*Declaracin de constantes*) TYPE (*Declaracin de tipos de usuario*) DECLARACIONES


VAR

(*Declaracin de variables: datos, resultados y resultados intermedios*) PROCEDURE nombre_proc1 .... (*Declaracin de procedimientos y funciones*) FUNCTION nombre_funct1 .... BEGIN (*Comienzo de instrucciones*) END. (*Fin del programa*)

CUERPO La cabecera del programa es obligatoria y es donde se indica el nombre del programa en cuestin. La cabecera siempre empieza con la palabra PROGRAM. La parte de declaraciones y definiciones es la zona del programa donde se definen y declaran todos los elementos (constantes, tipos, variables, funciones y procedimientos) con los que va a trabajar el programa. Se trata de una parte opcional (puede no existir) pero, si existe, debe de aparecer al principio del programa, justo tras la cabecera del mismo y en el orden apropiado. El cuerpo del programa es la zona donde se encuentran las instrucciones ejecutables. El cuerpo del programa siempre empieza con la palabra 'BEGIN' y acaba con 'END.'. De esta forma, un programa en PASCAL, ha de tener, como mnimo, un encabezamiento y un bloque o cuerpo con al menos una instruccin, por ejemplo: PROGRAM Ejemplo (Input,Output); BEGIN write('HOLA'); (* CUERPO *) END. El ; es el carcter separador de sentencias o declaraciones sucesivas. Las sentencias o instrucciones tienen formato libre, por lo que pueden aparecer en cualquier lugar de

una lnea. Lo que no se puede dividir entre lneas son los nmeros ni los nombres constantes, variables, procedimientos etc. Ntese que BEGIN nunca va seguido de ; y que todo programa debe terminar con un . despus del END final. Un ejemplo sencillo de programa: PROGRAM SUMA(Input,Output); { CABECERA } VAR A,B,C:INTEGER; { DECLARACIONES } BEGIN { CUERPO DEL PROGRAMA } read(A); read(B); C:=A+B; write(C) END.

Estructura de un programa
La estructura general de un programa en Pascal es la siguiente:
program identificador; {nombre o cabecera de programa se puede omitir} uses identificadores; label lista de etiquetas; const definiciones de constantes type declaraciones de tipos de datos definidos por el usuario var declaraciones de variables

procedure definiciones de procedimientos function definiciones de funciones

begin {cuerpo del programa o programa principal sentencias de los programas end.

EJEMPLO program hola; uses crt; type tipo_saludo = string; var saludo : tipo_saludo; begin clrscr; saludo := 'hola'; writeln(saludo); end. PROGRAMA: Es una coleccin de instrucciones que indican a la computadora que debe hacer. Un programa se denomina software, por lo tanto , programa, software e instruccin son sinnimos.

Concepto de programa
Un programa de computadora es un conjunto de instrucciones que producirn la ejecucin de una determinada tarea. En esencia, un programa es un medio para llegar a un fin. El fin ser normalmente definido como la informacin necesaria para solucionar un problema. En conclusin programa es el proceso para solucionar un problema. El desarrollo de un programa requiere las siguientes fases: 1. Definicin y anlisis del problema 2. Diseo de algoritmo Diagrama de flujo Diagrama N S Pseudo cdigo.

2. 3. 4. 5.

Codificacin del programa. Depuracin y verificacin del programa. Documentacin. Mantenimiento.

Partes constitutivas de un programa


Entrada Programa O algoritmo salida

El programador debe establecer el conjunto de especificaciones que debe contener el programa: Entrada salida y algoritmos de resolucin que incluirn las tcnicas para obtener las salidas a partir de las entradas. Se debe establecer de donde provienen las entradas al programa es decir los dispositivos de entrada teclado, disco. La entrada de datos =operacin de lectura de datos o accin de leer. Las salidas de datos se deben presentar en dispositivos de salida como impresora, monitor o disco. Operacin de salida de datos = escritura o accin de escribir

Instrucciones y tipos de instrucciones


El proces de algoritmo o de codificacin del programa consiste en definir las acciones o instrucciones que resolvern el problema. Las instrucciones se deben escribir y almacenar en memoria en el mismo orden en el que han de ejecutarse es decir en secuencia. Un programa puede ser lineal o no lineal, el lineal es el que las instrucciones se en secuencia sin bifurcacin, ni lineal si tienen bifurcacin,

Tipos de instrucciones
Las acciones bsicas que se pueden implementar de manera general en un algoritmo y que esencialmente soportan todos los lenguajes. (son independientes del lenguaje) a) instrucciones de inicio/fin b) instrucciones de asignacin c) instrucciones de lectura d) instrucciones de escritura

Tipos de instruccin Comienzo de proceso Fin de proceso Entrada Salida Asignacin

pseudo cdigo en ingles bejn end read write A

pseudo cdigo en espaol Inicio fin leer escribir A

Instrucciones de asignacin
La operacin de asignacin es el modo de darle valores a una variable se representa con el operador la operacin de asignacin se conoce como instruccin o sentencia de asignacin en lenguaje de programacin. La flecha se sustituye en algunos lenguajes con el signo = (BASIC, FORTRAN)

Ejemplos A 5 La accion de asignar es destructiva ya que el valor que tuviera la variable antes se perderia. A A A 21 15 5

El valor que quedara Serra 5 los otros han desaparecido. Las acciones de asignacin se clasifican segn sea el tipo de expresiones en aritmticas, lgicas y de caracteres .

Asignacin aritmtica
La expresin que se evala es de tipo aritmtico AMN 3+14+8 Se evala la expresin y se asigna a la variable AMN, es decir ser igual a 25 TER1 TER2 MEDIA 14.5+8 0.75*3.4 TER1/TER2 Se evalan las expresiones en la tercera accin Se dividen los resultados de cada expresin y y se asigna a la variable MEDIA,

Asignacin lgica
La expresin que se evala es de tipo lgico. Ejemplo M 8>5 Su valor lgico es verdadero.

Asignacin de caracteres
La expresin que se evala es de tipo carcter X 12 de Octubre de 1942

Instrucciones de lectura de datos


Esta instruccin lee datos de algn dispositivo de entrada a) leer NUMERO, HORAS, TASA cual ser el significado de las instrucciones siguientes? Leer del terminal los valores NUMERO, HORAS, TASA. Archivndolos en la memoria si los tres nmeros que se teclean en respuesta a ala instruccin son: 12325, 32, 1200, significara que se han asignado a las variables esos valores y equivaldra a la ejecucin de las instrucciones. NUMERO HORAS TASA 12325 32 1200

Instrucciones de escritura de resultados


Estas instrucciones se escriben en un dispositivo de salida. Se asignaron previamente valores a las variables A B C . de manera que: A 100 B 200 C 300 Se imprimirn o visualizaran en la pantalla los valores 100, 200, 300.

Instrucciones de bifurcacin
El desarrollo lineal de un programa se interrumpe cuando se ejecuta una bifurcacin pueden ser segn el punto del programa a donde se bifurca hacia delante o hacia atrs. La bifurcacin puede ser condicional o incondicional:

Incondicional: la bifurcacin se da sin necesidad del cumplimiento de ninguna condicin. Condicional: la bifurcacin depende del cumplimiento de una determinada condicin.

Elementos bsicos de un programa


Palabras reservadas (inicio, fin, si, entonces... etc.) Idenntificadores (nombres de variables esencialmente) Caracteres especiales (coma apostrofe, etc.) Constantes Variables Expresiones Instrucciones

Bucles
Un bucle o lazo (loop) es un segmento de un algoritmo o programa, cuyas instrucciones se repiten un numero determinado de veces mientras se cumple una determinada condicin , Se debe establecer un mecanismo para determinar las tareas repetitivas. Este mecanismo es una condicin que puede ser verdadera o falsa y se comprueba una vez a cada paso o interaccin del bucle (total de instrucciones que se repiten en el bucle). Un bucle consta de tres partes: - decisin - cuerpo del bucle - salida del bucle El bucle a continuacin es infinito ya que las instrucciones (10 (2) (3) se ejecutaran indefinidamente, pues no existe salida del bucle al no cumplirse una determinada condicin. Para ver ejemplo de bucle pulsa aqui

Bucles anidados
En un algoritmo puede haber varios bucles. Estos pueden ser anidados o independientes. Bucles anidados: cuando estn dispuestos de tal modo que unos son interiores a otros. Ejemplo aqu

Contadores

Un contador es una variable cuyo valor se incremento o decrementa, Una forma de controlar a un bucle es mediante un contador Los procesos repetitivos son la base del uso de las computadoras. En estos procesos se necesitan normalmente contar los sucesos o acciones internas del bucle, como pueden ser los elementos de un fichero de interacciones a realizar por el bucle. El contador se muestra en el ejemplo siguiente con la variable CONT. Este es un diagrama de flujo para un algoritmo que se desea repetir 50 veces. Ejemplo de contador

Acumulador
Un acumulado es una variable cuya misin es almacenar cantidades variables resultantes de sumas sucesivas. Realiza la misma funcin que un contador con deferencia de que el incremento o decremento de cada suma es variable en lugar de constante como en el caso del contador. Se representa con la instruccin S S+N, donde N es una variable y no una constante.

Decisin o seleccin
Cuando se quiere especificar dos o mas caminos alternativos en un algoritmos se deben utilizar estructuras de decisin o solucin. Una instruccin de decisin o seleccin evala una condicin y en funcin del resultado de esa condicin se bifurca en un determinado punto. Condicin? Accin S1 Accin S2

Interruptores
Un interruptor o conmutador (switsh) a veces se les denomina indicador, o bandera (flag) es una variable que puede tomar diversos valores a lo largo de la ejecucin del programa y que permite comunicar informacin de una parte a otra del mismo. Los interruptores pueden tomar dos valores diferentes 1 y 0 (De ah su nombre interruptor prendido apagado)

Escritura de algoritmos programas:


Un algoritmo consta de dos componentes: Una cabecera de programa Un bloque algoritmo. La cabecera de programa es una accin simple que comienza con la palabra algoritmo. Esta palabra estar seguida por el nombre asignado al programa completo. El bloque es el resto del programa y consta de dos componentes o secciones: las acciones de declaracin u las acciones ejecutables. Las declaraciones definen o declaran las variables y constantes que tengan nombres. Las acciones ejecutables: son las acciones que posteriormente deber realizar el computador cuando el algoritmo convertido en programa se ejecute. Algoritmo Cabecera del programa Seccin de declaracin Seccin de acciones

Cabecera del programa o algoritmo


Todos los algoritmos y programas deben comenzar con una cabecera, en la que se expresa el identificado o nombre correspondiente con la palabra reservada que seala el lenguaje. En los lenguajes de programacin la palabra reservada suele ser program.

Declaracin de variables
En esta seccin se declaran o describen todas las variables utilizadas en el algoritmo, listndose sus nombres y especificando sus tipos. Esta seccin comienza con la palabra reservada var (abreviatura de variable) y tiene el formato var Lista de variables-1: tipo-1

. . lista de variables- n : tipo- n Donde cada lista de variables es una variable simple o una lista de variables separadas por comas y cada tipo es uno de los tipos de datos bsicos (entero real char, o boolean)

Declaracin de constantes numricas


En esta seccin se declara todas las constantes que tengan nombre su formato es Const Pi=3.141592 Tamano=43 Horas=6.50

Declaracin de constantes variables carcter


Las constantes de carcter simple y cadenas de caracteres pueden ser declaradas en la seccin del programa const, al igual que las constantes numricas. Ejem: const Estrella= * Frase= 12de octuble Mensaje= hola mi nene

Comentarios Documentacin
La documentacin de un programa es el conjunto de informacin interna y externa al programa que facilitara su mantenimiento. http://conceptodeprograma.tripod.com/paginaprincipal.htm

3.3 Palabras reservadas


Las palabras clave y las palabras reservadas son utilizadas por el lenguaje y no pueden ser usadas como nombres de identificadores

Palabras reservadas
En el siguiente cuadro se listan las palabras reservadas, aquellas que emplea el lenguaje Java, y que el programador no puede utilizar como identificadores. Algunas de estas palabras le resultarn familiares al programador del lenguaje C/C++. Las palabras reservadas sealadas con un arterisco (*) no se utilizan. abstract case const* else boolean cast* continue extends break catch default false byte char do final byvalue* class double finally

float if int null protected satatic throw void

for implements interface operator* public super transient volatile

future* import long outer* rest* switch true while

generic* inner* native package return synchronized try

goto* instanceof new private short this var*

Las palabras reservadas se pueden clasificar en las siguientes categoras:


Tipos de datos: boolean, float, double, int, char Sentencias condicionales: if, else, switch Sentencias iterativas: for, do, while, continue Tratamiento de las excepciones: try, catch, finally, throw Estructura de datos: class, interface, implements, extends Modificadores y control de acceso: public, private, protected, transient Otras: super, null, this.

http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/introduccion/primero.htm

3.4 Representacin de datos bsicos


Representacin de Datos Cmo ve la informacin el CPU, en los distintos tipos de datos: 1. 2. 3. 4. 5. 6. 7. Nmeros enteros sin signo Nmeros enteros con signo Caracteres Punto flotante Estructuras Arreglos Cadenas

Nmeros enteros sin signo


Tipos "unsigned" de C Representan solamente la magnitud, en forma binaria. Permiten almacenar nmeros desde 0 hasta (2^n) - 1 n se refiere al nmero de bits usados para representar

Nmeros de 1 byte sin signo: 0 a 255: unsigned char Nmeros de 2 bytes sin signo: 0 a 65535: unsigned short

Nmeros de 4 bytes sin signo: 0 a algo ms de 4 mil millones: unsigned long

Nmeros enteros con signo


Los ms usuales, "integer", "long". Un bit (el ms significativo) es usado para representar el signo. Cuando es 0, el nmero es positivo Cuando es 1, el nmero es negativo Permiten almacenar nmeros desde -2^(n-1), hasta +(2^(n-1)) - 1 Bytes: -128 a +127, words: -32768 a 32767 Para propsitos de aprovechar el mismo circuito sumador/restador para nmeros con signo o sin signo, los nmeros negativos se almacenan usando el complemento a dos

Complemento a uno

Primer paso para el manejo de nmeros negativos Consiste en complementar todos los bits de un nmero binario Los dgitos 0 se convierten en dgitos 1, y los dgitos 1 se convierten en dgitos 0

Operaciones para obtenerlo


NOT - lgico XOR del nmero contra una constante equivalente a tantos 1s binarios como bits tenga el nmero.

Complemento a dos

Para manejo de nmeros negativos Se obtiene sumndole uno al complemento a uno Tiene la propiedad de que si sumamos un nmero binario con su complemento a dos, nos da 0. Por tanto, se puede interpretar como el inverso aditivo o simtrico

Representacin de caracteres
Es una abstraccin de datos:

El CPU solamente sabe procesar nmeros Otros datos deben representarse en trminos numricos

Cdigo de caracter: define una tabla de correspondencias entre caracteres y nmeros asignados

EBCDIC: Antiguo, usado en Mainframes. ASCII: es de 7 bits (0 a 127), en PC's se extiende a 256

Unicode

Punto flotante
Es una representacin de los nmeros reales, basada en la notacin cientfica. En decimal en la notacin cientfica podemos escribir: 1.9 x 109 o en forma corta 1.9E9 En este caso, el signo es positivo; la mantisa es el nmero que multiplica, es decir, el 1.9; y el exponente (al que se eleva la base) es 9. En binario, simplemente se asignan los bits correspondientes para cada uno de estos elementos, pero se usa la base 2 en vez de la base 10. Utiliza para su representacin 32 bits (palabra doble), 64 (palabra cudruple). El formato corto utiliza los 32 bits de la siguiente manera:

1 bit para signo, 8 bits para el exponente, 24 bits para la mantisa.

El rango de los nmeros a representar, en los positivos, es desde 2^-128 (1.175 x 10^38) a 2^128 (3.40 x 10^38). Y equivalentemente, en los negativos. En C, el formato de 32 bits es conocido como tipo float; el de 64 bits, como double.

Estructuras
Una coleccin de datos cuya organizacin se caracteriza por las funciones de acceso que se usan para almacenar y acceder a elementos individuales de datos. Hay tres formas distintas de examinar una estructura de datos:

Nivel Abstracto o Lgico. En este nivel, se encuentra la organizacin y especificacin de los procedimientos y funciones generales de acceso. Nivel de Implementacin. En este nivel, se examina las formas de representacin de los datos en memoria y cmo implementar los procedimientos. Nivel de Aplicacin. Este nivel presenta con precisin las relaciones entre los datos y como son representados por las estructuras.

As, para calcular el espacio que ocupa una estructura y ver su forma de almacenamiento, nos basta con concatenar en memoria las de sus elementos. Por ejemplo, la estructura: struct ejemplo {

int Datos1; char Datos2; }; Requiere 3 bytes para su almacenamiento, encontrndose el entero a partir de la localidad 0 relativa al inicio de la estructura, y el caracter a partir de la localidad 2.

Arreglos
El arreglo es un tipo de datos estructurado formado por una coleccin finita de elementos ordenados, todos del mismo tipo. El acceso se realiza mediante un ndice que permite especificar cul es el elemento deseado dando su posicin en la coleccin. Un byte es la unidad de memoria que se asigna para almacenar un valor. En el caso de un arreglo las sentencias de declaracin le dicen al compilador cuntos bytes se necesitan para representar el arreglo. Entonces el nombre del arreglo se asocia con las caracteristicas del mismo, estas son:

El lmite superior del rango. El lmite inferior del rango La posicin en memoria del primer byte del arreglo, llamada la direccin base. El nmero de posiciones de memoria necesarias para cada elemento del arreglo.

La funcin de acceso utiliza esta informacin para determinar la posicin del elemento deseado, usando una simple multiplicacin y una suma: Posicion Elemento[i] = Direccin Base + (i - Limite Inferior) * Tamao Elemento

Cadenas
Una cadena es una secuencia de caracteres. Se utiliza para guardar textos. Dado que la longitud es dinmica, se usan algunos bits extras con informacin sobre la longitud mxima, la longitud real de la cadena o un indicador de fin de cadena. Por ejemplo, Pascal almacena en el primer byte, el nmero de caracteres que contiene la cadena. Por ello, la longitud mxima que permite es de 256 caracteres. C permite cadenas de longitud indefinida, pues codifica la informacin desde el primer byte, hasta encontrar un caracter nulo (cdigo ASCII 0), que funciona como terminador de cadena.

Bibliografa

Captulo 2 del libro de texto. Manuales de C y Pascal. Estndares, por ejemplo el de la IEEE para representacin de nmeros reales.

http://www.sinergia-web.com.mx/clases/asm9708/Temas/clase04.htm

3.5 Declaracin de variables, Constantes, Procedimientos y Funciones

Constantes y variables
Una Constante es aqulla que no cambia de valor durante la ejecucin de un programa (o comprobacin de un algoritmo en este caso). Se representa en la forma descrita para cada categora. Las Variables son aqullas que pueden modificar su valor durante la ejecucin de un programa (idem). Su representacin se da a traves de letras y smbolos generalmente numricos a los que se les asigna un valor. Ejemplos:

Constantes
36

Variables
A Nom Edad Ciudad Estatura

Numricos

450.35 0.58 'A'

Cadena

'Juan' 'La Paz' Falso Verdadero

Lgicos

Variables

Los datos que se utilizan dentro del programa se guardan dentro de lo que se denominan variables. Las variables se caracterizan por tener:

un nombre un tipo un valor

Nombre, tipo y valor

El nombre generalmente puede ser cualquier combinacin de caracteres, dgitos y el signo de subrayado. La limitacin que presentan muchos lenguajes con respecto al nombre es que debe comenzar por un caracter. Hay algunos lenguajes que hacen distincin entre maysculas y minsculas, mientras que otros no. El tipo de dato describe el conjunto posible de valores que puede tener una variable y tambin las operaciones que se puede hacer con ella. Cada lenguaje tiene un conjunto de tipos de datos bsico construdos dentro del lenguaje. Los tipos elementales son:
o o o o

caracter o char entero o int real o float lgico o boolean

El valor viene dado por el tipo de variable: o Una variable de tipo caracter puede tener como valor cualquier caracter que se pueda introducir por teclado. Para representar un valor de tipo caracter se usan las comas simples por ej. 'a'. Este hecho permite evitar ambigedades en el caso de haber definido una variable con el nombre de una nica letra. o Una variable entera permite valores numricos tanto positivos como negativos, por ej. -17, 2780, 0. Suele haber un valor mnimo y mximo permitidos. o Una variable real permite valores decimales, por ej. 3.1415, 1000.879. o Las variables boolenas o lgicas pueden tener dos valores, True (verdadero) o False (falso).

Segn el tipo de las variables se pueden utilizar unos u otros operadores.


o

Con todos los tipos de datos se pueden utilizar las operaciones de relaciones: menor < mayor > igual = distinto != menor o igual <=

mayor o igual >= Con los enteros y reales se pueden utilizar las operaciones aritmticas bsicas: suma + resta multiplicacin * divisin /

Con las variables booleanas se pueden hacer operaciones lgicas: AND (Y o multiplicacin lgica) OR (O o suma lgica) NOT (negacin) que se corresponden con la tabla de verdad habitual de lgica.

A True True False False

B True False True False

NOT A False False True True

A OR B True True True False

A AND B True False False False

Declaracin de variables
A la hora de escribir un programa, el programador debe declarar las variables que utilizar. Generalmente las declaraciones de hacen al comienzo del programa, y como mnimo se debe definir el nombre y el tipo de cada variable que se utilizar. Algunos lenguajes permiten especificar el valor inicial de cada variable. tipo_dato lista_nombre_variables; Ejemplo: int boolean char float sumando1, sumando2, total; es_cierto, llueve; letra_dni; descuento, precio_neto;

Constantes
Hay un caso especial de datos denominados constantes. Las constantes no cambian durante la ejecucin del programa. La declaracin de la constante incluir el valor que tendr a lo largo del programa.

const tipo_dato nombre_constante = valor_constante; Ejemplo: const float pi = 3.141592;

Precedencia de operadores
Una expresin es una combinacin de operaciones entre variables y literales. Ejemplos: - (a > 5) AND (b < 3) OR (c = 10) -a/b+c*a Cuando se evala una expresin con muchos operandos, el resultado puede ser muy diferente dependiendo del orden de ejecucin de las operaciones. Por esto existen las siguientes prioridades o precedencia de los operadores: Operadores de prioridad 1 (ms alta) NOT Operadores de prioridad 2 * , / , AND Operadores de prioridad 3 + , - , OR Operadores de prioridad 4 (ms baja) < , <=, > , >= , = , != La regla de ejecucin establece que los operadores de mayor prioridad se ejecutan antes que los de ms baja prioridad. Los operadores de igual prioridad se ejecutan en el orden en que estn escritos, es decir, de izquierda a derecha.

Si una expresin contiene una subexpresin entre parntesis, stos fuerzan la ejecucin de la subexpresin, es decir, se ejecuta primero. Si existe un anidamiento de parntesis, se ejecuta primero la subexpresin ms interna. Declaracin de funciones Sinopsis La declaracin ( 4.1.2) da a conocer la funcin al compilador, de forma que a partir del punto de declaracin, ya se pueden realizar invocaciones a la misma. A su vez, la definicin estar en algn otro punto del programa, tal vez en una librera externa (en forma ya compilada) o en otro mdulo de programa (como texto fuente). Una funcin puede ser declarada varias veces en un mismo programa, y las declaraciones pueden aparecer en cualquier orden; en un fichero fuente o en varios, pero en cualquier caso antes de su uso, es decir: antes de cualquier invocacin a la funcin [5]. Adems de declarar el nombre de la funcin y el tipo devuelto (por defecto se supone int ) se declaran tambin el tipo de los parmetros. La declaracin tiene la siguiente sintaxis:

[extern] <tipo-devuelto> nombre-funcion () 2a [extern] <tipo-devuelto> nombre-funcion (<tipo>, ...) 2b [extern] <tipo-devuelto> nombre-funcion (<tipo> <parametro>, ... ) 2c Ejemplos: extern int funcion1 (); argumento extern int funcion1 (void); anterior funcion2 (char, int); que devuelve int int funcion2 (char, int); anterior char funcion3 (char c, int i); parmetros Comentario El especificador <tipo-devuelto> es opcional; por defecto se supone int, as que las declaraciones que siguen son equivalentes [4]: int func (<tipo> <parmetro>, ...) func (<tipo> <parmetro>, ...) Nota: Los compiladores MS Visual C++ y Borland C++ admiten que ciertos especificadores opcionales acompaen a la declaracin de funciones y otros objetos. Tales especificadores son de utilidad en circunstancias especficas ( 4.4.1b). Declaraciones Recuerde que las declaraciones deben realizarse antes que cualquier uso de la funcin. A su vez las definiciones pueden estar en cualquier sitio, aunque en algunos casos pueden existir excepciones (sustitucin inline 4.4.6b). Las declaraciones de funciones tienen un nombre especfico: se denominan prototipos ; el primero de los anteriores (2a ) es vlido, aunque desaconsejado (herencia del C); es el denominado estilo clsico Kernighan & Ritchie; el segundo (2b ), y tercero (2c ), son los aceptados en C++ [1]. Nota: Es importante resaltar que en la declaracin de parmetros no est permitido incluir funciones, es decir: las funciones no pueden pasar como argumentos a otras funciones [6]. Sin embargo C++ dispone de recursos cuando esto es necesario: Pasar un puntero ( 4.2.4) o una referencia ( 4.2.3) a la funcin. [ // no acepta ningn // mejor que la // por defecto supone // mejor que la // incluye nombres de

El viejo estilo K&R tiene la desventaja de no permitir al compilador comprobar el nmero y tipo de los argumentos utilizados en las llamadas a la funcin. Este problema fue eliminado con la introduccin de los prototipos que utilizan la forma completa [2], en la que se especifica el nmero y tipo de cada argumento aceptado por la funcin. El compilador usa estos datos para comprobar la validez de las llamadas a la funcin y como se ilustra en el ejemplo, es capaz, en su caso, de realizar dentro de ciertos lmites, un modelado de tipo ("Casting") de los argumentos para garantizar que coinciden con el tipo esperado. Nota: El mecanismo anterior, permite al compilador efectuar una comprobacin de tipos de los argumentos que pasan y del valor devuelto. Los lenguajes en los que no se realizan estas comprobaciones, se denominan de dbilmente tipados ("Weakly typed"), tienen la desventaja de que no conocen exactamente el tipo de cdigo que ejecutarn. Supongamos que se tiene el siguiente cdigo: extern long lmax(long v1, long v2); funcion() { int limit = 32; char ch = 'A'; long mval; mval = lmax(limit, ch); funcion. } // prototipo

// Llamada a la

Puesto que se dispone de un prototipo para la funcin lmax, este programa convierte los parmetros limit y ch a long (utilizando las reglas estndar de asignacin), antes de colocarlos en la pila para la llamada a lmax. Si no hubiese existido el prototipo, limit y ch hubieran sido puestos en la pila como entero y carcter respectivamente, en cuyo caso, los valores pasados a limit no hubieran coincidido con el tamao y/o contenido esperados por esta, originando problemas ( 4.4.6 Llamadas a funciones y conversin de argumentos). La inclusin del especificador opcional extern, sirve para indicar al compilador que la definicin de la funcin se encuentra en otro fichero distinto del actual. En caso contrario dicha definicin debe encontrarse en algn lugar del fichero (si es que existen llamadas a dicha funcin). Es decir, si aparece el siguiente trozo de cdigo: int alfa (int deg, int min, int sec); // declaracin de alfa ... int gr; gr = alfa( x, y, z); // uso de alfa

la definicin de alfa debe estar en algn sitio del fichero que contiene dichas instrucciones, en caso contrario el compilador devolver un error: Unresolved external 'alfa()' referenced from ....OBJ. Es importante recordar que las funciones tienen mbito global y que, sus declaraciones (prototipos) aunque suelen estar al principio (inmediatamente despus de las directivas de preprocesado), pueden aparecer en cualquier parte del fichero. Ponerlas al principio tiene la ventaja de que sus nombres sean conocidos en la totalidad del fichero, con lo que pueden ser invocadas desde cualquier punto -desde cualquier otra funcin, incluso main()- sin tener que declarar un prototipo dentro de cada funcin que las invoque. Prototipos de funciones Los prototipos juegan un rol importante en la programacin C++; sirven tambin para clarificar y documentar el cdigo, sobre todo si los nombres de las variables son significativos. Por ejemplo, la funcin strcpy tiene dos parmetros: una cadena fuente y una destino, la cuestin es: Cual es cual? char *strcpy(char* dest, const char* source); Si se incluye un identificador en el parmetro de un prototipo, solo es utilizado para los posibles mensajes de error relativos a tal parmetro sin ningn otro efecto. De hecho, los identificadores (nombres) de los parmetros suelen ser largos y descriptivos en los prototipos, mientras que en las definiciones suelen ser abreviados, sin que, en este aspecto, tengan que haber coincidencia entre ambos (ver reglas de mbito para los identificadores de parmetros en prototipos de funciones 4.1.3). Como puede deducirse de estas palabras, esto significa que en realidad los nombres de los argumentos no son imprescindibles en los prototipos; solo son necesarios los tipos de los parmetros. Es decir: El prototipo de la funcin anterior podra perfectamente ser sustituido por: char *strcpy(char*, const char*); Un declarador de funcin con la palabra void entre parntesis: func(void);, indica que la funcin no acepta ningn parmetro; es equivalente a la expresin como func();, que tambin declara una funcin sin parmetros. Prototipos y ficheros de cabecera: Es costumbre que los prototipos de las funciones incluidas en las libreras del lenguaje se agrupen en ficheros especficos, los denominados ficheros de cabecera, que son ficheros de texto (en realidad ficheros fuente 1.4) en los que se agrupan todas las declaraciones que se utilizan en la librera.

Nota: En realidad, los ficheros de cabecera no solo incluyen los prototipos y declaraciones de las funciones, tambin las declaraciones de las estructuras, macros ( 4.9.10b) y clases ( 4.11.2a) utilizadas. Por otra parte, tambin es frecuente que los programadores C++ construyan sus propias libreras que acompaan a las que vienen preconstruidas en el lenguaje. Para ello se agrupan en ciertos mdulos aquellas funciones o clases ms frecuentemente utilizadas. Estos mdulos son compilados y enlazados de una forma especial de forma que no se obtiene un ejecutable, sino una librera de las que existen varios tipos ( 1.4.4a). En cualquier caso, sean libreras preconstruidas en el lenguaje o de fabricacin propia, los prototipos de las funciones incluidas en tales libreras se agrupan en ficheros de cabecera. Las que vienen con el lenguaje se localizan en el directorio \Include. Las de fabricacin propia se deben mantener en otro directorio separado del anterior. Puesto que es imprescindible incluir en cada fichero fuente la declaracin de cada funcin antes de que pueda ser utilizada , el hecho de tener agrupadas las declaraciones en un fichero de cabecera es de gran utilidad, porque solo es preciso incluir una directiva include ( 4.9.10g) al principio de cada fuente para tener la seguridad de que todos los prototipos estarn presentes. De otro modo tendra que escribirlos manualmente en cada fuente en que usara funciones de la librera. En la documentacin que acompaa a toda librera se indica siempre, junto con un ejemplo de uso, el nombre del fichero de cabecera que contiene los prototipos de las funciones utilizadas en la librera. Sin embargo, en ocasiones, cuando no se tiene a mano un buen manual de uso, o existe la sospecha de una errata en el mismo, puede ser til echar un vistazo al fichero de cabecera en que se incluye el prototipo de la funcin, ya que contiene bastante informacin sobre su uso; tipo y nmero de parmetros, valor devuelto, etc. Nota: Se ha llegado a afirmar que los ficheros de cabecera contienen toda la informacin necesaria para usar las libreras de cualquier tipo. Aunque desde luego pueden ser de gran ayuda, la afirmacin es un poco exagerada. En lo que respecta a las funciones, los prototipos contienen en realidad toda la gramtica de su invocacin, pero poco o nada sobre la "funcionalidad".

Nmero variable de argumentos Normalmente los prototipos de funciones declaran un nmero fijo de parmetros (que puede ser ninguno). Para las funciones que pueden aceptar un nmero variable de parmetros (tales como printf), el prototipo puede terminar en puntos suspensivos (...). Esta elipsis indica que la funcin puede ser invocada con diferentes tipos de argumentos en diferentes ocasiones. Los puntos pueden colocarse al final de una sublista de parmetros de conocidos, por ejemplo: func(int *count, long total, ...);

Por supuesto, esta forma de prototipo reduce la comprobacin que puede efectuar el compilador; los parmetros fijos son comprobados en tiempo de compilacin, y los variables son pasados sin comprobacin [3]. Ejemplos A continuacin algunos ejemplos adicionales de prototipos y declaraciones de funciones. Obsrvese que para mayor concisin, en todas ellas se han omitido los nombres de los parmetros formales (que como hemos indicado, son opcionales en los prototipos): f(); /* En C, sin datos sobre los parametros, el estilo clsico K&R. Devuelve int */ f(); // En C++, f no recibe argumentos. Devuelve int. int f(void); // f devuelve int, no recibe argumentos. int p(int,long); /* p devuelve int, acepta dos parmetros: El primero un int, el segundo un long */ int __pascal q(void); /* q funcin Pascal, devuelve int, no recibe parmetro */ int printf(char *format,...); /* Devuelve int; un parmetro fijo, puntero a carcter, despus cualquier nmero de argumentos adicionales de tipo desconocido */ char* f(int) // funcin que devuelve puntero a carcter, acepta un int. int* f(int) // funcin que devuelve puntero a int, acepta int. struct str f(int) // funcin que devuelve estructura str acepta un int. int (*f (int))(int); /* funcin que acepta un entero y devuelve un puntero a funcin que acepta un int y devuelve un entero */ int (*(*f())[10])(); /* funcin que no recibe argumentos, devuelve un puntero a un array de 10 punteros a funcin que devuelven enteros */ int f(struct S* Sptr); /* funcin que recibe como argumento un puntero a una estructura y devuelve int */ int (B::* getptr())(); /* funcin que no recibe argumentos, devuelve un puntero a funcin miembro de la clase B que no recibe argumentos y devuelve un int */

Polimorfismo Aparte de estas tareas de comprobacin y modelado de tipos, en realidad el objetivo principal de incluir en la declaracin de funciones una descripcin detallada del valor devuelto y de los parmetros aceptados, es permitir lo que se llama sobrecarga (de funciones). Esto significa que dentro del mismo mbito puedan definirse varias funciones con nombres idnticos pero distintos parmetros y por supuesto distintas definiciones. Ms tarde, el compilador ser capaz de saber a cual de ellas nos estamos refiriendo, precisamente analizando los parmetros que pasamos a la funcin. Por ejemplo, en C++ est permitido el siguiente trozo de cdigo: int alfa (int deg, int min, int sec); de alfa void alfa (int deg); de alfa int alfa (char n); de alfa ... n = alfa('c'); alfa-3 // declaracion-1 // declaracion-2 // declaracion-3 // invocacin de

el compilador conoce que, en este caso, la invocacin se refiere a la tercera declaracin de la funcin alfa, precisamente por el argumento que estamos utilizando. Nota: Las funciones main, WinMain y LibMain no pueden ser sobrecargadas. Ejemplo:
extern "C" void WinMain(int, char*, char*); void WinMain(int, short, char*, char*); // Error!!

Como veremos inmediatamente ( 4.4.1a), para saber que definicin ajusta mejor con los argumentos actuales, el compilador sigue una serie de reglas denominadas de congruencia estndar de argumentos. http://www.zator.com/Cpp/E4_4_1.htm

Declaracin de Funciones
En el lenguaje que estamos describiendo es posible declarar una o varias funciones, que pueden poseer parmetros formales y variables locales. En la gramtica empleada para hacer esta descripcin suponemos que la declaracin de variables locales es a travs de la seccin que declara cualquier variable global, por lo que debemos establecer diferencias entre globales y locales y las implicaciones que tiene declarar una funcin. Consideremos el siguiente programa:
Entero a, b; Real c;

Caracter z; Funcin Entero x (Real a, Real b) Entero w, c; Inicio ... Fin Funcin Caracter y (Entero a) Caracter b; Inicio ... Fin Inicio ... Fin

Los puntos suspensivos indican rdenes que no son relevantes en este momento. Asociada a cada funcin debe considerarse una tabla diferente para registrar tanto a sus variables locales como a los parmetros que sta tenga (los parmetros en el contexto de la funcin actan como variables locales). Si la suposicin es que las mismas acciones que ya realizamos para las variables globales se aplicarn para una funcin, obtendremos un esquema para la tabla de smbolos como el siguiente:

donde x, y son funciones (registradas en el contexto de las variables globales como fun+tipo_que_devuelve_la_funcin) y que lleva a construir su propia tabla, que le dar dominio y alcance a cada variable:

si estoy en la tabla global, conozco las variables globales y las funciones declaradas pero no tengo acceso a las variables declaradas en la funcin. si estoy en la tabla de la funcin conozco a las variables locales, puedo conocer o tener acceso a

las variables globales y a las funciones declaradas previamente. El tener acceso a las variables locales antes que a las variables globales permite que exista duplicidad en nombres en variables locales y globales y condiciona su dominio y alcance. Es por eso que la tabla de una funcin tiene un enlace a la tabla global para buscar en esta una variable no localizada en la tabla de la funcin. Por cuestiones de simplicidad, consideraremos que las tablas se construyen de manera secuencial en una regin fija de memoria. La declaracin mencionada arriba, quedara representada de la siguiente manera:

donde esta tabla de smbolos empieza en la localidad 1. Ahora bien, esta estructura no distingue entre variables locales y los parmetros que una funcin puede tener. Para resolver esto, tomamos la ltima entrada a una funcin para registrar en ella el nmero de parmetros que la funcin posee; distingimos esta entrada al emplear un smbolo no articulable como nombre de variable (!). La tabla queda conformada como sigue:

Con esta estructura en mente se agregarn, a las reglas gramaticales, acciones que permitan construirla. http://webdia.cem.itesm.mx/ac/aesparza/aula/funcion0.html
1. FUNCIONES Una funcin a partir de uno o ms valores llamados argumentos o parmetros devuelve un resultado en el nombre de la funcin. Declaracin de funciones: una funcin constara de: a) Cabecera: tambin se le llama definicin de la funcin. En la definicin de la funcin deben figurar una serie de parmetros, llamados parmetros formales para que cuando se llame a la funcin se pueda establecer una correspondencia 1 a 1 y de izquierda a derecha entre los parmetros actuales y formales. b) En el cuerpo de la funcin estarn el bloque de declaraciones y el bloque de instrucciones. Debe incluir una instruccin mediante la cual la funcin tomara un valor para devolverlo al programa principal o llamador. Funcin < nombre de la funcin > (lista de parmetros formales): tipo de dato devuelto. Declaracin de las variables locales. Instrucciones (Inicio). Los tipos de datos validos como resultado de una funcin son: ordinales, reales, cadenas, punteros y lgicos. En una lista de parmetros formales es posible separar estos parmetros con ; y hay que indicar cada tipo. 2. PROCEDIMIENTOS Un procedimiento es un subprograma o subalgoritmo que realiza una tarea especifica y que puede ser definido mediante 0, 1 o n parmetros. Tanto la entrada de informacin al procedimiento como la devolucin de resultados desde el procedimiento al programa principal o llamador o conductor se realiza a travs de los parmetros. El nombre de un procedimiento no esta asociado a ninguno de los resultados que obtiene. La llamada a un procedimiento se realiza con la instruccin Llamar_a o directamente con el nombre del procedimiento, es decir:

<nombre del procedimiento> (lista de parmetros que se llaman actuales o reales). Declaracin de procedimientos: es similar a la de una funcin excepto que el nombre del procedimiento no se encuentra asociado a ningn resultado. Procedimiento <nombre del procedimiento>(lista de parmetros formales) (declaracin de variables locales) Inicio . . . Fin_procedimiento La lista de parmetros formales se debe separar por ; y debemos indicar el tipo de cada uno de ellos.

http://html.rincondelvago.com/programacion-en-c_9.html

3.6 Operaciones aritmticas, lgicas y relacionales.

Operadores y Operandos Operadores


Un operador es el smbolo que determina el tipo de operacin o relacin que habr de establecerse entre los operandos para alcanzar un resultado.

Los operadores se clasifican en tres grupos: Aritmticos. Relacionales. Lgicos.

1.- Operadores Aritmticos

Son aqullos que permiten la realizacin de clculos aritmticos. Utilizan operandos numricos y proporcionan resultados numricos.

Operador + * / Div Mod ^ Suma Resta

Operacin

Multiplicacin Divisin real Divisin entera Residuo Exponenciacin

Ejemplos: 7+3 = 10 10 Div 4 = 2 7-3 = 4 20 Mod 3 = 2 7*3 = 21 5 Mod 7 = 5 10/4= 2.5 4 ^ 2 = 16

En la expresin 7+3, los valores 7 y 3 se denominan operandos. El valor de la expresin 7+3 se conoce como resultado de la expresin.

Todos los operadores aritmticos no existen en todos los lenguajes de programacin, por ejemplo, en Fortran no existen Div y mod.

Operadores Div y Mod


El smbolo / se utiliza para la divisin real, y el operador Div representa la divisin entera. Expresin 10.5/3.0 1/4 2.0/4.0 30/30 6/8 Resultado 3.5 0.25 0.5 1.0 0.75 Expresin 10 Div 3 18 Div 2 30 Div 30 10 Mod 3 10 Mod 2 Resultado 3 9 1 1 0

Operadores Relacionales
Permiten realizar comparaciones de valores de tipo numrico o carcter. Estos operadores sirven para expresar las condiciones en los algoritmos. Proporcionan resultados lgicos.

Operador < > = <= >= <>

Significado Menor que Mayor que Igual que Menor o igual que Mayor o igual que Diferente de

El formato general para las comparaciones es:

expresin1 operador de relacin expresin2

El resultado de la operacin ser Verdadero o Falso. As por ejemplo, si A=4 y B=3, entonces: A>B Es Verdadero (A-2) < (B-4) Es Falso

Los operadores de relacin se pueden aplicar a cualquiera de los cuatro tipos de datos estndar: enteros, real, lgico y carcter. A < K = Verdadero A > a = Falso MARIA < JUAN = Falso (se considera la primera letra) JAIME > JORGE = Falso

Nota: La comparacin de cadenas se rige por el cdigo ASCII.

Prioridad De Operadores Aritmticos y Relacionales


Determina el orden en que habrn de realizarse las operaciones en una expresin determinada. Para obtener la prioridad se deben conocer las siguientes reglas:

Las operaciones que estn encerradas entre parntesis se evalan primero. Si existen diferentes parntesis anidados (interiores unos a otros), las expresiones ms internas se evalan primero.

Las operaciones aritmticas dentro de una expresin suelen seguir el

siguiente orden de prioridad.

Operador ^ *, /, Div +, -, Mod Relacionales

Prioridad Alta

Baja

En caso de coincidir varios operadores de igual prioridad en una expresin o subexpresin encerrada entre parntesis, el orden de prioridad en este caso es de izquierda a derecha.

Cuando se desea realizar una operacin con baja prioridad por adelantado, debe agruparse a los operandos involucrados. 4 + 12 /2 = 10 (sin agrupar) (4 + 12) /2 = 8 (con agrupador)

Ejemplo: Obtener los resultados de las expresiones: -4 * 7 + 2 ^ 3 / 4 - 5

Solucin: -4 *7 + 2 ^

Resulta: -4 * 7+ 8/4 -5

-28 + 8/4 -5 -28 + 2 - 5 -26 - 5 -31

Los parntesis tienen prioridad sobre el resto de las operaciones. A * (B+3) La constante 3 se suma primero al valor de B, despus este resultado se multiplica por el valor de A.

(A*B) +3 A y B

Se multiplican primero y a continuacin se suma 3.

A + (B/C) + D

Esta expresin equivale a A+ B/C + D

Operadores Lgicos
Son aqullos que permiten la combinacin de condiciones para formar una sola expresin lgica. Utilizan operandos lgicos y proporcionan resultados lgicos tambin.

Operador not and or xor

Relacin Negacin (No) Conjuncin (Y) Disyuncin (O) Disyuncin Exclusiva (O/SOLO)

Se obtiene Verdadero si: NOT AND OR XOR El operando es falso Ambos operandos son verdaderos Al menos un operando es verdadero Solo uno de los operandos son verdadero

X F V F V

Y F F V V

NOT(X) V F V F

NOT(Y) V V F F

X AND Y F F F V

X OR Y X XOR Y F V V V F V V F

Prioridad De Los Operadores Lgicos


Los operadores aritmticos seguan un orden especfico o de prioridad cuando existan ms de un operador en las expresiones. De modo similar los operadores lgicos y relacionales tienen un orden de prioridad. Ejemplos: Not 4 > 6 aplica a 4. Produce un error, ya que el operador not se

Not (4 > 14) (1.0<x) And (x<z +7.0)

Produce un valor verdadero. Si x vale 7 y z vale 4, se obtiene un valor falso.

Asignacin
La operacin de asignacin es el modo de darle valores a una variable. La operacin de asignacin se representa por el smbolo u operador . La operacin de asignacin se conoce como instruccin o sentencia de asignacin cuando se refiere a un lenguaje de programacin. A fin de manejar datos por medio de variables, estos pueden recibir valores determinados. El tipo de los valores que pueden recibir dependen de la declaracin previa de tales variables. En una asignacin se resuelve, primeramente la expresin (al lado derecho del smbolo de asignacin) y se asigna el resultado en la variable. El formato general de asignacin es: Nom_variable Expresin

Donde Expresin puede ser una variable o constante, operacin, funcin. Ejemplo: A 9

Significa que la variable A se le ha asignado el valor 9. La accin de asignar es destructiva, ya que el valor que tuviera la variable antes de la asignacin se pierde y se reemlaza por el nuevo valor. As en la secuencia de operaciones: A A A 30 189 9

Cuando se ejecutan, el ltimo valor que toma A ser 9, ya que los valores anteriores a este han desaparecido. Las acciones de asignacin se clasifican segn sea el tipo de expresiones : Aritmticas, Lgicas y de Caracteres.

Asignacin Aritmtica
Las expresiones en las operaciones de asignacin son aritmticas: Suma 5+10+2 Se evala la expresin 5+10+2 y se asigna a la variable Suma, es decir, 17 ser el valor que toma Suma.

Asignacin Lgica
La expresin que se evala en la operacin de asignacin es lgica. Supngase que M, N, y P son variables de tipo lgico. M N P 8<5 M o (7 <= 12) 7>6

Tras ejecutar las operaciones anteriores, las variables M,N,P toman los valores, falso, verdadero, verdadero respectivamente.

Asignacin de caracteres
La operacimn que se evala es de tipo caracter. x '3 de Mayo de 1999'

La accin de asignacin anterior asigna la cadena de caracteres '3 de Mayo de 1999' a la variable de tipo carcter x.

Expresiones
Las expresiones son combinaciones de constantes, variables, smbolos de operadores, parntesis y nombres de funciones especiales. Las mismas ideas son utilizadas en notacin matemtica tradicional ; por ejemplo : a + b ( b+2) Aqu los parntesis indican el orden de clculo.

Cada expresin toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecucin de las operaciones indicadas.

Una expresin consta de operadores y operandos. Segn sea el tipo de objetos que manipulan, las expresiones se clasifican en : Aritmticas Relacionales Lgicas Carcter

El resultado de la expresin numrica es de tipo numrico ; el resultado de una expresin relacional y de una expresin lgica es de tipo lgico ; el resultado de una expresin carcter es de tipo carcter.

1.- Expresiones Aritmticas


Las expresiones aritmticas son anlogas a las frmulas matemticas. Las variables y constantes son numricas (real o entera) y las operaciones son las aritmticas.

+ * / **, ^ div mod

suma resta multiplicacin divisin exponenciacin divisin entera mdulo (resto)

Los clculos que implican tipos de datos reales y enteros suelen dar normalmente resultados del mismo tipo si los operandos lo son tambin. Por ejemplo, el producto de operandos reales produce un real.

Ejemplo : 4x6 39 18 div 6 se representa por 4 * 6 se representa por 3 ^ 9 se representa por 18/6

2.- Expresiones Lgicas (booleanas)


Es una expresin que solo pueden tomar los valores de : verdadero y falso. Las expresiones lgicas se forman combinando constantes lgicas, variables lgicas y otras expresiones y otras expresiones lgicas utilizando los operadores lgicos not, and y or, y los operadores relacionales (de relacin o comparacin) =, >, <, <=, >=, <>.

3.7 Diseo, Edicin, Compilacin y Ejecucin de programas Proceso de creacin de un ajecutable


Escribir el cdigo

Suponiendo cumplimentados los pasos anteriores, el programador est en condiciones de construir una imagen mental clara de como ser esa conexin entre la informacin de entrada y la salida, es lo que se denomina "espacio" de la solucin ("'How' domain"); su forma concreta es justamente el fuente del programa que se pretende. La codificacin consiste justamente trasportar a papel (en el lenguaje de programacin elegido) la imagen mental de esa conexin. Para escribir el cdigo fuente de un programa C++ solo se puede utilizar un subconjunto de 96 caracteres del juego total de caracteres US-ASCII ( 2.2.1a). Son los siguientes [8]: Juego de caracteres imprimibles: a z A Z 0 _ \ b c d e f g h i j k l m n o p q r s t u v w x y B C D E F G H I J K L M N O P Q R S T U V W X Y 1 2 3 4 5 6 7 8 9 { } [ ] # ( ) < > % : ; . ? * + "

/ ^ & | ~ ! = ,

Caracteres no-imprimibles denominados separadores Espacio horizontal; Tabulacin horizontal (TAB); Tabulacin vertical (VT); Salto de forma (FF); Nueva lnea (NL). Nota: Para escribir el cdigo solo hace falta un editor de texto plano, aunque las modernas "suites" de programacin incluyen editores especficos que estn conectados con el depurador, el compilador el enlazador (ver ms adelante) e incluso el sistema de ayudas, de forma que, por ejemplo, pueden mostrarnos automticamente la sentencia en la que se ha producido un error de compilacin, o la pgina correspondiente del manual si pulsamos en una palabra reservada y pedimos ayuda (F1 generalmente). Tambin muestran en diversos colores las palabras clave, los comentarios, etc. Los ms avanzados disponen incluso de opciones que podramos calificar de "inteligentes", en el sentido que pueden prever cual ser nuestro prximo movimiento en funcin de la sentencia que estamos escribiendo (por ejemplo, ofrecernos una lista de las propiedades y mtodos de una clase si nos estamos refiriendo a ella). Si el programa es mediano o grande, es posible que todava tenga que realizar una labor previa: disear a grandes rasgos cuales sern los mdulos del programa; mdulos que se correspondern aproximadamente con la distribucin del cdigo en ficheros fuente independientes. Quizs tenga que decidir tambin si algunas partes aparecern como libreras [1]. Recuerde lo indicado al respecto al tratar de los Subespacios de Nombres ( 4.1.11). Esta fase es especialmente importante en el caso de programas muy grandes, cuyo desarrollo se reparte entre varios programadores que se encargan de uno o varios de estos mdulos. En estos casos, el anlisis, la especificacin, la subdivisin en partes (con sus especificaciones particulares), y la asignacin de estas como tareas a los programadores, lo habr realizado el jefe de programacin y desarrollo. Durante la fase de escritura no desdee dos puntos:

Incluir la mayor cantidad de comentarios y aclaraciones posibles. Cuando se est muy "metido" en el programa todo parece evidente, pero piense que tiene que retocarlo dentro de unos aos, quizs entonces le parezca "Chino" y agradecer haber dejado la mayor cantidad de documentacin y aclaraciones al respecto. Incluso si es seguro que no volver a verlo, piense en el sufrido programador que le seguir si tiene que habrselas con su cdigo. En este sentido C++ no es precisamente COBOL, aunque afortunadamente permite incluir en el fuente comentarios todo lo extensos que se desee ( 3.1). No caiga tampoco en el error de pensar que esa informacin ya est en la documentacin escrita que le han obligado a entregar junto con los fuentes;

posiblemente dentro de unos aos Usted mismo no encuentre esos documentos.

Incluir la mayor cantidad posible de rutinas y condiciones de comprobacin de errores. Piense que el operador es un "manazas" o que los datos pueden venir con alguna corrupcin, error de transmisin, etc. Verifique constantemente que las condiciones son las esperadas ( 1.4.5).

Una vez que se tiene el cdigo fuente (en uno o varios mdulos), el proceso de traducirlo a instrucciones comprensibles por el procesador (lenguaje mquina) puede hacerse siguiendo dos modelos: los intrpretes y los compiladores [3]. En el caso de lenguajes compilados como C++, el fichero de texto plano (ASCII 2.2.1a) que contiene el fuente del programador (con la terminacin .C .CPP), es sometido a un proceso de varias fases que terminan en la obtencin del ejecutable. De forma genrica, todo este proceso se denomina "compilacin", aunque es una generalizacin un tanto incorrecta, ya que la compilacin propiamente dicha es solo una de las etapas intermedias. Sera ms correcto decir "construccin" del ejecutable, aunque por la extensin y generalizacin de su uso seguiremos utilizando el trmino genrico "compilacin" para referirnos a l. Los procesos de construccin del ejecutable se esquematizan en la figura que comentamos a continuacin: 6 Preproceso En la primera fase de la compilacin; un programa especial, denominado make, es encargado de iniciar el proceso llamando a los diversos mdulos que se encargan de la construccin del ejecutable (en

1.4.0 se amplan detalles sobre esta parte del proceso). El primero de estos mdulos es el preprocesador. El preprocesador ( 1.4.1) estudia el texto buscando directivas de preprocesado ( 4.9.10), por ejemplo sentencias que pueden ser suprimidas, incluye los ficheros correspondientes a las directivas #include, sustituye los #define, elimina los comentarios y expande las macros encontradas en el fuente y en los propios ficheros incluidos. El resultado obtenido es lo que se denomina unidad de compilacin ( 1.4.2).

7 Anlisis sintctico Puesto que el fichero fuente est escrito en un "lenguaje" (C++ en este caso) que tiene sus propias reglas de sintaxis (como los lenguajes naturales), el compilador debe comprobar que estas reglas se han respetado. Este anlisis ("Parsing") es realizado por el analizador sintctico. En esta fase se realizan comprobaciones como que los parntesis estn cerrados, que no aparecen expresiones incompletas, etc. Para realizar esta labor, el "parser" debe identificar los tokens ( 3.2), de forma que el fuente es tokenizado, esto es, reducido a tokens y separadores. El fuente es escaneado, el analizador sintctico (parser) extrae los tokens de forma que selecciona el que coincida con la secuencia de caracteres ms larga posible dentro de la secuencia analizada [9]. Por ejemplo, la palabra clave external es reconocida como un solo token (identificador de clase de almacenamiento) en vez de seleccionar extern (una palabra reservada) y al (que sera un identificador). Los separadores (whitespaces) es el nombre genrico dado a los espacios (32), tabulaciones verticales VT (11), horizontales TAB (9) nueva linea NL (10) y retorno de carro CR (13). Los separadores sirven para indicar donde empiezan y terminan las palabras, pero despus de esto cualquier separador redundante es descartado. Por ejemplo, las dos secuencias:
int i; float f; - - - - - - - - - - - - - - - - int i; float f;

son lxicamente equivalentes y el resultado del anlisis son las seis palabras siguientes:
int i ; float f ;

El carcter ASCII espacio puede formar parte de cadenas literales (alfanumricas), en cuyo caso es protegido del proceso de anlisis, permaneciendo como parte de la cadena. Por ejemplo:

char name[] = "Playa Victoria";

es reducido a siete tokens, incluyendo una cadena literal "Playa Victoria"


char name [ ] = "Playa Victoria" ;

8 Anlisis semntico En lenguajes como el Ensamblador la comprobacin se limita al anlisis anteriormente sealado; con esto se garantiza que el fuente original es correcto (sintcticamente), es decir, es un escrito correcto desde el punto de vista del lenguaje, otra cosa es que tenga un sentido computacionalmente correcto o diga tonteras, incongruencias o sinsentidos [6]. Por supuesto la meta del compilador es conseguir descubrir con anticipacin (al runtime) el mximo de errores posibles, en los lenguajes de alto nivel, esto se consigue con una cierta comprobacin del "sentido" o "significado" del escrito, es el denominado anlisis semntico (anlisis del significado). La mejor baza de que dispone C++ para esta segunda comprobacin es la comprobacin esttica de tipos ( 2.2), es decir, que las variables y las operaciones entre ellas se usan correctamente; esto supone verificar que las llamadas a funciones, los valores devueltos por estas y los operandos de las expresiones corresponden con el tipo que se les supone en cada caso. Por ejemplo: int x; char func(); .... x = func(); En este caso, la primera lnea declara que la variable x es tipo int (entero); la segunda declara que la funcin fun devuelve un carcter (char); si una lneas ms adelante se pretende igualar la variable x con el valor devuelto por la funcin, el analizador semntico estara en condiciones de asegurar que existe una incongruencia en las pretensiones del programador, generando el correspondiente mensaje de advertencia o error .

9 Generador de cdigo Todos estos tokens identificados por el analizador sintctico, son organizados en una estructura como las hojas de un rbol. A continuacin, el generador de cdigo recorre este rbol traduciendo sus hojas directamente en cdigo de la mquina para la que se compila. Si se solicita, el compilador tambin puede en esta fase generar un fichero en lenguaje macro ensamblador para su posible inspeccin por el programador

(este cdigo es tambin dependiente de la mquina para la que se compila y fcilmente entendible por el humano; puede contener incluso comentarios para facilitar su lectura). Nota: El compilador Borland C++ dispone de opciones que permiten generar cdigo optimizado para procesadores Intel de modelos especficos ( 1.4.3a). A veces, despus del generador de cdigo puede ejecutarse un optimizador (peephole optmizer). Este generador de cdigo sera propiamente el compilador, es decir, el encargado de traducir algo entendible por el humano en cdigo mquina. En cualquier caso, el resultado es un fichero "objeto", generalmente con la terminacin .obj. Tambin puede ordenarse al compilador que incluya en el "objeto", determinada informacin adicional que ser utilizada ms tarde por el depurador , por ejemplo los nmeros de lnea de las sentencias. Cuando se hace as, se habla de una compilacin "provisional" o de "depuracin"; distinta de la que se realiza para la versin definitiva (de campo) del programa en la que no se incluyen este tipo de informacin que ya no es necesaria.

10 Enlazado El ltimo paso en construir un ejecutable es el enlazado. Recibe este nombre el proceso de aglutinar todos los recursos en un solo fichero ejecutable ( 1.4.4 ). Estos recursos son desde luego los ficheros-objeto obtenidos en la compilacin de los diversos mdulos (ficheros .c) que componen el programa. Adems, si se han utilizado funciones o clases de librera [1] (como es casi seguro), el enlazador ("Linker") es el programa encargado de incluir los mdulos adecuados en el fichero ejecutable final. As pues, la funcin primordial del enlazador es resolver todas las referencias que puedan existir en el programa, es decir: que cada invocacin a un valor o a una funcin corresponda una direccin donde se encuentra el recurso correspondiente, y que estn todos contenidos en un solo fichero que pueda ser cargado y ejecutado por el Sistema Operativo. Eventualmente algunos recursos pueden estar en otros ficheros distintos del ejecutable, libreras de enlazado dinmico (en Windows se denominan DLLs). En cuyo caso el enlazador tambin incluir las direcciones y convenciones de llamada adecuadas para que puedan ser trados a ejecucin desde el programa principal. Por ltimo, el enlazador se encarga de insertar en el ejecutable un trozo de cdigo especial: El mdulo inicial, que es el encargado de iniciar la ejecucin ( 1.5). http://www.zator.com/Cpp/E1_4.htm

Generalmente hay varias etapas para llegar desde el cdigo fuente hasta el programa ejecutable. 1. Generacin del algoritmo. Planteo del problema, desglose en subproblemas y solucin de estos en terminos abstractos (pseudocdigo o diagramas de flujo). 2. Generacin del cdigo fuente (pueden ser ms de uno para la generacin de un nico ejecutable). El programa fuente ( o cdigo fuente) es una secuencia de sentencias escritas en la sintaxis del lenguaje que se ingresan utilizando un editor de textos. 3. Compilacin a objeto. Este paso se lleva a cabo a travs del uso de un compilador. Este se encarga de traducir el programa fuente en cdigos que el computador pueda entender directamente (cdigo de mquina, tambien llamado cdigo objeto). En esta traduccin se transforman todas sentencias en sintaxis de C a cdigo de mquina, pero las llamadas a funciones externas o de biblioteca no quedan resueltas, por lo que todavia, el codig objeto no puede ser ejecutado. 4. Ligar las llamadas a funciones no resueltas. Este paso se realiza a travs de un ligador (linker), el que se encarga de: a partir de los cdigos objeto y de las bibliotecas de rutinas (conjunto de cdigos objetos de las funciones de biblioteca) generar un mdulo ejecutable directamente por el computador (programa ejecutable). Dependiendo del entorno de trabajo y de las herramientas de desarrollo que se esten utilizando para la generacin de programas, algunos de los pasos anteriores pueden quedar ocultos a la vista del desarrollador. http://ib.cnea.gov.ar/~icom/CursoC_2003/pasos.htm Los lenguajes de alto nivel necesitan de programas traductores para poder ser ejecutados. Hay dos tipos de traductores: los compiladores y los intrpretes. Los compiladores Los compiladores traducen los programas fuente a programas objeto o compilados. Estos programas objeto, en ensamblador, necesitan posteriormente de un traductor de ensamblador o linkador para ser traducidos a lenguaje mquina. El programa resultante de la compilacin de un programa fuente se llama programa objeto. Para poder compilar un programa se necesita esa aplicacin y el kit de desarrollo de aplicaciones. Los intrpretes Los intrpretes hacen que los programas fuente sean traducidos y ejecutados directamente por el ordenador, sin necesidad de ser compilados. La mayor parte de los interpretes se emplean para trabajar en entornos integrados de desarrollo. Un ejemplo puede ser Visual Basic. No se generan ejecutables, sino que son ejecutados desde la propia aplicacin. Para l existe un kit de desarrollo que permite traducir los programas interpretados a compilados, pudindose posteriormente ejecutar desde el sistema operativo sin necesidad del entrono de desarrollo. Access tambin funciona como un

entorno de desarrollo que genera bases de datos que puden ser interpretadas y ejecutadas. El uso de entornos de desarrollo permite la creacin y una rpida depuracin de programas de modo previo a su compilacin. Para ejecutar un programa en Visual Basic, desde el entrono de desarrollo se selecciona el objeto a ejecutar y en la barra de mens se selleciona ejecutar. Despus se pulsa sobre iniciar o iniciar con compilacin completa. Aparecer en pantalla el resultado de la ejecucin del fichero seleccionado. Tambin puede ejecutarse un programa pulsando sobre el botn ejecutar de la barra de herramientas. La evolucin de los lenguajes de programacin se ha realizado en cuatro generaciones. Las dos primeras se corresponden de forma aproximada con las dos primeras generaciones de ordenadores. En la primera aparece el lenguaje mquina y en la segunda los lenguajes ensambladores. En la tercera aparecen FORTRAN, COBOL, ALGOL, LISP, PASCAL, lenguaje C y los lenguajes estructurados. La cuarta generacin est formada por los Sistemas de Gestin de Bases de Datos (SGBD): DB2, Oracle, Sybase SQL Server y en microinfomtica Acces, FoxPro, Dbase y Visual Basic, aunque este ltimo no es un SGBD. Ensambladores Son lenguajes en los que a cada instruccin en cdigo fuente le corresponde una instruccin en cdigo mquina. Poseen relativamente pocas instrucciones y no utilizan direcciones fsicas de memoria, sino que permiten el uso de direcciones simblicas y de comentarios. Para ser ejecutado un programa escrito con lenguaje ensamblador necesita ser traducido, utilizndose para ello un "ensamblador" que genera cdigo mquina y elimina los comentarios. El ensamblador genera una tabla que mantiene referencias entre las direcciones simblicas de datos con las direcciones fsicas. En algunos lenguajes ensambladores, que poseen cdigo extendido, a determinadas instrucciones les corresponden varias instrucciones de cdigo mquina. Lenguaje mquina El lenguaje mquina depende de la arquitectura del ordenador, siendo interpretado directamente por el ordenador sin ninguna modificacin. Por las dos razones antes expuestas, su velocidad de ejecucin es muy alta. La codificacin de los programas en lenguaje mquina se hace en binario, octal o hexadecimal, por lo que no es fcilmente legible por el programador. Los programas en lenguaje mquina utilizan direcciones fsicas de memoria para almacenar datos. Son interpretables por ordenadores con el mismo tipo de arquitectura. Por ejemplo, un programa escrito para una estacin de trabajo de Digital no puede ser interpretado correctamente por una estacin de trabajo de IBM o por un ordenador personal, y viceversa. En cambio, un programa escrito en lenguaje mquina para un ordenador personal con procesador 286 puede ser inerpretado por un 486, ya que ambos procesadores comparten las mismas instrucciones. Este tipo de lenguaje ejecuta multitud de operaciones sencillas rpidamente. Por ejemplo, algunos programas no tienen instrucciones para la multiplicacin, por lo que

han de ejecutarlas como una sucesin de sumas, es decir, almacenando valores intermedios en memoria. http://www.galeon.com/kronen/lenguajes.htm

Unidad 4. Estructuras de Decisin y Control


4.1 Estructura secuencial
Concepto
Una estructura secuencial es aquella en la que las instrucciones estan una a continuacin de la otra siguiendo una secuencia nica, sin cambios de ruta. La estructura secuencial tiene una entrada y una salida. En la Figura 4.1 se muestra el diagrama de flujo y el pseudocdigo de una estructura secuencial.

Diagrama de Flujo

Pseudocdigo Inicio . accin accin accin . Fin . 1 2 3 .

Figura 2.1 Estructura Secuencial: Diagrama de Flujo y Pseudocdigo

Ejercicios
Ejercicio 1:- Disee un pseudocdigo que halle el rea y el permetro de un rectngulo. Considere que: area = base x altura y perimetro = 2 x (base+altura). Algoritmo INICIO // REAL //

Declaracin base, Entrada

de altura, de

variables area, datos

perimetro

LEER // Proceso area perimetro Salida IMPRIMIR

base, de = = de area, clculo

altura base*altura 2*(base+altura) resultados perimetro

// FIN

Ejemplo 2:- Disee un pseudocdigo para convertir una longitud dada en metros a sus equivalentes en centmetros, pies, pulgadas y yardas. Considere que: 1 metro = 100 centmetros, 1 pulgada = 2.54 centimetros, 1 pie = 12 pulgadas, 1 yarda = 3 pies. Algoritmo INICIO // // LEER // ccent cpulg cpies cyard // FIN

Declaracin REAL cmetr,ccent, Entrada Proceso =

de cpies, de cmetr de = = =

variables cpulg, cyard datos clculo cmetr*100

ccent/2.54 cpulg/12 cpies/3

Salida IMPRIMIR

de cpulg, cpies,

resultados cyard

Ejercicio 3:- Una institucin benfica europea ha recibido tres donaciones en soles, dolares y marcos. La donacin ser repartida en tres rubros: 60% para la implementacin de un centro de salud, 40% para un comedor de nios y el resto para gastos administrativos. Disee un algoritmo que determine el monto en euros que le corresponde a cada rubro. Considere que: 1 dlar = 3.52 soles, 1 dlar = 2.08 marcos, 1 dlar = 1.07 euros. Algoritmo INICIO

// Declaracin de variables REAL c soles, cdolares, c marcos, ceuros, rubro1, rubro2, rubro3 // LEER ceuros // = Entrada csoles, Proceso (csoles/3.52 rubro1 rubro2 rubro3 Salida rubro1, + de cdolares, de cdolares = = = de + datos cmarcos

clculo cmarcos/2.08)*1.07 ceuros*0.60 ceuros*0.40 ceuros*0.20 rubro3

FIN

// IMPRIMIR

resultados rubro2,

Ejercicio 4:- En una competencia atltica de velocidad el tiempo se mide en minutos, segundos y centsimas de segundo y, el espacio recorrido se mide en metros. Disee un algoritmo para determinar la velocidad promedio de un atleta en km/hr. Considere que: 1 hora = 60 minutos, 1 minuto = 60 segundos, 1 segundo = 100 centsimas de segundo, 1 kilmetro = 1000 metros. Algoritmo INICIO // REAL // LEER // Clculo thor = // // // FIN Ejercicio 5:- Disee un algoritmo que determine la cifra de las unidades de un nmero natural. Solucin 1 Anlisis Puede comprobarse que la cifra de las unidades de un nmero es igual al resto de la divisin del nmero entre 10. Observe para ello las siguientes divisiones: 3245 5 768 8 9 9 10 324 10 76 10 0 Clculo Declaracin ENTERO tmin, thor, Entrada tmin, del tiempo tmin/60 + del espkm de espacio la de de velkmhr, de tseg, tseg, variables espmt, datos tcen, tcen espkm espmt

total empleado tseg/3600 + recorrido = velocidad = en

en horas tcen/360000 kilmetros espmt/1000 en km/hr espkm/thor velkmhr

Clculo velkmhr

Salida IMPRIMIR

resultados

Podemos concluir entonces que: unidades = numero % 10 Siendo % el operador residuo. Este operador permite obtener el residuo de una divisin, as como / permite obtener el cociente. Algoritmo

INICIO // // // unidades // FIN Solucin 2 Anlisis El residuo de una divisin entera puede obtenerse tambin sin recurrir al operador %, de la siguiente forma: unidades = numero - (numero / 10) * 10 observe para esto que en la divisin (numero/10) los operandos son enteros por lo que el cociente ser un entero. As por ejemplo, si numero es igual a 3245, la divisin (numero/10) produce 324, aunque matemticamente sea 324.5; es decir, se descarta la parte decimal. Algoritmo INICIO ENTERO LEER // // unidades IMPRIMIR FIN Ejercicio 6:- Disee un algoritmo que determine la suma de las cifras de un nmero entero positivo de 4 cifras. Solucin 1 Anlisis Las cifras pueden ser obtenidas mediante divisiones sucesivas entre 10. Para el efecto, considere el caso de un nmero N igual a 3245: 3245 5 10 324 // Declaracin ENTERO Entrada LEER Proceso = Salida IMPRIMIR de de numero, de de numero variables datos numero clculo % resultados unidades 10 unidades

//

Declaracin numero, Entrada Proceso = Salida

de de de

variables unidades datos numero

numero de

clculo (numero/10)*10 resultados unidades

unidades cociente = N/10 324 4 10 32 =

N%10

decenas cociente = cociente/10 32 2 10 3

cociente%10

centenas millares = cociente/10 Algoritmo INICIO

cociente%10

// Declaracin de variables ENTERO N, suma, millares, centenas, decenas, unidades, resto // LEER // Proceso unidades = cociente = decenas = cociente = centenas = millares = suma = unidades + decenas // FIN IMPRIMIR Salida de de clculo Entrada de datos N N%10 N/10 cociente%10 cociente/10 cociente%10 cociente/10 + millares suma

centenas

resultados

Solucin 2 Anlisis 2 Considerando que el nmero tiene 4 cifras, las cifras tambin pueden ser obtenidas mediante divisiones sucesivas entre 1000, 100 y 10. Para el efecto, considere el caso de un nmero N igual a 3245: 3245 245 1000 3 = N/1000

millares resto = N%1000 245 45 100 2 =

centenas resto = resto%100

resto/100

45 3

10 4 = resto/10

decenas unidades = resto%10 Algoritmo INICIO

// Declaracin de variables ENTERO N, suma, millares, centenas, decenas, unidades, resto // // Entrada LEER Proceso millares resto centenas resto decenas unidades + de = = = = = + de clculo N/1000 N%1000 resto/100 resto%100 resto/10 unidades = resto%10 centenas + millares resultados suma datos N

suma

= //

decenas IMPRIMIR de

Salida

FIN Ejercicio 7:- Disee un algoritmo que lea la hora actual del da HH:MM:SS y determine cuantas horas, minutos y segundos restan para culminar el da. Algoritmo INICIO ENTERO // hor1, // LEER da Declaracin min1, seg1, hor2, Entrada hor1, de min2, de min1, seg2, variables segres, datos seg1 resto

// Clculo de la cantidad de segundos que restan para culminar el segres // = 86400 (hor1*3600 en horas, = = = = de + min1*60 minutos y + seg1)

Descomposicin de hor2 resto min2 seg2

segres

segundos segres/3600 segres%3600 resto/60 resto%60 seg2

// Salida IMPRIMIR FIN

hor2,

resultados min2,

Ejercicio 8:- Disee un algoritmo para sumar dos tiempos dados en horas, minutos y segundos.

Algoritmo INICIO ENTERO totseg, LEER // hor1, // hor1, min1, Declaracin seg1, hor2, min2, resto de seg2, hor3, variables min3, seg3,

Entrada min1, seg1,

de hor2,

datos min2, seg2

// Determina la cantidad total de segundos entre los dos tiempos totseg = (hor1+hor2)*3600 + (min1+min2)*60 + (seg1+seg2) // Descompone totseg hor3 resto min3 seg3 // Salida IMPRIMIR FIN Ejercicio 9:- El sueldo neto de un vendedor se calcula como la suma de un sueldo bsico de S/.250 ms el 12% del monto total vendido. Disee un algoritmo que determine el sueldo neto de un vendedor sabiendo que hizo tres ventas en el mes. Algoritmo INICIO REAL // venta1, // LEER // ventatot Declaracin venta2, venta3, Entrada venta1, Proceso venta1 = + = 250 de de ventatot, de venta2, de venta2 + variables comision, sueldoneto datos venta3 clculo + venta3 0.12*ventatot comision en horas, = = = = de minutos y segundos totseg/3600 totseg%3600 resto/60 resto%60 seg3

hor3,

resultados min3,

= comision sueldoneto //

FIN

Salida IMPRIMIR

resultados sueldoneto

Ejercicio 10:- Disee un algoritmo que determine el porcentaje de varones y de mujeres que hay en un saln de clases. Algoritmo INICIO

//

Declaracin REAL ENTERO varones, // LEER Entrada

de porcvar, de varones,

variables mujeres, datos mujeres porcmuj total

// total porcvar porcmuj // FIN

Proceso = varones = = de porcvar,

de

clculo + mujeres varones*100.0/total mujeres*100.0/total porcmuj

Salida IMPRIMIR

resultados

Ejercicio 11:- En pases de habla inglesa es comn dar la estatura de una persona como la suma de una cantidad entera de pies ms una cantidad entera de pulgadas. As, la estatura de una persona podra ser 3' 2" ( 3 pies 2 pulgadas ). Disee un algoritmo que determine la estatura de una persona en metros, conociendo su estatura en el formato ingls. Considere que: 1 pie = 12 plg, 1 plg = 2.54 cm, 1 m = 100 cm. Algoritmo INICIO // Declaracin REAL ENTERO LEER = Entrada Proceso (cpies*12 Salida IMPRIMIR de de cpies, de cpies, de + datos variables estmt cplgs cplgs

// // estmt // FIN

clculo cplgs)*2.54/100 resultados estmt

Ejercicio 12:- Disee un algoritmo que exprese la capacidad de un disco duro en megabytes, kilobytes y bytes, conociendo la capacidad del disco en gigabytes. Considere que: 1 kilobyte = 1024 bytes, 1 megabyte = 1024 kilobyte, 1 gigabyte = 1024 megabytes. Algoritmo INICIO // REAL // // Declaracin de cgigabyte, cmegabyte, Entrada LEER Proceso cmegabyte ckilobyte cbyte de de = = variables ckilobyte, datos cgigabyte clculo cgigabyte*1024 cmegabyte*1024 ckilobyte*1024 resultados ckilobyte, cbyte cbyte

FIN

// IMPRIMIR

Salida de cmegabyte,

Ejercicio 13:- Disee un algoritmo que intercambie las cifras de las unidades de dos nmeros naturales.

Algoritmo INICIO // ENTERO // LEER // Determina las unidades1 unidades2 Declaracin de numero1, numero2, Entrada variables unidades1, unidades2 datos numero2 las unidades n1%10 n2%10

de numero1, cifras de = = las + +

// Intercambia las numero1 = numero1 numero2 = numero2 // FIN Salida IMPRIMIR

cifras de unidades1 unidades2 de n1,

unidades unidades2 unidades1 n2

resultados

http://www.geocities.com/david_ees/Algoritmia/cap02.htm

Estructura Secuencial
Es aqulla en la que una accin (instruccin) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as suscesivamente hasta el fin del proceso. La estructura secuencial tiene una entrada y una salida. Su representacin grfica es la siguiente:

ESTRUCTURA SECUENCIAL

....

DIAGRAMA N-S DE UNA ESTRUCTURA SECUENCIAL

PSEUDOCODIGO DE UNA ESTRUCTURA SECUENCIAL Inicio : : acciones : : fin

Ejemplo: Calcular el salario neto de un trabajador en funcin del nmero de horas trabajadas, precio de la hora de trabajo y considerando unos descuentos fijos al sueldo bruto en concepto de impuestos (20 por 100).

Pseudocdigo Inicio

{clculo salario neto} leer nombre, horas, precio_hora salario_bruto impuestos salario_neto horas * precio 0.20 * salario_bruto salario_bruto_impuestos

escribir nombre, salario_bruto, salario_neto_bruto, salario_neto Fin

Diagrama de flujo

Diagrama N-S

4.2 Estructuras de Transferencia Incondicionales 4.3 Estructuras de Transferencia Condicionales Estructuras Condicionales
En este captulo se revisan los distintos mtodos con los que C controla el flujo lgico de un programa. Como se revis en el captulo anterior, los operadores relaciones binarios que se usan son:
==, !=, <, <=, >

y >=

adems los operadores lgicos binarios:


||, &&

y el operador lgico unario de negacin !, que slo toma un argumento. Los operadores anterior son usados con las siguientes estructuras que se muestran.

La sentencia if
Las tres formas como se puede emplear la sentencia if son:
if (condicion)

sentencia;

...o
if (condicion) sentencia1; else sentencia2;

...o
if (condicion1) sentencia1; else if (condicion2) sentencia2;

...
else sentencian;

El flujo lgico de esta estructura es de arriba hacia abajo. La primera sentencia se ejecutar y se saldr de la estructura if si la primera condicin es verdadera. Si la primera condicin fue falsa, y existe otra condicin, se evala, y si la condicin es verdadera, entonces se ejecuta la sentencia asociada. Si existen ms condiciones dentro de la estructura if, se van evaluando stas, siempre y cuando las condiciones que le precedan sean falsas. La sentencia que esta asociada a la palabra reservada else, se ejecuta si todas las condiciones de la estructura if fueron falsas. Por ejemplo:
main() { int x, y, w; ........ if (x>0) { z=w; ....... } else { z=y; ....... } }

El operador ?
El operador ternario condicional ? es ms eficiente que la sentencia if. El operador ? tiene el siguiente formato:

expresion1 ? expresion

2 : expresion3;

Que es equivalente a la siguiente expresin:


if (expresion1) then expresion2 else expresion3;

Por ejemplo, para asignar el mximo de a y b a la variable z, usando ?, tendramos:


z = (a>b) ? a : b;

que es lo mismo que:


if (a > b) z = a; else z = b;

El uso del operador ? para reemplazar las sentencias if ... else no se restringe slo a asignaciones, como en el ejemplo anterior. Se pueden ejecutar una o ms llamadas de funcin usando el operador ? ponindolas en las expresiones que forman los operandos, como en el ejemplo siguiente:
f1(int n) { printf("%d ",n); } f2() { } main() { int t; printf(": "); scanf("%d",&t); /* imprime mensaje apropiado */ t ? f1(t) + f2() : printf("Se di un cero\n"); }

printf("introducido\n");

La sentencia switch
Aunque con la estructura if ... else if se pueden realizar comprobaciones mltiples, en ocasiones no es muy elegante, ya que el cdigo puede ser difcil de seguir y puede confundir incluso al autor transcurrido un tiempo. Por lo anterior, C tiene incorporada una sentencia de bifurcacin mltiple llamada switch. Con esta sentencia, la computadora comprueba una variable sucesivamente frente a una lista de constantes enteras o de caracter. Despus de encontrar una coincidencia, la computadora ejecuta la sentencia o bloque de sentencias que se asocian con la constante. La forma general de la sentencia switch es:

switch (variable) { case constante1: secuencia

de

sentencias

break;
case constante2: secuencia de sentencias

break;
case constante3: secuencia de sentencias

break; ...
default: secuencia de sentencias }

donde la computadora ejecuta la sentencia default si no coincide ninguna constante con la variable, esta ltima es opcional. Cuando se encuentra una coincidencia, la computadora ejecuta las sentencias asociadas con el case hasta encontrar la sentencia break con lo que sale de la estructura switch. Las limitaciones que tiene la sentencia switch ... case respecto a la estructura if son:

Slo se tiene posibilidad de revisar una sola variable. Con switch slo se puede comprobar por igualdad, mientras que con if puede ser con cualquier operador relacional. No se puede probar ms de una constante por case.

La forma como se puede simular el ltimo punto, es no teniendo sentencias asociados a un case, es decir, teniendo una sentencia nula donde slo se pone el caso, con lo que se permite que el flujo del programa caiga al omitir las sentencias, como se muestra a continuacin:
switch (letra) { case 'a': case 'e': case 'i': case 'o': case 'u': numvocales++; break; case ' ': numesp++; break; default: numotras++; break; }

Ejercicios
1. Escribir un programa que lea dos caracteres, e imprima su valor cuando se pueda interpretar como un nmero hexadecimal. Aceptar letras maysculas y minsculas para los valores del 10 al 15. 2. Leer un valor entero. Suponer que el nmero es un da de la semana. Suponer que 0 corresponde a Domingo y as sucesivamente. Imprimir el nombre del da. 3. Dados como entrada 3 enteros representando la fecha como da, mes, ao, imprimir la fecha del da anterior. Por ejemplo para una entrada como: 1 3 1992 La salida ser: Fecha anterior a 1-3-1992 es 29-02-1992 4. Escribir un programa el cual lea dos valores enteros. Si el primero es menor que el segundo, que imprima el mensaje ``Arriba''. Si el segundo es menor que el primero, que imprima el mensaje ``Abajo''. Si los nmeros son iguales, que imprima el mensaje ``igual''. Si hay un error en la lectura de los datos, que imprima un mensaje conteniendo la palabra ``Error'' y haga exit( 0 ); http://garota.fismat.umich.mx/mn1/manual/node4.html

Condicionales
La especificacin formal de algoritmos tiene realmente utilidad cuando el algoritmo requiere una descripcin ms complicada que una lista sencilla de instrucciones. Este es el caso cuando existen un nmero de posibles alternativas resultantes de la evaluacin de una determinada condicin. Las estructuras selectivas se utilizan para tomar decisiones lgicas; de ah que se suelan denominar tambin estructuras de decisin o alternativas. En las estructuras selectivas se evala una condicin y en funcin del resultado la misma se realiza una opcin u otra. Las condiciones se especifcan usando expresiones lgicas. La representacin de una estructura selectiva se hace con palabras en pseudocdigo (if, then, else o bien en espaol si, entonces, sino), con una figura geomtrica en forma de romba o bien con un tringulo en el interior de una caja rectangular.

Las estructuras selectivas o alternativas pueden ser:


Simples Mltiples

Alternativa Simple (si-entonces/if-then)

La estructura alternativa simple si-entonces (en ingls if-then o bien IFTHEN ) ejecuta una determinada accin cuando se cumple una determinada condicin. La seleccin si-entonces evala la condicin y . . . Si la condicin es verdadera, entonces ejecuta la accin S1 (o acciones caso de ser S1 una accin compuesta y constar de varias acciones).

Si la condicin es falsa, entonces no hacer nada.

A continuacin se muestra la grfica de la estructura condicional simple.

Pseudocdigo en espaol
Si <condicin> Entonces <accin S1> Fin_si

Pseudocdigo en ingls
If <condicin> then

<accin S1> end_if

Diagrama N-S

Alternativas Mltiples (segn_sea, caso de / case)


Cuando existen ms de dos elecciones (alternativas) posibles, es cuando se presenta el caso de alternativas mltiples. Si el nmero de alternativas es grande puede plantear serios problemas de escritura del algoritmo y naturalmente de legibilidad. La estrucura de decisin mltiple evaluar una expresin que podr tomar n valores distintos 1,2,3,4,..n . Segn que elija uno de estos valores en la condicin, se realizara una de las n acciones, o lo que es igual, el flujo del algoritmo seguir un determinado camino entre los n posibles.

La representacin grfica se muestra a continuacin:

Diagrama de Flujo

Diagrama N-S
Modelo 1 Modelo 2

Pseudocdigo
En ingls la estructura de decisin mltiple se representa

Case expresin of

[e1]: accin S1 [e2]: accin S2 : [en]: accin Sn

else accin Sx

end_case

Ejemplo: Se desea disear un algoritmo que escriba los nombres de los das de la semana en funcin del valor de una variable DIA introducida por teclado. Los das de la semana son 7; por consiguiente, el rango de valores de DIA ser 1..7, y caso de que DIA tome un valor fuera de este rango se deber producir un mensaje de error advirtiendo la situacin anmala.

Inicio Leer DIA Segn_sea DIA hacer 1: escribir('Lunes') 2: escribir('Martes') 3: escribir('Mircoles') 4: escribir('Jueves')

5: escribir('Viernes') 6: escribir('Sabado') 7: escribir('Domingo') else escribir('Error') fin_segn fin


Ifs anidados En algunas aplicaciones, una de las alternativas de una estructura if-then-else puede incluir un decisin adicional. Por ejemplo, despus de que se elija una determinada accin sobre una determinada calificacin de una prueba, podra quererse evitar la posibilidad de error en los datos de entrada. Esto requiere una comprobacin adicional para verificar que los datos de entrada son validos, lo que sugiere el uso de una estructura if-then-else adicional incluida en cada una de las dos alternativas originales. Este proceso es un ejemplo de anidamiento. Ejemplo: Algoritmo MAX_3 Este algoritmo lee tres nmeros A, B, C, imprimiendo el valor del ms grande. Se supone que los tres valores son diferentes. 1.- Entrada de valores Read (A, B, C) 2.- Se determina el valor ms grande mediante comprobacin por pares if A > B then if A > C then MAX A (A > B, A > C) else MAX C (C > A > B) else if B > C then MAX B (B > A, b > C)

else MAX C (C > B > A) 3.- Se imprime el valor ms grande Write `El valor ms grande es`, MAX 4.- Termino Exit Condiciones compuestas Estas condiciones se obtienen a partir de las expresiones simples, utilizando los operadores lgicos and, or y not. Los significados de estos operadores se describen adecuadamente por medio de las tablas de verdad. Las condiciones compuestas pueden utilizarse ya sea en enunciados if o en repeticiones condicionales. Ejemplo: Algoritmo MAX_3 (2a. versin) Este algoritmo lee tres nmeros A, B, C, imprime el valor del ms grande de ellos. Se supone que los tres valores son distintos. 1. - Entrada de los datos Read (A, B, C) 2. - Se determina el mayor valor if A > B and A > C then MAX A if B > A and B > C then MAX B if C > A and C > B then MAX C 3. - Se imprime el valor ms grande Write `El valor ms grande es`, MAX 4. - Termino http://nayar.uan.mx/~iavalos/Estructuras%20de%20desicion.html

4.4 Estructuras Repetitivas (Bucles)

Estructuras Repetitivas (Ciclos)


En C existen 3 estructuras repetitivas: while, for y do .. while

Estructura While
Sintaxis:

while(condicin) Accin;
En este caso, la sentencia Accin es ejecutada mientras el condicional condicin se evala verdadera (distinta de 0) En el caso de que el cuerpo del while (acciones a ejecutar en caso de que el condicional se verifique) posea ms de una sentencia, todas ellas son encerradas entre llaves:

while(condicin) { Accin1; Accin2; ... }


El condicional es una expresion relacional que puede involucrar operadores relacionales (>, <, >=, <=, ==, !=) y/o operadores logicos (&&, ||, !) Ejemplo: /* Programa que imprime la tabla de conversin de Fahrenheit a Celsius para F = 0, 20, 40,..., 300 */ #include <stdio.h> int main() { int Lower, Upper, Step; float Fahr, Celsius; Lower = 0; Upper = 300; Step = 20; Fahr = Lower; while(Fahr <= Upper)

{ Celsius = (5.0/9.0) * (Fahr - 32.0); printf("%4.0f F -> %6.1f C\n", Fahr, Celsius); Fahr = Fahr + Step; } /* fin del while */ return 0; } /* fin del main */

NOTAS: Lazo while(...) { ... } Lo que se encuentra entre parntesis es una expresin a evaluar. Mientras el resultado de la misma sea distinto de cero, se ejecutan las sentencias asociadas que se encuentran encerradas entre llaves. A este tipo de sentencias se las llama sentencias compuestas. Si el cuerpo de esta sentencia consiste en una sola sentencia simple, pueden omitirse las llaves. Las sentencias compuestas no llevan el carcter ; como terminador. Para mejorar la legibilidad del programa, conviene indentar las sentencias compuestas. Clculo y asignacin: Celsius = (5.0/9.0) * (Fahr - 32.0) El punto decimal en los operandos de la divisin es requerido para que la operacin sea llevada en punto flotante; de lo contrario la misma se efecta como cociente de nmeros enteros, truncando por lo tanto el resultado a cifras enteras. En nuestro caso sera truncado a 0. Estructura for
Esta estructura es una generalizacin de la estructura while usada en el ejercicio anterior. Su funcin es ejecutar iterativamente el cuerpo del bloque, que como en el caso del while puede ser simple o compuesto. La definicin de esta estructura de control posee 3 partes separadas por el carcter ";".

for(a; b; c) { ... ... }


La parte a es la de inicializacin, y puede poseer una sentencia, ninguna, o varias separadas por el carcter ",". Esta parte se ejecuta inmediatamente antes de entrar en el ciclo. La parte b es el criterio o condicin de control de la iteracin. Se evala antes de entrar a cada ciclo, inclusive en la primer iteracin. Si su resultado es

distinto de cero se ejecuta el ciclo; sino se abandona el ciclo y se sigue con la sentencia posterior al cuerpo del for. La parte c es la reinicializacin, que es ejecutada al final de cada ciclo. Podemos simular el bloque for con la siguiente lgica:

a; while(b) { ... ... c; }


Ejemplo: /* Tabla de conversin de grados F a Celsius utilizando constantes simblicas y bloque for */ #include <stdio.h> #define LOWER 0 #define UPPER 300 #define STEP 20 main() { int Fahr; for(Fahr = LOWER; Fahr <= UPPER; Fahr += STEP) printf("%4.0f F -> %6.1f C\n", Fahr, (5.0/9.0)* (Fahr - 32)); } NOTA: Uso de constantes simblicas. Cuando se requieran valores numricos constantes en un programa, deben definirse como constantes y no usar sus valores numricos dentro del programa. C permite definir constantes simblicas (directiva #define al preprocesador) que asocian un smbolo (LOWER, UPPER, STEP) con una expresin (0,300 y 20 respectivamente) de tal manera que el preprocesador reemplaza cualquier ocurrencia de esos smbolos por sus expresiones asociadas

Estructura Do-While
la estructura de control do-while es una variacin sobre el bloque while

do { Accin1; Accin2; ... }while(condicin);


La diferencia esta en que la condicin se chequea al final y las acciones son ejecutadas al menos una vez. Por ejemplo
/*

Programa que pide al usuario un nmero entero entre 1 y 10. Se contina pidiendo el valor hasta que cumpla la condicin */ #include <stdio.h> int main() { int n, error; do { printf("Ingrese un nmero entero entre 1 y 10: "); scanf("%d", &n); if (error = (n < 1 || n > 10)) printf("\nERROR: Intentelo nuevamente!!\n\n"); } while(error); /* ahora puedo procesar el valor ingresado sabiendo que es correcto. */ return 0; } /* fin del main */
http://www.ldc.usb.ve/~gabro/teaching/CI2125/Clase5_ciclos.htm

Estructuras Repetitivas
Las estructuras que repiten una secuencia de instrucciones un nmero determinado de veces se denominan Bucles y se denomina Iteracin al hecho de repetir la ejecucin de una secuencia de acciones. Entre las estructuras repetitivas se encuentran: Mientras (while) Repetir (repeat) Desde (for)

1.- Estructura Mientras (while)


La estructura repetitiva while, es aqulla en que el cuerpo del bucle se repite mientras se cumple una determinada condicin, su representacin grfica es:

Pseudocdigo en espaol Mientras condicin hacer Accin S1 Accin S2 : accin Sn Fin_mientras

Pseudocdigo en ingls while condicin do <Acciones> : End_while

Diagrama N-S

Ejemplo: Contar los nmeros enteros positivos introducidos por teclado. Se consideran dos variables enteras NUMERO y CONTADOR (contar el nmero de enteros positivos). Se supone que se leen nmeros positivos y se detiene el bucle cuando se lee un nmero negativo o cero.

Pseudocdigo
Inicio contador 0

Leer (numero) Mientras numero > 0 hacer contador contador+1

Leer (numero) Fin_Mientras Escribir('El nmero de enteros positivos es : ', contador) Fin

Diagrama de Flujo

Representacin en N-S

Unidad 5. Arreglos y Archivos


5.1 Arreglos (Vectores y Matrices)
Las variables que hemos utilizado hasta ahora nos permiten el almacenamiento de un solo valor a la vez. Para resolver cierto tipo de problemas con datos mltiples en forma eficiente, se requiere almacenamiento en conjunto. A esta organizacin de elementos se le conoce con el nombre de arreglo. Otra definicin de arreglo ms completa (Luis Joyanes A.), es un conjunto finito y ordenado de elementos homogneos. La propiedad "ordenado" significa que el elemento primero, segundo, terceron-simo de un arreglo puede ser identificado. Los elementos de una arreglo debern ser homogneos, es decir, del mismo tipo de datos. Por ejemplo un arreglo puede estar compuesto de todos sus elementos de tipo cadena, otro puede tener sus elementos de tipo entero, etc. Al tratar el tema de arreglos es necesario conocer el trmino de dimensin. Dimensin 0 1 2 3 Descripcin Un solo punto. (vector o lista) Una recta. Contiene largo. (matriz o tabla) Contiene largo y ancho. (cubo) Tiene largo, ancho y fondo.

Declaracin de un Arreglo
Nom_variable : Arreglo [dimensin] de Nom_tipo En donde dimensin especifica : <subndice inferior> <subndice superior> En el orden : Fila, Columna, Fondo. Ejemplo de una declaracin : 0 Dimensin : x 20 donde x, es de tipo Entero.

1 Dimensin : 5
1 2 3 4

x[2]

x : arreglo [1..4] de Enteros. 2 Dimensiones :


1 2 3 4

x[2,4]

x : arreglo [1..3, 1..4] de Enteros. 3 Dimensiones : x[1,4,2] 3

x : arreglo[1..3, 1..4, 1..2] de Enteros. Las operaciones que se pueden realizar con arreglos durante el proceso de resolucin de un problema son : Asignacin Lectura/Escritura Recorrido (acceso secuencial) Actualizar (aadir, borrar, insertar) Ordenacin Bsqueda

Vectores
Son aqullos de una sola dimensin, por lo que tambin son llamados arreglos Unidimensionales.

Ejemplo : Un vector de una dimensin llamado CALIF, que consta de n elementos.


calif(1) calif(2) calif(n2) calif(n1) calif(n)

El subndice o ndice de un elemento (1, 2 n) designa su posicin en la ordenacin del vector. Otras posibles notaciones del vector son : a1, a2,,an A(1), A(2),A(n) A[1], A[2],A[n] En programacin (Pascal) En matemticas y algunos lenguajes(BASIC)

Los vectores se almacenan en memoria central de la computadora en un orden adyacente. As, un vector de 50 elementos denominado NUMEROS se representa grficamente por 50 posiciones de memoria sucesivas.

Memoria
NUMEROS(1) NUMEROS(2) NUMEROS(3)
: :

Direccin x Direccin x+1 Direccin x+2

NUMEROS(50)

Direccin x+49

Cada elemento de un vector se puede procesar como si fuese una variable simple al ocupar una posicin de memoria. As : NUMEROS(25) NUMEROS y la NUMEROS(25). 75 (almacena el valor 75 en la posicin 25a del vector instruccin de salida : escribir

Declaracin
nom _arreglo = arreglo[liminf..limsup] de tipo

donde : nom_arreglo : liminf..limsup : tipo : nombre vlido del arreglo. lmites inferior y superior del rango del arreglo.

tipo de datos de los elementos del arreglo : entero, real, carcter.

NOMBRES= arreglo [1..10] de carcter Significa que NOMBRES es un arreglo (array) unidimensional de 10 elementos (1 a 10) de tipo carcter.

Asignacin
NOMBRES(8) Ana Asigna el valor Ana al elemento 8 del vector NOMBRES

Lectura/Escritura de Datos
La Lectura/Escritura de datos en un arreglo u operaciones de entrada/salida normalmente se realizan con estructuras repetitivas, aunque puede tambin hacerse con estructuras selectivas. Las instrucciones simples de lectura/escritura se representarn como : leer A escribir A leer V(5) Lectura del vector A Escritura del vector A Leer el elemento V(5) del vector V

Acceso Secuencial al Vector (recorrido)


Se puede acceder a los elementos de un vector para introducir datos (escribir) en el o bien para visualizar su contenido (leer). Estas operaciones se realizan utilizando estructuras repetitivas, cuyas variables de control (por ejemplo I) se utilizan como subndices del vector (por ejemplo, X(I). El incremento del contador del bucle producir el tratamiento sucesivo de los elementos del vector.

Ejemplo : Lectura de 15 valores enteros de un vector denominado TOTAL.

TOTAL= array [1..15] de entero desde i 1 hasta 15 hacer

leer TOTAL(i) fin _desde

Si se cambian los limite inferior y superior, por ejemplo, 5 y 12, el bucle de lectura sera : desde i 5 hasta 12 hacer

leer TOTAL(i) fin_desde

La salida o escritura de vectores se representa de un modo similar. desde i 1 hasta 15 hacer

escribir TOTAL(i) fin_desde Visualiza todo el vector completo (un elemento en cada lnea independiente).

Actualizacin de un Vector
Puede constar de tres operaciones ms elementales : a) Aadir elementos (aade un nuevo elemento al final del vector)

Un arreglo A se ha dimensionado a 6 elementos, pero solo se han asignado 4 valores a los elementos A(1), A(2), A(3), A(4), se podrn aadir dos elementos ms con una simple accin de asignacin. A(5) A(6) 15 9

b.- Insertar elementos (introduce un elemento en el interior de un vector)

Ejemplo : Se tiene un arreglo NOM de 6 elementos de nombres de personas, en orden alfabtico y se desea insertar un nuevo nombre.

{Calcular la posicin ocupada por el elemento a insertar} P {Inicializar contador de inserciones} i n. mientras i >= P hacer {transferir el elemento actual hacia abajo, a la posicin i+1} NOM(i+1) NOM(i)

{decrementar contador} i i-1 fin_mientras {Insertar el elemento en la posicin P} NOM(P) nuevo elemento

{Actualizar el contador de elementos del vector} n fin n+1

c) Borrar elementos (Elimina elementos de un vector)

Algoritmo de Borrado Inicio {se utilizar una variable auxiliar AUX, que contendr el valor del elemento que se desea borrar} AUX desde i NOM(i) j hasta N-1 hacer

{llevar elemento j+1 hacia arriba} NOM(i) fin_desde {actualizar contador de elementos} {ahora tendr un elemento menos, N-1} N Fin N-1 NOM(i+1)

Referencia a un elemento de Arreglo


variable de arreglo [subndice] Ejemplo : x x[3] 9

escribir (x[2]) ? 9
1 2 3

Ejercicio : Se desea la lectura y desplegado de 5 nombres. Resuelva el problema por cada uno de los siguientes criterios : a) b) Lectura y desplegado alternados. Todas las lecturas, todos los desplegados.

a) variables : string : nom entero : x

Inicio Para x 1 hasta 5 hacer

escribir(Nombre ? ) leer(nom) escribir( La persona nmero, x, se llama : ,nom) Fin

Nota :

No se utilizaron arreglos porque no se requera de almacenamiento mltiple.

b) variables : nom : Arreglo[1..5] de string x : Entero

Inicio para x 1 hasta 5 hacer

escribir(Dame el nombre nmero,x, ?) leer(nom[x]) para x 1 hasta 5 hacer

escribir(La persona nmero , x, se llama : ,nom[x]) Fin

Ordenacin de Arreglos
Existen diversos mtodos para ordenar los elementos de un arreglo. El ms conocido de ellos (no el mejor) es el Mtodo de la Burbuja.

El mtodo consiste en hacer un recorrido por el arreglo comparando parejas de elementos ; si estos no estn en el orden deseado, se procede a intercambiarlos.

Al finalizar el recorrido se verifica la cantidad de intercambios, si esta es 0 se asume que el arreglo est ordenado ; en caso contrario se inicia nuevamente el recorrido.

Las parejas de elementos que se comparan deben ser contiguos (elemento1 y elemento2, elemento2 y elemento3, etc). El nmero total de comparaciones es n-1 (donde n es la cantidad de elementos).

Ejemplo : Se requiere la ordenacin de una lista con 5 valores enteros previamente introducidos.

Variables : LISTA : arreglo[1..5] de entero x, aux : entero cambio : boleano

Inicio Para x 1 hasta 5 hacer

escribir(Dame el valor,x, :) leer( LISTA[x]) repetir cambio falso para x 1 hasta 4 hacer

si LISTA[x] > LISTA[x+1] entonces aux LISTA[x] LISTA[x+1] aux

LISTA[x] LISTA[x+1] cambio

verdadero fin_si_entonces

hasta cambio = falso escribir(Lista ordenada) para x 1 hasta 5 hacer

escribir(Elemento nmero,x, es,LISTA[x]) Fin

Un arreglo unidimensional es un tipo de datos estructurado que est formado de una coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da su posicin relativa. Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la direccin base del arreglo, la cota superior y la inferior. REPRESENTACION EN MEMORIA Los arreglos se representan en memoria de la forma siguiente:
x : array[1..5] of integer

Para establecer el rango del arreglo (nmero total de elementos) que componen el arreglo se utiliza la siguiente formula:
RANGO = Ls - (Li+1)

donde: ls = Lmite superior del arreglo li = Lmite inferior del arreglo Para calcular la direccin de memoria de un elemento dentro de un arreglo se usa la siguiente formula:
A[i] = base(A) + [(i-li) * w]

donde : A = Identificador nico del arreglo i = Indice del elemento

li = Lmite inferior w = Nmero de bytes tipo componente Si el arreglo en el cual estamos trabajando tiene un ndice numerativo utilizaremos las siguientes frmulas:
RANGO = ord (ls) - (ord (li)+1) A[i] = base (A) + [ord (i) - ord (li) * w]

Arreglos Unidimensionales
La declaracin del arreglo unidimensional es un tipo seguido de un identificador con una expresin constante INT entre corchetes. El valor de la expresin, que debe ser positivo,es el tamao del arreglo y especifica el numero de elementos que contiene. La forma de declarar un arreglo es la siguiente: < tipo > < variable > [N] Declara un arreglo de nombre < variable > con N elementos de tipo < tipo >, en donde N es una constante) Los corchetes [ ], sirven para encerrar los subndices. Por ejemplo, para declarar un arreglo de enteros llamado arreglo con 5 elementos se hace de la siguiente forma: int arreglo[5]; Para accesar a algn elemento del arreglo, puede hacerse de las siguientes formas: a) int arreglo[] = {0,1,2,3,4,5} /*se valida cuando se inicializan todos los elementos del array*/ b) int arreglo[4] = {4, 2, 3, 6} /*se declara y asigna valores iniciales al arreglo */ c) arreglo[3] = 10; num = arreglo[2]; m */
Una Estructura de Datos, es una coleccin de datos que se caracterizan por su organizacin las operaciones que se definen en ella. Las Estructuras de Datos pueden ser de dos tipos: Estticas y Dinmicas. Las Estructuras de Datos estticas son aquellas en las que el espacio ocupado en la memoria se define en tiempo de compilacin no puede ser modificado durante la ejecucin del programa; por el contrario, en las Estructuras de Datos Dinmicas el espacio ocupado en memoria puede ser modificado en tiempo de ejecucin>

/* Asigna 10 al 4er elemento del arreglo lista*/ /* Asigna el contenido del 3er elemento a la variable nu

Un ARRAY (arreglo), es una coleccin de datos del mismo tipo, que se almacena en posiciones consecutivas de memoria y recibe un nombre com?os componentes individuales de un arreglo se llaman Elementos y se distinguen entre ellos por el nombre del arreglo seguido uno o varios ic es i . El c e es un n? que indica la posici ocupa el elemento dentro del arreglo. i ue Los elementos del arreglo se almacenan en la memoria de la computadora en posiciones adyacentes (un elemento por posici Los arreglos se dividen en: - UNIDIMENSIONALES (Vectores o Listas) - BIDIMENSIONALES (Tablas o matrices) - MULTIDIMENSIONALES

Arreglos Unidimensionales o Vectores.


Un Vector es una secuencia de elementos del mismo tipo y en los que el orden es significativo. El orden est ado por el i ce del vector; por ejemplo: i

Vector[10] 0 21 -1 8 5 -9 15 7 9 6 -4 33

Declaraci Vectores e :
Es la reservaci un espacio en memoria, para almacenar un conjunto de datos. e Formato: NOMBRE: ARRAY [N] DE TIPODEDATO NOMBRE: Identificador del arreglo. N: N? de elementos del arreglo. TIPODEDATO: Entero, Real, Cadena, L . o El i ce del primer emento del vector es 0 (cero) y el ?o es N-1. i el Ejemplo: Declarar un Vector llamado TEMP que almacene las tempraturas de cada hora durante un d TEMP : ARRAY [24] DE REAL

Arreglos

A diferencia de los elementos estudiados hasta ahora, los arreglos pertenecen al dominio de los tipos de datos y no al de las instrucciones de Pascal. A grandes rasgos, son conjuntos de variables que comparten un mismo nombre, pudiendo ser referenciadas de manera individual las variables del conjunto con ayuda de uno o ms ndices. Los arreglos guardan estrecha similitud con elementos de datos de la vida cotidiana, como los vectores y las tablas, y en cierto modo trazan una lnea que separa la programacin bsica de la avanzada. Como la sintaxis formal de los arreglos es muy general, se comenzar definiendo los arreglos unidimensionales o vectores. Arreglos unidimensionales: vectores Supngase que se tienen cinco variables: a, b, c, d y e. Si se desea hacer referencia a las cinco, deben usarse sus nombres, y eso implicara, a nivel de programacin, poner sus nombres en cada sentencia que se requiera (ReadLn, frmulas, etc.) y repetir las mismas cinco veces. Un enfoque ms general es poner a las variables un mismo nombre, y distinguirlas por un nmero, parecido a como hacen los libros de matemticas para referirse de manera general a las componentes de los vectores o de las tuplas. Entonces, se hablara de a(1), a(2), a(3), a(4) y a(5), en vez de las letras usadas anteriormente; como ya se sabe cmo generar los ndices (los nmeros entre parntesis que permiten distinguir las variables), se puede usar un ciclo para manipular las variables y usar menos cdigo. La sintaxis para declarar un arreglo de una sola dimensin es:
Var <nomb> : Array [<li>..<ls>] Of <tipo>;

donde <nomb> es el nombre del arreglo, <li> es el valor inferior que puede tomar el ndice y <ls> es el valor superior del ndice. Un ejemplo real de declaracin de arreglos se muestra a continuacin:
Var a : Array[1..5] Of Integer;

que produce un arreglo llamado a de cinco variables enteras. La primera es a[1], la segunda es a[2], y as sucesivamente. Cul es la utilidad de este esquema? Si se tienen que leer cinco variables declaradas por separado, con nombres distintos, se usara algo como esto:
ReadLn(a); ReadLn(b); ReadLn(c); ReadLn(d); ReadLn(e);

mientras que con arreglos, basta escribir:


For i := 1 To 5 Do ReadLn(a[i]);

que es evidentemente ms cmodo.

A lo largo del curso se han visto programas que suman una cantidad de nmeros usando dos variables, una para leer cada nmero y otra para acumular la suma. Este enfoque tiene la desventaja de que se pierden los valores de los sumandos. El uso de arreglos permite calcular la suma de los nmeros con una cantidad mnima de cdigo y a la vez conservar cada valor, como muestra el siguiente programa completo:
Program SumaN; Uses WinCrt; Const n = 5; {Cant. de #s} Var nums: Array[1..n] Of Integer; s, i: Integer; Begin For i:=1 To n Do Begin Write('Nmero: '); ReadLn(nums[i]); s := s + nums[i]; End; WriteLn('Suma: ', s); End.

Ntese el uso de una constante para marcar el tamao del arreglo; dicha constante, naturalmente, tambin sirve para controlar el For. De este modo, slo se hace necesario cambiar un nmero para adecuar el programa a la escala apropiada.
Arreglos Unidimensionales (Vectores o Listas) (Variables con subndices) Nota: Un arreglo de variables es una coleccin de variables simples todas del mismo tipo con un nombre comn, llamado el nombre del arreglo. Ejemplo: Considere las siguientes edades: 20, 19, 18, 26, 23, 18, 23. Estos siete valores se pueden guardar usando las variables Edad1 = 20, Edad2 = 19, Edad3 = 18, Edad4 = 26, Edad5 = 23, Edad6 = 18 y Edad7 = 23. Otra forma de guardarlos es como siete elementos del arreglo con nombre Edad. Se puede hacer referencia a elementos en el arreglo haciendo uso del nombre Edad y el nmero del elemento (ndice de la variable) entre parntesis. Referencia de la variable: Edad(1), Edad(2), Edad(3), ... Valor de la variable: 20, 19, 18, ... Ejemplos: 1) (Edad(4) + Edad(2))/2 2) Suma = 0 For i = 1 TO 6 Suma = Suma + Edad(i)

Next i picOutput.Print "El promedio de las edades es:";Suma/6

http://www.cayey.upr.edu/crivera/sici3007/ArreglosUnidimensionales.htm

Un arreglo (array, disposicin, vector o lista, tabla o matriz) es una estructura de datos utilizada para almacenar un conjunto de datos del mismo tipo, en posiciones consecutivas de memoria. Un arreglo se identifica por medio de un nombre. Los componentes individuales del arreglo se denominan elementos y se distinguen entre ellos por el nombre del arreglo seguido de uno o varios ndices o subndices, entre parntesis. El identificador o ndice, determina la posicin de memoria de un elemento del arreglo.

1.4.1.1 Clasificacin de los Arreglos


1.4.1.1.1 Arreglos Unidimensionales. Un arreglo unidimensional es un conjunto finito (nmero especifico de elementos), ordenado, de elementos homogneos (del mismo tipo).

Figura 1.4 Arreglo unidimensional. Para tener acceso directo a la posicin de memoria que contiene el valor de cada elemento del arreglo, se utiliza la siguiente frmula: Dir E[I]=Dir E[Ii]+NumPos*(I-Ii) Donde: Dir E[I]: Direccin de memoria del elemento cuyo ndice es I. Dir E[Ii]: Direccin de memoria del elemento inicial del arreglo. NumPos: Nmero de posiciones de memoria de que consta la celda. Ii: ndice del elemento inicial.

Las operaciones con vectores se pueden realizar con elementos individuales o sobre los vectores completos mediante las instrucciones bsicas y estructuras de control. Las operaciones que se pueden realizar sobre elementos individuales son: asignacin y lectura. Entre las operaciones sobre el vector completo estn: Recorrido: Es la manera de acceder de manera sucesiva y consecutiva a los contenidos de cada elemento del vector. o Insercin: Consiste en introducir en el arreglo el valor del elemento. Aunque el sistema reserva memoria para cada elemento del arreglo, puede suceder que alguna posicin de memoria se encuentre vaca. Surgen dos operaciones distintas: aadir una celda de memoria vaca o aadir en una celda de memoria ocupada, para no daar el contenido de memoria donde se inserta el nuevo dato, se desplaza este contenido y todos los siguientes a una posicin superior de la misma memoria. o Bsqueda: Consiste en realizar un recorrido del vector, empezando desde su posicin de memoria ms baja con el fin de localizar un dato determinado. o Eliminacin: Borrar el dato contenido en una de las posiciones del vector, si es una posicin diferente de la ltima, todos los elementos con posiciones posteriores retroceden una posicin. Ordenacin: Consiste en reorganizar el contenido de cada uno de los elementos del vector segn una secuencia determinada (ascendente o descendente).
o Las operaciones con vectores se pueden realizar con elementos individuales o sobre los vectores completos, mediante las instrucciones b cas y las estructuras de control; por ejemplo:

Operaciones sobre los elementos de un vector


Las operaciones sobre los elementos de un vector son: ASIGNACI. LECTURA. ESCRITURA.

ASIGNACI: Es la acci introducir un elemento a una posici e c spec a del vector. c As ues, si queremos que la posici del vector tenga un valor de -8, la operaci realizar es la siguiente: A[6]=-8

LECTURA: Es la operaci acci obtener un valor desde el teclado, para ser introducido en una e posici el vector: LEE A[4] ESCRITURA: Es la operaci e sacar un valor de una posici el vector: ESCRIBE A[6]

Operaciones sobre vectores completos:


Las operaciones que se pueden realizar sobre vectores completos son: - RECORRIDO. - B QUEDA. - INSERCI. - ELIMINACI. - ORDENAMIENTO.

RECORRIDO: Es la operaci e escribir, asignar, leer o llenar de datos el vector completo y se realiza mediante las siguientes estructuras: FOR Ind=0 TO 9 DO FOR Ind=0 TO 9 DO LEE A[Ind] Ind=1 While Ind<=10 DO LEE A[Ind] Ejemplo: Dise Pseudoc que almacene en la memoria de la computadora un vector llamado FIBO n o de 100 posiciones el cual contendr os primeros 100 n?sdel Fibonacci: ESCRIBE A[Ind] Ind=1 While Ind<=10 DO ESCRIBE A[Ind]

Soluci > /big Pseudoc o Fibonacci Variables FIBO : ARRAY [100] DE Entero A,B,C,I : Entero INICIO A_1 B=0 FIBO[0]=0 FIBO[1]=1 FOR I=2 TO 99 DO INICIO C=A+B FIBO[I]=C B=A A=C FIN FIN B QUEDA: Consiste en determinar si un valor especc o se encuentra dentro del c vector. Se deben examinar uno a uno todos los elementos, comenzando con el primer elemento del vector y comparando con el elemento buscado. El pseudoc o de b?da es el siguiente: Pseudoc o B?da Variables HALLADO, X, A : Entero INICIO HALLADO=0 LEE X A=0 WHILE HALLADO=0 AND A<>(N? de Elementos del Vector) DO

INICIO IF VECTOR[A]=X THEN HALLADO=1 A=A+1 FIN IF HALLADO=1 THEN ESCRIBE "El N? fu ncontrado" ELSE ESCRIBE "El n? no est n el vector" FIN

ORDENAMIENTO: La ordenaci clasificaci e datos es el proceso de organizar datos en alg?den o secuencia especc a, tal como creciente o decrecente, para c datos num cos, o alfab camente para datos alfanum cos. Los m dos de ordenaci div : en dos categor : e iden Ordenaci e Arrays. Ordenaci e Archivos. La ordenaci e Arrays se denomina tambi ordenaci nterna, ya que se almacena en la memoria interna de la camputadora a gran velocidad y acceso aleatorio. La ordenaci e archivos se suele hacer casi siempre sobre soportes de almacenamiento externo: Discos, Cintas, etc. y por ello, se denomina ordenaci xterna. Para este curso s emplearemos la ordenaci nterna, es decir, la ordenaci e Arrays. ORDENACI POR BURBUJA O INTERCAMBIO: El m do de la burbuja es uno de los m conocidos por su sencillez y facilidad de implementaci idea b del m do es comparar elementos consecutivos la ca en cada paso a lo largo del vector. Cada vez que se realiza una comparaci e los elementos se intercambian entre s n caso de no estar en orden. Es decir, se examina dos elementos adyacentes X[i] y X[i+1]; en caso de no estar ordenados X[i] < X[i+1] o bien X[i] > X[i+1] se intercambian los valores de dichos elementos.

Algoritmo de Ordenamiento por Burbuja:


Pseudoc o BURBUJA Variables A:ARRAY[N] DE Entero X,J,AUX:Entero INICIO FOR X=0 TO (N-2) DO INICIO FOR J=0 TO ((N-1)-(X+1)) DO INICIO IF A[J]>A[J+1] THEN INICIO AUX=A[J] A[J]=A[J+1] A[J+1]=AUX FIN FIN FIN FIN

Arreglo bidimensional
Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y homogneo. El acceso a ellos tambin es en forma directa por medio de un par de ndices. Los arreglos bidimensionales se usan para representar datos que pueden verse como una tabla con filas y columnas. La primera dimensin del arreglo representa las columnas, cada elemento contiene un valor y cada dimensin representa una relacin La representacin en memoria se realiza de dos formas : almacenamiento por columnas o por renglones. Para determinar el nmero total de elementos en un arreglo bidimensional usaremos las siguientes frmulas:
RANGO DE RENGLONES (R1) = Ls1 - (Li1+1)

RANGO DE COLUMNAS (R2) = Ls2 - (Li2+1) No. TOTAL DE COMPONENTES = R1 * R2

REPRESENTACION EN MEMORIA POR COLUMNAS

x : array [1..5,1..7] of integer

Para calcular la direccin de memoria de un elemento se usan la siguiente formula:


A[i,j] = base (A) + [((j - li2) R1 + (i + li1))*w]

REPRESENTACION EN MEMORIA POR RENGLONES

x : array [1..5,1..7] of integer

Para calcular la direccin de memoria de un elemento se usan la siguiente formula:


A[i,j] = base (A) + [((i - li1) R2 + (j + li2))*w]

donde: i = Indice del rengln a calcular j = Indice de la columna a calcular li1 = Lmite inferior de renglones li2 = Lmite inferior de columnas

w = Nmero de bytes tipo componente


Una MATRIZ o TABLA, es un arreglo de dos dimensiones, por lo cual se manejan dos ndices; el primer ndice se refiere a la fila o rengln y el segundo a la columna; grficamente lo podemos entender as: Col 1 Col 2 Col 3 Col 4 Fila 1 Fila 2 Fila 3 Fila 4 Para hacer referencia a un elemento de la matriz se tiene que indicar con dos ndices:

Matriz[Fila][Columna]
Ejemplo: M[3][4]=7, M[1][2]=4, M[5][3]=ERROR, M[2][1]=8 Col 1 0 8 2 3 Col 2 4 3 6 7 Col 3 1 0 1 8 Col 4 1 0 7 4

Declaracin de Matrices
La declaracin de una matriz es similar a la de un Areglo Unidimensional (Vector), con la diferencia de que hay que agregar un ndice para referenciar la nueva dimensin de la matriz, la sintaxis es la siguiente:

NombreDelArreglo: ARRAY [# de Filas][# de Columnas] DE TipoDeDatos


Ejemplo: La declaracin de la matriz mostrada en el ejemplo de arriba sera de la siguiente forma:

M: ARRAY [4][4] DE Enteros

Ejemplo con Matrices


Disee un Pseucocdigo que contenga en la memoria de la computadora una matriz de 3*3 con nmeros enteros ledos del teclado.

Pseudocdigo MATRIZ Variables MAT: ARRAY [3][3] DE Enteros Fila, COlumna: Enteros INICIO FOR Fila=1 TO 3 DO INICIO FOR Columna=1 TO 3 DO INICIO ESCRIBE 'Teclee un nmero: ' LEE MAT[Fila][Columna] FIN FIN FIN

Arreglos bidimensionales: tablas Siguiendo la misma lnea, se pueden relacionar grupos de vectores para formar tablas. Por ejemplo, supngase que se quieren almacenar nombres de personas y sus respectivos nmeros de telfonos; se puede tener un vector de nombres y uno de nmeros, de modo que el i-simo nmero de telfono (en un vector) sea de la i-sima persona (en el otro vector). Pues bien: existe un modo de fundir ambos vectores en un solo tipo de variable, una tabla de dos columnas y varias filas (o viceversa) en la que la posicin [1, i] indique el nombre de una persona y la posicin [2, i] indique el nmero de telfono de esa persona. Para declarar esta estructura, se escribe:
Var Tabla: Array[1..2, 1..n] Of String;.

y de manera general, se puede declarar un arreglo bidimensional as:


Var <nomb>: Array[<li1>..<ls1>, <li2>..<ls2>] Of <tipo>;

De hecho, aunque no estn contemplados en el programa del Laboratorio de Elementos de Computacin, se pueden definir ms dimensiones; no hay un lmite definido a la cantidad de dimensiones de un arreglo. Volviendo al ejemplo de la lista de personas y nmeros de telfono, se puede escribir un programa completo que use una tabla para leer y guardar esta informacin:
Program Telefonos; Uses WinCrt; Const n = 5; Var Tabla: Array[1..2, 1..n] Of String; i: Integer; Begin For i:=1 To n Do Begin WriteLn('Persona: ', i); Write('Nombre: '); ReadLn(Tabla[1, i]); Write('Telfono: '); ReadLn(Tabla[2,i]); End; End.

En este momento, los datos estn en la memoria, y el esfuerzo que se requiri para leerlos fue menor que usando 10 variables independientes (cinco para los nombres y cinco para los nmeros). Adems, con slo cambiar un valor, el de n, el programa almacena ms pares de nombre y telfono. Y aunque no se ver aqu, manipular esos datos una vez ledos es igual de fcil. Unas consideraciones importantes sobre los arreglos: son racimos o conjuntos de variables, pero no pueden manejarse como tales. Siempre deber hacerse referencia a una posicin especfica del arreglo; si se desea acceder a una parte del mismo o a su totalidad, deber hacerse de manera iterativa, visitando los elementos que lo componen uno a uno. http://www.intec.edu.do/~rjimenez/guia6.html Arreglos Bidimensionales. Un arreglo bidimensional es un conjunto de datos del mismo tipo, estructurado de tal forma que se precisa de dos ndices para referenciar cada uno de sus elementos, el primer ndice se refiere a la fila y el segundo se refiere a la columna. En cuanto al almacenamiento, el sistema reserva memoria para cada uno de sus elementos destinando en conjunto, un bloque de la misma, este se halla estructurado as: almacenamiento consecutivo y secuencial de una fila dentro de otra, sin solucin de continuidad; almacenamiento consecutivo y secuencial de una columna dentro de otra, sin solucin de continuidad. Para acceder a la posicin de cada elemento del arreglo se tienen las siguientes frmulas:
o

Almacenamiento por filas:

Dir E[I,J]=Dir E[Ii,Ji]+NumPos*(Nc*(I-1)+(J-1))


o

Almacenamiento por columnas: Dir E[I,J]=Dir E[Ii,Ji]+NumPos*(Nf*(J-1)+(I-1))

Donde: Dir E[I,J]: Direccin de memoria del elemento cuyos ndices son I,J. Dir E[Ii,Ji]: Direccin de memoria del elemento inicial del arreglo. Nc: Nmero total de columnas. Nf: Nmero total de filas. Ii y Ji: ndices del elemento inicial. Los arreglos bidimensionales tienen las mismas operaciones que los vectores. los algoritmos cambian porque es necesario tener el orden segn los dos ndices.

5.2 Manejo Archivos


Los archivos tambin denominados ficheros (file); es una coleccin de informacin (datos relacionados entre s), localizada o almacenada como una unidad en alguna parte de la computadora. Los archivos son el conjunto organizado de informaciones del mismo tipo, que pueden utilizarse en un mismo tratamiento; como soporte material de estas informaciones. INTRODUCCIN A LOS ARCHIVOS. Los archivos como coleccin de datos sirve para la entrada y salida a la computadora y son manejados con programas. Los archivos pueden ser contrastados con Arrays y registros; Lo que resulta dinmico y por esto en un registro se deben especificar los campos, l nmero de elementos de un arrays (o arreglo), el nmero de caracteres en una cadena; por esto se denotan como "Estructuras Estticas". En los archivos no se requiere de un tamao predeterminado; esto significa que se pueden hacer archivos de datos ms grandes o pequeos, segn se necesiten. Cada archivo es referenciado por su identificador (su nombre.). CARACTERSTICAS DE LOS ARCHIVOS Las principales caractersticas de esta estructura son:

Independencia de las informaciones respecto de los programas La informacin almacenada es permanente Un archivo puede ser accedido por distintos programas en distintos momentos Gran capacidad de almacenamiento. CLASIFICACION DE LOS ARCHIVOS Los archivos se clasifican segn su uso en tres grupos: Permanentes o Maestros: Estos contienen informacin que varia poco. En algunos casos es preciso actualizarlos peridicamente. De Movimientos Se cercan para actualizar los archivos maestros. Sus registros son de tres tipos: alta, bajas y modificaciones. De Maniobra o Trabajo. Tienen una vida limitada, normalmente menor que la duracin de la ejecucin de un programa. Su utilizan como auxiliares de los anteriores. TIPOS DE ARCHIVOS Los elementos de un archivo pueden ser de cualquier tipo, simples o estructurados o segn su funcin. SEGN SU FUNCION. Se define por: a.- Archivos Permanentes: Son aquellos cuyo registros sufren pocas o ninguna variacin a lo largo del tiempo, se dividen en: Constantes: Estn formados por registros que contienen campos fijos y campos de baja frecuencia de variacin en el tiempo. De Situacin: Son los que en cada momento contienen informacin actualizada. Histricos: Contienen informacin acumulada a lo largo del tiempo de archivos que han sufridos procesos de actualizacin o bien acumulan datos de variacin peridica en el tiempo.

b.- Archivos de Movimiento Son aquellos que se utilizan conjuntamente con los maestros (constantes), y contienen algn campo comn en sus registros con aquellos, para el procesamiento de las modificaciones experimentados por los mismos. c.- Archivo de Maniobra o Transitorio Son los archivos creados auxiliares creados durante la ejecucin del programa y borrados habitualmente al terminar el mismo. SEGN SUS ELEMENTOS. Los principales archivos de este tipo son: Archivo de Entrada: Una coleccin de datos localizados en un dispositivo de entrada. Archivo de Salida: Una coleccin de informacin visualizada por la computadora. Constantes: estn formados por registros que contienen campos fijos y campos de baja frecuencia de variacin en el tiempo. De Situacin: son los que en cada momento contienen informacin actualizada. Histricos: Contienen informacin acumulada a lo largo del tiempo de archivos que han sufrido procesos de actualizacin, o bien acumulan datos de variacin peridica en el tiempo. Archivos de Movimiento o Transacciones: Son aquellos que se utilizan conjuntamente con los maestros (constantes), y contienen algn campo comn en sus registros con aquellos, para el procesamiento de las modificaciones experimentados por los mismos. Archivos de Maniobra o Transitorios: Son los archivos auxiliares creados durante la ejecucin del programa y borrados habitualmente al terminar el mismo.

- SEGN SUS ELEMENTOS Los principales archivos de este tipo son: Archivo de Entrada, una coleccin de datos localizada en un dispositivo de entrada.

Archivo de Salida, una coleccin de informacin visualizada por la computadora. Archivo de Programa, un programa codificado en un lenguaje especifico y localizado o almacenado en un dispositivo de almacenamiento. Archivo de Texto, una coleccin de caracteres almacenados como una unidad en un dispositivo de almacenamiento. ACCESO A LOS ARCHIVOS Se refiere al mtodo utilizado para acceder a los registros de un archivo prescindiendo de su organizacin. Existen distintas formas de acceder a los datos: Secuenciales; los registros se leen desde el principio hasta el final del archivo, de tal forma que para leer un registro se leen todos los que preceden. Directo; cada registro puede leerse / escribirse de forma directa solo con expresar su direccin en el fichero por l numero relativo del registro o por transformaciones de la clave de registro en l numero relativo del registro a acceder. Por ndice; se accede indirectamente a los registros por su clave, mediante consulta secuenciales a una tabla que contiene la clave y la direccin relativa de cada registro, y posterior acceso directo al registro.

Dinmico; es cuando se accede a los archivos en cualquier de los modos anteriormente citados. La eleccin del mtodo esta directamente relacionada con la estructura de los registros del archivo y del soporte utilizado. TIPOS DE ACCESOS Acceso Secuencial. Exige el tratamiento de elemento, para esto es necesario una exploracin secuencial comenzando desde el primer momento (Pascal permite este acceso) Secuenciales: archivo de texto que debe ser ledo del principio hasta el final. Acceso Directo. Permite procesar o acceder a un elemento determinado y referencia directamente por su posicin en el soporte de almacenamiento (Turbo Pascal permite este acceso. Aleatorios: es un archivo con registros de un mismo largo. Un programa puede accesar directamente cualquier registro sin tener que leer los registros previos.

Binarios: es un archivo que lee byte por byte sin asumir ninguna estructura. Los archivos Binarios no son un nuevo tipo de archivo, pero si una nueva forma de manipular cualquier tipo de archivo. Las tcnicas de archivo binarios permiten leer o cambiar cualquier byte de un archivo. Son herramientas extremadamente potentes, pero como toda herramienta potente debe manejarse con cuidado Entre otras caractersticas, a las tcnicas de archivo binario no les preocupa los caracteres EOF intercalados (Control+Z = Chr$(26)) que pueda tener un archivo. Ejemplo Open NombreArchivo for Binary as #NumeroArchivo. Instrucciones para manejar archivos OPEN: reserva un espacio del buffer para la data que mover entre el programa y los archivos. La estructura es: OPEN filespec FOR {Append|Binary|Input|Outuput|Random} As #filenumber Por ejemplo: OPEN "C:\Windows\AddrBook.ini" FOR Input As #1 Filespec: Es la localizacin de archivo en el que se trabajar, incluyendo usualmente el drive y path. "C:\Windows\AddrBook.ini" {Append| Binary| Input| Outuput| Random} El programador tiene que seleccionar uno. Binary y Random se utiliza para archivos binarios y aleatorios. Append, Input y Output son usados con archivos secuenciales. Un archivo secuencial no puede ser abierto para leer y escribir simultaneamente. Output es usado para escribir en el archivo. Input es usado para leer del archivo. Append es usado para colocar data al final de un archivo exitente. #filenumber: es necesario asignar un nmero al archivo. El nmero puede estar en el rango de #1 a #511 y es usado por Visual Basic para identificar el archivo. CLOSE: para cerrar un archivo. La estructura es: CLOSE #filenumber Por ejemplo: CLOSE #1

WRITE: envia data del programa al archivo secuencial. La estructura es: WRITE #filenumber, [OutputList] Por ejemplo: WRITE #1, UserName, UserCompany, SerialNumber WRITE es la operacin opuesta al INPUT. Las expresiones en el OutputList son separadas por comas. WRITE inserta comillas y comas a la data que envia al archivo. INPUT: lee data del archivo. La estructura es: INPUT #filenumber, InputList Por ejemplo: INPUT #1, UserName, UserCompany, SerialNumber Declaracin y asignacin de archivos La declaracin de un archivo con tipo se efecta con la ayuda de las palabras reservadas file of. El procedimiento de asignacin es idntico al utilizado anteriormente. Ejemplo: Type datos = record clave : integer; nombre : string[30]; puesto : string[20]; sueldo : real; estado : boolean; {true activo,false baja lgica} end; Var archivo:file of datos;

begin Assign(archivo,'empleado.dat'); SISTEMA DE MANEJO DE ARCHIVOS. Tiene las siguientes funciones: Controla los datos en almacenamiento secundario [ ] Proporciona al usuario una abstraccin de cmo se manipulan los datos internamente. [ ] Proporciona independencia de E/S con los dispositivos [ ] Soporte de comparticin, proteccin, recuperacin de archivos y posibles cadas del sistema. [ ] Transmisin de datos de memoria principal a secundaria.[ ] Los archivos de una empresa pueden almacenarse en diferentes dispositivos. Todos los archivos se pueden almacenar por medio de directorios, que no son otra cosa ms que tablas de smbolos de archivo, los directorios se pueden utilizar de dos formas: DIRECTORIO DE NIVEL NICO O DIRECTORIO PLANO Con este mtodo, se almacenan todos los archivos en un solo nivel, este mtodo en sistemas donde el volumen de archivos no es grande.[ ] DIRECTORIO JERARQUICO Los archivos son almacenados por medio de directorios, esta clasificacin se de acuerdo a la conveniencia del usuario o de la empresa. [ ] .La estructura tiene una forma de rbol con raz, este mtodo es el ms utilizado debido a que la revisin o bsqueda se realiza de forma sencilla. Para accesar a los archivos que se almacenan en un sistema jerrquico, el usuario debe indicar el o los directorios que se deben recorrer para localizar el archivo deseado, a esto se le denomina ruta de acceso del archivo. La ruta de acceso puede ser de dos formas: Ruta absoluta.- Este tipo de ruta de acceso inicia siempre con una diagonal invertida [ ] C:\Edit c:\SOS\sistemas\report.txt Ruta relativa.- Este tipo de ruta de acceso realiza la bsqueda del archivo en el directorio de trabajo actual, si el archivo no se localiza aqu, el S.O. lo

buscar en los directorios especificados en el PATH de un archivo con extensin .BAT. C:\Edit report.txt OPERACIONES GENERALES QUE SE REALIZAN SOBRE UN ARCHIVO. Las operaciones generales que se realizan son: Creacin. Escritura de todos sus registros. Consulta. Lectura de todos sus registros. Actualizacin. Insercin supresin o modificacin de algunos de sus registros Clasificacin. Reubicacin de los registros de tal forma que queden ordenados segn determinados criterios. Borrado. Eliminando total del archivo, dejando libre el espacio del soporte que ocupaba. ORGANIZACIN DE LOS ARCHIVOS. Los archivos se encuentran organizados lgicamente como una secuencia de registros de varias longitudes diferentes. Los archivos de registros de longitud fija: son los que almacenan la informacin en los archivos mediante un encabezado y luego se introducen uno a uno los registros ubicados en posiciones consecutivas. Los registros de longitud variable: es el almacenamiento de registros de varios tipos en un archivo y permite uno o ms campos de longitudes variables y dichos campos pueden ser repetidos. La longitud de los registros debe estar definida correctamente para poder leer y escribir de forma efectiva. ENFOQUES GENERALES PARA LA ORGANIZACIN DE ARCHIVOS. Los enfoques son: 1. - Enfoque de acceso secuencial: Se refiere al procesamiento de los archivos de acuerdo con el orden especifico. Ejemplo archivo secuenciales y de texto. 2. - Enfoque de acceso Directo Permite recuperar registros individuales sin leer otros registros del archivo, ejemplos archivos indizados.

ARCHIVOS SECUENCIALES. Se refiere al procesamiento de los registros, no importa el orden en que se haga, para eso los registros estn organizados en forma de una lista y recuperarlos y procesarlos uno por uno de principio a fin. Rudimentos de los archivos Secuenciales; dependiendo del dispositivo de almacenamiento utilizado el archivo se puede mostrar el usuario como si fuera un sistema secuencial. Al finalizar un archivo secuencial se denota con una marca de fin de archivo. (End end-of-file) El usuario de un archivo secuancial puede ver los registros en un orden secuancial simple. La nica forma de recuperar registros es comenzar al principio y extraerlos en el orden contemplado. Cuestiones de programacin; la manipulacin de los archivos se hace en el contexto de la programacin en un lenguaje por procedimientos de alto nivel. Estos lenguajes tienden a expresar la manipulacin de archivos mediante subrutinas que se definen como parte del lenguaje formal o se incluyen como extensiones del lenguaje en una biblioteca estndar. La mayor parte de los lenguajes por procedimiento de alto nivel cuenta con caractersticas que ayudan a detectar la marca de fin de archivo. -ARCHIVOS DE TEXTO. Tambin conocidos como (Slream File) son utilizados para almacenar documentos que consisten en texto; En ellos, cada registro es un solo smbolo o cdigo de control. El leer estos archivos recibimos la informacin en orden secuencial en el que aparece cuando lo vemos en un monitor. Los archivos de texto son una secuencia de lneas separadas por marcas de fin de lnea. Rudimentos de los archivos de textos; El usuario escribe los archivos de textos mediante un procesador de palabras que le permitir almacenar la informacin pero no estrictamente en forma secuencial. El procesador tambin nos permite desplazarnos por todo el bloque de informacin y permitirnos realizar modificaciones. Mientras el usuario avance rpidamente en la lectura de registro lograra ver mas archivos.

Cuestiones de programacin; Casi todos los entornos de programacin por procedimientos de alto nivel cuentan con subrutinas para manipular los archivos de texto. Estas subrutinas pueden formar parte de la definicin formal del lenguaje o que se ofrezca en biblioteca como extensiones del mismo. ARCHIVOS INDIZADOS. Es la aplicacin de incluir ndices en el almacenamiento de los archivos; de esta forma nos ser ms fcil buscar algn registro sin necesidad de ver todo el archivo. Un ndice en un archivo consiste en un listado de los valores del campo clave que ocurren en el archivo, junto con la posicin de registro correspondiente en el almacenamiento masivo. Fundamento de los ndices a.- La colocacin de un listado al inicio del archivo: para la identificacin del contenido. b.- La presentacin de un segundo ndice: para reflejar la informacin de cada punto principal del ndice anterior. c.- La actualizacin de los ndices: Cuando se insertan y eliminan archivos, es preciso actualizar los ndices para evitar contratiempos actualizando un archivo. d.- La organizacin de un ndice: Nos evita examinar archivo por archivo para recuperar algn registro buscado; por lo tanto ahorraramos tiempo si tenemos una adecuado organizacin de los ndices. Cuestiones de Programacin Algunos lenguajes de alto nivel cuentan con subttulos para manipular los archivos de un registro indizado. Valindose de las subrutinas es posible escribir programas sin tener que preocuparse por la estructura real del sistema de ndices que se aplique. ARCHIVOS DISPERSOS. Tambin llamados (Hashed Files) representan un sistema de almacenamiento de archivos que solo ofrece acceso directo, y permiten calcular la posicin de un registro en el almacenamiento masivo. Rudimentos de los archivos dispersos. El usuario debe dividir el rea de almacenamiento asignando al archivo en varias secciones llamadas cubetas para poder ingresar los datos.

La distribucin de la informacin en las cubetas es problemtica debido a que la estructura de los archivos es dispersa. Dentro de los archivos se presentan colisiones de informacin debido al agrupamiento de los registros ingresados. Cuestiones de programacin. Casi ninguno de los lenguajes de programacin por procedimientos en la actualidad ofrece implantaciones directas de archivos dispersos; esto es debido a las cuestiones dependientes de la aplicacin implicadas en el diseo de estos archivos. -MEDIDAS DE UTILIZACIN DE LOS ARCHIVOS. Para utilizar un archivo debemos tener en cuenta: 1. - ndice de Volatilidad; Un archivo es voltil cuando tiene un alto porcentaje de adiciones y supresiones debido al ingreso o eliminacin de registros respecto al numero promedio de registros que haya en el archivo. 2. - ndice de Actividad; Un archivo es activo cuando tiene un alto porcentaje de utilidad sea de actualizacin o consulta en un periodo de tiempo fijo respecto al numero promedio de registro que se encuentran en el archivo. El ndice de actividad suele emplearse para saber si un archivo puede explotarse como una organizacin secuencial o relativa. Archivos de acceso directo (con tipo) Los archivos tipeados (con tipo), tambin llamados archivos binarios, contienen datos de tipo simple o estructurado, tales como integer, real , record, etc., excepto otro tipo de archivos. Los archivos con tipos estn estructurados en elementos o registros (record) cuyo tipo puede ser cualquiera. A los elementos de estos archivos se accede directamente, al no situarse stos en posiciones fsicamente consecutivas, sino en posiciones lgicas. Esta es la razn por la cual se les denomina archivos de acceso aleatorio o directo. Los elementos de los archivos aleatorios son de igual tamao y el trmino acceso directo significa que es posible acceder directamente a un elemento con solo especificar su posicin DEFINICIONES. Los ms utilizados en el desarrollo del tema son: Archivo (Fichero): Conjunto de informacin estructurada en unidades de acceso denominada registro.

Registros. Estructura de datos formada por uno o ms elementos denominados "Campos" y estos pueden estar compuestos a su vez por "subcampos". Claves: Se denomina a un campo especial del registro que sirve para identificarlo Bloque: Es la cantidad de informacin que se transfiere en cada operacin de lectura o escritura sobre un archivo. Campo: Es cada uno de los diferentes datos que constituyen un registro lgico. http://www.monografias.com/trabajos7/arch/arch.shtml

Unidad 6. Mdulos
6.1 Diferencia entre Funciones y Procedimientos.

Funciones versus procedimientos


Similitudes 1. La definicin de ambos aparece en la seccin de subprogramas de la parte de declaraciones de un programa y consiste en una cabecera, una parte de declaraciones y una parte de instrucciones seguida por un punto y coma. 2. Ambos son unidades de programa independientes. Los parametros, constantes y variables declarados en una funcin o procedimiento son locales; solamente son accesibles dentro del subprograma. 3. Cuando se llama a una funcin o a un procedimiento, el nmero de los parmetros reales debe ser el mismo que el nmero de los parmetros formales, y los tipos deben coincidir, con una excepcin: se puede asociar un parmetro real de tipo entero con un parmetro formal por valor de tipo real. Diferencias 1. Los procedimientos se llaman mediante instrucciones de llamada a procedimientos. Las funciones se llaman usando sus nombres en expresiones. 2. La cabecera de una funcin debe incluir un identificador de tipo que especifique el tipo del resultado. No se asocia ningn valor con el nombre de un procedimiento y, por tanto, tampoco ningn tipo. 3. En los procedimientos, los valores se devuelven a travs de parmetros por variable. El valor de una funcin se devuelve mediante su nombre.

http://www.ucm.es/info/dsip/clavel/courses/ip0203/node68.html

6.2 Activacin / Invocacin Procedimientos


Declaracin de funciones 1 Sinopsis

de

Funciones

La declaracin ( 4.1.2) da a conocer la funcin al compilador, de forma que a partir del punto de declaracin, ya se pueden realizar invocaciones a la misma. A su vez, la definicin estar en algn otro punto del programa, tal vez en una librera externa (en forma ya compilada) o en otro mdulo de programa (como texto fuente). Una funcin puede ser declarada varias veces en un mismo programa, y las declaraciones pueden aparecer en cualquier orden; en un fichero fuente o en varios, pero en cualquier caso antes de su uso, es decir: antes de cualquier invocacin a la funcin [5]. Adems de declarar el nombre de la funcin y el tipo devuelto (por defecto se supone int ) se declaran tambin el tipo de los parmetros. 2 La declaracin tiene la siguiente sintaxis: [extern] <tipo-devuelto> nombre-funcion () 2a [extern] <tipo-devuelto> nombre-funcion (<tipo>, ...) 2b [extern] <tipo-devuelto> nombre-funcion (<tipo> <parametro>, ... ) 2c 2.1 Ejemplos: extern int funcion1 (); argumento extern int funcion1 (void); anterior funcion2 (char, int); que devuelve int int funcion2 (char, int); anterior char funcion3 (char c, int i); parmetros 2.2 Comentario // no acepta ningn // mejor que la // por defecto supone // mejor que la // incluye nombres de

El especificador <tipo-devuelto> es opcional; por defecto se supone int, as que las declaraciones que siguen son equivalentes [4]: int func (<tipo> <parmetro>, ...) func (<tipo> <parmetro>, ...) Nota: Los compiladores MS Visual C++ y Borland C++ admiten que ciertos especificadores opcionales acompaen a la declaracin de funciones y otros objetos. Tales especificadores son de utilidad en circunstancias especficas ( 4.4.1b). 3 Declaraciones Recuerde que las declaraciones deben realizarse antes que cualquier uso de la funcin. A su vez las definiciones pueden estar en cualquier sitio, aunque en algunos casos pueden existir excepciones (sustitucin inline 4.4.6b). Las declaraciones de funciones tienen un nombre especfico: se denominan prototipos ; el primero de los anteriores (2a ) es vlido, aunque desaconsejado (herencia del C); es el denominado estilo clsico Kernighan & Ritchie; el segundo (2b ), y tercero (2c ), son los aceptados en C++ [1]. Nota: Es importante resaltar que en la declaracin de parmetros no est permitido incluir funciones, es decir: las funciones no pueden pasar como argumentos a otras funciones [6]. Sin embargo C++ dispone de recursos cuando esto es necesario: Pasar un puntero ( 4.2.4) o una referencia ( 4.2.3) a la funcin. El viejo estilo K&R tiene la desventaja de no permitir al compilador comprobar el nmero y tipo de los argumentos utilizados en las llamadas a la funcin. Este problema fue eliminado con la introduccin de los prototipos que utilizan la forma completa [2], en la que se especifica el nmero y tipo de cada argumento aceptado por la funcin. El compilador usa estos datos para comprobar la validez de las llamadas a la funcin y como se ilustra en el ejemplo, es capaz, en su caso, de realizar dentro de ciertos lmites, un modelado de tipo ("Casting") de los argumentos para garantizar que coinciden con el tipo esperado. Nota: El mecanismo anterior, permite al compilador efectuar una comprobacin de tipos de los argumentos que pasan y del valor devuelto. Los lenguajes en los que no se realizan estas comprobaciones, se denominan de dbilmente tipados ("Weakly typed"), tienen la desventaja de que no conocen exactamente el tipo de cdigo que ejecutarn. Supongamos que se tiene el siguiente cdigo: extern long lmax(long v1, long v2); funcion() { int limit = 32; [ [ // prototipo

char ch = 'A'; long mval; mval = lmax(limit, ch); funcion. }

// Llamada a la

Puesto que se dispone de un prototipo para la funcin lmax, este programa convierte los parmetros limit y ch a long (utilizando las reglas estndar de asignacin), antes de colocarlos en la pila para la llamada a lmax. Si no hubiese existido el prototipo, limit y ch hubieran sido puestos en la pila como entero y carcter respectivamente, en cuyo caso, los valores pasados a limit no hubieran coincidido con el tamao y/o contenido esperados por esta, originando problemas ( 4.4.6 Llamadas a funciones y conversin de argumentos). 3.1 La inclusin del especificador opcional extern, sirve para indicar al compilador que la definicin de la funcin se encuentra en otro fichero distinto del actual. En caso contrario dicha definicin debe encontrarse en algn lugar del fichero (si es que existen llamadas a dicha funcin). Es decir, si aparece el siguiente trozo de cdigo: int alfa (int deg, int min, int sec); // declaracin de alfa ... int gr; gr = alfa( x, y, z); // uso de alfa la definicin de alfa debe estar en algn sitio del fichero que contiene dichas instrucciones, en caso contrario el compilador devolver un error: Unresolved external 'alfa()' referenced from ....OBJ. Es importante recordar que las funciones tienen mbito global y que, sus declaraciones (prototipos) aunque suelen estar al principio (inmediatamente despus de las directivas de preprocesado), pueden aparecer en cualquier parte del fichero. Ponerlas al principio tiene la ventaja de que sus nombres sean conocidos en la totalidad del fichero, con lo que pueden ser invocadas desde cualquier punto -desde cualquier otra funcin, incluso main()- sin tener que declarar un prototipo dentro de cada funcin que las invoque.

4 Prototipos de funciones Los prototipos juegan un rol importante en la programacin C++; sirven tambin para clarificar y documentar el cdigo, sobre todo si los nombres de las variables son significativos. Por ejemplo, la funcin strcpy tiene dos parmetros: una cadena fuente y una destino, la cuestin es: Cual es cual? char *strcpy(char* dest, const char* source);

Si se incluye un identificador en el parmetro de un prototipo, solo es utilizado para los posibles mensajes de error relativos a tal parmetro sin ningn otro efecto. De hecho, los identificadores (nombres) de los parmetros suelen ser largos y descriptivos en los prototipos, mientras que en las definiciones suelen ser abreviados, sin que, en este aspecto, tengan que haber coincidencia entre ambos (ver reglas de mbito para los identificadores de parmetros en prototipos de funciones 4.1.3). Como puede deducirse de estas palabras, esto significa que en realidad los nombres de los argumentos no son imprescindibles en los prototipos; solo son necesarios los tipos de los parmetros. Es decir: El prototipo de la funcin anterior podra perfectamente ser sustituido por: char *strcpy(char*, const char*); Un declarador de funcin con la palabra void entre parntesis: func(void);, indica que la funcin no acepta ningn parmetro; es equivalente a la expresin como func();, que tambin declara una funcin sin parmetros. 4.1 Prototipos y ficheros de cabecera: Es costumbre que los prototipos de las funciones incluidas en las libreras del lenguaje se agrupen en ficheros especficos, los denominados ficheros de cabecera, que son ficheros de texto (en realidad ficheros fuente 1.4) en los que se agrupan todas las declaraciones que se utilizan en la librera. Nota: En realidad, los ficheros de cabecera no solo incluyen los prototipos y declaraciones de las funciones, tambin las declaraciones de las estructuras, macros ( 4.9.10b) y clases ( 4.11.2a) utilizadas. Por otra parte, tambin es frecuente que los programadores C++ construyan sus propias libreras que acompaan a las que vienen preconstruidas en el lenguaje. Para ello se agrupan en ciertos mdulos aquellas funciones o clases ms frecuentemente utilizadas. Estos mdulos son compilados y enlazados de una forma especial de forma que no se obtiene un ejecutable, sino una librera de las que existen varios tipos ( 1.4.4a). En cualquier caso, sean libreras preconstruidas en el lenguaje o de fabricacin propia, los prototipos de las funciones incluidas en tales libreras se agrupan en ficheros de cabecera. Las que vienen con el lenguaje se localizan en el directorio \Include. Las de fabricacin propia se deben mantener en otro directorio separado del anterior. Puesto que es imprescindible incluir en cada fichero fuente la declaracin de cada funcin antes de que pueda ser utilizada , el hecho de tener agrupadas las declaraciones en un fichero de cabecera es de gran utilidad, porque solo es preciso incluir una directiva include ( 4.9.10g) al principio de cada fuente para tener la seguridad de que todos los prototipos estarn presentes. De otro modo tendra que escribirlos manualmente en cada fuente en que usara funciones de la librera.

En la documentacin que acompaa a toda librera se indica siempre, junto con un ejemplo de uso, el nombre del fichero de cabecera que contiene los prototipos de las funciones utilizadas en la librera. Sin embargo, en ocasiones, cuando no se tiene a mano un buen manual de uso, o existe la sospecha de una errata en el mismo, puede ser til echar un vistazo al fichero de cabecera en que se incluye el prototipo de la funcin, ya que contiene bastante informacin sobre su uso; tipo y nmero de parmetros, valor devuelto, etc. Nota: Se ha llegado a afirmar que los ficheros de cabecera contienen toda la informacin necesaria para usar las libreras de cualquier tipo. Aunque desde luego pueden ser de gran ayuda, la afirmacin es un poco exagerada. En lo que respecta a las funciones, los prototipos contienen en realidad toda la gramtica de su invocacin, pero poco o nada sobre la "funcionalidad".

5 Nmero variable de argumentos Normalmente los prototipos de funciones declaran un nmero fijo de parmetros (que puede ser ninguno). Para las funciones que pueden aceptar un nmero variable de parmetros (tales como printf), el prototipo puede terminar en puntos suspensivos (...). Esta elipsis indica que la funcin puede ser invocada con diferentes tipos de argumentos en diferentes ocasiones. Los puntos pueden colocarse al final de una sublista de parmetros de conocidos, por ejemplo: func(int *count, long total, ...); Por supuesto, esta forma de prototipo reduce la comprobacin que puede efectuar el compilador; los parmetros fijos son comprobados en tiempo de compilacin, y los variables son pasados sin comprobacin [3]. 6 Ejemplos A continuacin algunos ejemplos adicionales de prototipos y declaraciones de funciones. Obsrvese que para mayor concisin, en todas ellas se han omitido los nombres de los parmetros formales (que como hemos indicado, son opcionales en los prototipos): f(); /* En C, sin datos sobre los parametros, el estilo clsico K&R. Devuelve int */ f(); // En C++, f no recibe argumentos. Devuelve int. int f(void); // f devuelve int, no recibe argumentos. int p(int,long); /* p devuelve int, acepta dos parmetros: El primero un int, el segundo un long */ [

int __pascal q(void); /* q funcin Pascal, devuelve int, no recibe parmetro */ int printf(char *format,...); /* Devuelve int; un parmetro fijo, puntero a carcter, despus cualquier nmero de argumentos adicionales de tipo desconocido */ char* f(int) // funcin que devuelve puntero a carcter, acepta un int. int* f(int) // funcin que devuelve puntero a int, acepta int. struct str f(int) // funcin que devuelve estructura str acepta un int. int (*f (int))(int); /* funcin que acepta un entero y devuelve un puntero a funcin que acepta un int y devuelve un entero */ int (*(*f())[10])(); /* funcin que no recibe argumentos, devuelve un puntero a un array de 10 punteros a funcin que devuelven enteros */ int f(struct S* Sptr); /* funcin que recibe como argumento un puntero a una estructura y devuelve int */ int (B::* getptr())(); /* funcin que no recibe argumentos, devuelve un puntero a funcin miembro de la clase B que no recibe argumentos y devuelve un int */

7 Polimorfismo Aparte de estas tareas de comprobacin y modelado de tipos, en realidad el objetivo principal de incluir en la declaracin de funciones una descripcin detallada del valor devuelto y de los parmetros aceptados, es permitir lo que se llama sobrecarga (de funciones). Esto significa que dentro del mismo mbito puedan definirse varias funciones con nombres idnticos pero distintos parmetros y por supuesto distintas definiciones. Ms tarde, el compilador ser capaz de saber a cual de ellas nos estamos refiriendo, precisamente analizando los parmetros que pasamos a la funcin. Por ejemplo, en C++ est permitido el siguiente trozo de cdigo: int alfa (int deg, int min, int sec); de alfa void alfa (int deg); de alfa int alfa (char n); de alfa ... n = alfa('c'); alfa-3 // declaracion-1 // declaracion-2 // declaracion-3 // invocacin de

el compilador conoce que, en este caso, la invocacin se refiere a la tercera declaracin de la funcin alfa, precisamente por el argumento que estamos utilizando. Nota: Las funciones main, WinMain y LibMain no pueden ser sobrecargadas. Ejemplo:
extern "C" void WinMain(int, char*, char*); void WinMain(int, short, char*, char*); // Error!!

http://www.zator.com/Cpp/E4_4_1.htm

Invocacin de funciones y conversin de argumentos 1 Sinopsis Las invocacin de funciones se realiza colocando el nombre de la funcin y los argumentos actuales en el mismo orden que los parmetros formales correspondientes. Ejemplo: void funcion (int x, char c); ... int z = 12; char ch = 'Z'; funcion(ch, z); // Error: orden de argumentos cambiado !! funcion(z, ch); // Ok: invocacin con orden de argumentos correcto Recordemos que la sintaxis del lenguaje permite tambin la invocacin de funciones a travs de punteros a funciones ( 4.2.4b) e incluso de referencias ( 4.2.3), aunque esto ltimo sea menos frecuente. Cuando las funciones son miembros de clases la invocacin sigue una sintaxis especial ( 4.11.2e). En estos casos incluso existen operadores especiales para invocarlas a travs de sus punteros ( 4.9.16). 2 Evaluacin de argumentos La gramtica C++ permite utilizar expresiones como argumentos en la invocacin de funciones. Estas expresiones son evaluadas, y sus posibles efectos laterales tienen efecto, antes que la funcin sea cargada en la pila ( 4.4.6b). Sin embargo, tales prcticas son en general desaconsejadas pues dan lugar a cdigo difcil de leer. Ejemplo: int x foo (int x) { return x+2; } ... int main() {

int n = 3; cout << "foo -> " << foo(n++) << endl; cout << "foo -> " << foo(++n) << endl; ... } Salida: foo ->5 foo ->7 Hay que advertir que el orden de evaluacin de los argumentos es indefinido (depende del compilador), por lo que no es recomendable utilizar expresiones que dependan del orden de evaluacin de los parmetros. Ejemplo: int x foo (int x, int y) { return x + y; } ... int main() { int n = 3; cout << "foo -> " << foo(n++, n) << endl; ... } En estas condiciones es imposible precedir si la salida ser 7 u 8. 3 Conversin de argumentos A continuacin de la evaluacin, los valores resultantes de las expresiones son convertidos automticamente a los mismos tipos que los declarados para los parmetros formales. Ejemplo (suponiendo la definicin del caso anterior): cout << foo(x + 3.5); // -> 8

3.1 Cuando no se ha declarado previamente un prototipo de la funcin, C++ realiza una invocacin a la funcin convirtiendo la totalidad de los argumentos segn las reglas de Conversiones aritmticas estndar ( 2.2.5). En cambio, si existe un prototipo de funcin en el mbito, C++ convierte los argumentos al tipo declarado para los parmetros. 3.2 Cuando un prototipo incluye puntos suspensivos (...), el compilador convierte todos los argumentos (si los hay) como en cualquier otro caso hasta la elipsis, despus conforma todos los dems parmetros (que han sido declarados variables) segn las reglas usuales para argumentos de funciones que no tienen prototipo. 3.3 Si existe un prototipo, el nmero de argumentos debe coincidir con los declarados (a menos que existan puntos suspensivos). El tipo de los argumentos tambin debe coincidir, pero solo hasta el punto en que una asignacin pudiera realizar legalmente una conversin (del tipo realmente

pasado al tipo esperado). Tambin existe el recurso de hacer una conversin explcita ("cast") para convertir un argumento en un tipo que sea aceptable por el prototipo ( 4.9.9 Modelado de tipos). 4 En C++ los parmetros son pasados por valor, lo que significa que existen copias locales de los argumentos formales, estas copias locales son variables locales de la funcin llamada. La nica excepcin es el caso de las matrices. Cuando se utiliza una matriz como argumento en la llamada a una funcin, el valor pasado es un puntero (a la direccin de memoria del principio de la matriz). Ejemplo: #include <iostream.h> void fun1(char* str) { carcter cout << str << endl; } void fun2(char str[]) { caracteres cout << str << endl; } int main() { ====================== char ch[10] = "Hola mundo"; fun1(ch); fun2(ch); } Salida: Hola mundo Hola mundo Observe que el compilador acepta con total naturalidad que ch es un puntero a carcter en la invocacin func1(ch), y una matriz de caracteres en func2(ch). La razn es que en ambos casos, el compilador supone que ch es un puntero a carcter (en el ejemplo, al primer elemento de ch[], una matriz de caracteres), lo que coincidira con la definicin de func1, y que en la definicin de func2, char str[] es tomado como char* str. 5 Cuando se desea que la funcin llamada pueda alterar el valor de las variables de la funcin que la invoca, los argumentos actuales utilizados son punteros a las variables respectivas en la funcin invocante. A su vez la funcin invocada debe declarar el parmetro como un puntero y acceder a la variable indirectamente a travs de l. En el ejemplo que sigue deseamos que la funcin func pueda alterar el valor de la variable x. Observe que pasamos un puntero a dicha variable, y como func trata el argumento recibido p como tal puntero: // recibe puntero a

// recibe matriz de

//

{ int x = 10; int* ptr = &x; func(ptr); } ... void func (int* p) { *p = 3 * (*p); } // pasamos puntero a x // ahora x = 30 // p es declarado como puntero // y tratado como tal puntero!!

6 Recordar que C++ tambin permite pasar los argumentos por referencia (Paso de argumentos 4.4.5). 7 Ms sobre conversin de parmetros En la lista de argumentos de invocacin de funciones es posible incluir sentencias de asignacin, aunque sea una prctica desaconsejable, pues da lugar a cdigo difcil de interpretar y en ocasiones sin mucho sentido. Por ejemplo, en C++ es vlido el siguiente cdigo que compila sin problema: #include <iostream.h> void fun (char* p, int n) { for (int i = 1; i <= n ; i++) cout << p << i << endl; } void main() { // ============= char* pt1 = "Hola, que tal!! "; char* pt2; int x; fun(pt2 = pt1, x =5); // desaconsejado !! } Salida: Hola, Hola, Hola, Hola, Hola, que que que que que tal!! tal!! tal!! tal!! tal!! 1 2 3 4 5

http://www.zator.com/Cpp/E4_4_6.htm

Declaracin de funciones
La declaracin de una funcin tiene la siguiente forma :
function Nombre (p1,p2,...):tipo {declaraciones locales y subprogramas} begin

<cuerpo de la funcin> Nombre := valor de la funcin end; p1,p2,... lista de parmetros formales tipo tipo de dato del resultado que devuelve la funcin

Ejemplos :
function verifica : boolean ; { Funcin sin parmetros formales} function cambia(Var valor_1, valor_2: real):real; function potencia( base, exponente : real ):real;

http://www.itlp.edu.mx/publica/tutoriales/pascal/u6_6_2_1.h tml

Invocacin de funciones
Las funciones se invocan de la siguiente manera : <nombre_funcin> (parmetros_locales) ;

donde : parmetros_locales es una lista de variables y/o constantes separadas por comas. La existencia de parmetros_locales depender de que existan parmetros formales en la declaracin de la funcin. Por ejemplo, resolvamos el problema de cacular la raz cuadrada de un nmero, utilizando el algoritmo de Newton: x(i+1) = x(i) + 0.5 ( a/x(i) -x(i) ) La codificacin del programa sera :
Program Raiz_cuadrada; {El siguiente programa calcula la raz cuadrada de un nmero} Uses Crt; Var raiz, numero : real; {Declaracin de la funcin raiz_cuad} function raiz_cuad( a : real ) : real ; Var c,x : real ; begin x := 1E-9 ;

c := 1.0 ; while Abs (c-x)>1E-9 do begin c := x ; x := x + 0.5 * ( a/x -x ) end; raiz_cuad := x {El resultado se asigna a nombre_funcin} end; begin ClrScr; Write('La raz cuadrada de : '); ReadLn(numero) ; raiz:=raiz_cuad(numero); {Invoca a la funcin raiz_cuad} WriteLn ; WriteLn('Es igual a : ',raiz:6:8); ReadKey; ClrScr end.

http://www.itlp.edu.mx/publica/tutoriales/pascal/u6_6_2_2.h tml
Procedimientos. Un procedimiento es un subprograma que realiza una tarea especfica. Puede recibir cero o ms variables de entrada y teniendo tambin cero o ms variables de salida. Un procedimiento est compuesto de un grupo de sentencias a las que se asigna un nombre (identificador) y constituye una unidad de programa. La tarea asignada al procedimiento se ejecuta siempre que en el programa principal se encuentra el nombre del procedimiento. Declaracin de un procedimiento. Al igual que cualquier otro identificador, todos los procedimientos se deben declarar dentro del cuerpo del programa. La declaracin de un procedimiento no indica a la computadora que ejecute las instrucciones dadas, sino que indica a la computadora cules son estas instrucciones y dnde estn localizadas cuando sea necesario. formato 1 void nombreproc(void) { declaracin de variables locales; cuerpo del procedimiento; } formato 2 void nombreproc(lista parmentros formales) { declaracin de variables locales; cuerpo del procedimiento; } nombreproc Identificador vlido.

lista parmetro formales Parmetros formales del procedimiento; sirven para pasar informacin al procedimiento y/o devolver informacin del procedimiento a la unidad de programa que le invoca.

Llamada al procedimiento. Los procedimientos se llaman dentro de un programa o de otro procedimiento directamente por su nombre, de acuerdo a los formatos 1 y 2. formato 1 nombreproc(); formato 2 nombreproc(lista parmetros actuales); La sentencia nombreproc inicia la ejecucin del procedimiento nombreproc; despus que ha terminado la ejecucin, se ejecuta la sentencia que sigue a la llamada al procedimiento.

Funciones. Las funciones son los bloques constructores de C y el lugar donde se da toda la actividad del programa. La forma general de una funcin es: especificador_de_tipo nombre_de_la funcin(lista de parmetros) { cuerpo de la funcin } El especificador_de_tipo especifica el tipo de valor que devuelve la sentencia return de la funcin. El valor puede ser cualquier tipo vlido. Si no se especifica ningn tipo, el compilador asume que la funcin devuelve como resultado un entero. La lista de parmetros es la lista de nombres de variables separados por comas con sus tipos asiciados que reciben los valores de los argumentos cuando se llama a la funcin. Una funcin puede no tener parmetros en cuyo caso la lista de parmetros contiene slo la palabra clave void. La sentencia return La sentencia return tiene dos usos importantes. Primero, fuerza una salida inmediata de la funcin en que se encuentra. O sea, hace que la ejecucin del programa vuelva al cdigo que llam a la funcin. En segundo lugar, se puede utilizar para devolver un valor. Vuelta de una funcin. Hay dos formas en las que una funcin puede terminar su ejecucin y volver al sitio en que se llam. La primera ocurre cuando se ha ejecutado la ltima sentencia de la funcin y, conceptualmente, se encuetra la llave } del final de la funcin. ( La llave realmente no aparece en el cdigo objeto, por supuesto, pero se puede pensar como si as fuera.) Por ejemplo, esta funcin sencillamente imprime una cadena invertida en la pantalla: void imp_inversa(char *s) { register int t; for(t=strlen(s)-1; t>-1; t--) printf("%c", s[t]); } Valores devueltos. Todas las funciones, excepto aquellas de tipo void, devuelven un valor. Este valor se especifica explcitamente en la sentencia return. Si una funcin no es especificada como void y si no se especifica un valor de vuelta, entonces el valor devuelto por la funcin queda tcnicamente indefinido. Mientras que una funcin no se declare como void, puede ser usada como operando en cualquier expresin vlida de C. Por tanto, cada una de las siguientes expresiones es vlida en Turbo C: x = potencia(y); if(max(x,y)>100) printf("mayor"); for(c=getchar(); isdigit(c); ) ...; Sin embargo, una funcin no puede ser el destino de una asignacin. Como: intercambio(x, y) = 100; /* Esto esta MAL!*/

Lo que devuelve main() Cuando se usa una sentencia return en main(), el programa devuelve un cdigo de terminacin al proceso de llamada (que generalmente es el sistema operativo). El valor devuelto debe ser un entero. Pasa muchos sistemas operativos, incluyendo DOS y OS/2, un valor de vuelta de 0 indica que el programa ha terminado normalmente. Todos los dems valores indican que se ha producido algn tipo de error. Argumentos de funciones. Si una funcin va a usar argumentos, debe declarar variables que acepten los valores de los argumentos. Estas variables se llaman parmentros formales de la funcin. Se comportan como otras variables locales dentro de la funcin, crendose al entrar en la funcin y destruyndose a salir. Como muestra la siguiente funcin, la declaracin de parmetros aparece despus del nombre de la funcin y antes de la llave de apertura: /* devuelve 1 si c es parte de la cadena cad; 0 de otro modo */ est_en(char *cad, char c) { while(*cad) if(*cad==c) return 1; else cad++; return 0; }

http://www.umsanet.edu.bo/programacion/sim(INF121)/tecnicas_de_diseno.htm

6.3 Uso de Funciones Parmetros.

Procedimientos

con

Procedimientos con parmetros


Los parametros formales son un tipo especial de variables en un procedimiento a las que se pueden pasar valores desde el exterior del procedimiento. Los parametros formales se declaran en la cabecera del procedimiento. Los parmetros que pueden recibir valores pero que no pueden devolverlos reciben el nombre de parmetros por valor o parmetros de entrada. Los parmetros que pueden recibir y devolver valores reciben el nombre de parmetros por variable o parmetros de entrada/salida. Los procedimientos que usan parmetros requieren una cabecera distinta de aquellos que no lo hacen. A los procedimientos que usan parmetros se les llama mediante una instruccin de llamada a procedimiento, que no slo especifica el nombre del procedimiento sino tambin los valores pasados al procedimiento.

http://www.ucm.es/info/dsip/clavel/courses/ip0203/node63.html

Parmetros por valor o de entrada


Son procedimientos que usan parmetros que pueden recibir valores de otras unidades de programa pero que no pueden devolverlos. Cabecera

Sintaxis:
PROCEDURE

nombre ( declaracin-parm-formales ); es una palabra reservada; nombre es el nombre de un procedimiento; declaracin-parm-formales declara los parmetros del procedimiento.
PROCEDURE

donde:
o o o

Las declaraciones de los parmetros formales por valor tienen la forma lista-parmetros : tipo donde lista-parmetros es una nica variable o una lista de variables separadas por comas y tipo esp su tipo; estas declaraciones se separan mediante punto y coma. Objetivo: Da nombre al procedimiento y declara sus parmetros.

Parte de declaraciones o Como en los procedimientos simples. Parte de instrucciones o Como en los procedimientos simples. Instruccin de llamada Sintaxis: nombre ( lista-parmetros-reales ); donde: nombre es el nombre de un procedimiento; lista-parmetros-reales es una nica expresin o una lista de expresiones separadas por comas. Objetivo: Llama el programa nombrado. Se suspende la ejecucin de la unidad de programa actual, se pasan los valores de los parmetros reales a los correspondientes parmetros formales y comienza la ejecucin del procedimiento. Cuando finaliza la ejecucin del procedimiento, la ejecucin de la unidad de programa original contina con la instruccin
o o

siguiente a esta instruccin de llamada a procedimiento. o Antes de que se llame un procedimiento con parametros, sus parmetros formales estn indefinidos. o En el momento de la llamada, se asocian posiciones de memoria con sus parmetros por valor, y se copian los valores de los parmetros reales correspondientes en dichas posiciones de memoria. o Tras la ejecucin del procedimiento, los parmetros por valor vuelven de nuevo a estar indefinidos: cualquier valor que tuvieran durante la ejecucin del procedimiento se ha perdido y no se devuelve a la unidad de programa que llam al procedimiento. Programa Conversin de moneda--versin 2.

Combina en un nico procedimiento con parametros de valor los procedimientos simples ConvertirPesetasEuros y ConvertirEurosPesetas del programa ConvertirMoneda1. Para ello, el programa principal lee un cdigo que indica el tipo de moneda a convertir y la cantidad de dinero, y comparte esta informacin con el procedimiento. Permite tambin convertir varias cantidades y calcular la cantidad total convertida.

PROGRAM ConvertirMoneda2( input, output ); {********************************************************************* ** Entrada (teclado): Mes, dia y anyo actuales, un entero indicando el tipo de moneda, y varias cantidades monetarias. Objetivo: Convertir cantidades monetarias en pesetas a euros y viceversa, calculando el total de las cantidades. Salida (pantalla): Instrucciones al usuario, las cantidades monetarias, la fecha de las operaciones, y el total de las cantidades. ********************************************************************** **} CONST EuroPeseta = 166.386; {paridad euro-peseta} VAR MesActual, {mes actual} DiaActual, {dia actual} AnyoActual, {anyo actual} CodigoMoneda : integer; {indica el tipo de la moneda a ser convertida} Dinero, {cantidad monetaria a convertir} Total : real; {total de las cantidades} PROCEDURE MostrarInstrucciones; {----------------------------------------------------------------------Objetivo: Salida (pantalla): Mostrar las instrucciones al usuario. Instrucciones para usar el programa.

----------------------------------------------------------------------} BEGIN writeln( 'Este programa convierte pesetas a' ); writeln( 'euros y viceversa,' ); writeln( 'y calcula la cantidad total.'); writeln( 'Introduzca 0 para indicar que se han procesado todas', ' las cantidades,' ); writeln; writeln( 'Introduzca 1 para convertir pesetas a euros' ); write( ' 2 para convertir euros a pesetas: ' ) END {MostrarInstrucciones}; PROCEDURE Convertir( Codigo : integer; {codigo de moneda} Cantidad: real ); {cantidad monetaria} {---------------------------------------------------------------------Acepta: Codigo, Cantidad. Objetivo: Convertir una cantidad monetaria a otro sistema monetario. Salida (pantalla): Cantidad monetaria equivalente. -----------------------------------------------------------------------} BEGIN write( 'Es equivalente a ' ); IF Codigo = 1 THEN writeln((1/ EuroPeseta) * Cantidad:4:2, ' euros' ) ELSE writeln(round(EuroPeseta * Cantidad):1, ' pesetas' ) END {Convertir}; BEGIN {**********************programa principal**************************} write( 'Introduzca el dia, mes y anyo actuales: ' ); readln( DiaActual, MesActual, AnyoActual ); MostrarInstrucciones; readln( CodigoMoneda ); Total := 0; write( 'Introduzca cantidad (0 para terminar): ' ); readln( Dinero ); WHILE Dinero > 0 DO BEGIN Convertir( CodigoMoneda, Dinero ); Total := Total + Dinero; write( 'Introduzca cantidad (0 para terminar): ' ); readln( Dinero ) END {WHILE}; writeln( '*** FECHA DE LA OPERACION: ', DiaActual:1, '-', MesActual:1, '-', AnyoActual:1 ); IF CodigoMoneda = 1 THEN writeln( 'La cantidad total convertida es ', round(Total):1,' pesetas' ) ELSE

writeln( 'La cantidad total convertida es ', Total:4:2,' euros' ) END {programa principal}.

Ejemplos de ejecucin
Introduzca el dia, mes y anyo actuales: 12 02 2002 Este programa convierte pesetas a euros y viceversa, y calcula la cantidad total. Introduzca 0 para indicar que se han procesado todas las cantidades, Introduzca 1 para convertir pesetas a euros 2 para convertir euros a pesetas: 1 Introduzca cantidad (0 para terminar): 1000 Es equivalente a 6.01 euros Introduzca cantidad (0 para terminar): 500 Es equivalente a 3.01 euros Introduzca cantidad (0 para terminar): 1500 Es equivalente a 9.02 euros Introduzca cantidad (0 para terminar): 0 *** FECHA DE LA OPERACION: 12-2-2002 La cantidad total convertida es 3000 pesetas

Parmetros por variable o de entrada-salida


Son procedimientos que usan parmetros que pueden recibir y devolver valores a otras unidades de programa Cabecera o Como en los procedimientos con parmetros por valor, pero la declaracin de los parmetros formales por variable aparece precedida por la palabra reservada VAR para especificar que son parmetros por variable y no por valor:
VAR

lista-parmetros : tipo

donde cada lista-parmetros es un nica variable o una lista de variables separadas por comas y tipo especifica su tipo, y estas declaraciones aparecen separadas por punto y coma.

Parte de declaraciones o Como en los procedimientos simples. Parte de instrucciones o Como en los procedimientos simples. Instruccin de llamada o Como en los procedimientos con parmetros por valor, pero, en el momento de la llamada, no se crean nuevas posiciones de memoria para los parmetros formales por variable; en lugar de ello, a los parmetros por variables se les asocia las posiciones de memoria ya existentes de los parmetros reales correspondientes.

Programa Conversin de moneda--versin 3.

PROGRAM ConvertirMoneda3( input, output ); {********************************************************************* ***** Entrada (teclado): Mes, dia y anno actuales, un entero indicando el tipo de moneda, y varias cantidades cantidades. Objetivo: Convertir cantidades monetarias en pesetas a euros y viceversa, calculando el total de cantidades. Salida (pantalla): Instrucciones al usuario, las cantidades monetarias convertidas, la fecha de las operaciones, y el total de las cantidades. ********************************************************************** *****} CONST EuroPeseta = 166.386; {paridad euro-peseta} VAR MesActual, {mes actual} DiaActual, {dia actual} AnnoActual, {anno actual} MonedaCasa, {indica el tipo de moneda de la casa} CodigoMoneda : integer; {indica el tipo de la moneda a ser convertida} Dinero, {cantidad monetaria a convertir} DineroConv, {cantidad equivalente en el otro sistema monetario} Total : real; {total de las cantidades} PROCEDURE MostrarInstrucciones; {--------------------------------------------------------------------Objetivo: Salida (pantalla): Mostrar las instrucciones al usuario. Instrucciones para usar el programa.

----------------------------------------------------------------------} BEGIN writeln( 'Este programa convierte pesetas a' ); writeln( 'euros y viceversa, y calcula la cantidad total.'); writeln( 'Introduzca 0 para indicar que se han procesado todas ', 'las cantidades.' ); writeln; writeln( 'Introduzca 1 para convertir pesetas a euros'); writeln( ' 2 para convertir euros a pesetas. '); writeln( 'Recuerde 1 es el codigo para los euros'); write( ' 2 es el codigo para las pesetas: ') END {MostrarInstrucciones};

PROCEDURE Convertir2(

Codigo : integer; {tipo de moneda} Cantidad : real; {cantidad a convertir} VAR CantEquiv : real ); {cantidad equivalente} {---------------------------------------------------------------------Acepta: Codigo, Cantidad.

Objetivo: Convertir una cantidad monetaria a otro sistema monetario. Devuelve: CantEquiv. Salida (pantalla): CantEquiv. -----------------------------------------------------------------------} BEGIN write( 'Es equivalente a ' ); IF Codigo = 1 THEN BEGIN CantEquiv := round(EuroPeseta * Cantidad); writeln( round(CantEquiv):1, ' pesetas' ) END {IF} ELSE BEGIN CantEquiv := (1/ EuroPeseta) * Cantidad; writeln( CantEquiv:4:2, ' euros' ) END {ELSE} END {Convertir2}; BEGIN {**********************programa principal**************************} write( 'Introduzca el dia, mes y anno actuales: ' ); readln( DiaActual, MesActual, AnnoActual ); MostrarInstrucciones; readln( MonedaCasa ); Total := 0; write( 'Introduzca tipo de moneda y cantidad (0 0 para terminar): ' ); readln( CodigoMoneda, Dinero ); WHILE Dinero > 0 DO BEGIN IF CodigoMoneda <> MonedaCasa THEN BEGIN Convertir2( CodigoMoneda, Dinero, DineroConv ); Total := Total + DineroConv END {IF} ELSE Total := Total + Dinero; write( 'Introduzca tipo de moneda y cantidad ', '(0 0 para terminar): ' ); readln( CodigoMoneda, Dinero ) END {WHILE};

writeln( '*** FECHA DE LA OPERACION: ', DiaActual:1, '-', MesActual:1, '-', AnnoActual:1 ); IF MonedaCasa = 1 THEN writeln( 'La cantidad total convertida es ', Total:4:2,' euros' ) ELSE writeln( 'La cantidad total convertida es ', round(Total):1,' pesetas' ) END {programa principal}.

Ejemplos de ejecucin
Introduzca el dia, mes y anno actuales: 13 02 2002

Este programa convierte pesetas a euros y viceversa, y calcula la cantidad total. Introduzca 0 para indicar que se han procesado todas las cantidades. Introduzca 1 para convertir pesetas a euros 2 para convertir euros a pesetas. Recuerde 1 es el codigo para los euros 2 es el codigo para las pesetas: 2 Introduzca tipo de moneda y cantidad (0 0 para terminar): 1 6.01 Es equivalente a 1000 pesetas Introduzca tipo de moneda y cantidad (0 0 para terminar): 2 1000 Introduzca tipo de moneda y cantidad (0 0 para terminar): 0 0 *** FECHA DE LA OPERACION: 13-2-2002 La cantidad total convertida es 2000 pesetas Introduzca el dia, mes y anno actuales: 13 02 2002 Este programa convierte pesetas a euros y viceversa, y calcula la cantidad total. Introduzca 0 para indicar que se han procesado todas las cantidades. Introduzca 1 para convertir pesetas a euros 2 para convertir euros a pesetas. Recuerde 1 es el codigo para los euros 2 es el codigo para las pesetas: 1 Introduzca tipo de moneda y cantidad (0 0 para terminar): 2 1000 Es equivalente a 6.01 euros Introduzca tipo de moneda y cantidad (0 0 para terminar): 1 6.01 Introduzca tipo de moneda y cantidad (0 0 para terminar): 0 0 *** FECHA DE LA OPERACION: 13-2-2002 La cantidad total convertida es 12.02 euros

Reglas para la asociacin de parmetros

Las siguientes reglas resumen la relacin entre los parmetros formales y los reales: 1. Debe haber el mismo nmero de parmetros reales que formales. 2. Los tipos de los parmetros formales y reales asociados deben concordar; sin embargo, un parmetro real de tipo integer puede estar asociado con un parmetro por valor de tipo real, pero no con un parmetro formal por variable de tipo real. 3. Un parmetro real asociado con un parmetro formal por variable debe ser una variable; no puede ser una constante o una expresin.

Funciones

Pascal proporciona varias funciones predefinidas como sqr y round. En Pascal tambin se pueden utilizar funciones definidas por el usuario. Como los procedimientos, las funciones se definen en la seccin de subprogramas de un programa y consisten en o cabecera, o parte de declaraciones y o parte de instrucciones. Cabecera

Sintaxis:
FUNCTION

nombre ( declaracin-parm-formales ) tipo-del-resultado ;

donde:

es una palabra reservada; nombre es un identificador vlido de Pascal; declaracin-parm-formales declara los parmetros de la funcin; tipo-del-resultado es el tipo del valor de la funcin.
FUNCTION

La declaracin de los parmetros formales tiene la misma forma que la cabecera de un procedimiento con parmetros. Si la funcin no tiene parmetros, se omiten la declaracin de parmetros formales y los parntesis, de forma que la cabecera tiene la forma simple FUNCTION nombre : tipo-del-resultado ; Objetivo: Da nombre a la funcin y declara sus parmetros y el tipo del resultado.

Parte de declaraciones o Como en los procedimientos. Parte de instrucciones o Como en los procedimientos , con la exigencia adicional de que al menos una de las instrucciones debe asignar un valor al identificador que nombra la funcin. Instruccin de llamada o No hay instruccin de llamada a una funcin. Para llamar a una funcin se usa su nombre en una expresin, como en las funciones Pascal predefinidas.

Programa
PROGRAM CalcularTablaDeCubos( input, output ); {********************************************************************* Entrada (teclado): Un rango de numeros reales y un tamanyo de paso. Objetivo: Calcular una tabla de cubos de los numeros especificados en un rango. Salida (pantalla): Indicaciones al usuario, una tabla de numeros

y sus cubos. *********************************************************************} VAR Inferior, Superior, Paso, Numero : real; {limites del rango de valores} {incremento} {argumento actual}

FUNCTION Cubo( x : real ) : real; {-------------------------------------------------------------------Acepta: Objetivo: Devuelve: El numero real x. Calcular el cubo (tercera potencia) de x. El cubo de x.

---------------------------------------------------------------------} BEGIN Cubo := x * sqr(x); END {Cubo}; BEGIN {****************** programa principal ******************} write( 'Introduzca el rango de valores ', 'y el tamanyo del incremento: ' ); readln( Inferior, Superior, Paso ); writeln; writeln( 'numero su cubo' ); writeln( '====== =======' ); Numero := Inferior; WHILE Numero <= Superior DO BEGIN writeln( Numero:5:2, Cubo(Numero):12:4 ); Numero := Numero + Paso END {WHILE} END {programa principal}.

Ejemplo de ejecucin
Introduzca el rango de valores y el tamanyo del incremento: 1 4 0.5 numero ====== 1.00 1.50 2.00 2.50 3.00 3.50 4.00 su cubo ======= 1.0000 3.3750 8.0000 15.6250 27.0000 42.8750 64.0000

Programa
PROGRAM CalificarAptoNoApto( input, output ); {********************************************************************* * Entrada (teclado): Una linea divisoria entre apto y no apto y las medias de varios estudiantes. Objetivo: Determinar las calificaciones apto-no apto de

cada estudiante. Salida (pantalla): Indicaciones al usuario, y calificaciones. } *********************************************************************

VAR Media, {media del estudiante} LineaAN : real; {linea divisoria entre apto y no apto} Calificacion : char; {calificacion apto/no apto asignada} FUNCTION CalificacionAN( Media, {puntuacion media} LineaAN : real ) {linea divisoria} :char; {--------------------------------------------------------------------Acepta: Valores reales Media y LineaAN. Objetivo: Calcular la calificacion: 'A' si Media >= LineaAN y 'N' si Media < LineaAN. Devuelve: La calificacion apto-no apto ---------------------------------------------------------------------} BEGIN IF Media >= LineaAN THEN CalificacionAN:= 'A' ELSE CalificacionAN := 'N' END {CalificacionAN}; BEGIN {**************** programa principal *****************} write( 'Introduzca la linea divisoria apto/no apto: ' ); readln( LineaAN ); writeln( 'Introduzca una media negativa para terminar el programa' ); writeln; write( 'Media del estudiante: ' ); readln( Media ); WHILE Media >= 0 DO BEGIN Calificacion := CalificacionAN( Media, LineaAN ); writeln( ' La calificacion es ', Calificacion ); write( 'Media del estudiante: ' ); readln( Media ) END {WHILE} END {programa principal}.

Ejemplo de ejecucin
Introduzca la linea divisoria apto/no apto: 60 Introduzca una media negativa para terminar el programa Media del estudiante: 90 La calificacion es Media del estudiante: 60 La calificacion es Media del estudiante: 59.5 La calificacion es Media del estudiante: 40 La calificacion es Media del estudiante: -1 A A N N

http://www.ucm.es/info/dsip/clavel/courses/ip0203/node67.html

Unidad 7. Graficacin
Una computadora moderna es en gran medida un conjunto de interruptores electrnicos, los cuales se utilizan para representar y controlar el recorrido de datos denominados dgitos binarios (bits, un "0" o un "1"). El desarrollo del transistor fue uno de los inventos ms importantes para la revolucin de la computadora personal. Este fue inventado en 1948 por los ingenieros John Bardeen, Walter Brattain Y William Shockley de los laboratorios Bell. Funciona como un interruptor de estado slido, que sustituy al bulbo que era mucho menos adaptable por su tamao y consumo de energa. La conversin a transistores provoc la tendencia hacia la miniaturizacin que contina hasta el da de hoy. En 1959, los ingenieros de Texas Instruments inventaron el CI (circuito integrado o chip), un semiconductor que contiene mas de un transistor sobre la misma base y que conecta los transistores sin necesidad de cables. El primer CI tena seis transistores. En comparacin, el microprocesador Pentium Pro de Intel, que se usa en muchos de los sistemas mas avanzados, tiene mas de 5.5 millones de transistores, y la memoria cach integral que incluyen algunos de estos procesadores contiene hasta 32 millones de transistores adicionales! Actualmente, muchos chips tienen transistores que pueden contarse en varios millones. Cmo se miden los avances tecnolgicos de las computadoras? Una computadora esta formada por dos componentes estructurales con el mismo nivel de importancia: - El equipo fsico (hardware): Por sus caractersticas constructivas (circuitos, arquitectura global del sistema, tecnologa electrnica). - Los programas con los que funciona (software): Por los programas bsicos con los que opera. Es decir, como se entabla comunicacin con ella (lenguajes, sistema operativo, interfaces). Lo cual significa que su grande avance debe considerarse en esas dos direcciones.

Desde la invencin de la primera computadora, estas han tenido un avance que se puede estudiar en trminos de "generaciones". Abarca desde los inicios de los aos 50 hasta los 60, y - Estaban construidas con electrnica de bulbos - Se programaban en lenguaje de mquina (nivel mas bajo de representacin de la informacin) Los programas son un conjunto de instrucciones para que la mquina efecte alguna tarea, y el lenguaje mas simple en el que puede escribir un programa es el lenguaje de mquina (porque el programa se escribirse con un conjunto de cdigos binarios). La primera generacin - 1947 ENIAC. Primera computadora digital electrnica. Fue una mquina experimental. No era programable como las computadoras actuales. Era un enorme aparato que ocupa todo el stano en la universidad de Pennsylvania. Tena 18,000 bulbos, consuma varios KW de potencia y pesaba algunas toneladas. Realizaba hasta cinco mil sumas por segundo. Fue echa por un equipo de ingenieros y cientficos encabezados por los doctores John W. Mauchly y J. Prester Eckert en la Universidad de Pennsylvania, en los Estados Unidos. - 1949 EDVAC. Primera computadora programable. Tambin fue un prototipo de laboratorio, pero ya inclua en s diseo las ideas centrales que conforman a las computadoras actuales. Incorporaba las ideas del doctor John von Neumann. - 1951 UNIVAC I. Primera computadora comercial. Los doctores Mauchly y Eckert fundaron la compaa Universal Computer (Univac ), y su primer producto fue esta mquina. El primer cliente fue la oficina del censo de Estados Unidos. - 1953 IBM 701. Para introducir los datos, estos equipos empleaban el concepto de tarjetas perforadas, que haba, sido inventada en los aos de la revolucin industrial (finales del siglo XVIII) por el francs Jacquard y perfeccionado por el estadounidense Hermand Hollerith en 1890. La IBM 701 fue la primera de una larga serie de computadoras de esta compaa, que luego se convertira en la nmero 1 por su volumen de ventas. - 1954 - IBM continu con otros modelos, que incorporaban un mecanismo de almacenamiento masivo llamado tambor magntico, que con los aos evolucionara y se convertira en disco magntico. Segunda generacin Estas computadoras ya no utilizaban bulbos, sino transistores, ms pequeos y consumen menos electricidad. La forma de comunicacin con estas nuevas

computadoras es mediante lenguajes mas avanzados que el lenguaje de mquina, llamados "lenguajes de alto nivel" o lenguajes de programacin. Esta segunda generacin duro pocos aos, porque hubo nuevos avances tanto en el hardware como en el software. Tercera generacin Esta nueva generacin fue inaugurada con la presentacin comercial de la llamada "serie 360"de IBM. IBM se dedic a los aspectos de ingeniera, comercializacin y mercadotecnia de sus equipos, y en corto tiempo la nocin de las computadoras sali de los laboratorios y las universidades y se instal como un componente imprescindible de la sociedad industrial moderna. Las computadoras de la tercera generacin tienen ventajas importantes, debido a dos factores fundamentales: - Estn hechas a base de agrupamientos de transistores miniaturizados en paquetes conocidos como circuitos integrados (C.I. o Chips) - Aunque se siguen programando en lenguajes de alto nivel, ahora un mtodo de comunicacin con el programador que resulta mas fcil de emplear que el anterior. Es decir, la electrnica de las computadoras de la tercera generacin (circuitos integrados) es ms compacta, rpida y densa que la anterior, y la comunicacin se establece mediante una interfaz (un intermediario) conocida como sistema operativo. Cuarta generacin El nacimiento de las microcomputadoras tuvo lugar en los Estados Unidos, a partir de la comercializacin de los primeros microprocesadores (Intel 8008,8080) a comienzos de la dcada de 1970. Durante la dcada de 1970 se impusieron dos tendencias: - Los sistemas Apple, - La PC de IBM: que comenz una explosin comercial masiva, con su introduccin, en 1981. Esta ltima mquina (basada en microprocesador Intel 8088) tenia caractersticas interesantes, sobre todo porque su nuevo sistema operativo estandarizado (MS-DOS, Microsoft Disk Operating System) tena una capacidad mejorada de graficacin, la hacan ms atractiva y ms fcil de usar. Existe una familia completa de sistemas de computadoras personales, que se conocen con las nomenclaturas XT, AT y PS/2.

- 1971 Microprocesador Intel 8008. Circuito de alta integracin que luego dara inicio a las microcomputadoras. - 1975 Aparece la microcomputadora Apple. Aparece el microprocesador Zilog Z80. Inicia el auge de la microcomputacin. - 1981 IBM lanza la computadora personal, luego conocida como PC-XT - 1984 IBM ofrece la computadora personal PC-AT, basada en el microprocesador Intel 80286. - 1988 IBM presenta la serie de computadoras personales PS/2, algunas de las cuales emplean el microprocesador 80386. Surge una gran cantidad de computadoras con ese y otros procesadores similares. - 1991 Microprocesador de muy alto rendimiento: Intel 80486, Motorola 68040, Sparc, tecnologa RISC, etc. Microprocesador Power PC (Performace Optimization With Enhanced RISC PC) resultado de alianza de Apple, IBM y Motorola. - 1993 Intel lanza al mercado el procesador 80586 conocido como Pentium.

7.1 7.2 7.3 7.4

Conceptos bsicos de grficas. Introduccin bsica de manejo de grficas. Uso de libreras para la realizacin de graficas. Graficacin de un punto y lneas rectas

Graficacin de puntos o formas


Activado el modo grfico, ya ser posible trazar lneas u otras formas geomtricas, graficar puntos o bien introducir Textos al plano grfico. A continuacin se describen algunos comandos cuyo uso es frecuente en actividades de graficado. Graficado de puntos PutPixel(X,Y,CdigoDeColor); Grafica, coloca un pixel en las coordenadas (X,Y) especificadas con el color indicado por el cdigo. Las coordenadas debern estar dentro del intervalo de coordenadas mnimas y mximas correspondientes al plano seleccionado. http://members.fortunecity.com/giselagonzalez/computacion/cap08231.html Graficado de Lneas

Line(X1,Y1,X2,Y2); Traza una lnea de las coordenadas (X1,Y1) a las coordenadas (X2,Y2). Utilizando el color y el estilo que estn activos. As como puede modificar el color, tambin puede modificar el estilo de trazado de lneas. LineRel(DeltaX,DeltaY); Traza una lnea desde la posicin actual del cursor hasta las coordenadas resultantes de incrementar X en DeltaX y Y en DeltaY. LineTo(X,Y); Traza una lnea desde la posicin actual del cursor hasta las coordenadas (x,Y); En los tres casos X y Y son datos o variables de tipo entero. Traza formas diversas A).- Crculos Circle(X,Y,r); Traza un crculo cuyo centro estar en las coordenadas (X,Y) y tendr un radio r. Tanto X y Y como r, son nmeros datos o variables enteras, delimitadas por las coordenadas mximas y mnimas del plano grfico. B).- Elipses Ellipse(X,Y,AnguloInicial,AnguloFinal,RadioX,RadioY); Traza una elipse o un arco elptico, X,Y son las coordenadas del centro; AmguloInicial y AnguloFinal , especificados en grados, corresponden al inicio y fin del segmento que se desee graficar. RadioX y RadioY representan los radios en cada una de las dos direcciones del plano. C).- Rectngulos Rectangle(X1,Y1,X2,Y2); Traza un rectngulo con vrtices opuestos (X1,Y1) y (X2,Y2). D).- Barras

Bar(Xinicial,Yinicial,Yfinal,Xfinal); Traza un rectngulo con el estilo y color de llenado especificados, iniciando en (Xinicial,Yinicial) y finalizando en (Yfinal,Xfinal) , considerados como vrtices opuestos. Bar(Xinicial,Yinicial,Yfinal,Xfinal,Espesor,CdigoBooleano); Traza una barra en 3 dimensiones, que inicia en las coordenadas /Xinicial,Yinicial) finaliza en Xfinal,Yfinal) con un espesor, en pixeles, definido. El cdigo booleano ser TRUE o FALSE. TRUE marca perfectamente los lados de la barra en tres dimensiones. E).- Rebanada de pie. PieSlice(X,Y,AnguloInicial,AnguloFinal,Radio); Traza una rebanada de pastel, rellena con el color activo. (X,Y) coordenadas del centro de la rebanada; AnguloInicial, AnguloFinal y Radio, en grados, delimitan el tamao de la rebanada. Desplazamiento del cursor dentro del plano grfico MoveRel(DeltaX,DeltaY); Desplazamiento relativo del cursor, de su posicin actual, tantos pixeles en X como en Y, segn los incrementos (o decrementos) DeltaX y DeltaY: MoveTo(X,Y); Desplazamiento absoluto del cursor a las coordenadas (X,Y). Escribiendo Textos dentro del plano grfico Para la escritura de textos dentro del plano grfico, dispone de 4 instrucciones complementarias que son las siguientes: A).- Definicin de tipo de letra, direccin de escritura (vertical u horizontal) y tamao del caracter. SetTextStyle(TipoDeLetra,Direccin,TamaoDeCaracter);

TipoDeLetra 0 DefaultFont 1 TriplexFont 2 SmallFont 3 SanSerifFont 4 GothicFont

Direccin 0 Horizontal (de izquierda a derecha) 0 Vertical (de abajo hacia arriba)

TamaoDeCaracter: Representa la razn de cambio en el tamao del caracter a escribir dentro del plano grfico. Si suministra el valor de 1, entonces la escritura ser con el tamao preasignado. Si teclea 2,3,..., aplicar ese factor para aumentar el tamao de cada caracter. B).- Cuando el caracter es desplegado en su espacio reservado, segn el tamao que haya seleccionado, es posible centrarlo a alinearlo a un extremo de dicho espacio. Para ello dispone de la instruccin: SetTextJustify(Horizontal,Vertical); Los valores de los parmetros son:

Horizontal 0 Alinea caracter a la derecha del punto 1 Centra texto 2 Alinea caracter a la izquierda del punto

Vertical 0 Caracter desplazado hacia arriba del punto 1 Centrado 2 Hacia abajo del punto

Esta alineacin o centrado es con respecto a las coordenadas en que se despliega el texto. C).- Escritura de Texto OutText('Texto o letrero'); Despliega texto a partir de las coordenadas en que est posicionado el cursor. D).- Escritura de texto

OutTextXY(X,Y,'Texto o letrero'); Despliega texto a partir de las coordenadas (X,Y) especificadas. Definiendo estilo para el graficado de lneas Antes de trazar una lnea puede definir un estilo de trazo con la siguiente instruccin: SetLineStyle(Estilo,PatrnDeLlenado,Grosor);

Estilo 0 Lnea Slida 1 Lnea con guiones sucesivos 2 Lnea con guiones sucesivos ms grandes que los anteriores PatrnDeLlenado: Utilice 0 Grosor 1 Ancho Normal 3 Triple Ancho Existen muchas ms instrucciones para graficado y es recomendable revisar en modo ayuda el contenido de la unidad GRAPH. http://www.fortunecity.com/campus/earlham/850/computacion/INDICE.html

7.5 Graficacin de Funciones Matemticas en el plano cartesiano.


En estas breves notas, desarrolladas por Juan-Antonio Infante y Jos Mara Rey, profesores del Departamento de Matemtica Aplicada de la Universidad Complutense de Madrid, se pretende dar un primer paso en el aprendizaje del uso de MATLAB. En lo que sigue, se supone que el usuario teclea lo que aparece en color rojo (de hecho, lo ptimo sera que el aprendiz de MATLAB reprodujera stos y parecidos ejemplos por s mismo) y precedido del smbolo >>, que hace el papel del prompt de la mquina. En color negro aparecer la respuesta de MATLAB a la instruccin tecleada. Los comentarios aparecern en color verde. Antes de comenzar, hagamos algunas consideraciones generales:

MATLAB distingue entre maysculas y minsculas. La comilla ' es la que, en un teclado estndar, se encuentra en la tecla de la interrogacin. Los comentarios deben ir precedidos por % o, lo que es lo mismo, MATLAB ignora todo lo que vaya precedido por el smbolo %. La ayuda de MATLAB es bastante til; para acceder a la misma basta teclear help. Es recomendable usarlo para obtener una informacin ms precisa sobre la sintaxis y diversas posiblidades de uso de los comandos.

A grandes rasgos, los temas aqu introducidos son:


Generalidades. Vectores y matrices. Operaciones con vectores y matrices. Variables lgicas. Polinomios. Derivadas y primitivas. Grficas de funciones. Programacin con MATLAB.

Los clculos que no se asignan a una variable en concreto se asignan a la variable de respuesta por defecto que es ans (del ingls, answer):
>>2+3 ans = 5

Sin embargo, si el clculo se asigna a una variable, el resultado queda guardado en ella:
>>x=2+3 x = 5

Para conocer el valor de una variable, basta teclear su nombre:


>>x x = 5

Si se aade un punto y coma (;) al final de la instruccin, la mquina no

muestra la respuesta...
>>y=5*4;

... pero no por ello deja de realizarse el clculo.


>>y y = 20

Las operaciones se evalan por orden de prioridad: primero las potencias, despus las multiplicaciones y divisiones y, finalmente, las sumas y restas. Las operaciones de igual prioridad se evalan de izquierda a derecha:
>>2/4*3 ans = 1.5000 >>2/(4*3) ans = 0.1667

Se pueden utilizar las funciones matemticas habituales. As, por ejemplo, la funcin coseno,
>>cos(pi) % pi es una variable con valor predeterminado 3.14159... ans = -1

o la funcin exponencial
>>exp(1) ans = 2.7183 % Funcin exponencial evaluada en 1, es decir, el nmero e

Adems de la variable pi , MATLAB tiene otras variables con valor predeterminado; ste se pierde si se les asigna otro valor distinto. Por ejemplo:
>>eps % psilon de la mquina. Obsrvese que MATLAB trabaja en doble precisin ans = 2.2204e-016

pero...
>>eps=7 eps = 7

Otro ejemplo de funcin matemtica: la raz cuadrada; como puede verse, trabajar con complejos no da ningn tipo de problema. La unidad imaginaria se representa en MATLAB como i o j, variables con dicho valor como predeterminado:
>>sqrt(-4) ans = 0+ 2.0000i

El usuario puede controlar el nmero de decimales con que aparece en pantalla el valor de las variables, sin olvidar que ello no est relacionado con la precisin con la que se hacen los clculos, sino con el aspecto con que stos se muestran:
>>1/3 ans = 0.3333 >>format long >>1/3 ans = 0.33333333333333 >>format decimales % Vuelve al formato estndar que es el de 4 cifras

Para conocer las variables que se han usado hasta el momento:


>>who Your variables are: ans eps x y

o, si se quiere ms informacin (obsrvese que todas las variables son arrays):


>>whos

Name ans eps x y

Size 1x1 1x1 1x1 1x1

Bytes 8 8 8 8

Class double array double array double array double array

Grand total is 4 elements using 32 bytes

Para deshacerse de una variable


>>clear y >>who Your variables are: ans eps x

Volver al ndice general

Para definir un vector fila, basta introducir sus coordenadas entre corchetes:
>>v=[1 2 3] v= 1 2 3 >>w=[4 5 6]; % Vector de 3 coordenadas

El operador ' es el de trasposicin (en realidad trasposicin y conjugacin):


>>w' ans = 4 5 6

Si queremos declarar un vector de coordenadas equiespaciadas entre dos dadas, por ejemplo, que la primera valga 0, la ltima 20 y la distancia entre coordenadas sea 2, basta poner:

>>vect1=0:2:20 vect1 = 0 2 4 6 8 10 12 14 16 18 20

Equivalentemente, si lo que conocemos del vector es que la primera coordenada vale 0, la ltima 20 y que tiene 11 en total, escribiremos:
>>vect2=linspace(0,20,11) vect2 = 0 2 4 6 8 10 12 14 16 18 20

A las coordenadas de un vector se accede sin ms que escribir el nombre del vector y, entre parntesis, su ndice:
>>vect2(3) ans = 4

y se pueden extraer subvectores, por ejemplo:


>>vect2(2:5) ans= 2 4 6 8

o,
>>vect1(:) ans= 0 2 4 6 8 10 12 14 16 18 20

Las matrices se escriben como los vectores, pero separando las filas mediante un punto y coma; as una matriz 3x3:
>>M=[1 2 3;4 5 6;7 8 9] M = 1 2 3

4 5 6 7 8 9 >>M' ans 1 4 2 5 3 6 = 7 8 9 % Tambin es una matriz 3x3 % Su traspuesta (su adjunta)

>>mat=[v;w;0 0 1] mat 1 2 4 5 0 0 = 3 6 1

A los elementos de una matriz se accede sin ms que escribir el nombre de la matriz y, entre parntesis, los respectivos ndices:
>>mat(1,3) matriz mat ans = 3 % Elemento en la primera fila y tercera columna de la

Tambin se puede acceder a un fila o columna completas,


>>mat(:,2) ans = 2 5 0 >>mat(2,:) ans = 4 5 6 % Su segunda fila % Segunda columna de mat

acceder a la matriz como si fuera una columna,


>>M(2:7) columna ans = 4 7 2 5 8 3 % Los elementos segundo a sptimo de la matriz como

o acceder a cualquiera de sus submatrices


>>mat(2:3,[1 3]) tercera y % Submatriz formada por los elementos que estn en % "todas" las filas que hay entre la segunda y la % en las columnas primera y tercera

ans = 4 6 0 1

Existen algunas matrices definidas previamente; por ejemplo, la matriz identidad,


>>eye(5) ans 1 0 0 1 0 0 0 0 0 0 = 0 0 1 0 0 % eye se pronuncia en ingls como I

0 0 0 1 0

0 0 0 0 1

la matriz nula,
>>zeros(3) ans 0 0 0 0 0 0 = 0 0 0

o la matriz cuyos elementos valen todos 1:


>>ones(4) ans 1 1 1 1 1 1 1 1 = 1 1 1 1

1 1 1 1

Se puede conocer el tamao de una matriz y la longitud de un vector:


>>size(mat) % Dimensiones de la matriz mat (nmero de filas y de columnas) ans = 3 3 >>size(v) ans =

1 3 >>length(v) % Longitud del vector (nmero de coordenadas) ans = 3

Existen comandos que permiten crear de forma sencilla matrices. Por ejemplo:
>>diag(v) ans 1 0 0 2 0 0 = 0 0 3 % Matriz diagonal cuya diagonal es el vector v

>>diag(diag(M)) % Matriz diagonal con la diagonal de M. La sentencia diag(M) da % el vector formado por la diagonal de la matriz M ans 1 0 0 5 0 0 = 0 0 9

>>diag(ones(1,4),1)+diag(ones(1,4),-1) % Matriz tridiagonal 5x5 con 0 en la diagonal % principal y 1 en la sub y superdiagonal ans 0 1 1 0 0 1 0 0 0 0 = 0 1 0 1 0

0 0 1 0 1

0 0 0 1 0

>>tril(M) % Matriz formada por la parte triangular inferior de M. ans 1 0 4 5 7 8 = 0 0 9

>>triu(M) % Matriz formada por la parte triangular superior de M. ans 1 2 0 5 0 0 = 3 6 9

Las funciones matemticas elementales estn definidas de forma que se pueden aplicar sobre arrays. El resultado es el array formado por la aplicacin de la funcin a cada elemento del array. As:

>>log(v) ans = 0 0.6931 1.0986 >>p=(0:0.1:1)*pi % Vector definido como el producto de un vector por un escalar p = Columns 1 through 7 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 Columns 8 through 11 2.1991 2.5133 2.8274 3.1416 >>x=sin(p) x = Columns 1 through 7 0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 Columns 8 through 11 0.8090 0.5878 0.3090 0.0000

Las operaciones habituales entre arrays (suma, resta y producto escalar de vectores; suma, resta, producto y potencia de matrices) se representan con los operadores habituales:
>>v,w v 1 w 4 = 2 3 = 5 6 % Producto escalar (producto de matrices 1x3 por 3x1) % Recordamos los valores de v y w

>>z=v*w' z = 32 >>Z=w'*v Z 4 5 6 = 8 12 10 15 12 18

% Producto de matrices 3x1 por 1x3 = Matriz 3x3

>>v*w

% Los vectores v y w no se pueden multiplicar

??? Error using ==> * Inner matrix dimensions must agree. >>mat mat = 1 2 3 % Recordamos el valor de la matriz mat

4 5 6 0 0 1 >>mat^2 ans = 9 12 18 24 33 48 0 0 1 % Matriz mat elevada al cuadrado

Tambin pueden efectuarse multiplicaciones, divisiones y potencias de arrays, entendindolas como elemento a elemento (como, de hecho, se realizan la suma y la resta). El operador utilizado para ellas es el habitual precedido por un punto; es decir:
>>v.*w % Vector formado por los productos de las respectivas coordenadas: % ans(i)=v(i)*w(i) ans = 4 10 18 >>w./v la % Vector formado por el cociente de cada coordenada de w entre % coordenada correspondiente de v: ans(i)=w(i)/v(i) ans = 4.0000 2.5000 2.0000 >>mat.^2 % Matriz cuyos elementos son los de mat elevados % al cuadrado: ans(i,j)=mat(i,j)^2 ans = 1 4 9 16 25 36 0 0 1

Finalmente, pueden calcularse determinantes:


>>det(mat) ans = -3

y resolverse sistemas de ecuaciones lineales con el verstil comando \:


>>mat\v' ans = 2.6667 -5.3333 3.000

Tambin existen variables lgicas que toman los valores 0 (falso) o 1 (verdadero) . Por ejemplo:
>>abs(v)>=2 coordenada % Vector lgico cuyas coordenadas valen 1 si la % correspondiente de v es >= 2 y 0 si no lo es

ans = 0 1 1 >>vector=v(abs(v)>=2) % Vector formado por la coordenadas de v que % verifican la desigualdad vector = 2 3 >>v2=[3 2 1] v2 = 3 2 1 >>logica=v==v2 es el % Asignacin de un valor lgico (el doble signo igual % igual lgico)

logica = 0 1 0 >>logic2=v~=v2 logic2 = 1 0 1 % Distinto (~ es el operador de negacin)

Se puede trabajar con polinomios: basta tener en cuenta que un polinomio no es ms que un vector. El orden de los coeficientes es de mayor a menor grado, por ejemplo:
>>p=[1 0 2 0 3] p = 1 0 2 0 3 >>q=[2 1 0] q = 2 1 0 % Polinomio 2*x^2+x % Polinomio x^4+2*x^2+3

MATLAB tiene funciones especficas para polinomios como:


>>polyval(p,-1) ans = % Evaluacin del polinomio x^4+2x^2+3 en x=-1

6 >>pro=conv(p,q) pro = 2 1 4 2 6 3 0 >>deconv(pro,p) ans = 2 1 0 >>roots(pro) ans = 0 0.6050+1.1688i 0.6050-1.1688i -0.6050+1.1688i -0.6050-1.1688i -0.5000 >>poly([i -i 1/2 pi]) % Polinomio mnico que tiene por races a los % nmeros i, -i, 0.5 y pi % Races del polinomio pro % Cociente entre pro y p; obviamente el resultado es q % Producto de los polinomios p y q

ans = 1.0000 -3.6416 2.5708 -3.6416 1.5708

Dentro del mdulo (toolbox) de matemtica simblica, se utiliza el programa de clculo simblico MAPLE. Con estas herramientas, se puede trabajar con funciones,
>>f='sin(x)' caracteres f = sin(x) % Funcin sin(x) definida mediante una cadena de

calcular derivadas,
>>diff(f) ans = cos(x) >>diff(f,2) ans = -sin(x) % Derivada segunda de f

o encontrar primitivas.
>>int('log(x)') % Primitiva de la funcin logaritmo

ans = x*log(x)-x >>diff('x*log(x)-x') % Comprobacin ans = log(x)

MATLAB tiene un gran potencial de herramientas grficas. Se pueden dibujar los valores de un vector frente a otro (de la misma longitud):
>>x=pi*(-1:0.1:1); >>y=x.*sin(x); >>plot(x,y) % Por defecto une los puntos (x(i),y(i)) mediante una poligonal

Como se ve, con pocos puntos la grfica tiene un aspecto demasiado lineal a trozos. Para "engaar" al ojo, basta tomar ms puntos.
>>x=pi*(-1:0.01:1); >>y=x.*sin(x); >>plot(x,y)

Tambin pueden dibujarse funciones. As:


>>fplot('sin(x)',[0 2*pi]) [0,2*pi] % Dibuja la funcin seno en el intervalo

>>hold on anteriores >>fplot('cos(x)',[0 2*pi]) funcin cos(x)

% Mantiene en la ventana grfica los dibujos

% Dibuja sobre la grfica anterior la

>>hold off anteriores

% Con esto olvida los dibujos % y dibuja en una ventana nueva % Dibuja la funcin x^2*sin(1/x)

>>fplot('x^2*sin(1/x)',[-0.05 0.05])

Tambin puede usarse el verstil comando ezplot (se lee como easy plot) que permite dibujar funciones,
>>ezplot('exp(x)') % Dibuja la funcin exponencial en un intervalo adecuado a la funcin

curvas en paramtricas,
>>ezplot('sin(t)','cos(t)',[0 pi])

e implcitas
>>ezplot('x^2 - y^2 - 1')

Tambin permite dibujar superficies. La forma ms sencilla es mediante el comando ezsurf,


>>ezsurf('sin(x*y)',[-2 2 -2 2])

aunque se pueden realizar grficas ms sofisticadas:


>>t=0:0.001:0.009; >>v=900:1025; >>[T V]=meshgrid(t,v); >>aux1=16*pi^2*(T.^2).*((V-918).^2).*((V-1011).^2); >>aux2=aux1+(2*V-1929).^2; >>w=T./aux2; >>z=35000000*w; >>surfl(t,v,z); % Este comando dibuja la superficie creada mediante las >>shading interp; % ordenes anteriores. Los siguientes sirven para modificar >>colormap(pink); % el dibujo obtenido >>rotate3d; % Sirve para girar la figura mediante el ratn

Para escribir un programa con MATLAB habr que crear un fichero que tenga extensin .m y contenga las instrucciones. Esto se puede hacer con cualquier editor de textos, pero tiene algunas ventajas usar el editor propio de MATLAB llamado medit. MATLAB trabaja con memoria dinmica, por lo que no es necesario declarar las variables que se van a usar. Por esta misma razn, habr que tener especial cuidado y cerciorarse de que entre las variables del espacio de trabajo no hay ninguna que se llame igual que las de nuestro programa (proveniente, por ejemplo, de un programa previamente ejecutado en la misma sesin), porque esto podra provocar conflictos. A menudo, es conveniente reservar memoria para las variables (por ejemplo, si se van a utilizar matrices muy grandes); para ello, basta con asignarles cualquier valor. Del mismo modo, si se est usando mucha memoria, puede ser conveniente liberar parte de ella borrando (clear) variables que no se vayan a usar ms. Un programa escrito en MATLAB admite la mayora de las estructuras de programacin al uso y su sintaxis es bastante estndar. En los siguientes ejemplos se muestra la sintaxis de algunas de estas estructuras (if, for, while,...). Ejemplo 1: Calcular la suma de los n primeros trminos de la sucesin 1, 2x,

3x^2, 4x^3, ... n=input('Cuntos trminos quieres sumar? '); x=input('Dame el valor del numero x '); suma=1; for i=2:n suma=suma+i*x^(i-1); end disp('El valor pedido es') disp(suma) Ejemplo 2: Decidir si un nmero natural es primo. n=input('Nmero natural que deseas saber si es primo '); i=2; primo=1; while i<=sqrt(n) if rem(n,i)==0 % Resto de dividir n entre i primo=0; break end i=i+1; end if primo disp('El nmero dado es primo.') else disp('El nmero dado no es primo.') disp('De hecho, es divisible por:') disp(i) end Ejemplo 3: Escribir un nmero natural en una base dada (menor que diez). n=input('Dame el nmero que quieres cambiar de base '); base=input('En qu base quieres expresarlo? '); i=1; while n>0 c(i)=rem(n,base); n=fix(n/base); % Parte entera de n/base i=i+1; end disp('La expresin en la base dada es:') i=i-1; disp(c(i:-1:1)) Por ltimo, tambin pueden programarse funciones. La primera instruccin de un fichero que contenga una funcin de nombre fun debe ser:

function [argumentos de salida]=fun(argumentos de entrada) Es conveniente que el fichero que contenga la funcin se llame como ella; as, la funcin anterior debera guardarse en el fichero fun.m; por ejemplo, si se desea programar una funcin que calcule, mediante el algoritmo de Euclides, el mximo comn divisor de dos nmeros naturales, basta escribir un fichero euclides.m cuyo contenido sea: function m=euclides(a,b) % Clculo del mximo comn divisor de dos nmeros naturales % mediante el algoritmo de Euclides if a<b c=b; b=a; a=c; end while b>0 c=rem(a,b); a=b; b=c; end m=a; Si, una vez escrito el fichero anterior, en el espacio de trabajo o en un programa se escribe la instruccin mcd=euclides(33,121) en la variable mcd se almacenar el valor 11. Las variables de una funcin son siempre locales. Por tanto, aunque en el seno de la funcin se modifiquen los argumentos de entrada, el valor de las variables correspondientes queda inalterado. Por ejemplo, en la funcin euclides.m se modifica el valor de los argumentos de entrada, pero, sin embargo: >>x=15; >>mcd=euclides(x,3); >>x x= 15 Si se pretende que las modificaciones de un argumento de entrada afecten a la variable correspondiente, deber situarse dicho argumento, adems, en la lista de argumentos de salida.

http://www.mat.ucm.es/~infante/matlab/notas.htm

7.6 Introduccin a la potencia grafica

CAPTULO 1
Un estudio de las grficas por computadora
Las computadoras se han convertido en una herramienta poderosa para producir imgenes en forma rpida y econmica. No existe ninguna rea en donde no sea posible aplicar grficas por compuadora con algn beneficio, por ello se ha generalizado la utilizacin de grficas por computadora. Hoy em da las grficas por computadora se utilizan de manera rutinaria en diversas reas, como en la ciencia, ingeniera, empresas, industria, gobierno, arte, entretenimiento, publicidad, educacin, capacitacin y presentaciones grficas. Hagamos un breve recorrido a travs de una galera de aplicaciones de las grficas.

1.1 DISEO ASISTIDO POR COMPUTADORA


Los mtodos de diseo asistido por computadora, que se conocen por lo general como CAD (computer assisted design), ahora se utilizan de forma rutinaria en el diseo de construcciones, automviles, aeronaves, embarcaciones, naves espaciales, computadoras, telas y muchos productos. En el caso de algunas aplicaciones de diseo, los objetos se despliegan primero en forma de armazn mostrando la forma general y sus caractersticas internas. Los despliegues del armazn permiten ver a los diseadores con rapidez los efectos de ajustes interactivos para disear formas. Regularmente, los paquetes de software de aplicaciones de CAD ofrecen al disea-dor un entorno con ventanas mltiples; estas diversas ventanas desplegables muestran secciones amplificadas de vistas de diferentes objetos. Los circuitos y las redes para comuncaciones, abastacemientos de agua y otros servicios pblicos se construyen a travs de la colocacin repetida de algunas formas grficas. Las formas usadas en un diseo representan los diversos componentes del circuito o de la red. Con el paquete de diseo se ofrecen formas estndar para circuitos elctricos, electrnicos y lgicos. Para otras aplicaciones, un diseador puede crear smbolos personali-zados empleados necesariamente para construir la red o el circuito. As, se disea el sistema colocando sucesivamente los componentes en el esquema, con el paquete de grficas ofreciendo de manera automtica las conexiones entre los componentes. Esto permite al diseador experimentar rpidamente con esquemas de circuitos alternativos para reducir al mnimo el nmero de componentes o el espacio para el sistema. Con frecuencia se utilizan las animaciones en las aplicaciones del CAD. Las anima-ciones en tiempo real que emplean despliegues de armazones en un monitor de video son tiles para probar el comportamiento de un vehculo o un sistema. Cuando no desplegamos objetos con superficies presentadas, pueden realizarse con rapidez los clculos correspon-dientes a cada segmento de la animacin para as crear un movimiento suave de tiempo real en la pantalla. Igualmente, los despliegues de armazones permiten al diseador ver el interior del vehculo y observar el comportamiento de los componentes internos durante el movimiento. Las animaciones en entornos de realidad virtual se utlizan para determinar la forma como influyen ciertos movimientos en los operadores de vehculos. Por ejemplo, el operador de un tractor con ayuda de un dispositivo montado sobre la cabeza que presenta una vista estereoscpica del cucharn del cargador frontal o del

retroexcavador, manipula los controles como si se encontrara en el asiento del tractor. Esto permite al diseador explorar diversas posiciones del cucharn o del retroexcavador que pudieran obstruir la visin del operador. Cuando los diseos de objetos estn completos o casi completos, se aplican modelos de iluminacin realista y presentaciones de superficies para producir despliegues mostrando la apariencia del producto final. Tambin se crean despliegues realistas para la publicidad de automviles y otros vehculos mediante efectos especiales de iluminacin y escenas de fondo. El proceso de manufactura tambin se asocia con la descripcin por computadora de objetos diseados para automatizar la construccin del producto. Por ejemplo, se puede convertir el esquema de un tablero de circuitos en una descripcin de los procesos individua-les necesarios para elaborar el esquema. Algunas partes mecnicas se frabican por medio de la descripcin de cmo se deben formar las superficies con herramientas. Luego, se ajustan las herramientas controladas de manera numrica para fabricar la parte de acuerdo con estos planos de construccin. Los arquitectos utilizan mtodos grficos interactivos para proyectar plantas arquitec-tnicas donde se muestra la disposicin de habitaciones, ventanas, escaleras, anaqueles, barras de cocina y otras caractersticas de la construccin. A partir del displiegue del plano de una construccin en un monitor de video, un diseador elctrico puede experimentar con instalaciones para cableado, conexiones elctricas y sistemas de alarma de incendios. Del mismo modo, aplicando paquetes para el esquema de instalaciones se determina la utilizacin del espacio en una oficina o en una planta de fabricacin. Despliegues realistas de diseos arquitectnicos permiten a los arquitectos y a sus clientes estudiar la apariencia de una construccin particular o de un grupo de ellas, como un campus universitario o un complejo industrial. Con los sistemas de realidad virtual, los diseadores pueden simular un "recorrido" por las habitaciones o alrededor de construccio-nes para apreciar mejor el efector general de un diseo particular. Adems de presentar despliegues de fachadas realistas, los paquetes de CAD para arquitectura ofrecen medios para experimentar con planos interiores tridimensionales y la uliminacin. Muchas otras clases de sistemas y productos se disean usando ya sea paquetes de CAD generales o software de CAD desarrollado en forma especial.

1.2 GRFICAS DE PRESENTACIN


Las grficas de presentacin, se utilizan a fin de producir ilustraciones para informes o con el propsito de crear diapositivas de 35 mm o transparencias para usarse con proyectores. Regularmente, las grficas de presentacin se emplean para resumir datos financieros, estadsticos, matemticos, cientficos y econmicos para informes de investiga-cin, informes administrativos, boletnes de informacin al consumidor y otros tipos de reportes. Como ejemplos comunes de las grficas de presentacin podemos citar las grficas de barras, grficas lineales, grficas de superficie, grficas de pastel y otros despliegues que muestran relaciones entre mltiples parmetros. Se pueden hacer despliegues tridimensiona-les de esquemas y grficas similares para proporcionar informacin adicional. En la administracin de proyectos se emplean grficas de tiempo y diagramas de redes de actividades para programar y supervisar el avance de proyectos.

1.3 ARTE POR COMPUTADORA

Los mtodos de grficas por computadora se utilizan en forma generalizada tanto en aplicaciones de bellas artes como en aplicaciones de arte comercial. Los artistas utilizan una variedad de mtodos computacionales, incluyendo hardware para propsitos especiales, programas artsticos de brocha de pintar del artista (como Lumena), otros paquetes de pintura (como PixelPaint y SuperPaint), software desarrollado de manera especial, paquetes de matemtica simblica (como Mathematica), paquetes de CAD, software de edicin electrnica de publicaciones y paquetes de animaciones que proporcionan los medios para disear formas de objetos y especificar movimientos de objetos. La idea bsica del programa paintbrush (brocha de pintar) permite a los artistas "pintar" imgenes en la pantalla de un monitor de video. En realidad, la imagen se pinta por lo general de manera electrnica en una tableta de grficas (digitalizador) utilizando un estilete, el cual puede simular diferentes trazos, anchuras de la brocha y colores. Los creadores de bellas artes emplean diversas tecnologas de computacin para producir imgenes. Con el propsito de crear pinturas el artista utiliza una combinacin de paquetes de modelado tridimensional, diagramacin de la textura, programas de dibujo y software de CAD. En un ejemplo de "arte metamtico" un artista utiliz una combinacin de funciones matemticas, procedimientos fractales, software de Mathematica, impresoras de chorro de tinta y otros sistemas con el fin de crear una variedad de formas tridimensiona-les y bidimensionales, al igual que pares de imgenes estereoscpicas. Otro ejemplo arte electrnico creado a partir de relaciones matemticas es la obra de un compositor que est diseada en relacin con las variaciones de la frecuencia y otros parmetros en una composi-cin musical para producir un video el cual integra patrones visuales y auditivos. Tambin se aplican estos mtodos en el arte comercial para crear logotipos y otros diseos, distribuciones de pgina que combinan texto y grficas, anuncios publicitarios por televisin y otras reas. Para muchas aplicaciones de arte comercial (y pelculas, al igual que otras aplicacio-nes), se emplean tcnicas fotorrealistas para presentar imgenes de un producto. Las animaciones tambin se utilizan con frecuencia en publicidad y los comerciales de televisin se producen cuadro por cuadro, donde cada cuadro del movimiento se presenta y graba como un archivo de imagen. Se simula el movimiento al mover ligeramente las posiciones de los objetos con respecto a las del cuadro anterior. Una vez presentados todos los cuadros de la secuencia de animacin, se transfieren a pelcula o se almacenan en un bfer de video para hacer una reproduccin. Las animaciones en pelcula requieren 24 cuadros por cada segundo de la secuencia de animacin. Si se reproduce en un monitor de video, se requieren de 30 cuadros por segundo. Un mtodo comn de grficas que se utilizan en muchos comerciales es la transformacin (morphing), donde se transforma un objeto en otro (metamorfosis). En televisin se ha empleado para transformar una lata de aceite en un motor de automvil, un automvil en un tigre, un charco en una llanta y el rostro de una persona en otro.

1.4 ENTRETENIMIENTO
Es muy comn utilizar mtodos de grficas por computadora para producir pelculas, videos musicales y programas de televisin. En ocasiones, se despliegan slo imgenes grficas y otras veces, se combinan los objetos con los actores y escenas en vivo. Por ejemplo, en una escena grfica creada para la pelcula Start Treck - The Wrath of Khan, se dibujan en forma de armazn el planeta y la nave espacial y se sonbrean con mtodos de presentacin para producir superficies slidas. Al igual que pueden aparecer personas en forma de armazn combinadas con actores y una escena en vivo. Los videos musicales aprovechan las grficas de muchas maneras, se pueden combinar objetos

grficos con accin en vivo, o se pueden utilizar tcnicas de procesamiento de imgenes para producir una transformacin de una persona o un objeto en otro (morphing).

1.5 EDUCACIN Y CAPACITACIN


A menudo, se utilizan como instrumentos de ayuda educativa modelos de sistemas fsicos, financieros y econmicos, los cuales se generan por computadora. Modelos de sistemas fsicos, sistemas fisiolgicos, tendencias de poblacin o equipo, pueden ayudar a los estudiantes a comprender la operacin del sistema. En el caso de algunas aplicaciones de capacitacin, se disean sistemas especiales, como los simuladores para sesiones de prctica o capacitacin de capitanes de barco, pilotos de avin, operadores de equipo pesado y el personal de control de trfico areo. Algunos simuladores no tiene pantallas de video; por ejemplo, un simulador de vuelo que slo tiene un panel de control como instrumento de vuelo. No obstante, la mayor parte de los simulado-res cuenta con pantallas grficas para la operacin visual.

1.6 VISUALIZACIN
Cientficos, ingenieros, personal mdico, analistas comerciales y otros con frecuencia necesitan analizar grandes cantidades de informacin o estudiar el comportamiento de ciertos procesos. Las simulaciones numricas efectuadas en supercomputadoras a menudo producen archivos de datos que contienen miles e incluso millones de valores de datos. De modo similar, cmaras va satlite y otras fuentes acumulan grandes archivos de datos ms rpido de lo que se pueden interpretar. El rastreo de estos grandes conjuntos de nmeros para determinar tendencias y relaciones es un proceso tedioso e ineficaz. Pero si se convierten los datos a una forma visual, es frecuente que se perciban de inmediato las tendencias y los patrones. Por lo regular, la produccin de representaciones grficas para conjuntos de datos y procesos cientficos de ingeniera y de medicina se conoce como visualizacin cientfica. El trmino visualizacin empresarial se emplea en relacin con conjuntos de datos que se asocian con el comercio, la industria y otras reas no cientficas. Existen muchas clases de conjuntos de datos y los esquemas de visualizacin efectivos dependen de las caractersticas de los datos. Una compilacin de datos contiene valores escalares, vectores, tensores de orden superior o cualquier combinacin de estos tipos de datos. Y los conjuntos de datos pueden ser bidimensionales o tridimensionales. La codifi-cacin de colores es slo una manera de visualizar un conjunto de datos. Las tcnicas adicionales incluyen trazos, grficas y diagramas de contorno, presentaciones de superficie y visualizacin de interiores de volumen. Adems, se combinan tcnicas de procesamiento de imgenes con grficas por computadora para crear muchas de las visualizaciones de datos. Las comunidades de matemticos, cientficos fsicos y otros utilizan tcnicas visuales para analizar funciones matemticas y procesos o slo con el propsito de crear representaciones grficas interesantes.

1.7 PROCESAMIENTO DE IMGENES


A pesar de que los mtodos empleados en las grficas por computadora y en el procesamiento de imgenes se traslapan, las dos reas realizan, en forma fundamental, operaciones distintas. En las grficas por computadora, se utiliza una computadora para crear una imagen. Por otro lado, en el procesamiento de imgenes se aplican tcnicas

para modificar o interpretar imgenes existentes, como fotografas y rastreos de televisin. Las dos aplicaciones principales del procesamiento de imgenes son (1) el mejoramiento de la calidad de la imagen y (2) la percepcin de la mquina de informacin visual, como se utiliza en la robtica. Para aplicar los mtodos de procesamiento de imgenes, primero digitalizamos una fotografa u otra imagen en un archivo de imagen. Entonces, se pueden aplicar mtodos digitales para reordenar partes de imgenes, para mejorar separaciones de colores o para aumentar la calidad del sombreado. Estas tcnicas se utilizan en gran medida en aplicaciones de arte comercial que implican el retoque y el reorden de secciones de fotogra-fas y otras obras de arte. Se emplean mtodos similares para analizar fotografas de la Tierra por satlite y fotografas de galaxias. Las aplicaciones mdicas tambin hacen uso importante de estas tcnicas de procesa-miento de imgenes para mejorar fotografas, en tomografas y simulacros de operaciones. La tomografa es una tcnica de fotografa por rayos X la cual permite el despliegue de vistas transversales de sistemas fisiolgicos. Tanto la tomografa computarizada (CT; computed tomography) por rayos X, como la tomografa de emisin de posicin (PET; position emission tomography) utilizan mtodos de proyeccin para reconstruir secciones transversa-les a partir de datos digitales. Estas tcnicas son empleadas para supervisar funciones internas y mostrar secciones transversales durante una ciruga. Otras tcnicas de proyeccin de imgenes mdicas incluyen rastreadores ultrasnicos y nucleares. Con el ultrasonido, se utilizan ondas sonoras de alta frecuencia, en vez de rayos X, para generar datos digitales. Los rastreadores para medicina nuclear recopilan datos digitales de la radiacin que emiten radionclidos ingeridos y trazan imgenes con codificacin de colores. Por lo general, el procesamiento de imgenes y las grficas por computadora se combinan en muchas aplicaciones. Por ejemplo, en medicina se utilizan estas tcnicas para modelar y estudiar funciones fsicas, para disear miembros artificiales, as como planear y practicar cirugas. Esta ltima aplicacin se conoce, por lo general, ciruga asistida por computadora. Se obtienen secciones transversales bidimensionales del cuerpo a travs de la utilizacin de tcnicas de proyeccin de imgenes. Luego se ven y manipulan los cortes utilizando mtodos grficos para simular procedimientos quirrgicos reales y experimentar con diversas incisiones quirrgicas.

1.8 INTERFACES GRFICAS POR USUARIO


Es comn que los paquetes de software ofrezcan una interfaz grfica. Un componente importante de una interfaz grfica es un administrador de ventanas que hace posible que un usuario despliegue reas con ventanas mltiples. Cada ventana puede contener un proceso distinto que a su vez puede contener despliegues grficos y no grficos. Para activar una ventana en particular, slo hacemos clic en esa ventana utilizando un dispositivo de pulsar interactivo. Las interfaces tambin despliegan menes e iconos para permitir una seleccin rpida de las opciones de procesamiento o de valores de parmetros. Un icono es un smbolo grfico diseado para semejarse a la opcin de procesamiento que representa. La ventaja de los iconos es que ocupan menos espacio en la pantalla que las descripciones textuales corres-pondientes y que se pueden entender con mayor rapidez si estn bien diseados. Los menes contienen listas de descripciones textuales e iconos. http://www.cs.buap.mx/~glc/capi1.html

Unidad 8. Puertos
8.1 Conceptos generales de manejos de puertos

El manejo de puertos
Las operaciones de lectura y escritura a puertos (familia de instrucciones IN y OUT del procesador 8086/8088), se puede realizar utilizando los archivos especiales 5.4 de Mach o los objetos grficos que ofrece NeXTSTEP. http://computacion.cs.cinvestav.mx/~ameneses/pub/tesis/ltesis/node1.ht ml
Los puertos de comunicacin de la PC son de particular inters para el estudioso de la electrnica ya que le permiten utilizar una computadora personal para controlar todo tipo circuitos electrnicos utilizados, principalmente, en actividades de automatizacin de procesos, adquicisin de datos, tareas repetitivas y otras actividades que demandan precisin. ste artculo es el primero de una serie que analizar diversos usos para el puerto paralelo de la PC.

Conceptos bsicos
Existen dos mtodos bsicos para transmisin de datos en las computadoras modernas. En un esquema de transmisin de datos en serie un dispositivo enva datos a otro a razn de un bit a la vez a travs de un cable. Por otro lado, en un esquema de transmisin de datos en paralelo un dispositivo enva datos a otro a una tasa de n nmero de bits a travs de n nmero de cables a un tiempo. Sera fcil pensar que un sistema en paralelo es n veces ms rpido que un sistema en serie, sin embargo sto no se cumple, bsicamente el impedimiento principal es el tipo de cable que se utiliza para interconectar los equipos. Si bin un sistema de comunicacin en paralelo puede utilizar cualquier nmero de cables para transmitir datos, la mayora de los sistemas paralelos utilizan ocho lneas de datos para transmitir un byte a la vez, como en todo, existen excepciones, por ejemplo el estndar SCSI permite transferencia de datos en esquemas que van desde los ocho bits y hasta los treinta y dos bits en paralelo. En ste artculo nos concentraremos en transferencias de ocho bits ya que sta es la configuracin del puerto paralelo de una PC. Un tpico sistema de comunicacin en paralelo puede ser de una direccin (unidireccional) o de dos direcciones (bidireccional). El ms simple mecanismo utilizado en un puerto paralelo de una PC es de tipo unidireccional y es el que analizaremos en primer lugar. Distinguimos dos elementos: la parte transmisora y la parte receptora. La parte transmisora coloca la informacin en las lneas de datos e informa a la parte receptora que la informacin (los datos) estn disponibles; entonces la parte receptora lee la informacin en las lneas de datos e informa a la parte transmisora que ha tomado la informacin (los datos). Observe que mbas partes sincronizan su respectivo acceso a las lneas de datos, la parte receptora no leer las lneas de datos hasta que la parte transmisora se lo indique en tanto que la parte transmisora no colocar nueva informacin en las lneas de datos hasta que la parte receptora remueva la informacin y le indique a la parte transmisora que ya ha tomado los datos, a sta coordinacin de operaciones se le llama acuerdo entendimiento. Bin, en stos mbitos tecnolgicos es recomendable utilizar ciertas palabras en ingls que nos permiten irnicamente un mejor entendimiento de los conceptos tratados. Repito: a la coordinacin de operaciones entre la parte

transmisora y la parte receptora se le llama handshaking, que en espaol es el acto con el cual dos partes manifiestan estar de acuerdo, es decir, se dan un apretn de manos.

El handshaking
Para implementar el handshaking se requieren dos lneas adicionales. La lnea de estroboscopio (en ingls strobe) es la que utiliza la parte transmisora para indicarle a la parte receptora la disponibilidad de informacin. La lnea de admisin (acknowledge) es la que utiliza la parte receptora para indicarle a la parte transmisora que ha tomado la informacin (los datos) y que est lista para recibir ms datos. El puerto paralelo provee de una tercera lnea de handshaking llamada en ingls busy (ocupado), sta la puede utilizar la parte receptora para indicarle a la parte transmisora que est ocupada y por lo tanto la parte transmisora no debe intentar colocar nueva informacin en las lneas de datos. Una tpica sesin de transmisin de datos se parece a lo siguiente: Parte transmisora: La parte transmisora checa la lneabusy para ver si la parte receptora est ocupada. Si la lnea busy est activa, la parte transmisora espera en un bucle hasta que la lnea busy est inactiva. La parte transmisora coloca la informacin en las lneas de datos. La parte transmisora activa la lnea de strobe. La parte transmisora espera en un bucle hasta que la lnea acknowledge est activa. La parte transmisora inactiva la lnea de strobe. La parte transmisora espera en un bucle hasta que la lnea acknowledge est inactiva. La parte transmisora repite los pasos anteriores por cada byte a ser transmitido. Parte receptora: La parte receptora informacin). La parte receptora La parte receptora procesa los datos). La parte receptora La parte receptora La parte receptora La parte receptora inactiva la lnea busy (asumiendo que est lista para recibir espera en un bucle hasta que la lnea strobe est activa. lee la informacin de las lneas de datos (y si es necesario, activa la lnea acknowledge. espera en un bucle hasta que est inactiva la lnea de strobe. inactiva la lnea acknowledge. repite los pasos anteriores por cada byte que debe recibir.

Se debe ser muy cuidadoso al seguir stos pasos, tanto la parte transmisora como la receptora coordinan sus acciones de tal manera que la parte transmisora no intentar colocar varios bytes en las lneas de datos, en tanto que la parte receptora no debe leer ms datos que los que le enve la parte transmisora, un byte a la vez.

http://www.modelo.edu.mx/univ/virtech/circuito/paralelo.htm VER ARCHIVOS QUE SE ENCUENTRAN DENTRO DE LA CARPETA DE LA MATERIA

8.2 Configuracin de los puertos en las computadoras El hardware del puerto paralelo
El puerto paralelo de una tpica PC utiliza un conector hembra de tipo D de 25 patitas (DB-25 S), ste es el caso ms comn, sin embargo es conveniente mencionar los tres tipos de conectores definidos por el estndar IEEE 1284, el primero, llamado 1284 tipo A es un conector hembra de 25 patitas de tipo D, es decir, el que mencionamos al principio. El orden de las patitas del conector es ste:

El segundo conector se llama 1284 tipo B que es un conector de 36 patitas de tipo centronics y lo encontramos en la mayora de las impresoras; el tercero se denomina 1284 tipo C, se trata de un conector similar al 1284 tipo B pero ms pequeo, adems se dice que tiene mejores propiedades elctricas y mecnicas, ste conector es el recomendado para nuevos diseos. La siguiente tabla describe la funcin de cada patita del conector 1284 tipo A:

Patita 1 2~9 10 11 12 13 14 15 16 17 18 ~ 25

E/S Salida Salida Entrada Entrada Entrada Entrada Salida Entrada Salida Salida -

Polaridad activa 0 0 0 1 1 0 0 0 0 -

Descripcin Strobe Lneas de datos


(bit 0/patita 2, bit 7/patita 9)

Lnea acknowledge
(activa cuando el sistema remoto toma datos)

Lnea busy
(si est activa, el sistema remoto no acepta datos)

Lnea Falta de papel


(si est activa, falta papel en la impresora)

Lnea Select
(si est activa, la impresora se ha seleccionado)

Lnea Autofeed
(si est activa, la impresora inserta una nueva lnea por cada retorno de carro)

Lnea Error
(si est activa, hay un error en la impresora)

Lnea Init
(Si se mantiene activa por al menos 50 micro-segundos, sta seal autoinicializa la impresora)

Lnea Select input


(Cuando est inactiva, obliga a la impresora a salir de lnea)

Tierra elctrica

Tabla 1: Configuracin del puerto paralelo estndar Observe que el puerto paralelo tiene 12 lneas de salida (8 lneas de datos, strobe, autofeed, init, y select input) y 5 de entrada (acknowledge, busy, falta de papel, select y error). El estndar IEEE 1284 define cinco modos de operacin: 1. 2. 3. 4. 5. Modo Modo Modo Modo Modo compatible nibble byte EPP, puerto paralelo ampliado ECP, puerto de capacidad extendida

El objetivo del estndar es disear nuevos dispositivos que sean totalmente compatibles con el puerto paralelo estndar (SPP) definido originalmente por la IBM (en ste artculo tratar solamente el modo compatible). Hay tres direcciones de E/S asociadas con un puerto paralelo de la PC, stas direcciones pertenecen al registro de datos, el registro de estado y el registro de control. El registro de datos es un puerto de lectura-escritura de ocho bits. Leer el registro de datos (en la modalidad unidireccional) retorna el ltimo valor escrito en el registro de datos. Los registros de control y estado proveen la interface a las otras lneas de E/S. La distribucin de las diferentes seales para cada uno de los tres registros de un puerto paralelo esta dada en las siguientes tablas:

Direccin Base + 0

Nombre Puerto de datos

Lectura/Escritura Escritura

Bit # Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Propiedades Dato 7 Dato 6 Dato 5 Dato 4 Dato 3 Dato 2 Dato 1 Dato 0

Tabla 2: Registro de datos

Direccin Base + 1

Nombre Puerto de estado

Lectura/Escritura Slo Lectura

Bit # Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Propiedades Busy Acknowledge Falta de papel Select In Error IRQ (Not) Reservado Reservado

Tabla 3: Registro de estado

Direccin Base + 2

Nombre Puerto de control

Lectura/Escritura Lectura/Escritura

Bit # Bit 7 Bit 6 Bit 5

Bit 4

Bit 3 Bit 2 Bit 1 Bit 0


Tabla 4: Registro de control

Propiedades No usado No usado Permite puerto bidireccional Permite IRQ a travs de la lnea acknowledge Selecciona impresora Inicializa impresora Nueva lnea automtica Strobe

Una PC soporta hasta tres puertos paralelo separados, por tanto puede haber hasta tres juegos de registros en un sistema en un momento dado. Existen tres direcciones base para el puerto paralelo asociadas con tres posibles puertos paralelo: 0x3BCh, 0x378h y 0x278h, nos referimos a stas como las direcciones base para el puerto LPT1, LPT2 y LPT3, respectivamente. El registro de datos se localiza siempre en la direccin base de un puerto paralelo, el registro de estado aparece en la direccin base + 1, y el registro de control aparece en la direccin base + 2. Por ejemplo, para un puerto LPT2 localizado en 0x378h, sta es la direccin del registro de datos, al registro de estado le corresponde la direccin 0x379h y su respectivo registro de control est en la direccin 0x37Ah. Cuando la PC se enciende el BIOS ejecuta una rutina para determinar el nmero de puertos presentes en el sistema asignando la etiqueta LPT1 al primer puerto localizado, si existen ms puertos entonces se asignarn consecutivamente las etiquetas LPT2 y LPT3 de acuerdo a la siguiente tabla:

Direccin inicial 0000:0408 0000:040A 0000:040C 0000:040E

Funcin Direccin base para LPT1 Direccin base para LPT2 Direccin base para LPT3 Direccin base para LPT4

Tabla 5: Direcciones base en el BIOS Para trabajar con el puerto paralelo necesitamos en primer lugar conocer la direccin base asignada por el BIOS (estamos hablando de una PC compatible con IBM), podemos utilizar un programa llamado Debug.exe que nos indique la(s) direccin(es) asignada(s): en la plataforma Windows vamos al men inicio, seleccionamos programas y luego MS-DOS para abrir una ventana de Smbolo de MS-DOS y aqu podemos introducir los comandos indicados ms abajo. Si se

trabaja en ambiente DOS basta con teclear en la lnea de comandos la palabra debug, el programa responde colocando un signo de menos - en donde tecleamos sin dejar espacios en blanco d040:08L8 y presionamos la tecla entrar, entonces el programa debug.exe nos indica en una serie de nmeros la(s) direccin(es) para el (los) puerto(s) paralelo(s) disponibles en nuestro sistema, la siguiente imagen muestra el resultado obtenido en mi mquina:

Se puede observar una serie de nmeros de dos dgitos (ocho en total), se trata del volcado de memoria que empieza en la direccin 40:0008h. Los primeros seis pares de nmeros representn las direcciones base para los puertos paralelo instalados, en la imagen de arriba se aprecia que el nico puerto paralelo de mi mquina est en la direccin 0x378h (78 03). Los nmeros estn invertidos porque Intel almacena tal informacin en un formato de "byte de bajo orden - byte de alto orden". Una vez que obtenemos la informacin deseada cerramos el programa Debug.exe simplemente tecleando la letra q y presionando la tecla entrar. Para cerrar la ventana de Smbolo de MS-DOS tecleamos la palabra exit y presionamos la tecla entrar. Por supuesto, tambin podemos conocer la direccin asignada al puerto paralelo utilizando un programa, faltaba ms, el cdigo es el siguiente:

/********************************************************** * puerto1.c * * (c)Virgilio Gmez Negrete * * Determina la direccion del puerto paralelo * **********************************************************/ #include <stdio.h> #include <dos.h> int main() { unsigned int __far *puntero_a_direccion;

int i; puntero_a_direccion=(unsigned int __far *)0x00000408; for (i=0; i<3; i++) { if (*puntero_a_direccion == 0) printf("No se encontro puerto asignado a LPT%d \n", i+1); else printf("La direccion asignada a LPT%d es 0x%Xh\n", i+1, *puntero_a_direccion); puntero_a_direccion++; } } return 0;

El programa es muy sencillo, necesitamos un puntero que seale a la ubicacin de memoria que almacena la informacin para las diferentes direcciones asignadas al puerto paralelo, lo llamamos puntero_a_direccion, ste puntero debe ser de al menos dos bytes, por sta razn se declara como de tipo unsigned int __far. Es importante que Usted verifique en la documentacin de su compilador la manera precisa para utilizar la palabra clave far, sta puede ser simplemente la palabra como tal bin puede llevar uno (_far) o dos guiones bajos (__far), asegrese de utilizar la forma correcta el programa no funcionar. Creo que con lo explicado arriba el funcionamiento del programa puerto1.c no presenta problema alguno. Volver al principio

Interfaz para el puerto paralelo


Actualmente, la mayora de los puertos instalados en las computadoras son de tipo multimodal configurables a travs del BIOS de la mquina, en ste artculo me refiero expresamente al modo Normal (SPP), adems de ste estn las opciones Bidireccional, EPP versin 1.7, EPP versin 1.9 y ECP principalmente. El modo de operacin Normal es el ms elemental y solamente permite la escritura en las lneas de datos, patitas 2 a la 9 del conector DB-25 del puerto paralelo de la PC. Elctricamente, el puerto paralelo entrega seales TTL y como tal, teoricamente, se le puede conectar cualquier dispositivo que cumpla con los niveles de voltaje especficos de la lgica TTL, sin embargo el hardware del puerto paralelo est muy limitado en cuanto a su capacidad de manejo de corriente, por sta razn se debe ser muy cuidadoso con el manejo de las seales del puerto, un corto circuito puede daar permanentemente la tarjeta madre de la PC. Para disminuir lo ms posible el riesgo de daos al puerto utilizamos un circuito integrado 74LS244 como etapa separadora y al mismo tiempo mejoramos la capacidad de manejo de corriente, de esta forma podemos conectar una serie de diodos emisores de luz (LED) que nos indiquen la actividad en las lneas de datos del puerto paralelo. El circuito se detalla en el siguiente diagrama:

Por cada lnea de entrada que tomamos directamente del puerto paralelo existe una etapa amplificadora-separadora dentro del circuito integrado 74LS244 que nos permite trabajar con una tasa de entrega de corriente suficiente para desplegar en los diodos emisores de luz la informacin escrita en las lneas de datos del puerto. Adems es posible habilitar deshabilitar el despliegue del nibble de orden inferior superior del byte escrito en el puerto. Colocando en un nivel lgico alto la patita 1 del CI 74LS244 inhabilitamos el despliegue del nibble de orden bajo, un nivel lgico alto en la patita 19 evita el despliegue del nibble de orden alto. Para comodidad, conecto las patitas 1 y 19 permanentemente a tierra de tal manera que sea posible visualizar la actividad en los diodos emisores de luz (LED). En el diagrama se especifican con nmeros las correspondientes patitas del conector DB-25. Obviamente se requiere de una fuente regulada de 5 Voltios para operar ste circuito, adems los siguientes materiales: 1. 8. 8. 1. Circuito Integrado TTL 74LS244. Diodos Emisores de Luz. Resistencias de 220 Ohms, 1/2 Watt. Cable y conector para el puerto paralelo.

Naturalmente lo ms recomendable es probar el correcto funcionamiento del circuito antes de conectarlo al puerto paralelo de la PC. Ensamble el circuito, preferentemente en un circuito impreso, y conctelo a una fuente regulada de 5 Voltios, conecte temporalmente un extremo de una resistencia de 10,000 Ohms a

una lnea de entrada, el resto de las lneas de entrada conctelas a tierra. El otro extremo de la resistencia conctelo directamente al borne positivo de la fuente de alimentacin para inducir una seal TTL alta, el respectivo LED debe encender. Con un trozo de alambre conectado a Tierra, toque temporalemente el extremo de la resistencia que est conectado a la lnea de entrada para inducir una seal TTL de lgica baja, el LED se debe apagar. Repita sta operacin para cada una de las ocho lneas de entrada. Una vez que ha verificado el correcto funcionamiento del circuito est listo para conectarlo al puerto paralelo de la PC. En primer lugar apague la computadora y el circuito. Conecte el cable al puerto paralelo asegurndose que el conector est firme en su sitio. Encienda el circuito y por ltimo encienda la computadora, por regla general, el circuito de restablecimiento de la computadora coloca inicialmente en las lneas de datos del puerto paralelo un valor igual a 0x0h, por lo tanto todos los diodos deben estar apagados una vez que la computadora ha terminado su proceso de arranque, sin embargo, si algn diodo permanece encendido sto no indica una condicin de falla, es responsabilidad del software que Usted escriba para controlar el puerto inicializarlo con un valor adecuado antes de realizar cualquier otra operacin. Volver al principio

Escribiendo datos al puerto paralelo


Con ocho bits podemos escribir en el puerto un total de 256 valores diferentes, cada uno de stos representa un byte de informacin y cada byte puede representar una accin concreta que nosotros podemos definir de acuerdo a nuestras necesidades. En ste artculo el objetivo es entender cmo trabajar con el puerto paralelo, por lo tanto hagamos un programa que nos permita escribir un nmero cualquiera entre 0 y 255 de tal manera que sea posible visualizar el valor en formato binario. En primer lugar consulte la documentacin de su compilador para verificar la correcta sintxis de la funcin que nos sirve para escribir en el puerto, en el caso especfico de Symantec C++, dicha funcin es outp( ). sta funcin requiere dos parmetros, el primero de tipo unsigned int que especifica la direccin del puerto paralelo, y el segundo de tipo char que especifica el valor a escribir en las lneas de datos de puerto. Una tpica llamada a la funcin outp( ) se parece a sto:

outp(0x378, 65); Se aprecia la facilidad de manejo de la funcin, aunque diferentes compiladores dan a sus respectivas funciones nombres diferentes, la mecnica es la misma, se requieren dos parmetros, la direccin del puerto y el valor a escribir en el puerto. Estudie el siguiente cdigo:

/********************************************************** * puerto2.c * * Escribe datos al puerto paralelo de la PC * * (c)1999, Virgilio Gmez Negrete * **********************************************************/ #include <stdio.h> #include <dos.h>

int puerto(int direcc); int seleccion; int main() { unsigned int __far *puntero_a_direccion; int i, direccion[3]={0,0,0}, disponible[3]={0,0,0}; puntero_a_direccion = (unsigned int __far *)0x00000408; printf("Seleccione el puerto:\n"); /* Cuantos puertos existen? */ for (i=0; i<3; i++) { if (*puntero_a_direccion == 0) printf("Puerto LPT%d...............no disponible\n", i+1); else { disponible[i] = 1; direccion[i] = *puntero_a_direccion; printf("Puerto LPT%d...............%d\n", i+1, i+1); } puntero_a_direccion++; } printf("Salir del programa........0\n"); scanf("%d", &seleccion); do {

switch(seleccion) { case 0:/* Salir del programa */ printf("Adios!!!\n"); return 0; break; case 1:/* Puerto LPT1 */ if(disponible[0]==1) puerto(direccion[0]); else { printf("ERROR: PUERTO NO DISPONIBLE\n"); return 0; } break; case 2:/* Puerto LPT2 */ if(disponible[1]==1) puerto(direccion[1]); else { printf("ERROR: PUERTO NO DISPONIBLE\n"); return 0; } break; case 3:/* Puerto LPT3 */ if(disponible[2]==1) puerto(direccion[2]); else {

printf("ERROR: PUERTO NO DISPONIBLE\n"); return 0; } break; default: printf("ERROR: OPCION INCORRECTA!\n"); break; } if(seleccion!=0) { printf("Seleccione otra opcion\n"); scanf("%d", &seleccion); } } while(seleccion!=0); return 0; } int puerto(int direcc) { unsigned char valor; /* Solo valores entre 0 y 255 */ printf("Ahora puede escribir cualquier valor\n"); printf("entre 1 y 255, 0 para terminar el programa\n"); do { printf("Valor al puerto?\n"); scanf("%d", &valor); outp(direcc, valor); printf("Se ha escrito %d al puerto\n", valor); } while(valor!=0); return seleccion=0; } El programa determina el nmero de puertos paralelo instalados en la computadora y almacena sus respectivas direcciones en el arreglo llamado direccion[i], en caso de encontrarse una direccin vlida adems se establece en 1 el valor del arreglo llamado disponible[i] simplemente como una medida de seguridad adicional. Como resultado de stas acciones el programa despliega un men basado en los puertos encontrados, en este punto Usted puede seleccionar, en caso de que disponga de ms de un puerto, el puerto en donde est conectado el circuito mostrado en el diagrama de arriba. Una vez seleccionado el puerto Usted puede escribir un valor cualquiera comprendido entre 0 y 255. Independientemente del puerto seleccionado toda la funcionalidad del programa est encapsulada en la funcin de tipo int llamada puerto( ) a la cual se le pasa un nico parmetro que es la direccin del puerto seleccionado. La funcin est codificada de tal forma que al escribir un 0 el programa termina, de sta manera al cerrar el programa las lneas de datos del puerto paralelo estn todas en un nivel lgico bajo. ste programa y el circuito asociado son tiles para entender de forma visual la forma de representar valores en formato binario, adems establece las bases de trabajo para otros proyectos de control basados en computadora. Disfrute la experiencia. Volver al principio

Descargas
El diagrama esquemtico de la interfaz para el puerto paralelo y el cdigo fuente de los programas mostrados en ste artculo estn disponibles en el archivo llamado paralel1.zip (11.7 Kb.)

Cmo se configura el puerto serie ?


La primera pregunta sera: Debo configurar mis puertos serie ? En general, slo debers configurar los puertos serie en estos casos:

Tu modem es interno y Plug'n'Play. Debers configurar el modem y al menos el puerto serie que incorpora. Tienes ms de dos puertos serie, contando adems con los que incorporan los modems internos (si tienes alguno). Por lo general debers configurar todos los puertos a partir del COM3 incluido. Un tercer caso, ms raro, que consistira en tener un modem interno en COM1 o COM2 y que no usara los recursos estandar (puerto 3f8 e interrupcion 4 para COM1, y puerto 2f8 e interrupcin 3 para COM2). Los recursos utilizados por el modem pueden consultarse en el Panel de Control de Windows 95 (Sistema -> Administrador de dispositivos -> Puertos COM y LPT -> el puerto que sea -> Recursos). Entonces debers configurar el puerto del modem.

Si no cumples ninguna de estas condiciones, puedes ignorar el resto de la seccin. Un puerto serie (ms exactamente, la UART del puerto serie) usa un rango de direcciones de entrada-salida y una solicitud de interrupcin para comunicarse con el sistema operativo. Para el correcto funcionamiento del ordenador y del sistema operativo, ningn otro dispositivo del ordenador puede usar alguno de esos valores. Nuestro objetivo ser conseguir esto, y en segundo lugar, hacer que el sistema operativo atienda a ese rango de entrada-salida y esa interrupcin para comunicarse con el modem. Tradicionalmente la eleccin del rango de entrada-salida y la interrupcin se realizaba a travs de una serie de microinterruptores manuales situados en el modem. Conocida la posicin de estos interruptores, se configuraba el sistema operativo para que usara esos valores. Hoy en da casi la totalidad de los modems internos son Plug'n'Play, lo cual significa que el sistema operativo puede, por software, decirle a la tarjeta qu valores debe usar. Configuracin de modems Plug'n'Play en Linux Si tienes un modem Plug'n'Play, lo primero que habr que hacer es decirle que rango de entrada-salida y que interrupcin debe usar. Lo ms cmodo en este caso es usar los mismos valores que Windows 95. Para ello arranca Windows 95, y haz Inicio>Configuracin->Panel de control. Una vez en el Panel de control, elige el icono

'Sistema' y dentro de l, el 'Administrador de dispositivos'. Dentro del apartado 'Puertos COM y LPT' elige el correspondiente al puerto COM donde tienes el modem. Busca en 'Recursos' el rango de entrada-salida y la interrupcin que use y apntalos. Con esos valores en la mano, puedes configurar tu modem Plug'n'Play en Linux. Eso se hace con el programa 'isapnp'. Entra en Linux y busca si tienes un archivo llamado /etc/isapnp.conf. Si no lo tienes haz lo siguiente: pnpdump > /etc/isapnp.conf Esto generar el esqueleto de un archivo de configuracin para 'isapnp'. Este programa generar un listado con todas las posibles posibilidades de configuracin que permiten tus dispositivos Plug'n'Play, pero todas deshabilitadas con un '#' al principio de cada lnea. Los dispositivos aparecen por secciones por lo que es fcil encontrar los correspondientes a tu modem. As tu misin se reducir a encontrar en la seccin correspondiente a tu modem del archivo /etc/isapnp.conf, dos lneas as: # (IO 0 (BASE 0x0NNN)) # (INT 0 (IRQ MM (MODE +E))) donde NNN sea el rango de entrada-salida que use el modem en Windows y MM la interrupcin. Las lneas no tienen por qu ser consecutivas ni ir en ningn orden especial. Cuando las encuentres, qutales el '#' inicial. Luego, al final de la seccin del modem encontrars una lnea parecida a esta: # (ACT Y) De la misma forma, le quitas el '#' inicial. Ya est. Listo para enviar dichos valores al modem. Esto lo hace la orden isapnp /etc/isapnp.conf y deber aparecer en los scripts de arranque de Linux para enviar los valores cada vez que enciendas el ordenador. Las distribuciones ms recientes (Red-Hat 5.0 y posteriores, Debian 2.0 y posteriores) ya incluyen dicha invocacin por lo que no necesitars tocar los scripts de arranque. En caso de tener una distribucin antigua, ser necesario aadir dicha orden. Un buen sitio para incluirla sera el script rc.local, que suele estar situado en uno de los subdirectorios de /etc. De todas formas ser necesario ejecutar isapnp /etc/isapnp.conf si queremos activar los cambios en este momento y nos queremos ahorrar el rearrancar la mquina. Ahora hay que decirle al sistema operativo que debe usar esos valores para comunicarse con el modem. En el caso de los modems Plug'n'Play lo que viene a continuacin es imprescindible. Configuracin de los puertos serie a ojos del sistema operativo Lo primero que hay que saber es que Linux no llama a los puertos serie de la misma forma que el DOS o Windows. As existe la siguiente correspondencia: DOS-Windows Linux COM1 COM2 COM3 /dev/ttyS0 /dev/ttyS1 /dev/ttyS2

COM4 /dev/ttyS3 Ojo a las maysculas y las minsculas del nombre de Linux. Son importantes.

Para leer la configuracin y configurar los puertos serie se usa la orden 'setserial'. Para leer la configuracin, hay que ejecutar setserial con el puerto serie que deseamos ver como nico parmetro. Por ejemplo: setserial /dev/ttyS1 nos muestra la configuracin de COM2 y se obtendr algo como esto: /dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ 3 o sea, el puerto serie (/dev/ttyS1), el tipo de chip UART que lleva (16550A), el puerto base de entradasalida (2f8) y la solicitud de interrupcin (3). Ntese que estos son los valores que el sistema operativo CREE que debe utilizar para comunicarse con el modem/puerto serie. Es posible que ahora no coincidan con los reales, incluso que ni siquiera detecte la UART, lo cual no es raro en caso de modems Plug'n'Play. Si no coinciden, asignaremos los valores adecuados. Por fortuna, por lo general no ser necesario indicar la direccin base de entrada-salida. Salvo casos muy, muy excepcionales COM1 usa la direccin base 3f8, COM2 la 2f8, COM3 la 3e8 y COM4 la 2e8, y eso setserial lo sabe. As, al indicar el puerto serie, setserial implcitamente sabe cual es la direccin base. En cambio, en caso de tener un puerto COM5 o superior s ser necesario indicar la direccin base. As para COM1-COM4 slo indicaremos la interrupcin. Por ejemplo, supongamos que tenemos un modem en COM3 que usa la interrupcion 5. La orden a introducir sera. setserial /dev/ttyS2 irq 5 autoconfig Y si quisiramos indicar tambin la direccin base de entrada-salida (por tener el modem en COM5, por ejemplo) se hara as. setserial /dev/ttyS4 port 0x2e8 irq 10 autoconfig lo cual hace que el sistema operativo use un rango de direcciones desde la 2e8, y la interrupcin 10. Ntese que el '0x' antes de la direccin base es importante. Por ltimo slo queda ver que los cambios han surtido efecto. Para ello bastar usar de nuevo setserial de la primera forma que se indic. Por desgracia esta configuracin durar hasta que apaguemos el ordenador. Por tanto ser necesario incluir la lnea o lneas de configuracin setserial /dev/ttyS2 irq 5... en uno de los scripts de arranque de Linux para que los puertos se configuren cada vez que se inicie el sistema operativo. Un buen candidato es rc.local, que estar en uno de los subdirectorios de /etc. En caso de ser necesario incluir en rc.local tanto el isapnp /etc/isapnp.conf para configurar un modem Plug'n'Play, y el setserial... de los puertos serie, deber colocarse el isapnp... en primer lugar. Tambin habr que usar setserial de la misma forma si el ordenador tuviera ms de dos puertos serie, (contando los que traen los modems internos en caso de disponer de alguno). El motivo es que por alguna extraa razn de diseo del PC, COM1 y COM3 por defecto comparten la misma interrupcin, y a pesar de que esa configuracin no es deseable, Linux por defecto busca COM3 en la misma interrupcin que COM1, por lo que habra que cambiar la de COM3. Lo mismo ocurre con COM2 y COM4 por lo que habra que cambiar COM4. Si no se hiciera esto, podran ocurrir cosas muy raras, como ratones y modems que dejan de funcionar, modems que funcionan "a pedales" (cuando se mueve el ratn), etc... http://www.hispafuentes.com/hf-doc/hf7.0/hf-guia-usuario/x10482.html

VERIFICACIN DEL SETUP Y PARMETROS DE OPERACIN DE LA TARJETA MADRE


Se conoce por setup la configuracin de los parmetros (variables de operacin) de algunos elementos de la tarjeta madre por medio de los Servicios Bsicos de Entrada y Salida (BIOS) de la misma. Estos ajustes se realizan mediante el programa de SETUP, al que se accede generalmente mediante la tecla <BORRAR> o <DELETE> durante el arranque. En algunas computadoras se accede al SETUP mediante otra tecla (o combinacin de teclas), lo que se informa al inicio del arranque. Este mensaje lo genera el programa de arranque (BOOT) almacenado en la memoria ROM del BIOS, generalmente en idioma ingls: HIT <DEL> TO ENTER SETUP (o un texto similar). En casos excepcionales no aparece en la pantalla durante el proceso de arranque, debindose consultar al Manual de Usuario o probando las teclas ms usuales: <DELETE>, <ESC>, <F2> a veces combinada con <ALT> o <CONTROL>. Las tecnologas difieren notablemente segn la fecha de fabricacin de la tarjeta madre, y aunque no existe tampoco uniformidad en los parmetros de operacin, analizaremos los ms comunes y los conceptos bsicos de la configuracin, sin profundizar en detalles. Tpicamente el SETUP incluye las siguientes secciones: STANDARD CMOS SETUP: Aqu se ajusta la hora y fecha, los parmetros de las unidades IDE (discos duros o CD), unidades de disquete, y tipo de video. Se recomienda realizar la autodeteccin de las unidades IDE de modo que se almacenen sus parmetros especficos y no dejar el ajuste AUTO, con la finalidad de agilizar el proceso de arranque. Algunas tarjetas (obsoletas) no realizan la autodeteccin IDE, otras lo realizan desde el men principal del setup, mientras las ms modernas lo incluyen dentro de esta seccin. Debe realizarse la autodeteccin siempre que se cambie o agregue una unidad, comprobando su reconocimiento por el BIOS. Si alguna unidad no es reconocida, puede deberse a fallos de contacto en cualquiera de los extremos de los conectores IDE, o en la alimentacin, o en los jumpers que determinan la condicin de MASTER o ESCLAVO de las unidades IDE. BIOS FEATURES SETUP. Diversos ajustes se realizan en esta seccin: la proteccin de antivirus del BIOS, el cach interno y externo, la secuencia de arranque, los ajustes del teclado, la habilitacin de las distintas opciones de memoria-sombra (shadow) y algunas secuencias variables del programa de arranque. No debe activarse la proteccin antivirus del BIOS ya que puede ocasionar conflictos con el programa antivirus que se instale. Debe verificarse la activacin de los cachs internos y externos (siempre que la tarjeta cuente con ste ltimo), y seleccionar una secuencia de arranque rpida y eficiente: si no se va a arrancar habitualmente por disquete, NO debe dejarse la secuencia de arranque que comienza por A:, para evitar un indeseado intento de arranque por un disquete que inadvertidamente quede en la unidad, ocasionando un inesperado mensaje de ERROR EN DISCO. Las secciones de memoria shadow del BIOS y de VIDEO deben quedar activadas, ya que contribuyen a una mayor velocidad de operacin. Si no se activan, las funciones se ejecutarn desde la memoria ROM, que es ms lenta que la memora RAM de sombra. CHIPSET FEATURES SETUP. Su contenido vara sustancialmente segn la tecnologa, e incluye los intervalos de temporizacin electrnica. Se recomienda dejar activada su configuracin automtica, o leer cuidadosamente el manual de la tarjeta si se desea optimizar el ajuste manual de estos parmetros. POWER MANAGEMENT SETUP. Configura las diversas variantes del sistema de ahorro de energa. Una computadora que permanezca conectada durante horas pero incluya continuos periodos de inactividad, puede resultar beneficiosa la activacin del sistema de ahorro de energa. Debe tenerse en cuenta que algunas desconexiones realizadas por este sistema pueden ocasionar demoras en la rehabilitacin del servicio cuando se envan las seales

mediante el mouse, el teclado o el mdem. La configuracin que se adopte debe adecuarse al rgimen de operacin. PNP/PCI CONFIGURATION. Configura la activacin de las seales de Plug and Play, y la asignacin de recursos a los conectores PCI de la tarjeta madre. Deben dejarse los ajustes predeterminados, y modificarse solo en casos excepcionales de conflictos de recursos u otras condiciones inusuales. INTEGRATED PERIPHERALS. Configuracin de los puertos IDE, UDMA, PCI, USB, y los SERIALES y PARALELOS. Si solamente se utiliza el canal IDE PRIMARIO no debe dejarse activado el funcionamiento del canal SECUNDARIO, y la funcin UDMA debe activarse nicamente si el disco duro est habilitado para esta tecnologa. En esta seccin es frecuente ajustar la variante del puerto paralelo (SPP, ECP o EPP) que debe responder a los requerimientos de la impresora que se instale. LOAD BIOS DEFAULTS. Realiza un conjunto de ajustes que corresponden a la configuracin de requerimientos mnimos, y es la ms segura. Pero debe adoptarse nicamente si la mquina no arranca o falla con el ajuste de requerimientos mximos, puesto que baja su velocidad y degrada su operacin. LOAD SETUP DEFAULTS (o MAXIMUM PERFORMANCE). Realiza un conjunto de ajustes que corresponden a la configuracin de requerimientos mximos y es ms rpida. Debe adoptarse siempre que no existan fallos en el arranque y el funcionamiento se estabilice. USER PASSWORD. Permite la modificacin de la clave de acceso al arranque o al programa SETUP. En caso que la clave quede activada y se olvide, la tarjeta madre dispone de un jumper que permite la descarga de la memoria CMOS con lo que se borran todos los ajustes incluyendo la clave de acceso. Autodetecta la presencia y parmetros de las unidades IDE (disco duro y CD). En algunos casos esta funcin est incorporada dentro de la seccin de STANDARD CMOS DEFAULT. Generalmente hay dos formas de salir del SETUP: SAVE & EXIT SETUP : O sea, salvar en la memoria CMOS los cambios realizados, y salir. EXIT WITHOUT SAVING: Salir sin salvar, manteniendo la configuracin anterior. Generalmente ambas opciones estn disponibles en el men principal del SETUP, y la segunda puede alcanzarse pulsando repetidamente la tecla <DELETE> (<BORRAR>). En cualquiera de las dos formas se presenta un dilogo que solicita la validacin de la forma de salida. Una deficiente configuracin del SETUP puede ocasionar fallos en el arranque o un funcionamiento inestable o errtico, si la configuracin excede a las posibilidades de los componentes o por el contrario un funcionamiento degradado (lento) si no se aprovechan sus potencialidades, por lo que deben seguirse las indicaciones del manual de la tarjeta madre escogiendo las opciones que garanticen un funcionamiento estable con la mxima velocidad alcanzable y que se ajuste al rgimen de funcionamiento previsto.

http://mssimplex.com/mantenimiento/setup.htm

8.3 Uso de instrucciones para manejo de puertos

ANEXOS:

Estructura general de un programa


Normalmente el programa consta de dos partes principales:

declaraciones instrucciones

La parte de declaraciones define las variables a usarse en las instrucciones. Las instrucciones describen el algoritmo con el que se quiere solucionar el problema planteado. Dentro del programa se pueden intercalar zonas de comentarios que pueden servir para aclarar y documentar el cdigo programado. Como notacin para identificar comentarios, estos se encerrarn de la siguiente forma: /* comentario */

Instruccin de Asignacin
Existe una instruccin bsica que se denomina asignacin. La asignacin permite modificar el valor de una variable declarada. La asignacin est definida para cada uno de los tipos de datos elementales vistos. La sintaxis de una asignacin es la siguiente: nombre_variable := expresin ; En la parte izquierda de la asignacin se pone el nombre de la variable que se quiere modificar. La parte derecha contiene una expresin que le dar el nuevo valor a la variable, y por lo tanto debe tener el mismo tipo que la variable. La expresin puede ser:

un valor literal. Ej. float precio; precio := 1430.1; el valor de otra variable. Ej. float precio, precio_venta; precio := 1430.1; precio_venta := precio;

una serie de operaciones entre variables y literales que dan como resultado el valor a asignar. Ej. float precio_venta, precio_costo, descuento; precio_venta := precio_costo * 10.0 - descuento;

Entrada y Salida
En muchas situaciones es conveniente que los valores a asignar a una variable se obtengan del usuario por medio de dispositivos perifricos de entrada como el teclado. Adems, a veces resulta tambin conveniente mostrar ciertos resultados al usuario por medio de dispositivos perifricos de salida como la pantalla. Se dispone de las siguientes pseudo-instrucciones de entrada/salida de datos, tambin denominadas de I/O o input/output:

leer (nombre_variable) equivalente a nombre_variable := leer mostrar (nombre_variable)

Por simplicidad de notacin, estas instrucciones funcionan con cualquiera de los tipos elementales definidos. La instruccin leer guarda en la variable nombre_variable el valor que el usuario introduce por teclado. Por ej. char letra; leer (letra); o letra := leer ; espera que el usuario introduzca cualquier letra del teclado y le asigna este valor a la variable letra. La instruccin mostrar visualiza en la pantalla el valor de la variable nombre_variable. int total; total := 100; mostrar (total); muestra en la pantalla el valor de la variable total, en este ejemplo el nmero 100. Se considera adems que tambin es posible usar la instruccin mostrar de las siguientes maneras: mostrar (" Esta es una frase a mostrar en pantalla"); mostrar (" El valor de la variable total es: " , total);

En el primer caso se muestra la frase encerrada entre comillas, y en el segundo caso, adems de mostrarse la frase encerrada entre comillas se muestra a continuacin el valor de la variable cuyo nombre est luego de la coma separadora.

Control de Instrucciones
Para hacer un programa se necesita contar con mecanismos que permitan agrupar instrucciones y controlar el orden de ejecucin de las mismas. Existen tres mecanismos o estructuras de control:

Composicin secuencial Composicin condicional Composicin iterativa o repetitiva

Composicin Secuencial
Un programa puede contener simplemente una secuencia de instrucciones. Las instrucciones de una secuencia se ejecutan una despus de la otra. comienzo secuencia de instrucciones fin; Ejemplo: encontrar la solucin de una ecuacin de primer grado a x + b = 0. Los datos a y b se leen de teclado, se calcula el valor de x resultante, y se muestra el resultado por pantalla. /* declaraciones */ float a, b, x; /*instrucciones*/ comienzo leer (a); leer (b); x := - b / a; mostrar ("El valor de x es: ", x); fin;

Composicin Condicional
Al resolver un problema, a veces s debe proceder de una manera y a veces de otra dependiendo de alguna determinada condicin. Instruccin si-sino

La composicin condicional permite ejecutar una secuencia de instrucciones si una condicin dada es verdadera, y en caso contrario ejecutar otra secuencia de instrucciones alternativas. Si condicin entonces comienzo secuencia1 de instrucciones fin si; sino comienzo secuencia2 de instrucciones fin sino; Ejemplo: encontrar el valor absoluto de un nmero. El nmero se introduce por teclado, se calcula el valor absoluto y se muestra por pantalla. /* declaraciones */ float numero, valor_absoluto; /*instrucciones*/ comienzo leer (numero); Si numero >= 0 entonces comienzo valor_absoluto := numero; fin si; sino comienzo valor_absoluto := - numero; fin sino; mostrar ("El valor absoluto es: ", valor_absoluto); fin; Cuando no se quiera realizar ninguna accin en caso de que la condicin no es verdadera, simplemente se ignora la parte del "sino". Generalizando, la instruccin "si-sino" puede contar con N alternativas o condiciones a evaluar. Las condiciones se evalan en el orden de aparicin, y cuando se localiza la primera condicin verdadera se ejecuta la serie de instrucciones correspondientes a esa alternativa. Si condicin1 entonces comienzo secuencia1 de instrucciones fin si; sino si condicin2 entonces comienzo secuencia2 de instrucciones fin sino si;

sino si condicin3 entonces comienzo secuencia3 de instrucciones fin sino si; ... sino si condicinN entonces comienzo secuenciaN de instrucciones fin sino si; sino comienzo secuenciaN+1 de instrucciones fin sino; Caso especial de condicional: instruccin en caso Existe una variante de la instruccin condicional que puede usarse en lugar de la instruccin "si-sino" cuando se deban realizar distintas secuencias de instrucciones dependiendo del valor de una expresin. en caso expresin sea valor1: comienzo secuencia1 de instrucciones; fin; valor2: comienzo secuencia2 de instrucciones; fin; ... valorN: comienzo secuenciaN de instrucciones; fin; sino: comienzo secuenciaN+1 de instrucciones; fin; fin en caso; Ejemplo: el usuario introduce una letra en el teclado, y si la misma es una vocal el programa debe mostrar el nombre de un animal que comience con dicha vocal. /* declaraciones */ char letra; /*instrucciones*/ comienzo leer (letra); en caso de que letra sea 'a': mostrar("abeja"); 'e': mostrar("elefante"); 'i': mostrar("iguana"); 'o': mostrar("oso");

'u': mostrar("un perro"); sino: mostrar("La letra no es vocal"); fin en caso; mostrar ("El valor absoluto es: ", valor_absoluto); fin;

. Composicin Iterativa o Repetitiva


Una composicin iterativa permite ejecutar repetidamente una secuencia de instrucciones mientras se cumpla una condicin. Instruccin mientras mientras condicin repetir comienzo secuencia de instrucciones fin mientras; Se comprueba la condicin y si es verdadera se ejecuta la secuencia de instrucciones. Cuando se termina de ejecutar la secuencia se vuelve otra vez a evaluar la condicin y si sta se sigue cumpliendo se vuelve a ejecutar la secuencia nuevamente. Este proceso se repite hasta que l condicin es falsa, en cuyo caso se contina ejecutando la siguiente instruccin a la instruccin "mientras". Ejemplo: construir un programa que sume todos los nmeros que introduce el usuario hasta que introduzca el nmero cero. /* declaraciones */ float numero, suma_acumulada; /*instrucciones*/ comienzo /* inicializacin */ suma_acumulada := 0; leer (numero); mientras numero > 0 repetir comienzo suma_acumulada := suma_acumulada + numero; leer (numero); fin mientras; mostrar ("La suma acumulada es: ", suma_acumulada); fin; Caso especial de interacin: instruccin para Existe una variante de la instruccin iterativa en el caso de que se quiera repetir una secuencia un nmero de veces dado.

para nombre_variable desde valor_inicial hasta valor_final inc incremento comienzo secuencia de instrucciones fin para; Inicialmente la variable nombre_variable se inicializa con el valor_inicial que sigue a desde. Cada vez que se ejecuta la secuencia de instrucciones el valor de esta variable se incrementa con el valor incremento que sigue al inc. Cuando la variable tiene un valor superior al valor_final que sigue a hasta el ciclo deja de repetirse. En total se realizan valor_final - valor_inicial + 1 iteraciones. Ejemplo: modificamos el ejemplo anterior de manera que el usuario indica primero la cantidad de nmeros que quiere sumar. /* declaraciones */ int cantidad, contador; float numero, suma_acumulada; /*instrucciones*/ comienzo /* inicializacin */ suma_acumulada := 0; leer (cantidad); para contador desde 1 hasta cantidad inc 1 comienzo leer (numero); suma_acumulada := suma_acumulada + numero; fin para; mostrar ("La suma acumulada es: ", suma_acumulada); fin; http://dmi.uib.es/~abasolo/foninf/2002-2003/capitulos/2-componentes.html

También podría gustarte