You are on page 1of 39

Fundamentos de Programación

¿Qué es memoria Dinámica?

¿Qué son estructuras de datos Dinámicas?
¿Para qué sirven? ¿Qué son tipos de datos parametrizados?

Fundamentos de Programación 2011 - Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI

315 308 17 17
1

Consideraciones que nos permitirán aprovechar al máximo la clase
Reglas de juego

 Evitar interrupciones por el
uso de teléfonos celulares o salidas del salón

 Intervenciones breves
 Ser directos en las apreciaciones  Participar activamente  No hay protesta sin propuesta
Fundamentos de Programación 2011 - Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI

315 308 17 17
2

Consideraciones que nos permitirán aprovechar al máximo la sesión de capacitación
Reglas de juego

 Respeto por las opiniones
de los demás

 Respeto reglamento de la
Universidad

 Supletorios  Copia  Pilas con las Notas Finales
Fundamentos de Programación 2011 - Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI

315 308 17 17
3

Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 4 . operaciones a nivel de bits Manejo de plantillas para definición de funciones Creación de Librerías 6 7 Fundamentos de Programación 2011 .0 Contenido 1 2 3 4 5 Objetivos del curso Habilidades que contribuye a desarrollar Evaluación Repaso y Unificación de Conceptos Tipos de datos. tamaños y conversiones.

Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 5 . Resolver problemas del mundo real a través de una adecuada selección y utilización de las estructuras de datos con base en el análisis del problema y el diseño de la solución. las colas y las listas. Fundamentos de Programación 2011 . como son los datos de tipo struct.1 Objetivos del Curso El objetivo principal es lograr que el estudiante desarrolle habilidad para definir estructuras estáticas y dinámicas de agrupamiento de datos. las pilas.

0 Contenido 1 2 Objetivos del curso Habilidades que contribuye a desarrollar Evaluación Repaso y Unificación de Conceptos Tipos de datos. tamaños y conversiones. operaciones a nivel de bits Manejo de plantillas para definición de funciones Creación de Librerías 3 4 5 6 7 Fundamentos de Programación 2011 .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 6 .

Afianzar los conocimientos de programación básica. Definir varias alternativas para solucionar un problema mediante estructuras de datos y seleccionar la alternativa más viable. Fundamentos de Programación 2011 .. Desarrollar la habilidad para implementar algoritmos diseñados en un lenguaje programación.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 7 . los de Promover la reutilización de código y el empleo de tipos de datos parametrizados.2 Habilidades que desarrollarán Estimular la destreza para solucionar problemas mediante algoritmos..

operaciones a nivel de bits Manejo de plantillas para definición de funciones Creación de Librerías 2 3 4 5 6 7 Fundamentos de Programación 2011 .0 Contenido 1 Objetivos del curso Habilidades que contribuye a desarrollar Evaluación Repaso y Unificación de Conceptos Tipos de datos. tamaños y conversiones.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 8 .

3 Evaluación Primer Parcial 25% Segundo Parcial 25% Tercer Parcial 25% Proyecto 15% Primera Entrega (Diseño) 5% Entrega Final y Sustentación 10% Quices y Talleres 10%. Fundamentos de Programación 2011 .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 9 .

operaciones a nivel de bits Manejo de plantillas para definición de funciones Creación de Librerías 2 3 4 5 6 7 Fundamentos de Programación 2011 .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 10 . tamaños y conversiones.0 Contenido 1 Objetivos del curso Habilidades que contribuye a desarrollar Evaluación Repaso y Unificación de Conceptos Tipos de datos.

9 Declare una estructura que tenga como datos miembro el código de un estudiante de tipo entero.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 11 . Defina un arreglo de 100 posiciones de esa estructura.1.4 Repaso y Unificación de Conceptos Implemente la siguiente función bool primo(int n) informa si n es primo o no Haga un programa que reciba caracteres del teclado hasta que le digiten un signo de interrogación ´?‟ Haga un programa que declare un arreglo de float de diez posiciones y lo inicialice con los números 0. el nombre de tipo cadena. 5. 2. 4. Fundamentos de Programación 2011 .1.6.4. la fecha de nacimiento entero largo. 7. el genero de tipo carácter. 6. 3.2.7. 8. 9.5.3.8.

tamaños y conversiones. operaciones a nivel de bits Manejo de plantillas para definición de funciones Creación de Librerías 2 3 4 5 6 7 Fundamentos de Programación 2011 .0 Contenido 1 Objetivos del curso Habilidades que contribuye a desarrollar Evaluación Repaso y Unificación de Conceptos Tipos de datos.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 12 .

color del cabelllo? Fundamentos de Programación 2011 .abstracción Entender como representar el problema del mundo real (Abstracción) Primera Abstracción Nombre. Edad.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 13 .5 Tipos de Datos . Género Abstracción Segunda Abstracción ¿Qué dijo? Tercera Abstracción ¿Color de los ojos.

586.30 Fundamentos de Programación 2011 .720.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 14 .5 Tipos de datos Cuando hacemos un programa es clave declarar las variables en la que vamos a almacenar valores que representan características de los objetos del mundo real que representamos: Ejemplos Nombre : Arrempugencia pataquiba panqueba Fecha Nacimiento : 06/09/1990 Género: Femenino Peso: 58 kilogramos Fuma: Si Salario: $1.

586.720.5 Tipos de datos Cuando hacemos un programa es clave declarar las variables en la que vamos a almacenar valores que representan características de los objetos del mundo real que representamos: Ejemplos Nombre : Arrempugencia pataquiba panqueba Fecha Nacimiento : 06/09/1990 Género: Femenino caracter entero char long cadena string Peso: 58 kilogramos Fuma: Si Salario: $1.30 entero int bool falso/verdadero real float Fundamentos de Programación 2011 .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 15 .

Números grandes -2.483.483.647 Números pequeños.648 <= X <= 2.535 Números muy pequeños. control de bucles 0 <= X <= 4.967.5 Tipos de datos .294. -128 <= X <= 127 Números muy pequeños y juego de caracteres ASCII [5] -32.147.767 Números muy pequeños.967.295 Distancias astronómicas Tipo unsigned char char (signed) short (signed) 16 unsigned short 16 unsigned (int) 32 int (signed) 32 unsigned long 32 Fundamentos de Programación 2011 .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 16 . control de bucles pequeños 0 <= X <= 4.768 <= X <= 32.147.295.tamaños bits 8 8 Rango / Tipo de uso 0 <= X <= 255 Números pequeños y juego caracteres del PC. control de bucles pequeños 0 <= X <= 65.294.

23e-308 <= |X| <= 1.147.79e308 Precisión científica (15dígitos) 3.tamaños bits 32 32 Rango / Tipo de uso -2.18e4932 Precisión científica (18dígitos) long (int) float double 64 long double 80 Fundamentos de Programación 2011 .5 Tipo Tipos de datos .37e-4932 <= |X| <= 1.40e38 Precisión científica ( 7dígitos) 2.647 Números grandes 1.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 17 .483.18e-38 <= |X| <= 3.147.483.648 <= X <= 2.

Fundamentos de Programación 2011 . el otro se convertirá a long. el otro se convertirá a unsigned int. el otro se convertirá a double. el otro se convertirá a float. Si un operando es de tipo long. Existen reglas que rigen estas conversiones. Si un operando es de tipo double. y aunque pueden cambiar ligeramente de un compilador a otro. el otro se convertirá a long double. en general serán más o menos así: (Normalmente al más largo) Si un operando es de tipo long double. el otro se convertirá a unsigned long. Si un operando es de tipo unsigned int. Si un operando es de tipo unsigned long.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 18 . cuando los operandos de cada operación binaria asociados a un operador son de distinto tipo.Implícitas En estos casos. Si un operando es de tipo float. el compilador los convierte a un tipo común.5 Tipos de datos – Conversiones .

O bien: d = int(r + b). En el caso de los argumentos pasados a funciones es también muy recomendable aunque no haya pérdida de precisión. el uso de casting es obligatorio cuando se hacen asignaciones.casting En general. Un casting tiene una de las siguiente sintaxis: (<nombre de tipo>) <expresión> <nombre de tipo> <expresión> d = (int)(r + b). d = (int)(n + a + r). aún cuando estemos haciendo conversiones de tipo extrañas.5 Tipos de datos – Conversiones .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 19 . d = int(n + a + r). Fundamentos de Programación 2011 . Eliminar los avisos del compilador demostrará que sabemos lo que hacemos con nuestras variables. o cuando se pasan argumentos a funciones con pérdida de precisión.

es un dígito del sistema de numeración binario El bit es la unidad mínima de información empleada en informática. o en la teoría de la información.5 Tipos de datos – Operaciones a nivel de bits ¿Qué es un bit? Abreviatura para binary digit. blanco ó negro. norte ó sur. en cualquier dispositivo digital.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 20 . masculino ó femenino.5 milivoltios En los computadores de hoy un byte corresponde a la unión de 8 bits. 0 ó 1. podemos representar dos valores cualesquiera. En un byte se pueden representar 28 = (256 valores) (0 a 255). Con él. En electrónica digital el 1 corresponde a una lectura de 5 milivoltios y un cero a una lectura de 2. verdadero ó falso. abierto ó cerrado. 1 0 1 1 1 0 1 1 Fundamentos de Programación 2011 . Tabla ACII de Caracteres. Dígito Binario.

Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI .’ ´\’ Carácter Espacio Beep 48 41 65 97 161 63 59 92 315 308 17 17 21 Fundamentos de Programación 2011 .5 Tipos de datos – Tabla ASCII Código 32 7 ‘0’ ‘1’ ‘A’ ‘a’ ‘á’ ? ´.

Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 22 .5 Tipos de datos – Operaciones a nivel de bits Decimal 0 1 2 3 4 5 6 7 8 9 Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 Hexadecimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1010 1011 1100 1101 1110 1111 10000 10001 10010 A B C D E F 10 11 12 Fundamentos de Programación 2011 .

Fundamentos de Programación 2011 .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 23 . && es el operador lógico Y. Similarmente los operadores | y ||.5 Tipos de datos – Operaciones a nivel de bits Operador & | ^ ~ << >> Acción Y O O exclusiva (XOR) Complemento a uno Negación Desplazamiento a la izquierda Desplazamiento a la derecha No se debe confundir el operador & con el operador &&: & es el operador Y sobre bits.

// 11110101 & 00011110 = 00010100 -> 0x14 d = a ^ c. c. b. // ~00011110 = 11100001 -> 0xe1 d = c << 3 // 00011110 << 3 = 11110000 -> 0xf0 d = a >> 4 // 11010011 >> 4 = 00001101 -> 0x0d Fundamentos de Programación 2011 . // = 11010011 b = 0xf5. // = 11110101 c = 0x1e. // 11010011 ^ 00011110 = 11001101 -> 0xcd d = ~c.5 Tipos de datos – Operaciones a nivel de bits Operador 1 E1 0 1 0 1 Operador 2 E2 0 0 1 1 AND E1 & E2 0 0 0 1 OR exclusivo E1 ^ E2 0 1 1 0 OR inclusivo E1 | E2 0 1 1 1 NOT ~E1 1 0 1 0 int a.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 24 . // 11010011 | 11110101 = 11110111 -> 0xf7 d = b & c. // = 00011110 d = a | b. a = 0xd3.

x >> 2. Ejecución 00000111 00001110 01110000 Valor de x 7 14 112 x << 2. int x x = 0x07. x << 1.5 Tipos de datos – Operaciones a nivel de bits Una aplicación que tienen los operadores de desplazamiento de bits es para realizar multiplicaciones y divisiones rápidas con enteros. 11000000 01100000 00011000 192 96 24 Fundamentos de Programación 2011 . Como se ve en la siguiente tabla. x >> 1. x << 3.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 25 . donde un desplazamiento a la izquierda es multiplicar por 2 y uno a la derecha dividir por 2.

5 Tipos de datos – Ejercicios en el laboratorio lunes 31/01/2011 Declarar dos variables int x =0x8a.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 26 .y = 0x30 Realizar todas las operaciones binarias entre x e y presentar el resultado Realizar todas las operaciones uniarias con cada variable y presentar el resultado Fundamentos de Programación 2011 .

0 Contenido 1 Objetivos del curso Habilidades que contribuye a desarrollar Evaluación Repaso y Unificación de Conceptos Tipos de datos. tamaños y conversiones. operaciones a nivel de bits Manejo de plantillas para definición de funciones Creación de Librerías 2 3 4 5 6 7 Fundamentos de Programación 2011 .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 27 .

Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 28 . return a. int b ) { if (a<b) return b. } Qué pasa si nos pide que también funcione con variables tipo float float maximo(float a.6 Manejo de plantillas para definición de funciones A veces cuando escribimos una función pensamos que resolvimos el problema para cualquier situación . Fundamentos de Programación 2011 . float b ) { if (a<b) return b. float Esto se llama sobrecarga de funciones. y las usa de acuerdo con la sintaxis de la llamada. C++ genera un nombre único por cada función con el nombre de la función y los tipos de parámetros. Por ejemplo int maximo(int a. } Escribimos otra función con el mismo nombre pero que retorne float y reciba como parámetros variables. return a.

Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 29 . double b ) { if (a<b) return b. return a. requiere más tiempo y se pueden generar errores al hacer mantenimiento.6 Manejo de plantillas para definición de funciones ¿Y si ahora nos dicen que también se va a utilizar con tipo double? double maximo(doble a. Al Modificar una de las funciones se deben arreglar todas Para resolver este problema C++ tiene la funcionalidad de plantillas de funciones o funciones genéricas Fundamentos de Programación 2011 . } ¿Pero y si nos piden otro tipo de dato? Podemos escribir la misma función para cada tipo de dato pero es poco práctico.

6 Manejo de plantillas para definición de funciones ¿Qué tal que pudiéramos escribir una sola vez la función para cualquier tipo de datos? ¿Existirá una forma de hacerlo en C++? Plantillas de funciones o funciones genéricas Ambas funciones maximo() tienen un cuerpo idéntico. pero como los argumentos son diferentes. template <class UNTIPO> UNTIPO maximo ( UNTIPO a. para cualquier tipo return a. } Sería muy interesante tener una función genérica capaz de calcular el máximo de dos valores de cualquier tipo. UNTIPO b ) { Plantilla con la que se if (a<b) implementa la función máximo return b.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 30 . return a. int b ) { if (a<b) return b. } Fundamentos de Programación 2011 . return a. se diferencian en los prototipos. int maximo(int a. } float maximo(float a. float b ) { if (a<b) return b.

Una plantilla especifica un conjunto infinito de funciones que pueden ser aplicadas a distintos tipos de datos. Una plantilla describe las propiedades genéricas de una función. Una plantilla de funciones es como un patrón. Las plantillas de funciones o funciones genéricas tienen la siguiente sintaxis: template <lista de tipos genéricos> declaración de función Fundamentos de Programación 2011 .Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 31 .6 Manejo de plantillas para definición de funciones Una función genérica define un conjunto de operaciones que se aplicarán a diferentes tipos de datos.

La lista de tipos contiene los tipos genéricos separados por comas. sea clase o no (enteros. class TIPO2 > TIPO2 funcion ( TIPO1 a. } La palabra reservada template indica que se va a declarar una plantilla. Las plantillas se declaran normalmente en un archivo de cabecera. se refiere a cualquier tipo. Aunque la notación anteponga class al tipo. Fundamentos de Programación 2011 .6 Manejo de plantillas para definición de funciones - template <class TIPO1> TIPO1 funcion ( TIPO1 a ) { // cuerpo de la función. reales.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 32 . etc. } template <class TIPO1> TIPO1 funcion ( TIPO1 a. } template <class TIPO1> float funcion ( int cont. TIPO1 b ) { // cuerpo de la función. } template <class TIPO1. TIPO1 a ) { // cuerpo de la función. ). TIPO2 b) { // cuerpo de la función.

Las plantillas siguen las mismas normas que la sobrecarga. no el tipo de datos de retorno template <class TIPO> TIPO funcion ( int a ) { // cuerpo de la función. con el tipo correspondiente.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 33 . sino que la generación de código se realiza en el momento en que se necesita. Las plantillas no generan código directamente. } ERROR No hay ningún parámetro en la lista de tipo TIPO Fundamentos de Programación 2011 . solo se mira la lista de parámetros.6 Manejo de plantillas para definición de funciones – A tener en cuenta Una plantilla de función o función genérica define un conjunto ilimitado de funciones sobrecargadas.

3.2.4. // TIPOg int b = max_vector(k. char m. int a. „e‟ .0}. „t‟ . „h‟}. float b. int dim ) { TIPOg aux. 5). aux = v[0]. 4). i++) { if ( v[i]>aux ) aux = v[i]. // TIPOg float m = max_vector(c. } return aux. // TIPOg char } Fundamentos de Programación 2011 . } void main() { int w[5]={1. a = max_vector(w.6 Manejo de plantillas para definición de funciones – Ejemplo Encontrar el máximo de un conjunto de números de cualquier tipo en un vector template <class TIPOg> TIPOg max_vector( TIPOg v[ ] .4. float k[4]={4.7.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 34 .7.3. i<dim. char c[]={„f‟ .5}. 4). for (int i =0.6.8.

T b ). T c). Fundamentos de Programación 2011 . serían válidas las siguientes plantillas sobrecargadas: template <class T> T maximo ( T a.6 Manejo de plantillas para definición de funciones – Sobrecarga Las plantillas de funciones se pueden sobrecargar Por ejemplo. int dim). template <class T> T maximo (T v[ ].Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 35 . para la función maximo(). template <class T> T maximo ( T a. T b.

operaciones a nivel de bits Manejo de plantillas para definición de funciones Creación de Librerías 2 3 4 5 6 7 Fundamentos de Programación 2011 .0 Contenido 1 Objetivos del curso Habilidades que contribuye a desarrollar Evaluación Repaso y Unificación de Conceptos Tipos de datos. tamaños y conversiones.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 36 .

Cree un archivo en C++ con las funciones de utilidad para el sistema que está construyendo. librería de funciones para manipular cadenas Entonces cuando hacemos un sistema y tenemos grupos de funciones de utilidad que nos ayudan a resolver problemas en particular.h Fundamentos de Programación 2011 . las guardamos en archivos .h.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 37 . ¿Cómo se hace ? 1. Invoque las funciones en el main de acuerdo con los tipos de datos de retorno y de los parámetros definidos en el archivo.h 2.h para que queden disponibles para que cualquier programador las use.h.7 Creación de librerías – Archivos –h En C++ se utilizan los archivos de encabezado denominados para guardar funciones que nos ayudan a resolver ciertas tareas por ejemplo: math. #include “maximo. por ejemplo maximo.h” 3. como último include en este archivo. librería de funciones matemáticas string. Cree el archivo que contendrá el main() y agregue esta línea .

float . y un arreglo de enteros y otro de float Fundamentos de Programación 2011 .h en maximo.7 Creación de librerías –Ejercicios para el taller .llamado maximo .cpp agregando la línea #include “maximo.Laboratorio Cree las funciones maximo como plantilla para cualquier tipo de datos y para un arreglo Guárdelas en un archivo .cpp Incluya el archivo maximo.Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 38 .h” En el main invoque las funciones maximo con int.h Cree un archivo denominado maximo. doble.

Clases 1 y 2 Luis Carlos Moreno GESTIÓN DEL CAMBIO TI 315 308 17 17 39 .PREGUNTAS Fundamentos de Programación 2011 .