Código de C/Visual C - Asignación de memoria dinámica

Imágen de perfil

Asignación de memoria dinámicagráfica de visualizaciones


C/Visual C

Publicado el 28 de Mayo del 2016 por Noé Baldemar
748 visualizaciones desde el 28 de Mayo del 2016. Una media de 28 por semana
Hola, esta vez les comparto un código que ejemplifica el manejo de arreglos de manera dinámica.

Requerimientos

Sólo hace falta tener instalado el dev c++, recomendación: dev c++ orwell 5.7.1, que es el que usa su servidor o alternativas como CodeBlocks o Eclipse con el paquete para compilar y ejecutar código estructurado en c.

Cualquier versión de sistema operativo de Microsoft windows (en mi caso uso la versión 10),
o bien cualquier versión de base Linux.

Libro Schaum cap 10.5

Actualizado el 29 de Mayo del 2016 (Creado el 28 de Mayo del 2016)gráfica de visualizaciones de la versión: Libro Schaum cap 10.5
749 visualizaciones desde el 28 de Mayo del 2016. Una media de 28 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Explicación de su servidor hacia ustedes, espero que ésta sea clara, intente ser lo más breve y sobre todo intente colocar una explicación más coloquial.

Nota: descripción de el ejemplo 10.16 del libro de Schaumm "Reordenación de una lista de números" pagina 364.
Código c: carpetas estructura de datos -> memoria dinámeica -> EJM-10_16.c

linea 10: Declaración del prototipo de la función que ordena el arreglo de números enteros.

linea 14: Declaración de un apuntador a un número entero, este puntero hace reprecenta un arreglo unidimencional, recordar que los arreglos son apuntadores por default.

linea 17: reserva memoria para un valor entero etiquetado (o nombrado) con la letra n, esta variable se encargará de darle el tamaño necesario (elegido por el usuario) al puntero mencionado en la linea 14.

linea 21: Reserva de memorian para el puntero x, como mencionamos antes x se comportará como un arreglo unidimencional dado que se necesita reservar memoria de manera consecutiva es necesario saber el tamaño del puntero x total, es decir; que en la linea 14 se declaró un puntero a un entero pero éste sólo almacenará un valor entero, y como x se comportará como un arreglo, y un arreglo es un conjunto de datos del mismo tipo, el compilador necesita saber cuántos números enteros se decean guardar, en otras palabras cuantos apuntadores x´s (por así decirlo) de tamaño entero se guardarán para que el compilador reserve el tamaño en memoria RAM consecutivamete en total, pues recordar que un entero necesita 4 Bytes de espacio en memoria, para relizar esto se ocupa una función de la biblioteca stdio.h la cual es llamda malloc que hace precisamente lo mencionado anteriormente, reserva el espacio necesario en la memoria RAM de la computadora, esta función malloc resive como parámetro de entrada la cantidad de memoria para asignar en bytes por lo que con la función sizeof sacamos el total de bytes que necesita un entero (el cual sabes que es 4 bytes) por el total de números de tipo entero a introducir en el arreglo x, es decir; n veces. es por eso que se tiene la ecpresión n*sizeof(int), n reprecenta el total de números enteros que guardará el arreglo x y sizeof(int) reprecenta los 4 bytes de memoria que necesita un entero en memoria, la función sizeof tiene como único parámetro de entrada el tipo de dato el cual queremos reservar memoria y retorna el tamaño en bytes para ese tipo. La instrución (int *) es un cast.

linea 24-28: llena el arreglo x con el tamaño que el usuario eligió.

líena 31: hace la llamda de la función reordenar (continuar leyendo para explciación de la función).

linea 35-39: imrpime el arreglo x ya ordenado.

linea 44-63: cuerpo de la función reordenar, el cual mediante los dos desde (for) anidados recorre al arreglo de una manera que el desde que esta afuera se posiciona en un una casilla del arreglo x, este se mantiene fijo hasta que en ciclo desde interno recorre el resto del arreglo comprando cada casilla restante de tal manera que cuando la casilla manipulada desde el for externo es más chico que la manipulada por el for más interno, estos valores son cambiados de casilla respectivamente entre si de tal manera que la casilla que es manipulada por el for externo siempre es más chico que el número de la casilla manipulado por el for interno.

PD: cualquier duda pueden mandar un mensaje y con gusto les responderé a sus dudas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
	Reordenación de una lista de números (Método de la burbuja).
	Libro Schaum cap 10.5: Asignación dinámica de memoria.
	Ejemplo 10.16, pag 364.  
*/
 
#include <stdlib.h>
#include <stdio.h>
 
void reordenar( int n, int *x );
 
int main( void ){
	int i, n;
	int *x; //apuntador a un entero.
 
//	leer el valor de n.
	printf("\n¿Cuantos numeros seran introducidos? "); scanf("%i", &n);
	printf("\n");
 
// Reserva de memoria.
	x=(int *) malloc( n * sizeof( int ) );
 
// leer la lista de números.
	for( i = 0; i < n; ++i ){
 
		printf("i = %i x =  ", i + 1); scanf("%i", x + i);
 
	}// Fin desde i.
 
// Reordenar todos los elemntos del array.
	reordenar( n, x );// LLamada a la función reordenar.
 
//	Escribir la lista reordenada de números.
	printf("\n\nLista de numeros reordenada: \n\n");
	for( i = 0; i < n; ++i ){
 
		printf("i = %i  x = %i\n", i + 1, *(x + i) );
 
	}// Fin desde i.
 
printf("\n\n"); system("pause"); return 0; }
 
// Reordenar la lsiat de números
void reordenar( int n, int *x ){
	int i, elem, temp;
 
	for( elem = 0; elem < n - 1; ++elem ){
//		Encontrar el menor del resto de los elemntos.
		for( i = elem + 1; i < n; ++i ){
 
			if( *(x + i) < *(x + elem) ){
//				Intercambiar los dos elemntos.
				temp = *(x + elem);
				*(x + elem) = *(x + i);
				*(x + i) = temp;
 
			}// fin sí. 
 
		}// Fin desde i. 
 
	}// fin desde elem.
 
}//Fin de función reordenar.



Comentarios sobre la versión: Libro Schaum cap 10.5 (0)


No hay comentarios
 

Comentar la versión: Libro Schaum cap 10.5

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s3541