62389496 Fundamentos de Programacion

download 62389496 Fundamentos de Programacion

of 139

Transcript of 62389496 Fundamentos de Programacion

  • FUNDAMENTOSDEPROGRAMACIN

    ESIMEZacatencoIngenieraElctrica

    Engenerallosestudiantesnecesitanherramientasbsicasqueloayudenalabsquedayelanlisisdelainformacin,aslograrintegrarsusconocimientosprcticosdeingeniera;paralocuallasherramientasdeprogramacinsonunabasefundamental.

    PrimerSemestre

    Profesores:AlejandraGutirrezReyes

    EnriqueMartnezRoldn

  • UNIDAD I INTRODUCCIN A LA PROGRAMACIN

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    CONTENIDO

    Capitulo 1. Introduccin a la Programacin Pag. 1.1. Sistemas Operativos 1 1.1.1. Definicin, caractersticas y funcin de un Sistema Operativo 1 1.1.2. Anlisis Comparativo de Sistemas Operativos 3 1.2. Evolucin de los Lenguajes de Programacin 3 1.2.1. Definicin, caractersticas y funcin de los Lenguajes de Programacin 3 1.3. Interpretes y Compiladores 5 1.3.1. Definicin de Interpretes y Compiladores 5 Capitulo 2. Fundamentos de Programacin Estructurada 2.1. Estructura General de un Programa 7 2.2. Tipos de Datos y Operadores 10 2.2.1. Tamaos, declaracin y modificadores 15 2.2.2. Operadores Lgicos, Aritmticos y de Asignacin 25 2.3. Funciones de Biblioteca 26 2.3.1. Funciones de Entrada y Salida 29 2.3.2. Funciones Matemticas 33 2.4. Funciones Generadas por el Usuario 34 2.4.1. Argumentos y Parmetros Formales 40 2.4.2. Funciones con y sin argumentos 43 2.4.3. Funciones que regresan Valores 47 Capitulo 3. Estructuras de Flujo Programtico 3.1. Estructuras de Decisin 53 3.1.1. Simple 54 3.1.2. Ramificada 66 3.2. Estructuras de Iteracin 85 3.3. Estructuras de Control 97 3.3.1. Ruptura de un Lazo 107 Capitulo 4. Estructuras de Datos 4.1. Arreglos Unidimensionales 109 4.1.1. Concepto y Forma General 109 4.1.2. Arreglos Numricos y de Caracteres 115 4.2. Arreglos Bidimensionales 116 4.2.1. Concepto y Forma General 116 4.2.2. Arreglos Numricos y de Caractres 120 4.3. Apuntadores 123 4.3.1. Concepto 124 4.3.2. Tipos de Apuntadores 130 4.3.3. Operaciones con Apuntadores 132 4.3.4. Relacin de Apuntadores con Arreglos 133

  • UNIDAD I INTRODUCCIN A LA PROGRAMACIN

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    1.1. Sistemas Operativos

    1.1.1. Definicin, caractersticas y funcin de un sistema operativo. Un sistema operativo es un software de sistema, es decir, un conjunto de programas de computadora para permitir una administracin eficaz de sus recursos. Comienza a trabajar cuando es cargado en memoria por un programa especfico, que se ejecuta al iniciar el equipo, o al iniciar una mquina virtual, y gestiona el hardware de la mquina desde los niveles ms bsicos, brindando una interfaz con el usuario.

    Cuando un programa desea acceder a un recurso material, no necesita enviar informacin especfica a los dispositivos perifricos; simplemente enva la informacin al sistema operativo, el cual la transmite a los perifricos correspondientes a travs de su driver (controlador). Si no existe ningn driver, cada programa debe reconocer y tener presente la comunicacin con cada tipo de perifrico. Sistemas Operativos por su Estructura: Requisitos de usuario: Sistema fcil de usar y de aprender, seguro, rpido y adecuado al uso al que se le quiere destinar. Requisitos del software: Donde se engloban aspectos como el mantenimiento, forma de operacin, restricciones de uso, eficiencia, tolerancia frente a los errores y flexibilidad. Mquina Virtual. Se trata de un tipo de sistemas operativos que presentan una interface a cada proceso, mostrando una mquina que parece idntica a la mquina real subyacente. Estos sistemas operativos separan dos conceptos que suelen estar unidos en el resto de sistemas: la multiprogramacin y la mquina extendida. El objetivo de los sistemas operativos de mquina virtual es el de integrar distintos sistemas operativos dando la sensacin de ser varias mquinas diferentes. El ncleo de estos sistemas operativos se denomina monitor virtual y tiene como misin llevar a cabo la multiprogramacin, presentando a los niveles superiores tantas mquinas virtuales como se soliciten. Sistemas Operativos por Servicios: Esta clasificacin es la ms comnmente usada y conocida desde el punto de vista del usuario final. Monousuario Los sistemas operativos monousuarios son aqullos que soportan a un usuario a la vez, sin importar el nmero de procesadores que tenga la computadora o el nmero de procesos o tareas que el usuario pueda ejecutar en un mismo instante de tiempo. Las computadoras personales tpicamente se han clasificado en este rengln. Multiusuario Los sistemas operativos multiusuario son capaces de dar servicio a ms de un usuario a la vez, ya sea por medio de varias terminales conectadas a la computadora o por medio de sesiones remotas en una red de comunicaciones. No importa el nmero de procesadores en la mquina ni el nmero de procesos que cada usuario puede ejecutar simultneamente. Monotarea Los sistemas monotarea son aquellos que slo permiten una tarea a la vez por usuario. Puede darse el caso de un sistema multiusuario y monotarea, en el cual se admiten varios usuarios al mismo tiempo pero cada uno de ellos puede estar haciendo solo una tarea a la vez.

  • UNIDAD I INTRODUCCIN A LA PROGRAMACIN

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    4

    Multitarea Un sistema operativo multitarea es aqul que le permite al usuario estar realizando varias labores al mismo tiempo. Por ejemplo, puede estar editando el cdigo fuente de un programa durante su depuracin mientras compila otro programa, a la vez que est recibiendo correo electrnico en un proceso en background. Es comn encontrar en ellos interfaces grficas orientadas al uso de mens y el ratn, lo cual permite un rpido intercambio entre las tareas para el usuario, mejorando su productividad. Uniproceso Un sistema operativo uniproceso es aqul que es capaz de manejar solamente un procesador de la computadora, de manera que si la computadora tuviese ms de uno le sera intil. El ejemplo ms tpico de este tipo de sistemas es el DOS y MacOS. Multiproceso Un sistema operativo multiproceso se refiere al nmero de procesadores del sistema, que es ms de uno y ste es capaz de usarlos todos para distribuir su carga de trabajo. Generalmente estos sistemas trabajan de dos formas: simtrica o asimtricamente. Cuando se trabaja de manera asimtrica, el sistema operativo selecciona a uno de los procesadores el cual jugar el papel de procesador maestro y servir como pivote para distribuir la carga a los dems procesadores, que reciben el nombre de esclavos. Cuando se trabaja de manera simtrica, los procesos o partes de ellos (threads) son enviados indistintamente a cuales quiera de los procesadores disponibles, teniendo, tericamente, una mejor distribucin y equilibrio en la carga de trabajo bajo este esquema. Se dice que un thread es la parte activa en memoria y corriendo de un proceso, lo cual puede consistir de un rea de memoria, un conjunto de registros con valores especficos, la pila y otros valores de contexto. Sistemas Operativos por la Forma de Ofrecer sus Servicios: Esta clasificacin tambin se refiere a una visin externa, que en este caso se refiere a la del usuario, el cmo acceda los servicios. Bajo esta clasificacin se pueden detectar dos tipos principales: sistemas operativos de red y sistemas operativos distribuidos. Sistemas Operativos de Red Los sistemas operativos de red se definen como aquellos que tiene la capacidad de interactuar con sistemas operativos en otras computadoras por medio de un medio de transmisin con el objeto de intercambiar informacin, transferir archivos, ejecutar comandos remotos y un sin fin de otras actividades. El punto crucial de estos sistemas es que el usuario debe saber la sintaxis de un conjunto de comandos o llamadas al sistema para ejecutar estas operaciones, adems de la ubicacin de los recursos que desee accesar. Sistemas Operativos Distribuidos

    Los sistemas operativos distribuidos abarcan los servicios de los de red, logrando integrar recursos (impresoras, unidades de respaldo, memoria, procesos, unidades centrales de proceso) en una sola mquina virtual que el usuario accesa en forma transparente. Es decir, ahora el usuario ya no necesita saber la ubicacin de los recursos, sino que los conoce por nombre y simplemente los usa como si todos ellos fuesen locales a su lugar de trabajo habitual.

    El sistema operativo cumple varias funciones:

    Administracin del procesador: el sistema operativo administra la distribucin del procesador entre los distintos programas por medio de un algoritmo de programacin.

  • UNIDAD I INTRODUCCIN A LA PROGRAMACIN

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    5

    El tipo de programador depende completamente del sistema operativo, segn el objetivo deseado.

    Gestin de la memoria de acceso aleatorio: el sistema operativo se encarga de gestionar el espacio de memoria asignado para cada aplicacin y para cada usuario, si resulta pertinente. Cuando la memoria fsica es insuficiente, el sistema operativo puede crear una zona de memoria en el disco duro, denominada "memoria virtual". La memoria virtual permite ejecutar aplicaciones que requieren una memoria superior a la memoria RAM disponible en el sistema. Sin embargo, esta memoria es mucho ms lenta.

    Gestin de entradas/salidas: el sistema operativo permite unificar y controlar el acceso de los programas a los recursos materiales a travs de los drivers (tambin conocidos como administradores perifricos o de entrada/salida).

    Gestin de ejecucin de aplicaciones: el sistema operativo se encarga de que las aplicaciones se ejecuten sin problemas asignndoles los recursos que stas necesitan para funcionar. Esto significa que si una aplicacin no responde correctamente puede "sucumbir".

    Administracin de autorizaciones: el sistema operativo se encarga de la seguridad en relacin con la ejecucin de programas garantizando que los recursos sean utilizados slo por programas y usuarios que posean las autorizaciones correspondientes.

    Gestin de archivos: el sistema operativo gestiona la lectura y escritura en el sistema de archivos, y las autorizaciones de acceso a archivos de aplicaciones y usuarios.

    Gestin de la informacin: el sistema operativo proporciona cierta cantidad de indicadores que pueden utilizarse para diagnosticar el funcionamiento correcto del equipo.

    1.1.2. Anlisis Comparativo de Sistemas Operativos

    Anlisis comparativo de Sistemas Operativos Sistema Programacin Usuario

    nico Usuario mltiple

    Tarea nica

    Multitarea

    DOS 16 bits X X Windows3.1 16/32 bits X no

    preventivo Windows95/98/Me 32 bits X cooperativo WindowsNT/2000 32 bits X preventivo WindowsXP 32/64 bits X preventivo Unix / Linux 32/64 bits X preventivo MAC/OS X 32 bits X preventivo VMS 32 bits X preventivo

    Tabla 1. Anlisis de Sistemas Operativos

    1.2. Evolucin de los lenguajes de programacin 1.2.1. Definicin, caractersticas y funciones de los lenguajes de programacin Los lenguajes de programacin son herramientas que nos permiten crear programas y software. Una computadora funciona bajo control de un programa el cual debe estar almacenado en la unidad de memoria; tales como el disco duro. Los lenguajes de programacin de una computadora en particular se conoce como cdigo de mquinas o lenguaje de mquinas.

    Estos lenguajes codificados en una computadora especfica no podrn ser ejecutados en otra computadora diferente. Para que estos programas funcionen para diferentes computadoras hay que realizar una

  • UNIDAD I INTRODUCCIN A LA PROGRAMACIN

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    6

    versin para cada una de ellas, lo que implica el aumento del costo de desarrollo. Por otra parte, los lenguajes de programacin en cdigo de mquina son verdaderamente difciles de entender para una persona, ya que estn compuestos de cdigos numricos sin sentido nemotcnico. Los lenguajes de programacin facilitan la tarea de programacin, ya que disponen de formas adecuadas que permiten ser ledas y escritas por personas, a su vez resultan independientes del modelo de computador a utilizar. Los lenguajes de programacin representan en forma simblica y en manera de un texto los cdigos que podrn ser ledos por una persona. Los lenguajes de programacin son independientes de las computadoras a utilizar.

    Existen estrategias que permiten ejecutar en una computadora un programa realizado en un lenguaje de programacin simblico. Los procesadores del lenguaje son los programas que permiten el tratamiento de la informacin en forma de texto, representada en los lenguajes de programacin simblicos. La ventaja del proceso interprete es que no necesita de dos fases para ejecutar el programa, sin embargo su inconveniente es que la velocidad de ejecucin es ms lenta ya que debe analizar e interpretar las instrucciones contenidas en el programa fuente.

    Los lenguajes de programacin se pueden clasificar atendiendo a varios criterios:

    Segn el nivel de abstraccin Segn la forma de ejecucin Segn el paradigma de programacin que poseen cada uno de ellos

    Nivel de abstraccin

    Lenguajes Mquina

    Estn escritos en lenguajes directamente inteligibles por la maquina (computadora), ya que sus instrucciones son cadenas binarias (0 y 1). Da la posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traduccin posterior lo que supone una velocidad de ejecucin superior, solo que con poca fiabilidad y dificultad de verificar y poner a punto los programas.

    Lenguajes de bajo nivel

    Los lenguajes de bajo nivel son lenguajes de programacin que se acercan al funcionamiento de una computadora. El lenguaje de ms bajo nivel por excelencia es el cdigo mquina. A ste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa.

    Lenguajes de medio nivel

    Hay lenguajes de programacin que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas caractersticas que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje ms cercano al humano y, por tanto, de alto nivel.

    Lenguajes de alto nivel

    Los lenguajes de alto nivel son normalmente fciles de aprender porque estn formados por elementos de lenguajes naturales, como el ingls. En BASIC, uno de los lenguajes de alto nivel

  • UNIDAD I INTRODUCCIN A LA PROGRAMACIN

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    7

    ms conocidos, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si el CONTADOR es igual a 10. Esta forma de trabajar puede dar la sensacin de que las computadoras parecen comprender un lenguaje natural; en realidad lo hacen de una forma rgida y sistemtica, sin que haya cabida, por ejemplo, para ambigedades o dobles sentidos.

    Segn la forma de ejecucin

    Lenguajes compilados

    Naturalmente, un programa que se escribe en un lenguaje de alto nivel tambin tiene que traducirse a un cdigo que pueda utilizar la mquina. Los programas traductores que pueden realizar esta operacin se llaman compiladores. stos, como los programas ensambladores avanzados, pueden generar muchas lneas de cdigo de mquina por cada proposicin del programa fuente. Se requiere una compilacin antes de ejecutar las instrucciones de un problema.

    Segn el paradigma de programacin

    Un paradigma de programacin representa un enfoque particular o filosofa para la construccin del software. No es mejor uno que otro, sino que cada uno tiene ventajas y desventajas. Dependiendo de la situacin un paradigma resulta ms apropiado que otro.

    1.3. Interpretes, Compiladores 1.3.1. Definicin de Intrpretes y Compiladores Hay lenguajes de programacin que utilizan compilador. La ejecucin de un programa con compilador requiere de dos etapas: 1) Traducir el programa simblico a cdigo mquina 2) Ejecucin y procesamiento de los datos. Otros lenguajes de programacin utilizan un programa intrprete o traductor, el cual analiza directamente la descripcin simblica del programa fuente y realiza las instrucciones dadas.

    Los compiladores son aquellos cuya funcin es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje mquina con cdigo binario).

    Al usar un lenguaje compilado (como lo son, por ejemplo, los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se podr ejecutar mientras haya errores, sino hasta que tras haber compilado el programa, ya no aparecen errores en el cdigo. El intrprete en los lenguajes de programacin simula una mquina virtual, donde el lenguaje de mquina es similar al lenguaje fuente. Se puede tambin utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el cdigo objeto que se produce durante la compilacin para utilizarlo en una ejecucin futura, el programador slo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuacin, un programa interprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la mquina, convierte cada proposicin del programa fuente en lenguaje de mquina conforme vaya siendo necesario durante el procesamiento de los datos. El cdigo objeto no se graba para utilizarlo posteriormente.

    La siguiente vez que se utilice una instruccin, se la deber interpretar otra vez y traducir a lenguaje mquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo o

  • UNIDAD I INTRODUCCIN A LA PROGRAMACIN

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    8

    bucle, cada instruccin del bucle tendr que volver a ser interpretada en cada ejecucin repetida del ciclo, lo cual hace que el programa sea ms lento en tiempo de ejecucin (porque se va revisando el cdigo en tiempo de ejecucin) pero ms rpido en tiempo de diseo (porque no se tiene que estar compilando a cada momento el cdigo completo). El intrprete elimina la necesidad de realizar una de compilacin despus de cada modificacin del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelacin deber ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una ejecucin del cdigo. Ambiente integral del Lenguaje C: C es un lenguaje de programacin de propsito general que ofrece control de flujo y estructuras sencillas y un buen conjunto de operadores. No es un lenguaje de muy alto nivel y ms bien un lenguaje pequeo, sencillo y no est especializado en ningn tipo de aplicacin. 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.

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    9

    2.1. Estructura General de un Programa Es muy til, sobre todo cuando se empieza a trabajar con un nuevo lenguaje, disponer de una plantilla con la estructura habitual y general de un programa en dicho lenguaje. Es de lo que tratar este tema. Se dice que C es un lenguaje estrictamente modular: todo el cdigo debe estar ubicado en el interior de funciones. La funcin llamada main() es slo eso, una funcin. Pero una funcin especial. Existe en todos los programas, porque contiene el algoritmo o mdulo principal del programa. La ejecucin de un programa siempre empieza por la primera lnea de la funcin main(). La funcin main(), como todas las funciones de C, puede devolver un valor. El valor devuelto por main() debe ser de tipo entero. Esto se utiliza para pasar algn valor al programa que haya llamado al nuestro, que suele ser el sistema operativo. Si main() no devuelve un nmero entero al sistema operativo mediante una sentencia return, entonces nuestro programa devolver un nmero desconocido. Moraleja: es una buena idea incluir un return al final de la funcin main(). Generalmente, la devolucin de un 0 indica al sistema operativo que el programa a finalizado sin problemas, mientras que cualquier otro valor seala que se ha producido algn error.

    Por lo tanto, la forma habitual de la funcin main() ser: int main(void) { ...instrucciones del algoritmo principal... return 0; }

    Observa que main() no tiene argumentos, por lo que aparece el identificador void entre parntesis en la declaracin.

    Es posible que se vea una definicin de main() con argumentos, algo as:

    int main(int argc, char* argv[]) { ...instrucciones del algoritmo principal... return 0; }

    Esos dos argumentos sirven para capturar parmetros de entrada desde la lnea de comandos.

    En general, un programa en C consta de las siguientes partes:

    Directivas al procesador. Definicin de tipos de datos. Declaracin de variables. Definicin de funciones.

    Aspectos importantes a definir:

    1.- Comentarios:

    Los comentarios en C comienzan con la secuencia '/*' y termina con la secuencia '*/'. Todo lo que se encuentre entre estas dos secuencias es omitido por el compilador y solo nos sirve para poner notas o anotaciones que nos sean tiles para ayuda a nuestro cdigo (jams sern compiladas ni ejecutadas por C). Algunos compiladores (no todos) soportan el anidamiento de comentarios (comentarios dentro de comentarios), pero por no ser una facilidad comn, no se

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    aconseja su utilizacin. El uso de comentarios en un programa es fundamental para su entendimiento. Una proporcin 50%-50% (cdigo-comentario) no es exagerada.

    Existen dos maneras de colocar un comentario, el de un prrafo completo deben estar comprendido entre /*.....*/, y aquellos comentarios que son de una sola lnea van con doble //. void main() /* Esta parte del programa es la cabecera principal */ { /* Llave que da inicio a la programacin del cuerpo del

    programa */ // Comentarios de 1 sola lnea // Cuerpo del programa principal } // Llave que da fin a la programacin del cuerpo del programa

    2.- Directivas al procesador:

    Las directivas al procesador se refiere, a que la etapa de compilacin se realiza en dos fases, una en la que un procesador atiende todas las directivas que contiene el cdigo fuente y la otra etapa es la traduccin a cdigo objeto.

    Todas las directivas al procesador comienzan con el caracter '#', tambin llamadas bibliotecas, es un archivo que contiene las funciones estndar que se pueden usar en los programas. Entre esas funciones se encuentran todas las operaciones de entrada y salida de datos.

    Cada funcin definida en la biblioteca estndar tiene asociada una cabecera (#include).

    // Zona de ficheros de cabecera de las libreras #include // h de Head #include

    Cabeceras de Programa Cabecera Propsito

    Manejo de caracteres Informes de error Define valores en coma flotante dependientes de la implementacin Definiciones usadas en la biblioteca matemtica Soporte para saltos no locales Define algunas constantes de uso comn Soporte para E/S de archivos Declaraciones variables Soporte para las funciones de cadena Soporte para las funciones de tiempo del sistema

    Tabla 2. Cabeceras

    3.- Definicin de funciones:

    Todas las funciones se definen colocando primero el tipo de retorno (void significa que la funcin no retorna nada como resultado de su ejecucin. Por defecto si no se coloca tipo de retorno, se asume que la funcin retorna un valor entero); al tipo de retorno le sigue el nombre (la funcin main posee un significado especial, ya que es la funcin que toma el control cuando se ejecuta el programa); le siguen los argumentos separados por comas y encerrados entre

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    parntesis (aunque la funcin no reciba argumentos, se colocan los parntesis vacios); y por ltimo el cuerpo de la funcin encerrado entre llaves.

    void main (void) // Programa principal tpico de Turbo C {

    // Llave de inicio del programa // Cdigo del programa ....... ....... .......

    } // fin del programa

    4.- Definicin de Tipos de Datos:

    La definicin o declaracin de datos se hace de dos tipos; una llamada declaracin global, que se hace antes del void main ( ) y la cual es reconocida por todo el programa y la declaracin local que es conocida en el programa principal, y se incluye dentro del void main ( ).

    // Zona de variables globales int valor; float media_total; /* Variables locales del algoritmo principal */ int a, b; float x, y;

    Todo programa en C, desde el ms pequeo hasta el ms complejo, tiene una funcin principal denominada main(),que es la funcin que toma el control cuando se corre el programa. Adems, por encima de main() deben aparecer los prototipos de funciones (y esto implica a los archivos de cabecera, si se utilizan funciones de librera) y las variables y constantes globales, si las hay. Por debajo de main() encontraremos el cdigo del resto de funciones.

    Por lo tanto, la estructura habitual de nuestros programas en C debera ser esta:

    /* Comentario inicial: nombre del programa, del programador, fecha, etc. */ /* Archivos de cabecera (prototipos de funciones de librera) */ #include #include /* Prototipos de funciones escritas por nosotros */ float funcin1 (argumentos); float funcin2 (argumentos); /* Variables y constantes globales */ int variable_global; const char constante_global; #define PI 3.14

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    /* Algoritmo principal */ int main(void) { /* Variables locales del algoritmo principal */ int a, b; float x, y; ... ... /* Instrucciones del algoritmo principal */ ... funcin1(argumentos); ... funcin2(argumentos); ... return 0; } /* Cdigo completo de las funciones escritas por nosotros */ float funcin1 (argumentos) { /* Variables locales e instrucciones de este subalgoritmo */ } float funcin2 (argumentos) { /* Variables locales e instrucciones de este subalgoritmo */ } El tema de funciones se ver posteriormente a detalle en el tema 2.3. Un punto importante es enfatizar que todas las lneas de las sentencias terminan con el carcter de ( ; ).

    2.2. Tipos de Datos y Operadores Operadores Un operador es un carcter o grupo de caracteres que acta sobre una, dos o ms variables para realizar una determinada operacin con un determinado resultado. Ejemplos comnes de operadores son la suma (+), la diferencia (-), el producto (*), etc. Los operadores pueden ser unarios, binarios y ternarios, segn acten sobre uno, dos o tres operandos, respectivamente. En C existen muchos operadores de diversos tipos, que se vern a continuacin. Ahora solo mencionar los tipos de operadores que hay, ya que posteriormente se explicar con un poco mas de detalle cada uno de ellos. Operadores Aritmticos Los operadores aritmticos son los ms sencillos de entender y de utilizar. Todos ellos son operadores binarios. En C se utilizan los cinco operadores siguientes: - Suma (+) - Resta () - Multiplicacin (*) - Divisin (/)

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    El quinto operador es el que proporciona el resto de la divisin (residuo) - Mdulo (%) Todos estos operadores se pueden aplicar a constantes, variables y expresiones. El resultado es el que se obtiene de aplicar la operacin correspondiente entre los dos operandos. El nico operador que requiere una explicacin adicional es el operador Mdulo ( %). En realidad su nombre completo es resto o residuo de la divisin entera. Este operador se aplica solamente a constantes, variables o expresiones de tipo int. Con el objeto de dejar mas en claro lo anterior, su significado es evidente: 23 % 4 es 3, ya que el resto de dividir 23 por 4 es 3. Otro ejemplo seria; si a % b es cero entonces a es mltiplo de b. Como se ver ms adelante, en los otros subtemas una expresin es un conjunto de variables y constantes y tambin de otras expresiones ms sencillas relacionadas mediante distintos operadores. Un ejemplo de expresin en la que intervienen operadores aritmticos es el siguiente polinomio de grado 2 en la variable y: 9.0 - 5.0 * y + y * y / 3.0 Las expresiones pueden contener parntesis (...) que agrupan a algunos de sus trminos. Puede haber parntesis contenidos dentro de otros parntesis. El significado de los parntesis coincide con el que se usa en las expresiones matemticas, con algunas caractersticas importantes que se vern ms adelante. En ocasiones, la introduccin de caracteres espacio mejora la legibilidad de las expresiones. Operadores De Asignacin Aritmtica Estos resultan de la unin de los operadores aritmticos con el operador de asignacin el signo (=), o sea: - Igual (=) - Suma igual (+=) - Resta igual ( =) - Multiplicacin igual (*=) - Divisin igual (/=) Estos operadores se aplican de la siguiente manera: ( x += 5 ), en este ejemplo se toma el operando de la izquierda lo suma con el operando de la derecha y lo asigna al operando de la izquierda, en este caso la variable x. Operadores de Incremento y Decremento El operador de incremento es el (++) y el de decremento es el (--), son operadores unarios los cuales tienen prioridad mas alta que otros operadores y sirven para incrementar o decrementar una unidad el valor de la variable a la que afectan. Ahora describiremos algunas caractersticas de los operadores; pre-incremento y post-incremento: Estos operadores pueden ir inmediatamente delante o detrs de la variable. Si preceden a la variable, sta es incrementada antes de que el valor de dicha variable sea utilizado en la expresin en la que aparece. Si es la variable la que precede al operador, la variable es incrementada despus de ser utilizada en la expresin. A continuacin se presenta un ejemplo de estos operadores: i = 2; j = 2;

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    m = i++; /* despus de ejecutarse esta sentencia m=2 e i=3*/ n = ++j; /* despus de ejecutarse esta sentencia n=3 y j=3*/ Estos operadores son muy utilizados. Es importante entender muy bien por qu los resultados m y n del ejemplo anterior son diferentes. Operadores Relacinales Estos establecen la magnitud relativa de dos elementos y son los siguientes:

    Expresiones Lgicas: Expresin Significado a < b Es a menor que b a > b Es a mayor que b a == b Es a igual a b a != b Es a diferente o no igual a b a =b Es a mayor o igual a b

    Tabla 3. Expresiones Lgicas

    Recordemos que estas operaciones nos dan resultados lgicos de 1 0 es decir valores de verdadero o falso; lenguaje C considera todo valor no cero como un valor verdadero. Operadores Lgicos C proporciona operadores lgicos para combinar los resultados de varias condiciones. Una expresin compuesta es aquella que utiliza operadores como estos y que se pueden evaluar para obtener un nico resultado de verdadero o falso. Dos de los operadores lgicos son binarios porque usan dos operandos, devuelven un resultado basado en los operandos recibidos y en el operador. AND ( && ): Este operador conocido como producto lgico retorna un valor de verdadero si los operandos son verdaderos. OR ( || ): El operador de suma lgica retorna un valor de verdadero si los operandos o uno de los operandos es verdadero. NOT ( ! ): Operador de negacin, tiene por efecto invertir el resultado de la expresin que le sigue es decir si la expresin es verdadera despus de aplicar este operador la expresin ser falsa y viceversa. Los operadores lgicos tienen una prioridad bastante baja, menos que los operadores de igualdad pero mayor que el operador de asignacin.

    Jerarqua o Precedencia de Operadores Operadores Unario / Binario Comentario !, &, +, -, sizeof() *, /, % +, - = ==, != && || =

    Unario Binario Binario Binario Binario Binario Binario Binario

    Operadores Unarios Multiplicador Aritmtico Adicin Aritmticos Operadores Relacinales Operadores de Igualdad Multiplicador Lgico Aditivo Lgico Operador de Asignacin

    Tabla 4. Jerarqua de Operadores

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    Los lenguajes de programacin disponen de una serie de tipos de datos bsicos, y proporcionan herramientas para crear estructuras a medida que faciliten el acceso a la informacin. As en nuestro caso ficticio de resolver un sistema de ecuaciones podemos almacenar los coeficientes de cada ecuacin con lo que utilizaramos como tipo de dato los nmeros, si plantesemos el problema desde un punto de vista matricial nos interesara tener un tipo de datos matriz y lo ideal sera tener un tipo de datos ecuacin. En este apartado describiremos los tipos bsicos que proporciona el lenguaje C y dejaremos para temas posteriores la declaracin de tipos complejos. El C dispone de estos tipos bsicos: Para el sistema operativo MSDOS , en el smbolo del sistema de Windows XP (En TC++ 3.0 y Borland C++ 5.0):

    Tipos de Datos y Rango: TIPOS FORMATO RANGO TAMAO DESCRIPCIN

    Char %c -128 a 127 1 Para una letra o un dgito. unsigned char %u 0 a 255 1 Letra o nmero positivo. Short -32.768 a 32.767 2 Entero corto con signo unsigned %u 0 a 65.535 2 Entero corto sin signo Int %d, %i -32.768 a 32.767 2 Entero con signo unsigned int %u 0 a 65.535 2 Entero sin signo short int %d -32.768 a 32.767 2 Entero con signo Long %ld -2.147.483.648a 4 Entero largo con signo unsigned long %ld 0 a 4.294.967.295 4 Entero largo sin signo long int %ld -2.147.483.648a

    2 147 483 6474 Entero largo con signo

    unsigned longi t

    %ld 0 a 4.294.967.295 4 Entero largo sin signo Float %f, %g,

    %e, %E 3.4E-38 a 3.4E+38 decimales(6)

    4

    Para nmeros con decimales

    Double %f, %g, %e, %E

    1.7E-308 a 1.7E+308 decimales(10)

    8

    Para nmeros con decimales

    long double %f, %g, %e, %E

    3.4E-4932 a 1.1E+4932decimales(10)

    10

    Para nmeros con decimales

    Tabla 5. Tipos de datos y su rango Todos estos tipos salvo void son tipos numricos. Incluso el tipo char. Adems de estos tipos podemos utilizar los modificadores signed y unsigned, los cuales son aplicables a los tipos de datos enteros Aunque el tipo char represente caracteres internamente para la computadora no es ms que un nmero comprendido entre 0 y 255 que identifica un carcter dentro del cdigo especificado para tal propsito en el sistema en el que nos encontremos trabajando. El cdigo ms utilizado para este tipo de representacin es el ASCII. Segn la mquina, el compilador empleado y las opciones de compilacin , "char" puede interpretarse con signo o sin signo. Esto es, de -128 a 127 o desde 0 a 255. Si se requiere una representacin que no dependa de las opciones del compilador, etc., se puede poner "signed char" o "unsigned char", segn el caso. Variables Como decamos antes la computadora debe de disponer de los datos necesarios para resolver el problema para el que lo queramos programar. Difcilmente se podra resolver un sistema de

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    ecuaciones si no se dispone de stas. Para ello podemos definir variables. Las variables almacenan valores de un tipo especificado y en ellas almacenamos los datos de nuestro problema, se denominan variables por que su valor puede cambiar a lo largo del programa. Una variable slo puede pertenecer a un tipo de dato. Para poder utilizar una variable, primero tiene que ser declarada. Para referenciar una variable especificada es necesario que la podamos identificar para ello se utiliza un nombre o identificador. Las variables no se conservan despus de que un programa termina su ejecucin. Cuando finaliza un programa, los datos son borrados. Si quieres que datos permanezcan puedes usar archivos para almacenarlos. Declaracin de Variables Las variables se utilizan para almacenar temporalmente datos dentro del programa. En C Hay que declarar todas las variables antes de usarlas. Cada variable tiene un tipo. Es posible inicializar y declarar ms de una variable del mismo tipo en la misma sentencia: La declaracin es:

    tipo nombre ; Ejemplo: int pepe; /* tipo de variable: int y nombre de la variable: a */ float b; double c,d; /* tipo de las variables: double y nombre de las variables: c y d */ char x; Nota: La declaracin de variables debe hacerse al principio de la funcin. (Aunque algunos compiladores lo admitan, no debe hacerse en cualquier lugar). Asignacin de Valores Para la asignacin de valores se utiliza el signo ( = ) igual, por ejemplo: A = 5; B = 4; X = 43.453; En C es posible asignar a varias variables un solo valor ejemplo: a = b = c = 7; x = y = n = 34; p = d = m = 56.8; k = i = 23; Algunos lenguajes automticamente inicializan variables numricas a cero y variables tipo carcter a blanco o a carcter nulo, en C no es as ya que se puede declarar la variable e inicializarla al mismo tiempo, por ejemplo: int x = 5, y = 1; Hay que tener cuidado con lo siguiente: 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. Ejemplo: Suma dos valores

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    Algoritmo: inicio declarar variables enteras num1=4, num2, num3 = 6 escribir ( El valor de num1 es: , num1) escribir ( El valor de num3 es:, num3) num2 num1+num3 escribir ( num1 + num3 = , num2) pausa fin Programa: #include int main (void) { int num1=4, num2, num3=6; printf(" El valor de num1 es %d", num1); printf("\n El valor de num3 es %d", num3); num2=num1+num3; printf("\n num1 + num3 = %d\n", num2); system(pause); return 0; } Alcance o mbito de las Variables (tipos de declaracin de variables) Segn el lugar donde se declaren las variables tendrn un mbito. Segn el mbito de las variables pueden ser utilizadas desde cualquier parte del programa o nicamente en la funcin donde han sido declaradas. Las variables pueden ser: - locales: Cuando se declaran dentro de una funcin. Las variables locales slo pueden ser referenciadas (utilizadas) por sentencias que estn dentro de la funcin que han sido declaradas. No son conocidas fuera de su funcin. Pierden su valor cuando se sale y se entra en la funcin. La declaracin es como siempre. -globales: Son conocidas a lo largo de todo el programa, y se pueden usar desde cualquier parte del cdigo del programa. Mantienen sus valores durante toda la ejecucin. Deban ser declaradas fuera de todas las funciones incluida main (void). La sintaxis de creacin no cambia nada con respecto a las variables locales. Inicialmente toman el valor 0 o nulo, segn el tipo. -de registro: Otra posibilidad es, que en vez de ser mantenidas en posiciones de memoria de la computadora, se las guarde en registros internos del microprocesador. De esta manera el acceso a ellas es ms directo y rpido. Para indicar al compilador que es una variable de registro hay que aadir a la declaracin la palabra register delante del tipo. Solo se puede utilizar para variables locales. -estticas: Las variables locales nacen y mueren con cada llamada y finalizacin de una funcin, sera til que mantuvieran su valor entre una llamada y otra sin por ello perder su mbito. Para conseguir eso se aade a una variable local la palabra static delante del tipo. 2.2.1. Tamao, declaracin y modificadores El Tipo de dato int

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    En una variable de este tipo se almacenan nmeros enteros (sin decimales). Una variable tipo int se almacena en 2 bytes (16 bits), aunque algunos compiladores utilizan 4 bytes (32 bits). El ANSI C no tiene esto completamente normalizado y existen diferencias entre unos compiladores y otros. Con 16 bits se pueden almacenar 216 = 65536 nmeros enteros diferentes: de 0 al 65535 para variables sin signo, y de -32768 al 32767 para variables con signo (que pueden ser positivas y negativas), que es la opcin por defecto. Este es el rango de las variables tipo int. 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: unsigned int numero; int nota = 10; Esto hace que declaremos una variable llamada nmero que va a contener un nmero entero sin signo y una variable nota con signo. En este caso la variable numero podr estar entre 0 y 65535, mientras que nota deber estar comprendida entre -32768 al 32767. Cuando a una variable int se le asigna en tiempo de ejecucin un valor que queda fuera del rango permitido (situacin de overflow o valor excesivo), se produce un error en el resultado de consecuencias tanto ms imprevisibles cuanto que de ordinario el programa no avisa al usuario de dicha circunstancia. Cuando el ahorro de memoria es muy importante puede asegurarse que el computador utiliza 2 bytes para cada entero declarndolo en una de las formas siguientes: int numero; Como se ha dicho antes, ANSI C no obliga a que una variable int ocupe 2 bytes, pero declarndola como int s que necesitar slo 2 bytes (al menos en los PCs). 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 Aqu se describe brevemente el significado de "%i" el cual 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 );

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    1

    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, excelente! \n", x ); que quedar como: El valor de x es 10, excelente! Como vemos %i al imprimir se sustituye por el valor de la variable. Veamos un ejemplo para resumir todo: Algoritmo: inicio declara variables

    enteras x 20 escribir ( El valor inicial de x es , x ) x 60 escribir ( Ahora el valor es , x ); pausa fin Programa: #include int main() { int x = 20; prinft( "El valor inicial de x es %i \n", x ); x = 60; printf( "Ahora el valor es %i \n", x ); system(pause); return 1; } Cuya salida ser: El valor inicial de x es 20 Ahora el valor es 60 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. El Tipo de dato char Las variables de tipo char sirven para almacenar caracteres y se almacenan en un byte de memoria (8 bits). En un bit se pueden almacenar dos valores (0 y 1); con dos bits se pueden almacenar 22 = 4 valores (00, 01, 10, 11 en binario; 0, 1 2, 3 en decimal). Con 8 bits se podrn almacenar 28 = 256 valores diferentes (normalmente entre 0 y 255; con ciertos compiladores entre -128 y 127).

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    Los 128 primeros (0 a 127) son el ASCII estndar. El resto es el ASCII extendido y depende del idioma y de la computadora. Para declarar una variable de tipo char hacemos: char letra; char a, b, caracter; Se puede declarar ms de una variable de un tipo determinado en una sola sentencia. Se puede tambin inicializar la variable en la declaracin. Por ejemplo, para definir la variable carcter letra a y asignarle el valor A, se puede escribir: char letra = A; o letra = 65; A partir de ese momento queda definida la variable letra con el valor correspondiente a la letra A. Recurdese que el valor A utilizado para inicializar la variable letra es una constante carcter. En realidad, letra se guarda en un solo byte como un nmero entero, el correspondiente a la letra A en el cdigo ASCII, (existe un cdigo ASCII extendido que utiliza los 256 valores y que contiene caracteres especiales y caracteres especficos de los alfabetos de diversos pases, como por ejemplo las vocales acentuadas y la letra para el espaol latinoamericano). En una variable char slo podemos almacenar solo una letra, no podemos almacenar ni frases ni palabras. En el ejemplo anterior, 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. Tambin podemos imprimir el valor ASCII de la variable usando %i en vez de %c: letra = 'A'; printf( "El cdigo 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:

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    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 Tipo de dato long Existe la posibilidad de utilizar enteros con un rango mayor si se especifica como tipo long en su declaracin: long int numero _ grande; o, ya que la palabra clave int puede omitirse en este caso, long numero _ grande; El rango de un entero long puede variar segn el computador o el compilador que se utilice, pero de ordinario se utilizan 4 bytes (32 bits) para almacenarlos, por lo que se pueden representar 232 = 4.294.967.296 nmeros enteros diferentes. Si se utilizan nmeros con signo, podrn representarse nmeros entre -2.147.483.648 y 2.147.483.647. Tambin se pueden declarar enteros long que sean siempre positivos con la palabra unsigned: unsigned long numero_positivo_muy_grande; En algunos computadores una variable int ocupa 2 bytes (coincidiendo con short) y en otros 4 bytes (coincidiendo con long). Lo que garantiza el ANSI C es que el rango de int no es nunca menor que el de short ni mayor que el de long. El Tipo de dato float En muchas aplicaciones hacen falta variables reales, capaces de representar magnitudes que contengan una parte entera y una parte fraccionaria o decimal. Estas variables se llaman tambin de punto flotante. De ordinario, en base 10 y con notacin cientfica, estas variables se representan por medio de la mantisa, que es un nmero mayor o igual que 0.1 y menor que 1.0, y un exponente que representa la potencia de 10 por la que hay que multiplicar la mantisa para obtener el nmero considerado. Por ejemplo, se representa como 0.3141592654 . 101. Tanto la mantisa como el exponente pueden ser positivos y negativos. Las computadoras trabajan en base 2. Por eso un nmero de tipo float se almacena en 4 bytes (32 bits), utilizando 24 bits para la mantisa (1 para el signo y 23 para el valor) y 8 bits para el exponente (1 para el signo y 7 para el valor). Es interesante ver qu clase de nmeros de punto flotante pueden representarse de esta forma. En este caso hay que distinguir el rango de la precisin. La precisin hace referencia al nmero de cifras con las que se representa la mantisa. Declaracin de una variable de tipo float: float numero; Para imprimir valores tipo float Usamos %f.

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    float num=4060.80; printf( "El valor de num es : %f", num ); El resultado ser: 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 ); Que da como resultado: El valor de num es: 4.06080e003 El Tipo de dato double Las variables tipo float tienen un rango y sobre todo una precisin muy limitada, insuficiente para la mayor parte de los clculos tcnicos y cientficos. Este problema se soluciona con el tipo double, que utiliza 8 bytes (64 bits) para almacenar una variable. Se utilizan 53 bits para la mantisa (1 para el signo y 52 para el valor) y 11 para el exponente (1 para el signo y 10 para el valor). Las variables tipo double se declaran de forma anloga a las anteriores: double numero_real_grande; Por ltimo, existe la posibilidad de declarar una variable como long double, aunque el ANSI C no garantiza un rango y una precisin mayores que las de double. Eso depende del compilador y del tipo de computador. Estas variables se declaran en la forma: long double real_muy_grande; cuyo rango y precisin no est normalizado. Los compiladores de Microsoft para PCs utilizan 10 bytes (64 bits para la mantisa y 16 para el exponente). 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.

    Tabla de tipos de datos

    Tipo Definicin Bits

    Char Short

    Carcter Entero corto con signo

    (normalmente 8 bits) (normalmente 16 bits)

    Int Entero con signo (depende de la implementacin) Unsigned Entero sin signo (depende de la implementacin) Long Entero largo con signo (normalmente 32 bits) Float Flotante simple (normalmente 32 bits) Double Flotante doble (normalmente 64 bits)

    Tabla 6. Tipos de datos

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    Con nmeros enteros si corremos este programa Algotimo: inicio declarar variables Enteras num1 num1 2147483648 escribir ( El valor de num1 es: , num1 ) pausa fin Programa: #include int main(void) { int num1; num1 = 2147483648; printf( "El valor de num1 es: %i \n", num1 ); getch(); } 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 de la computadora 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. Conversin de tipos: Cuando escribimos una expresin aritmtica a+b, en la cual hay variables o valores de distintos tipos, el compilador realiza determinadas conversiones antes de que evale la expresin. Estas conversiones pueden ser para 'aumentar' o 'disminuir' la precisin del tipo al que se convierten los elementos de la expresin. Un ejemplo claro, es la comparacin de una variable de tipo int con una variable de tipo double. En este caso, la de tipo int es convertida a double para poder realizar la comparacin. Los tipos pequeos son convertidos de la forma siguiente: un tipo char se convierte a int, con el modificador signed si los caracteres son con signo, o unsigned si los caracteres son sin signo. Un unsigned char es convertido a int con los bits ms altos puestos a cero. Un signed char es convertido a int con los bits ms altos puestos a uno o cero, dependiendo del valor de la variable. Para los tipos de mayor tamao: si un operando es de tipo double, el otro es convertido a double. Si un operando es de tipo float, el otro es convertido a float. Si un operando es de tipo unsigned long, el otro es convertido a unsigned long. Si un operando es de tipo long, el otro es convertido a long. Si un operando es de tipo unsigned, el otro es convertido a unsigned. Si no, los operandos son de tipo int. Otra clase de conversin implcita tiene lugar cuando el resultado de una expresin es asignado a una variable, pues dicho resultado se convierte al tipo de la variable (en este caso,

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    sta puede ser de menor rango que la expresin, por lo que esta conversin puede perder informacin y ser peligrosa). Por ejemplo, si i y j son variables enteras y x es double: x = i*j j + 1; En C existe tambin la posibilidad de realizar conversiones explcitas de tipo (llamadas casting, en ingles). El casting es pues una conversin de tipo, forzada por el programador. Para ello basta preceder la constante, variable o expresin que se desea convertir por el tipo al que se desea convertir, encerrado entre parntesis. En el siguiente ejemplo, k = (int) 1.7 + (int) masa; la variable masa es convertida a tipo int, y la constante 1.7 (que es de tipo double) tambin. El casting se aplica con frecuencia a los valores de retorno de las funciones. Ejemplo: Algoritmo: inicio declarar variables reales a enteras b a 2.8 b 10 escribir ( a (real) = , a) escribir ( a convertido en entero: , (int) a) escribir ( b (entero): , b) escribir ( b convertido en real: , (float) b) pausa fin Programa: #include int main (void) { float a; int b; a = 2.8; b = 10; printf("\n a (real) = %f", a); /* a = 2.8000 */ printf("\n a convertido en entero: %d", (int) a); /* a convertido en entero : 2 */ printf("\n b (entero): %d", b); /* b : 10 */ printf("\n b convertido en real: %f", (float) b); /* b convertido en real : 10.0000 */ system(pause); return 1; } Constantes Se entiende por constantes aquel tipo de informacin numrica o alfanumrica que no puede cambiar ms que con una nueva compilacin del programa. Como ya se ha dicho anteriormente, en el cdigo de un programa en C pueden aparecer diversos tipos de constantes que se van a explicar a continuacin.

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    Constantes Enteras Un constante entero decimal est formado por una secuencia de dgitos del 0 al 9, constituyendo un nmero entero. Las constantes enteros decimales estn sujetas a las mismas restricciones de rango que las variables tipo int y long, pudiendo tambin ser unsigned. El tipo de una constante se puede determinar automticamente segn su magnitud, o de modo explcito posponiendo ciertos caracteres, como en los ejemplos que siguen:

    Constantes de tipo entero Longitud Constante

    23484 45815 253u 253U 739l 739L 583ul 583UL

    constante tipo int constante tipo long (es mayor que 32767) constante tipo unsigned int constante tipo long constante tipo unsigned long

    Tabla 7. Constantes Enteras

    En C se pueden definir tambin constantes enteras octales, esto es, expresadas en base 8 con dgitos del 0 al 7. Se considera que una constante est expresada en base 8 si el primer dgito por la izquierda es un cero (0). Anlogamente, una secuencia de dgitos (del 0 al 9) y de letras (A, B, C, D, E, F) precedida por 0x o por 0X, se interpreta como una constante entera hexadecimal, esto es, una constante numrica expresada en base 16. Por ejemplo:

    Ejemplos conversiones Conversin Cdigo

    011 11 0xA 0xFF

    constante octal (igual a 9 en base 10) constante entera decimal (no es igual a 011) constante hexadecimal (igual a 10 en base 10) constante hexadecimal (igual a 162-1=255 en base 10)

    Tabla 8. Ejemplos de Conversiones Es probable que no haya necesidad de utilizar constantes octales y hexadecimales, pero conviene conocer su existencia y saber interpretarlas por si hiciera falta. La ventaja de los nmeros expresados en base 8 y base 16 proviene de su estrecha relacin con la base 2 ( 8 y 16 son potencias de 2), que es la forma en la que la computadora almacena la informacin. Constantes de punto flotante Como es natural, existen tambin constantes de punto flotante, que pueden ser de tipo float, double y long double. Una constante de punto flotante se almacena de la misma forma que la variable correspondiente del mismo tipo. Por defecto si no se indica otra cosa las constantes de punto flotante son de tipo double. Para indicar que una constante es de tipo float se le aade una f o una F; para indicar que es de tipo long double, se le aade una l o una L. En cualquier caso, el punto decimal siempre debe estar presente si se trata de representar un nmero real. Estas constantes se pueden expresar de varias formas. La ms sencilla es un conjunto de dgitos del 0 al 9, incluyendo un punto decimal. Para constantes muy grandes o muy pequeas puede utilizarse la notacin cientfica; en este caso la constante tiene una parte entera, un punto decimal, una parte fraccionaria, una e o E, y un exponente entero (afectando a

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    la base 10), con un signo opcional. Se puede omitir la parte entera o la fraccionaria, pero no ambas a la vez. Las constantes de punto flotante son siempre positivas. Puede anteponerse un signo (-), pero no forma parte de la constante, sino que con sta constituye una expresin, como se ver ms adelante. A continuacin se presentan algunos ejemplos vlidos:

    Ejemplos de Constantes Ejemplo Constante

    1.23 23.963f .00874 23e2 .874e-2 .874e-2f

    constante tipo double (opcin por defecto) constante tipo float constante tipo double constante tipo double (igual a 2300.0) constante tipo double en notacin cientfica (=.00874) constante tipo float en notacin cientfica

    Tabla 9. Ejemplos de Constantes Seguidos de otros que no son correctos:

    Ejemplos incorrectos de constantes

    1,23 23963f

    error: la coma no esta permitida error: no hay punto decimal ni carcter e E

    .e4 -3.14

    error: no hay ni parte entera ni fraccionaria error: slo el exponente puede llevar signo

    Tabla 10. Ejemplos incorrectos de constantes Constantes carcter Una constante carcter es un carcter cualquiera encerrado entre apstrofos (tal como 'x' o 't'). El valor de una constante carcter es el valor numrico asignado a ese carcter segn el cdigo ASCII. Conviene indicar que en C no existen constantes tipo char; lo que se llama aqu constantes carcter son en realidad constantes enteras. Hay que sealar que el valor ASCII de los nmeros del 0 al 9 no coincide con el propio valor numrico. Por ejemplo, el valor ASCII de la constante carcter '8' es 56. Ciertos caracteres no representables grficamente, el apstrofo (') y la barra invertida (\) y otros caracteres, se representan mediante tabla de secuencias de escape con ayuda de la barra invertida (\). Los caracteres ASCII pueden ser tambin representados mediante el nmero octal correspondiente, encerrado entre apstrofos y precedido por la barra invertida. Por ejemplo, '\07' y '\7' representan el nmero 7 del cdigo ASCII (sin embargo, '\007' es la representacin octal del carcter '7'). El ANSI C tambin admite secuencias de escape hexadecimales, por ejemplo '\x1a'.

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    Cadenas de caracteres Una cadena de caracteres es una secuencia de caracteres delimitada por comillas ("), como por ejemplo: "Esto es una cadena de caracteres". Dentro de la cadena, pueden aparecer caracteres en blanco y se pueden emplear las mismas secuencias de escape vlidas para las constantes carcter. Por ejemplo, las comillas (") deben estar precedidas por (\), para no ser interpretadas como fin de la cadena; tambin la propia barra invertida (\). Es muy importante sealar que el compilador sita siempre un byte nulo (\0) adicional al final de cada cadena de caracteres para sealar el final de la misma. As, la cadena "mesa" no ocupa 4 bytes, sino 5 bytes. A continuacin se muestran algunos ejemplos de cadenas de caracteres: "Informtica I" "'A'" " cadena con espacios en blanco " "Esto es una \"cadena de caracteres".\n" 2.2.2. Operadores Lgicos Aritmticos y de Asignacin Constantes de tipo Enumeracin: En C existen una clase especial de constantes, llamadas constantes enumeracin. Estas constantes se utilizan para definir los posibles valores de ciertos identificadores o variables que slo deben poder tomar unos pocos valores. Por ejemplo, se puede pensar en una variable llamada dia_de_la_semana que slo pueda tomar los 7 valores siguientes: lunes, martes, mircoles, jueves, viernes, sbado y domingo. Es muy fcil imaginar otros tipos de variables anlogas, una de las cuales podra ser una variable booleana con slo dos posibles valores: SI y NO, o TRUE y FALSE, u ON y OFF. El uso de este tipo de variables hace ms claros y legibles los programas, a la par que disminuye la probabilidad de introducir errores. En realidad, las constantes enumeracin son los posibles valores de ciertas variables definidas como de ese tipo concreto. Las enumeraciones se crean con enum: enum nombre_de_la_enumeracin { }; Ejemplo 1: nombres de las constantes enum da {lunes, martes, mircoles, jueves, viernes, sbado, domingo}; Esta declaracin crea un nuevo tipo de variable el tipo de variable da que slo puede tomar uno de los 7 valores encerrados entre las llaves. Estos valores son en realidad constantes tipo int: lunes es un 0, martes es un 1, mircoles es un 2, etc. Ahora, es posible definir variables, llamadas dia1 y dia2, que sean de tipo da, en la forma (observe que en C deben aparecer las palabras enum da) enum da dia1, dia2; y a estas variables se les pueden asignar valores en la forma dia1 = martes; Los valores enteros que se asocian con cada constante tipo enumeracin pueden ser controlados por el programador. Por ejemplo, la declaracin,

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    enum da {lunes=1, martes, mircoles, jueves, viernes, sbado, domingo}; asocia un valor 1 a lunes, 2 a martes, 3 a mircoles, etc., mientras que la declaracin, enum da {lunes=1, martes, mircoles, jueves=7, viernes, sbado, domingo}; asocia un valor 1 a lunes, 2 a martes, 3 a mircoles, un 7 a jueves, un 8 a viernes, un 9 a sbado y un 10 a domingo.

    Tabla de operadores lgicos, aritmticos y de asignacin:

    Operador Definicin

    +, - ++, --

    suma, resta incremento, decremento

    *, /, % multiplicacin, divisin, mdulo >>,

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    2

    Todas las funciones matemticas como sin(), cos(), sqrt() son funciones de la biblioteca estndar de matemticas (math.h). Para muchas llamadas del sistema y funciones de las bibliotecas se tiene que incluir el archivo cabecera apropiado, por ejemplo: stdio.h, math.h. Para usar una funcin se debe asegurar de haber puesto los correspondientes #include en el archivo de C. De esta forma la funcin puede ser llamada correctamente, es importante asegurarse que los argumentos tengan los tipos esperados, de otra forma la funcin probablemente producir resultados extraos. La mayora de las bibliotecas contienen cientos de funciones utilizables que nos pueden ahorrar una cantidad importante de tiempo de programacin. Una biblioteca es una coleccin de funciones, proporcionadas por el compilador para utilizarse dentro de un programa, para usar una funcin de estas bibliotecas (libreras), se debe incluir el archivo de encabezado correspondiente que contiene el prototipo de la funcin y una vez listo; la funcin solo se usa (entonces la funcin realiza la operacin para lo que fue creada), y listo. El prototipo de encabezado contiene los prototipos correctos y simplemente tendrs que incluir el archivo de encabezado mediante la declaracin #include y luego se podr llamar a la funcin que se desee. Ejemplo: #include Donde #include es el prototipo de encabezado y es la biblioteca de C, en donde dentro de ella se encontrarn muchas funciones de biblioteca que se pueden usar dentro de un programa, las cuales ya realizan una funcin determinada, Ejemplos de algunas funciones que se encuentran en las diferentes bibliotecas: Biblioteca math.h

    Funciones Funciones acos ceil

    asin cos

    atan cosh

    atan2 exp

    fabs floor fmod frexp ldexp log log10 modf pow sin sinh sqrt tan tanh

    Tabla 12. Funcin math.h Biblioteca string.h

    Funciones Funciones memchr memset

    memcmp strcat

    memcpy strchr

    memmove strcmp

    strcoll strcpy strcspn strerror strlen strncat strncmp strncpy strpbrk strrchr strspn strstr strtok strxfrm

    Tabla 13. Funcin string.h Biblioteca stdlib.h

    Funciones Funciones abort atoi

    abs atol

    atexit bsearch

    atof calloc

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    div exit free getenv labs ldiv malloc mblen mbstowcs mbtowc qsort rand realloc srand strtod strtol strtoul system wctomb

    Tabla 14. Funcin stdlib.h Biblioteca stdio.h

    Funciones Funciones clearerr fflush

    fclose fgetc

    feof fgetpos

    ferror fgets

    fopen formato fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell fwrite getc getchar gets perror printf putc putchar puts remove rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ungetc vfprintf vprintf vsprintf

    Tabla 15. Funcin stdio.h Biblioteca time.h

    Funciones Funciones asctime gmtime

    clock localtime

    ctime mktime

    difftime strftime

    time Tabla 16. Funcin time.h

    Un ejemplo de un programa donde se usan dos funciones de biblioteca llamadas getchar() y putchar(), las cuales se encuentran respectivamente en la biblioteca stdio.h, sera el siguiente. Algoritmo: inicio declarar variables Entera c c getchar( ) mientras (c != EOF) hacer putchar(c) c getchar() fin_mientras pausa fin Programa: #include void main() { int c; c = getchar(); while (c != EOF) {

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    putchar(c); c = getchar(); } getch(); } El mismo ejemplo solo un poco ms simple de realizar. Algoritmo: inicio declarar variables enteras c mientras ((c = getchar()) != EOF) hacer putchar(c) fin_mientras pausa fin Programa: #include void main() { int c; while ((c = getchar()) != EOF) { putchar(c); } } Ejemplo que cuenta el nmero de caracteres de una cadena. Algoritmo: inicio declarer variables float nc nc 0 mientras ((getchar()) != EOF) hacer incrementar en uno nc escribir ( nc ) fin_mientras pausa fin Programa: #include void main() { long nc; nc = 0; while ((getchar()) != EOF) ++nc;

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    printf("%ld\n", nc); } 2.3.1 funciones de entrada y salida Cuando nos referimos a entrada/salida estndar (E/S estndar) queremos decir que los datos o bien se estn leyendo del teclado, bien se estn escribiendo en el monitor de video. Como se utilizan muy frecuentemente se consideran como los dispositivos de E/S por default y no necesitan ser nombrados en las instrucciones de E/S.

    En C no existe ninguna palabra clave para realizar la entrada y salida de datos (E/S). Se realizan a travs de funciones de biblioteca especficamente stdio.h.

    Las funciones principales que realizan la entrada y salida sin formato son:

    getchar(): Lee un carcter del teclado, espera hasta que se pulsa una tecla y entonces devuelve su valor.

    putchar(): Imprime un carcter en la pantalla en la posicin actual del cursor.

    gets(): Lee una cadena de caracteres introducida por el teclado y la sita en una direccin apuntada por su argumento de tipo puntero a carcter.

    puts(): Escribe su argumento de tipo cadena en la pantalla seguida de un carcter de salto de lnea.

    El siguiente fragmento de cdigo lee un carcter del teclado y lo muestra por pantalla. A continuacin lee una cadena (de 10 caracteres incluido el carcter nulo) y tambin la muestra por pantalla:

    Algoritmo:

    inicio declarar variables

    carcter cadena[10] entera i

    i getchar( ) putchar( i ) escribir ( Digita una cadena de caracteres ) gets (cadena) escribir ( Imprime la cadena de caracteres ) puts (cadena) pausa fin

    Programa:

    #include main() { char cadena[10]; int i; i=getchar(); putchar(i); printf( Digita una cadena de caracteres \n );

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    gets(cadena); printf( Imprime la cadena de caracteres \n); puts(cadena); getch(); } Las funciones principales que realizan la entrada y salida con formato, es decir, se pueden leer y escribir en distintas formas controladas, son: printf(): Escribe datos en la consola con el formato especificado. scanf(): Funcin de entrada por consola con el formato especificado. Su sintaxis es la siguiente: printf (" caracteres de transmisin y escape", lista de argumentos); scanf (" caracteres de transmisin y escape", lista de argumentos); Ejemplos: cdigo en C Impresin en pantalla printf( Hola como estas ); Hola como estas int j; j=100; printf( Tu resultado es: %d , j ); Tu resultado es: 100 flota y; y=45.45; printf( El valor %f , corresponde a la variable y , y); El valor 45.45, corresponde a la variable y Los caracteres de transmisin son precedidos de un % para distinguirlos de los normales: Caracteres de transmisin y el argumento que transmite:

    Caracteres de transmisin Modificador Tipo de dato %c %s

    Int: un carcter simple Char *: una cadena de caracteres

    %d %i Int: un nmero decimal %o octal sin signo %x %X hexadecimal sin signo %u decimal sin signo %f Float o double, en notacin fija %e %E Float o double, en notacin cientfica %g %G Float o double en notacin cientfica si el exponente es

    menor de diez a la menos cuatro, o fija en caso contrario.

    %p escribe el nmero que corresponde al puntero %% Escribe un signo de %

    Tabla 17. Modificador y su argumento .

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    Una l precediendo al tipo (por ejemplo, %l5d) significa que transmitiremos un long int, si, por el contrario, es una h significa que transmitiremos un short int. Existe otro tipo de carcter especial, los caracteres de escape, que tienen un significado especial. Los caracteres de escape son los siguientes:

    Caracteres de escape Carcter de escape Significado \n \t

    Nueva lnea Tabulador

    \b Espacio atrs \r Retorno de carro \f Comienzo de pgina \a Pitido sonoro \ Comilla simple \" Comilla doble \\ Barra invertida \xdd Cdigo ASCII en notacin hexadecimal

    (cada d representa un dgito)

    \ddd Cdigo ASCII en notacin octal (cada d representa un dgito)

    Tabla 18. Caracteres de escape La lista de argumentos estar separada por comas. Debe existir una correspondencia directiva entre los caracteres de transmisin (aquellos que comienzan con un %) y la lista de argumentos a transmitir. Cabe destacar una diferencia en la lista de argumentos entre las funciones printf() y scanf(). En est ultima funcin (scanf()), la lista de argumentos va precedida por el operador de direccin(&), puesto que scanf() requiere que los argumentos sean las direcciones de las variables, en lugar de ellas mismas. Ejemplo de printf() con scanf(); Algoritmo: Inicio Declarar variables Enteras ent1 Enteras ent2 Enteras suma Escribir ( Introducir el primer nmero ) Leer ent1 escribir ( Introducir el segundo nmero ) leer ent2 suma ent1 + ent2 escribir ( La suma es , suma ) pausa fin Programa: ama suma /* Programa suma */ #include

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    int main() { int ent1; /* declaracin de variable, es el primer nmero */ int ent2; /* segundo nmero a introducir por el usuario */ int suma; /* variable en donde se guardar la suma */ printf(Introducir el primer nmero \n); /* Indicacin */ scanf(%d,&ent1); /* Lectura de primer entero*/ printf(Introducir el segundo nmero \n); /* Indicacin */ scanf(%d,&ent2); /* Lectura del segundo entero*/ suma=ent1+ent2; /* Realiza la suma */ printf(La suma es %d \n); /* Imprime la suma */ return 0; /* Indica que el programa termin con xito*/ getch(); } scanf(%d,&ent1); %d es una cadena de control de formato, en ste caso indica que el usuario introducir un entero (int ent1;) printf(La suma es %d \n, suma); %d es una cadena de control de formato, en ste caso indica que se imprimir el valor numrico de la variable suma Al declarar las variables enteras ent1, ent2, suma en C, en realidad corresponde a lugares en la memoria de la computadora. int ent1; Toda variable en C tiene un nombre, un tipo, y un valor. Cuando la instruccin scanf(%d,&ent1); se ejecuta el valor escrito por el usuario se colocar en una direccin o localidad de la memoria donde se le haya asignado a la variable ent1. 2.3.2. Funciones matemticas

    Para poder usar las funciones matemticas, se debe usar la biblioteca de funciones matemticas que permite al programador reutilizar ciertos clculos matemticos comunes, esta es biblioteca .

    La biblioteca de matemticas es relativamente fcil de usar, al igual que las vistas previamente. Se debe incluir la directiva de preprocesamiento #include , y entonces se podrn utilizar todas las funciones que se encuentren en dicha librera, como las que se enlistaron en las funciones de biblioteca anteriormente.

    Se muestra a continuacin una lista de funciones matemticas. Son fciles de usar y algunas de ellas han sido ya usadas previamente.

    Funciones Matemticas double acos(double x) Calcula el arco coseno de x. double asin(double x) Calcula el arco seno de x. double atan(double x) Devuelve el arco tangente en radianes.

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    double atan2(double y, double x)

    Calcula el arco tangente de las dos variables x e y. Es similar a calcular el arco tangente de y / x, excepto en que los signos de ambos argumentos son usados para determinar el cuadrante del resultado.

    double ceil(double x) Redondea x hacia arriba al entero ms cercano.

    double cos(double x) Devuelve el coseno de x, donde x est dado en radianes.

    double cosh(double x) Devuelve el coseno hiperblico de x. double exp(double x) Devuelve el valor de e (la base de los

    logaritmos naturales) elevado a la potencia x.

    double fabs(double x) Devuelve el valor absoluto del nmero en punto flotante x.

    double floor(double x) Redondea x hacia abajo al entero ms cercano.

    double fmod(double x, double y)

    Calcula el resto de la divisin de x entre y. El valor devuelto es x - n * y, donde n es el cociente de x / y.

    double frexp(double x, int *exp)

    Se emplea para dividir el nmero x en una fraccin normalizada y un exponente que se guarda en exp.

    long int labs(long int j) double ldexp(double x, int exp) double log(double x); double log10(double x) double modf(double x, double *iptr)

    Divide el argumento x en una parte entera y una parte fraccional. La parte entera se guarda en iptr.

    double pow(double x, double y)

    Devuelve el valor de x elevado a y.

    double sin(double x) double sinh(double x) double sqrt(double x) double tan(double x) double tanh(double x)

    Tabla 19. Funciones Matemticas Estas funciones matemticas, realizan una funcin especfica para lo que fueron creadas y el programador no tiene que preocuparse por crear el cdigo para realizar dicha funcin, nicamente las tiene que utilizar dentro del programa que lo desee.

    2.4. Funciones Generadas por el usuario La experiencia ha demostrado que la mejor manera de desarrollar y mantener un programa grande es construirlo a partir de piezas o componentes mas pequeos, esta tcnica se llama divide y vencers. Las funciones son bloques de programa que definen tareas especficas, las cuales pueden utilizarse en diversos puntos del programa, estas funciones es en donde se produce toda la actividad que realiza un programa. C fu diseado como un lenguaje de programacin estructurado, tambin llamado programacin modular. Por esta razn, para escribir un programa se divide ste en varios

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    mdulos, en lugar de uno solo largo. El programa se divide en muchos mdulos (rutinas pequeas llamadas funciones). Ejemplo de ello se muestra en el esquema siguiente, como los procesos (funciones) estn aparte del programa principal y son llamados por l, en el lugar adecuado. PRINCIPAL PROCESO A PROCESO B

    Figura 1. Funciones Una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y puede retornar un valor. Las funciones pueden tomar parmetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comnmente utilizadas durante un programa y de esta manera reducir la cantidad de cdigo. Cuando una funcin es invocada se le pasa el control a la misma, una vez que esta finaliz con su tarea el control es devuelto al punto desde el cual la funcin fue llamada. As pues, un programa en C se compone de varias funciones, cada una de las cuales realiza una tarea principal.

    Una funcin es, sencillamente, un conjunto de sentencias que se pueden llamar desde cualquier parte de un programa. Las funciones permiten al programador un grado de abstraccin en la resolucin de un problema.

    Las funciones en C no se pueden anidar. Esto significa que una funcin no se puede declarar dentro de otra funcin. La razn para esto es permitir un acceso muy eficiente a los datos. En C todas las funciones son externas o globales, es decir pueden ser llamadas desde cualquier punto del programa.

    Si un programa contiene varias funciones, sus definiciones deben aparecer en cualquier orden, pero deben ser independientes unas de otras. Existen dos tipos de funciones: funciones predefinidas (de biblioteca) y las funciones creadas por el programador. Una funcin se invoca (es decir, se hace que realice la tarea para la que fue creada) mediante una llamada a la funcin. La llamada a la funcin especifica el nombre de la funcin y proporciona informacin (como argumentos) que la funcin invocada necesita para hacer su trabajo. Todas las variables definidas dentro de una funcin, son variables locales que solo se conocen dentro de la funcin en la que se definen, esta comienza a existir cuando se entra a la funcin y se destruye al salir de ella. As, las variables locales no pueden conservar sus valores entre distintas llamadas a la funcin. Los dos puntos importantes para la creacin de una funcin son los siguientes: la reutilizacin de cdigo (ya que la funcin se puede utilizar cuantas veces

    INICIO

    FIN

    INICIO INICIO

    FIN FIN

    PROCESO A

    PROCESO B

    PROCESO A PROCESO B

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    sea necesario dentro de un programa y as no escribirla mas de una vez), y la otra es que un programa se pueda dividir en bloques de sentencias mas simples y pequeas, para su mejor solucin. Cada funcin se debe limitar para que realice una tarea sencilla y bien definida, y el nombre de la funcin debe expresar de manera efectiva dicha tarea, ya que este tipo de funciones son creadas dependiendo de la necesidad del usuario sobre un determinado problema. Esto promueve la reutilizacin de cdigo que es esencial en la programacin. El tipo devuelto por una funcin, debe ser compatible con el tipo que se espera que devuelva en la funcin de llamada, o el compilador dar un warning. Forma general de una funcin: tipo_dev nombre_de_la_funcin (lista de parmetros) { Cuerpo de la funcin } El tipo_dev especifica el tipo de dato que devuelve la funcin. Una funcin puede devolver cualquier tipo de dato excepto un array. El nombre de la funcin es cualquier identificador vlido, la lista de parmetros es una lista de nombres de variables separados por comas con sus tipos asociados. Los parmetros reciben los valores de los argumentos cuando se llama a la funcin. Una funcin puede no tener parmetros, en cuyo caso la lista de parmetros est vaca y por lo tanto se puede usar la palabra clave void entre los parntesis. Por ejemplo, aqu se muestra una declaracin de funciones con parmetros correcta ya que a cada variable le corresponde un tipo e incorrecta porque a algn parmetro le hace falta su tipo y esto es un error: void F(float r, int v, flota j); /* correcto */ void F(float t,g, float h); /* incorrecto */ Los parmetros de una funcin tambin se conocen dentro de ella nicamente, estos comienzan a existir cuando se entra a la funcin y se destruyen al salir de ella. Ejemplos de funciones sin parmetros Algoritmo: declarar funcin cuadrado( ) inicio declara variable real res y N limpiar pantalla escribir ( Programa que obtiene mediante una funcin el cuadrado de un numero ) llamar a funcin cuadrado( ) escribir ( Fin de nuestro programa ) pausa fin funcin cuadrado( ) inicio escribir ( Funcin Cuadrado ) escribir ( Da el numero a evaluar ) leer N res N * N escribir ( El cuadrado de , N , es: , res) escribir ( Fin de la Funcin ) fin_cuadrado

  • UNIDAD II FUNDAMENTOS DE PROGRAMACIN ESTRUCTURADA

    Autores: Alejandra Gutierrez Reyes - Enrique Martnez Roldn - Academia de Computacin Ingenieria Elctrica ESIME Zacatenco IPN

    3

    Programa: #include #include #include void cuadrado( ); void main( ) { float res,N; clrscr( );

    printf(Programa que obtiene mediante una funcin el cuadrado de un numero \n );

    cuadrado( ); printf( Fin de nuestro programa ); getch( ); } void cuadrado( ) { printf( \n Funcin Cuadrado \n ); printf( Da el numero a evaluar \n ); scanf(%f,&N); res = N * N; printf( El cuadrado de %f es: %f , N,res); printf( \n Fin de la Funcin ); } El siguiente programa nos muestra a dos funciones sin parmetros, las cuales se mandan llamar dentro del programa principal main( ). Algoritmo: declarar funcin1( ) declarar funcion2( ) inicio limpiar pantalla escribir ( Programa que desarrolla dos funciones ) llamar a funcin1( ) llamar a funcion2( ) return 0 escribir ( Fin de nuestro programa ) pausa fin funcin funcion1( ) inicio escribir ( Funcin Uno ) escribir ( La funcin uno no toma argumentos ) escribir ( Fin de la funcin uno ) fin_funcion1 funcin funcion2( ) inicio esc