martes, 10 de agosto de 2010

CODIGOS HERNCIA ,CONSTRUCTOR DESTRUCTOR


Realizar un programa donde se utilice una clase, donde se aplique la herencia










Realizar un programa donde se utilice una clase, de debe utilizar un constructor y un destructor












































miércoles, 4 de agosto de 2010

UNIDAD 7 ARCHIVOS

7.1 Clases de E/S clase base abstracta


La clase base abstracta Stream es compatible con bytes de lectura y escritura. Stream tiene compatibilidad asincrónica. Sus implementaciones predeterminadas definen lecturas y escrituras asincrónicas según sus correspondientes métodos asincrónicos, y viceversa.Todas las clases que representan secuencias se derivan de la clase Stream. La clase Stream y sus clases derivadas proporcionan una visión genérica de los orígenes de datos y los repositorios, aislando al programador de los detalles específicos del sistema operativo y sus dispositivos subyacentes.





7.2 realizar entrada y salida de texto



La función fopen() abre una secuencia para que pueda ser utilizada y le asocia a un archivo. Su prototipo es: FILE *fopen(const char *nombre_archivo, const char *modo); Donde nombre_archivo es un puntero a una cadena de caracteres que representan un nombre válido del archivo y puede incluir una especificación de directorio. La cadena que apunta modo determina cómo se abre el archivo.
La función fclose() cierra una secuencia que fue abierta mediante una llamada a fopen(). Escribe toda la información que todavía se encuentre en el buffer del disco y realiza un cierre formal del archivo a nivel del sistema operativo. También libera el bloque de control de archivo asociado con la secuencia, dejándolo libre para su reutilización. A veces es necesario cerrar algún archivo para poder abrir otro, debido a la existencia de un límite del sistema operativo en cuanto al número de archivos abiertos. Su prototipo es: int fclose(FILE *fp);
La función putc() escribe caracteres en un archivo que haya sido abierto previamente para operaciones de escritura, utilizando la función fopen(). Su prototipo es: int putc(int car, FILE *pf);



7.3 leer y escribir archivos



Leer archivos: Ifstream
Proporciona una interfaz para leer datos de archivos como flujos de entrada.
Los objetos de esta clase tratan de mantener internamente un puntero a un objeto filebuf que se pueden obtener llamando a rdbuf miembros.
El archivo que se asocia con la corriente puede ser especificado como un parámetro en el constructor o llamando a los miembros abierta.
Después de todas las operaciones necesarias en un archivo se han realizado, puede ser cerrado (o disociada) llamando a cerrar miembros. Una vez cerrado, el mismo objeto de secuencia de archivo puede ser usado para abrir otro archivo.
Escribir archivos: Oistream
Proporciona una interfaz para escribir datos en archivos como los flujos de salida.
Los objetos de esta clase de mantener internamente un puntero a un objeto filebuf que se pueden obtener llamando a rdbuf miembros.
El archivo que se asocia con la corriente puede ser especificado como un parámetro en el constructor o llamando a los miembros abierta.

7.4 realizar entrada y salida binaria



Muchos sistemas operativos distinguen entre ficheros de texto y ficheros binarios. Por ejemplo, en MS-DOS, los ficheros de texto sólo permiten almacenar caracteres.En otros sistemas no existe tal distinción, todos los ficheros son binarios. En esencia esto es más correcto, puesto que un fichero de texto es un fichero binario con un rango limitado para los valores que puede almacenar.



Hay tres descriptores de fichero predefinidos: 0 entrada estándar 1 salida estándar 2 salida de errores estándar.

UNIDAD 6 POLIMORFISMO

6.1 concepto de polimorfismo



El concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de funciones polimórficas y tipos polimórficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está especificado.



Se puede clasificar el polimorfismo en dos grandes clases:
Polimorfismo dinámico: (o polimorfismo ad hoc) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.
Polimorfismo estático: (o polimorfismo paramétrico) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados. El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica.



6.2 clase base abstracta






Una clase abstracta, o clase base abstracta (ABC), es una que está diseñada sólo como clase padre de las cuales se deben derivar clases hijas. Una clase abstracta se usa para representar aquellas entidades o métodos que después se implementarán en las clases derivadas, pero la clase abstracta en sí no contiene ninguna implementación solamente representa los métodos que se deben implementar. Por ello, no es posible instanciar una clase abstracta, pero sí una clase concreta que implemente los métodos definidos en ella.
Las clases abstractas son útiles para definir interfaces, es decir, un conjunto de métodos que definen el comportamiento de un módulo determinado. Estas definiciones pueden utilizarse sin tener en cuenta la implementación que se hará de ellos.






6.3 subprogramas virtuales



Las funciones virtuales permiten que clases derivadas de una misma base (clases hermanas) puedan tener diferentes versiones de un método. Se utiliza la palabra-clave virtual para avisar al compilador que un método será polimórfico y que en las clases derivadas existen distintas definiciones del mismo.
Para declarar que un método de una clase base es virtual, su prototipo se declara como siempre, pero anteponiendo la palabra-clave virtual, que indica al compilador algo así como: "Será definido más tarde en una clase derivada". Ejemplo:Sintaxis: virtual void dibujar();Una función virtual o método virtual es una función cuyo comportamiento, al ser declarado "virtual", es determinado por la definición de una función con la misma cabecera en alguna de sus subclases. Este concepto es una parte muy importante del polimorfismo en la POO.El concepto de función virtual soluciona los siguientes problemas:En POO, cuando una clase derivada hereda de una clase base, un objeto de la clase derivada puede ser referido tanto como del tipo de la clase base como del tipo de la clase derivada. Si hay funciones de la clase base redefinidas por la clase derivada, aparece un problema cuando un objeto derivado ha sido cohercionado como del tipo de la clase base.




6.4 destructores virtuales




Como cualquier otra función miembro, los destructores pueden ser declarados virtuales. El destructor de una clase derivada de otra cuyo destructor es virtual, también es virtual.La existencia de un destructor virtual permite que un objeto de una subclase pueda ser correctamente destruido por un puntero a su clase-base.





domingo, 1 de agosto de 2010

UNIDAD 5 HERENCIA

5.1 Importancia de la herencia en la POO
El mecanismo de herencia es uno de los pilares fundamentales en los que se basa la programación orientada a objetos. Es un mecanismo que permite definir nuevas clases a partir de otras ya definidas de modo que si en la definición de una clase indicamos que ésta deriva de otra, entonces la primera -a la que se le suele llamar clase hija- será tratada por el compilador automáticamente como si su definición incluyese la definición de la segunda –a la que se le suele llamar clase padre o clase base.
5.2 Jerarquía de herencia



La Jerarquía es una propiedad que permite la ordenación de las abstracciones

Las jerarquías de herencia son más fáciles de implementar que de diseñar, por lo que es arriesgado comenzar a codificar antes de identificar claramente las necesidades. La corrección de errores de diseño en una jerarquía de clases tras la implementación puede requerir cambios que deshabilitan las aplicaciones existentes. En esta sección se explican consideraciones del diseño de jerarquía de herencia y se proporciona información que ayuda a evitar estos errores.


En una jerarquía de herencia, la regla de dominio se emplea para resolver ambigüedades. Si una clase base y
una clase derivada tienen un miembro con el mismo nombre, el que esté en la clase derivada es el dominante.

5.2.1 Conceptos de Herencia simple y múltiple
Herencia Simple La herencia en C++ es un mecanismo de abstracción creado para poder facilitar, y mejorar el diseño de las clases de un programa. Con ella se pueden crear nuevas clases a partir de clases ya hechas, siempre y cuando tengan un tipo de relación especial. En la herencia, las clases derivadas “heredan” los datos y las funciones miembro de las clases base, pudiendo las clases derivadas redefinir estos comportamientos (polimorfismo) y añadir comportamientos nuevos propios de las clases derivadas.
5.2.2 Principios generales de diseño de jerarquías.
Las jerarquías se definen desde lo general a lo específico. Defina las clases en cada nivel de una jerarquía de herencia de la forma más genérica posible. Las clases derivadas pueden heredar, reutilizar y extender métodos de clases base.
Defina los tipos de datos y el almacenamiento con generosidad a fin de evitar cambios difíciles posteriormente. Por ejemplo, podría considerar el uso de una variable de tipo Long aunque los datos actuales sólo requieran una variable estándar Integer.

Exponga sólo los elementos que las clases derivadas necesiten. Los campos y métodos Private reducen los conflictos de denominación y protegen a otros usuarios del uso de elementos que pueden necesitar cambios posteriormente

Los miembros que sólo sean necesarios para las clases derivadas deben marcarse como Protected. Esto garantiza que sólo las clases derivadas dependen de estos miembros y facilita la actualización de estos miembros durante el desarrollo.

Asegúrese de que los métodos de clase base no dependen de miembros Overridable cuya funcionalidad pueden cambiar las clases herederas. Existen dos tipos de jerarquizar: La primera consiste en derivar una clase de otra, es el caso mas habitual y se llama “Herencia”.
5.2.3 Especificadores de acceso a jerarquía de clases.


Los especificadores de acceso a la clase base definen los posibles tipos de derivación: public, private y protected. El tipo de acceso a la clase base especifica cómo recibirá la clase derivada a los miembros de clase base. Si no se especifica un acceso a la clase base, C++ supone que su tipo de herencia es privado. Los accesos a la clase base pueden ser:

public: Los miembros públicos de la clase base son miembros públicos de la clase derivada. Los miembros protegidos de la clase base son miembros protegidos de la clase derivada. Los miembros privados de la case base permanecen privados a la clase derivada.
private: Todos los miembros públicos y protegidos de la clase base son miembros privados de la clase derivada. Los miembros privados de la clase base permanecen privados a la clase derivada.
protected: todos los miembros públicos y protegidos de la clase base son miembros protegidos de la clase derivada. Los miembros privados de la clase base permanecen privados a la clase derivada.
5.3 Definición de una clase base



La clase base define todas las cualidades que serán comunes a cualquier clase derivada. Otro punto importante es el acceso a la clase base. El acceso a la clase base pude tomar 3 valores, public, private y protected.
Si el acceso es public, todos los atributos de la clase base son públicos para la derivada.

Si el acceso es private, los datos son privados para la clase base la derivada no tiene acceso.

Si el acceso es protected, datos privados para la base y derivada tiene acceso, el resto sin acceso.





5.4 Definición de una clase derivada


En la clase derivada se define una función que tiene el mismo nombre y los mismos parámetros que la de la clase base. Se dice que redefinimos la función mostrar en la clase derivada. La función miembro mostrar de la clase derivada VentanaTitulo hace una llamada a la función mostrar de la clase base Ventana, mediante




Una clase derivada hereda la función miembro de su clase base. Esto significa que se hereda la capacidad para llamar a funciones miembro de la clase base en los objetos de la clase derivada.
Los siguientes elementos de la clase no se heredan:
- Constructores
- Destructores
- Funciones amigas
- Funciones estáticas de la clase
- Datos estáticos de la clase
- Operador de asignación sobrecargado








5.4.1 Constructores y destructores de clases derivadas






El caso de los constructores es un poco especial. Se ejecutan en orden descendente, es decir primero se realiza el constructor de la clase base y luego el de las derivadas. En las destructoras ocurre en orden inverso, primero el de las derivadas y luego el de la base.




Destructores en clases derivadas Cuando remueve de la memoria un objeto de una clase derivada, el recolector de basura invoca al destructor del objeto. Esto inicia una cadena de invocaciones a destructores, en donde el destructor de la clase derivada y los destructores de las clases bases directas e indirectas se ejecutan en orden inverso al que se ejecutaron los constructores, esto es, primero se ejecuta el destructor de la clase derivada y al final se ejecuta el destructor de la clase base ubicada en el nivel superior de la jerarquía. La ejecución de los destructores debe liberar todos los recursos que el objeto adquirió, antes de que el recolector de basura reclame la memoria de ese objeto. Cuando el recolector de basura invoca al destructor de un objeto de una clase derivada, ese destructor realiza su tarea y después invoca al destructor de la clase base. El proceso se repite hasta que se invoca al destructor de la clase Object.






5.4.2 Conversión implícita de objetos de clase derivada a objeto de clase base




La programación orientada a objetos extiende los tipos abstractos de datos permitiendo relaciones tipo-subtipo. Esto es alcanzado a través de un mecanismo denominado herencia. Más que reimplementar características compartidas, una clase puede heredar datos y funciones miembros de otras clases. En C++, este mecanismo es implementado a través de la derivación de clases.







5.5 Herencia múltiple



Es una propiedad que permite que los objetos sean creados a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes. Es la relación entre una clase general y otra clase más específica. Es un mecanismo que nos permite crear clases derivadas a partir de clase base, nos permite compartir automáticamente métodos y datos entre clases, subclases y objetos.



Existen dos métodos en los que una clase derivada puede heredar más de una clase base. El primero, en el que una clase derivada puede ser usada como la clase base de otra clase derivada, creándose una jerarquía de clases. El segundo, es que una clase derivada puede heredar directamente más de una clase base. En esta situación se combinan dos o más clases base para facilitar la creación de la clase derivada.




UNIDAD 4 Clases y Objetos

Clases y Objetos







4.1 Definición de una clase




son atributos o funciones con las que se pueden realizar los procedimientos con diferente valor.



Una clase es un tipo de dato que contiene uno o más elementos dato llamados miembros dato, y cero, una o más funciones que manipulan esos datos (llamadas funciones miembro).




Las clases se definen en C++ mediante una construcci´on
class dividida en dos partes: una parte privada (private) que contiene algunos detalles
de la implementaci´on, y una parte p´ublica (public) que contiene todo el interfaz.
class NombreClase {
private:
// implementacion de la clase
// solamente los atributos
public:
// interfaz de la clase
};





4.2 Declaración de clases.




La lista de clases base se usa para derivar clases, de momento no le prestes demasiada
atención, ya que por ahora sólo declararemos clases base.
La lista de miembros será en general una lista de funciones y datos.
Los datos se declaran del mismo modo en que lo hacíamos hasta ahora, salvo que no
pueden ser inicializados, recuerda que estamos hablando de declaraciones de clases y no
de definiciones de objetos. En el siguiente capítulo veremos el modo de inicializar las
variables de un objeto.
Las funciones pueden ser simplemente declaraciones de prototipos, que se deben definir
aparte de la clase o también definiciones.






class nombre_clase


{


miembro1;


miembro2;...


funcion_miembro1();


funcion_miembro2();


...


};




4.3 Miembros de una clase


A los miembros de una clase se accede de igual forma que a los miembros de una estructura. Existen dos métodos para acceder a un miembro de una clase: el operador punto (.) y el operador flecha (->) que actúan de modo similar.


Función miembro es aquella que está declarada en ámbito de clase. Son similares a las funciones habituales, con la salvedad de que el compilador realizara el proceso de Decoración de nombre (Name Mangling en inglés): Cambiara el nombre de la función añadiendo un identificador de la clase en la que está declarada, pudiendo incluir caracteres especiales o identificadores numéricos. Además, las funciones miembro reciben implícitamente un parámetro adicional.



4.4 Ámbito referente a una clase
Una clase actúa como cualquier otro tipo de dato con respecto al ámbito. Todos los miembros de una clase se dice que están en el ámbito de esa clase; cualquier miembro de una clase puede referenciar a cualquier otro miembro de la misma clase.
Las funciones miembro de una clase tienen acceso no restringido a los miembros dato de esa clase. El acceso a los miembros dato y funciones de una clase fuera del ámbito de la clase está controlado por el programador. La idea es encapsular la estructura de datos y funcionalidad de una clase, de modo que el acceso a la estructura de datos de la clase desde fuera de las funciones miembro de la clase, sea limitada o innecesaria.

4.5 Especificadores de acceso
Los especificadores de acceso permiten acceder a algunos miembros de la clase y restringir el acceso a otros. Hay tres especificadores de acceso en C++: public, private y protected. Cuando usted declara público ( public) un miembro de una clase, usted permite el acceso a tal miembro desde dentro y fuera de la clase. Los miembros de datos que son declarados protegidos ( protected ) son únicamente accesibles por funciones miembro de la clase, pero no se pueden acceder a ellos desde otras clases. Cuando un miembro de una clase es declarado privado ( private ) es ináccesible no sólo desde otras clases y otras partes del programa, sino también desde sus clases derivadas. Las clases derivadas se explicara posteriormente.

4.6 Creación de objetos

La base del encapsulamiento es la clase, a partir de ellas se le dan las características y comportamiento a los objetos. Lo primero es crear la clase y después en la función main que sigue siendo la principal crearemos los objetos de cada una de las clases. Las variables y funciones de una clase pueden ser publicas, privadas o protegidas. Por defecto si no se indica nada son privadas.
Estos modificadores nos indican en que partes de un programa podemos utilizar las funciones y variables.private: Solo tendrán acceso los de la misma clase donde estén definidos.public: Se pude hacer referencia desde cualquier parte del programa.protected: Se puede hacer referencia desde la misma clase y las subclases.

4.7 Puntero this.


Para cada objeto declarado de una clase se mantiene una copia de sus datos, pero todos
comparten la misma copia de las funciones de esa clase.
Esto ahorra memoria y hace que los programas ejecutables sean más compactos, pero
plantea un problema.
Cada función de una clase puede hacer referencia a los datos de un objeto, modificarlos
o leerlos, pero si sólo hay una copia de la función y varios objetos de esa clase, ¿cómo
hace la función para referirse a un dato de un objeto en concreto?
La respuesta es: usando el puntero this. Cada objeto tiene asociado un puntero a si
mismo que se puede usar para manejar sus miembros.







4.8 Constructores y destructores.


Los constructores son funciones miembro especiales que sirven para inicializar un
objeto de una determinada clase cuando se declara.
Los constructores tienen el mismo nombre que la clase, no retornan ningún valor y no
pueden ser heredados. Además deben ser públicos, no tendría ningún sentido declarar
un constructor como privado, ya que siempre se usan desde el exterior de la clase, ni
tampoco como protegido, ya que no puede ser heredado.


Si una clase posee constructor, será llamado siempre que se declare un objeto de esa
clase, y si requiere argumentos, es obligatorio suministrarlos.







Los destructores son funciones miembro especiales llamadas automáticamente en la ejecución del programa, y por tanto no tienen por qué ser llamadas explícitamente por el programador. Sus principales cometidos son:
Liberar los recursos computacionales que el objeto de dicha clase haya adquirido en tiempo de ejecución al expirar éste.
Quitar los vínculos que pudiesen tener otros recursos u objetos con éste.
Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del ámbito en el que está declarado el objeto. El único caso en el que se debe invocar explícitamente al destructor de un objeto, es cuando éste fue creado mediante el operador new, es decir, que éste vive en memoria heap, y no en la pila de ejecución del programa. La invocación del destructor de un objeto que vive en heap se realiza a través del operador delete o delete[] para arreglos.

lunes, 26 de julio de 2010















































CODIGOS ARREGLOS














CODIGOS UNIDAD 3

LINK DE COGIGOS DE LA UNIDAD III


http://www.megaupload.com/?d=JRVY78ON

UNIDAD 3

UNIDAD III ARREGLOS





3.Punteros Referencias Y Arreglos Creación



Los punteros permiten simular el paso por referencia, crear y manipular estructuras dinamicas de datos, tales como listas encadenadas, pilas, colas y árboles. Generalmente las variables contienen valores especificos. Los punteros son variables pero en vez de contener un valor especifico, contienen las direcciones de las variables a las que apuntan. Para obtener o modificar el valor de la variable a la que apuntan se utiliza el operador de indirección. Los punteros, al ser variables deben ser declaradas como punteros antes de ser utilizadas.


La declaración de punteros utiliza un asterisco *, que en este caso actúa como calificador de tipo, en una sintaxis muy parecida a la utilizada en la declaración de objetos normales.
Ejemplos:
int * ptr; // declara ptr puntero a entero (int)
void * ptr; // declara ptr puntero a void (genérico)
char * ptr; // declara ptr puntero a carácter (char)


Los punteros siguen las reglas de creación y destrucción del resto de las variables, sin embargo hay que recordar que los objetos tienen duración independiente de los posibles que los señalan, de forma que cuando un puntero-a-objeto sale de ámbito, no se invoca implícitamente ningún destructor para el objeto señalado. A la inversa, la destrucción del objeto señalado no supone necesariamente la destrucción de los punteros que los referencian.

Puntero-constante: El puntero es constante; el objeto señalado podríavariar, pero el valor del puntero -dirección de memoria que señala- no. Estosignifica que está indefectiblemente ligado a un mismo objeto.










3.2 Operaciones Con Punteros Apuntadores


Un puntero es un tipo de dato similar a un entero, y hay un conjunto de operaciones definidas para punteros:
La suma o resta de un entero produce una nueva localización de memoria.
Se pueden comparar punteros, utilizando expresiones lógicas, para ver si están apuntando o no a la misma dirección de memoria.
La resta de dos punteros da como resultado el número de variables entre las dos direcciones.




ejemplo de utilización de punteros:

1.include
main() {

int vector[3];
int* princPunt = vector;

int* finPunt = &vector[2];

vector[2] = 15;
cout << *(princPunt+2) << ‘\t’ << *finPunt <<’\n’; if (princPunt == finPunt) cout << “ Esto no puede suceder “ << ‘\n’; cout << “Numero de elementos \t” < [];

Cuando declaremos una cadena hay que tener en cuenta que tendremos que reservar una posición para almacenar el carácter nulo, de modo que si queremos almacenar.






3.3 Referencias Programacion


Una referencia (&) es como un puntero constante que se destruye automáticamente. Normalmente se utiliza en la lista de argumentos y en el valor de retorno de una función. Pero también se puede hacer una referencia que apunte a algo que no ha sido asignado.


Referencias en las funciones El lugar más común en el que verá referencias es en los argumentos y valor de retorno de las funciones. Cuando se utiliza una referencia como un argumento de una función, cualquier cambio realizado en la referencia dentro de la función se realizará realmente sobre en el argumento fuera de la función. Por supuesto que podría hacer lo mismo pasando un puntero como argumento, pero una referencia es sintácticamente más clara. (Si lo desea, puede pensar que una referencia es, nada más y nada menos, sintácticamente más conveniente.)






3.4 Arreglos Unidimensionales Bidimensionales Y Multidimensionales



Los arreglos son una colección de variables del mismo tipo que se referencian utilizando un nombre común. Un arreglo consta de posiciones de memoria contigua. La dirección más baja corresponde al primer elemento y la más alta al último. Un arreglo puede tener una o varias dimensiones Para acceder a un elemento.



El formato para declarar un arreglo unidimensional es:

tipo nombre_arr [ tamaño ]

Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez elementos se hace de la siguiente forma:

int listanum[10];






3.5 Cadenas De Caracteres

Una cadena puede almacenar informaciones como nombres de personas, mensajes de error, números de teléfono, etc.


Una cadena en C es un conjunto de caracteres, o valores de tipo “char”, terminados con el carácter nulo, es decir el valor numérico 0.



Este tipo de estructuras recibe un tratamiento especial, y es de gran utilidad y de uso continuo.

La manera de definir una cadena es la siguiente:

char [];


Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar una posición para almacenar el carácter nulo, de modo que si queremos almacenar













3.6 Asignacion Dinamica De Memoria


La reserva de memoria se realiza dinámicamente en tiempo de ejecución, no siendo necesario entonces tener que especificar en la declaración de variables la cantidad de memoria que se va a requerir. La reserva de memoria dinámica añade una gran flexibilidad a los programas porque permite al programador la posibilidad de la cantidad de memoria exacta en el preciso instante en el que se necesite, sin tener que realizar una reserva por exceso en prevención a la que pueda llegar a necesitar

la asignación dinámica de memoria se manipula con las funciones malloc() y free(). En C++ se define un método de hacer asignación dinámica utilizando los operadores new y delete.






3.7 Clases Predefinidas Arreglos




Se puede crear un array de estructuras tal como se crea un array de otros tipos. Los arrays de estructuras son idóneos para almacenar un archivo completo de empleados, un archivo de inventario, o cualquier otro conjunto de datos que se adapte a un formato de estructura. Mientras que los arrays proporcionan un medio práctico de almacenar diversos valores del mismo tipo, los arrays de estructuras le permiten almacenar juntos diversos valores de diferentes tipos, agrupados como estructuras.

Muchos programadores de C utilizan arrays de estructuras como un método para almacenar datos en un archivo de disco. Se pueden introducir y calcular sus datos de disco en arrays de estructuras y a continuación almacenar esas estructuras en memoria. Los arrays de estructura proporcionan también un medio de guardar datos que se leen del disco.




















CODIGOS UNIDAD 2
























***LINK CODIGOS..........FUNCIONES***

LINK DE DESCARGA CODIGOS






http://www.megaupload.com/?d=D0BGKNE0

viernes, 23 de julio de 2010

UNIDAD 2

UNIDAD II SUBPROGRAMAS






2.1 definicion de un subprograma


un subprograma se presenta como un algoritmo separado del algoritmo principal, el cual permite resolver una tarea específica.

Un subprograma hace el papel de un programa. Puede tener una sección de
declaraciones (variables, constantes, etc…) y posee también unos datos de entrada y de
salida. Esto permite, como ya veremos, que el subprograma sea totalmente
independiente del programa principal.







2.1.1 Estructura de un subprograma



la estructura de un subprograma es La función puede ser llamada desde el programa principal o desde cualquier otro subprograma. Para llamar a la función desde cualquier parte, implica el conocimiento previo de que ésta función existe.

A través de los parámetros reales de la llamada se proporciona a la función la información que necesita, para ello, al hacer la llamada lo que se produce es una asociación automática entre parámetros reales y parámetros formales. Esta asociación se realiza según el orden de la aparición y de izquierda y derecha.

Si el parámetro formal y real no son del mismo tipo, en Pascal se produce un error, y en C se transforman los tipos si es posible. La llamada a una función, siempre va a formar parte de una expresión, de cualquier expresión en la que en el punto en la que se llama a la función, pudiera ir colocado cualquier valor del tipo de datos que devuelve la función, esto se debe a que el valor que devuelve una función esta asociado a su nombre.




2.1.2 Valor de Retorno



El valor de retorno no se imprime por la pantalla, es decir, cuando un programa termina no saca por pantalla un cero, pero nosotros podemos saber cuál es ese valor.


Es un número. El valor es cero (0) si el programa finalizó con éxito o distinto de cero si el programa no finalizó con éxito. Cada uno de los valores distintos de cero va asociado a una causa distinta (sabiendo este valor podríamos saber por qué razón falló el programa), pero puede que por ahora no lo necesites.



2.2. declaracion subprograma





En determinadas circunstancias (p.e. cuando un subprograma se proporciona para ser usado desde un paquete, cuando se define un subprograma genérico o cuando hay referencias mutuas entre subprogramas) se precisa escribir una declaración de un subprograma separada de su definición. La declaración de un subprograma es como su cabecera, pero terminada en ";" en vez de con la palabra "is", para expresar que lo que se está dando es una vista de un subprograma cuya definición se haya en otro lugar.




2.3 Bibliotecas o librerias subprogramas


Bibliotecas de Subprogramas

math.h

stdio.h

iostream.h




Funciones

sin:

Función: Calcula el seno del valor, proporcionado. .

Arch. match.h

Declaración: double sen (double x);

Tipo de Dato que devuelve: Valor del seno de entrada.

Argumento: double x es el valor al que se le hará el cálculo.

Ejemplos:

result= sin (0.6);

result= sin (0.4);

result= sin (0.2);



iostream.h


Declara en el C++ básico los datos de (I/O).

Funciones

Cin : Declara los datos de entrada para alas variables

Cout : Muestra los datos que uno desea que se vean en la pantalla.





2.4 primer acercamiento clases y objetos

CLASE

Una clase es un tipo de dato que contiene uno o más elementos dato llamados miembros dato, y cero, una o más funciones que manipulan esos datos (llamadas funciones miembro). Una clase se puede definir con struct, union o class. La sintaxis de una clase es:
class nombre_clase
{
miembro1;
miembro2;
...
funcion_miembro1();
funcion_miembro2();
...
};



OBJETO


un objeto es un elemento declarado de un tipo clase. Se conoce también como una instancia de una clase.

Los objetos se pueden tratar como cualquier variable C. La principal diferencia es que se puede llamar a cualquiera de las funciones que pertenecen a un objeto, esto es, se puede enviar un mensaje a ella.
class rectangulo
{
int base,altura;
public:
void dimensiones(int,int);
int area();
};


void rectangulo::dimensiones(int b,int h)
{
base=b;
altura=h;
}
int rectangulo::area()
{
return base*altura;
}
void main()
{rectangulo r; //declarar el objeto
r.dimensiones(3,5); //definir el tamaño
cout<<"area "<






2.5 Ambito y tiempo de vida de variables


tipos de variables:globales y locales.

Globales: las variables permanecen activas durante todo el programa. Se crean al iniciarse éste y se destruyen de la memoria al finalizar. Pueden ser utilizadas en cualquier función.

Locales: las variables son creadas cuando el programa llega a la función en la que están definidas. Al finalizar la función desaparecen de la memoria.

Si dos variables, una global y una local, tienen el mismo nombre, la local prevalecerá sobre la global dentro de la función en que ha sido declarada.

Dos variables locales pueden tener el mismo nombre siempre que estén declaradas en funciones diferentes.




2.6 Argumentos y paso de parametros


Las palabras parámetro y argumento, aunque de significado similar, tiene distintas connotaciones semánticas: Se denominan parámetros los tipos declarados en el prototipo 4.4.1 (que deben corresponder con los declarados en la definición 4.4.2). Cuando se realiza una llamada a la función, los “valores” pasados se denominan argumentos. A veces se utilizan también las expresiones argumentos formales, para los parámetros y argumentos actuales para los valores pasados.

Parámetros (en prototipo o definición) argumentos formales

Valores pasados (en tiempo de ejecución) argumentos actuales

La sintaxis utilizada para la declaración de la lista de parámetros formales es similar a la utilizada en la declaración de cualquier identificador.


Los argumentos son siempre objetos. Sus tipos pueden ser: escalares; estructuras; uniones, o enumeraciones; clases definidas por el usuario; punteros o referencias a estructuras y uniones, o punteros a funciones, a clases o a matrices. El tipo void está permitido como único parámetro formal. Significa que la función no recibe ningún argumento



2.7 sobrecarga de subprogramas



Un subprograma sobrecargará un significado ya existente siempre que su especificación sea suficientemente diferente, es decir, pueden existir dos subprogramas con el mismo identificador siempre que se distingan por el número o tipo de sus parámetros.



Es una conveniencia notacional, que es evidente cuando se usan nombres convencionales, como en siguiente ejemplo

Sobrecarga de Funciones en C++ y Java double abs(double); int abs(int); abs(1);

// invoca int abs(int); abs(1.0); // invoca double abs(double); // se sobrecargará print void print(int); void print (char*);








2.8 recursividad programacion




La recursividad se presenta cuando una función se invoca a si misma. Distintamente
a las iteraciones (bucles), las funciones recursivas consumen muchos recursos de
memoria y tiempo.
Una función recursiva se programa simplemente para resolver los casos más
sencillos, cuando se llama a una función con un caso más complicado, se divide el
problema en dos partes, la parte que se resuelve inmediatamente y la que necesita
de más pasos, ésta última se manda de nuevo a la función, que a su ves la divide de
nuevo, y así sucesivamente hasta que se llegue al caso base. Cuando se llega al
final de la serie de llamadas, va recorriendo el camino de regreso, hasta que por fin,
presenta el resultado.


martes, 20 de julio de 2010