AsignacióN DináMica

8
Asignación Dinámica Ing. Paulo Guerra T. 26/Enero/2009

Transcript of AsignacióN DináMica

Page 1: AsignacióN DináMica

Asignación DinámicaIng. Paulo Guerra T.

26/Enero/2009

Page 2: AsignacióN DináMica

Se asigna memoria dinámicamente mediante la función estándar malloc(), para trabajar con esa memoria como si fuera un array.

La función malloc () devuelve un puntero genérico al primer byte de una región de memoria del tamaño en bytes determinado en el argumento.

Arrays Asignados Dinámicamente

Page 3: AsignacióN DináMica

Malloc(tamaño) tamaño: indica el numero de bytes a reservar.

Si se desea reservar espacio de memoria para 10 elementos de tipo entero:

int *p; p=(int *) malloc(10*sizeof(int));

Nota: la función sizeof( argumento) devuelve el numero de bytes que ocupa el argumento.

Declaración

Page 4: AsignacióN DináMica

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

void main() { int *p,num;

printf("Ingrese el numero de elementos a crear: "); scanf("%d",&num); p=(int *)malloc(sizeof(int)*num);

for(int i=0;i<num;i++) { printf("Ingrese un dato: "); scanf("%d",(p+i)); }

for(i=0;i<num;i++) { printf("\ndato[%d]: %d",i,*(p+i)); } }

Ejemplo

recuerde que el puntero p apunta al primer elemento del arreglo y la variable i aumenta el desplazamiento a la siguiente posición de memoria

Page 5: AsignacióN DináMica

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

int leer(char texto[100], int min, int max); void ingresar_datos_arreglo(int *p, int num); void imprimir_arreglo(int *p, int num);

void main() { int *p,num;

num=leer("Ingrese el numero de elementos a crear: (0-20) ", 0, 20);

p=(int *)malloc(sizeof(int)*num);

ingresar_datos_arreglo(p,num); imprimir_arreglo(p,num); printf("\nGracias... FIN DEL PROGRAMA"); }

int leer(char texto[100], int min, int max) { int valor; do { printf("%s", texto); scanf("%d",&valor); }while(valor<min ||valor>max);

return valor; } void ingresar_datos_arreglo(int *p, int num) { for(int i=0;i<num;i++) { printf("Ingrese un dato: "); scanf("%d",(p+i)); } }

void imprimir_arreglo(int *p, int num) {

for(int i=0;i<num;i++) { printf("\ndato[%d]: %d",i,*(p+i)); }

}

Page 6: AsignacióN DináMica

int leer(char texto[100], int min, int max); void ingresar_datos_arreglo(int *p, int num); void imprimir_arreglo(int *p, int num);

void main() { int *p,num;

num=leer("Ingrese el numero de elementos a crear: (0-20) ", 0, 20); p=(int *)malloc(sizeof(int)*num); ingresar_datos_arreglo(p,num); imprimir_arreglo(p,num); printf("\nGracias... FIN DEL PROGRAMA"); }

int leer(char texto[100], int min, int max) { int valor; do { printf("%s", texto); scanf("%d",&valor); }while(valor<min ||valor>max); return valor; } void ingresar_datos_arreglo(int p[], int num) { for(int i=0;i<num;i++) { printf("Ingrese un dato: "); scanf("%d",&p[i]); } }

void imprimir_arreglo(int *p, int num) { for(int i=0;i<num;i++) { printf("\ndato[%d]: %d",i,p[i]); } }

Observe que se puede pasar un puntero y recibirlo como un arreglo; esto se puede realizar por que un arreglo de la forma nombre[tamaño] es simplemente un puntero.

Page 7: AsignacióN DináMica

Realizar un programa que permita ingresar n elementos de tipo float determine el promedio.

A continuación el programa debe almacenar en un nuevo arreglo dinámico la desviación con respecto a la media.

d= Ai - Ā Por ultimo el programa debe calcular la desviación

estándar.

s= (d12 + d2

2 + d32 + ….+ dn

2 )/(n-1)

(Realizar el ejemplo con funciones y asignación dinámica).

Trabajo en clase

Page 8: AsignacióN DináMica

Realizar un programa que permita ingresar una cedula y verifique si la cedula es válida o no.

1002856050 ->Es válida 1000000001-> Es inválida

Trabajo en clase