0% encontró este documento útil (0 votos)
7 vistas12 páginas

El Escenario

El documento describe un ejercicio para programar un 'Acuario Dinámico' utilizando un arreglo de enteros que representan diferentes tipos de peces. Se deben implementar funciones para mostrar el censo del acuario, contar especies y filtrar peces por tipo, utilizando solo punteros y evitando la notación de corchetes. Se enfatiza el uso de funciones de memoria dinámica como malloc, realloc y free para gestionar el arreglo.

Cargado por

animalroses3.16
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas12 páginas

El Escenario

El documento describe un ejercicio para programar un 'Acuario Dinámico' utilizando un arreglo de enteros que representan diferentes tipos de peces. Se deben implementar funciones para mostrar el censo del acuario, contar especies y filtrar peces por tipo, utilizando solo punteros y evitando la notación de corchetes. Se enfatiza el uso de funciones de memoria dinámica como malloc, realloc y free para gestionar el arreglo.

Cargado por

animalroses3.16
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Ejercicio: El Acuario Dinámico

El Escenario:
• ¡Bienvenidos a la tienda de mascotas virtual!
• Tenemos un "Acuario" que es un arreglo dinámico (‘int *acuario‘).
• Cada pez se representa por un "tipo" (un número: 1=Guppy, 2=Tetra, etc.).
• Nuestro software para gestionar el acuario (las funciones) se descompuso.

El Reto (¡Ayuda!)
Necesitamos programar la lógica de main y las 3 funciones que faltan para que el acuario
vuelva a operar y (lo más importante) no tenga fugas de memoria.

9 / 16 Ejercicio
Objetivo del Ejercicio

El Reto
Vamos a simular un "Acuario Dinámico". Es un arreglo de enteros (int *acuario) que
guarda los tipos de peces.

Conceptos a Aplicar
• malloc: Para crear el acuario inicial.
• realloc: Para "expandir" el acuario cuando se llene.
• free: Para liberar toda la memoria al final.
• Funciones y Punteros: Escribir una función que crea y devuelve un *nuevo* arreglo
en el Heap.
• Punteros como Parámetros: Usar punteros para que una función "devuelva" más
de un valor (ej. el tamaño de un arreglo).

10 / 16 Ejercicio
Regla del Ejercicio: ¡Solo Punteros!

La Restricción Principal
Para este ejercicio, está prohibido usar la notación de corchetes ([]) para acceder a los
elementos del arreglo.

11 / 16 Ejercicio
Regla del Ejercicio: ¡Solo Punteros!

La Restricción Principal
Para este ejercicio, está prohibido usar la notación de corchetes ([]) para acceder a los
elementos del arreglo.

NO USAR (Notación de Arreglo) SÍ USAR (Notación de Puntero)


  
1 // No permitido : 1 // Requerido :
2 miArreglo [ i ] = 10; 2 *( miArreglo + i ) = 10;
3 x = miArreglo [ i ]; 3 x = *( miArreglo + i ) ;
  

Objetivo de esta regla


El propósito es practicar y entender la aritmética de punteros y cómo un arreglo es, en
esencia, un puntero a un bloque de memoria contigua.
11 / 16 Ejercicio
Funciones de Ayuda (Provistas) Parte 1

¡No tienen que escribir esto!


Para hacerlo más visual, les proporcionamos la función imprimirNombrePez.
 
1 // 1= Guppy , 2= Tetra , 3= Betta , 4= Pez Á ngel
2 void imp rimirNombrePez ( int tipoPez ) {
3 switch ( tipoPez ) {
4 case 1: printf ( " Guppy " ) ; break ;
5 case 2: printf ( " Tetra " ) ; break ;
6 case 3: printf ( " Betta " ) ; break ;
7 case 4: printf ( " Pez Á ngel " ) ; break ;
8 default : printf ( " Especie Desconocida (?) " ) ;
9 }
10 }
 

12 / 16 Ejercicio
Funciones de Ayuda (Provistas) Parte 2

¡No tienen que escribir esto!


Para hacerlo más visual, les proporcionamos la función imprimirArreglo.
 
1 void imprimirArreglo ( int * arr , int tam ) {
2 if ( arr == NULL ) return ;
3
4 for ( int i = 0; i < tam ; i ++) {
5 printf ( " % d " , *( arr + i ) ) ;
6 }
7 printf ( " ]\ n " ) ;
8 }
 

13 / 16 Ejercicio
¡Manos al Código! (Tarea 1 de 3)

Tarea 1: mostrarAcuario (Función void)


• Objetivo: Mostrar el censo completo del acuario.
• Regla: Recorrer el arreglo y usar imprimirNombrePez para cada pez.
• Concepto Clave: Arreglos como punteros.

14 / 16 Ejercicio
¡Manos al Código! (Tarea 1 de 3)

Tarea 1: mostrarAcuario (Función void)


• Objetivo: Mostrar el censo completo del acuario.
• Regla: Recorrer el arreglo y usar imprimirNombrePez para cada pez.
• Concepto Clave: Arreglos como punteros.

Prototipo Requerido
 
1 // Muestra el censo del acuario
2 void mostrarAcuario ( int * acuario , int numPeces ) ;
 

14 / 16 Ejercicio
¡Manos al Código! (Tarea 2 de 3)

Tarea 2: contarEspecies (Función void)


• Objetivo: Contar cuántos peces hay de un tipo específico.
• Regla: Recorrer el arreglo y usar un contador.
• Concepto Clave: Arreglos como punteros.

15 / 16 Ejercicio
¡Manos al Código! (Tarea 2 de 3)

Tarea 2: contarEspecies (Función void)


• Objetivo: Contar cuántos peces hay de un tipo específico.
• Regla: Recorrer el arreglo y usar un contador.
• Concepto Clave: Arreglos como punteros.

Prototipo Requerido
 
1 // Cuenta una especie especifica
2 void contarEspecies ( int * acuario , int numPeces , int tipoAContar ) ;
 

15 / 16 Ejercicio
¡Manos al Código! (Tarea 3 de 3)

Tarea 3: filtrarPecesPorTipo (¡El Desafío!)


• Objetivo: Crear y devolver un NUEVO arreglo solo con los peces filtrados.
• Regla 1: Usar malloc para la memoria del nuevo arreglo.
• Regla 2: Usar *conteoDestino para "devolver" el tamaño del nuevo arreglo.
• Concepto Clave: Funciones que devuelven punteros, malloc, Parámetros de salida.

16 / 16 Ejercicio
¡Manos al Código! (Tarea 3 de 3)

Tarea 3: filtrarPecesPorTipo (¡El Desafío!)


• Objetivo: Crear y devolver un NUEVO arreglo solo con los peces filtrados.
• Regla 1: Usar malloc para la memoria del nuevo arreglo.
• Regla 2: Usar *conteoDestino para "devolver" el tamaño del nuevo arreglo.
• Concepto Clave: Funciones que devuelven punteros, malloc, Parámetros de salida.

Prototipo Requerido
 
3 // D e v u e l v e un NUEVO arreglo en el Heap con los peces f i l t r a d o s
4 int * f i l t r a r Pe c e s P o r T i p o ( int * acuarioPrincipal , int numPecesTotal , int tipoAFiltrar , int * conteoDestino ) ;
 

16 / 16 Ejercicio

También podría gustarte