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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [duda] invocacion de una funcion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [duda] invocacion de una funcion  (Leído 2,065 veces)
dabaji

Desconectado Desconectado

Mensajes: 8


Ver Perfil
[duda] invocacion de una funcion
« en: 7 Septiembre 2012, 17:00 pm »

Hola tengo una duda tengo que hacer un programa que imprima arreglos ordenados de menor a mayor y que busque el numero de la mitad del arreglo(eso se llamaria mediana) el programa lo tengo casi hecho:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 11


void arreglo (int arr[N])
{
    for (int i=0; i<N; i++)
        arr = rand()%100;

}


void imprimirArreglo(int arr[N])
{
    for(int i=0; i<N; i++){

        printf("[%d] : %d", i, arr);
        printf("\n");
       }
}
void ordenadoMenoraMayor(int arr[N]){

    printf("Tabla ordenada menor a mayor:\n");
    int ordenados,ordmin=0,temp=0;
    for(ordenados=0;ordenados<N-1;ordenados++){
        ordmin=ordenados;
        for(int j=ordenados+1;j<N;j++){
            if (arr[j]<arr[ordmin])
                ordmin=j;
        }
        temp=arr[ordmin];
        arr[ordmin]=arr[ordenados];
        arr[ordenados]=temp;

    }
}

int buscarMediana(int mediana, int arr[N])
{
    mediana = N/2; //la mitad

    for (int i=0;i<N;i++)
        if (arr==mediana){
            printf ("Mediana es: %d", mediana);
        }
return mediana;

}

int main()
{

 int mediana;
 int tabla[N];
arreglo(tabla);
ordenadoMenoraMayor(tabla);
imprimirArreglo(tabla);
buscarMediana(mediana);



return 0;

}


el tema que no se como invocar en el main la funcion "buscarMediana" o por ahi me falta algo de esta funcion...
Gracias!


« Última modificación: 7 Septiembre 2012, 17:02 pm por dabaji » En línea

apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Re: [duda] invocacion de una funcion
« Respuesta #1 en: 7 Septiembre 2012, 18:34 pm »

Lo he revisado un poco por encima, pero creo que el problema está en que al invocar a la función le pasas un solo argumento y requiere dos. Mira a ver si así se soluciona.

Edito: Aparte de eso, te falta la presentación de la función antes de la definición. Es decir, colocar esta línea:

int buscarMediana(int mediana, int arr[N]);

Fíjate en que solo se diferencia de la de tu definición de que tiene un punto y coma al final.

También te falta la presentación del resto de funciones.
Y un consejillo, suele ser mejor poner las definiciones de las funciones después de main y las líneas de presentación antes de esta.

No sé si irá porque lo he revisado muy por encima, pero mira  a ver.

Saludos.


« Última modificación: 7 Septiembre 2012, 18:38 pm por apoeti » En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: [duda] invocacion de una funcion
« Respuesta #2 en: 7 Septiembre 2012, 22:41 pm »

Hola dabaji.

La media aritmética, aunque puede tomar valores enteros, por lo regular es un número real, la funcion mediana tendría que devolver ese tipo.
La mediana resulta de sumar los elementos de una serie y dividirlos por la cantidad de elementos que la componen.
Entonces tu función debería ser algo como:

Código
  1. float mediana(int vec[N]) {
  2.  float m=0;
  3.  for(int i=0; i<N; i++) m += vec[i];
  4.  return m/N;
  5. }
  6.  

Saludos.
En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: [duda] invocacion de una funcion
« Respuesta #3 en: 8 Septiembre 2012, 05:17 am »

Citar
La media aritmética, aunque puede tomar valores enteros, por lo regular es un número real, la funcion mediana tendría que devolver ese tipo.
La mediana resulta de sumar los elementos de una serie y dividirlos por la cantidad de elementos que la componen.

diria que la media aritmetica es la suma de todos los numeros divididos por el total de ellos; y la mediana es el numero central que queda al ordenar todos los numeros. por ejemplo: 1 1 3 4 5 5 6 6 8 9 9, o si es 1 1 3 4 5 5 6 6 8 9 9 12 entonces se hace la meda aritmetica entre los dos centrales: 5.5

http://es.wikipedia.org/wiki/Mediana_%28estad%C3%ADstica%29

Citar
Hola tengo una duda tengo que hacer un programa que imprima arreglos ordenados de menor a mayor y que busque el numero de la mitad del arreglo(eso se llamaria mediana)

a parte de los errores que ya te han dicho, tu funcion mediana() diria que no esta del todo bien. como he dicho arriba, la mediana es el numero central que queda, no el total de numeros entre 2. si fuera como tu funcion, imagina el caso de los numeros 1 2 5 6 9. tu programa devolveria 5/2=2.5, cuando en realidad la mediana es 5. o en el caso de que el numero de enteros sea par, tendras que hacer la media aritmetica de los 2 numeros centrales, por lo que puede ser que la mediana no sea un numero entero y por lo tanto la funcion debe devolver un real (float). ademas seria mejor que le pasaras un puntero a la cadena de enteros en lugar de la cadena entera (asi ahorras espacio), y no hace falta pasarle como argumento "mediana" ya que eso es precisamente lo que calcula. en el caso de que lo hagas asi, tambien deberias pasarle el tamaño del arreglo como argumento (podrias calcularlo dentro pero asi es mas rapido y mas facil). en fin, quedaria de la siguiente manera:

Código
  1. float BuscarMediana(int *arreglo, int tNum) {
  2.  
  3. (tNum%2 > 0)? return ((float)arreglo[tNum/2]): return ((float)(arreglo[tNum]+arreglo[tNum-1])/2.0);
  4. }

y desde el main deberias llamarla asi:

Código
  1. float mediana=BuscarMediana(tabla, N);
  2. printf("La mediana es: %.2f\n", mediana);

espero que te sirva de ayuda, un saludo!
« Última modificación: 8 Septiembre 2012, 05:27 am por xiruko » En línea

eleon

Desconectado Desconectado

Mensajes: 99


Ver Perfil
Re: [duda] invocacion de una funcion
« Respuesta #4 en: 8 Septiembre 2012, 13:57 pm »

Mediana: Elemento que deja a izquierda y derecha el 50% de las observaciones ordenadas.
N: Cantidad de elementos que componen nuestra serie.


La fórmula no es N/2 sino (N+1)/2 y NO NOS DA LA MEDIANA, lo que nos da es su posición, por ejemplo:

Caso en el cual N es un número impar:

Serie: 1, 3, 6, 8, 12 -> N = 5

Por tanto (N+1)/2 = 3, lo cual quiere decir que el tercer elemento de nuestra serie es la mediana, es decir, MEDIANA = 6.

Caso en el cual N es un número par:

Serie: 1, 8, 13, 22, 24, 27 -> N = 6

Por tanto (N+1)/2 = 3.5, pero no existe ningún elemento en la posición 3.5, lo que hacemos aqui es la media entre el elemento que está en la posición 3 y el que está en la posición 4 -> MEDIANA = 17.5

Como podrás ver la función con la cual calculas la mediana no tiene nada que ver con la mediana real, inténtalo de nuevo y si no das con la tecla postea hasta donde hayas llegado y te indico.

Saludos.
« Última modificación: 8 Septiembre 2012, 14:00 pm por eleon » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con funcion dentro de funcion en un echo
PHP
N4X 6 5,811 Último mensaje 21 Enero 2010, 18:12 pm
por N4X
Duda con funcion
PHP
octavioxd 8 3,431 Último mensaje 9 Febrero 2010, 12:29 pm
por N4X
[Duda]funcion en POO
PHP
rolly21102 2 2,699 Último mensaje 1 Julio 2010, 05:51 am
por rolly21102
Duda con funcion<...>
Programación C/C++
_niu 3 1,940 Último mensaje 26 Enero 2012, 03:02 am
por BlackZeroX
Invocacion funcion con variables de tipo puntero
Programación C/C++
LadyWin 4 5,930 Último mensaje 20 Julio 2021, 17:44 pm
por LadyWin
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines