Page 235

4 Estructuras de datos: memoria din´amica

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

Leer un polinomio por teclado. Se pedir´a el grado del polinomio y, tras reservar memoria suficiente para sus coeficientes, se pedir´a tambi´en el valor de cada uno de ellos. Evaluar un polinomio p(x) para un valor dado de x. Sumar dos polinomios. Ten en cuenta que cada uno de ellos puede ser de diferente grado y el resultado tendr´ a, en principio, grado igual que el mayor grado de los operandos. (Hay excepciones; piensa cu´ ales.) Multiplicar dos polinomios. · 228 Dise˜ na un programa que solicite la talla de una serie de valores enteros y dichos valores. El programa ordenar´ a a continuaci´ on los valores mediante el procedimiento mergesort. (Ten en cuenta que el vector auxiliar que necesita merge debe tener capacidad para el mismo n´ umero de elementos que el vector original.) ............................................................................................. Reserva con inicializaci´ on autom´ atica La funci´ on calloc es similar a malloc, pero presenta un prototipo diferente y hace algo m´ as que reservar memoria: la inicializa a cero. He aqu´ı un prototipo (similar al) de calloc: void * calloc(int nmemb, int size); Con calloc, puedes pedir memoria para un vector de talla enteros as´ı: a = calloc(talla, sizeof (int)); El primer par´ ametro es el n´ umero de elementos y el segundo, el n´ umero de bytes que ocupa cada elemento. No hay que multiplicar una cantidad por otra, como hac´ıamos con malloc. Todos los enteros del vector se inicializan a cero. Es como si ejecut´ asemos este fragmento de c´ odigo: a = malloc( talla * sizeof (int) ); for (i = 0; i < talla; i++) a[i] = 0; ¿Por qu´e no usar siempre calloc, si parece mejor que malloc? Por eficiencia. En ocasiones no desear´ as que se pierda tiempo de ejecuci´ on inicializando la memoria a cero, ya que t´ u mismo querr´ as inicializarla a otros valores inmediatamente. Recuerda que garantizar la mayor eficiencia de los programas es uno de los objetivos del lenguaje de programaci´ on C.

4.1.3.

Cadenas din´ amicas

Las cadenas son un caso particular de vector. Podemos usar cadenas de cualquier longitud gracias a la gesti´ on de memoria din´ amica. Este programa, por ejemplo, lee dos cadenas y construye una nueva que resulta de concatenar a ´estas. cadenas dinamicas.c 1 2 3

cadenas dinamicas.c

#include <stdio.h> #include <string.h> #include <stdlib.h>

4 5

#define CAPACIDAD 80

6 7 8 9 10

int main(void) { char cadena1[CAPACIDAD+1], cadena2[CAPACIDAD+1]; char * cadena3;

11 12 13

printf ("Dame un texto: "); gets(cadena1); printf ("Dame otro texto: "); gets(cadena2);

14 15

cadena3 = malloc( (strlen(cadena1) + strlen(cadena2) + 1) * sizeof (char) );

Introducci´ on a la Programaci´ on con C

229

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement