elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con declaracion de memoria dinamica en funcion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con declaracion de memoria dinamica en funcion  (Leído 6,010 veces)
Roga

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Ayuda con declaracion de memoria dinamica en funcion
« en: 26 Junio 2017, 00:32 am »

Hola una duda como le doy memoria dinamica a un parametro en una funcion.
el parametro es una matriz.

mi duda es que valor colocar en la segunda llave de nota.
Código
  1. void imprimir(int cedula_valida[],float nota[][],int total);
  2. int main(){
  3. .
  4. .
  5. .
  6. .
  7. .
  8. printf("\n\nIngrese la cantidad de estudiantes de su clase:");
  9. scanf("%d",&total);
  10. nota=(float **)malloc (total*sizeof(float *));
  11. for(alumno=0;alumno<total;alumno++){
  12. nota[alumno]=(float *)malloc(alumno*sizeof(float));
  13. .
  14. .
  15. .
  16. .
  17. .
  18. }

gracias de antemano :D


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #1 en: 26 Junio 2017, 01:09 am »

Fíjate que lo que estás haciendo en este código es una escalera. La nota alumno tendrá alumno entradas. Lo que lleva al siguiente problema:
nota[0] tendrá 0 bytes (indefinido, lo debe resolver el compilador pero ¿y si no lo hace?).
nota[1] tendrá 4 bytes
nota[2] tendrá 8 bytes
etc.

Supongo que te habrán dicho cuántas asignaturas tendrá cada alumno.


En línea

Roga

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #2 en: 26 Junio 2017, 01:22 am »

este es el anunciado

/*Implementar un programa que lea las notas de todos los alumnos de una clase para una asignatura (Validar que las calificaciones estén
comprendidas entre 1 y 20 puntos. Al estudiante que no presentó se le acepta la calificación de cero), calcule:
a. Emitir un listado que muestre el número de cédula de cada estudiante con su respectiva calificación y su valoración cualitativa de
“Aprobado” o “Reprobado” (trabajar el formato numérico para dos dígitos que aparezca el cero a la izquierda, cuando un estudiante posee
 nota de cero puntos, en su reemplazo debe aparecer las letras NP, que indican que no presentó).
b. Calcular la media de la materia.
c. Determine cuántos alumnos superan o igualan la media y cuántos están por debajo de la misma.
d. Mostrar que estudiante tiene la nota máxima y cuál la nota mínima.
e. Emitir el % de aprobados y el % de reprobados.
*/

1 asignatura
pero n evaluaciones
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #3 en: 26 Junio 2017, 01:54 am »

Pues en el segundo malloc, el que corresponde al número de evaluaciones, en vez de multiplicar por alumno lo debes hacer por n.
En línea

Roga

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #4 en: 26 Junio 2017, 04:19 am »

gracias por esa acotacion y si era un error que no habia visto. pero aun tengo la duda de la funcion
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #5 en: 26 Junio 2017, 09:18 am »

Si has creado los arrays en el main no debes hacerlos de nuevo dentro de una función.
Pero si lo que quieres es pasar un puntero a la función y que ésta lo defina debes pasar un puntero a ese puntero.
Tu duda y el código que has pasado dicen cosas diferentes.
En línea

Roga

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #6 en: 26 Junio 2017, 22:57 pm »

Emmmm pues cuando es una matriz y haces el prototipo y las variables que quieres pasar no tienes que declarar la memoria que tiene el segundo corchete o  mejor dicho las columnas

Código
  1. void imprimir(int cedula_valida[],float nota[][AQUI!!],int total);

??? tengo por entendido que si y si lo estoy declarando pero es memoria dinamica como hago para introducir la variable alli?.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #7 en: 26 Junio 2017, 23:20 pm »

Usa la notación de punteros.

Para pasar arrays y tablas usa la notación de arrays y tablas. Para pasar punteros usa la notación de punteros.
En línea

Roga

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #8 en: 27 Junio 2017, 01:18 am »

seria algo asi?
Código
  1. void imprimir(int cedula_valida[],float **nota[][],int total);
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con declaracion de memoria dinamica en funcion
« Respuesta #9 en: 27 Junio 2017, 01:44 am »

Más bien:
Código
  1. void imprimir(int cedula_valida[],float **nota,size_t numalumnos,size_t numcalificaciones);
« Última modificación: 27 Junio 2017, 01:47 am por MAFUS » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines