Autor
|
Tema: [C] Pasar Array como parámetro a funcion INT o FLOAT (Leído 3,305 veces)
|
n-utz
Desconectado
Mensajes: 165
Babylon es el vampiro!
|
Buenas noches, verán me encuentro con un problema, estoy terminando un tp para la facultad, y me encuentro con que debo pasar un array a una funcion INT para que cuente los "ausentes", los "0", y me devuelva la cantidad de estos. El tema es el siguiente, en el mismo programa tengo el pasaje de este mismo vector a una funcion VOID y me la devuelve a main sin problemas, cuando me la devuelve la quiero enviar así como está a la funcion INT, pero se envía con basura. Les paso a poner el código: OBVIAR LA FUNCION VOID. #include <stdio.h> #include <stdlib.h> #include <stdbool.h>
void carga(float al[], int x); void ausentes(float al[], int x);
int main() { int j, aus; float alumnos[5];
carga(alumnos,5);
for(j=1;j<=5;j++){ printf("Alumno %d\t Nota %.2f\n",j,alumnos[j]); }
ausentes(alumnos,5);
return 0; }
void carga(float al[], int x){ //CARGA DE NOTAS
int i, trunca=0; float nota=0, verif, resul=0; bool vof=false; al[x];
while(nota>=0){ nroal: printf("\nIngrese la nota a inscribir "); scanf("%f", ¬a); printf("\nIngrese el numero de alumno a modificar "); scanf("%d", &i);
if(nota>=1){ //PURGA DE NOTA INVALIDA Y CORRECCION DE DECIMALES while(nota>10){ printf("\nNota erronea, vuelva a ingresar "); scanf("%f", ¬a); } trunca=nota; resul=nota-trunca; if(resul>0 && resul<0.25){ nota=trunca+0.25;} if(resul>0.25 && resul<0.5){ nota=trunca+0.5;} if(resul>0.5 && resul<0.75){ nota=trunca+0.75;} if(resul>0.75 && resul<=0.99){ nota=trunca+1;} resul=0; trunca=0;
} else if(nota<0){ //NOTA NEGATIVA break; }
while(i>x || i<0){ //VERIFICACION ALUMNO printf("\nError en el numero de alumno, vuelva a ingresar "); scanf("%d", &i); } verif=al[i]; if(verif>=1){ //VERIFICACION DE CARGA DE NOTA printf("\nEl alumno ya tiene inscripta la nota: %.2f", verif); goto nroal; }else{
al[i]=nota;}
} }
int ausentes(float al, int x){ int i, contador=0;
for(i=1;i<=x;i++){ printf("Alumno %d: %.2f\n", i, al[i]); }
for(i=1;i<=x;i++){ if(al[i]<1){ contador+=1; } } printf("%d", contador); return contador; }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Los bucles están mal. SI el array es de 5 elementos, tienes que recorrer desde 0 hasta 4, no desde 1 hasta 5. Si accedes al índice 5, estás accediendo a un elemento inexistente, y puede desde tirar error, hasta corromper la memoria. Los for serían: for(i=0; i<max; i++)
|
|
|
En línea
|
|
|
|
n-utz
Desconectado
Mensajes: 165
Babylon es el vampiro!
|
Era eso, las vacaciones me hicieron mal. Gracias!!
PD: Ademas de tanto intentar, vi que el codigo que esta arriba tiene varias cosas mal. No lo usen como ejemplo para pasaje de parametros, cualquier cosa manden MP.
|
|
« Última modificación: 8 Agosto 2016, 00:45 am por n-utz »
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
No se como te enseñaron a usar los arreglos pero si es un arreglo de 5 elementos debes de procesar solo los datos del indice 0 al 4 Cuenta conmigo Indice 0 y llevamos 1 Indice 1 y llevamos 2 Indice 2 y llevamos 3 Indice 3 y llevamos 4 Indice 4 y llevamos 5 Deberia de ser algo asi, El detalle que al momento de escribir en el espacio alumnos[5], realmente estas escribiendo en el espacio designado para otra de las variables, se llama bufferoverflow y se da cuando escribes fuera de los limites de un arreglo. Deberia de quedar algo asi: int main(){ int aus; aus = ausentes(alumnos,5); } int ausentes(float al, int x){ int i, contador=0; for(i=0;i<x;i++){ printf("Alumno %d: %.2f\n", i , al [i ]); if(al[i]==0){ contador+=1; } } return contador; }
|
|
|
En línea
|
|
|
|
n-utz
Desconectado
Mensajes: 165
Babylon es el vampiro!
|
No se como te enseñaron a usar los arreglos pero si es un arreglo de 5 elementos debes de procesar solo los datos del indice 0 al 4 Cuenta conmigo Indice 0 y llevamos 1 Indice 1 y llevamos 2 Indice 2 y llevamos 3 Indice 3 y llevamos 4 Indice 4 y llevamos 5 Deberia de ser algo asi, El detalle que al momento de escribir en el espacio alumnos[5], realmente estas escribiendo en el espacio designado para otra de las variables, se llama bufferoverflow y se da cuando escribes fuera de los limites de un arreglo. Deberia de quedar algo asi: int main(){ int aus; aus = ausentes(alumnos,5); } int ausentes(float al, int x){ int i, contador=0; for(i=0;i<x;i++){ printf("Alumno %d: %.2f\n", i , al [i ]); if(al[i]==0){ contador+=1; } } return contador; }
Perfecto, si me lo han ensenado asi, lo que pasa que me desconcerte yo. Al ser "Alumnos" y el numero de indice ser el numero de alumno, quise obviar el elemento 0, como verán, pero me olvide de que el ultimo elemento seria el 4. Gracias che!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[SOLUCIONADO] Pasar array como parámetro.
Java
|
NetJava
|
3
|
23,210
|
15 Febrero 2011, 21:55 pm
por Debci
|
|
|
Pasar nombre de funcion como parametro de otra funcion en java
Java
|
xGisKaRDx
|
3
|
10,243
|
1 Agosto 2014, 23:27 pm
por jhonatanAsm
|
|
|
Ayuda: pasar array como parámetro (del objeto)
Java
|
JonaLamper
|
3
|
2,793
|
30 Octubre 2014, 13:27 pm
por ivancea96
|
|
|
Pasar un double como argumento en una función definida como float
Programación C/C++
|
fafafa01
|
1
|
2,873
|
30 Junio 2016, 11:02 am
por class_OpenGL
|
|
|
[Solucionado] Pasar una función como parámetro en C.
« 1 2 »
Programación C/C++
|
NOB2014
|
19
|
12,672
|
25 Septiembre 2016, 17:54 pm
por NOB2014
|
|