You are on page 1of 77

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
En la actualidad se utilizan dos tipos principales de computadoras: Analgicas y Digitales. Sin embargo, el trmino computadora suele utilizarse para referirse exclusivamente al tipo digital. Las computadoras analgicas aprovechan la similitud matemtica entre las interrelaciones fsicas de determinados problemas y emplean circuitos electrnicos o hidrulicos para simular el problema fsico. Las computadoras digitales resuelven los problemas realizando clculos y tratando cada nmero dgito por dgito.

COMPUTADORA ANALGICA
La computadora analgica es un dispositivo electrnico o hidrulico diseado para manipular la entrada de datos en trminos de, por ejemplo, niveles de tensin o presiones hidrulicas, en lugar de hacerlo como datos numricos. El dispositivo de clculo analgico ms sencillo es la regla de clculo, que utiliza longitudes de escalas especialmente calibradas para facilitar la multiplicacin, la divisin y otras funciones. En la tpica computadora analgica electrnica, las entradas se convierten en tensiones que pueden sumarse o multiplicarse empleando elementos de circuito de diseo especial. Las respuestas se generan continuamente para su visualizacin o para su conversin en otra forma deseada.

COMPUTADORA DIGITAL
Todo lo que hace una computadora digital se basa en una operacin: la capacidad de determinar si un conmutador, o 'puerta', est abierto o cerrado. Es decir, la computadora puede reconocer slo dos estados en cualquiera de sus circuitos microscpicos: abierto o cerrado, alta o baja tensin o, en el caso de nmeros, 0 o 1. Sin embargo, es la velocidad con la cual la computadora realiza este acto tan sencillo lo que la convierte en una maravilla de la tecnologa moderna. Las velocidades de la computadora se miden en megahercios, o millones de ciclos por segundo. Una computadora con una velocidad de reloj de 100 MHz, velocidad bastante representativa de un microordenador o microcomputadora, es capaz de ejecutar 100 millones de operaciones discretas por segundo. Las microcomputadoras de las compaas pueden ejecutar entre 150 y 200 millones de operaciones por segundo, mientras que las supercomputadoras utilizadas en aplicaciones de investigacin y de defensa alcanzan velocidades de miles de millones de ciclos por segundo.

HISTORIA DE LA COMPUTACIN (Resumen)


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 las varillas, sus posiciones representan valores almacenados, y es mediante dichas posiciones que ste 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. Las salidas se obtenan observando las posiciones finales de las ruedas, de manera similar a como leemos los nmeros en el cuenta kilmetros de un automvil. La primera computadora fue la mquina analtica creada por Charles Babbage, profesor de matemticos 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 apoy 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. 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 Neumman 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 clasificarse por generaciones y el criterio que se determin para determinar el cambio de generacin no est muy bien definido, pero resulta aparente que deben tomarse en cuenta al menos los siguientes criterios: La forma en que estn construidas. La forma en que el ser humano se comunica con ellas.

Primera Generacin
En esta generacin haba un 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 abarc la dcada de los cincuenta. Y se conoce como la Primera Generacin. Estas mquinas tenan las siguientes caractersticas: 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( UNIVERSAL Computer), que fue la primera computadora comercial, dispona de mil palabras de memoria central y poda 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 desarroll 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 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 las computadoras 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 son bastante avanzadas para su poca como la serie 5000 de Burroughs y la ATLAS de la Universidad de Manchester. 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 60, surge la Tercera Generacin de las computadoras. Se inaugura con la IBM 360 en abril de 1964. Las caractersticas de las computadoras de esta generacin fueron las siguientes: Su fabricacin electrnica est 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 estaban divididos por aplicaciones). El sistema operativo de la serie 360, se llam OS y contaba con varias configuraciones, inclua un conjunto de tcnicas de manejo de memoria y del procesador que pronto se convirtieron en estndar. En 1964 CDC introdujo la serie 370 y produce los modelos 115, 125, 135, 145,158, 168. UNIVAC compite con los modelos 1108 y 1110, mquinas de 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 produce su serie 370 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 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 Ardes 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, Ryan) 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, cuyo uso ha 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 slo por IBM; y sta por su parte es an de las cinco compaas ms grandes del mundo. En 1981 se vendieron 800 000 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 se 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 crecen 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 supuesto, 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 la serie 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 el 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 l, una computadora tiene la siguiente estructura:

Una caracterstica importante de el modelo es que tanto los datos como los programas, se almacenan en la memoria antes de ser utilizados. A continuacin se muestran los ciclos que se debe cumplir el modelo de Von Neumann.

CICLO DE BSQUEDA DE LA INSTRUCCIN (CICLO FETCH)


Para ejecutar un programa almacenado en la memoria (modelo de Von Neumann) se requiere conocer cual es la ubicacin en la memoria de las instrucciones; adems del orden en que deben ser ejecutadas. Una forma de simplificar este problema es concebir a la memoria como un arreglo de celdas, identificando cada celda con su direccin (nmero binario que indica su posicin).

As la unidad de procesamiento central podr leerlas una por una, interpretarlas y ejecutarlas. Podemos reconocer dos fases para cada instruccin: 1. Ciclo de Bsqueda (ciclo fetch) La CPU suministra la direccin de la instruccin a ejecutar, posteriormente lee la instruccin de la memoria y finalmente la interpreta determinando que operaciones debe efectuar. 2. Ciclo de Ejecucin de la Instruccin Una vez identificada la instruccin, la CPU genera las seales de control necesarias para realizar las operaciones especificadas.

INFORMACIN MEDICIN DE LA INFORMACIN


La cantidad de informacin contenida en un mensaje es susceptible de medirse, este tema forma parte de la teora matemtica de la informacin desarrollada por el matemtico Claude Shannon y otros cientficos. Se llama Pregunta Binaria a aquella que slo admite dos posibles respuesta: Si y No. La cantidad de informacin de un mensaje es igual al nmero mnimo de preguntas binarias requeridas para determinar completamente dicho mensaje. La cantidad de informacin determinada por una sola pregunta binaria se llama Bit (cantidad mnima de informacin). La informacin se manipula mediante Smbolos. Un Mensaje es una serie de smbolos. Al conjunto de smbolos se le llama Cdigo. Si todos los smbolos tienen la misma longitud (esto es, el mismo nmero de Bits). El nmero n de smbolos diferentes est dado por:

n = 2b
Donde: b = Es el nmero de bits requeridos para representar cada smbolo. El cdigo ASCII es un cdigo de siete bits que se utiliza ampliamente.

A continuacin se muestra la tabla comparativa del tamao de palabra (Byte) de diferentes microprocesadores y el nmero de diferentes smbolos que se pueden formar en cada uno de ellos: MICROPROCESADOR b n Z80 8 256 80286 16 65,536 32 4.3x109 80386 486 Pentium 64 1.8x1019 Existen otros cdigos en el que los smbolos tienen diferente cantidad de bits. Un cdigo que hace mnima la longitud del mensaje es ptimo, y de ah que aunque es posible desarrollar una cantidad enorme de smbolos se intenta utilizar los menores posibles. En un conmutador, la informacin se maneja en paquetes de bits. Se llama Byte a la mnima cantidad de informacin que se puede obtener especificando una direccin.

HARDWARE
El conjunto de los componentes fsicos de un sistema de cmputo se denomina Hardware.

UNIDAD CENTRAL DE PROCESAMIENTO (CPU)


Es la parte ms importante de una computadora. La CPU est formada por: a) Memoria Principal Almacena datos y los programas, es de alta velocidad y costo relativamente elevado. Est compuesta de dos tipos: Memoria de Slo Lectura (ROM-Read Only Memory) Almacena programas en forma permanente y tablas de datos importantes. Normalmente su contenido es grabado en la fbrica. Un ejemplo es el BIOS (Basic Input / Output Service). Este programa puede ser intercambiable en algunos sistemas. Memoria de Acceso Aleatorio (RAM Random Access Memory)

Permite leer y escribir informacin en ella. En general, su contenido se pierde al desconectar la energa, aunque se estn desarrollando nuevas tecnologas (NVRAM Non Volatile RAM). A la cantidad de informacin que puede almacenar la memoria de una computadora se le llama Capacidad Total y se especifica en miles de bytes (KiloBytes o KBytes o KB). 1 KB= 210 bytes = 1024 bytes aunque hoy en da es ms comn hablar de millones de bytes (MegaBytes o Mbytes o MB) 1 MB= 220 bytes = 1 048 576 bytes

Registro de Propsito General


Son celdas de memoria muy rpidas, ubicadas generalmente dentro del mismo microprocesador (circuito integrado).

Registro de Propsito Especfico


Son celdas que contienen informacin para usos especficos como direcciones, instrucciones, banderas, etc. b) Unidad Aritmtica Lgica (ALU Arithmetic Logic Unit) Realiza operaciones aritmticas (suma, resta bsicamente y lgicas (AND, OR, etc.), genera un conjunto de banderas o seales (flags) que dependern de los diferentes resultados obtenidos como son: Cero, Signo, Paridad, Sobreflujo, etc. c) Unidad de control Interpreta las instrucciones, genera las seales de control para los Ciclos de Bsqueda y Ejecucin de las Instrucciones. d) Bus de Datos Permite la transferencia de instrucciones y operadores entre la memoria y los dems componentes de la CPU. e) Bus de Direcciones Especifica las direcciones de las localidades de memoria y puertos a que se desea tener acceso. f) Bus de Control Contiene todas las seales que activan los diferentes dispositivos que conforman la CPU.

g) Puertos Son dispositivos que permiten comunicarse a la CPU con el exterior (hacia los dispositivos perifricos). Permiten el paso de informacin hacia el Exterior (Salida) o hacia el Interior (Entrada).

DISPOSITIVOS PERIFRICOS
Son todos los dispositivos externos a la CPU y que se comunican con ella. Entre los ms importantes tenemos: a) Memoria Secundaria Llamada tambin Memoria Auxiliar o Memoria Masiva. Permite el almacenamiento de grandes cantidades de informacin a un costo relativo bajo. Ejemplos: Discos Flexibles (conocidos tambin como Diskettes o Floppies), Disco Duro, Cinta Magntica CD-Rom, etc. b) Terminal Esta incluye un teclado y un monitor de vdeo, el cual permite la interaccin Usuario-Mquina. c) Impresora Permite obtener la informacin entregada por la computadora en forma impresa como pueden ser textos, grficos. d) MODEM (MODulator-DEModulator) Permite al computador comunicarse con dispositivos remotos utilizando lneas telefnicas o por seales de radio. Unos dispositivos importantes del Mdem, aunque no de uso exclusivo en este, son los Convertidores AnalgicoDigital (A/D) y los Convertidores Digital- Analgico (D/A). Un A/D convierte seales analgicas en digitales que pueden ser ledas por el computador. Estas seales analgicas pueden provenir de variables fsicas como temperatura, velocidad, sonido, voz, etc.. Un D/A efecta la funcin inversa. Especficamente, un Mdem contiene al menos uno de cada uno de los dispositivos anteriores. A grandes rasgos, para la comunicacin remota entre dos computadoras, un computador enva una seal digital a su mdem el cual lo convierte en una seal analgica (D/A) para ser enviado hacia otro computador, este recibe la seal analgica y la convierte en digital por su computador (A/D). Este proceso puede repetirse en forma inversa.

SOFTWARE
Es todo aquello que NO es fsico. Incluye los programas y los lenguajes simblicos que estn escritos (lenguajes de alto nivel). a) Programa

Es una secuencia de instrucciones que permiten realizar una tarea. Para el computador los programas se escriben utilizando lenguajes especiales, especificando sin ambigedad todas las operaciones y el orden de ejecucin.

Lenguaje de Mquina
Las computadoras slo conocen intrnsecamente un lenguaje, llamado lenguaje de mquina, formado exclusivamente por unos y ceros. En lenguaje mquina, cada instruccin est formada por una secuencia de unos y ceros (sistema numrico binario) que forma el cdigo de operacin. Este lenguaje es difcil de manejar para las personas en general.

Lenguaje ensamblador.
Para facilitar la programacin, cada cdigo se representa mediante palabras simblicas (o Mnemnico) y los operandos se pueden expresar en notacin decimal o hexadecimal que son ms compactas que la binaria. A este nuevo lenguaje se le llama lenguaje ensamblador. Tanto para el lenguaje ensamblador como para el lenguaje de mquina, se deben especificar todos los detalles relativos al uso de los componentes del hardware, por esta razn son lenguajes de bajo nivel. Esto repercute en una fuerte dependencia con el tipo de arquitectura de la mquina.

Lenguaje de alto nivel.


Para facilitar la tarea de disear programas, se desarrollaron lenguajes llamados de alto nivel, en los que las instrucciones son ms comprensibles para las personas. Cuentan con un conjunto de smbolos y reglas de sintaxis finos, que no dependen del tipo de computador.

Programa fuente
Es un programa escrito en lenguaje de alto nivel.

Programa objeto
Programa escrito en lenguaje de mquina. b) Sistema operativo Conjunto de programas que se integran con el hardware para facilitar al usuario el aprovechamiento de los recursos disponibles. Algunos de sus objetivos principales son:

Proveer un ambiente conveniente de trabajo.

Hacer uso eficiente del hardware. Proveer una adecuada distribucin de los recursos.

Para un sistema operativo real se debern satisfacer las siguientes funciones:


Gobernar el sistema. Asignar los recursos. Administrar y controlar la ejecucin de los programas.

Un sistema de cmputo en muchos casos cuenta con demasiados recursos para ser utilizados por un slo usuario, es en estos casos cuando se puede dar servicio a varios procesos.

Llamadas al sistema
El sistema operativo en conjunto con el hardware aparecen al usuario como un slo dispositivo con un conjunto de instrucciones ms flexibles y variadas a las que se conoce como llamadas al sistema (system callings).

Intrprete de comandos
Tambin conocido por su nombre en ingls, Shell, es un programa que interpreta las rdenes del usuario y las convierte en llamadas al Sistema.

Ncleo (o Kernel)
Es la parte del Sistema Operativo que se encarga de sincronizar la activacin de los procesos y definir prioridades.

Programas del Sistema


Son programas de servicio que deben ser solicitados explcitamente por los usuarios. Ejemplos de estos tenemos: 1. Compiladores Son los programas que traducen Programas Fuente en programas Objeto. 2. Ensambladores Traducen programas escritos con mnemnicos a lenguaje de mquina. 3. Editores

Son programas que permiten escribir textos y guardarlos en memoria secundaria. 4. Utileras de Archivos Programas para dar mantenimiento a los archivos. 5. Bibliotecas Programas que contienen rutinas para realizar funciones frecuentemente requeridas. Estas funciones pueden ser ligadas a los programas escritos por el usuario.

Programas de Aplicacin
Programas externos al sistema utilizados para realizar tareas especficas como simulacin, creacin y edicin de grficas e imgenes, etc.

SISTEMAS NUMRICOS
A lo largo de la historia se han utilizado diferentes smbolos para representar los nmeros. Lo que caracterizaban a los sistemas de numeracin antiguos era que carecan de un Principio Posicional. a) Sistema Decimal Los nmeros se representan por cadenas de dgitos que pueden ser cualquiera de los siguientes: 0,1, 2, 3, 4, 5, 6, 7, 8, 9. El valor se determina con las siguientes reglas: Cada dgito se multiplica por una potencia de 10. Al dgito del extremo derecho le corresponde 100, al siguiente 101, etc. El valor del nmero se obtiene al sumar los resultados anteriores. Por ejemplo: 2634 = 4 x 100 + 3 x 101 + 6 x 102 + 2 x 103 Es posible la conversin de cualquier sistema numrico al sistema decimal aplicando la frmula:

Nmero Decimal =

Donde:

a = coeficiente del i - simo dgito.

i = posicin relativa r = base numrica diferente de 10. b) Sistema binario En el sistema binario se representa un nmero con una combinacin lineal de las potencias dos (2n). nicamente utilizaremos los dgitos 1 y 0. Por ejemplo: (10011)2 = 1 x 20 + 1 x22 + 0 x 23 + 0 x 24 + 1 x 25 = (19)10 Para evitar ambigedad respecto a la base utilizada, se representa un nmero, encerrado entre parntesis colocando como subndice la base correspondiente. Para convertir un nmero en sistema decimal a sistema binario, se divide sucesivamente el nmero decimal entre 2. Por ejemplo: Efectuar la conversin del nmero 35 decimal a su correspondiente representacin binaria:

Como podemos observar, el primer dgito binario obtenido es el menos significativo hasta el ms significativo. Tambin es posible convertir la parte fraccionaria decimal en fraccin binaria, aunque es justo advertir que algunas fracciones que en decimal tienen un valor exacto, en binario pueden ser infinitas, cuando esto suceda ser uno mismo quien decida cuando la aproximacin sea satisfactoria. Para efectuar la conversacin se toma el nmero, fraccionario decimal y se multiplica por 2, pero ahora se toma la parte entera formada, ya sea '1' '0'. El primer dgito binario obtenido es el que sigue al punto que marca la parte fraccionaria. Como ejemplo tenemos: Convertir el nmero 0.6875 fraccionario decimal a binario:

c) Sistema Hexadecimal Se requieren 16 dgitos, para los primeros 10 se utilizan los mismos que en la representacin decimal (0-9), los dgitos que representan los valores decimales 10, 11, 12, 13, 14, 15 sern sustituidos por A, B, C, D, E y F respectivamente. Por ejemplo: (3A27F)16 = F x 160 + 7 x 161 + 2 x 162 + A x 163 + 3 x 164 = (238207)10 (3A27F)16 = 15 x 160 + 7 x 161 + 2 x 162 + 10 x 163 + 3 x 164 = (238207)10 Para convertir un nmero decimal en hexadecimal se divide sucesivamente entre 16; los residuos obtenidos son los dgitos en notacin hexadecimal, comenzando por el menor significativo. Por ejemplo: Convertir el nmero 37532 en hexadecimal:

INTRODUCCIN A LA PROGRAMACIN
En este segundo tema se abordan por primera vez los conceptos de algoritmo y programacin. No debe olvidarse cuando se est estudiando este tema que, antes de comenzar a disear un algoritmo (y sin duda cuando se trate de un programa) es primordial haber comprendido el problema que queremos resolver por medio de la ayuda

de una computadora. Por lo tanto, antes de emprender cualquier diseo es importante contestarnos las siguientes preguntas acerca del problema que queremos resolver: 1, Conozco y comprendo cules son los datos necesarios para la solucin del problema? (Datos de entrada).

2. Conozco y comprendo cules son los datos que necesito como solucin del problema? (Datos de salida) 3. Cules son los mtodos con los que cuento para implementar una posible solucin al problema? Una vez que tengamos claramente las respuestas a las preguntas anteriores, ser mucho ms sencillo el diseo de los correspondientes algoritmos y programas.

ALGORITMO
Un algoritmo es un mtodo para resolver un problema, debe presentarse como una secuencia ordenada de instrucciones que siempre se ejecutan en un tiempo finito y con una cantidad de esfuerzo tambin finito. En un algoritmo siempre debe haber un punto de inicio y un punto de terminacin, estos deben ser nicos y deben ser fcilmente identificables.

CARACTERSTICAS DE UN ALGORITMO
Todo algoritmo debe cumplir las siguientes caractersticas: A. Debe ser Preciso; Esto es, debe especificar sin ambigedad el orden en que se deben ejecutar las instrucciones. B. Debe estar Definido; Esto es, cada vez que se ejecute bajo las mismas condiciones, la secuencia de ejecucin deber ser la misma proporcionndonos el mismo resultado. C. Debe ser Finito; Esto es, siempre que sea adecuado se realizarn un nmero finito de instrucciones, en un tiempo finito y requiriendo una cantidad finita de esfuerzo.

REPRESENTACIN DE ALGORITMOS

Existen varias maneras de representar algoritmos, una de las ms evidentes es el lenguaje natural; sin embargo el lenguaje natural no siempre es lo suficientemente preciso. Como alternativa tenemos el Pseudocdigo. Pseudocdigo El pseudocdigo es un forma de representar un algoritmo, mediante sentencias similares al lenguaje natural, pero con una precisin mayor. Existen muchas variantes de pseudocdigo, aqu se adoptarn las siguientes normas: A. Todos los algoritmos comenzarn con una sentencia algoritmo, Esto es, una lnea con la palabra clave algoritmo seguida por el nombre del algoritmo. Por ejemplo: Algoritmo EJEMPLO B. Despus de la sentencia algoritmo se declararn las constantes que se requieran en el programa. La decisin de constantes se identificar con la palabra clave constantes. Por ejemplo: Constante PI 3.1416 Constante UNO 1 C. A continuacin aparecer el desarrollo del algoritmo, al cual nombraremos PRINCIPAL. Dicho desarrollo se encontrar entre las palabras clave inicio y fin. Estas palabras clave limitarn un bloque de instrucciones siempre que se requieran. Por ejemplo: PRINCIPAL Inicio ..... Fin D. A continuacin de la palabra clave inicio se declaran las variables. En este caso el tipo de variables se indicar al principio de la lista; separada por un espacio se colocar la lista de variables, separadas por comas (,). Cada lista incluir solamente variables de mismo tipo. Ejemplo: Flotante X, Y, Z Enteras I, J, K E. En cualquier parte del algoritmo podrn colocarse comentarios para hacer aclaraciones o comentarios relacionados con la instruccin u operacin que faciliten la interpretacin. Los comentarios aparecern encerrados entre /*y*/.

Ejemplo: /* Este es un comentario*/

F. Las palabras clave se imprimirn en letra negrita. Cuando se use letra manuscrita se sugiere subrayar las palabras
clave.

ESTRUCTURAS DE CONTROL
Las estructuras de control determinan la secuencia en que deben ejecutarse las instrucciones de un algoritmo. Existen tres Estructuras de control bsicas primitivas y combinndolas se puede escribir cualquier algoritmo. Estas estructuras primitivas son: la secuencia, la bifurcacin condicional y el ciclo. SECUENCIA La estructura de control ms simple es la secuencia. Esta estructura permite que las instrucciones que la constituyen se ejecuten una tras otra en el orden en que se listan. Por ejemplo, considrese el siguiente fragmento de un algoritmo:

En este fragmento se indica que se ejecute la operacin 1 y a continuacin la operacin 2. BIFURCACIN CONDICIONAL La estructura de bifurcacin condicional permite elegir una de dos opciones en una alternativa, dependiente del resultado obtenido al evaluar la condicin. Vase el siguiente fragmento de algoritmo:

La palabra clave si indica que estamos en una sentencia de bifurcacin condicional. Si la condicin es verdadera se ejecuta la operacin 1, de otra manera se ejecutar la operacin 2.

CICLOS
Los ciclos son estructuras de control que permiten ejecutar varias veces una operacin. Existen varios tipos de ciclos: a) Ciclo Mientras (WHILE) Este ciclo repite una operacin, mientras se cumpla una cierta condicin. Por ejemplo:

La palabra clave mientras, seala que se trata de un ciclo mientras. La condicin se verifica antes de ejecutar la operacin. b) Ciclo Hacer-mientras (DO-WHILE) En este ciclo la operacin se ejecuta y despus se evala la condicin. Si es verdadera, la operacin se evala de nuevo, y as sucesivamente.

Cuando la condicin se hace falsa el ciclo termina. c) Ciclo Desde (FOR) En este ciclo se ejecuta una operacin un cierto nmero de veces, especificando en un contador el incremento unitario, desde un Valor Inicial hasta un Valor Final que marcar la condicin de salida del ciclo. Por ejemplo:

d) IR A (GOTO) Existe una sentencia adicional que permite transferir la secuencia de un algoritmo a cualquier parte de l mismo. Es la sentencia ir a. Aunque la posibilidad de pasar a cualquier parte de un programa, d una sensacin de libertad de accin, tiene el terrible inconveniente de perder fcilmente el seguimiento del programa. ADVERTENCIA: En este curso NO se admitirn algoritmos que usen la sentencia GOTO (ir a)

ESTRUCTURAS DE CONTROL
Las estructuras de control determinan la secuencia en que deben ejecutarse las instrucciones de un algoritmo. Existen tres Estructuras de control bsicas primitivas y combinndolas se puede escribir cualquier algoritmo. Estas estructuras primitivas son: la secuencia, la bifurcacin condicional y el ciclo. SECUENCIA

La estructura de control ms simple es la secuencia. Esta estructura permite que las instrucciones que la constituyen se ejecuten una tras otra en el orden en que se listan. Por ejemplo, considrese el siguiente fragmento de un algoritmo:

En este fragmento se indica que se ejecute la operacin 1 y a continuacin la operacin 2. BIFURCACIN CONDICIONAL La estructura de bifurcacin condicional permite elegir una de dos opciones en una alternativa, dependiente del resultado obtenido al evaluar la condicin. Vase el siguiente fragmento de algoritmo:

La palabra clave si indica que estamos en una sentencia de bifurcacin condicional. Si la condicin es verdadera se ejecuta la operacin 1, de otra manera se ejecutar la operacin 2.

CICLOS
Los ciclos son estructuras de control que permiten ejecutar varias veces una operacin. Existen varios tipos de ciclos: a) Ciclo Mientras (WHILE) Este ciclo repite una operacin, mientras se cumpla una cierta condicin. Por ejemplo:

La palabra clave mientras, seala que se trata de un ciclo mientras. La condicin se verifica antes de ejecutar la operacin. b) Ciclo Hacer-mientras (DO-WHILE)

En este ciclo la operacin se ejecuta y despus se evala la condicin. Si es verdadera, la operacin se evala de nuevo, y as sucesivamente.

Cuando la condicin se hace falsa el ciclo termina. c) Ciclo Desde (FOR) En este ciclo se ejecuta una operacin un cierto nmero de veces, especificando en un contador el incremento unitario, desde un Valor Inicial hasta un Valor Final que marcar la condicin de salida del ciclo. Por ejemplo:

d) IR A (GOTO) Existe una sentencia adicional que permite transferir la secuencia de un algoritmo a cualquier parte de l mismo. Es la sentencia ir a. Aunque la posibilidad de pasar a cualquier parte de un programa, d una sensacin de libertad de accin, tiene el terrible inconveniente de perder fcilmente el seguimiento del programa. ADVERTENCIA: En este curso NO se admitirn algoritmos que usen la sentencia GOTO (ir a)

MODULARIZACIN
En la parte anterior se mostr la utilidad de dividir un problema complejo en varios subproblemas ms sencillos, se desarroll cada algoritmo y al final se reunieron para hacer uno slo y resolver el problema completamente. Sin embargo, no hay razn para no conservar la independencia entre los algoritmos de los subproblemas. A continuacin se presentar el algoritmo de MATRIZ INVERSA en una forma ligeramente diferente. #include <stdio.h>

/* algoritmo que calcula la matriz inversa*/ main () { float a11. a12, a21, a22, b11, b12, b21, b22, determinante; printf (dame los elementos de la matriz\n"); scanf ("%f, %f, %f, %f", &a11, &a12, &a21, &a22); determinante=(a11*a22)-(a12*a21); b11 = a22/determinante; b12 = -a12/determinante; b21 = -a21/determinante; b22 = a11/determinante; printf (La matriz inversa es: \n"); printf (%f %f\n, &b11, &b12); printf (%f %f, &b21, &b22); }

FUNCIONES
Una funcin es un grupo o conjunto de sentencias que ejecutan una tarea especfica, se debe prevenir que una funcin no debe contener anidar a otra funcin. Puesto que las funciones son una herramienta muy til en la construccin de un programa en el lenguaje C y que puede tener varias entradas pero slo una salida y que sta se regresar al algoritmo que hizo la llamada a travs del nombre de la funcin.

VARIABLES GLOBALES Y LOCALES


Se definen como variables globales a todas aquellas que son conocidas por todos los mdulos del algoritmo, y su valor podr ser modificado en cualquier parte del programa; dichas variables son declaradas en la parte principal. Por el contrario definimos como variables locales a aquellas que se conocen nicamente en el mdulo que se declara y por

lo consiguiente slo pueden alterarse en dicho mdulo. (recomendamos nicamente trabajar con variables locales). PASO DE PARMETROS El paso de parmetros se puede definir como la comunicacin entre mdulos que componen el programa principal, ste se realiza por medio de variables, utilizando en el paso de parmetros, variables ya sean globales locales. Aqu hay que resaltar que el / la programador(a) debe tener cuidado con el tipo de variable (local, global, flotante, entero), y la forma de hacer la comunicacin entre los mdulos, porque puede ocasionar errores secundarios difciles de detectar. La comunicacin entre los mdulos por medio de variables es muy til porque la informacin que contienen stas se puede utilizar en otras funciones.
PASO DE PARMETROS POR VALOR

El paso de parmetros por valor, en el lenguaje C se presenta automticamente sin solicitarlo en otras palabras, el mdulo que es llamado trabaja con una copia de las variables utilizadas y por lo tanto cualquier modificacin que se quiera hacer a los valores de los parmetros no afectar a las variables originales. Cuando se encuentre programando procure utilizar esta opcin; para tener mayor seguridad en los valores de los clculos.
PASO DE PARMETROS DE REFERENCIA

En el paso de parmetros por referencia permite al mdulo utilizado, el acceso total a la variable original y por lo tanto a las modificaciones, el cual afectarn al valor dato de dicha variable.

PROPIEDADES DE LOS MDULOS


Los mdulos que componen un algoritmo deben de cumplir con las siguientes caractersticas: A. Cada mdulo deber de realizar una tarea perfectamente diferenciable. B. La magnitud de los mdulos no debe ser demasiado grande, una longitud que se propone es de 50 lneas, de tal manera que ocupen una hoja impresa. C. Evitar en la medida posible el uso de las variables globales, esto tiende a coadyuvar para separar e independizar los mdulos de los dems; hacindolos autosuficientes y reutilizables en otros algoritmos. D. Procurar que un algoritmo no contenga muchos subprogramas, porque al ejecutarse el programa correspondiente en una computadora, se requerira ms memoria y tiempo. E. En la presentacin del algoritmo o finalmente el programa, se aconseja que las lneas que componen dicho programa queden en forma escalonada. Es decir, por

F. ORGANIGRAMA JERRQUICO G. La organizacin es una estructura de un algoritmo modular, puede representarse adecuadamente mediante un Organigrama Jerrquico. En este tipo de diagramas, el algoritmo principal se coloca al principio, debajo de l, se colocan en forma de bloques los mdulos a los que hace llamar conectados con lneas. Esto se repite con cada mdulo obtenindose finalmente una estructura tipo rbol.

ejemplo, que NO TODAS las lneas queden completamente justificadas a la Izquierda. Para que con ello facilitar la lectura y separacin de cada uno de los mdulos componentes del programa o algoritmo.

EJEMPLOS
Ejemplo 1

#include <stdio.h> main () {

float ca11, ca12,ca13,total,prom,promgen; int i,n; total=0; printf (Dame el No. de alumnos del grupo: \n); scanf (%d, &n); for (i=1;i<=n;i=i+1) {

for (p=0; p<=3; p=p+1) { scanf ("%f%f%f",&ca11,&ca12,&ca13); } prom = promedio (ca11, ca12, ca13); /*aqu se hace llamada a la funcin promedio*/ printf (El promedio del alumno es: %f, &prom); total = total+prom; } promgen = total/n; printf (el promedio general es: %f, &prom); } float promedio (float ca11, float ca12, float ca13); /*aqu se hace la declaracin de la funcin promedio*/ { printf (dame las calificaciones del alumno(a) separadas por un espacio); promedio=(ca11+ca12+ca13)/3 ; return promedio; }
Ejemplo 2

#include <stdio.h> /* este programa calcula un sistema de ecuaciones simultneas de dos incgnitas*/ main()

{ float a[3],b[3],c[3],d[3],e[3][3],f[3]; int i; printf (teclea los elementos de la primera ecuacin\n); for(i=0;i<3;i++) scanf (%f, &a[i]); ; printf (teclea los elementos de la segunda ecuacin\n); for(i=0;i<3;i++) scanf (%f, &b[i]) ; for(i=0;i<3;i++) c[i]=a[i]/a[0] ; for(i=0;i<3;i++) d[i]=c[i]*b[0] -b[i] ; for(i=0;i<3;i++) e[i]= d[i]/d[1] ; for(i=0;i<3;i++) f[i]=e[i]*c[1] - c[i] ; printf (el valor de la incognita: %f\n, &f[2]); printf (el valor de la segunda incognita es %f\n, &e[2]); }
Ejemplo 3

#include <stdio.h>

/*este algoritmo calcula el polinomio de grado n en un punto dado*/ main() { int i,n; float polinomio, coef, x0; polinomio=0; printf (dame el grado del polinomio\n); scanf (%d, &n); i=n; printf (dame el punto a evaluar en el polinomio); scanf (%f, &x0); while (i>0) { printf (dame el coeficiente de la variable de grado %d, &i); scanf (%f, &coef); polinomio=polinomio+(coef*potencia (x0, i)); i=i-1; } printf (el valor del polinomio en X= %f es Y= %f, &x0, &polinomio); } float potencia (float X, int j); /* esta funcin calcula X a la potencia*/

{ float pot; int k; pot=1; k=0; while (k<j) { pot=pot*X; k=k+1; } return pot; } Enseguida efectuaremos una prueba de escritorio a nuestro algoritmo POLINOMIO, para comprobar que est trabajando correctamente. Proponemos el siguiente polinomio y punto a evaluar: Y(X) = 3X2 + 7X 15

en X = 5 tenemos Y (5) = 95 PRUEBA DE ESCRITORIO PROGRAMA PRINCIPAL FUNCIN POTENCIA K 0 J 2 X 5

I Polinomio Chef Potencia X0 N Pot 2 0 3 ? 5 2 1

2 0 1 75=3*25 1 75

3 3 7

? 25 25 5

5 2 5 5 2 25 5 2 1 5 2 5 5 2 1
Ejemplo 4

1 2 0 1 0

2 2 1 2 0

5 5 5 5 5

0 110=75+35 7

-1 95=110-15 -15 1

/*Funcin recursiva de la serie de Fibonacci*/ #include <stdio.h> main () { long resultado,numero ; printf("Introduce un entero"); scanf (%ld", &numero ) ;

resultado= fibonacci(numero) ;/* aqui se hace una llamada a la funcin Fibonacci*/ printf ("Fibonacci(%ld) = %ld \n", numero, resultado); return0; }/*fin de main*/ long fibonacci (long n); /*aqu se hace la declaracin de la funcin recursiva fibonacci*/ { if(n==0 || n==1) return n; else ;

return fibonacci(n - 1) + fibonacci(n - 2); }

LENGUAJES INTRODUCCIN

DE

ALTO

NIVEL

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.

IDENTIFICADORES
Un identificador es un nombre simblico para una funcin, una constante, una variable una etiqueta. Un identificador en Lenguaje C debe cumplir con las siguientes reglas: A. No deber ser una palabra reservada. Estas tienen uso especfico y no pueden ser utilizadas con otro fin. Los siguientes identificadores son palabras reservadas: abstract as base bool Break byte case catch Char checked class const continue decimal default delegate Do double else enum Event explicit extern false Finally fixed float for foreach goto if implicit In int interfaceinternal is lock long namespace new null object operator out override params private Protectedpublic readonlyref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong uncheckedunsafe ushort

using

virtual

void

while

B. Los identificadores estndar, no son palabras reservadas, pero son identificadores que ya tienen un uso en especfico en el lenguaje C, tales como nombres de funciones tipos definidos en las bibliotecas de C. Se debe evitar utilizar estos identificadores estndar, ya que de hacerlo, el uso predefinido para dichos identificadores se perder sustituyndose por el que nosotros le otorguemos. C. El lenguaje C no permite redefinir funciones. D. Los identificadores definidos por el programador deben comenzar con un carcter alfabtico (letra mayscula minscula). E. Un identificador puede estar formado de varios caracteres que pueden ser letras nmeros. Slo se garantiza que sern significativos los primeros 31 caracteres del nombre del identificador. F. En el lenguaje C, los caracteres alfabticos maysculas y minsculas son diferentes entre s, por ejemplo, los identificadores que tengan el mismo nombre, pero con uno con caracteres en maysculas y otro con caracteres en minsculas, son identificadores completamente diferentes ejemplo: Juan ser un identificador diferente que JUAN, JuAn, jUAN, juAN, etc., y siempre que queramos utilizar este identificador se deber escribir correctamente o se presentarn errores en la compilacin.

PROGRAMA PRINCIPAL
Como una primera aproximacin tenemos:

Inclusin de bibliotecas externas. Declaracin de constantes y macros. Declaracin de tipos. Declaracin de variables. Declaracin de funciones. Bloque del programa principal.

CONCEPTO DE UNA DIRECTIVA. Una directiva es una instruccin que no es traducida al lenguaje mquina al crear el cdigo objeto, una directiva es una instruccin que le dice al precompilador cmo debe realizar la traduccin de un programa a lenguaje mquina, por ejemplo, qu bibliotecas se deben incluir en un programa o qu partes compilar o no compilar de manera condicional. INCLUSIN DE BIBLIOTECAS EXTERNAS.

Las bibliotecas externas, son un conjunto de funciones que no forman propiamente parte del lenguaje, pero que simplifican la labor de programacin al contener cdigo escrito de las tareas usualmente ms comunes. Por ejemplo C cuenta con varias bibliotecas estndar entre las que podemos mencionar: mat.h Para funciones matemticas y trigonomtricas. string.hPara manipulacin de cadenas de caracteres. Para entrada y salida estndar (lectura de teclado, stdio.h impresin y pantalla). Es una biblioteca que entre otras cosas tiene stdlib.h funciones para la administracin de memoria. Se puede incluir una biblioteca mediante la directiva # include seguida del nombre de la biblioteca que se desea incluir encerrado entre smbolos de menor que y mayor que; (<biblioteca>)

Ejemplos: #include <stdio.h> #include <math.h>

DECLARACIN DE CONSTANTES
Para declarar constantes en el lenguaje C, slo basta anteponer el calificador const seguido del tipo de dato que manejar esa constante (int,char,etc), y por ltimo el valor que tomar esa variable Ejemplo const int k = 12 Uno puede declarar constantes mediante el uso de la directiva #define, define no es propiamente para definir constantes, lo que ocurre en realidad es que al momento que el compilador traduce el programa en el lenguaje C a lenguaje mquina reemplazar toda ocurrencia de la palabra definida por el texto escrito despus del identificador del define. Para declarar una constante mediante define, se debe hacer lo siguiente: #define <identificador><valor>

Las reglas para el identificador son las ya mencionadas para los identificadores del lenguaje C, el valor es aquello con lo que queremos que se reemplace el identificador en el programa. Algunos ejemplos para la declaracin de constantes mediante define son: #define PI 3.1415 #define nombre Juan Prez #define MAX 150 #define False 0 #define True 1 Recuerde que no debe de utilizar una palabra clave como identificador ya que podr tener errores de compilacin o tener resultados que no son los correctos.

DECLARACIN DE VARIABLES
Las variables utilizadas en los programas se clasifican en dos tipos, variables locales y variables globales, una variable global es aquella que est declarada para el programa o algoritmo completo. Una variable local es aquella que est declarada y definida dentro de una funcin y slo es vlida dentro de la misma funcin y no podr utilizarse en otra parte del programa. Una variable global se declara fuera de cualquier funcin y primero que cualquier funcin que requiera de ella: Una variable se declara de la siguiente forma: tipo identificador1, identificador2..ident n; El tipo puede ser cualquier tipo existente en C o bien un tipo definido por el usuario, los identificadores deben cumplir las reglas ya mencionadas con anterioridad y van separados por comas(,), hace falta notar el punto y coma al final de la declaracin de la o las variables. Algunos ejemplos de cmo definir variables son los siguientes: int alumnos, contador; float A,B,C; char Letra;

Las variables locales, existen slo dentro de un contexto, el cual se encuentra limitado por llaves, de tal manera que la variable existe slo dentro de los lmites de stas. Para definir variables locales, la definicin debe hacerse inmediatamente despus de una llave de inicio ({), y la variable deja de existir fuera de la llave de fin(}) que corresponde a la llave de inicio despus del cul fue definida la variable Ejemplo: { int a,b; a=5; b=a + 100; } En este ejemplo las variables a y b slo existen dentro de los lmites de las llaves { } TIPOS DE DATOS ESTNDARES EN C 1. int Este es el tipo de dato entero, y representa enteros positivos o negativos en el rango de -32768 y 32767. 2. float Es el tipo estndar para nmeros con puntos flotante (VALORES REALES). Permite el almacenamiento de flotantes de precisin sencilla, el almacenamiento de nmeros positivos y negativos y el uso de notacin cientfica sin tomar en cuenta el signo puede almacenar nmeros en el rango de 2.9x10-39 a 1.7x10 38. 3. char Es un tipo de datos que permite el almacenamiento de caracteres, puede almacenar cualquier carcter del cdigo ASCII extendido, esto es entre 0 y 255. Cabe notar que el lenguaje C no contempla un tipo de dato para cadenas de caracteres, por lo cual ste debe ser implementado como un arreglo de caracteres, y para ilustrar esto vea el siguiente ejemplo. char nombre[80] La variable nombre se est definiendo como un arreglo de 80 caracteres, que habrn de contener una cadena.

DECLARACIN DE FUNCIONES El lenguaje de programacin C, no contempla el uso de procedimientos, sino que slo cuenta con funciones, una funcin es un fragmento de cdigo que realiza una tarea especfica, la cual normalmente es requerida varias veces a lo largo de un programa, por ejemplo suponga que elevar un nmero al cubo es una operacin requerida varias veces en un programa, entonces es conveniente implementar una funcin que eleve un nmero al cubo. En C una funcin se declara de la siguiente manera: Tipo identificador(tipo1 param1, tipo2 param2,..., tipon paramn) { ... /*Instrucciones propias de la funcin*/

[return expresin;] } El tipo puede ser cualquier tipo estndar de C o bien un tipo definido por el usuario, el identificador, es el nombre asignado a la funcin, y los parmetros son opcionales, si se requiere ms de uno, stos van separados por comas, adems cada parmetro debe especificar de qu tipo es. La funcin inicia despus de la llave de inicio ({) y termina con la llave de (}). La palabra reservada return es utilizada para indicar el valor que debe regresar dicha funcin, la expresin debe por tanto ser del mismo tipo que el tipo de la funcin. Para el ejemplo de elevar un nmero al cubo, se desea que la funcin regrese un flotante, entonces la funcin queda de la siguiente forma. float cubo (float x) { return x*x*x }

EXPRESIONES ARITMTICAS
Se refieren a las operaciones aritmticas simples entre dos operandos (que pueden ser constantes o variables numricas) mediante un operador aritmtico. Se pueden realizar expresiones aritmticas compuestas uniendo operaciones aritmticas simples. Los operandos aritmticos del lenguaje C son;

Tipo de OperacinSmbolo Suma + Resta * Multiplicacin / Divisin PRIORIDAD DE LOS OPERADORES Cuando se realizan operaciones aritmticas compuestas, primero se realizan las operaciones de aquellos operadores que posean mayor prioridad, por ejemplo: 2*4+5*2 da como resultado 18, debido a que el producto tiene mayor prioridad que la suma. (2*4+5)*2 da como resultado 26 puesto que primero se evale en parntesis. La prioridad de operadores es la siguiente: 1. Las expresiones entre parntesis se evalan primero. Los parntesis anidados se evalan de adentro hacia afuera, el parntesis ms interno se evala primero. 2. Los primeros operadores a evaluarse son *, / , %. 3. Los segundos operadores a evaluarse son + y -. 4. Cuando se encuentran operadores con un mismo nivel de prioridad, stos se evaluarn de izquierda a derecha. ASIGNACIN La asignacin es una operacin que proporciona un valor a una variable, dicho valor puede ser una constante numrica o el resultado de una expresin aritmtica, todas las asignaturas debern terminar con punto y coma (;), adems que el valor asignado deber corresponder al tipo de variable donde se va a almacenar. En el lenguaje C el operador de asignacin es =. Ejemplos: x = 45 ; /*x es de tipo entero (int)*/ c=f; /*c es de tipo carcter (char)*/

Recuerde que es necesario declarar la variable antes de utilizar y anotar qu tipo de dato se manejar, no se permite asignar valores que no concuerden con el tipo de dato declarado a la variable. Si a la variable x la declaramos de tipo int, slo podr guardar valores enteros, y ser lo mismo para las dems variables.

INSTRUCCIONES DE ENTRADA Y SALIDA


El lenguaje C no cuenta propiamente con instrucciones de entrada-salida, por lo que stas se encuentran dentro de una biblioteca externa conocida como stdio.h. Dentro de esta biblioteca existen funciones que permiten la lectura de variables mediante el teclado, as como la impresin a la pantalla. LECTURA DE VARIABLES (scanf) La funcin scanf permite la lectura de variables desde el teclado, el formato de la funcin es el siguiente: scanf (cadena de formato,& variable,...); La cadena de formato es una cadena de caracteres que indica qu tipo de dato se va a leer (si es del tipo entero, flotante, carcter). Despus de la coma viene el nombre de la variable precedido por un &. Algunos especificadores de formato son los siguientes: Tipo Descripcin d, i Entero decimal con signo o Entero octal sin signo u Entero decimal sin signo x Entero hexadecimal sin signo (en minsculas) X Entero hexadecimal sin signo (en maysculas) f Coma flotante en la forma [-]dddd.dddd e Coma flotante en la forma [-]d.dddd e[+/-]ddd g Coma flotante segn el valor E Como e pero en maysculas G Como g pero en maysculas c Un carcter s Cadena de caracteres terminada en '\0' % Imprime el carcter % p Puntero SINTAXIS DE LA ESTRUCTURA scanf scanf (% tipo,&variable); Ejemplos:

scanf (%d,&n); /*realiza la lectura de n de tipo int*/ scanf (%f,&l); /*realiza la lectura de l de tipo float*/ En este curso utilizaremos una funcin especial que se llama getchar. Esta funcin lee un carcter desde el teclado sin desplegarlo en la pantalla y regresa un valor entero en cdigo ASCII del carcter ledo. Este valor es guardado en la funcin y es usada despus en las expresiones donde se requiere evaluar este valor, tal es el caso de las sentencias if del siguiente ejemplo: #include <stdio.h> main () { int a,b; char ch; printf (quiere\n); printf (sumar restar multiplicar dividir\n); printf (introduzca la primera letra:); ch = getchar (); printf (\n); printf (introduzca el primer nmero : ); scanf (%d,&a); printf (introduzca el segundo nmero :); scanf (%d,&b); if (ch == d) printf (%d, a+b); else if (ch == r)

printf (%d, a-b); else if (ch == m) printf (%d, a*b); else if (ch== d) printf (%d, a/b); else } En este programa, los caracteres esperados slo sern ledos por la funcin getchar, si tecleamos un carcter diferente a los establecidos, la pantalla del men no tendr ninguna modificacin y se pasar a la siguiente lnea hasta que getchar reciba un carcter vlido. El valor es guardado en memoria y es por eso que en este programa podemos pedir los datos primero y despus evaluar las condiciones. IMPRESIN A PANTALLA (printf). Mediante la funcin printf, es posible imprimir a pantalla tanto mensajes como el contenido de variables de distintos tipos. Para imprimir mensajes solo es necesario colocar el mensaje entre comillas como en el ejemplo siguiente: printf (Hola) ; /*hace aparecer en pantalla la frase Hola*/ para la impresin de variables, es necesario la utilizacin de cadenas que especifiquen el tipo de variable que se est imprimiendo, por ejemplo: printf (%d,n) ; /* imprime el valor de n como un entero*/ printf (el rea del crculo es:%f,rea); /*imprime el mensaje y sustituye%f por el valor de rea expresado como flotante*/ SECUENCIAS DE ESCAPE Dentro de las constantes de carcter hay ciertos caracteres que no reconoce como el caracter o una nueva lnea. Para poder tener estos caracteres, el lenguaje C ha implementado una serie de secuencias de escape que nos permite obtener estos caracteres.

A continuacin se muestran las secuencias de escape y el carcter o valor que se obtiene de ellas. SECUENCIAS DE ESCAPECARCTERSIGNIFICADO \n NL Nueva Linea \t HT Tab Horizontal \v VT Tab Vertical \b BS Retroceso \r CR Regreso de Carro \f FF Avance de Forma \a Bel Seal Audible \\ \ Diagonal Inversa \? ? Interrogacin \' ' Apstrofe \" " Comillas \ooo ooo Numero Octal \xhh hh Numero Hexadecimal Ejemplo: ... printf (curso de computacin); ... salida a pantalla: curso de computacin Con secuencia de escape \n ... printf (curso \n); printf (de\n); printf (computacin\n"); ... salida a pantalla curso

de computacin

COMENTARIOS Los comentarios son pequeas cadenas de caracteres que se insertan dentro del listado de un programa (programa fuente) y que no forman parte del mismo, por tanto no generan cdigo ejecutable, que no son traducidas a lenguaje mquina por el compilador. Su funcin es meramente la de describir el funcionamiento del programa a manera de pequeas notas que ayudan a hacer ms entendible la lectura para personas ajenas a su realizacin as como recordatorio para uno mismo. Ejemplo: /*Esta cadena es un comentario*/ EJEMPLO Finalmente presentamos un programa de ejemplo que muestra la estructura bsica de un programa en el lenguaje C. Dado el algoritmo en pseudocdigo presentaremos despus su codificacin en lenguaje c. Pseudocdigo Principal inicio flotante a,b,suma,producto; leer (a,b); sumaa+b; productoa*b; imprime (El primer operador es:,a); imprime (El segundo operador es;,b); imprime (La suma es: ,producto); imprime (El producto es:, producto);

fin Como las variables a, b, suma, producto, slo son necesarias dentro del programa principal, estas se declaran como variables locales de la funcin main. El cdigo respectivo en lenguaje C es el siguiente: /*Este programa calcula la suma y el producto de dos nmeros reales*/ #include <stdio.h> main() { float a,b,suma,producto; scanf (%f,&a); scanf(%f,&b); suma= a + b; producto = a * b; printf (el primer operador es: %f\n,a); printf (el segundo operador es: %f\n.b); printf (la suma es:%f\n,suma); printf (el producto es:%f\n,producto); }

BIFURCACIN INTRODUCCIN

CONDICIONAL

Continuando con el aprendizaje del lenguaje C, en este tema se estudia la estructura de Bifurcacin Condicional

(Estructura IF-ELSE). A esta estructura se asocia el planteamiento de una condicin (la cual tambin se asociar con algunas de las estructuras de control cclicas que estudiaremos en temas posteriores). La evaluacin de dicha condicin determinar el comportamiento de la estructura; y aunado a este planteamiento estn ntimamente ligados los operadores racionales (o de relacin) y los operadores lgicos.

OPERADORES DE RELACIN (o RELACIONALES)


Estos operadores permiten comparar los valores de dos expresiones. Los operadores de relacin ms importantes son: NOMBRE SEUDOCDIGOC Igua a = == Diferente a != != Mayor que > > menor que < < Mayor o igual que>= >= menor o igual que <= <=

OPERACIONES LGICAS Y TABLAS DE VERDAD


Se pueden definir operaciones entre variables lgicas, de las que consideramos las siguientes tres: 1) NEGACIN Se aplica a una sola expresin lgica, que puede ser una constante o variable lgica o el resultado de una operacin lgica. Si el valor de la expresin es Falso, su negociacin lo har verdadero y viceversa. El operador de la negociacin es el siguiente: SEUDOCDIGOC ~ ! La negociacin se representa mediante su tabla de verdad siguiente: A ~A verdaderofalso 2) DISYUNCIN Operacin lgica definida para dos operandos. Es verdadera cuando al menos una de las expresiones lo es. En caso contrario es falsa. El operador se escribe como sigue: SEUDOCDIGOC

OR La tabla de verdad correspondiente es la siguiente:

||

A B A OR B (se lee "A o B") Falso Falso Falso Falso VerdaderoVerdadero VerdaderoFalso Verdadero VerdaderoVerdaderoVerdadero 3) CONJUNCIN Operacin lgica definida para dos operandos. Es verdadera nicamente cuando ambas expresiones lo son. En caso contrario es falsa. El operardor se escribe como sigue: SEUDOCDIGOC AND && La tabla de verdad correspondiente es la siguiente: A Falso Falso Verdadero Verdadero

B Falso Verdadero Falso Verdadero

A AND B (se lee "A y B") Falso Falso Falso Verdadero

BIFURCACIN CONDICIONAL
La sintaxis en el lenguaje C es la siguiente: a) BIFURCACIN DE OPCIN SIMPLE 1. Para una sola sentencia: IF (Condicin) (sentencia);

2. Para un bloque de sentencias: IF (Condicin) { (bloque de sentencias); } b) BIFURCACIN DE OPCIN DOBLE 1. Para sentencias simples: IF (Condicin) (sentencia 1); ELSE (sentencia 2); 2. Bloque de sentencias: IF (Condicin) { (Bloque de sentencias 1); } ELSE { (Bloque de sentencias 2); } c) BIFURCACIN CONDICIONAL DE OPCIN MLTIPLE 1. Bifurcaciones Anidadas: IF (Condicin 1)

{ (bloque 1); } ELSE IF (Condicin 2) { (bloque 2); } ELSE IF (Condicin3) { (bloque 3); } . ELSE IF (Condicin N) { (bloque N); } ELSE { (bloque N + 1); }

EJEMPLOS
EJEMPLO 1 Fragmento de un programa: Pseudocdigo: ... si (calificacin 6) inicio imprimir (ALUMNO APROBADO) si (calificacin 9) imprimir (TIENE CALIFICACIN SOBRESALIENTE); fin sino imprimir (ALUMNO REPROBADO); ... Lenguaje C: ... if (CALIF >= 6) { printf (ALUMNO APROBADO \n); if (CALIF >= 9) printf (TIENE CALIFICACIN SOBRESALIENTE \n); } else

printf (ALUMNO REPROBADO \n );

EJEMPLO 2 Creacin de un Men con IF anidados: Pseudocdigo: ... carcter opcin; ... haz inicio imprimir (1. procedimiento 1); imprimir (2. procedimiento 2); imprimir (3. procedimiento 3); imprimir (4- procedimiento 4); ... imprimir (s.salir); leer (opcin); si (opcin = 1) (Llamado a procedimiento 1) sino si (opcin = 2) (Llamado a procedimiento 2)

sino si (opcin =3) (Llamado a procedimiento 3) sino ... fin mientras (opcin s) ... Lenguaje C: ... char opcin; ... do { /*UTILIZAR AQU SENTENCIAS printf PARA */ /* IMPRIMIR LAS OPCIONES DEL MEN EN PANTALLA */ printf (1. procedimiento 1); printf (2. procedimiento 2); printf (3. procedimiento 3); printf (4. procedimiento 4); ... printf (s. salir); opcin = getchar (); printf (\n);

if (opcin = = 1) (Llamado a procedimiento 1); else if (opcin = = 2) (Llamado a procedimiento 2); else if (opcin = = 3) (Llamado a procedimiento 3); else ... } while (opcin != s); ... EJEMPLO 3 Ejemplo que utiliza condiciones lgicas mltiples. El fragmento representa el clculo de los impuestos de un trabajador en base a su edad o si es jubilado y si gana tres salarios mnimos o menos: Pseudocdigo: ... entero flotante carcter trabajador ... si (((edad 60) && (Trabajador=JUBILADO)) || (SalarioMinimo3)) edad, SalarioMinimo

ImpuestosSueldo * 0.10 sino ImpuestosSueldo * 0.20 ... Lenguaje C: ... int edad, SalMin;

float imp, sueldo; char trabajar; ... if (((edad >=60) || (trabajar= j)) && (SalMin <=3)) imp = sueldo * 0.1; else imp = sueldo * 0.2; ...

CICLOS Y ARREGLOS INTRODUCCIN


En este tema se indica la forma de implementar en el lenguaje C el diseo modular antes visto, por lo que se recomienda dar un repaso al Tema 3, a los conceptos de parmetros, paso de parmetros por valor y paso de parmetros por referencia. Se estudia en este tema por primera vez el concepto de Arreglo, definiendo simultneamente su uso tanto en pseudocdigo como en lenguaje C. Tocaremos el tema de paso de parmetros de arreglos en el lenguaje C. Por ltimo se definir la forma de la implementacin en el lenguaje C las estructuras cclicas vistas con anterioridad en el Tema 2.

PASO DE PARMETROS
El lenguaje C utiliza el Paso de Parmetros por Valor al pasar argumentos; esto quiere decir que el mdulo que es llamado trabaja con una copia de las variables , y por lo tanto cualquier modificacin que se quiera hacer a los parmetros no afectar a las variables originales. Para realizar un Paso de Parmetros por Referencia se hace pasando un apuntador a un argumento, esto implica que se pase la direccin del argumento a la funcin, entonces es posible cambiar el valor argumento fuera de la funcin. #include <stdio.h> main() { int edad; printf (Dame tu edad \n); scanf (%d, &edad); imprime (edad) ; suma (&edad); imprime (edad); } imprime (int b) /* Paso de Parmetros por Valor */ { printf (Tu edad es %d \n, b); return; } suma (int *a) /* Paso de Parmetros por Referencia */ {

*a=*a+1; }

ARREGLOS
Un Arreglo es una estructura de datos en la que variables del mismo tipo se identifican bajo un mismo nombre pero distinguindolas por medio de ndices. De esta manera resulta ms cmodo y comprensible hacer las manipulaciones necesarias.

VECTORES
Un vector es un arreglo de una sola dimensin, para indicar a qu elemento nos referimos, se necesita especificar un slo nmero o ndice, que corresponde a la posicin relativa de dicho elemento dentro del arreglo. Pseudocdigo: tipo nombre_de_variable [rango] donde tipo puede ser cualquier tipo de dato (entero, real, carcter, etc.). Lenguaje C: tipo nombre_de_variable [rango]; donde:

tipo puede ser cualquier tipo de dato (int, float, char, etc.). nombre_de_variable es el nombre del arreglo. rango especifica el nmero de elementos del arreglo.

Se accede a los elementos del arreglo por medio de ndices. En el lenguaje C todos los arreglos empiezan por 0 (cero); esto quiere decir que si se quiere acceder al primer elemento de un arreglo se utiliza 0 para el ndice. Para asignar un valor a un elemento del arreglo, se coloca el arreglo del lado izquierdo de la asignacin: Pseudocdigo: X[8]12 (Asigna al elemento nmero 9 del vector el valor de 12)

Lenguaje C: X[8] = 12; EJEMPLO: El siguiente programa realiza la lectura de 10 datos y calcula la suma de los mismos: Pseudocdigo: Algoritmo Suma_vector /* Programa que utiliza un vector con 10 elementos y devuelve la suma de los mismos */ PRINCIPAL inicio entero i, sum, x[10]; sum 0; desde (i 0; i <10; i i + 1) inicio imprime (INTRODUCE EL DATO, i); leer ( x [i] ); sum sum +x[i]; fin imprime (EL VECTOR ORIGINAL ES :); desde (i 0; i<10; i i +1) imprime ( x [i] ); imprime (LA SUMA DEL VECTOR ES : , sum); fin Lenguaje C:

#include <stdio.h> main() { int i; int sum; int x[10]; sum=0; for (i=0; i<10; i++) { printf (INTRODUCE EL DATO % d , i); scanf (%d, &x[i]); sum = sum + x[i]; } printf (EL VECTOR ORIGINAL ES :); for (i = 0; i<10; i ++]); printf (%d , x[i]); printf (/n LA SUMA DEL VECTOR ES : % d, sum); }

MATRICES
Una matriz es un arreglo de dos dimensiones, y para especificar cualquier elemento, debemos hacer referencia a dos ndices (que representan la posicin como rengln y columna). Aunque no se justificar aqu, es conveniente mencionar que la representacin matricial es puramente conceptual y con el nico fin de facilitar al programador el manejo de los elementos, ya que la computadora almacena los datos en una forma totalmente diferente. Pseudocdigo: tipo nombre_de_variable [rango1][rango2]

donde tipo puede ser cualquier tipo de datos (entero, flotante, carcter, etc.) Lenguaje C: tipo nombre_de_variable [rango1][rango2]; donde:

tipo puede ser cualquier tipo de dato (int, float, char, etc.). nombre_de_variable es el nombre del arreglo. rango 1 corresponde al nmero de renglones que conforman el arreglo. rango 2 corresponde al nmero de columnas.

Podemos trabajar con cada uno de los elementos de la matriz: Pseudocdigo: X[3][5] 20 (asigna al elemento de la fila 4 y la columna 6 el valor de 20) Lenguaje C: X[3][5] = 20; EJEMPLO: El siguiente programa realiza la lectura de una matriz de 7 renglones y 15 columnas (de una matriz de orden [7x15]) rengln por rengln). Pseudocdigo: Algoritmo: Lectura Matriz /* programa que lee los elementos de una matriz de orden 7 x 15 */ constantes REN 7 COL 15 PRINCIPAL inicio entero i, j, x [ren] [col]; desde (i =0; i<ren ; i i+1)

desde (j =0; j< col ; j j+1) inicio imprime (INTRODUCE EL ELEMENTO : , i, j); leer (x [i] [j]); fin fin Lenguaje C: #include <stdio.h> #define ren 7 #define col 15 main () { int i, j; int x [ren][col]; for (i=0; i<ren; i++) for(j=0; j<col ; j ++) { printf (INTRODUCE EL ELEMENTO A (%d, %d) , I, j); scanf (%d, &x [i] [j]); } }

PASO DE PARMETROS DE ARREGLOS


El lenguaje C nos permite crear nuevos nombres para tipos de datos ya existentes. Los datos a definir debern estar precedidos por la palabra reservada typedef.

La sintaxis es la siguiente: typedef nombre_original nombre_nuevo; Debern definirse antes de declarar cualquier variable. Typedef no desactiva el tipo original. EJEMPLO: typedef float flotantes; flotantes*/ char carcter; int entero; int vector[10]; de /* Define el tipo vector que sern arreglos unidimensionales 10 elementos*/ /* Redefine a los datos tipo float con el nombre de

float arreglo [7] [15]; /* Define el tipo de arreglo el cual son arreglos bidimensionales de (7x15)elementos*/ Una vez definidos los nuevos tipos de datos podrn ser utilizados para definir las variables como del nuevo tipo. flotantes z; carcter s; entero i,j; vector A; arreglo x; EJEMPLO: Utilizando el ejemplo de la lectura de los elementos de una matriz se ilustrar el paso de parmetros con arreglos: Pseudocdigo: Algoritmo: Lectura_Matriz /* equivale a float Z; /* equivale a char s; /* equivale a int j, i; /* equivale a int A[10]; */ */ */ */

/* equivale a float x [7][15]; */

/* programa que lee los elementos de una matriz de orden 7x15*/ constantes REN 7 COL 15 arreglo x Principal inicio entero m,n; m REN; n COL; lectmat (m,n,x) fin lectmat (entero R, entero C, arreglo A) inicio entero i, j /*variables locales*/ /* variables globales*/

desde ( i 1; i < R; i i + 1) desde (j 1; j < C; j j +1) inicio imprimir (INTRODUCE EL ELEMENTO : , i, j); leer (A [i] [j] ); fin fin Lenguaje C: #include <stdio.h>

#define Ren7 #define COL15 typedef int arreglo [REN][COL]; arreglo x; main () { int m, n; m = REN; n = COL; lectmat (m, n, x) } /* Finaliza Funcin Principal */ /* Inicia Funcin Principal */

lectmat (int R, int C, arreglo A) { int i,j; for (i=0; i<R, i++) for(j=0; j<C; j++) { printf (INTRODUCE EL ELEMENTO A (%d, %d) , i, j); scanf (%d, &A[i][j]); } return; }

CICLOS

Como ya se mencion cuando se estudiaron las estructuras de control en los algoritmos, los ciclos sirven para repetir la ejecucin de una sentencia o bloque de sentencias. Aqu veremos la implementacin de dichas estructuras de control en C. CICLO MIENTRAS (WHILE) Su sintaxis es: while (Condicin) { (Bloque de Sentencias) ; } El ciclo se ejecutar mientras la condicin sea verdadera. Si en lugar de un bloque de sentencias se tiene una sola sentencia, podr omitirse { }. Se recomienda su uso cuando bajo cierta condicin especfica se requiere la ejecucin cclica de un grupo de instrucciones, en caso contrario no se realiza ninguna operacin, lo que ahorra tiempo de procesamiento haciendo ms rpida la ejecucin del programa. EJEMPLO: ... printf ( ESTA PARTE SLO LEE NMEROS POSITIVOS? ); printf (SI DESEA SALIR TECLEE UN NMERO NEGATIVO); scanf (%d, &num); while (num >=0) { scanf (%d, &num); printf (EL NMERO PROPORCIONADO ES %d , num); } ... CICLO HACER-MIENTRAS (DO-WHILE)

Su sintaxis es: do { (Bloque de Sentencias); } while (CONDICIN); La operacin se ejecuta y despus se evala la condicin. Si es verdadera, las operaciones se evalan de nuevo y as sucesivamente, cuando la condicin se hace falsa el ciclo termina. Se recomienda su uso cuando se requiere que el bloque de instrucciones se ejecute al menos una vez, como podra ser un men. Si se est repitiendo la sentencia, no son necesarias las llaves { }. La mayora de los programadores las incluyen para reconocer fcilmente que el While que termina al Do es parte de ese ciclo y no del principio de un ciclo While. EJEMPLO: ... do { funcin1 (a, b, c) ; funcin2 (a, b) ; printf (otro clculo (S/N) ? \ n ) ; opcin = getchar () ; } while (opcin ==S) ; /* Cuando no se requiera repetir el ciclo se contestar con N y saldremos del mismo */ ... CICLO DESDE (FOR) Su sintaxis es:

For (Valor Inicial ; Valor Final ; Incremento de la Variable) { (Bloque de Sentencias); } Este ciclo se ejecutar un cierto nmero de veces especificando desde un valor inicial hasta el valor final con un incremento (o decremento) unitario entre ambos. Al igual que el Ciclo Mientras, si en lugar de un bloque de sentencias se tiene una sola sentencia, podr omitirse{}. Se recomienda su uso cuando se necesita ejecutar un nmero predeterminado de veces un bloque de instrucciones. EJEMPLO: ... printf (DAME EL NMERO DE DATOS /n); scanf ( %d, &n ); for ( i=1; i<n; i++ ) { printf (DAME EL DATO X (%d) /n , I ) ; scanf (%d, &x[i]) ; } NOTAS: 1. Para los ciclos WHILE y DO-WHILE, deber tenerse especial cuidado para que la CONDICIN DE SALIDA del ciclo SE CUMPLA. 2. Para el ciclo FOR deber tenerse cuidado de NUNCA MODIFICAR dentro del ciclo el valor de la VARIABLE NDICE (salvo en casos muy especiales).
3.

ARCHIVOS EN C INTRODUCCIN

4. En este ltimo tema se estudiarn en detalle los formatos de salida asociados a la funcin printf (). Tambin se estudiar en esta parte el manejo de archivos

externos dentro de programas. Se estudiar el manejo de archivos de tipo texto para el almacenamiento de los datos de entrada o de salida. 5. El estudio de los archivos es importante, pues muchas veces nos puede ahorrar una enorme cantidad de tiempo al conservar los datos de entrada almacenados en esta forma y utilizarlos cuantas veces sea necesario, o tal vez solamente haciendo algunas pocas modificaciones en los datos que as lo requieran, en lugar de tener que introducir los datos por medio del teclado cada vez que son requeridos. Esto es especialmente cierto si hablamos de una cantidad de datos considerables. 6. Tambin algunas veces es ms conveniente almacenar los datos de salida en archivos pues nos da la posibilidad de reutilizarlos posteriormente tal vez como datos de entrada en el mismo programa o en algn otro que los requiera.
7.

FLUJOS

8. En el lenguaje C toda entrada y salida se ejecuta mediante flujos. Un flujo es una secuencia de bytes de datos. 9. Los flujos proporcionan una interfase consistente e independiente del dispositivo fsico real. 10. Existen dos tipos de flujos: los flujos de texto y los flujos binarios. 11. Los flujos de texto son secuencias de caracteres agrupados en lneas terminadas por el carcter de nueva lnea (\n). Normalmente estos flujos son almacenados en algn cdigo estndar como ASCII. Los flujos binarios, son por otra parte consecuencias de bytes que corresponden a programas ejecutables o a programas objeto y no son legibles. 12. Ambos tipos de flujos son terminados por el carcter EOF (End Of File) que marca el fin de archivo. 13. El ANSI C tiene cinco flujos predefinidos. Estos flujos se abren automticamente cuando un programa en el lenguaje C comienza su ejecucin, y se cierran cuando el programa termina. Los flujos estndares, y los dispositivos a los que estn conectados, estn listados en la siguiente tabla. 14. Cada vez que es utilizada la funcin printf() para desplegar texto en la pantalla, es usado el flujo stdout. De la misma forma, cuando es utilizado scanf() para leer la entrada del teclado se usa el flujo stdin.

SALIDA CON FORMATO EN C


La funcin printf() puede llevar a cabo las siguientes capacidades de formato, algunas de las cuales se analizarn ms adelante. 1. Redondear valores de punto flotante, a un nmero indicado de valores decimales. 2. Alinear una columna de nmeros, con puntos decimales apareciendo uno por encima de otro. 3. Salidas justificadas a la izquierda o la derecha. 4. Insertar caracteres literales en posiciones precisas en una lnea de salida. 5. Representacin en formato exponencial de nmeros de punto flotante. 6. Representacin en formato octal y hexadecimal de enteros no signados.

7. Despliegue de todo tipo de datos con anchos de campo de tamao fijo y precisiones. La funcin printf() tiene la forma: printf (cadena de control de formato, otros argumentos); La cadena de control de formato describe el formato de salida, y otros argumentos (opcionales) corresponden a cada especificacin de conversacin existente en la cadena de control de formato. Cada especificacin de conversin se inicia con un signo de (%) y termina con un especificador de conversin. En una cadena de control de formato pueden existir muchas especificaciones de conversin. Imprimiendo enteros con printf() Los valores enteros se despliegan en uno de varios formatos. En la siguiente tabla se describe cada uno de los especificadores de conversin de enteros. ESPECIFICADOR DE CONVERSIN d I O U xX hl DESCRIPCIN Lee un entero decimal opcionalmente con signo. El argumento correspondiente es un puntero a un entero. Lee un entero decimal, octal, o hexadecimal opcionalmente con signo. El argumento correspondiente es un puntero a un entero. Lee un entero octal sin signo. El argumento correspondiente es un puntero a un entero sin signo. Lee un entero decimal sin signo. El argumento correspondiente es un puntero a un entero sin signo. Lee un entero hexadecimal. El argumento correspondiente es un puntero a un entero sin signo. [Prefijo] Coloca antes de cualquier especificador de conversin de enteros para indicar que la entrada de datos es un entero de tipo short o long.

EJEMPLO: #include <stdio.h> main() { printf (%d\n, 455); printf (%i\n, 455); printf (%d\n, +455);

printf (%d\n, -455); printf (%hd\n, 32000); printf (%ld\n, 2000000000); printf (%o\n, 455); printf (%u\n, 455); printf (%d\n, 455); printf (%x\n, 455); printf (%X\n, 455); return 0; } SALIDA: 455 455 455 -455 3200 2000000000 707 455 1c7 1C7 Imprimiendo nmeros de punto flotante con printf() Un valor de punto flotante contiene un punto decimal, como en 86.3 o 159.687. Los valores de punto flotante son desplegados en uno de varios formatos. En la siguiente tabla se describen los especificadores de conversin de punto flotante. ESPECIFICADOR DE CONVERSIN eoE f goG DESCRIPCIN Muestra un valor en punto flotante en notacin exponencial. Muestra valores en punto flotante. Despliega un valor en punto flotante, ya sea en la forma de

punto flotante f, o en la forma exponencial e (o E). Se coloca antes de cualquier especificador de conversin de punto flotante para indicar que esta mostrando un valor de punto flotante long double.

El especifcador de conversin g (o G) imprime en formato e (o E), o en formato f, sin ceros despus del punto decimal (es decir, 5.36000 se imprime como 5.36). EJEMPLO: #include <stdio.h> main() { printf (%e\n, 1234567.89); printf (%e\n, +1234567.89); printf (%e\n, -1234567.89); printf (%E\n, 1234567.89); printf (%f\n, 1234567.89); printf (%g\n, 1234567.89); printf (%G\n,1234567.89); return 0; } SALIDA: 1.234568e+06 1.234568e+06 -1.234568e+06 1.234568E+06 1234567.890000 1.234567e+06 1.234567E+06 Como imprimir con anchos de campo y precisiones.

El tamao exacto de un campo en el cual se imprimen datos se especifica por el ancho del campo. Si el ancho del campo es mayor que los datos que se estn imprimiendo, a menudo los datos dentro de dicho campo quedarn justificados a la derecha. Un entero que representa el ancho del campo es insertado en la especificacin de conversin, entre el signo de porciento (%) y el especificador de conversin. La funcin printf () tambin da la capacidad de definir la precisin con la cual los datos se imprimirn. Para utilizar la precisin se escribe un punto decimal (.) solo o seguido por un nmero entero. La precisin se aplica solamente a los especificadores de conversin e, E, f, g, G y s. Cuando se utiliza con especificadores de conversin de punto flotante la precisin especifica la cantidad de dgitos que se han de desplegar a la derecha del punto decimal. Si el punto decimal se usa solo, especifica una precisin de cero.

Secuencia de escape
La cadena de control de formato de printf() puede contener secuencias de escape que proporcionan control especial sobre la salida. La siguiente tabla lista las secuencias de escape usadas ms frecuentemente. SECUENCIAS DE ESCAPECARCTERSIGNIFICADO \n NL Nueva Linea \t HT Tab Horizontal \v VT Tab Vertical \b BS Retroceso \r CR Regreso de Carro \f FF Avance de Forma \a Bel Seal Audible \\ \ Diagonal Inversa \? ? Interrogacin \' ' Apstrofe \" " Comillas \ooo ooo Numero Octal \xhh hh Numero Hexadecimal

ARCHIVOS EN C
Para poder utilizar un archivo para lectura, escritura o ambas operaciones, primero debemos crear un flujo asociado a dicho archivo. A este proceso se le llama abrir el archivo. Para abrir un archivo se utiliza la funcin estndar fopen()

La funcin fopen() regresa un apuntador a tipo FILE, por lo cual es conveniente que para cada archivo que se quiera abrir se debe declarar un apuntador a tipo FILE. Por ejemplo el enunciado: FILE *apuntador; Declara un apuntador a tipo FILE llamado apuntador. La funcin fopen() tiene la siguiente forma: fopen (archivo, modo); Donde el argumento modo especifica si el archivo es de texto o binario, y si es para lectura, escritura o ambas operaciones. Algunos valores posibles para modo se dan en la siguiente tabla. "r" "w" "a" "rb" "wb" "ab" "r+" "w+" "a+" Abre un archivo de texto que exista previamente para lectura. Crea un archivo de texto para escritura si no existe el archivo con el nombre especificado, o trunca (elimina el anterior y crea uno nuevo) un archivo anterior Crea un archivo de texto si no existe previamente o abre un archivo de texto que ya exista para aadir datos al final del archivo. Al abrir el archivo el puntero del archivo queda posicionado al final del archivo. Funciona igual que "r" pero abre o crea el archivo en modo binario. Anlogo a "w" pero escribe en un archivo binario. Anlogo a "a" pero aade datos a un archivo binario. Abre un archivo de texto ya existente para lectura y escritura. Abre un archivo de texto ya existente o crea uno nuevo para lectura y escritura. Abre un archivo de texto ya existente o crea un archivo nuevo para lectura y escritura. El indicador de posicin del archivo queda posicionado al final del archivo anterior.

"r+b" o Funciona igual que "r+" pero lee y escribe en un archivo binario. "rb+" "w+b" o Anlogo a "w+" pero en modo binario. "wb+" "a+b" o Anlogo a "a+" pero en modo binario. "ab+" El argumento archivo puede ser una cadena literal encerrada entre comillas dobles, donde se especifica el nombre del archivo a ser abierto, o puede ser un apuntador a una cadena guardada en cualquier lugar de memoria. Los nombres de los archivos son los mismos que se usan con el sistema operativo y deben seguir las mismas reglas. Un nombre de archivo en un programa de C tambin puede contener informacin sobre la unidad y el directorio. fopen() regresa NULL cuando sucede un error.

Salida formateada a archivos. La salida formateada a archivos se logra con la funcin de biblioteca fprintf(). La funcin fprintf() tiene la siguiente forma: fprintf (apuntador, cadena de control de formato, otros argumentos); El primer argumento es un apuntador a tipo FILE. Para escribir datos a un archivo de disco en particular, se pasa el apuntador que fue regresado cuando se abri el archivo con fopen(). La cadena de control de formato y otros argumentos siguen exactamente las mismas reglas que para printf().

EJEMPLOS
Ejemplo 1

#include <stdio.h> main ()

/*Este programa lo que hace es que en el primer ciclo se van agregando los caracteres y se van guardando en archivo, en el otro ciclo si se quiere aadir datos a ese archivo se agregan los datos y se guarda en el mismo archivo Para terminar de accesar caracteres al archivo se termina presionando la tecla Ctrl y la tecla D==EOF*/
{ FILE *archivo;

/*aqu se declara el apuntador de tipo file con el cual se hace referencia al archivo que se va a manejar*/
int c,d,e; archivo=fopen("temp","w");

/aqu se abre el archivo con permiso de escritura*/


printf (Dame los datos a guardar \n); while ( (c = getchar() ) != EOF );

/*en este ciclo se van a ir introduciendo los caracteres que se desee y no va a terminar el ciclo hasta que se de un EOF, es decir, Ctrl+tecla D*/

putc( c , archivo ); fclose (archivo); printf ("Deseas aadir ms datos\n"); printf (2 == no\n") ; printf (1 == si\n") ; scanf (%d", &e ) ; if (e == 1 ) { archivo = fopen (temp", "a" ) ;

/aqu se abre el archivo con permiso de aadir datos, es decir, los datos originales del archivo nos se borran solo se aaden los nuevos datos*/
while ( (c = getchar() ) != EOF ); putc( c , archivo ); fclose (archivo); } archivo=fopen("temp","r");

/*aqu se van a mostrar los caracteres guardados en el archivo*/


while ( (c = getc(archivo) ) != EOF ); putchar( c ); return ( 0 ); }

You might also like