Programación C

Tema en 'Foro Libre' iniciado por KurtCobain, 9 Abr 2007.

  1. Kur

    KurtCobain
    Expand Collapse
    Cabo

    Mensajes:
    104
    Me Gusta recibidos:
    0
    Programación C

    De C a C++. C++ es un Superconjunto de C. Todas las construcciones de C est?n presentes en C++. Los programas que se compilan bajo C deber?an poder hacerlo bajo C++. Los programas que siguen el est?ndar de Kernighan y Ritchie pueden dar origen a errores cuando se someten a un compilador de C++, y siempre dan origen a avisos. Los programas que no generan avisos bajo Turbo C 2.0 tampoco deber?an generar errores al ser compilados bajo turbo C++.
    Para confirmar esto, Turbo C++ distingue entre un programa C y un programa C++ examinando su extensi?n. si el nombre del archivo fuente termina en .c se considera un programa de C; si termina en .cpp, se entiende que es un programa C++, a no ser que la opci?n C++ haya sido activada en el men? Options/Compiler.

    C++ y ANSI C. Comparten algo mas que una herencia en com?n. Muchas de las extensiones de C ANSI, tales como el formato de la declaraci?n de sus funciones y el uso de los tipos de fuentes de datos, se trasladan a C++. Adem?s de esto, C++ ha ampliado con objeto de incluir las ultimas novedades ANSI y guardar la m?xima compatibilidad. C++ comparte las siguientes caracter?sticas con ANSI, aunque exista alguna diferencia menor:
    ? Prototipo de Funciones.
    ? Variables register
    ? #pragmas
    De Turbo C a Turbo C++. Aunque Turbo C++ se desv?a de Turbo C, la interrelaci?n entre ambos es inconfundible. Turbo C++ conserva tanto la versi?n del compilador Orientado a la l?nea de ordenes, como el entorno interactivo de desarrollo (IDE), pero en un entorno de ventanas. Adem?s, Turbo C++ admite ahora la entrada de informaci?n desde un rat?n o desde el teclado.

    Las 3 mejoras significativas de Turbo C++ son:
    ? El entorno Interactivo de Desarrollo. Que permite al programador editar, compilar, enlazar y depurar en el mismo entorno sin necesidad de conmutar del editor al compilador y al depurador. El programador puede ajustar la compilaci?n y el enlazado a trav?s de opciones del men?, en vez de memorizar las opciones de compilaci?n de las l?neas de ordenes.
    ? VROOMM. Gestor de Memoria VROOMM (Virtual Runtime Object Oriented Memory Manager), que es un sofisticado gestor de superposici?n de memoria que permite a los programadores crear programas de tama?o superior a los 640 Kb.
    ? Soporte del lenguaje Ensamblador. Al admitir pseudoregistros y tipo interrupciones.

    Diagrama mas Expl?cito de los antecesores de C y C++

    ?Por usar C o C++?
    ? Es un lenguaje de Alto nivel.
    ? Tienen una escritura Elegante, es decir, programas legibles y entendibles.
    ? Tiene programas portables a otros sistemas.
    ? Excelentes compiladores disponibles.
    ? La compilaci?n es r?pida y peque?a.
    ? Sus caracter?sticas de C permiten acceder al control del Hardware.
    ? Durante la programaci?n se pueden considerar detalles de bajo nivel.
    Espec?ficamente el compilador de Borland C++:
    ? Una magnifica interface con el usuario..
    ? Se pueden configurar la mayor?a de sus caracter?sticas para fomentar h?bitos.
    ? Los errores de sintaxis son inmediatamente detectados con el Editor.
    ? El editor emula a los populares editores de texto.
    ? Desde el editor tu tienes el control del depurador.
    ? Borland C++ incluye caracter?sticas est?ndar para facilitar el desarrollo de grandes aplicaciones de Software.
    ? Borland C++ corre bajo el ambiente Windows de cualquier versi?n (inferiores a la 3.0), y contiene un Kit de herramientas para el desarrollo de aplicaciones de Windows (cabecera Windows.h)

    Para Efectos practicos de este tutorial, se podran correr las aplicaciones en la vers?n Borland C++ 3.0 de DOS, pero tambien puede Ud utilizar la versi?n Borland 3.1 C++ para Windows.
    ?CUALES SON LAS CARACTERISTICAS DE TURBO C++ 3.0 PARA DOS?. De manera interna Turbo C++ contiene una peque?a guia de aprendizaje para guiar al programador en su avance cotidiado de trabajo, con una ayuda sensible al contexto, y mantiene un gran poder en su editor, compilador, depurador y ensamblador, todo para un desarrollo de aplicaciones de C y C++ fac?lmente. Ademas cuenta con las siguientes ventajas:Contiene capacidades para ensamblador, programaci?n Orientada a Objetos, Soporte para Templates, Librerias de Clases Standares incluyendo iostreams, y n?meros complejos, cabeceras precompildas para una compilaci?n rap?da, Un Administrador inteligente de Proyectos con una utileria MAKE, mas de 450 librerias de funciones incluyendo las gr?ficas, incluye editor multi-archivos con soporte para macros, archivos muy grandes, ilimitado un-do y re-do,y una sintaxis sobresaltada por colores.
    ?QUE REQUERIMIENTOS DE SISTEMA NECESITO?, Una PC 286 o superior, MS-DOS 3.31 o posterior, 1 MB en RAM, un DD con un minimo de espacio libre de 5 Mb.
    C Pertenece a una familia bien establecida de lenguajes cuya tradici?n enfatiza virtudes como fiabilidad, regularidad, simplicidad de uso. Los miembros de esta familia se llaman a menudo "Lenguajes Estructurados", cuya disciplina es hacer programas f?ciles de leer y escribir, esto fue todo un Paradigma o Ideolog?a en los a?os 70?s.
    C++ ya no entra dentro de esta familia de lenguajes Estructurados, si no en el ultimo de los Paradigmas establecidos en los 80?s y 90?s: El Orientado a Objetos


    Secci?n de Acceso R?pido de Subtemas de Este Cap?tulo:
    Apuntadores en C. | ?Por que son Importantes los Apuntadores? | Operadores de Direcci?n e Indirecci?n | Aritmetica de Apuntadores | Apuntadores a Funciones| Arreglos | ?Por que Usar Arreglos? | Declaraci?n de Arreglos | Arreglos y Apuntadores |
    ________________________________________
    Apuntadores en C
    1.-Un Apuntador es una variable que contiene una direcci?n de memoria, la cual corresponder? a un dato o a una variable que contiene el dato. Los apuntadores tambi?n deben de seguir las mismas reglas que se aplican a las dem?s variables, deben tener nombre ?nicos y deben de declararse antes de usarse.
    Cada variable que se utiliza en una aplicaci?n ocupa una o varias posiciones de memoria. Estas posiciones de memoria se accesan por medio de una direcci?n.

    En la figura el texto Hello ?sta guardado en memoria, comenzando en la direcci?n 1000. Cada car?cter ocupa un espacio de direcci?n ?nico en memoria. Los apuntadores proporcionan un m?todo para conservar y llegar a estas direcciones en memoria. Los apuntadores facilitan el manejo de datos, debido a que conservan la direcci?n de otra variable o ubicaci?n de datos.



    1.1-?Por qu? son Importantes los Apuntadores?Los apuntadores dan flexibilidad a los programas en C++ y permiten que estos crezcan din?micamente. Utilizando un apuntador hacia un bloque de memoria que se asigna al momento de ejecuci?n, un programa puede ser m?s flexible que uno que asigna toda su memoria de una sola vez. Tambi?n, un apuntador es m?s f?cil de guardar que una estructura grande o un objeto de una clase. Debido a que un apuntador s?lo guarda una direcci?n, puede f?cilmente pasarse a una funci?n. Uno de las desventajas que pueden presentar los apuntadores es que un apuntador sin control o no inicializado puede provocar fallas en el sistema, adem?s de que su uso incorrecto puede generar fallas muy complejas de hallar.



    1.2 Operadores de Indirecci?n y Direcci?n. Hay 2 operadores que se usan cuando trabajan con direcciones en un programa C; el Operador de Indirecci?n ( * ) y el de Direcci?n (&). Estos operadores son diferentes de los tratados anteriormente.
    El Operador de Direcci?n ( &) regresa la direcci?n de una variable. Este operador est? asociado con la variable a su derecha: &h; Esta l?nea regresa la direcci?n de la variable h.
    El Operador de Indirecci?n ( * ) trabaja a la inversa del operador de Direcci?n. Tambi?n esta asociado con la variable a su derecha, toma la direcci?n y regresa el dato que contiene esa direcci?n. Por ejemplo, la siguiente l?nea determina la direcci?n de la variable h y luego usa el operador de Indirecci?n para accesar la variable y darle un valor de 42:
    *(&h)=42;

    La declaraci?n de un puntero de manera general es:
    tipo *nombre de apuntador;
    Tipo : Especifica el tipo de objeto apuntado y puede ser cualquier tipo.
    Nombre de apuntador: Es el identificador del apuntador.
    El espacio de memoria requerido para un apuntador, es el n?mero de bytes necesarios para especificar una direcci?n de memoria, debiendo apuntar siempre al tipo de dato correcto.
    Considere el siguiente programa y observe a las variables de direcci?n e Indirecci?n trabajar:







    1.3-La Aritm?tica de Apuntadores. Solamente se pueden realizar operaciones de incremento y decremento, y estos es deacuerdo a la longitud de su tipo de base. Por ejemplo sup?ngase que una m?quina particular utiliza direccionamiento de byte, un entero requiere 4 bytes y el valor de la variable pi (declarada asi: int *pi) es 100, es decir, se apunta al entero *pi en la localidad 100. Entonces el valor de pi-1 es 96, el de pi+1 es 104 y el de pi+2 es 108. El valor de *(pi-1) es el de los contenidos de los 4 bytes 96,97,98, y 99 , el de *(pi+1) es el del contenido de los byte 104, 105,106 y 107, y el de *(pi+2) es el entero que esta en los bytes 108,109,110 y 111.
    De manera parecida, si el valor de la variable pc (declarada asi: char *pc; ) es igual a 100, y un car?cter tiene un byte de longitud, pc-1 refiere a la localidad 99, pc+1 a la 101 y pc+2 a la 102.



    1.4 Apuntadores a Funciones.Un ?rea en la cual desempe?an un papel prominente los apuntadores es el lenguaje C es la transmisi?n de par?metros a funciones. Por lo com?n, los par?metros se transmiten por valor a una funci?n en C, es decir, se copian los valores transmitidos en los par?metros de la funci?n llamada en el momento en que se invoca. Si cambia el valor de un par?metro dentro de la funci?n, no cambia su valor en el programa que la llama. Por ejemplo consid?rese el siguiente fragmento y funci?n de programa (el numero de l?nea es solo una gu?a en el ejemplo):


    La l?nea 2 imprime el n?mero 5 y despu?s llama a funct. El valor de "x", que es 5, se copia en "y" y comienza la ejecuci?n de funct. Despu?s, la l?nea 9 imprime el n?mero 6 y regresa funct. Sin embargo, cuando la l?nea 8 incrementa el valor de "y", el valor de "x" permanece invariable. As?, la l?nea 4 imprime el n?mero 5, "x" y "y" refieren a 2 variables diferentes.
    Si deseamos usar funct para modificar el valor de "x", debemos de transmitir la direcci?n de "x" de la siguiente manera:


    La l?nea 2 imprime nuevamente el n?mero 5, y la l?nea 3 llama a funct. Ahora, sin embargo, el valor transferido no es el valor entero de "x" sino el valor apuntador "&x". Este es la direcci?n de "x". El par?metro de funct no es m?s y de tipo int, sino py de tipo int * . (Es conveniente nombrar a las variables apuntadores comenzando con la letra p para recordar tanto que se trata de un apuntador) la l?nea 8 ahora aumenta al entero en la localidad py; py, sin embargo, no cambia y conserva su valor inicial "&x". As?, py apunta al entero "x" de tal manera que cuando *py, aumenta x. La l?nea 9 imprime 6 y cuando regresa funct, la l?nea 4 imprime tambi?n 6. Los apuntadores son el mecanismo usado en el lenguaje C para permitir a una funci?n llamada modificar las variables de la funci?n que llama.




    Areglos en C.
    2.-Arreglos. Es una serie de datos del mismo tipo, tambi?n conocidos como vectores o rangos. Una arreglo esta constituido por varias posiciones de memoria de igual tama?o consecutivas que tienen el mismo tipo de variable y se accesan usando el mismo nombre seguido de un sub?ndice entre corchetes. La cantidad total de espacio que se usa por un arreglo depende de 2 cosas: El n?mero de elementos en el arreglo y El tama?o del arreglo.




    2.1- ?Por qu? Usar los Arreglos? Por que son uno de los factores esenciales de los programas de computadora. Permiten que se haga referencia a entradas individuales en una tabla de elementos de datos usando el mismo c?digo y variando el ?ndice del elemento.



    2.3- La Declaraci?n de un Arreglo es igual a como se har?a con una variable, a excepci?n de que tambi?n se especifica la cantidad de elementos en el arreglo encerrado entre corchetes de la siguiente manera: tipo nombre_del_arreglo[tama?o];
    Cuando se declara un arreglo, sus valores se pueden inicializar de la siguiente manera:
    Int lista[9]= {0, 4, 78, 5, 32, 9, 77, 1, 23}
    No trate de enga?ar al Compilador inicializando mas valores en el arreglo de los que puede, ya que este no lo obedecer?, sin embargo, si inicializa solo una parte del arreglo, las restantes posiciones se inicializan con 0?s.
    Si desea imprimir un valor de un arreglo, la l?nea luce as?: printf ("%d", lista[1]);
    Una Caracter?stica importante de los arreglos en C es que no se pueden modificar los limites superior e inferior (y por tanto el rango) durante el programa. El limite inferior se fija siempre en 0 y el superior lo fija el programador, es decir:

    Se han visto hasta ahora, arreglos llamados Unidimensionales, pero existen tambi?n los llamados Bidimensionales, y se declaran as?: tipo nombre_arreglo_bi[tama?o][tama?o]; Estos tambi?n son com?nmente conocidas como Matrices, El tama?o en la declaraci?n de la matriz estipula Renglon-Columna y se representar?an as?:

    Estos tambi?n se pueden inicializar:
    Int lista_nueva[2][2]={{14, 34},{23, 67}}; y se acceden de la misma manera que un unidimensional. Ejemplo printf ("%d", lista_nueva[1][0]); Y de esta forma se pueden construir arreglos Multidimensionales p/e:
    int grande[3][4][7]; ? incluso int mas_grande [5][7][8][2][3][2]; pero se debe de tener cuidado al manejar estos arreglos por que son complejos de manipular a la larga. A pesar de ser Bidimensionales, en la memoria siguen siendo representados como espacios secuenciales lineales.



    2.4 Arreglos y Apuntadores. Las versiones con apuntadores en los arreglos son mas r?pidas que la indexaci?n com?n. La declaraci?n
    int a[10]; int *pa;
    por lo que pa=&a[0] y as? establecemos que *pa=a[0] y *(pa+1)=a[1] y as? sucesivamente. De esta manera se pude manejar mas eficientemente los valores y direcciones de un arreglo Bi o Unidimensional.


    Tipos de Datos en C.

    Hay Varios tipos de Datos b?sicos en C:
    TIPO DESCRIPCION
    Char Un solo byte (8 bits) capaz de entender un car?cter del conjunto de caracteres local.
    Int Un entero , normalmente del tama?o natural de los enteros en la maquina que los ejecuta.
    Float Utilizado para n?meros con punto flotante de precisi?n. P/e: 12.345 .12345e2 o 123495.0e-3
    Double Utilizado para n?meros con punto flotante de doble precisi?n p/e:
    Log E= 2.718281828459 ? Sin_per_sec=4.848136811076e-7


    Adem?s existen algunos calificadores que se aplican a estos tipos de b?sicos: Short y Long se aplican a enteros.
    La intenci?n es que short y long proporcionen diferentes longitudes de entero donde sea Practico, int ser? normalmente el tama?o natural para una maquina en particular. A menudo short es de 16 bits y long de 32, por lo tanto, int es de 16 o 32. Cada compilador puede seleccionar libremente los tama?os apropiados para su propio hardware, sujeto solo a las restricciones de que los short's e int's son por lo menos de 16 bits, los long's son por lo menos de 32 bits y el short no es mayor que el int, el cual a su vez no es mayor que long.
    Ejemplos short int n; Long int contar ; El calificador signed o unsigned puede aplicarse a char o a enteros. Los n?meros unsigned son >=0. Por ejemplo la declaraci?n : unsigned int numero; es igual a unsigned n;
    El tipo long double especifica punto flotante de precisi?n extendida, igual que los enteros, los tama?os de objetos de punto flotante se definen en la implementaci?n, float, double y long double representan 3 tama?os distintos.
    Los archivos de cabecera est?ndar <limits.h>y <float.h> contienen constantes similares para todos esos tama?os.

    Tipos de Enteros y sus Rangos.
    Tipo de Entero Rango Bytes
    Int -32.768.. 32.767 2
    Unsigned int 0 .. 65.535 2
    Long -2.147.483.648 .. 2.147.483.647 4
    Unsigned long 0 .. 4.294.967.295 4

    Tipos de Coma Flotante y Rangos.
    Tipo coma flotante Rango Bytes
    Float 3.4 x 10-38 .. 3.4 x 1038 4
    Double 1.7 x 10-308 .. 1.7 x 10308 8
    Long Double 3.4 x 10-4932 .. 1.1 x 104932 10

    Tipo de Car?cter y rangos de Valores.
    Tipo Car?cter Rango Bytes
    Char -128 .. 127 1
    Unsigned char 0 .. 255 1
    Variables en C.
    Las variables son datos de un programa cuyo valor almacenado en memoria puede cambiar durante la ejecuci?n del programa, deben ser declaradas con un nombre y un tipo de dato dado al principio del nombre o de la funci?n
    ejemplo tipo_de_dato nombre_de_dato ; int contador ;
    Existen algunas restricciones en el nombre de las variables y constantes. Los nombres se componen de letras y d?gitos; el primer car?cter debe ser una letra, el car?cter de subrayado ( _ ) cuenta como una letra que algunas veces es ?til para hacer mas legible un nombre largo, sin embargo no se debe de comenzar los nombre de variables con este car?cter puesto que las rutinas de biblioteca con frecuencia usan tal formato en sus variables.
    La practica tradicional de C es usar letras min?sculas para nombre de variables y may?sculas para las constantes simb?licas.
    Al menos los primeros 31 caracteres de un nombre son significativos, para nombre de funciones el numero puede ser menor de 31.
    Las palabras reservadas del lenguaje no se pueden utilizar como variables. C hace diferencia entre may?sculas y min?sculas por lo que "A" es diferente de "a". Una declaraci?n de variable especifica que debe de reservarse memoria para el objeto del tipo especificado y que podemos referirnos a ese objeto por medio de la variable, ademas de que especifica cuanta memoria debe apartarse para esos objetos, tambien implica el como han de interpretarse los datos representandos por cadenas de bits en una localidad de memoria.

    Constantes en C.
    Las Variables son datos que tienen un valor dado por el programador por default y nunca cambiara en la ejecuci?n del programa.
    Hay diferentes tipos de constantes, las cuales pueden ser declaradas en C de la siguiente forma:
    ? Constantes Enteras. #define IVA 15 ? const int IVA=15. El valor de un entero tambi?n se puede hacer constante con un valor Octal o Hexadecimal, un 0 al principio de una constante entera refiere a un octal y un 0x refiere a un hexadecimal. #define IVA 017 ? #define IVA 0xF
    ? Constante Reales. #define PI 3.14159265 ? const float PI=3.14159265
    ? Constante Car?cter. Es un entero escrito como un car?cter dentro de apostrofos. El valor de una constante de car?cter es el valor num?rico del car?cter en el c?digo ASCII.
    ? #define SALIR 's' ? const char SALIR='s'. Existen caracteres especiales que suelen representar caracteres tales como la comilla, doble comilla, signo ? y son llamados Secuencias de Escape:
    TIPO DESCRIPCION
    ?\n? Nueva l?nea
    ?\r? Retorno de carro
    ?\t? Tabulaci?n horizontal
    ?\v? Tabulaci?n Vertical
    ?\f? Avance de pagina
    ?\b? Retroceso de espacio
    ?\a? Alerta(pitido sonoro)
    ?\\? Barra inclinada inversa
    ?\? Comilla simple
    ?\??? Doble comilla
    ?\?? Signo interrogaci?n
    ?\000? Numero Octal
    ?\xhhh? Numero hexadecimal
    ? Constante Cadena ? Cadena Literal. Secuencia de 0 o mas caracteres encerrados entre comillas como en:
    ? "Hola mundo" ? /* Hola mundo */
    ? Las comillas no son parte de la cadena, solo sirve para delimitarla.
    ? Constante Enumeraci?n. Una enumeraci?n es una lista de valores enteros constantes.
    ? Enum boolean {NO,YES};
    El primer nombre en un Enum tienen valor 0 y el siguiente 1 y as sucesivamente, a menos que sean especificados valores expl?citos. Si no todos los valores son especificados, los valores no espec?ficos contin?an con la progresi?n a partir del ultimo valor que si lo fue.
    Enum{Luis=1, fernando, josu?=10, juana=11, paty}
    Luis vale 1, fernando vale 2, josu? vale 10 juana 11 y paty 12.

    Operadores en C
    Los Operadores son s?mbolos que permiten al programa llevar acabo funciones de asignaci?n, matem?ticas , l?gicas y relacionales.

    Operadores de Asignaci?n.
    Tipo Operador Acci?n
    Simple = Asignaci?n Simple
    Compuesta +=
    -=
    *=
    /= (Cociente de la divisi?n)
    %= (residuo de divisi?n)
    <<=
    >>=
    &=
    ?=
    ^= Asignaci?n suma
    Asignaci?n Resta
    Asignaci?n Producto
    Asignaci?n cociente
    Asignaci?n m?dulo
    Asignaci?n desplazar izq
    Asignaci?n desplazar der
    Asignaci?n AND bitwise
    Asignaci?n OR bitwise
    Asignaci?n XOR bitwise
    Ejemplo : n+=5; equivale a n=n+5;


    Operadores Aritm?ticos.
    Tipo Operador Acci?n
    Unitarios +
    -
    --
    ++ Signo positivo
    Signo Negativo
    Decremento
    Incremento
    Binarios +
    -
    *
    /
    % Suma
    Resta
    Producto
    Divisi?n
    M?dulo
    Ejemplos: n++ es igual ++n y equivale a n=n+1; a*b; a-b; son resta y producto de 2 variables.
    En C tambi?n existe una prioridad dentro de estos operadores, t?ngalos en cuenta para el momento de efectuar operaciones en los programas:
    Operador Prioridad
    ++
    --
    *
    /
    %
    +
    -
    = 1
    1
    2
    2
    2
    3
    3
    4


    Operadores Relacionales.
    Permiten comparar 2 operandos dando como resultado solo verdadero ? falso (0 ? 1).
    Operador Acci?n
    <
    >
    <=
    >=
    ==
    ?= Menor que..
    Mayor que..
    Menor o igual que..
    Mayor o igual que..
    Id?ntico ? igual a..
    Diferente de..
    Ejemplos: a<b; a>=(d*r); z==y

    Operadores L?gicos.
    Permiten manejar y evaluar expresiones l?gicas.
    Operador Operaci?n L?gica
    ?
    &&
    || No (complemento)
    Y (AND)
    O (OR)


    Ejemplos: ?a-(a*d)&&(x+u)

    Operadores de Manipulaci?n de Bits.
    Estos operadores de tratamiento de bits (bitwise) ejecutan operaciones l?gicas sobre cada uno de los bits de los operandos. Esta operaciones son comparables en eficiencia y en velocidad a sus equivalentes en lenguaje ensamblador.
    Operador Operaci?n
    & Y (AND)
    | O (OR)
    ^ O (OR)
    ~
    <<
    >> L?gica bit a bit
    L?gica bit a bit
    L?gica bit a bit (OR exclusivo, XOR)
    Complemento a uno (inversi?n de todos los bits)
    Desplazamiento de bits a izquierda
    Desplazamiento de bits a derecha
    Ejemplo:
    83 = 0101 0011
    206= 1100 1100
    ________________________________________
    83^206= 1001 1101 =157


    Estructuras de Control en C
    Estas preposiciones de control de flujo especifican el orden en que se realizan el procesamiento de datos dentro de los programas.
    Hay Diferentes Tipos de Flujos de Control:
    ? Estructuras Secuenciales (goto).
    ? Estructuras Condicionales (if, switch)
    ? Estructuras Repetitivas (for, while, do-while).
    ? Estructuras de Salida (continue, break).


    Estructuras Secuenciales.
    El orden de Ejecuci?n es una despu?s de otra en el orden especificado.
    La sentencia GOTO tiene esta categor?a. Es una instrucci?n conocida en varios lenguajes cl?sicos de programaci?n, rompe la secuencia de ejecuci?n del programa bifurc?ndolo hasta el lugar indicado por la etiqueta, esta instrucci?n ha sido duramente criticada desde la aparici?n de la Programaci?n Estructurada ya que tiende a fomentar desorden en el programa, cosa que el Paradigma Estructurado tiende a eliminar. No obstante es indudable que su uso en algunas ocasiones no produce muchos problemas en la comprensi?n de los programas.
    goto salto;
    Salto: n++ ;


    Estructuras Condicionales.
    Estructuras formadas por 1 o mas bloques secuenciales que se inician y separan por una serie de palabras clave.


    1.- La instrucci?n IF es utilizada para tomar decisiones entre 2 o mas opciones, ejecutadas por el hecho de ser cierta o no las expresiones a la que refiere el IF.
    If (expresi?n)Preposici?n 1
    Else Preposici?n 2
    La construcci?n
    If (expresi?n_1) Preposici?n_1
    Else if (expresi?n_2)
    Preposici?n_2
    Else if (expresi?n_3)
    Preposici?n_3
    :
    Establece un bloque de sentencias con opciones m?ltiples.
    La sentencia if-else abreviada:
    Expresi?n_condicional ? Preposici?n_1: Preposici?n_2
    Que equivale a que si se cumple la expresi?n condicional se ejecuta la preposici?n 1 y en caso contrario la preposici?n 2.
    Ejemplo a>b ? printf("a es mayor a b") : printf ("a es menor a b")


    2.-La Instrucci?n SWITCH es de decisi?n m?ltiple que prueba si una expresi?n coincide con uno de un n?mero de valores constantes enteros y traslada el control adecuadamente.
    switch (expresi?n) {
    case expre_cte_1: preposici?n_1; break;
    case expre_cte_2: preposici?n_2; break;
    :
    default: preposici?n_n;
    }
    "expresi?n" devuelve un valor tipo entero o constante de car?cter. "expre_cte" es un numero o una constante car?cter. "break"es una orden imperativa de salida de bloque puesto que ya en ese momento se encontr? un valor que coincidi?. "default" indica que si no se cumple ninguna de las opciones se ejecuta la preposici?n por defecto. Esta instrucci?n de bloque switch es opcional, puede escribirse o no. "case" es la Etiqueta de 1 o mas valores de expresiones constantes.
    La diferencia entre la estructura de control SWITCH y el IF:
    ? El switch solo puede comprobar la igualdad.
    ? Las constantes de tipo car?cter se convierten autom?ticamente a enteros.
    ? No pueden existir 2 sentencias Case iguales en el mismo switch.
    El bloque switch es usado generalmente para la construcci?n de men?s en los programas.

    Estructuras Repetitivas.
    Estructuras formadas por 1 o mas bloques secuenciales cuya ejecuci?n se repite un n?mero definido de veces especificado por un numero ? variable.


    1.-La instrucci?n FOR cae en esta categor?a y tiene 3 formatos:
    for (inicializaci?n ; Condici?n ; Incremento)
    {
    preposiciones;
    }
    "Inicializaci?n" Normalmente es una sentencia de asignaci?n cuya variable se utiliza para el control del bucle.
    "Condici?n" es una condici?n relacional que determina cuando debe de finalizarse la ejecuci?n del bucle. "Incremento" define como varia la variable de control cada vez que se ejecuta el bucle. Deacuerdo a los valores de inicializaci?n, este incremento tambi?n puede ser decrementado.
    Eje 1:
    For (i=1 ; i<10 ; i++)
    {
    printf ("\n El numero es : %d \n", i );
    }
    Eje 2:
    For (i=100 ; i=1 ; i--)
    {
    printf ("\n El numero es : %d \n", i );
    }
    Cuando la estructura FOR inicia su ejecuci?n, la variable de inicializaci?n empieza en 1 (Eje 1) la cual solo se eval?a una sola vez, a continuaci?n se verifica la condici?n y mientras esta no se cumpla se ejecutaran las preposiciones, como paso siguiente la variable de inicializaci?n se modifica (increment?ndose o decrementandose) y el ciclo vuelve a empezar.


    2.-La instrucci?n WHILE en C tiene el siguiente formato.
    while( expresi?n_condicional)
    {
    preposiciones;
    }
    Indican que mientras la expresi?n condicional sea verdadera se llevan acabo las preposiciones. Dentro de las preposiciones de esta estructura se necesita que una de ellas sea la de modificar la variable (s) de la expresi?n condicional ya que si no se haria un bucle infinito. Si desde un principio la expresi?n condicional es falsa, las preposiciones no se ejecutaran ni una sola vez.


    3.-La instrucci?n DO-WHILE tiene la siguiente sintaxis:
    do
    {
    preposiciones;
    }
    while(expresi?n_condicional);
    En este caso las preposiciones se ejecutaran al menos una vez hasta que llegan a la comprobaci?n del bucle. El ciclo trabaja hasta que la expresi?n condicional se vuelve falsa, es decir, trabaja mientras la condici?n es cierta.


    Estructuras de Salida.
    Tienen como prop?sito salirse de ciclos y saltar sobre partes del c?digo del programa.


    1.-La instrucci?n BREAK interrumpe la ejecuci?n de un bucle while, do-while, y for
    while (cuenta<=100) {
    preposici?n_1;
    if (cuenta>5) break;
    preposici?n_2
    }
    preposici?n_3;


    2.-La instrucci?n CONTINUE se utiliza en bucles para saltar el resto del cuerpo del bucle, es decir, terminar la iteraci?n.
    For(x=1; x<=10; x++)
    {if(x==4)
    continue;
    printf ("\n %d ", x);
    }


    Estructura de los Programas en C
    Un Programa en C esta formado por 1 ? mas funciones que a su vez, contienen una serie de elementos propios. Una de las funciones que deben estar obligatoriamente presente en un programa C es el main. Una funci?n es un grupo de instrucciones que realizan una tarea especifica en el programa, as? mismo el programa tendr? que contener una serie de directivas de preprocesador ? archivos de cabecera escritos como # include<*.h> que son archivos de librer?as con extensi?n *.h que contienen la declaraci?n de variables y funciones que permiten el funcionamiento y compilaci?n de los programas.
    Un ejemplo sencillo podr?a ser:



    Una vez creado un programa en C como el anterior, se debe de ejecutar compil?ndolo, y esto depende claro esta, del compilador con el que trabaje, pero la siguiente gr?fica da los pasos generales para esto:

    Un Programa en C contiene varios Elementos que a continuaci?n de Explican:


    1.-Tokens.
    Existiendo 5 tipos de ellos:

    ? 1.1.-Identificadores. Secuencia de caracteres, letras, d?gitos y subrayados.
    ? 1.2.-Palabras Reservadas. Elementos que son utilizados por el lenguaje exclusivamente para sus procesos.


    Palabra Palabra Palabra Palabra
    Asm Double New Switch
    Auto Else Operator Template
    Break Enum Private This
    Case Extern Protcted Throw
    Catch Float Public Try
    Char For Register Typedef
    Class Friend Return Union
    Const Goto Short Unsigned
    Continue If Signed Virtual
    Default Inline Sizeof Void
    Delete Int Statc Volatile
    Do Long Struct while


    ? 1.3.-Comentarios.
    Tiene 2 formatos:
    // Este es un comentario
    /* Este es otro comentario */
    La diferencia entre ellos es que el comentario que empieza con // solo abarca a una l?nea y los /*.... */ se extienden a varias l?neas.


    ? 1.4.-Signos de Puntuaci?n.
    Todas las sentencias deben de terminar con un punto y coma ; . Otros signos de puntuaci?n son: ? % ^ & * ( ) - + = { } ~ [ ] \ ; ' : < > ?, . / "

    ? 1.5- Separadores.
    Son espacios en blanco, tabulaciones, retornos de carro y avances de l?nea.

    2.-Funciones.
    C utiliza en sus programas las funciones de Biblioteca que est?n declaradas en los archivos de cabecera (*.h), pero tambi?n utiliza las funciones definidas por el usuario. Las funciones tienen el prop?sito de realizar tareas especificas en el programa, las cuales no deben de llevar acabo mas de 1 trabajo, si no, es recomendable dividirla en otra funci?n, y adem?s no deben ser muy grandes por que entonces pierden legibilidad y eficiencia. Cuando una funci?n es llamada, el control se pasa a la misma para llevar acabo su tarea hasta que la termine, para despu?s regresar de nuevo el control al modulo que lo llamo. En C todas las funciones o son externas o globales. En todo programa una funci?n debe ser : Declarada, Definida y Llamado ? invocada.


    ? 2.1-La Declaraci?n de una funci?n representa su prototipo, y en C debe de estar declarada antes de utilizarla. El prototipo de una funci?n es su cabecera terminada en un punto y coma.
    Tipo nombre_funci?n(tipo_1 par_1, tipo_2 par_2 , ... );
    Int suma( int x , int y );
    Tipo: Especifica que tipo de variable devuelve la funci?n. Se puede establecer cualquier tipo de dato, pero generalmente es el int. nombre_funci?n : Identificador que representa a la funci?n, si el nombre va precedido de un * entonces la funci?n devuelve un apuntador. Una funci?n no devuelve arreglos o funciones. tipo_1 par_1, tipo_2 par_2 , ... : Son llamados Par?metros o argumentos y son las variables que recibe la funci?n cada vez que es invocada. Si no se pasan argumentos a la funci?n, entonces esta l?nea se sustituye por la palabra clave void. La definici?n de las variables en C pueden estar situadas en cualquier parte del programa con la condici?n de preceder a las instrucciones que las utilizan. Los prototipos suelen situarse encima de la funci?n main().


    ? 2.2-La Definici?n de la funci?n consiste en escribir las instrucciones o tarea a realizar dentro del programa, la cual debe de estar en alguna parte del mismo.



    Dentro de la definici?n de las funciones, existe mucho la instrucci?n "return" la cual tiene 2 funciones:
    ? 1.-Salir de la funci?n y regresar el control a la parte de c?digo que la llamo.
    ? 2.-Devolver un valor acorde con el tipo que se ha indicado al declarar la funci?n.
    La instrucci?n void es tambi?n empleada para definir que una funci?n no devolver? ning?n valor

    ? 2.3- El llamado de una funci?n, en el lenguaje C es transferir el control a esa funci?n. Cuando se llama a esa funci?n, se proporciona un nombre de funci?n y una lista de par?metros, si es que los hay. Cuando se llama a una funci?n se realizan los siguientes pasos:
    ? 2.3.1-El compilador toma nota de la localizaci?n desde donde se llam? la funci?n y hace una copia de la lista de par?metros en caso de haberlos.
    ? 2.3.2-Se crea temporalmente cualquier espacio de almacenamiento que se requiere para ejecutar la funci?n.
    ? 2.3.3-Comienza la ejecuci?n de la funci?n que se llama, usando copias de los datos que se proporcionaron en la lista de par?metros.
    ? 2.3.4-Despues de que la funci?n termina la ejecuci?n, se regresa el control a la funci?n que la llamo y se libera memoria que se us? para la funci?n.
    ?
    La llamada a una funci?n tiene el siguiente formato:
    Variable = expresi?n(par?metros actuales);
    Variable: Especifica la variable en donde se guardara el valor devuelto por la funci?n.
    Expresi?n : Especifica una direcci?n a una funci?n. Puede ser una expresi?n que es evaluada a una direcci?n de una funci?n ? simplemente un identificador que corresponde con el nombre de la funci?n llamada.
    Par?metros actuales : Son una lista de expresiones separadas por comas. Los valores resultantes son pasados a la funci?n y asignados a sus correspondientes par?metros formales. El numero de expresiones en la lista debe ser igual al n?mero de par?metros formales y del mismo tipo.
    Ejemplos:
    ? if(suma(13,45)<=0)
    ? y=calcular(21,78,90);
    Otra manera de llamar a las funciones es por el Paso de Par?metros, si tenemos la siguiente funci?n:

    La llamada a la funci?n seria: factorial (15); y se calcular?a el correspondiente numero factorial del n?mero 15 por que ese es el valor par?metro que le damos.
    Un ejemplo completo de esto quedar?a de la siguiente manera, observe la manera en que se mandan llamar la funci?n:




    Una Consideraci?n especial que se tiene que estudiar es a la funci?n main(), tan importante en la programaci?n en C, ya que es una funci?n que engloba todo el coraz?n del programa en si, adem?s de que es muy ?til para hacer mas funcional a los programas y en el siguiente punto se estudiara.
    ? 2.4 "argc y argv" Argumentos o Par?metros de la funci?n main(). Algunas veces es de gran utilidad pasarle informaci?n al programa escrito en C cuando tu lo corres, y generalmente le pasas informaci?n al programa a la funci?n main() v?a Argumentos en l?nea de Comandos. Un argumento en l?nea de comandos es la informaci?n que sigue del nombre del programa en la l?nea de comandos en el sistema operativo. Hay 2 argumentos especiales que lo implementan argc y argv, estos son usados para recibir la informaci?n. El par?metro argc contiene el numero de argumentos en la l?nea de comandos y es un entero, es siempre por lo menos 1 por que el nombre del programa se considera como el primer argumento. El par?metro argv es un puntero a un arreglo de punteros de tipo car?cter. Cada elemento en este arreglo de punteros corresponde a un argumento en l?nea de comandos. Todos los argumentos en l?neas de comandos son strings.
    Por ejemplo, este simple programa imprime "Hola" y tu nombre en la pantalla si tu tecleas tu nombre despu?s del nombre del programa.

    Se debe de declarar apropiadamente a argv y la forma mas com?n de hacerlo es: char *argv[ ] ;
    Los corchetes vac?os significa que el arreglo es de una longitud indeterminada, y se puede accesar a los argumentos de manera indexada, es decir, argv[0] tiene el primer argumento, argv[1] tiene al segundo argumento y as? continua.
    Otro ejemplo simple de esta manera de manejo de informaci?n con la funci?n main() es el siguiente, llamado countdown.c :
    El programa cuenta de forma descendente desde un valor dado (el cual es especificado en la l?nea de comandos DOS), y suena en la computadora un beep (es decir un peque?o sonido) cuando llega al cero. Como todo argumento en las l?neas de comandos son strings, se debe de convertir el argumento a entero con la funci?n atoi(), y observen que si se da un segundo argumento o par?metro al programa llamado display entonces se imprimir? el conteo regresivo en la pantalla si no, no lo har?.

    Usualmente se utilizan a argc y argv para obtener comandos iniciales a tu programa, en teor?a se pueden tener 32,767 par?metros, pero la mayor?a de los sistemas operativos no te permiten mas que unos pocos. Normalmente el uso de estos argumentos es para dar nombres de archivos u opciones al programa. El uso de par?metros en l?neas de comandos dar? a tus programas mas profesionalismo y facilidades para el uso de archivos batch.
    Cuando un programa en C no requiere de par?metros en l?neas de comandos, es practica com?n especificar a la funci?n main() con la instrucci?n void dentro de la lista de par?metros de la misma funci?n main(), es decir : main(void) ? simplemente dejar vac?o este espacio de par?metros es otra opci?n valida. Los nombres argc y argv son los nombres comunes para estos par?metros pero se le pueden poner los nombres que se deseen (no cambiando los tipos). Tambi?n algunos compiladores pueden soportar argumentos adicionales pero aseg?rate checando el manual de usuario.


    3.-Alcance de las Variables.
    Hasta ahora se ha visto la declaraci?n de las variables, es decir, la descripci?n de un tipo de variable o atributo. Sin embargo restan 2 problemas importantes que deben de discutirse: ?Hasta que punto una variable est? asociada con un almacenamiento real (esto es asignaci?n de memoria)?, y ?Hasta que punto puede referirse a una variable particular un programa (esto es, cual es el alcance de las variables)?. En C, se conocen a las variables y par?metros que se declaran dentro de una funci?n como variables autom?ticas. A ?stas se les asigna memoria cuando se llama a la funci?n. Cuando termina la ejecuci?n de la funci?n, se pierde la asignaci?n. Por ello las variables autom?ticas existen solo cuando esta activa la funci?n. Adem?s se dice que las variables autom?ticas son Locales a la funci?n. Es decir, las variables autom?ticas se conocen s?lo dentro de la funci?n donde est?n declaradas y otra funci?n no puede referirse a ellas. Las variables autom?ticas (es decir, par?metros en el encabezado de una funci?n o variables locales que siguen de inmediato a cualquier llave de apertura) pueden declararse dentro de cualquier bloque y existen hasta que ?ste se acaba. Puede referirse a la variable atraves de todo el bloque a menos que el identificador de la misma se declare de nuevo en un bloque interno. Dentro del bloque interno, una referencia al identificador es una referencia a la declaraci?n m?s interna y no puede hacerse referencia a las variables de afuera. La segunda clase de variables en C es la de las variables Externas. A las variables que se declaran fuera de cualquier funci?n se les asigna almacenamiento en el primer punto de donde se les encuentra y existen para el resto de la ejecuci?n del programa. El alcance de una variable externa va desde el punto en que se declaran hasta el final del archivo fuente que lo contiene. Todas las funciones del archivo fuente pueden referirse a este tipo de variable que est?n m?s all? de su declaraci?n y, en consecuencia, se dice que son Globales para dichas funciones.


    4.- Recursividad.
    Esta es la propiedad que tienen las funciones en C++ de poder llamarse a si mismas. Una funci?n recursiva necesita de una condici?n de Salida. El t?pico problema es el del calculo del factorial de un n?mero:



    5.- Directivas de Preprocesador.
    Instruyen al compilador para que realice ciertas tareas antes de que la compilaci?n del programa se active. La directiva mas com?n es "#include" que le indica al preprocesador que incluya otro archivo fuente C durante el proceso de compilaci?n, y otra t?pica es "#define" que es una definici?n de macros. Es una libertad del programador en C poder crear sus propias librer?as con extensi?n *.h y luego incluirlas de manera general en sus programas con la directiva #include. Como se ha mencionado anteriormente, los archivos de las directivas #include contienen la declaraci?n de variables y funciones ?tiles para los programas en C, las mas comunes (por que es un total de 450 funciones y macros) se muestran en la sig. Tabla:
    Librer?a Descripci?n
    Conio.h Permite definir coordenadas de una ventana de texto en pantalla y manipular texto.
    Ctype.h Declara funciones para la comprobaci?n de caracteres.
    Float.h Define constantes relacionadas con la aritmetica de punto flotante
    Graphic.h Permite la manipulaci?n de Graficos
    Limits.h Define constantes para el tama?o de los tipos de enteros
    Math.h Declara funciones y macros matematicas
    Setjmp.h Proporciona una forma de evitar la secuencia normal de llamada y regreso de funciones.
    Signal.h DA facilidades para manejar condiciones excepcionales que aparecen durante la ejecuci?n
    Stdio.h Permite leer y escribir datos de archivos y dispositivos
    Sdlib.h Declara fucniones para conversi?n n?merica, asignaci?n de memoria.
    String,h Devclara funciones para manipular cadenas como arreglos de caracteres.
    Time.h Declara funciones para la manipulaci?n de fecha y hora.
    Alloc.h Declara funciones para el manejo de la memoria.
    Por ejemplo, en el siguiente programa se imprimir?n cadena de caracteres en la pantalla:

    printf() es una de las funciones de Salida de caracteres que esta definida en #include<stdio.h>, si yo no incluyera esta librer?a en el programa habr?a error en la compilaci?n, y as? cada librer?a *.h tiene definidas una serie de funciones especificas.





    El Archivo de Cabecera Stdio.h
    Cuando nos referimos a entrada/salida est?ndar (E/S est?ndar) queremos decir que los datos o bien se est?n leyendo del teclado, ? bien se est?n 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. Esto le quedar? claro a lo largo de este cap?tulo. El primer c?digo es el siguiente:

    #include <stdio.h> /* define entrada/salida estandar */
    int main()
    {
    int c;
    printf("Introduzca cualquier caracter y presione enter,"
    "X = termina el programa.\n");
    do
    {
    c = getchar(); /* Toma un caracter del teclado */
    putchar(c); /* Despliega el caracter en el monitor */
    }
    while (c != 'X'); /* Mientras que sea diferente de X */
    printf("\nFin del programa.\n");
    return 0;
    }


    La primera cosa por estudiar la tenemos en la primera l?nea. La instrucci?n #include <stdio.h> es muy parecida a la instrucci?n #define que ya hemos estudiado excepto que en lugar de una simple sustituci?n se lee todo un archivo en este punto. El sistema encontrar? el archivo llamado stdio.h y leer? la totalidad del contenido reemplazando la instrucci?n #include stdio.h. Obviamente el archivo debe contener enunciados v?lidos de C que pueden ser compilados como parte del programa. Este archivo en particular contiene varias definiciones y prototipos para las operaciones de E/S est?ndar. El archivo es llamado archivo de cabecera y su compilador incluye una gran variedad de ellos, cada uno con un prop?sito espec?fico y cualquiera de ellos puede ser incluido en cualquier programa. El compilador C utiliza el s?mbolo de doble comilla para indicar que la b?squeda del archivo include empieza en el directorio actual de trabajo, y si no se encuentra ah?, la b?squeda continuar? en el directorio include tal y como est? especificado en el ambiente de su compilador. Adem?s se utilizan los s?mbolos de "menor que" y "mayor que" para indicar que la b?squeda empieza directamente en el directorio include del compilador. Se pueden utilizar tantos include como sea necesario, y es perfectamente v?lido que un archivo de cabecera incluya uno o m?s archivos de cabecera adicionales. Comprender? a su vez que cuando escriba programas largos, es posible incluir ciertas rutinas comunes en un archivo de cabecera e incluir el mismo como ya se ha descrito.
    Continuando con el c?digo de ejemplo. Se define la variable llamada c y se despliega un mensaje en pantalla con la y? conocida funci?n printf ( ), entramos en un bucle que no termina sino hasta que el caracter introducido sea una X may?scula, dentro del bucle nos encontramos con dos nuevas funciones, una que sirve para leer un caracter desde el teclado y otra que despliega dicho caracter en pantalla. La funci?n getchar ( ) lee un solo caracter desde el dispositivo est?ndar de entrada, o sea, el teclado, y lo asigna a la variable llamada c. La siguiente funci?n llamada putchar ( ) utiliza el dispositivo de salida est?ndar, es decir, el monitor de video, para desplegar el caracter contenido en c. El caracter se despliega en la posici?n actual del cursor y ?ste avanza un espacio para el siguiente caracter, por lo tanto el sistema se ocupa del orden de despliegue de los caracteres.
    Compile y ejecute este programa para descubrir algunas caracter?sticas adicionales, como el hecho que conforme escriba en el teclado, lo escrito se despliega en el monitor y al presionar la tecla enter se repite la l?nea completa de texto, tal parece que memoriza los caracteres y luego los vuelve a deplegar.




    El Sistema Operativo a Nuestra Ayuda
    Es conveniente dar una breve explicaci?n de c?mo trabaja el sistema operativo para entender lo que pasa.
    Cuando se leen datos desde el teclado bajo el control del sistema operativo, los caracteres se almacenan en un buffer (segmento de memoria RAM temporal) hasta que se introduce un retorno de carro momento en el cual la totalidad de los caracteres se devuelven al programa. Cuando se teclean los caracteres, ?stos son mostrados en pantalla uno a la vez. A ?sto se le llama eco, y sucedeo en muchas de las aplicaciones que Usted corre en su computadora. Para demostrar lo dicho en el programa anterior, teclee una serie continua de caracteres tal que contenga una X may?scula, ver? que conforme vaya tecleando la 'X' aparece en pantalla, pero una vez que presiona la tecla enter, la llegar la cadena de caracteres al punto donde se encuentra la 'X', ah? termina el programa, lo que sucede es que al presionar la tecla enter se entrega al programa la cadena de caracteres, como el programa se?ala su fin al encontrar una X may?scula, los caracteres escritos despu?s de la 'X' no se despliegan en pantalla. Veamos otro c?digo:

    #include "stdio.h"
    #include "conio.h"
    int main()
    {
    int c;
    printf("Introduzca cualquier caracter, el programa"
    "termina con una X\n");
    do
    {
    c = _getch(); /* Se obtiene un caracter */
    putchar(c); /* Se despliega la tecla presionada */
    }
    while (c != 'X');
    printf("\nFin del programa.\n");
    return 0;
    }


    Nuevamente empezamos con el archivo de E/S est?ndar de cabecera, luego definimos una variable llamada c e imprimimos un mensaje de bienvenida. Como en el programa anterior, entramos en un bucle y lo ejecutamos hasta encontrar una X may?scula, pero la acci?n es un poco diferente, observe la inclusi?n del archivo conio.h y de la funci?n _getch ( ) mismos que no forman parte del est?ndar ANSI-C pero que est?n disponibles en la mayor?a de los compiladores escritos para DOS. La funci?n llamada _getch ( ) es una funci?n para obtener un caracter que difiere de la funci?n getchar ( ) en que no depende de DOS. ?sta funci?n lee un caracter sin hacer eco en pantalla entregando el caracter inmediatamente al programa.
    Tenga en cuenta que la funci?n _getch ( ) no est? incluida en el est?ndar ANSI-C y por lo tanto puede no estar disponible en todos los compiladores, adem?s utilizar ?sta funci?n puede hacer el progama menos portable a otras m?quinas, si su compilador soporta la funci?n, compile este programa y observe su funcionamiento comparado con el programa anterior, ver? que al presionar la tecla enter no coloca una nueva l?nea con el retorno de carro, para corregir esta situaci?n tenemos el siguiente programa:

    #include <stdio.h>
    #include <conio.h>
    #define RC 13 /* Define RC igual a 13 */
    #define AL 10 /* Define AL igual a 10 */
    int main()
    {
    int c;
    printf("Introduzca cualquier caracter, X para terminar.\n");
    do
    {
    c = _getch(); /* Se obtiene un caracter */
    putchar(c); /* Despliega la tecla presionada */
    if (c == RC) putchar(AL); /* Si es retorno de carro */
    /* coloca una nueva linea */
    }
    while (c != 'X');
    printf("\nFin del programa.\n");
    return 0;
    }

    Tenemos dos nuevos enunciados que definen los c?digos de caracter para la nueva l?nea (linefeed en ingl?s, traducido en este programa como "alimentar l?nea", AL), y para el retorno de carro (carriage return, "retorno de carro", RC), si Usted consulta una tabla de c?digos ASCII ver? por qu? ?stos t?rminos se han definido como 10 y 13. En el programa principal, despu?s de desplegar el caracter introducido en pantalla lo comparamos con RC, y si es igual adem?s desplegamos una nueva l?nea, AL.
    Le recomiendo ampliamente la compilaci?n y ejecuci?n de cada programa de ejemplo para un mejor entendimiento de la mec?nica de las funciones aqu? presentadas. Le toca ahora el turno a los n?meros enteros.

    Entrada num?rica
    Estudie el siguiente programa:

    #include <stdio.h>
    int main()
    {
    int numero;
    printf("Introduzca un numero de 0 a 32767, el programa"
    "finaliza con un 100.\n");
    do
    {
    scanf("%d", &numero); /* Lee un valor entero */
    printf("El numero es %d\n", numero);
    }
    while (numero != 100);
    printf("Adios!\n");
    return 0;
    }


    La mec?nica del programa es bastante similar a lo que hemos estado trabajando, excepto que definimos una variable de tipo int llamada numero y el bucle continua hasta que el valor introducido sea 100. En lugar de leer un solo caracter tal y como lo hemos hecho en los programas anteriores, ahora leemos un n?mero completo con una sola llamada a la funci?n llamada scanf ( ), esta funci?n es muy similar a la conocida printf ( ) solo que se utiliza para introducir datos en lugar de desplegarlos. Observe en la l?nea donde se encuentra la funci?n scanf ( ) que ?sta no refiere directamente a la variable llamada numero, en lugar de esto, utiliza la direcci?n de la misma (o sea, un puntero a la variable), ya que espera le sea retornado un valor. La funci?n scanf ( ) busca en la l?nea de entrada hasta encontrar el primer campo de datos, lee los caracteres enteros hasta encontrar un espacio en blanco ? un caracter decimal inv?lido, en este punto detiene la lectura y retorna el valor encontrado.
    Si su sistema utiliza enteros de 2 bytes y Usted introduce un n?mero hasta 32767 inclusive ?ste se despliega correctamente, pero con n?meros mayores parece haber un error. Por ejemplo, si Usted introduce 32768 se despliega -32768, e introduciendo 65536 el valor desplegado es cero. La explicaci?n de ?ste fen?meno est? en la manera en que est? definido una variable de tipo int, el bit m?s significativo para un patr?n disponible de 16 bits para una variable entera es el bit de signo por lo que s?lo nos quedan 15 bits para representar el valor, por lo tanto la variable s?lo puede tomar valores comprendidos entre -32768 y 32767. Este detalle debe tomarlo en cuenta al momento de hacer sus programas. Lo dicho es v?lido s?lo para los compiladores de 16 bits, aunque existe la cada vez mayor posibilidad de que su compilador utilice valores enteros almacenados en campos mayores de 16 bits, en este caso se aplican los mismos principios excepto que el rango de valores es mayor. Compile y ejecute el programa anterior y experimente con lo anteriormente dicho.




    Entrada de Cadenas
    Ahora veremos c?mo introducir una cadena de caracteres en nuestro siguiente programa, el c?digo es el siguiente:

    #include <stdio.h>
    int main()
    {
    char cadena[25];
    printf("Introduzca una cadena de caracteres, maximo 25 caracteres.\n");
    printf("Una X en la columna 1 termina el programa.\n");
    do
    {
    scanf("%s", cadena);
    printf("La cadena es -> %s\n", cadena);
    }
    while (cadena[0] != 'X');
    printf("Adios!.\n");
    return 0;
    }


    Este programa es similar al ?ltimo c?digo que estudiamos, excepto que en lugar de definir una variable de tipo int, definimos una variable de tipo string con un l?mite de 24 caracteres (recuerde que las cadenas de caracteres deben incluir un caracter nulo al final de la cadena). La variable en la funci?n scanf ( ) no requiere un s?mbolo de & porque cadena es un array y por definici?n incluye un puntero. Este programa no requiere mayor explicaci?n.
    Cuando compile y ejecute ?ste programa notar? que los enunciados son separados en palabras. Cuando scanf ( ) se utiliza en el modo de entrada de cadena de caracteres lee los caracteres hasta que encuentra el final de la linea ? un caracter en blanco, por lo tanto, lee una palabra a la vez. Experimente introduciendo m?s de 24 caracteres y observe c?mo el sistema maneja una situaci?n de error. Como scanf ( ) no tiene manera de parar la introducci?n de caracteres cuando el array est? lleno, por lo tanto no lo utilice para introducir cadenas de caracteres en un programa importante, aqu? lo usamos solamente para prop?sitos de ilustraci?n.





    Entrada/Salida en Memoria
    Hablemos ahora de otro tipo de E/S, uno que no tiene salida al mundo exterior pero que permanece en la computadora, el c?digo es este:

    #include <stdio.h>
    int main()
    {
    int numeros[5], resultado[5], indice;
    char linea[80];
    numeros[0] = 74;
    numeros[1] = 18;
    numeros[2] = 33;
    numeros[3] = 30;
    numeros[4] = 97;
    sprintf(linea,"%d %d %d %d %d\n", numeros[0], numeros[1],
    numeros[2], numeros[3], numeros[4]);
    printf("%s", linea);
    sscanf(linea,"%d %d %d %d %d", &resultado[4], &resultado[3],
    (resultado+2), (resultado+1), resultado);
    for (indice = 0 ; indice < 5 ; indice++)
    printf("El resultado final es %d\n", resultado[indice]);
    return 0;
    }


    En este programa definimos algunas variables, despu?s asignamos algunos valores a las llamadas n?meros para prop?sitos de ilustraci?n y entonces utilizamos la funci?n sprintf ( ), ?sta act?a similar a la funci?n printf ( ) pero en lugar de desplegar los datos a un dispositivo de salida, imprime la cadena formateada en una cadena en memoria. En este caso la cadena v? a la variable llamada linea, porque esta es la cadena que introducimos como primer argumento de la funci?n sprintf ( ). Como la cadena generada contin?a en memoria, podemos leerla utilizando la funci?n sscanf ( ), le decimos a la funci?n en el primer argumento que linea es la cadena a utilizar para su entrada, el resto de los argumentos se manejan igual que en la funci?n scanf ( ). Observe que en este caso si utilizamos punteros porque necesitamos regresar datos de la funci?n y observe adem?s que utilizamos varias formas para declarar punteros, las primeras dos simplemente declaran la direcci?n de los elementos del array, mientras que los ?ltimos tres aprovechan el hecho que resultado, sin el sub?ndice, es un puntero. Finalmente y para agregarle m?s inter?s, los datos se despliegan en orden inverso.



    ? Crea Tus Propias Librer?as *.h de C !.
    Se ha visto hasta ahorita que las librer?as de C son archivos con la extensi?n *.h, y que su objetivo es proporcionar al momento de la compilaci?n la declaraci?n de variables y funciones de todo tipo que lleva a cabo las instrucciones generales de programas, Recordando que para utilizar por ejemplo la funci?n que imprime strings en la pantalla "printf()" se tiene que incluir la librer?a stdio.h, por que si no, el compilador reportara que tal funci?n no esta declarada, y asi de esta manera, de forma general.
    Tambien, se ha explicado en el trancurso de este tutorial que tales librer?as estan de manera estandar dentro del lenguaje C, tan solo hay que mandarlas llamar, sin embargo se tiene la gran posibilidad de como programador poder crear Nuestras propias librer?as con el c?digo propio relacionados con nuestros programas en donde las mandemos llamar con la linea #include<nombre_de_libreria.h>
    Esto de poder crear nuestras propias librer?as tiene 2 objetivos claros en el momento de la creaci?n de un programa:
    ? Evita tener en un solo c?digo toda la declaraci?n de variables y funciones que hacen muy grande al c?digo fuente principal, esto propicia un orden especifico y eficiencia en el c?digo final del programa por la raz?n de no quedar tan grande.
    ? Permite Tener un control mas preciso de tales variables y funciones en el trancurso de la creaci?n del programa, asi de poder tener un acceso fac?l al momento de modificaciones futuras.
    Puntos ha tomar muy encuenta al momento de crear librer?as son los siguientes:
    ? Tomese en consideraci?n que una libreria NO ES UN PROGRAMA, es tan solo la declaraci?n de variables y funciones, NADA MAS.
    ? Por la raz?n de que no es un programa, DE NINGUNA FORMA tiene que estar en ningun tipo de librer?a la funci?n MAIN (), ya que esta solo tiene que estar presente en el c?digo principal del programa.
    ? NUNCA tiene que compilarse una librer?a
    Habiendo considerado lo anterior, proceda de la siguiente manera para la creaci?n de su librer?a:
    1.- Tiene que usar cualquier tipo de Editor de Textos, puede ser el mismo Turbo C++, o incluso el NotePad o Edit de DOS creando un Archivo nuevo.
    2.- Haga la declaraci?n de sus funciones y Variables tal y como lo har?a en el programa *.c o *.cpp y que se utilizaran al momento de compilar su programa.
    3.- Al momento de Salvar o guardar su Archivo lo har? con la extensi?n *.h y Listo.
    Hecho Lo anterior debe quedar claro que ya no es necesario declarar funciones y variables en su c?digo principal, esto marcaria un error de redeclaraci?n de variables o funciones.
    AHORA! la manera de incluirlos en su programa es de la siguiente forma:
    1.- Al momento de agregar tu librer?a al programa, se utiliza la misma instrucci?n de preprocesador #include<nombre_de_libreria>, nada mas que ahora se tiene que especificar al compilador que esta librer?a en especial la tiene que leer desde tu diskette o Disco Duro, por lo tanto lo especificas asi #include<nombre_de_unidad:nombre_de_libreria.h>. Por ejemplo una llamada a una libreria propia podr?a ser #include<a:mi_mouse.h>, asi especifico que mi librer?a mi_mouse.h la tiene que leer del diskette de la unidad a: (a: es la unidad mas com?n para la disquetera, pero si cambia, por ejemplo a b: no importa, coloquela de la manera indicada)o puede ser c: , siendo esta la com?n para el DD.
    2.- Al momento de especificar la unidad de almacenamiento donde se encuentra mi librer?a *.h se tiene la posibilidad tambien de especificar un path o camino donde se encuentra mi librer?a. Por ejemplo:
    #include<a:\libreria\mi_mouse.h>
    Y de esta manera el compilador buscara en la unidad a: en el directorio libreria el archivo mi_mouse.h, y asi se pueden especificar incluso subdirectorios subsecuentes.
    3.- Algunos programadores de C estilan para diferenciar entre las librer?as de C estandar y las que ellos han creado declarar sus propias librer?as de la siguiente forma:
    #include"a:\libreria\mi_mouse.h"
    es decir, cambian los simbolos de mayor que > y menor que < por dobles comillas, lo cual es valido, el compilador lo reconoce sin ning?n problema, pero dejarlos con la forma tradicional no marca ning?n problema, es tan solo formas y estilos propios de cada programador.
    4.-Se puede No especificar una unidad de almacenamiento al momento de llamar a la nuestras librer?as siempre y cuando mi archivo fuente *.c o *.cpp y el archivo *.h se encuentren en el mismo subdirectorio /BIN de Turbo C++, es decir se hallen en /TC/BIN, es decir, que en el programa principal solo especifique #include<mi_mouse.h> .Pero si yo no guardo ahi mis archivos SI tendre que especificarle unidad de almacenamiento y subdirectorios (Si los hay) a la directiva #include<> al momento de llamar mis propias librer?as

    Por el Hecho de manejar de una manera separada c?digo de un programa principal (es decir el *.h) TENGA CUIDADO de no perder o da?ar este archivo, si no, no se compilara su programa, y tedr? que de manera detallada volver a encontrar las variables y funciones utilizados en su programa y volverlas a declarar en un nuevo archivo *.h . Y por Ultimo siempre tenga al momento de compilar su programa con librer?as hechas por Usted, el diskette en su unidad lista, para que pueda tener acceso a la librer?a el compilador.
    Nunca trate de Editar las librer?as que son estandar del lenguaje C, como tratar de editar el stdio.h agregando mis propias variables o funciones, por que entonces el Compilador no Reconocera nunca mas a la librer? aunque se deshagan las modificaciones hecha por mi.Y siempre tenga en cuenta que las instrucciones anteriores son solo para la creaci?n y uso de MIS PROPIAS librer?as, el uso de las librer?as estandar de C son de la manera especificada en otras secciones del tutorial.

    Secci?n de Acceso R?pido de Subtemas de Este Cap?tulo:
    Archivos en C. | Funciones de Archivos| Apertura de un Archivo| Cerrar un Archivo| Gr?ficos en C| Modo Gr?fico de un Programa| Escritura en Modo Gr?fico| Escritura en Modo Texto|
    ________________________________________
    Archivos en C
    El Almacenamiento de datos en estructuras de datos vistas anteriormente solo se generan temporalmente, es decir, cuando termina el programa los datos se pierden. Para ello, una forma de no perderlos y recuperarlos aun
    [​IMG] En l?nea TlAloK Visitante


    [​IMG]
    [​IMG]Re: Programaci?n C ? Respuesta #1 en: 08 de Julio de 2006, 04:30:39 ?
    CUATRO PROPIEDADES ESENCIALES
    Existen cuatro propiedades esenciales soportadas por el paradigma orientado a objetos : Abstracci?n, Encapsulaci?n, Herencia, y Polimorfismo. Juntos representan un poderoso conjunto de aspectos, que pueden ser aplicados para resolver un problema mediante una conveniente aplicaci?n de estos aspectos, uno puede construir una estructura para resolver problemas nuevos que usan componentes (las clases) desarrolladas para soluciones previas del problema.
    Abstracci?n de Datos.
    Consiste en la extracci?n de las propiedades fundamentales de un concepto. Permite no preocuparse por los detalles no esenciales, es decir, no es necesario conocer los detalles exactos de la implementaci?n. Existe casi en todos los lenguajes de programaci?n. Las estructuras de datos y los tipos de datos son un ejemplo de abstracci?n.
    Una abstracci?n tiene existencia conceptual m?s bien que concreta. Representa ideas, conceptos, y propiedades generales sin la atenci?n a detalles. Para el software de computadora, esto significa sin la atenci?n a los detalles de implementaci?n, evitando as? la necesidad de confundirse con la sintaxis del lenguaje o la elecci?n de un lenguaje. El ?nico inter?s es que un lenguaje particular soporte la abstracci?n.
    La abstracci?n es muy importante en las fases iniciales de una soluci?n del problema (con el que uno se se esta enfrentando), donde se hace un intento para comprender el espacio del problema y las t?cnicas requeridas para una soluci?n. Aunque se distribuyen eventualmente con detalles, la abstracci?n hace lo posible para delegar esos detalles y para organizar los a todos de una manera manejable mediante el uso de abstracciones de capa. Una abstracci?n de capa es una abstracci?n que esta variando los niveles de detalle. En el nivel m?s alto o primer nivel hay muy poco detalle. La abstracci?n del nivel m?s alto se expresan desde el punto de vista de un n?mero peque?o de abstracciones de niveles m?s inferiores. La particionalidad contin?a en cada nivel hasta que todos los detalles han sido incluidos.
    Es por lo tanto la abstracci?n un modelo que incluye todas las capacidades esenciales, propiedades, o los aspectos que est?n siendo modelado sin algunos detalles extra?os.
    Hay varios tipos importantes de abstracci?n, dependiendo sobre qu? esta siendo modelado.
    1. Abstracciones de objeto - Los objetos son las abstracciones que modelan la aplicaci?n individual del dominio o entidades del espacio de soluci?n.
    2. Abstracciones de clases - Las clases son las plantillas abstractas que modelan la aplicaci?n similar del dominio o entidades del espacio de soluci?n.
    3. Abstracciones de datos - Modela los datos que son usados cuando se comunican con el atributo de objetos y las clases.
    4. Abstracciones funcionales - Modela operaciones secuenciales considerando los procesos de abstracciones.
    5. Abstracciones de procesos - Modelan las operaciones concurrentes. Ambas abstracciones funcional y de procesos se usan cuando se comunican con las operaciones de objetos y las clases.
    6. Abstracciones de excepci?n - Las condiciones del error del modelo de excepci?n son el error manejado y se usan para crear objetos robustos y clases.

    Por lo tanto la abstracci?n se define como la extracci?n de las propiedades esenciales de un concepto. En un programa estructurado, es suficiente conocer que un procedimiento dado realiza una tarea espec?fica. El c?mo se realiza la tarea no es importante; mientras el procedimiento sea fiable, se puede utilizar sin tener que conocer como funciona su interior. Esto se conoce como una abstracci?n funcional. Con la abstracci?n de datos, las estructuras de datos e ?tems se pueden utilizar sin preocuparse sobre los detalles exactos de la implementaci?n.




    Polimorfismo
    En la POO el polimorfismo se refiere al hecho de que una misma operaci?n puede tener diferente comportamiento en diferentes objetos. En otras palabras, diferentes objetos reaccionan al mismo mensaje de manera diferente.
    Por ejemplo, supongamos un n?mero de figuras geom?tricas que responden todas al mensaje Dibujar. Cada objeto reacciona a este mensaje visualizando su figura en la pantalla. Obviamente, el mecanismo real para dibujar los objetos difiere de una figura a otra, pero todas las figuras realizan esta tarea en respuesta al mismo mensaje.
    Polimorfismo se define como la calidad o estado de ser capaz de asumir formas diferentes. En la soluci?n de un problema orientado a objetos, polimorfismo puede aplicarse a cualquier objetos u operaciones. El uso m?s com?n es la operaci?n polimorfismo, que es representada por enviar el mismo mensaje, imprimirlo, a objetos diferentes y cada uno puede ser responder en su propia manera.
    Polimorfismo puede examinarse desde el punto de vista de sus propiedades suplementarias. Una primera propiedad del polimorfismo es el sobrecarga de identificadores de mensaje y operadores. Polimorfismo es apoyado por la ligadura de un m?todo particular al identificador del mensaje durante la ejecuci?n de un sistema de software. Esta ligadura lenta, o ligadura din?mica, es un aspecto importante de la soluci?n de un problema orientado a objetos.
    Una de las caracter?sticas m?s importantes de la programaci?n orientada a objetos es la capacidad de que diferentes objetos responden a ?rdenes similares de modo diferentes.
    Identificador de mensaje y operadores sobrecargados. El identificador de mensaje y operador invocan una operaci?n espec?fica sobre un objeto. Cada uno establece la selecci?n del significado uniforme de la operaci?n en particular que se desea realizar, es decir, son utilizados para representar el concepto de una operaci?n e identificar que se ejecutara o realizar?.



    Herencia
    Es la propiedad que permite a los objetos construirse a partir de otros objetos. Este principio consiste en que cada clase puede dividirse en subclases, es decir, a partir de una clase base se pueden derivar otras clases (clases derivadas) que comparten caracter?sticas comunes con la clase de la que se derivan, adem?s de tener sus propias caracter?sticas particulares.
    La Herencia permite definir nuevas clase a partir de clases ya existentes. Si una clase s?lo recibe caracter?sticas de una clase base, la herencia es simple.
    Si una clase recibe propiedades de m?s de una clase base, la herencia es m?ltiple.


    Las instancias heredan (usualmente) todas, y ?nicamente, las caracter?sticas de las clases a las que pertenecen, pero, tambi?n, es posible, en un sistema orientado a objetos, que se permita que las clases hereden caracter?sticas de superclases m?s generales. En ese caso, las caracter?sticas heredadas pueden ser ignoradas (overriden) y se pueden agregar caracter?sticas adicionales para tratar excepciones.
    La herencia es el acto de adquirir una posesi?n, condici?n, o caracter?stica de generaciones pasadas. En la soluci?n de un problema de computadora se habla de componentes de software que heredan propiedades que describen otros componentes de software. En la soluci?n de un problema orientado a objetos un tipo de objeto hereda propiedades que caracterizan otro tipo de objeto. Desde las propiedades de objetos son dadas por la descripci?n de la clase, esto implica una jerarqu?a de clases, donde una clase es un subclase de otra, la clase padre. Los objetos que son los instancias de las subclases tienen propiedades dadas dentro de la descripci?n de la subclase as? como tambi?n propiedades heredadas dadas dentro de la clase padre y todas las clases antecesoras.
    As? la herencia provee la potencialidad para construir soluciones nuevas a problemas agregando el incremento de la capacidad a soluciones existentes del problema mediante subclases.
    Las instancias de una subclase representan una especializaci?n de instancias descritas por una clase padre. La instancia de la subclase tiene todos los atributos dados por la clase padre, m?s los atributos adicionales o agregados de la subclase. La instancia de la subclase responde al mismo conjunto de mensajes dados en la clase padre, los mensajes adicionales se dan en la descripci?n de la subclase.
    La respuesta de la instancia de la subclase a los mensajes en la clase padre puede ser diferente de la respuesta de una clase padre de una instancia al mismo mensaje. No es valido considerar subclases de objetos que tengan menos atributos que los objetos descritos por la clase padre.


    Concepturalizaci?n de la herencia
    Una clase utilizada para derivar nuevas clases se conoce como clase base (padre, ascendiente), y una clase creada de otra clase se llama clase derivada (hija, descendiente, subclase).
    En un lenguaje Orientado a Objetos la herencia se manifiesta con la creaci?n de un tipo definido por el usuario (Clase), que puede heredar las caracter?sticas de otra clase ya existente o derivar las suyas a otra nueva clase. Cuando se hereda, las clases derivadas reciben las caracter?sticas (estructuras de datos y funciones) de la clase original , a las que se pueden a?adir nuevas caracter?sticas o modificar las caracter?sticas heredadas.
    La herencia se aplica para extender y reutilizar el c?digo existente:
    ? Los objetos se pueden construir de modo incremental a partir de otros objetos y pueden compartir c?digo y estructuras de datos
    ? Los algoritmos generales se pueden escribir de modo que se pueden reutilizar para nuevos tipos de objetos, incluso despu?s que los algoritmos originales se han compilado.
    Herencia simple :
    Se realiza tomando una clase existente y derivando nuevas clases de ella (Figura 2.5 ). La clase derivada hereda las estructuras de datos y funciones de la clase original, Adem?s, se pueden a?adir nuevos miembros a las clases derivadas y los miembros heredados pueden ser modificados. Una clase utilizada para derivar nuevas clases se denomina clase base (padre, superclase, ascendiente). una clase creada de otra clase se denomina clase derivada o subclase. A su vez una clase derivada puede ser utilizada como una clase base para derivar m?s clases. Por consiguiente, se pueden construir jerarqu?as de clases, en las que cada clase sirve como padre o ra?z de una nueva clase
    Herencia M?ltiple :
    Es aquella en la cual una clase derivada tiene m?s de una clase base. Aunque el concepto de herencia m?ltiple es muy ?til, el dise?o de clases suele ser m?s complejo, y en ocasiones es preferible realizar la aplicaci?n con herencia m?ltiple mediante emulaci?n de herencia simple.



    Encapsulamiento
    Las estructuras de datos y los detalles de la realizaci?n de un objeto se hallan ocultos de otros objetos del sistema. La ?nica forma de acceder al estado de un objeto es enviar un mensaje que haga que uno de los m?todos se ejecute. Estrictamente hablando, los atributos son escrituras taquigr?ficas para los m?todos que obtienen y colocan valores. Esto hace que los tipos de objetos sean equivalentes a los tipos de datos abstractos en programaci?n, en t?rminos generales.
    El resultado de encapsulaci?n es una entidad con fronteras distintas, una interface bien definida, y una representaci?n interna protegida. Para el software de computadora, una encapsulaci?n es un componente de software. La integridad del componente de software como una encapsulaci?n es dependiente de aspectos del lenguaje de computadora en el que se implementa el componente.
    Encapsulaci?n es un concepto importante para el desarrollo de soluciones del problema que son menos susceptibles a los errores. Un problema es particionado en un n?mero de componentes. Cada componente es encapsulado para interactuar rec?procamente con los otros componentes ?nicos de manera cuidadosamente prescribidas, como definidas por su interface.
    En un problema orientado a objetos que resuelve la unidad de encapsulaci?n es el objeto. Los objetos son abstracciones encapsuladas.

    Combinaci?n de principios
    La encapsulaci?n es la combinaci?n de los principios de ingenier?a de software de modularidad, localizaci?n, y ocultamiento de informaci?n. Cada una de estas es muy importante para el desarrollo de un sistema eficiente, formal y sostenible.
    ? Modularidad - El prop?sito determinado es particionar requerimientos, el dise?o, y software en colecciones o grupos de complejidad y tama?o apropiado, uniforme con las metas de ingenier?a de software. Modularidad se usa para construir componentes m?s grandes y operaciones m?s peque?as en el dise?o orientado a objetos que cuando se usan m?todos funcionales debido a que:
    - Los m?dulos - Son creados para abstracciones del objeto m?s que abstracciones funcionales
    - Las operaciones - Se deben asignarse y encapsularse dentro del objeto y clase.
    ? Localizaci?n - El prop?sito determinado es particionar requerimientos, el dise?o y software as? que los recursos l?gicamente ligados son f?sicamente agrupados para aumentar la cohesi?n y para decrecer el acoplamiento. Es m?s importante localizar una abstracci?n completa que crear un m?dulo peque?o.
    ? Ocultamiento de Informaci?n - Es la consideraci?n del ocultamiento de informaci?n (p. ej. dise?o, la decisi?n, los detalles de implementaci?n) a fin de promover la abstracci?n, soporte al desarrollo ascendente/descendente (top-down) , protege contra la corrupci?n accidental, y promociona el logro de metas de ingenier?a de software. Los recursos de un componente deber?an ocultarse a menos que espec?ficamente se necesiten por otro componente. Los datos globales comunes no son usados, pero m?s bien los atributos se ocultan dentro de objetos y las clases. Cada componente deber?a dividirse en 2 partes desarrolladas separadamente (y compilables): la especificaci?n (o interface) y el cuerpo (o implementaci?n)



    Control de acceso a una clase
    Una de las caracter?sticas fundamentales de una clase es ocultar tanta informaci?n como sea posible. Por consiguiente es necesario imponer ciertas restricciones de acceso a los datos y funciones de una clase.
    Una clase puede contener partes p?blicas y partes privadas. Por defecto, todos los miembros definidos en una clase son privados, aunque se puede especificar la palabra reservada private. Si se desea hacer algunas o todas la partes de una clase p?blicas, es necesario definirlas despu?s de la palabra reservada public.
    Todas los datos o funciones definidos como p?blicos pueden ser accesados solamente por funciones de la propia clase. No as? aquellas que se definen como publicas, que pueden ser accesadas desde cualquier funci?n del programa.
    Dada que una caracter?stica clave en la Programaci?n Orientada a Objetos es el ocultamiento de informaci?n, se debe tratar de eliminar o limitar al m?ximo tener variables p?blicas. Las funciones de una clase, sin embargo, generalmente se hacen privadas para poder manipular al objeto desde el lugar del programa que el programador desee. Ver ejemplo clase rebanada.



    ?Qui?nes pueden usar las clases?
    Existen tres clases de usuarios de una clase: la propia clase, usuarios gen?ricos y las clases derivadas. Cada uno de ellos tiene diferentes privilegios de acceso que se asocia con las palabras reservadas:
    1.- private ------------- La propia clase
    2.- public -------------- Usuarios gen?ricos
    3.- protected ---------- Clases derivadas.
    Declaraci?n de variables y funciones miembro de una clase
    class A {
    int x;
    float y;
    public:
    int z;
    void f();
    };
    void main(void)
    {
    A vardemo;
    }
    vardemo es un objeto de tipo <> que se compone de tres campos de datos (x, y, z) y de una funci?n de acceso (f). Los campos x,y s?lo podr?an ser modificadas a trav?s de la funci?n f, para lo cual se escribir?: vardemo.f();
    Esto en t?rminos de programaci?n orientada a objetos se leer?a: se env?a el mensaje f() al objeto vardemo. En otras palabras: se ejecuta la funci?n f aplicada al objeto vardemo.
    La definici?n de las funciones miembro es muy similar a la definici?n ordinaria, ya conocida, de funci?n. Tienen un encabezado y un cuerpo y pueden tener tipos y argumentos. sin embargo tienen dos caracter?sticas muy especiales:
    Cuando se define una funci?n miembro, se utiliza el operador de resoluci?n de ?mbito :: para identificar la clase a la que pertenece la funci?n. Las funciones miembro (m?todos) de las clase pueden acceder a los componentes privados de la clase.
    class CLS {
    int x;
    int y;
    public:
    void f() { cout << "\nX=" << x << " Y=" << y; }
    };
    class CLS {
    int x;
    int y;
    public:
    void f();
    }
    void CLS::f()
    {
    cout << "\nX=" << x << " Y=" << y;
    }
    En el primer caso la funci?n est? en l?nea (inline). Por cada llamada a esta funci?n, el compilador genera (vuelve a copiar) las diferentes instrucciones de la funci?n. En el segundo caso la funci?n se llamar? con una llamada verdadera a funci?n.





    Las Clases con Estructuras
    Una estructura (struct) en C++ es tambi?n una clase en la que todos sus miembros son por defecto p?blicos, a menos que sean modificados por las palabras reservadas private o protected.
    struct alfa {
    private:
    int x, y;
    public:
    //resto de la estructura, prototipos de funciones
    }
    Objetos
    En C++, un objeto es un elemento declarado de un tipo de clase. Se conoce como una instancia de una clase.
    class rectangulo {
    int base, altura;
    public:
    void dimensiones (int b, int h) { base=b; altura=h; }
    int area(void) { return base * altura; }
    };
    main ()
    {
    rectangulo MiRectangulo; //Se declara el objeto
    MiRectangulo.dimensiones(10, 5); //Se define el tama?o del objeto
    cout << "Area= " << MiRectangulo.area(); //Se calcula el ?rea del objeto y se imprime
    rectangulo * ap_TuRectangulo = new rectangulo; //Se declara apuntador al obj.
    ap_TuRectangulo->dimensiones(10, 20); //Se define el tama?o del objeto
    cout << "Area= " << ap_TuRectangulo->area(); //Se calcula el ?rea del obj. se imprime
    }
    Puede observarse en el ejemplo anterior que los miembros a una clase se accesan por medio del operador punto (.) si se trata de una variable de una variable (objeto) del tipo de la clase y por el operador flecha (->) si se trata de un apuntador un objeto de la clase.
    Clases vac?as class vacia {};
    con frecuencia en el desarrollo de proyectos grandes, se necesitan comprobar implementaciones de primeras versiones en las que algunas clases todav?a no est?n totalmente definidas o implementadas.






    Clases anidadas
    Una clase declarada en el interior de otra clase se denomina clase anidada, y se puede considerar como una clase miembro. Si una clase anidada es declarada en la secci?n private de la clase circ?ndate, ser? solo utilizable por miembros de datos de la clase
    que la circunde. Si un nombre de una clase anidada es accesible a una clase o funci?n que no la circunda, se debe aplicar el operador de resoluci?n de ?mbito ([​IMG] para utilizar su nombre.
    class Externa {
    public:
    class Interna {
    public:
    int x;
    };
    };
    void main(void)
    {
    Externa::Interna valor;
    int v = valor.x;
    }
    class clase_2 {
    public:
    int i;
    };
    class clase_1{
    public:
    int j;
    clase_2 variable_2; //variable_2 es una clase anidada
    };
    void main(void)
    {
    clase_1 variable_1;
    variable_1.variable_2.i=125;
    }
    Miembros est?ticos de una clase
    Para un miembro dato, la designaci?n static significa que s?lo existe una instancia de ese miembro. Es compartido por todos los objetos de una misma clase y existe incluso si ning?n objeto de esa clase existe. Se le asigna una zona fija de almacenamiento.
    class Ejemplo {
    static int varest; //se declara miembro est?tico privado
    public:
    static int valor; //se declara miembro est?tico p?blico
    };
    int Ejemplo:: valor; //se define miembros est?tico
    int Ejemplo::varest;
    void main(void)
    { Ejemplo objeto1;
    objeto1.valor=1;
    objeto1.valor=3;
    Ejemplo::valor=3; //se puede referenciar usando el identificador de clase. Es la manera ideal
    de hacerlo
    Ejemplo::valres=5; //Acceso v?lido
    objeto1.valres=6; // Acceso no v?lido
    }
    Tipos de funciones miembro
    1.- Simples
    2.- Est?ticas
    3.- const
    4.-volatile
    5.- inline
    6.- const this
    7.- volatile this
    8.- Virtuales
    9.- Especiales: constructor y destructor
    10.- Amigas
    11.- opeator



    El apuntador this
    Dentro de una funci?n miembro, this apunta al objeto asociado con la invocaci?n de la funci?n miembro. A trav?s de este apuntador, una funci?n puede saber qu? objeto la est? llamando.
    complejo::complejo(float 1, float b)
    {
    this->r=a;
    this->i=a;
    }
    Aunque su uso se considera redundante e innecesario, puede ser ?til en ciertas situaciones, como por ejemplo para hacer una copia del objeto asociado con la invocaci?n o asignar un nuevo valor al objeto.


    void clase_x :: funcion_x(clase_x& a, clase_x &b)
    { ...
    a=*this; //Asigna el valor del objeto asociado al objeto a
    ...
    *this=b; //Modifica el valor del objeto asociado
    }
    Acceso al objeto mediante this
    this -> nombre_miembro
    *this es el objeto total real
    this es la direcci?n del objeto apuntado.



    Funciones miembro est?ticas
    S?lo pueden accesar a otras funciones y datos est?ticos declarados en una clase, pero no pueden manipular funciones ni datos no est?ticos, debido a que no tienen asignado un apuntador this, a menos que se pase expl?citamente este apuntador this.
    int v1, v2, v3; //Al ser globales son est?ticas
    class Prueba{
    public:
    static void suma():
    };
    void Prueba::suma() { v1=v2+v3; }
    void main(void)
    { Prueba p1; p1.suma(); Prueba::suma(); }



    Funciones miembro const
    Devuelven objetos del tipo const.
    class FunConst{
    public:
    const int f() { return 5; }
    }
    void main()
    { FunConst s; cons int i=s.f(); int y=s.f(); }



    Funciones miembro en l?nea (inline)
    Al igual que cualquier otra funci?n de C++, las funciones miembro pueden ser funciones en l?nea. Existen dos medios para hacer funciones miembro en l?nea: aplicando la palabra reservada inline a la definici?n o definiendo la funci?n dentro de la declaraci?n de la clase.
    class clase_xy {
    int x,y;
    public:
    void Despliega_x (void) { cout << "X= " << x; } //Funci?n miembro en l?nea
    void Despliega_y(void);
    };
    inline void clase_xy::Despliega_y(void) //Funci?n miebro en l?nea
    {
    cout << "Y= " << y;
    }



    Constructores
    En C++ la inicializaci?n de objetos no se puede realizar en el momento en que son declarados. Para ello se dispone de los constructores. Un constructor es una funci?n que sirve para construir un nuevo objeto y/o inicializarlo, asignando valores a sus miembros dato.
    Caracter?sticas de los constructores:
    - Tiene el mismo nombre que la clase que inicializa.
    - Puede definirse inline o fuera de la clase que inicializa.
    - No devuelven valores
    - Puede admitir par?metros como cualquier otra funci?n.
    - Pueden existir cero, uno o m?s constructores para una misma clase.
    class rebanada {
    int x_centro, y_centro, angulo_i, angulo_f, radio;
    public:
    rebanada(int x, int y, int ai, int af, int r) } //Constructor
    x_centro=x; y=centro=y; angulo_i= ai; angulo_f=af; radio=r;
    }
    ...// Otros m?todos
    }
    Los constructores pueden implicar diferentes escenarios: Crear objetos por inicializaci?n por defecto, crear objetos con inicializaci?n espec?fica, crear objetos por copia de otro objeto.
    Los constructores no se pueden declarar static o virtual. Se declaran normalmente en la secci?n p?blica, pero pueden declararse en cualquier parte de una clase. Si no se declara espec?ficamente un constructor, C++ inserta autom?tica e invisiblemente un constructor por defecto que no acepta argumentos. Este constructor por defecto asigna espacio de almacenamiento para construir un objeto de su clase y lo pone en ceros.
    Constructores con argumentos
    La mayor?a de los constructores en C++ toman argumentos. La funci?n b?sica de un constructor es inicializar un objeto antes de utilizarlo. Se pueden declarar constructores m?ltiples, mientras tomen tipos o n?meros de argumentos.


    class complejo {
    private:
    double real,imag;
    p?blic:
    complejo() { real=0; imag=0 } //son constructores sobrecargados
    complejo(double x) { real=x; imag=0; }
    complejo( double x, double y ) { real=x; imag=y }
    complejo(complejo& c) {real=c.real; imag=c.omag} //constructor copiador
    }
    void main(void)
    {
    complejo c1;
    complejo c2(1.2);
    complejo c3(1.2, 2.4);
    complejo c4=c2; //llama al constructor copiador
    }
    Mecanismo alternativo de paso de argumentos
    Consiste en inicializar miembros dato como par?metros. Los constructores de complejo quedar?an:
    complejo(double x=0, double y=0) : real(x), imag(y) { }
    complejo(complejo& c): real(c.real), imag(c.imag) { }
    Constructores sobrecargados
    Un constructor puede tener el mismo nombre pero diferentes tipos de datos como argumentos. El constructor correcto es llamado por el compilador seg?n sean los datos de sus argumentos. Ver ejemplo complejo.
    Constructores copiadores
    Es un constructor que crea un objeto a partir de uno ya existente. Tiene s?lo un argumento: una referencia constante a un argumento de la misma clase.
    class fibonacci {
    public:
    fibonacci() { var1=0; var2=1; resultado= var1+var2; } //constructor ordinario
    fibonacci( const fibonacci &p ) { var1=p.var1; var2=p.var2; resultado=p.resultado; }
    }



    Paso de objetos por valor
    Cuando se llama a una funci?n que recibe a un objeto por valor, el compilador utiliza el constructor de copias de los objetos en la pila como un argumento. El paso por valor no significa que la funci?n obtenga necesariamente una copia byte a byte de un objeto.
    void lee_complejo( Cuenta objeto)
    {
    cout << "El objeto Cuenta es: " << objeto.LeerValor());
    }
    void main(void)
    {
    Contador objeto(10);
    informe_cuenta(objeto);
    }
    Creaci?n de objetos
    Forma abreviada: Complejo c1, c2(10), c3(3.4); Complejo c4=c1;
    Forma expl?cita: Complejo c1=complejo(); Complejo c2=complejo(10); Complejo
    c3=complejo(3.4);



    Destructores
    Un destructor es una funci?n miembro con igual nombre que la clase, pero precedido por un caracter tilde ^ .Una clase s?lo tiene una funci?n destructor, no tiene argumentos y no devuelve ning?n tipo. Al igual que las dem?s funciones miembro puede estar definido dentro o fuera de la clase.
    class String {
    private:
    unsigned lon;
    char *sstr;
    public:
    String(const char* s) { strcpy(sstr, s); } //constructor
    ^String() { delete[] sstr; } //destructor
    // Otros miembros
    }
    Los destructores pueden ser p?blicos o privados, seg?n si se declaran en la parte private o public de la clase. Si es p?blico se puede llamar desde cualquier parte del programa para destruir el objeto. Si es privado no se permite la destrucci?n del objeto por el usuario.






    Creaci?n y supresi?n din?mica de objetos
    Los operadores new y delete se pueden usar para crear y destruir objetos de una clase, as? como dentro de funciones constructoreas y destructoras. la expresi?n new devuelve un apuntador a la direcci?n base del objeto.
    p=new int(9);
    Cadena *Cad2 = new Cadena;

    Un objeto creado con new se destruye expl?citamente mediante el operador delete. Si new falla al asignar almacenamiento, devuelve el valor 0.
    class cadena {
    char *datos;
    public:
    cadena (int lon) { datos= new char [lon]; } //constructor
    ^cadena(void) { delete datos}; } //destructor
    }
    Argumentos por defecto (omisi?n)
    En C++, se pueden especificar los valores por defecto cuando se proporciona un prototipo de una funci?n. Estos argumentos por defecto son proporcionados al compialdor si no se da ning?n tipo de argumento a la llamada a la funci?n. Si se pasa un valor a uno de los argumentos, se utiliza ese valor, si no se utiliza el valor por defecto como argumento. Deben cumplirse las siguientes reglas:
    - Los argumentos por defecto se pasan por valor, no por referencia.
    - Los valores por defecto pueden ser valores literales o declaraciones const. No pueden
    ser variables.
    - Todos los argumentos por defecto deben estar situados al final del prototipo de la
    funci?n. Despu?s del primer argumento, todos los dem?s argumentos deben incluir
    valores por defecto.
    void Visualizar (int n, int base = 10 ) { cout << n << "," << base; }
    v
    void Visualizar (int n, int base = 10 ) { cout << n << "," << base; }
    void f()
    {
    Visualizar(47);
    Visualizar(47,10);
    Visualizar(50, 16);
    }
    Otro ejemplo:
    void funcion(int i, int j=2, k=3, h=4);
    void main()
    {
    funcion (1);
    funcion (0, 1);
    }
    void funcion(int i, int j, int k, int h) { cout << i << "," << j << "," << k << "," << l; }

    Secci?n de Acceso R?pido de Subtemas de Este Cap?tulo:
    Tipos de Datos | Tipos de Enteros | Tipos de Coma Flotante | Tipos de Caracter| Variables | Constantes | Operadores| Estructuras de Control | Secuenciales | Condicioanles | IF | SWITCH | Repetitivas | FOR | WHILE | DO-WHILE | BREAK| CONTINUE | Estructura de Programas | Compilaci?n | Estructuras de Salida | Elementos de un Programa | Tokens | Identificadores | Palabras Reservadas| Comentarios | Separadores | Funciones | Declaraci?n de Funciones | Deficinici?n de Funciones | Llamado de Funciones | Paso de Parametros | Funci?n MAIN () | Alcance de Variables | Recursividad | Directivas de Preprocesador | Stdio.h | El S.O | Entrada de Cadenas | Entrada/Salida en Memoria | ? Crea tus Propias Librer?as *.h de C !
    ________________________________________
    Tipos de Datos en C.

    Hay Varios tipos de Datos b?sicos en C:
    TIPO DESCRIPCION
    Char Un solo byte (8 bits) capaz de entender un car?cter del conjunto de caracteres local.
    Int Un entero , normalmente del tama?o natural de los enteros en la maquina que los ejecuta.
    Float Utilizado para n?meros con punto flotante de precisi?n. P/e: 12.345 .12345e2 o 123495.0e-3
    Double Utilizado para n?meros con punto flotante de doble precisi?n p/e:
    Log E= 2.718281828459 ? Sin_per_sec=4.848136811076e-7


    Adem?s existen algunos calificadores que se aplican a estos tipos de b?sicos: Short y Long se aplican a enteros.
    La intenci?n es que short y long proporcionen diferentes longitudes de entero donde sea Practico, int ser? normalmente el tama?o natural para una maquina en particular. A menudo short es de 16 bits y long de 32, por lo tanto, int es de 16 o 32. Cada compilador puede seleccionar libremente los tama?os apropiados para su propio hardware, sujeto solo a las restricciones de que los short's e int's son por lo menos de 16 bits, los long's son por lo menos de 32 bits y el short no es mayor que el int, el cual a su vez no es mayor que long.
    Ejemplos short int n; Long int contar ; El calificador signed o unsigned puede aplicarse a char o a enteros. Los n?meros unsigned son >=0. Por ejemplo la declaraci?n : unsigned int numero; es igual a unsigned n;
    El tipo long double especifica punto flotante de precisi?n extendida, igual que los enteros, los tama?os de objetos de punto flotante se definen en la implementaci?n, float, double y long double representan 3 tama?os distintos.
    Los archivos de cabecera est?ndar <limits.h>y <float.h> contienen constantes similares para todos esos tama?os.

    Tipos de Enteros y sus Rangos.
    Tipo de Entero Rango Bytes
    Int -32.768.. 32.767 2
    Unsigned int 0 .. 65.535 2
    Long -2.147.483.648 .. 2.147.483.647 4
    Unsigned long 0 .. 4.294.967.295 4

    Tipos de Coma Flotante y Rangos.
    Tipo coma flotante Rango Bytes
    Float 3.4 x 10-38 .. 3.4 x 1038 4
    Double 1.7 x 10-308 .. 1.7 x 10308 8
    Long Double 3.4 x 10-4932 .. 1.1 x 104932 10

    Tipo de Car?cter y rangos de Valores.
    Tipo Car?cter Rango Bytes
    Char -128 .. 127 1
    Unsigned char 0 .. 255 1
    Variables en C.
    Las variables son datos de un programa cuyo valor almacenado en memoria puede cambiar durante la ejecuci?n del programa, deben ser declaradas con un nombre y un tipo de dato dado al principio del nombre o de la funci?n
    ejemplo tipo_de_dato nombre_de_dato ; int contador ;
    Existen algunas restricciones en el nombre de las variables y constantes. Los nombres se componen de letras y d?gitos; el primer car?cter debe ser una letra, el car?cter de subrayado ( _ ) cuenta como una letra que algunas veces es ?til para hacer mas legible un nombre largo, sin embargo no se debe de comenzar los nombre de variables con este car?cter puesto que las rutinas de biblioteca con frecuencia usan tal formato en sus variables.
    La practica tradicional de C es usar letras min?sculas para nombre de variables y may?sculas para las constantes simb?licas.
    Al menos los primeros 31 caracteres de un nombre son significativos, para nombre de funciones el numero puede ser menor de 31.
    Las palabras reservadas del lenguaje no se pueden utilizar como variables. C hace diferencia entre may?sculas y min?sculas por lo que "A" es diferente de "a". Una declaraci?n de variable especifica que debe de reservarse memoria para el objeto del tipo especificado y que podemos referirnos a ese objeto por medio de la variable, ademas de que especifica cuanta memoria debe apartarse para esos objetos, tambien implica el como han de interpretarse los datos representandos por cadenas de bits en una localidad de memoria.

    Constantes en C.
    Las Variables son datos que tienen un valor dado por el programador por default y nunca cambiara en la ejecuci?n del programa.
    Hay diferentes tipos de constantes, las cuales pueden ser declaradas en C de la siguiente forma:
    ? Constantes Enteras. #define IVA 15 ? const int IVA=15. El valor de un entero tambi?n se puede hacer constante con un valor Octal o Hexadecimal, un 0 al principio de una constante entera refiere a un octal y un 0x refiere a un hexadecimal. #define IVA 017 ? #define IVA 0xF
    ? Constante Reales. #define PI 3.14159265 ? const float PI=3.14159265
    ? Constante Car?cter. Es un entero escrito como un car?cter dentro de apostrofos. El valor de una constante de car?cter es el valor num?rico del car?cter en el c?digo ASCII.
    ? #define SALIR 's' ? const char SALIR='s'. Existen caracteres especiales que suelen representar caracteres tales como la comilla, doble comilla, signo ? y son llamados Secuencias de Escape:
    TIPO DESCRIPCION
    ?\n? Nueva l?nea
    ?\r? Retorno de carro
    ?\t? Tabulaci?n horizontal
    ?\v? Tabulaci?n Vertical
    ?\f? Avance de pagina
    ?\b? Retroceso de espacio
    ?\a? Alerta(pitido sonoro)
    ?\\? Barra inclinada inversa
    ?\? Comilla simple
    ?\??? Doble comilla
    ?\?? Signo interrogaci?n
    ?\000? Numero Octal
    ?\xhhh? Numero hexadecimal
    ? Constante Cadena ? Cadena Literal. Secuencia de 0 o mas caracteres encerrados entre comillas como en:
    ? "Hola mundo" ? /* Hola mundo */
    ? Las comillas no son parte de la cadena, solo sirve para delimitarla.
    ? Constante Enumeraci?n. Una enumeraci?n es una lista de valores enteros constantes.
    ? Enum boolean {NO,YES};
    El primer nombre en un Enum tienen valor 0 y el siguiente 1 y as sucesivamente, a menos que sean especificados valores expl?citos. Si no todos los valores son especificados, los valores no espec?ficos contin?an con la progresi?n a partir del ultimo valor que si lo fue.
    Enum{Luis=1, fernando, josu?=10, juana=11, paty}
    Luis vale 1, fernando vale 2, josu? vale 10 juana 11 y paty 12.

    Operadores en C
    Los Operadores son s?mbolos que permiten al programa llevar acabo funciones de asignaci?n, matem?ticas , l?gicas y relacionales.

    Operadores de Asignaci?n.
    Tipo Operador Acci?n
    Simple = Asignaci?n Simple
    Compuesta +=
    -=
    *=
    /= (Cociente de la divisi?n)
    %= (residuo de divisi?n)
    <<=
    >>=
    &=
    ?=
    ^= Asignaci?n suma
    Asignaci?n Resta
    Asignaci?n Producto
    Asignaci?n cociente
    Asignaci?n m?dulo
    Asignaci?n desplazar izq
    Asignaci?n desplazar der
    Asignaci?n AND bitwise
    Asignaci?n OR bitwise
    Asignaci?n XOR bitwise
    Ejemplo : n+=5; equivale a n=n+5;


    Operadores Aritm?ticos.
    Tipo Operador Acci?n
    Unitarios +
    -
    --
    ++ Signo positivo
    Signo Negativo
    Decremento
    Incremento
    Binarios +
    -
    *
    /
    % Suma
    Resta
    Producto
    Divisi?n
    M?dulo
    Ejemplos: n++ es igual ++n y equivale a n=n+1; a*b; a-b; son resta y producto de 2 variables.
    En C tambi?n existe una prioridad dentro de estos operadores, t?ngalos en cuenta para el momento de efectuar operaciones en los programas:
    Operador Prioridad
    ++
    --
    *
    /
    %
    +
    -
    = 1
    1
    2
    2
    2
    3
    3
    4


    Operadores Relacionales.
    Permiten comparar 2 operandos dando como resultado solo verdadero ? falso (0 ? 1).
    Operador Acci?n
    <
    >
    <=
    >=
    ==
    ?= Menor que..
    Mayor que..
    Menor o igual que..
    Mayor o igual que..
    Id?ntico ? igual a..
    Diferente de..
    Ejemplos: a<b; a>=(d*r); z==y

    Operadores L?gicos.
    Permiten manejar y evaluar expresiones l?gicas.
    Operador Operaci?n L?gica
    ?
    &&
    || No (complemento)
    Y (AND)
    O (OR)


    Ejemplos: ?a-(a*d)&&(x+u)

    Operadores de Manipulaci?n de Bits.
    Estos operadores de tratamiento de bits (bitwise) ejecutan operaciones l?gicas sobre cada uno de los bits de los operandos. Esta operaciones son comparables en eficiencia y en velocidad a sus equivalentes en lenguaje ensamblador.
    Operador Operaci?n
    & Y (AND)
    | O (OR)
    ^ O (OR)
    ~
    <<
    >> L?gica bit a bit
    L?gica bit a bit
    L?gica bit a bit (OR exclusivo, XOR)
    Complemento a uno (inversi?n de todos los bits)
    Desplazamiento de bits a izquierda
    Desplazamiento de bits a derecha
    Ejemplo:
    83 = 0101 0011
    206= 1100 1100
    ________________________________________
    83^206= 1001 1101 =157


    Estructuras de Control en C
    Estas preposiciones de control de flujo especifican el orden en que se realizan el procesamiento de datos dentro de los programas.
    Hay Diferentes Tipos de Flujos de Control:
    ? Estructuras Secuenciales (goto).
    ? Estructuras Condicionales (if, switch)
    ? Estructuras Repetitivas (for, while, do-while).
    ? Estructuras de Salida (continue, break).


    Estructuras Secuenciales.
    El orden de Ejecuci?n es una despu?s de otra en el orden especificado.
    La sentencia GOTO tiene esta categor?a. Es una instrucci?n conocida en varios lenguajes cl?sicos de programaci?n, rompe la secuencia de ejecuci?n del programa bifurc?ndolo hasta el lugar indicado por la etiqueta, esta instrucci?n ha sido duramente criticada desde la aparici?n de la Programaci?n Estructurada ya que tiende a fomentar desorden en el programa, cosa que el Paradigma Estructurado tiende a eliminar. No obstante es indudable que su uso en algunas ocasiones no produce muchos problemas en la comprensi?n de los programas.
    goto salto;
    Salto: n++ ;


    Estructuras Condicionales.
    Estructuras formadas por 1 o mas bloques secuenciales que se inician y separan por una serie de palabras clave.


    1.- La instrucci?n IF es utilizada para tomar decisiones entre 2 o mas opciones, ejecutadas por el hecho de ser cierta o no las expresiones a la que refiere el IF.
    If (expresi?n)Preposici?n 1
    Else Preposici?n 2
    La construcci?n
    If (expresi?n_1) Preposici?n_1
    Else if (expresi?n_2)
    Preposici?n_2
    Else if (expresi?n_3)
    Preposici?n_3
    :
    Establece un bloque de sentencias con opciones m?ltiples.
    La sentencia if-else abreviada:
    Expresi?n_condicional ? Preposici?n_1: Preposici?n_2
    Que equivale a que si se cumple la expresi?n condicional se ejecuta la preposici?n 1 y en caso contrario la preposici?n 2.
    Ejemplo a>b ? printf("a es mayor a b") : printf ("a es menor a b")


    2.-La Instrucci?n SWITCH es de decisi?n m?ltiple que prueba si una expresi?n coincide con uno de un n?mero de valores constantes enteros y traslada el control adecuadamente.
    switch (expresi?n) {
    case expre_cte_1: preposici?n_1; break;
    case expre_cte_2: preposici?n_2; break;
    :
    default: preposici?n_n;
    }
    "expresi?n" devuelve un valor tipo entero o constante de car?cter. "expre_cte" es un numero o una constante car?cter. "break"es una orden imperativa de salida de bloque puesto que ya en ese momento se encontr? un valor que coincidi?. "default" indica que si no se cumple ninguna de las opciones se ejecuta la preposici?n por defecto. Esta instrucci?n de bloque switch es opcional, puede escribirse o no. "case" es la Etiqueta de 1 o mas valores de expresiones constantes.
    La diferencia entre la estructura de control SWITCH y el IF:
    ? El switch solo puede comprobar la igualdad.
    ? Las constantes de tipo car?cter se convierten autom?ticamente a enteros.
    ? No pueden existir 2 sentencias Case iguales en el mismo switch.
    El bloque switch es usado generalmente para la construcci?n de men?s en los programas.

    Estructuras Repetitivas.
    Estructuras formadas por 1 o mas bloques secuenciales cuya ejecuci?n se repite un n?mero definido de veces especificado por un numero ? variable.


    1.-La instrucci?n FOR cae en esta categor?a y tiene 3 formatos:
    for (inicializaci?n ; Condici?n ; Incremento)
    {
    preposiciones;
    }
    "Inicializaci?n" Normalmente es una sentencia de asignaci?n cuya variable se utiliza para el control del bucle.
    "Condici?n" es una condici?n relacional que determina cuando debe de finalizarse la ejecuci?n del bucle. "Incremento" define como varia la variable de control cada vez que se ejecuta el bucle. Deacuerdo a los valores de inicializaci?n, este incremento tambi?n puede ser decrementado.
    Eje 1:
    For (i=1 ; i<10 ; i++)
    {
    printf ("\n El numero es : %d \n", i );
    }
    Eje 2:
    For (i=100 ; i=1 ; i--)
    {
    printf ("\n El numero es : %d \n", i );
    }
    Cuando la estructura FOR inicia su ejecuci?n, la variable de inicializaci?n empieza en 1 (Eje 1) la cual solo se eval?a una sola vez, a continuaci?n se verifica la condici?n y mientras esta no se cumpla se ejecutaran las preposiciones, como paso siguiente la variable de inicializaci?n se modifica (increment?ndose o decrementandose) y el ciclo vuelve a empezar.


    2.-La instrucci?n WHILE en C tiene el siguiente formato.
    while( expresi?n_condicional)
    {
    preposiciones;
    }
    Indican que mientras la expresi?n condicional sea verdadera se llevan acabo las preposiciones. Dentro de las preposiciones de esta estructura se necesita que una de ellas sea la de modificar la variable (s) de la expresi?n condicional ya que si no se haria un bucle infinito. Si desde un principio la expresi?n condicional es falsa, las preposiciones no se ejecutaran ni una sola vez.


    3.-La instrucci?n DO-WHILE tiene la siguiente sintaxis:
    do
    {
    preposiciones;
    }
    while(expresi?n_condicional);
    En este caso las preposiciones se ejecutaran al menos una vez hasta que llegan a la comprobaci?n del bucle. El ciclo trabaja hasta que la expresi?n condicional se vuelve falsa, es decir, trabaja mientras la condici?n es cierta.


    Estructuras de Salida.
    Tienen como prop?sito salirse de ciclos y saltar sobre partes del c?digo del programa.


    1.-La instrucci?n BREAK interrumpe la ejecuci?n de un bucle while, do-while, y for
    while (cuenta<=100) {
    preposici?n_1;
    if (cuenta>5) break;
    preposici?n_2
    }
    preposici?n_3;


    2.-La instrucci?n CONTINUE se utiliza en bucles para saltar el resto del cuerpo del bucle, es decir, terminar la iteraci?n.
    For(x=1; x<=10; x++)
    {if(x==4)
    continue;
    printf ("\n %d ", x);
    }


    Estructura de los Programas en C
    Un Programa en C esta formado por 1 ? mas funciones que a su vez, contienen una serie de elementos propios. Una de las funciones que deben estar obligatoriamente presente en un programa C es el main. Una funci?n es un grupo de instrucciones que realizan una tarea especifica en el programa, as? mismo el programa tendr? que contener una serie de directivas de preprocesador ? archivos de cabecera escritos como # include<*.h> que son archivos de librer?as con extensi?n *.h que contienen la declaraci?n de variables y funciones que permiten el funcionamiento y compilaci?n de los programas.
    Un ejemplo sencillo podr?a ser:



    Una vez creado un programa en C como el anterior, se debe de ejecutar compil?ndolo, y esto depende claro esta, del compilador con el que trabaje, pero la siguiente gr?fica da los pasos generales para esto:

    Un Programa en C contiene varios Elementos que a continuaci?n de Explican:


    1.-Tokens.
    Existiendo 5 tipos de ellos:

    ? 1.1.-Identificadores. Secuencia de caracteres, letras, d?gitos y subrayados.
    ? 1.2.-Palabras Reservadas. Elementos que son utilizados por el lenguaje exclusivamente para sus procesos.


    Palabra Palabra Palabra Palabra
    Asm Double New Switch
    Auto Else Operator Template
    Break Enum Private This
    Case Extern Protcted Throw
    Catch Float Public Try
    Char For Register Typedef
    Class Friend Return Union
    Const Goto Short Unsigned
    Continue If Signed Virtual
    Default Inline Sizeof Void
    Delete Int Statc Volatile
    Do Long Struct while


    ? 1.3.-Comentarios.
    Tiene 2 formatos:
    // Este es un comentario
    /* Este es otro comentario */
    La diferencia entre ellos es que el comentario que empieza con // solo abarca a una l?nea y los /*.... */ se extienden a varias l?neas.


    ? 1.4.-Signos de Puntuaci?n.
    Todas las sentencias deben de terminar con un punto y coma ; . Otros signos de puntuaci?n son: ? % ^ & * ( ) - + = { } ~ [ ] \ ; ' : < > ?, . / "

    ? 1.5- Separadores.
    Son espacios en blanco, tabulaciones, retornos de carro y avances de l?nea.

    2.-Funciones.
    C utiliza en sus programas las funciones de Biblioteca que est?n declaradas en los archivos de cabecera (*.h), pero tambi?n utiliza las funciones definidas por el usuario. Las funciones tienen el prop?sito de realizar tareas especificas en el programa, las cuales no deben de llevar acabo mas de 1 trabajo, si no, es recomendable dividirla en otra funci?n, y adem?s no deben ser muy grandes por que entonces pierden legibilidad y eficiencia. Cuando una funci?n es llamada, el control se pasa a la misma para llevar acabo su tarea hasta que la termine, para despu?s regresar de nuevo el control al modulo que lo llamo. En C todas las funciones o son externas o globales. En todo programa una funci?n debe ser : Declarada, Definida y Llamado ? invocada.


    ? 2.1-La Declaraci?n de una funci?n representa su prototipo, y en C debe de estar declarada antes de utilizarla. El prototipo de una funci?n es su cabecera terminada en un punto y coma.
    Tipo nombre_funci?n(tipo_1 par_1, tipo_2 par_2 , ... );
    Int suma( int x , int y );
    Tipo: Especifica que tipo de variable devuelve la funci?n. Se puede establecer cualquier tipo de dato, pero generalmente es el int. nombre_funci?n : Identificador que representa a la funci?n, si el nombre va precedido de un * entonces la funci?n devuelve un apuntador. Una funci?n no devuelve arreglos o funciones. tipo_1 par_1, tipo_2 par_2 , ... : Son llamados Par?metros o argumentos y son las variables que recibe la funci?n cada vez que es invocada. Si no se pasan argumentos a la funci?n, entonces esta l?nea se sustituye por la palabra clave void. La definici?n de las variables en C pueden estar situadas en cualquier parte del programa con la condici?n de preceder a las instrucciones que las utilizan. Los prototipos suelen situarse encima de la funci?n main().


    ? 2.2-La Definici?n de la funci?n consiste en escribir las instrucciones o tarea a realizar dentro del programa, la cual debe de estar en alguna parte del mismo.



    Dentro de la definici?n de las funciones, existe mucho la instrucci?n "return" la cual tiene 2 funciones:
    ? 1.-Salir de la funci?n y regresar el control a la parte de c?digo que la llamo.
    ? 2.-Devolver un valor acorde con el tipo que se ha indicado al declarar la funci?n.
    La instrucci?n void es tambi?n empleada para definir que una funci?n no devolver? ning?n valor

    ? 2.3- El llamado de una funci?n, en el lenguaje C es transferir el control a esa funci?n. Cuando se llama a esa funci?n, se proporciona un nombre de funci?n y una lista de par?metros, si es que los hay. Cuando se llama a una funci?n se realizan los siguientes pasos:
    ? 2.3.1-El compilador toma nota de la localizaci?n desde donde se llam? la funci?n y hace una copia de la lista de par?metros en caso de haberlos.
    ? 2.3.2-Se crea temporalmente cualquier espacio de almacenamiento que se requiere para ejecutar la funci?n.
    ? 2.3.3-Comienza la ejecuci?n de la funci?n que se llama, usando copias de los datos que se proporcionaron en la lista de par?metros.
    ? 2.3.4-Despues de que la funci?n termina la ejecuci?n, se regresa el control a la funci?n que la llamo y se libera memoria que se us? para la funci?n.
    ?
    La llamada a una funci?n tiene el siguiente formato:
    Variable = expresi?n(par?metros actuales);
    Variable: Especifica la variable en donde se guardara el valor devuelto por la funci?n.
    Expresi?n : Especifica una direcci?n a una funci?n. Puede ser una expresi?n que es evaluada a una direcci?n de una funci?n ? simplemente un identificador que corresponde con el nombre de la funci?n llamada.
    Par?metros actuales : Son una lista de expresiones separadas por comas. Los valores resultantes son pasados a la funci?n y asignados a sus correspondientes par?metros formales. El numero de expresiones en la lista debe ser igual al n?mero de par?metros formales y del mismo tipo.
    Ejemplos:
    ? if(suma(13,45)<=0)
    ? y=calcular(21,78,90);
    Otra manera de llamar a las funciones es por el Paso de Par?metros, si tenemos la siguiente funci?n:

    La llamada a la funci?n seria: factorial (15); y se calcular?a el correspondiente numero factorial del n?mero 15 por que ese es el valor par?metro que le damos.
    Un ejemplo completo de esto quedar?a de la siguiente manera, observe la manera en que se mandan llamar la funci?n:




    Una Consideraci?n especial que se tiene que estudiar es a la funci?n main(), tan importante en la programaci?n en C, ya que es una funci?n que engloba todo el coraz?n del programa en si, adem?s de que es muy ?til para hacer mas funcional a los programas y en el siguiente punto se estudiara.
    ? 2.4 "argc y argv" Argumentos o Par?metros de la funci?n main(). Algunas veces es de gran utilidad pasarle informaci?n al programa escrito en C cuando tu lo corres, y generalmente le pasas informaci?n al programa a la funci?n main() v?a Argumentos en l?nea de Comandos. Un argumento en l?nea de comandos es la informaci?n que sigue del nombre del programa en la l?nea de comandos en el sistema operativo. Hay 2 argumentos especiales que lo implementan argc y argv, estos son usados para recibir la informaci?n. El par?metro argc contiene el numero de argumentos en la l?nea de comandos y es un entero, es siempre por lo menos 1 por que el nombre del programa se considera como el primer argumento. El par?metro argv es un puntero a un arreglo de punteros de tipo car?cter. Cada elemento en este arreglo de punteros corresponde a un argumento en l?nea de comandos. Todos los argumentos en l?neas de comandos son strings.
    Por ejemplo, este simple programa imprime "Hola" y tu nombre en la pantalla si tu tecleas tu nombre despu?s del nombre del programa.

    Se debe de declarar apropiadamente a argv y la forma mas com?n de hacerlo es: char *argv[ ] ;
    Los corchetes vac?os significa que el arreglo es de una longitud indeterminada, y se puede accesar a los argumentos de manera indexada, es decir, argv[0] tiene el primer argumento, argv[1] tiene al segundo argumento y as? continua.
    Otro ejemplo simple de esta manera de manejo de informaci?n con la funci?n main() es el siguiente, llamado countdown.c :
    El programa cuenta de forma descendente desde un valor dado (el cual es especificado en la l?nea de comandos DOS), y suena en la computadora un beep (es decir un peque?o sonido) cuando llega al cero. Como todo argumento en las l?neas de comandos son strings, se debe de convertir el argumento a entero con la funci?n atoi(), y observen que si se da un segundo argumento o par?metro al programa llamado display entonces se imprimir? el conteo regresivo en la pantalla si no, no lo har?.

    Usualmente se utilizan a argc y argv para obtener comandos iniciales a tu programa, en teor?a se pueden tener 32,767 par?metros, pero la mayor?a de los sistemas operativos no te permiten mas que unos pocos. Normalmente el uso de estos argumentos es para dar nombres de archivos u opciones al programa. El uso de par?metros en l?neas de comandos dar? a tus programas mas profesionalismo y facilidades para el uso de archivos batch.
    Cuando un programa en C no requiere de par?metros en l?neas de comandos, es practica com?n especificar a la funci?n main() con la instrucci?n void dentro de la lista de par?metros de la misma funci?n main(), es decir : main(void) ? simplemente dejar vac?o este espacio de par?metros es otra opci?n valida. Los nombres argc y argv son los nombres comunes para estos par?metros pero se le pueden poner los nombres que se deseen (no cambiando los tipos). Tambi?n algunos compiladores pueden soportar argumentos adicionales pero aseg?rate checando el manual de usuario.


    3.-Alcance de las Variables.
    Hasta ahora se ha visto la declaraci?n de las variables, es decir, la descripci?n de un tipo de variable o atributo. Sin embargo restan 2 problemas importantes que deben de discutirse: ?Hasta que punto una variable est? asociada con un almacenamiento real (esto es asignaci?n de memoria)?, y ?Hasta que punto puede referirse a una variable particular un programa (esto es, cual es el alcance de las variables)?. En C, se conocen a las variables y par?metros que se declaran dentro de una funci?n como variables autom?ticas. A ?stas se les asigna memoria cuando se llama a la funci?n. Cuando termina la ejecuci?n de la funci?n, se pierde la asignaci?n. Por ello las variables autom?ticas existen solo cuando esta activa la funci?n. Adem?s se dice que las variables autom?ticas son Locales a la funci?n. Es decir, las variables autom?ticas se conocen s?lo dentro de la funci?n donde est?n declaradas y otra funci?n no puede referirse a ellas. Las variables autom?ticas (es decir, par?metros en el encabezado de una funci?n o variables locales que siguen de inmediato a cualquier llave de apertura) pueden declararse dentro de cualquier bloque y existen hasta que ?ste se acaba. Puede referirse a la variable atraves de todo el bloque a menos que el identificador de la misma se declare de nuevo en un bloque interno. Dentro del bloque interno, una referencia al identificador es una referencia a la declaraci?n m?s interna y no puede hacerse referencia a las variables de afuera. La segunda clase de variables en C es la de las variables Externas. A las variables que se declaran fuera de cualquier funci?n se les asigna almacenamiento en el primer punto de donde se les encuentra y existen para el resto de la ejecuci?n del programa. El alcance de una variable externa va desde el punto en que se declaran hasta el final del archivo fuente que lo contiene. Todas las funciones del archivo fuente pueden referirse a este tipo de variable que est?n m?s all? de su declaraci?n y, en consecuencia, se dice que son Globales para dichas funciones.


    4.- Recursividad.
    Esta es la propiedad que tienen las funciones en C++ de poder llamarse a si mismas. Una funci?n recursiva necesita de una condici?n de Salida. El t?pico problema es el del calculo del factorial de un n?mero:



    5.- Directivas de Preprocesador.
    Instruyen al compilador para que realice ciertas tareas antes de que la compilaci?n del programa se active. La directiva mas com?n es "#include" que le indica al preprocesador que incluya otro archivo fuente C durante el proceso de compilaci?n, y otra t?pica es "#define" que es una definici?n de macros. Es una libertad del programador en C poder crear sus propias librer?as con extensi?n *.h y luego incluirlas de manera general en sus programas con la directiva #include. Como se ha mencionado anteriormente, los archivos de las directivas #include contienen la declaraci?n de variables y funciones ?tiles para los programas en C, las mas comunes (por que es un total de 450 funciones y macros) se muestran en la sig. Tabla:
    Librer?a Descripci?n
    Conio.h Permite definir coordenadas de una ventana de texto en pantalla y manipular texto.
    Ctype.h Declara funciones para la comprobaci?n de caracteres.
    Float.h Define constantes relacionadas con la aritmetica de punto flotante
    Graphic.h Permite la manipulaci?n de Graficos
    Limits.h Define constantes para el tama?o de los tipos de enteros
    Math.h Declara funciones y macros matematicas
    Setjmp.h Proporciona una forma de evitar la secuencia normal de llamada y regreso de funciones.
    Signal.h DA facilidades para manejar condiciones excepcionales que aparecen durante la ejecuci?n
    Stdio.h Permite leer y escribir datos de archivos y dispositivos
    Sdlib.h Declara fucniones para conversi?n n?merica, asignaci?n de memoria.
    String,h Devclara funciones para manipular cadenas como arreglos de caracteres.
    Time.h Declara funciones para la manipulaci?n de fecha y hora.
    Alloc.h Declara funciones para el manejo de la memoria.
    Por ejemplo, en el siguiente programa se imprimir?n cadena de caracteres en la pantalla:

    printf() es una de las funciones de Salida de caracteres que esta definida en #include<stdio.h>, si yo no incluyera esta librer?a en el programa habr?a error en la compilaci?n, y as? cada librer?a *.h tiene definidas una serie de funciones especificas.





    El Archivo de Cabecera Stdio.h
    Cuando nos referimos a entrada/salida est?ndar (E/S est?ndar) queremos decir que los datos o bien se est?n leyendo del teclado, ? bien se est?n 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. Esto le quedar? claro a lo largo de este cap?tulo. El primer c?digo es el siguiente:

    #include <stdio.h> /* define entrada/salida estandar */
    int main()
    {
    int c;
    printf("Introduzca cualquier caracter y presione enter,"
    "X = termina el programa.\n");
    do
    {
    c = getchar(); /* Toma un caracter del teclado */
    putchar(c); /* Despliega el caracter en el monitor */
    }
    while (c != 'X'); /* Mientras que sea diferente de X */
    printf("\nFin del programa.\n");
    return 0;
    }


    La primera cosa por estudiar la tenemos en la primera l?nea. La instrucci?n #include <stdio.h> es muy parecida a la instrucci?n #define que ya hemos estudiado excepto que en lugar de una simple sustituci?n se lee todo un archivo en este punto. El sistema encontrar? el archivo llamado stdio.h y leer? la totalidad del contenido reemplazando la instrucci?n #include stdio.h. Obviamente el archivo debe contener enunciados v?lidos de C que pueden ser compilados como parte del programa. Este archivo en particular contiene varias definiciones y prototipos para las operaciones de E/S est?ndar. El archivo es llamado archivo de cabecera y su compilador incluye una gran variedad de ellos, cada uno con un prop?sito espec?fico y cualquiera de ellos puede ser incluido en cualquier programa. El compilador C utiliza el s?mbolo de doble comilla para indicar que la b?squeda del archivo include empieza en el directorio actual de trabajo, y si no se encuentra ah?, la b?squeda continuar? en el directorio include tal y como est? especificado en el ambiente de su compilador. Adem?s se utilizan los s?mbolos de "menor que" y "mayor que" para indicar que la b?squeda empieza directamente en el directorio include del compilador. Se pueden utilizar tantos include como sea necesario, y es perfectamente v?lido que un archivo de cabecera incluya uno o m?s archivos de cabecera adicionales. Comprender? a su vez que cuando escriba programas largos, es posible incluir ciertas rutinas comunes en un archivo de cabecera e incluir el mismo como ya se ha descrito.
    Continuando con el c?digo de ejemplo. Se define la variable llamada c y se despliega un mensaje en pantalla con la y? conocida funci?n printf ( ), entramos en un bucle que no termina sino hasta que el caracter introducido sea una X may?scula, dentro del bucle nos encontramos con dos nuevas funciones, una que sirve para leer un caracter desde el teclado y otra que despliega dicho caracter en pantalla. La funci?n getchar ( ) lee un solo caracter desde el dispositivo est?ndar de entrada, o sea, el teclado, y lo asigna a la variable llamada c. La siguiente funci?n llamada putchar ( ) utiliza el dispositivo de salida est?ndar, es decir, el monitor de video, para desplegar el caracter contenido en c. El caracter se despliega en la posici?n actual del cursor y ?ste avanza un espacio para el siguiente caracter, por lo tanto el sistema se ocupa del orden de despliegue de los caracteres.
    Compile y ejecute este programa para descubrir algunas caracter?sticas adicionales, como el hecho que conforme escriba en el teclado, lo escrito se despliega en el monitor y al presionar la tecla enter se repite la l?nea completa de texto, tal parece que memoriza los caracteres y luego los vuelve a deplegar.




    El Sistema Operativo a Nuestra Ayuda
    Es conveniente dar una breve explicaci?n de c?mo trabaja el sistema operativo para entender lo que pasa.
    Cuando se leen datos desde el teclado bajo el control del sistema operativo, los caracteres se almacenan en un buffer (segmento de memoria RAM temporal) hasta que se introduce un retorno de carro momento en el cual la totalidad de los caracteres se devuelven al programa. Cuando se teclean los caracteres, ?stos son mostrados en pantalla uno a la vez. A ?sto se le llama eco, y sucedeo en muchas de las aplicaciones que Usted corre en su computadora. Para demostrar lo dicho en el programa anterior, teclee una serie continua de caracteres tal que contenga una X may?scula, ver? que conforme vaya te
     
  2. Rik

    RikardO
    Expand Collapse
    Teniente Coronel
    Usuario destacado

    Mensajes:
    1.388
    Me Gusta recibidos:
    0
    Re xumas.. aun nu me enseñan eso.. :S
     

Compartir esta página