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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Pasar Array como parámetro a funcion INT o FLOAT
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Pasar Array como parámetro a funcion INT o FLOAT  (Leído 3,305 veces)
n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
[C] Pasar Array como parámetro a funcion INT o FLOAT
« en: 8 Agosto 2016, 00:27 am »

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.

Código:
#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", &nota);
        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", &nota);
            }
            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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C] Pasar Array como parámetro a funcion INT o FLOAT
« Respuesta #1 en: 8 Agosto 2016, 00:39 am »

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:
Código
  1. for(i=0; i<max; i++)


En línea

n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: [C] Pasar Array como parámetro a funcion INT o FLOAT
« Respuesta #2 en: 8 Agosto 2016, 00:42 am »

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 Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: [C] Pasar Array como parámetro a funcion INT o FLOAT
« Respuesta #3 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:
Código
  1.  
  2. int main(){
  3.  
  4. int aus;
  5.  
  6. aus = ausentes(alumnos,5);
  7.  
  8. }
  9.  
  10. int ausentes(float al, int x){
  11.    int i, contador=0;
  12.  
  13.    for(i=0;i<x;i++){
  14.        printf("Alumno %d: %.2f\n", i, al[i]);
  15.        if(al[i]==0){
  16.            contador+=1;
  17.        }
  18.    }
  19.    printf("%d", contador);
  20.    return contador;
  21.    }
  22.  
En línea

n-utz

Desconectado Desconectado

Mensajes: 165

Babylon es el vampiro!


Ver Perfil
Re: [C] Pasar Array como parámetro a funcion INT o FLOAT
« Respuesta #4 en: 8 Agosto 2016, 00:47 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:
Código
  1.  
  2. int main(){
  3.  
  4. int aus;
  5.  
  6. aus = ausentes(alumnos,5);
  7.  
  8. }
  9.  
  10. int ausentes(float al, int x){
  11.    int i, contador=0;
  12.  
  13.    for(i=0;i<x;i++){
  14.        printf("Alumno %d: %.2f\n", i, al[i]);
  15.        if(al[i]==0){
  16.            contador+=1;
  17.        }
  18.    }
  19.    printf("%d", contador);
  20.    return contador;
  21.    }
  22.  

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO] Pasar array como parámetro.
Java
NetJava 3 23,210 Último mensaje 15 Febrero 2011, 21:55 pm
por Debci
Pasar nombre de funcion como parametro de otra funcion en java
Java
xGisKaRDx 3 10,243 Último mensaje 1 Agosto 2014, 23:27 pm
por jhonatanAsm
Ayuda: pasar array como parámetro (del objeto)
Java
JonaLamper 3 2,793 Último mensaje 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 Último mensaje 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 Último mensaje 25 Septiembre 2016, 17:54 pm
por NOB2014
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines