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;
}
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++)
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.
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;
}
}
printf("%d", contador);
return contador;
}
Cita de: AlbertoBSD en 8 Agosto 2016, 00:45 AM
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;
}
}
printf("%d", contador);
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!