Professional Documents
Culture Documents
LIC. SUSANA HERNANDEZ RODRIGUEZ DOCENTE DEL ITSP ING. INDUSTRAL 2008
PRESENTACIN
En este material contiene los objetivos que se deben lograr al finalizar la unidad, el mtodo de evaluacin del aprendizaje y el contenido. En un mundo cambiante de tecnologa como se tiene el da de hoy se hace necesario evaluar y estudiar parte de esa tecnologa. Las computadoras, el hardware, el software, las grandes mquinas que invaden nuestro mundo requieren de un estudio.
Igualmente contiene los temas relacionados con los lenguajes de programacin. Bsicamente se presenta la estructura para conocer de donde surge la tecnologa que se est usando. La informacin en este tema a cambiando a pasos agigantados aun cuando los lenguajes de programacin son menos cambiantes.
DATOS DE LA MATERIA
Carrera: Ingeniera Industrial Clave de la asignatura: INM-0407 Horas teora-horas prctica-crditos: 3-2-8
OBJETIVOS GENERALES
El alumno: Conocer las tendencias actuales de tecnologa Identificar cada uno de los elementos de un sistema computacional Enlistar las caractersticas de cada familia de sistemas operativos Identificar los diferentes productos de software que existen. Utilizara como herramienta de trabajo alguno de esos recursos
INDICE DE CONTENIDO
I. INTRODUCCIN A LA COMPUTACIN
1.1 Nuevas tecnologas de la informacin 1.1.1 Evolucin de las tecnologas
1.2 Elementos de un sistema computacional 1.2.1 Hardware 1.2.2 Software 1.2.3 Firmware
1.3 Clasificacin de los Sistemas Operativos 1.3.1 Familia Windows 1.3.2 Arquitectura Macintosh 1.3.3 Unix 1.3.4 Linux
1.4 Paquetera de software 1.4.1 Paquetera de Office 1.4.2 Modelos de Base de Datos
INFORMTICA:
OFIMTICA
El proceso de incorporacin de las TI a los SI, afecta a toda la empresa (organizacin, estructura, control...) y no slo al SI, por eso para que sea un xito la implantacin de los avances tecnolgicos, hay que coordinar estos avances con todas las reas de la empresa, para que el SI resultante sea un conjunto armonioso y que se adapte perfectamente a la estructura de la empresa. Este enfoque de planteamiento global, implica que la implantacin de las TI debe ser compatible con la poltica general de la organizacin, y deber materializarse en un plan estratgico para el sistema informtico que vamos a utilizar, como soporte de las necesidades existentes tanto a corto como a largo plazo, teniendo en consideracin los objetivos generales de la organizacin, y ser una expresin lo ms real posible de la poltica informtica adoptada. Por todo ello, la direccin debe tener una participacin activa en el proceso de planificacin y diseo y la implantacin de las TI dentro del SI, en caso contrario podemos tener problemas en la eleccin de las aplicaciones prioritarias a utilizar, tanto en el diseo de soluciones para secuencias de procesos (decisiones estructuradas y operativas), como en los intervalos de decisin o decisiones no estructuradas que no tienen bien definidas sus necesidades.
Primera Generacin (1951 -1958) Usaban tubos al vaco para procesar informacin. Usaban tarjetas perforadas para entrar los datos y los programas. Usaban cilindros magnticos para almacenar informacin e instrucciones internas. Eran sumamente grandes, utilizaban gran cantidad de electricidad, generaban gran cantidad de calor y eran sumamente lentas. Se comenz a utilizar el sistema binario para representar los datos. Segunda Generacin (1958 - 1964) Usaban transistores para procesar informacin. Los transistores eran ms rpidos, pequeos y ms confiables que los tubos al vaco. 200 transistores podan acomodarse en la misma cantidad de espacio que un tubo al vaco. Usaban pequeos anillos magnticos para almacenar informacin e instrucciones. Se mejoraron los programas de computadoras que fueron desarrollados durante la primera generacin. Se desarrollaron nuevos lenguajes de programacin como COBOL y FORTRAN, los cuales eran comercialmente accesibles. Se usaban en aplicaciones de sistemas de reservaciones de lneas areas, control del trfico areo y simulaciones de propsito general. La marina de los Estados Unidos desarrolla el primer simulador de vuelo, "Whirlwind I". Surgieron las minicomputadoras y los terminales a distancia. Se comenz a disminuir el tamao de las computadoras. Tercera Generacin (1964 - 1971) Se desarrollaron circuitos integrados para procesar informacin. Se desarrollaron los "chips" para almacenar y procesar la informacin. Un "chip" es una pieza de silicio que contiene los componentes electrnicos en miniatura llamados semiconductores. Los circuitos integrados recuerdan los datos, ya que almacenan la informacin como cargas elctricas. Surge la multiprogramacin. Las computadoras pueden llevar a cabo ambas tareas de procesamiento o anlisis matemticos. Emerge la industria del "software". Se desarrollan las minicomputadoras IBM 360 y DEC PDP-1. Otra vez las computadoras se tornan ms pequeas, ms ligeras y ms eficientes. Consuman menos electricidad, por lo tanto, generaban menos calor. Cuarta Generacin (1971 - 1988) Se desarroll el microprocesador. Se colocan ms circuitos dentro de un "chip". "LSI - Large Scale Integration circuit". "VLSI - Very Large Scale Integration circuit". Cada "chip" puede hacer diferentes tareas. Un "chip" sencillo actualmente contiene la unidad de control y la unidad de aritmtica/lgica. El tercer componente, la memoria primaria, es operado por otros "chips".
Se reemplaza la memoria de anillos magnticos por la memoria de "chips" de silicio. Se desarrollan las microcomputadoras, o sea, computadoras personales o PC. Se desarrollan las supercomputadoras.
Quinta Generacin (1983 - al presente) Inteligencia artificial: Es el campo de estudio que trata de aplicar los procesos del pensamiento humano usados en la solucin de problemas a la computadora. La robtica: Es el arte y ciencia de la creacin y empleo de robots. Un robot es un sistema de computacin hbrido independiente que realiza actividades fsicas y de clculo. Estn siendo diseados con inteligencia artificial, para que puedan responder de manera ms efectiva a situaciones no estructuradas. Los sistemas expertos. Son programas de ordenador, destinados a simular el razonamiento humano de expertos en un determinado campo, para resolver problemas concretos, poseen los siguientes componentes: Base de conocimientos con reglas de inferencia y hechos relevantes para los expertos. Memoria de trabajo que recoge la descripcin del problema. Motor de inferencia, interpreta y aplica las reglas, a travs de un programa informtico que recoge el razonamiento de los expertos. Subsistema de explicaciones, permite obtener explicaciones parciales, de cada parte del proyecto que se est analizando. Subsistema de adquisicin de conocimientos, permite aadir modificaciones o nuevas aplicaciones en el sistema. Las funciones que desarrollan los sistemas expertos son: Interpretacin de fenmenos a partir de datos observados. Previsiones o inferencia de consecuencias probables. Diagnstico de problemas segn los datos observados. Configuracin de determinadas especificaciones y restricciones del modelo. Planificacin de la secuencia de acciones a realizar, teniendo en cuenta las restricciones. Control resultados-previsiones. Formacin en la resolucin de problemas en la empresa, por el mtodo de consulta. Toma de decisiones en una secuencia de actividades a partir de la identificacin del problema. Los sistemas de expertos an estn en fase de desarrollo, pero constituyen un aprendizaje organizacional en la forma de tomar decisiones. Para perder la rigidez, tendremos que disear un proceso flexible que nos permita realizar aproximaciones sucesivas a travs de prototipos, as como la participacin de los responsables de tomar decisiones en los SAD y no generar desequilibrios en el crecimiento de las TI en la empresa.
BIBLIOGRAFA http://coqui.lce.org/ialvarez/GENERA.HTM
1.2.2 SOFTWARE
Software es la expresin de un conjunto de instrucciones mediante palabras, cdigos, planes o en cualquier otra forma que al ser incorporados en un dispositivo de lectura automatizada, es capaz de hacer que un computador ejecute una tarea u obtenga un resultado. La proteccin del programa de ordenador comprende tambin la documentacin tcnica y los manuales de uso. TIPOS DE SOFTWARE Existe variedad de clasificacin de software, pero por cuestiones acadmicas se ha dividido en: Segn la funcin. Segn el grado de estandarizacin o uso.
Segn la funcin.- Esta clasificacin para nuestro tema es solamente ilustrativa, dentro de este bloque encontramos. Software de base.- Son los que controlan el funcionamiento interno del ordenador, perifricos que sirva para el correcto funcionamiento de otros programas dentro de ellos se pueden destacar, software de memoria (Memmaker), sistemas operativos (DOS 6.00) lenguaje de programacin (Basic), son los que estn inmersos en el ordenador. Software aplicativos.- Son programas de montos o funciones especficos, que el usuario, adquiere de acuerdo a sus necesidades; entre las cuales podemos mencionar: - Hojas de clculo (Quattro Pro) - Procesadora de Textos (Word Perfect) - Base de datos (Dbase) - Diseo Grfico (Corel Draw) Segn el uso o estandarizacin.- Existen 3 sub divisiones que son considerados software aplicativos debido a que ellos son requeridas atendiendo la necesidad del usuario, y que a mencionar son: El software aplicativo.- Tambin llamado package, estos programa estn dirigidos al mercado en general, lo cual ha originado el origen de empresas creadoras de software, que estn
pues estas son propia nos bien definidos, bien es hoja calculo, base de datos, o conjuntos de programas en grupo. El software a medida.- Tambin denominada (Custom mode), son los creados por empresas para sus propias actividades, tambin son susceptibles de modificacin El software de acuerdo al cliente.- Se les denomina (customized), son programas estndar, modificado de acuerdo a la necesidad de un usuario en particular. La legislacin no menciona quien es el autorizado de hacer esta modificacin. El software es un componente esencial de toda actividad basado en el uso de la informtica.
1.2.2 FIRMWARE
Firmware o Programacin en Firme, es un bloque de instrucciones de programa para propsitos especficos, grabado en una memoria tipo ROM, que establece la lgica de ms bajo nivel que controla los circuitos electrnicos de un dispositivo de cualquier tipo. Al estar integrado en la electrnica del dispositivo es en parte hardware, pero tambin es software, ya que proporciona lgica y se dispone en algn tipo de lenguaje de programacin. Funcionalmente, el firmware es el intermediario (interfaz) entre las rdenes externas que recibe el dispositivo y su electrnica, ya que es el encargado de controlar a sta ltima para ejecutar correctamente dichas rdenes externas. Encontramos Firmware en memorias ROM de los sistemas de diversos dispositivos perifricos, como en monitores de video, unidades de disco, impresoras, etc., pero tambin en los propios microprocesadores, chips de memoria principal y en general en cualquier circuito integrado. El firmware es una combinacin de software (programa) y hardware (en este caso, chips). En su conjunto son Chips que poseen dentro pequeos programas que son guardados dentro y que se denominan Firmware. Estos chips normalmente son de los siguientes tipos: ROM(s) Read Only Memory (Memoria de solo lectura) PROM(s) Programmable read-only memory (memoria programable de solo lectura) EPROM(s) Erasable programmable read-only memory (memoria programable y con capacidad de ser borrada) El firmware en PROM o EPROM est diseado para ser modificado si es necesario a travs de una actualizacin de software.
10
11
Mac OS X v.10.0 (Cheetah) Mac OS X v.10.1 (Puma) Mac OS X v.10.2 (Jaguar) Mac OS X v.10.3 (Panther) Mac OS X v.10.4 (Tiger) Mac OS X v.10.5 (Leopard)
1.3.3 UNIX
El inicio del desarrollo de este sistema operativo (que se cree es uno de los ms influyentes en la historia de la computacin) fue muy particular, pues nadie habra predicho el xito de UNIX despus de su primera encarnacin. Las herramientas o comandos ms bsicos de UNIX son: Navegacin/creacin de directorios/archivos: is, cd, pwd, mkdir, rm, rmdir, cp Edicin/visin de archivos: touch, more, ed, vi, emacs. Procesamiento de textos: echo, cat, grep, sort, uniq, sed, awk, tail, head. Comparacin de archivos: comm, cmp, diff, patch Administracin del sistema: chmod, chown, ps, find, xargs, sd, w, who. Comunicacin: mail, telnet, ssh, ftp, finger.
1.3.4
LINUX
El logotipo oficial de Linux es el pingino Tux Linux es un sistema operativo y un ncleo. Es uno de los paradigmas del desarrollo de software libre (y de cdigo abierto), donde el cdigo fuente est disponible pblicamente y cualquier persona puede libremente usarlo, modificarlo y/o redistribuirlo. El trmino "Linux" estrictamente se refiere al ncleo Linux, pero es ms comnmente utilizado para describir al sistema operativo tipo Unix, que utiliza primordialmente filosofa y metodologas libres, tambin conocido como GNU/Linux, que est formado mediante la combinacin del ncleo Linux con las bibliotecas y herramientas del proyecto GNU y de muchos otros proyectos/grupos de software (libre o no). El ncleo no es parte oficial del proyecto GNU (el cual posee su propio ncleo en desarrollo, llamado Hurd), pero es distribuido bajo los trminos de la licencia GPL (GNU General Public License). Una distribucin Linux, o distribucin GNU/Linux (abreviada con frecuencia diestro) es un conjunto de aplicaciones reunidas por un grupo, empresa o persona para permitir instalar fcilmente un sistema Linux (tambin llamado GNU/Linux). Existen numerosas distribuciones Linux. Cada una de ellas puede incluir cualquier nmero de software adicional (libre o no), como algunos que facilitan la instalacin del sistema y una enorme variedad de aplicaciones, entre ellos, entornos grficos, suites ofimticas, servidores WEB, servidores de correo, servidores FTP, etc.
12
13
2.2 Metodologa para el diseo de software: Top Down, Bottom up, Modular y Programacin estructurada.
2.3 Definicin de lenguajes algortmicos 2.3.1 Elementos y reglas de la representacin grafica y manuscrita de los algoritmos (diagrama de flujo, diagrama N-S, diagrama estructurado y pseudocdigo. 2.3.2 Implementacin de algoritmos secuenciales (utilizando notacin algebraica)
14
PRESENTACIN
En este material contiene los objetivos que se deben lograr al finalizar la unidad, el mtodo de evaluacin del aprendizaje y el contenido. En un mundo cambiante de tecnologa como se tiene el da de hoy se hace necesario evaluar y estudiar parte de esa tecnologa. Las computadoras, el hardware, el software, las grandes mquinas que invaden nuestro mundo requieren de un estudio.
Igualmente contiene los temas relacionados con los lenguajes de programacin. Bsicamente se presenta la estructura para conocer de donde surge la tecnologa que se est usando. La informacin en este tema a cambiando a pasos agigantados aun cuando los lenguajes de programacin son menos cambiantes.
15
Diferencia entre el lenguaje algortmico y el informtico. El lenguaje algortmico es aquel por medio del cual se realiza un anlisis previo del problema a resolver y encontrar un mtodo que permita resolverlo. El conjunto de todas las operaciones a realizar, y el orden en el que deben efectuarse, se le denominan algoritmo. El lenguaje informtico es aquel por medio del cual dicho algoritmo se codifica a un sistema comprensible por el ordenador o computadora. Este tipo de lenguaje es ms cercano a la mquina que al ser humano y podemos distinguir distintos tipos dependiendo de la proximidad a la maquina. Se denomina lenguaje de alto nivel aquel que es ms cercano a la comprensin humana y lenguaje de bajo nivel a aquellos que son ms comprensibles por la mquina. En concreto, nosotros vamos a estudiar un lenguaje en la frontera de uno de bajo nivel. Es por ello que el 'C' es tan potente y rpido, pues las funciones principales representan las funciones ms bsicas del ordenador. Planteamientos de Problemas. Lo que pretende un algoritmo es sintetizar de alguna forma una tarea, clculo o mecanismo antes de ser transcrito al ordenador. Los pasos que hay que seguir son los siguientes: - Anlisis previo del problema. - Primera visin del mtodo de resolucin. - Descomposicin en mdulos. - (Programacin estructurada). - Bsqueda de soluciones parciales. - Ensamblaje de soluciones finales.
La clasificacin de los lenguajes algortmicos puede anunciarse de la siguiente manera: a) Lenguaje natural: Es aquel que describe los pasos a seguir utilizando un vocabulario cotidiano. b) Lenguaje de diagrama de flujo: Es aquel que se vale de diversos smbolos para representar las ideas o acciones a desarrollar. c) Lenguaje natural de programacin: Son aquellos que estn orientadas a la solucin de problema que se defienden de una manera precisa. d) Lenguaje de programacin de algoritmos: Es aquel que se utiliza para introducir en la computadora un lenguaje especfico.
16
ENTRADA / LECTURA
PROCESO
DECISIN
IMPRESORA
INDICADOR DE DIRECCION
17
EJEMPLOS: 1. El maestro de matemticas desea saber el porcentaje de hombres y mujeres que hay en el grupo de Ingeniera Industrial. INICIO HOMBRES MUJERES
FIN
2. Determinar si un alumno es bueno, regular o malo en base a su promedio el cual se calcula de la calificacin final de tres materias considerando que si el promedio es mayor o igual a 9 el alumno es bueno, si el promedio es menor que 9 y mayor o igual a 7 el alumno es regular y si es menor que 7 el alumno es malo. 3. Determinar el costo de las llamadas telefnicas dependiendo de la zona geogrfica en la que se encuentra el usuario y el nmero de minutos hablados. CLAVE 12 15 18 ZONA AMERICA DEL NORTE AMERICA DEL SUR AMERICA CENTRAL PRECIO 2 3 4
18
2.2.2 Bottom Up
Con el diseo botton-up el sistema es empezar por el final, sabiendo ya como resolver el problema (y que componentes reutilizables tiene ya a su disposicin). Desde all, puede ir trabajando hacia arriba, hasta la solucin del problema principal. Los componentes reutilizables, deben de ser tan "modulares" como sea posible. Un modulo es un componente de un sistema mayor, que interacta con el resto del sistema de una forma simple, perfectamente definida, por medio de mensajes. La idea es que un modulo pueda ser conectado a un sistema. Los detalles de lo que hace internamente el modulo no es importante al conjunto del sistema, mientras que el modulo realice correctamente la labor asignada. Esto es lo que se llama informacin oculta y es uno de los principios ms importantes de la ingeniera de software.
2.2.3 Modular
Uno de los mtodos ms conocidos para resolver un problema es dividirlo en problemas ms pequeos, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras ms sencillas y a partir de ellas llegamos a la solucin. Esta tcnica se usa mucho en programacin ya que programar no es ms que resolver problemas, y se le suele llamar diseo descendente, metodologa del divide y vencers o programacin top-down. Es evidente que si esta metodologa nos lleva a tratar con subproblemas, entonces tambin tengamos la necesidad de poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les suele llamar mdulos, de ah viene el nombre de programacin modular. En Pascal disponemos de dos tipos de mdulos: los procedimientos y las funciones.
19
VENTAJAS DE LOS DIAGRAMAS DE FLUJO Favorecen la comprensin del proceso a travs de mostrarlo como un dibujo. El cerebro humano reconoce fcilmente los dibujos. Un buen diagrama de flujo reemplaza varias pginas de texto. Permiten identificar los problemas y las oportunidades de mejora del proceso. Se identifican los pasos redundantes, los flujos de los reprocesos, los conflictos de autoridad, las responsabilidades, los cuellos de botella, y los puntos de decisin. Muestran las interfaces cliente-proveedor y las transacciones que en ellas se realizan, facilitando a los empleados el anlisis de las mismas. Son una excelente herramienta para capacitar a los nuevos empleados y tambin a los que desarrollan la tarea, cuando se realizan mejoras en el proceso. DESARROLLO DEL DIAGRAMA DE FLUJO Los pasos a seguir para construir el diagrama de flujo son: Establecer el alcance del proceso a describir. De esta manera quedar fijado el comienzo y el final del diagrama. Frecuentemente el comienzo es la salida del proceso previo y el final la entrada al proceso siguiente. Identificar y listar las principales actividades/subprocesos que estn incluidos en el proceso a describir y su orden cronolgico. Si el nivel de destalle definido incluye actividades menores, listarlas tambin. Identificar y listar los puntos de decisin. Construir el diagrama respetando la secuencia cronolgica y asignando los correspondientes smbolos. Asignar un ttulo al diagrama y verificar que est completo y describa con exactitud el proceso elegido.
20
Si en el caso anterior simplemente nos dijeran: calcular el importe de la venta de un determinado artculo, sabiendo que al comparar ms de 10 unidades del mismo descuento es de un 10%, escrbiramos: Leer artculo,cantidad,precio unitario Importe=cantidad * precio unitario IF cantidad> 10 THEN Importe= importe*o.9 EDNIF Imprimir cantidad, precio unitario, importe
BIBLIOGRAFIA http://www.estrucplan.com.ar/Producciones/Entrega.asp?identrega=526
21
La ejecucin de una sentencia alternativa se realiza de la forma siguiente: 1. Se evala la expresin para ver si es cierta o falsa. 2. Si es cierta, se ejecutan todas las sentencias situadas despus de la palabra reservada THEN, y si es falsa, entonces se ejecutan las sentencias que estn despus de la palabra reservada ELSE, si es que sta existe, continuando la ejecucin en la siguiente sentencia en secuencia. En los ejemplos expuestos, se puede observar que la condicin expresada en la sentencia IF puede ser simple o compuesta. Cuando la condicin es simple, slo hay una expresin, y cuando es compuesta, hay varias expresiones unidas por los operadores lgicos AND (y) y OR (o)
EJERCICIO Determinar el tipo de compra que un cliente realizo, si la opcin es: 1234abarrotes: aplica el 15% de IVA a su compra materiales: aplica el 10 % de IVA a su compra perfumera: aplica el 8% de IVA a su compra farmacia: aplica el 5% de IVA a su compra
Determinar el tipo de compra ( si una cantidad par o impar) mandar a pantalla el sig. texto: subtot-iva a pag- tot comp- tipo com.
BIBLIOGRAFIA http://www.fisica.uson.mx/carlos/Nirvana/CComp/cursos/CC11/lecture7.html
22
3.4 Datos 3.4.1 Tipos de datos 3.4.2 Identificadores 3.4.3 Almacenamiento, direccionamiento y representacin en memoria. 3.4.4 Proposicin de asignacin.
23
PRESENTACIN
Este material contiene los objetivos que se deben lograr al finalizar la unidad, el mtodo de evaluacin del aprendizaje y el contenido. En un mundo cambiante de tecnologa como se tiene el da de hoy se hace necesario evaluar y estudiar parte de esa tecnologa. Las computadoras, el hardware, el software, las grandes mquinas que invaden nuestro mundo requieren de un estudio.
Igualmente contiene los temas relacionados con los lenguajes de programacin. Bsicamente se presenta la estructura para conocer de donde surge la tecnologa que se est usando. La informacin en este tema a cambiando a pasos agigantados aun cuando los lenguajes de programacin son menos cambiantes.
24
25
rpidamente. En poco tiempo, un programador puede utilizar la totalidad del lenguaje. Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron desarrollados conjuntamente. Sin embargo, este lenguaje no est ligado a ningn sistema operativo ni a ninguna mquina concreta. Se le suele llamar lenguaje de programacin de sistemas debido a su utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se puede desarrollar cualquier tipo de aplicacin. La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en 1970 para el primer sistema UNIX en un DEC PDP-7. Estos son lenguajes sin tipos, al contrario que el C que proporciona varios tipos de datos. Los tipos que ofrece son caracteres, nmeros enteros y en coma flotante, de varios tamaos. Adems se pueden crear tipos derivados mediante la utilizacin de punteros, vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie para un DEC PDP-11 y escribi el propio sistema operativo en Introduccin al lenguaje C (2). La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en 1970 para el primer sistema UNIX en un DEC PDP-7. Estos son lenguajes sin tipos, al contrario que el C que proporciona varios tipos de datos. Los tipos que ofrece son caracteres, nmeros enteros y en coma flotante, de varios tamaos. Adems se pueden crear tipos derivados mediante la utilizacin de punteros, vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie para un DEC PDP-11 y escribi el propio sistema operativo en C. C trabaja con tipos de datos que son directamente tratables por el hardware de la mayora de computadoras actuales, como son los caracteres, nmeros y direcciones. Estos tipos de datos pueden ser manipulados por las operaciones aritmticas que proporcionan las computadoras. No proporciona mecanismos para tratar tipos de datos que no sean los bsicos, debiendo ser el programador el que los desarrolle. Esto permite que el cdigo generado sea muy eficiente y de ah el xito que ha tenido como lenguaje de desarrollo de sistemas. No proporciona otros mecanismos de almacenamiento de datos que no sea el esttico y no proporciona mecanismos de entrada ni salida. Ello permite que el lenguaje sea reducido y los compiladores de fcil implementacin en distintos sistemas. Por contra, estas carencias se compensan mediante la inclusin de funciones de librera para realizar todas estas tareas, que normalmente dependen del sistema operativo. Originariamente, el manual de referencia del lenguaje para el gran pblico fue el libro de Kernighan y Ritchie, escrito en 1977. Es un libro que explica y justifica totalmente el desarrollo de aplicaciones en C, aunque en l se utilizaban construcciones, en la definicin de funciones, que podan provocar confusin y errores de programacin que no eran detectados por el compilador. Como los tiempos cambian y las necesidades tambin, en 1983 ANSI establece el comit X3J11 para que desarrolle una definicin moderna y comprensible del C. El estndar est basado en el manual de referencia original de 1972 y se desarrolla con el mismo espritu de sus creadores originales. La primera versin de estndar se public en 1988 y actualmente todos los compiladores utilizan la nueva definicin. Una aportacin muy importante de ANSI consiste en la definicin de un conjunto de libreras que acompaan al compilador y de las funciones contenidas en ellas. Muchas de las operaciones comunes con el sistema operativo se realizan a travs de estas funciones. Una coleccin de ficheros de encabezamiento, headers, en los que se definen los tipos de datos y funciones incluidas en cada librera. Los programas que utilizan estas bibliotecas para interactuar con el sistema operativo obtendrn un comportamiento equivalente en otro sistema.
BIBLIOGRAFIA www.ctisa.com/diccionario.htm es.wikipedia.org/wiki/Programaci%C3%B3n
26
27
PROGRAMACIN ESTRUCTURADA La programacin estructurada es una teora de programacin que consiste en construir programas de fcil comprensin. La programacin estructurada es especialmente til, cuando se necesitan realizar correcciones o modificaciones despus de haber concluido un programa o aplicacin. Al haberse utilizado la programacin estructurada, es mucho ms sencillo entender la codificacin del programa, que se habr hecho en diferentes secciones. La programacin estructurada se basa en una metodologa de desarrollo de programas llamada refinamiento sucesivo: Se plantea una operacin 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 integracin debe ser sencilla y no presentar problemas al integrar la misma, y de presentar algn problema, ser rpidamente detectable para su correccin. La representacin grafica de la programacin estructurada se realiza a travs 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, seleccin e interaccin. Ellas estn 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 fcil entendimiento. Programacin Lineal En programacin lineal se habla de trminos tales como restricciones, que vienen a ser la manipulacin del tamao de funciones que se encuentran sujetas a ciertas limitaciones. Podemos decir que la programacin lineal es el conjunto de tcnicas matemticas que intentan resolver la maximizacin o minimizacin de una funcin objetivo, funcin lineal de varias variables, sujeta a ciertas restricciones, expresadas por inecuaciones lineales. En problemas de programacin lineal intervienen: La funcin f(x,y) = ax + by + c conocida tambin como funcin objetivo (a la cual deberemos optimizar). Aqu x e y son las variables de decisin, mientras que a, b y c son constantes. Las restricciones que deben ser inecuaciones lineales, donde su nmero depende del problema en que trabajemos. Tambin ver que el carcter de desigualdad viene impuesto por las limitaciones, que son: inferiores a... ( menores: < o ); como mnimo de ... (mayores: > o ) . Maximizando o minimizando, las desigualdades pueden darse en cualquiera de los dos sentidos. Valores de x e y que verifican todas y cada una de las restricciones, lo que se conoce como conjunto o regin factible. La solucin ptima del problema ser un par de valores (x0, y0) del conjunto factible que haga que f(x,y) tome el valor mximo o mnimo. Se utilizan las siglas PPL para indicar problema de programacin lineal.
28
Caractersticas del lenguaje C El lenguaje C es uno de los ms rpidos y potentes que hay hoy en da. Algunos dicen que est desfasado y que el futuro es Java. No s si tendr futuro pero est claro que presente si tiene. No hay ms que decir que el sistema operativo Linux est desarrollado en C en su prctica totalidad. As que creo que no slo no perdemos nada aprendindolo sino que ganamos mucho. Para empezar nos servir como base para aprender C++ e introducirnos en el mundo de la programacin Windows. Si optamos por Linux existe una biblioteca llamada gtk (o librera, como prefieras) que permite desarrollas aplicaciones estilo Windows con C. No debemos confundir C con C++, que no son lo mismo. Se podra decir que C++ es una extensin de C. Para empezar en C++ conviene tener una slida base de C. Existen otros lenguajes como Visual Basic que son muy sencillos de aprender y de utilizar. Nos dan casi todo hecho. Pero cuando queremos hacer algo complicado o que sea rpido debemos recurrir a otros lenguajes (c++, delphi,...). Peculiaridades de C Una de las cosas importantes de C que debes recordar es que es Case Sensitive (sensible a las maysculas o algo as). Es decir que para C no es lo mismo escribir Printf que printf. Conviene indicar tambin que las instrucciones se separan por ";". Compiladores de C Un compilador es un programa que convierte nuestro cdigo fuente en un programa ejecutable (Me imagino que la mayora ya lo sabe, pero ms vale asegurar). El ordenador trabaja con 0 y 1. Si escribiramos un programa en el lenguaje del ordenador nos volveramos locos. Para eso estn lenguajes como el C. Nos permiten escribir un programa de manera que sea fcil entenderlo por una persona. Luego es el compilador el que se encarga de convertirlo al complicado idioma de un ordenador. En la prctica a la hora de crear un programa nosotros escribimos el cdigo fuente, en nuestro caso en C, que normalmente ser un fichero de texto normal y corriente que contiene las instrucciones de nuestro programa. Luego se lo pasamos al compilador y este se encarga de convertirlo en un programa. Siguiendo la filosofa de mi pgina los compiladores que usaremos sern gratuitos. Yo recomiendo usar el DJGPP para MS-Dos y el GNU C para Linux. Ambos son compiladores de lnea de comando as que necesitaremos tambin un editor para crear nuestros programas. La solucin ms simple en MS-Dos puede ser usar el edit, en Windows el notepad. Pero no son ms que editores sin ninguna otra funcionalidad. Otra posibilidad es un entorno de desarrollo llamado RHIDE, un programa muy til que automatiza muchas de las tareas del programador (del estilo del Turbo C y Turbo Pascal). Si queremos una herramienta muy avanzada podemos usar Emacs, que es un editor muy potente, aunque para algunos puede parecer muy complicado (valientes y a por ello). Estos dos programas estn disponibles tanto en Linux como en MS-Dos. El primer programa: Hola Mundo En un alarde de originalidad vamos a hacer nuestro primer programa: hola mundo. Nadie puede llegar muy lejos en el mundo de la programacin sin haber empezado su carrera con este original y funcional programa. All va: #include <stdio.h> int main()
29
{ /* Aqu va el cuerpo del programa */ printf( "Hola mundo\n" ); /* Esto imprime hola mundo en pantalla */ return 0; } Comprobado con DJGPP Qu fcil eh? Este programa lo nico que hace es sacar por pantalla el mensaje: Hola mundo Vamos ahora a comentar el programa lnea por lnea (Esto no va a ser ms que una primera aproximacin). #include <stdio.h> #include es lo que se llama una directiva. Sirve para indicar al compilador que incluya otro archivo. Cuando en compilador se encuentra con esta directiva la sustituye por el archivo indicado. En este caso es el archivo stdio.h que es donde est definida la funcin printf, que veremos luego. int main() Es la funcin principal del programa. Todos los programas de C deben tener una funcin llamada main. Es la que primero se ejecuta. El int (entero) que tiene al principio significa que cuando la funcin main acabe devolver un nmero entero. Este valor se suele usar para saber cmo ha terminado el programa. Normalmente este valor ser 0 si todo ha ido bien, o un valor distinto si se ha producido algn error (pero esto lo decidimos nosotros, ya lo veremos). De esta forma si nuestro programa se ejecuta desde otro el programa 'padre' sabe cmo ha finalizado, si ha habido errores o no. Se puede usar la definicin 'void main()', que no necesita devolver ningn valor, pero se recomienda la forma con 'int' que es ms correcta. A lo largo de este curso vers muchos ejemplos que uso 'void main' y falta el return 0; del final, el cdigo funciona correctamente pero puede dar un 'warning' al compilar. En estos momentos estoy intentando corregir esto, pido perdn por las molestias. { Son las llaves que indican el comienzo de una funcin, en este caso la funcin main. /* Aqu va el cuerpo del programa */ Esto es un comentario, no se ejecuta. Sirve para describir el programa. Conviene acostumbrarse a comentar los programas. Un comentario puede ocupar ms de una lnea. Por ejemplo el comentario: /* Este es un comentario que ocupa dos filas */ es perfectamente vlido. printf( "Hola mundo\n" ); Aqu es donde por fin el programa hace algo que podemos ver al ejecutarlo. La funcin printf muestra un mensaje por la pantalla. Al final del mensaje "Hola mundo" aparece el smbolo '\n'; este hace que despus de imprimir el mensaje se pase a la lnea siguiente. Fjate en el ";" del final. Es la forma que se usa en C para separar una instruccin de otra. Se pueden poner varias en la misma lnea siempre que se separen por el punto y coma. return 0; Como he indicado antes el programa al finalizar develve un valor entero. Como en este programa no se pueden producir errores (nunca digas nunca jams) la salida siempre ser 0. La forma de hacer que el programa devuelva un 0 es usando return. Esta lnea significa 'finaliza la funcin main haz que devuelva un 0. } ...y cerramos llaves con lo que termina el programa. Todos los programas finalizan cuando se llega al final de la funcin main.
30
Cmo se hace? Primero debemos crear el cdigo fuente del programa. Para nuestro primer programa el cdigo fuente es el del listado anterior. Arranca tu compilador de C, sea cual sea. Crea un nuevo fichero y copia el cdigo anterior. Llmalo por ejemplo primero.c. Ahora, tenemos que compilar el programa para crear el ejecutable. Si tu compilador es de windows, o con mens busca una opcin llamada "compile", o make, build o algo as. Si estamos usando DJGPP (ver informacin sobre instalacin y uso de DJGPP): tenemos que llamarlo desde la lnea de comando: gcc -c primero.c -o primero.exe Si usamos Rhide basta con hacer CTRL-F9. Nota adicional sobre los comentarios Los comentarios se pueden poner casi en cualquier parte. Excepto en medio de una instruccin. Por ejemplo lo siguiente no es vlido: pri/* Esto es un comentario */ntf( "Hola mundo" ); GARRAFAL No podemos cortar a printf por en medio, tendramos un error al compilar. Lo siguiente no dara error (al menos usando DJGPP), pero es una fea costumbre: printf( /* Esto es un comentario */ "Hola mundo" ); Y por ltimo tenemos: printf( "Hola/* Esto es un comentario */ mundo" ); Que no dara error, pero al ejecutar tendramos: Hola /* Esto es un comentario */ mundo porque /* Esto es un comentario */ queda dentro de las comillas y C lo interpreta como texto, no como un comentario. Qu sabemos hacer? Pues la verdad es que todava no hemos aprendido mucho. Lo nico que podemos hacer es compilar nuestros programas. Pero paciencia, en seguida avanzaremos. Ejercicios Busca los errores en este programa: int main() { /* Aqu va el cuerpo del programa */ Printf( "Hola mundo\n" ); return 0; } Solucin: Si lo compilamos posiblemente obtendremos un error que nos indicar que no hemos definido la funcin 'Printf'. Esto es porque no hemos includo la dichosa directiva '#include <stdio.h>'. (En algunos compiladores no es necesario incluir esta directiva, pero es una buena costumbre hacerlo). Si lo corregimos y volvemos a compilar obtendremos un nuevo error. Otra vez nos dice que desconoce 'Printf'. Esta vez el problema es el de las maysculas que hemos indicado antes. Lo correcto es poner 'printf' con minsculas. Parece una tontera, pero seguro que nos da ms de un problema.
BIBLIOGRAFIA http://lenguajes-de-programacion.com/programacion-estructurada.shtml
31
Un programa C puede estar formado por diferentes mdulos o fuentes. Es conveniente mantener las fuentes de un tamao no muy grande, para que la compilacin sea rpida. Tambin, al dividirse un programa en partes, puede facilitar la legibilidad del programa y su estructuracin. Las diferentes fuentes son compiladas de forma separada, nicamente las fuentes que han sido modificados desde la ltima compilacin, y despus combinados con las libreras necesarias para formar el programa en su versin ejecutable.
BIBLIOGRAFIA http://lenguajes-de-programacion.com/programacion-estructurada.shtml
32
3.4 Datos
3.4.1 Tipos de datos
Cuando usamos un programa es muy importante manejar datos. En C podemos almacenar los datos en variables. El contenido de las variables se puede ver o cambiar en cualquier momento. Estas variables pueden ser de distintos tipos dependiendo del tipo de dato que queramos meter. No es lo mismo guardar un nombre que un nmero. Hay que recordar tambin que la memoria del ordenador es limitada, as que cuando guardamos un dato, debemos usar slo la memoria necesaria. Por ejemplo si queremos almacenar el nmero 400 usaremos una variable tipo int (la estudiamos ms abajo) que ocupa slo 16 bits, y no una de tipo long que ocupa 32 bits. Si tenemos un ordenador con 32Mb de Ram parece una tontera ponernos a ahorrar bits (1Mb=1024Kb, 1Kb=1024bytes, 1byte=8bits), pero si tenemos un programa que maneja muchos datos puede no ser una cantidad despreciable. Adems ahorrar memoria es una buena costumbre. A las variables no se les puede dar cualquier nombre. No se pueden poner ms que letras de la 'a' a la 'z' (la no vale), nmeros y el smbolo '_'. No se pueden poner signos de admiracin, ni de interrogacin... El nombre de una variable puede contener nmeros, pero su primer carcter no puede serlo. Ejemplos de nombres vlidos: camiones numero buffer a1 j10hola29 num_alumnos Ejemplos de nombres no vlidos: 1abc nombre? num/alumnos Tampoco valen como nombres de variable las palabras reservadas que usa el compilador. Por ejemplo: for, main, do, while. Por ltimo es interesante sealar que el C distingue entre maysculas y minsculas. Por lo tanto: Nombre nombre NOMBRE seran tres variables distintas. El tipo Int En una variable de este tipo se almacenan nmeros enteros (sin decimales). El rango de valores que admite es -32767 a 32767. Cuando definimos una variable lo que estamos haciendo es decirle al compilador que nos reserve una zona de la memoria para almacenar datos de tipo int. Para guardarla necesitaremos 16 bits de la memoria del ordenador (216=32767). Para poder usar una variable primero hay que declararla (definirla). Hay que decirle al compilador que queremos crear una variable y hay que indicarle de qu tipo. Por ejemplo: int numero; esto hace que declaremos una variable llamada nmero que va a contener un nmero entero.
33
Pero dnde se declaran las variables? Tenemos dos posibilidades, una es declararla como global y otra como local. Por ahora vamos a decir que global es aquella variable que se declara fuera de la funcin main y local la que se declara dentro: La diferencia prctica es que las variables globales se pueden usar en cualquier procedimiento. Las variables locales slo pueden usarse en el procedimiento en el que se declaran. Como por ahora slo tenemos el procedimiento (o funcin, o rutina, o subrutina, como prefieras) main esto no debe preocuparnos mucho por ahora. Cuando estudiemos cmo hacer un programa con ms funciones aparte de main volveremos sobre el tema. Sin embargo debes saber que es buena costumbre usar variables locales que globales. Ya veremos por qu. Podemos declarar ms de una variable en una sola lnea: int x, y;
Mostrar variables por pantalla Vamos a ir u poco ms all con la funcin printf. Supongamos que queremos mostrar el contenido de la variable x por pantalla: printf( "%i", x ); Suponiendo que x valga 10 (x=10) en la pantalla tendramos: 10 Empieza a complicarse un poco no? Vamos poco a poco. Recuerdas el smbolo "\" que usbamos para sacar ciertos caracteres? Bueno, pues el uso del "%" es parecido. "%i" no se muestra por pantalla, se sustituye por el valor de la variable que va detrs de las comillas. ( %i, de integer=entero en ingls). Para ver el contenido de dos variables, por ejemplo x e y, podemos hacer: printf( "%i ", x ); printf( "%i", y ); resultado (suponiendo x=10, y=20): 10 20 Pero hay otra forma mejor: printf( "%i %i", x, y ); ... y as podemos poner el nmero de variables que queramos. Obtenemos el mismo resultado con menos trabajo. No olvidemos que por cada variable hay que poner un %i dentro de las comillas. Tambin podemos mezclar texto con enteros: printf( "El valor de x es %i, qu bien!\n", x ); Que quedar como: El valor de x es 10, qu bien! Como vemos %i al imprimir se sustituye por el valor de la variable. Asignar valores a variables de tipo int La asignacin de valores es tan sencilla como: x = 10; Tambin se puede dar un valor inicial a la variable cuando se define:
34
int x = 15; Tambin se pueden inicializar varias variables en una sola lnea: int x = 15, y = 20; Hay que tener cuidado con lo siguiente: int x, y = 20; Podramos pensar que x e y son igual a 20, pero no es as. La variable x est sin valor inicial y la variable 'y' tiene el valor 20. Veamos un ejemplo para resumir todo: #include <stdio.h> void main() { int x = 10; prinft( "El valor inicial de x es %i\n", x ); x = 50; printf( "Ahora el valor es %i\n", x ); } Cuya salida ser: El valor inicial de x es 10 Ahora el valor es 50 Importante! Si imprimimos una variable a la que no hemos dado ningn valor no obtendremos ningn error al compilar pero la variable tendr un valor cualquiera. Prueba el ejemplo anterior quitando int x = 10; El tipo Char Las variables de tipo char sirven para almacenar caracteres. Los caracteres se almacenan en realidad como nmeros del 0 al 255. Los 128 primeros (0 a 127) son el ASCII estndar. El resto es el ASCII extendido y depende del idioma y del ordenador. Consulta la tabla ASCII en el anexo. Para declarar una variable de tipo char hacemos: char letra; En una variable char slo podemos almacenar solo una letra, no podemos almacenar ni frases ni palabras. Eso lo veremos ms adelante (strings, cadenas). Para almacenar un dato en una variable char tenemos dos posibilidades: letra = 'A'; o letra = 65; En ambos casos se almacena la letra 'A' en la variable. Esto es as porque el cdigo ASCII de la letra 'A' es el 65. Para imprimir un char usamos el smbolo %c (c de character=caracter en ingls): letra = 'A'; printf( "La letra es: %c.", letra ); Resultado: La letra es A.
35
Tambin podemos imprimir el valor ASCII de la variable usando %i en vez de %c: letra = 'A'; printf( "El nmero ASCII de la letra %c es: %i.", letra, letra ); Resultado: El cdigo ASCII de la letra A es 65. Como vemos la nica diferencia para obtener uno u otro es el modificador (%c %i) que usemos. Las variables tipo char se pueden usar (y de hecho se usan mucho) para almacenar enteros. Si necesitamos un nmero pequeo (entre -127 y 127) podemos usar una variable char (8bits) en vez de una int (16bits), con el consiguiente ahorro de memoria. Todo lo dems dicho para los datos de tipo int se aplica tambin a los de tipo char . Una curiosidad: letra = 'A'; printf( "La letra es: %c y su valor ASCII es: %i\n", letra, letra ); letra = letra + 1; printf( "Ahora es: %c y su valor ASCII es: %i\n", letra, letra ); En este ejemplo letra comienza con el valor 'A', que es el cdigo ASCII 65. Al sumarle 1 pasa a tener el valor 66, que equivale a la letra 'B' (cdigo ASCII 66). La salida de este ejemplo sera: La letra es A y su valor ASCII es 65 Ahora es B y su valor ASCII es 66 El modificador Unsigned Este modificador (que significa sin signo) modifica el rango de valores que puede contener una variable. Slo admite valores positivos. Si hacemos: unsigned char variable; Esta variable en vez de tener un rango de -128 a 128 pasa a tener un rango de 0 a 255. El tipo Float En este tipo de variable podemos almacenar nmeros decimales, no slo enteros como en los anteriores. El rango de posibles valores es del 3,4E-38 al 3,4E38. Declaracin de una variable de tipo float: float numero; Para imprimir valores tipo float Usamos %f. float num=4060.80; printf( "El valor de num es : %f", num ); Resultado: El valor de num es: 4060.80 Si queremos escribirlo en notacin exponencial usamos %e: float num = 4060.80; printf( "El valor de num es: %e", num );
36
Que da como resultado: El valor de num es: 4.06080e003 El tipo Double En las variables tipo double se almacenan nmeros reales del 1,7E-307 al 1,7E308. Se declaran como double: double numero; Para imprimir se usan los mismos modificadores que en float. Cmo calcular el mximo valor que admite un tipo de datos Lo primero que tenemos que conocer es el tamao en bytes de ese tipo de dato. Vamos a ver un ejemplo con el tipo INT. Hagamos el siguiente programa: #include <stdio.h> void main() { int num1; printf( "El tipo int ocupa %i bytes\n", sizeof(int) ); } Comprobado con DJGPP En mi ordenador el resultado es: El tipo int ocupa 4 bytes. Como sabemos 1byte = 8bits. Por lo tanto el tipo int ocupa 4*8=32 bits. Ahora para calcular el mximo nmero debemos elevar 2 al nmero de bits obtenido. En nuestro ejemplo: 2^32=4.294.967.296. Es decir en un int se podra almacenar un nmero entre 0 y 4.294.967.296. Sin embargo esto slo es cierto si usamos un tipo unsigned (sin signo, se hace aadiendo la palabra unsigned antes de int). Para los tipos normales tenemos que almacenar nmeros positivos y negativos. As que de los 4.294.967.296 posibles nmeros la mitad sern positivos y la mitad negativos. Por lo tanto tenemos que dividir el nmero anterior entre 2 = 2.147.483.648. Como el 0 se considera positivo el rango de nmeros posibles que se pueden almacenar en un int sera: 2.147.483.648 a 2.147.483.647. Resumen: 1) Obtenemos el nmero de bytes. 2) Multiplicamos por ocho (ya lo tenemos en bits). 3) Elevamos 2 al nmero de bits. 4) Dividimos entre 2. Overflow: Qu pasa cuando nos saltamos el rango El overflow es lo que se produce cuando intentamos almacenar en una variable un nmero mayor del mximo permitido. El comportamiento es distinto para variables de nmeros enteros y para variables de nmeros en coma flotante. Con nmeros enteros En mi ordenador y usando DJGPP bajo Dos el tamao del tipo int es de 4bytes(4*8=32bits). El nmero mximo que se puede almacenar en una variable tipo int es por tanto 2.147.483.647 (ver
37
apartado anterior). Si nos pasamos de este nmero el que se guardar ser el siguiente pero empezando desde el otro extremo, es decir, el -2.147.483.648. El compilador seguramente nos dar un aviso (warning) de que nos hemos pasado. #include <stdio.h> void main() { int num1; num1 = 2147483648; printf( "El valor de num1 es: %i\n", num1 ); } Comprobado con DJGPP El resultado que obtenemos es: El valor de num1 es: -2147483648 Comprueba si quieres que con el nmero anterior (2.147.483.647) no pasa nada. Con nmeros en coma flotante El comportamiento con nmeros en coma flotante es distinto. Dependiendo del ordenador si nos pasamos del rango al ejecutar un programa se puede producir un error y detenerse la ejecucin. Con estos nmeros tambin existe otro error que es el underflow. Este error se produce cuando almacenamos un nmero demasiado pequeo (3,4E-38 en float). Resumen de los tipos de datos en C Esto es algo orientativo, depende del sistema. Tipo Datos almacenados N de Bits Valores posibles (Rango) unsigned char Caracteres 8 -128 a 128 int enteros 16 -32.767 a 32.767 long enteros largos 32 -2.147.483.647 a 2.147.483.647 float Nums. reales (coma flotante) 32 3,4E-38 a 3,4E38 double Nums. reales (coma flotante doble) 64 1,7E-307 a 1,7E308
Esto no siempre es cierto, depende del ordenador y del compilador. Para saber en nuestro caso qu tamao tienen nuestros tipos de datos debemos hacer lo siguiente. Ejemplo para int: #include <stdio.h> void main() { printf( "Tamao (en bits) de int = %i\n", sizeof( int )*8 ); } Ya veremos ms tarde lo que significa sizeof. Por ahora basta con saber que nos dice cual es el tamao de una variable o un tipo de dato. Ejercicios Ejercicio 1. Busque los errores: #include <stdio.h> void main() { int nmero;
38
nmero = 2; } Solucin: Los nombres de variables no pueden llevar acentos, luego al compilar nmero dar error. #include <stdio.h> void main() { int numero; numero = 2; printf( "El valor es %i" Numero ); }
3.4.2 Identificadores
Son los nombres elegidos para las variables, constantes, funciones, clases y similares. El primer carcter debe ser una letra o un subrayado. El resto del nombre puede contener dgitos. Los identificadores que comienzan con dos subrayados estn reservados para uso interno del compilador C++.
39
BIBLIOGRAFIA http://dac.escet.urjc.es/docencia/ETC-Superior/teoria-cuat1/HojaEj5.pdf
40
De acuerdo a lo anterior, la siguiente expresin: a < 10 && 2 * b < c Es interpretada como: (a < 10) && ( (2 * b) < c ) y a= b= 10 / 5 + 2; como a= (b= ( 10 / 5 ) + 2 );
41
EVALUACIN DE EXPRESIONES X=A/B-C+D*E-A*C EXPRESIN Operandos Operadores Delimitadores 5 operandos A,B,C,D,E Pueden ser cualquier variable o constante vlida del lenguaje Los valores de las variables deben ser coherentes con las operaciones que se realicen con ellas 6 operadores /,-,+,*,-,* Describen las operaciones que se realizan entre las variables Pueden ser aritmticos, lgicos, relacionales EVALUACIN DE EXPRESION X=A/B-C+D*E-A*C Orden en el que se deben realizar las operaciones Cada lenguaje debe definir exactamente dicho orden Si A = 4, B = C = 2, D = E = 3 => X=((4/2)-2)+(3*3)-(4*2) =0+9-8 =1 X = ( 4 / (2 - 2 + 3 ) ) * ( 3 - 4 ) * 2 = ( 4 / 3 ) * ( -1 ) * 2 = -2.66666666 El orden en el que se deben realizar las operaciones se especifica mediante: prioridades o parntesis El lenguaje define prioridades para los operadores El programador puede cambiar las prioridades mediante ( ) A igual prioridad, evaluacin de izquierda a derecha Ejemplo: A/B*C (A/B)*C (1) A/(B*C) (2) Prioridad de / == prioridad de * Si A = B = C = 2 (1) = 2 (2) = 0.5 En C++ se evala segn (1) Ejemplo X = A / B - C + D * E - A * C se evaluar en C++ X = ( ( (A / B) - C ) + ( D * E ) ) - ( A * C ) Utilizada para que los compiladores puedan traducir expresiones. Si e es una expresin con operadores y operandos, la forma habitual de escritura se conoce como infix porque los
42
operadores van entre (in) los operandos (los operadores unarios preceden sus operandos). La forma postfix consiste en colocar cada operador inmediatamente despus de los operandos Ventajas: No son necesarios los parntesis La prioridad de los operadores no es relevante La expresin se puede evaluar realizando un recorrido de izquierda a derecha, apilando los operandos y evaluando los operadores utilizando los operandos adecuados extrados de la pila y apilando el resultado intermedio para repetir el proceso. Este mtodo es ms simple que los necesarios cuando se trabaja con la notacin infix
BIBLIOGRAFIA http://dac.escet.urjc.es/docencia/ETC-Superior/teoria-cuat1/HojaEj5.pdf
43
44
quitar los comentarios interpretar las directivas del preprocesador las cuales inician con #. Por ejemplo: #include -- incluye el contenido del archivo nombrado. Estos son usualmente llamados archivos de cabecera (header). Por ejemplo: #include <math.h> -- Archivo de la biblioteca estndar de matemticas. #include <stdio.h> -- Archivo de la biblioteca estndar de Entrada/Salida. #define -- define un nombre simblico o constante. Sustitucin de macros. #define TAM_MAX_ARREGLO 100 Compilador de C El compilador de C traduce el cdigo fuente en cdigo de ensamblador. El cdigo fuente es recibido del preprocesador. Ensamblador El ensamblador crea el cdigo fuente o los archivos objeto. En los sistemas con UNIX se podrn ver los archivos con el sufijo .o. Ligador Si algn archivo fuente hace referencia a funciones de una biblioteca o de funciones que estn definidas en otros archivos fuentes, el ligador combina estas funciones (con main()) para crear un archivo ejecutable. Las referencias a variables externas en esta etapa son resueltas.
BIBLIOGRAFIA http://dac.escet.urjc.es/docencia/ETC-Superior/teoria-cuat1/HojaEj5.pdf
45
IV. FUNCIONES
4.1 Funciones 4.1.1 Definicin de funciones 4.1.2 Funciones estndar
4.3 Funciones definidas por el usuario 4.3.1 Pase por valor 4.3.2 Pase por referencia
46
4.1 Funciones
4.1.1 Definicin de funciones
Las funciones son porciones de cdigo que devuelven un valor. Permiten descomponer el programa en mdulos que se llaman entre ellos. En C no existe diferencia entre funciones y procedimientos: a todas las subrutinas se las llama funciones. La definicin de una funcin especfica lo siguiente: nombre de la funcin nmero de argumentos que lleva y tipo de cada uno de ellos tipo de datos que devuelve Cuerpo de la funcin (el cdigo que ejecuta) Sintaxis: tipo nombre ( arg1, arg2, ... ) { ... cuerpo ... } Cada argumento se especifica como en una declaracin de variable. El cuerpo de la funcin debera contener una sentencia donde se devuelve el resultado de la funcin, que se hace de esta forma: return expresin; La funcin devolver el resultado de la expresin.
47
} Estructura de una funcin. Tipo _ retorno Nb_funciones. { Cuerpo de la funcin (parmetros); Valor de retorno } Retorno: Tipo de dato del valor que devuelve la funcin. Nb- funcin: Nombre de k la funcin la cual se crea respetando las reglas de creacin de los identificadores. Parmetros: Lista de variables tipificadas y separadas por coma que permita la comunicacin. Cuerpo de la funcin: Declaraciones e instrucciones que realiza la tarea encomendada a la funcin. Valor de retorno: Valor que devuelve la funcin la cual puede ser que no devuelva ningn valor y solo realiza algunas indicaciones. Llamada a una funcin. Es la forma en la que se emboca a una funcin. La llamada a la funcin supone la ejecucin de su cdigo y la terminacin del proceso que debe realizar la funcin. Una vez concluida se devuelve el control a la funcin desde la cual fue llamada. #include(conio.h) # include(studio.h) Int suma(int a, int b) { Suma= a+b; return=(suma); } Float resta (float x, int b); } Char letra (char z); { Letra=z; Return= (letra); Main(); { Int c,d,opercion1; Float c, operacion2; Char f,h; c=3; d=5;
48
#include(conio.h) # include(studio.h) Main() { Int num.1, num 2; Printf(deme un numero); Scantf(% d, & num^), Suma=num1+5; Printf(%d,& suma); Getch(); Return 0; }
49
Funciones #include(conio.h) # include(studio.h) Float resta(a-b); } Int multiplicacion(float c, int c) } Char letra(int c); { If e>5 then (^s^); } Int a,bd,,e multiplicacion 1; { Float b.c, reta, 1: Char letra; Printf(^deme 3 valores enteros,^); Scanf(^%^,& a); Scanf(^%,^& d); Scanf(%,^& e); Printf(^dame valores enteros flotantes^); Scanf(^%,^f,& b); Scanf(^%^,& c); Reta 1= resta(a-b); Multiplicacion1=multiplicacion(c,d); Letra=^N^); Getch(); Return0; } Hacer una funcin que realiza una divisin de un numero entero con un numero flotante y que devuelva la letra S si el resultado de esa divisin es mayor que 2 si no que devuelva la letra N. para los valores que entran a la divisin se har la captura a travs del teclado. #include(conio.h) # include(studio.h) Float resta(a-b); } Char divicion(int num1, float num 2,) } Divicion=njm1/num2; If (div>2) then return(^S^); else return(^N^); } Main() { Int num 1: Flota num 2; Printf(^deme 1 numero enteros y un numero flotante ,^); Scanf(^%d^,& num1); Scanf(^%,d^& num2);
50
Div 2= div (num1, num2); Printf(^%,c^;div2^); Getch(); Return0; } EXADECIMAL Puntero: direccin, de la memoria.
4.4 Punteros
4.4.1 Definicin de punteros
Es una variable que representa la posicin (en vez del valor) de otro dato tal como una variable o un elemento de una formacin.
51
DECLARACIONES DE PUNTEROS int*A; int*lugar; int*A1; ASIGNACIN A UN PUNTERO A=&lugar; S=&A; T=&A1; MOSTRAR EN PANTALLA contenido printf(%d,*A); printi(%f,*lugar); printf(%d,*A1); ubicacion printf(%xh,A); printf(%xh,lugar); printf(%xh,A1); Realizar una funcin que devuelva un nmero flotante bajo las siguientes condiciones. Realizar una multiplicacin de dos nmeros enteros si un carcter es A en cualquier otro caso realizar una divisin, mostrar en pantalla el valor del carcter entre las 2 variables de tipo entero y el resultado de la funcin. #include(conio.h) # include(studio.h) Float multiplicacion (int num1, int num2, char letra) { If (letra==A) then return(num1*num2); else return(num1/num2); } Main() { Int num 1,num2; Float multiplicacion; char letra; Printf(dame 2 enteros); Scanf(%d,& num1); Scanf(%,d& num2); Printf(dame un caracter); Scanf(^%c^,& letra); multiplicacion1=multiplicacion(num1,num2,letra); Printf(^%d,%d^,num1,num2); printf(%c,letra); printf(%f,multiplicacion1); Getch(); Return0; }
BIBLIOGRAFIA http://dac.escet.urjc.es/docencia/ETC-Superior/teoria-cuat1/HojaEj5.pdf
52
V. ESTRUCTURAS DE SELECTIVAS
5.1 Selectiva simple
53
Ejemplo 1. Construir un algoritmo tal, que dado como dato la calificacin de un alumno en un examen, escriba "Aprobado" en caso que esa calificacin fuese mayor que 8. Salidas: mensaje de aprobado si se cumple la condicin. Entradas: calificacin Datos adicionales: un alumno aprueba si la calificacin es mayor que 8 Variables:
54
Cal = calificacin Algoritmo: Inicio Leer (cal) Si cal > 8 entonces Escribir ("aprobado") Fin_si Fin
55
Entonces, si una condicin C es verdadera, se ejecuta la accin S1 y si es falsa, se ejecuta la accin S2.
Ejemplo 1 Dado como dato la calificacin de un alumno en un examen, escriba "aprobado" si su calificacin es mayor que 8 y "Reprobado" en caso contrario. Algoritmo: Inicio Leer (cal) Si cal > 8 entonces Escribir ("aprobado") Sino Escribir ("reprobado") Fin_si Fin
56
Ejemplo 2. Dado como dato el sueldo de un trabajador, aplicar un aumento del 15% si su sueldo es inferior a $1000 y 12% en caso contrario, luego imprimir el nuevo sueldo del trabajador.
EXPRESIONES LGICAS Sirven para plantear condiciones o comparaciones y dan como resultado un valor booleano verdadero o falso, es decir, se cumple o no se cumple la condicin. Se pueden clasificar en simples y complejas. Las simples son las que usan operadores relacionales y las complejas las que usan operadores lgicos. Ejemplos: Un ejemplo en el cual usamos el operador lgico AND sera: Una escuela aplica dos exmenes a sus aspirantes, por lo que cada uno de ellos obtiene dos calificaciones denotadas como C1 y C2. El aspirante que obtenga calificaciones mayores que 80 en ambos exmenes es aceptado; en caso contrario es rechazado. En este ejemplo se dan las condiciones siguientes: Si (C1 >= 80) y (C2 >= 80) entonces Escribir ("aceptado") Sino Escribir ("rechazado") Fin_si Note que tambin usa operadores relacionales. Por lo general cuando hay operadores lgicos, stos van acompaados de operadores relacionales. Un ejemplo usando el operador lgico OR sera: Una escuela aplica dos exmenes a sus aspirantes, por lo que cada uno de ellos obtiene dos calificaciones denotadas como C1 y C2. El aspirante que obtenga una calificacin mayor que 90 en cualquiera de los exmenes es aceptado; en caso contrario es rechazado. En este caso se dan las condiciones siguientes: Si (C1 >=90) or (C2 >=90) entonces Escribir ("aceptado") Sino
57
Escribir ("rechazado") Fin_si La instruccin equivale a OR ya que nos dice que puede ser en cualquiera de los exmenes no necesariamente en los dos. En el ejemplo 1 la palabra ambos equivala a seleccionar la instruccin AND. Si la instruccin nos dijera que obtenga una nota en cualquiera de los exmenes pero no en ambos, nos estara indicando una instruccin XOR que es un tipo de OR pero exclusivo. Es decir, no puede considerarse el caso en que tenga la misma nota en los dos exmenes, solo en uno de los dos.
58
He= ht - 40 Si he > 8 entonces Het =he - 8 Phe =ph * 2 * 8 + ph * 3 * het Sino Phe = ph * 2 * he Fin_si Pt =ph * 40 + phe Sino Pt = ph * ht Fin_si Escribir (pt) Fin Ejemplo 2. Dados los datos A, B y C que representan nmeros enteros diferentes, construir un algoritmo para escribir estos nmeros en forma descendente. Este es un ejemplo de los algoritmos conocidos como de Lgica Pura, ya que poseen muchas decisiones y muchas bifurcaciones. Salida: A, B y C ordenados descendentemente. Entradas: A, B y C. La dinmica del problema es comparar dos nmeros a la vez para conocer cul es el mayor.
59
Ejemplo 1: Disear un algoritmo tal que dados como datos dos variables de tipo entero, obtenga el resultado de la siguiente funcin:
60
61
Ejemplo 2. Dados como datos la categora y el sueldo de un trabajador, calcule el aumento correspondiente teniendo en cuenta la siguiente tabla. Imprimir la categora del trabajador y el nuevo sueldo.
Definicin de variables: Cate = categora Sue = sueldo Nsue = nuevo sueldo ALGORITMO Inicio Leer (cate, sue) En caso que cate sea 1: hacer nsue <-- sue * 1.15 2: hacer nsue <-- sue * 1.10 3: hacer nsue <-- sue * 1.08 4: hacer nsue <-- sue * 1.07 Fin_caso_que Escribir (cate, nsue) Fin
BIBLIOGRAFIA http://www.mailxmail.com/curso/informatica/programacionestructurada/capitulo13.htm
62
63
Condicin
NO
SI
Grupo de Instrucciones
Donde sentencia es una sentencia vlida o un bloque de sentencias. La condicin puede ser cualquier expresin y cualquier valor distinto de 0 es cierto.
#include "stdio.h" main() { int i; float x, suma, promedio; /* lee nmeros desde el teclado para calcular su promedio, termina Cuando se introduce -1 */ x = suma = 0; i = 1; while (x != -1) { printf("\nIntroduzca el valor %d:", i); scanf("%f", &x); suma += x; } promedio := suma/i; printf("\nEl promedio es: %f / %d = %f", suma, i, promedio); }
64
Grupos de Instrucciones
SI
Condicin
NO
Fin
Las llaves no son necesarias en el caso de una sentencia simple, pero se recomienda colocarlas por razones de legibilidad, este bucle iterar hasta que la condicin sea falsa. Ejemplo: El siguiente bucle lee nmeros desde el teclado hasta que encuentra un nmero negativo:
65
Grupo de Instrucciones
Donde inicializacin es una sentencia de asignacin para inicializar la variable de control del bucle, condicin es una expresin relacional que determina el final del bucle e incremento define cmo cambia la variable de control cada vez que se ejecute una iteracin del bucle. Ejemplo: #include "stdio.h" /* imprime los numeros del 1 al 100 */ main() { int x; for (x=1; x<=100; x++) printf("%d ", x); } En este ejemplo, x se inicializa a 1 y se compara con 100, ya que la condicin es cierta, se ejecuta la funcin printf() y x se incrementa en 1, este bucle se repite hasta que x es mayor que 100. A continuacin, un ejemplo del bucle for con varias sentencias:
#include "stdio.h" /* imprime el cuadrado de los numeros del 10 al 1 */ main() { int i, x; for (i=10; x0; x--){ x := i*i; printf("%d al cuadrado es: %d\n", i, x); }
66
VII. ARREGLOS
7.1 Arreglo unidimensional 7.1.1 Conceptos bsicos 7.1.2 Operaciones aplicaciones.
7.4 Operaciones
7.5 Aplicaciones
7.6 Registros
7.7 Archivos
67
unidCompradas se inicializan con 10 datos enteros Letras se inicializa con 52 datos de tipo caracter
68
PRACTICA: #include<stdio.h> /*librera para funciones entrada/salida*/ #include<conio.h> /*librera conio.h*/ int a,x[4],y[4],z[4]; /* declaracin de variables enteras*/ main() /*funcin principal*/ { /*inicio del programa*/ clrscr(); /*limpia pantalla*/ printf("escribe una matriz x"); /* imprime un comentario en la pantalla*/ for(a=0;a<4;a++) /*ciclo de repeticin cuando a = 0, a menor a 4 e incremento de a*/ { /*inicio del for*/ gotoxy((a+1)*3,3);scanf("%d",&x[a]); /*coordenadas de posicin y introduccin de valores a las variables*/ } printf("Introduce los valores de la matriz y:"); /*imprime un mensaje en pantalla*/ for(a=0;a<4;a++){ /*ciclo de repeticin cuando a = 0, a menor a 4 e incremento de a*/ gotoxy((a+1)*3,6);/*coordenadas de posicin*/ scanf("%d",&y[a]); /* lee la variable*/ } for(a=0;a<4;a++) z[a]=x[a]+y[a]; /* operacin matemtica*/ for(a=0;a<4;a++){ /*ciclo de repeticion cuando a = 0, a menor a 4 e incremento de a*/ gotoxy((a+1)*3,10);printf("%d",z[a]); /*coordenadas de posicin e imprime los valores de las variables*/ } getch(); /* pausa*/ }/* fin del programa*/
1 2 3 4
69
7.4 Operaciones
Declaracin: double nota[25][4]; int DocCasacas[3][30]; char Rpta[45][10];
A) Inicializacin de Matrices Peso declara e inicializa los pesos promedios de 30 deportistas en cada uno de los 12 meses del 2001. (Total 240 pesos agrupados de 12 en 12). Total 240 datos reales int DocCasacas[3][4]={{20,40,35,80}, {25,70,50,36}, {48,36,64,24}}; int DocCasacas[3][4]={20,40,35,80, 25,70,50,36, 48,36,64,24}; int DocCasacas[ ][4]={{20,40,35,80}, {25,70,50,36}, {48,36,64,24}}; Declara e inicializa DocCasacas, las docenas de casacas de 3 tallas ('S', 'M','L') confeccionadas en cada una de los 4 semanas del mes de Junio-2002 char Rpta[5][4]= { {'a','e','c','d'}, {'e','c','d','a'}, {'c','c','d','c'} }; char Rpta[5][4]={'a','e','c','d','e','c','d','a', 'c','c','d','c' }; char Rpta[ ][4]={'a','e','c','d', 'e','c','d','a', 'c','c','d','c' };
B) Asignacin A[10] [20] = 45 A[10] [20] = 45; Asigna el valor 45 al elemento de la fila 10 y columna 20 del arreglo bidimensional A. Rpta [2][5] = 'c' Rpta [2][5] = 'c'; Asigna 'c' al elemento de la fila 2 y columna 5 del arreglo Rpta
para (i = 1 ; Hasta i<= 5 ; con i=i+1) { para (j = 1;hasta j<= 3 ; con j=j+1) { Mostrar Peso [ i ][ j ]; } }
70
7.5 Aplicaciones
Elaborar un algoritmo que lea los datos numricos de tipo entero para una matriz de 10 renglones con 15 columnas y mandar a desplegar en contenido de la misma. Algoritmo de PRODUCCIN 1. definir variables NUMEROS: arreglo [10,15] entero REN,COL: entero 2. FOR REN=1,10 a.FOR COL=1,15 1. solicitar elemento REN,COL 2. leer NUMEROS[REN,COL] b. END FOR 3. END FOR 4. FOR REN=1,10 a= FOR COL=1,15 1. Imprimir NUMERO [REN, COL] b. END FOR 5. END FOR 6. FIN Cdigo #include<conio.h> #include<stdio.h> main() { int NUMEROS[10][15]; int REN,COL; for(REN=1;REN<=10;REN++) { for(COL=1;COL<=15;COL++) { Printf (cual es el valor); Scanf (%d,&NUMEROS[REN][COL]); } } for (REN=1;REN<=10;REN++) { for(COL=1;COL<=15;COL++) { printf(%d,NUMEROS[REN][COL]); } } getch(); return 0
71
7.6 Registros
Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son espacios fsicos dentro del microprocesador con capacidad de 4 bits hasta 64 bits dependiendo del microprocesador que se emplee. Los registros son direccionables por medio de una vieta, que es una direccin de memoria. Los bits, por conveniencia, se numeran de derecha a izquierda (15, 14,13. 3, 2, 1,0), los registros estn divididos en seis grupos los cuales tienen un fin especfico. Los registros se dividen en:
Registros de segmento Registros de apuntadores de instrucciones Registros apuntadores Registros de propsitos generales Registro ndice Registro de bandera.
Registros de segmento. Un registro de segmento se utiliza para alinear en un lmite de prrafo o dicho de otra forma codifica la direccin de inicio de cada segmento y su direccin en un registro de segmento supone cuatro bits 0 a su derecha. Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para direccionamientos conocidos como el segmento actual. Los registros de segmento son:
Registro CS. El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, ms un valor de desplazamiento en el registro de apuntado de instruccin (IP), indica la direccin de una instruccin que es buscada para s ejecucin. Para propsito de programacin normal, no necesita referenciar el registro CS. Registro DS. La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. En trminos sencillos, esta direccin, ms un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un bytes especifico en el segmento de datos. Registro SS. El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro SS. Esta direccin de segmento, ms un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que est siendo direccionada. Para propsitos de programacin normal, no se necesita referenciar el registro SS. Registro ES Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro esta de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin apropiada.
72
Registros FS y GS. Son registros extra de segmento en los procesadores 80386y posteriores a estos procesadores. Registro Apuntador de instrucciones. (IP) El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El registro IP est asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se est ejecutando actualmente. En el ejemplo siguiente, el registro CS contiene 25A4[0]H y el IP contiene 412H. Para encontrar la siguiente instruccin que ser ejecutada el procesados combina las direcciones en el CS y el IP as: Segmento de direccin en el registro CS: 25A40H Desplazamiento de direccin en el registro IP: + 412H Direccin de la siguiente instruccin: 25E52H Registros apuntadores. Los registros apuntadores estn asociados con el registro SS y permiten al procesador accesar datos en el segmento de pila los registros apuntadores son dos:
El registro SP El registro BP
Registro SP. El apuntador de pila IP de 16 bits est asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que est siendo procesada en la pila. El ejemplo siguiente el registro SS contiene la direccin de segmento 27B3[0]H y el SP el desplazamiento 312H Para encontrar la palabra actual que est siendo procesada en la pila el microprocesador combina las direcciones en el SS y el PP: Direccin de segmento en el registro SS: 27B30H Desplazamiento en el registro SP: + 312H Direccin en la Pila: 27E42H . 27B3[0]H 312H Direccin del segmento SS Desplazamiento del SP Registro BP. El registro BP de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones transmitidos va lapida. Registros de propsitos generales. Los registros de propsitos generales AX, BX, CX y DX son los caballos de batalla o las herramientas del sistema. Son los nicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ltimo byte de la izquierda es la parte "alta", y el ltimo byte de la derecha es la parte "baja" por ejemplo, el registro CX consta de una parte CH (alta) y una parte CL (baja), y usted puede referirse a cualquier parte por si nombre. Las instrucciones siguientes mueven ceros a los registros CX, CH y CL respectivamente. Mov CX, 00 Mov CH, 00 Mov CL, 00
73
Los procesadores 80386 y posteriores permiten el uso de todos registros de propsito general, mas versiones de 32 bits; EAX, EBX y EDCX. Registros AX. El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmtica. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. Tambin, algunas operaciones generan cdigo ms eficientes si se refiere al AX en lugar de los otros registros. Registro BX. El BX es conocido como el registro base ya que es el nico registro de propsitos generales que pueden ser unos ndices para direccionamiento indexado. Tambin es comn emplear al BX para clculos. Registro CX. El CX es conocido como el registro contador. Puede contener un valor para controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la izquierda. El CX tambin es usado para muchos clculos. Registro DX. El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren su uso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y al AX trabajando juntos. Puede usar los registros de propsitos para suma y resta de cifras de 8, 16, 32 bits. Registro ndice. Los registros SI y DI estn disponibles para direccionamientos indexados y para sumas y restas. Que son las operaciones de punta. Registro SI. El registro ndice de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI est asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado a 32 bits, el ESI. Registro DI. El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el Di est asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado a 32 bits, el EDI. Registro de bandera. Los registros de banderas sirven parar indicar el estado actual de la maquina y el resultado del procesamiento, Cuando algunas instrucciones piden comparaciones o clculos aritmticos cambian el estado de las banderas. Las banderas estn en el registro de banderas en las siguientes posiciones: bits 15 14 13 12 11 10 9 8 7 6 5 4321 O D I T S Z A P C
Bandera Las banderas ms comunes son las siguientes: OF (Over flow flag, desbordamiento).
74
Indica el desbordamiento de un bit de orden alto (mas a la izquierda) despus de una operacin aritmtica. DF (Direction flag, Direccin). Designa la direccin hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres. IF (Interruption flag, Interrupcin). Indica que una interrupcin externa, como la entrada desde el teclado sea procesada o ignorada. TF (Trap flag, Trampa). Examina el efecto de una instruccin sobre los registros y la memoria. Los programas depuradores como DEBUG, activan esta bandera de manera que pueda avanzar en la ejecucin de una sola interrupcin a un tiempo. SF (Sign flag, Signo). Contiene el signo resultante de una operacin aritmtica (0=positivo y 1= negativo). ZF (Zero flag, Zero). Indica el resultado de una operacin aritmtica o de comparacin (0= resultado diferente de cero y 1=resultado igual a cero). AF (Auxiliary carry flag, Acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmtica especializada PF (Parity flag, Paridad). Indica paridad par o impar de una operacin en datos de ocho bits de bajo orden (mas a la derecha). CF (Carry flag, Acarreo). Contiene el acarreo de orden ms alto (mas a la izquierda) despus de una operacin aritmtica; tambin lleva el contenido del ltimo bit en una operacin de corrimiento o rotacin. Cuadro Comparativo TIPOS DE REGISTROS Registros de Segmento FUNCION Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para el direccionamiento conocida como el segmento actual de Este registro est compuesto por 16 bits y contiene el desplazamiento de la siguiente instruccin que se va a ejecutar. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits llamado EIP. Permiten al sistema acceso de datos al segmento de la pila. Los procesadores 80386 tienen un apuntador de pila de 32 bits llamado ESP. El sistema maneja de manera automtica estos registros.
Registros de Instrucciones
Apuntador
Registros Apuntadores
Registros de Propsito General Son los caballos de batalla del sistema y pueden ser direccionados como una palabra o como una parte de un bytes. Los procesadores 80386 y posteriores permiten el uso de todos los registros de propsitos general ms sus versiones ampliadas de 32 bits llamados EAX, EBX, ECX y EDX. Registros ndices Sirven para el direccionamiento de indexado y para las operaciones de sumas y restas.
75
Registros de Banderas
Sirven para indicar el estado actual de la maquina y el resultado del procesamiento. De los 16 bits de registro de bandera 9 son comunes a toda la familia de los procesadores 8086.
7.6 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. Los archivos como coleccin de datos sirven 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 cuyos registros sufren pocas o ninguna variacin a lo largo del tiempo, se dividen en:
76
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 experimentado 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 especfico 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.
77
Dinmico; es cuando se accede a los archivos en cualquier de los modos anteriormente citados. La eleccin del mtodo est 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
BIBLIOGRAFIA Estructura de Datos en Pascal, Autor Aarn M. Tenenbaum, Moshe J. Augentein. Primera edicin. Diseo y Administracin de Base de Datos Gary W. Hansen, James V. Hansen, Segunda Edicin. Gua de Estructura y Procesamiento de Datos Profesor David Lpez, Segundo semestre U.N.I.R. (Maracaibo).
78