You are on page 1of 18

Clase 6

Lenguajes de Programación Docente: Matías Hernández Arellano

martes 12 de junio de 12

Uso de Memoria • Ej: número de líneas de un archivo de texto. (tiempo de compilación) martes 12 de junio de 12 .• Existen muchas ocasiones en donde no se conoce de antemano la cantidad de memoria necesaria para almacenar algún tipo de dato. • Una solución es crear un vector/arreglo con un tamaño fijo lo suficientemente grande.

Asignación dinámica • Asignar la memoria al ejecutarse el programa. solicitando memoria libre. martes 12 de junio de 12 . (tiempo de ejecución). se realiza una llamada al S. • Al conocer la cantidad de memoria requerida.O.

Asignación dinámica • Dentro de stdlib.h existen las funciones: • malloc. free • Estas funciones permiten solicitar memoria. calloc. martes 12 de junio de 12 . realloc.

• Solicita memoria al sistema. • Retorna un puntero a n bytes de almacenamiento o NULL en caso de error. malloc • Recibe un valor de tamaño del espacio que se quiere • El tamaño de un tipo de dato se calcula con la función sizeof. reservar. martes 12 de junio de 12 . • void *malloc(size_t n).

• Crea un espacio para un arreglo de n objetos. martes 12 de junio de 12 . • Retorna un puntero a n bytes de almacenamiento o NULL en caso de error. uno con tamaño size. size_t size).calloc • Similar a malloc: void *calloc(size_t n. cada • El espacio es inicializado a cero.

• Recibe cómo argumento el puntero retornado por malloc o calloc martes 12 de junio de 12 .free • Permite liberar el espacio reservado con malloc o calloc • void free(void *ptr).

realloc • Permite modificar el tamaño del espacio asignaco con malloc o calloc. martes 12 de junio de 12 . size_t longitud). de lo contrario. se aumenta. • Si longitud es menor que la cantidad de memoria inicial. • void* realloc(void *ptr. el bloque se “recorta”.

martes 12 de junio de 12 .Ejemplos char *p. vector de 100 int //pent=(int*)malloc(100*sizeof(int)). //reservo 1000 bytes del tipo char int *pent.sizeof(int)). p = (char*)malloc(1000). es lo mismo free(pent). pent = (int*) calloc(100.

martes 12 de junio de 12 .Ejercicio • Crear un programa que pida un listado de N números por teclado al usuario. • Almacenar dichos valores en un arreglo (de • Copiar en otro arreglo solo aquellos números que cumplan con i%3==0 (siendo i el i-ésimo valor del arreglo inicial). tamaño desconocido).

Ejercicio • Crear una función que permita contar el número total de lineas de un archivo de texto dado (el nombre del archivo se recibirá por teclado). Una vez obtenido el número de lineas. cada una con un valor alfanumérico. realizar la lectura y almacenar los valores en un arreglo. • El archivo de texto contendrá N lineas. martes 12 de junio de 12 .

Recursividad martes 12 de junio de 12 .

es un algoritmo que expresa su solución en términos de si mismo. martes 12 de junio de 12 .• La recursividad es la forma en la que un proceso es definido basado en su propia definición. • Ejempo: n! = n*(n-1)! • Un algoritmo recursivo.

el llamado caso base. la martes 12 de junio de 12 . sabe sólo cómo resolver el caso más simple. • Si la función es llamada con caso base.• Una función recursiva. función simplemente regresa el resultado. Si la función es llamada con un problema más complejo: la función divide dicho problema en dos partes conceptuales: Base y no-Base. es decir.

Ej: Factorial long factorial(numero){ if(numero <= 1){ return 1. }else{ return numero*factorial(numero-1). } } martes 12 de junio de 12 .

Ejercicio • Hacer seguimiento a la siguiente función: int recursiva_1(n){ if( n <= 1){ return 1. } } martes 12 de junio de 12 . }else{ return (2*recursiva_1(n/2)).

martes 12 de junio de 12 . que permita imprimir los elementos pares de un arreglo. que permita sumar los elementos de un arreglo. • Crear una función recursiva.• Crear una función recursiva.

} return a[n-1] + sum(a. } martes 12 de junio de 12 .int n){ if(n==0){ return 0.n-1).int sum(int a[].