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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Arreglo y puntero en una funcion [No me corre]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arreglo y puntero en una funcion [No me corre]  (Leído 3,489 veces)
barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Arreglo y puntero en una funcion [No me corre]
« en: 12 Noviembre 2012, 14:16 pm »

En la escuela, me han dejado un problema sencillo, pero el maestro quiere que usemos, arreglos, punteros y una función, el problema es: "Contar una cierta cantidad de números (he puesto 10) y almacenarlas en mi arreglo, despues de tenerlas ahi, pasarle la direccion de cada datos, no del arreglo completo, sino de cada datos a mi puntero, de cierta forma tambien trabajara como un arreglo de puntero o algo asi, y despues con los punteros hacer el calculo, que en este caso sera una suma, he estado todo el dia, y no me corre, alguna idea... les dejo mi code:

code:

Código:
#include <stdio.h>
#include <stdlib.h>
#define sise 10
int suma(int arreglo[sise]);
void main ()
{
    int arreglo[sise], i;
    for (i=0;i<=sise-1;i++) //Aqui voy recorriendo el arreglo
    {
        printf("Escriba el numero\n");
        scanf("%d", &arreglo[i]);  // voy guardando un dato en cada posicion del arreglo
    }
    suma(arreglo[sise]);  // mi funcion que trabaja con los datos de mi arreglo
}
int suma(int xarreglo[sise]) //Inicializacion de mi funcion
{
    int sum=0,i,*pnt[sise];
    for(i=0;i<=sise-1;i++)    //Con el segundo for, recorro el arrelo de nuevo
    {
        pnt[i]=&xarreglo[i];  //doy al puntero la direccion de cada numero guardado en el arreglo
        sum+=pnt[i];
    }
    printf("La suma es: %d\n",sum);
}


« Última modificación: 12 Noviembre 2012, 14:22 pm por barnix456 » En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
C_1^N

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #1 en: 12 Noviembre 2012, 14:33 pm »

Hola barnix456!!
A ver.. vi dos cuestiones.. el main deberia devolver un entero pq de esta manera le devuelve el estado a la consola una vez finalizado el programa, cuando le pasas el arreglo a la funcion hacelo sin el [sise] el nombre del arreglo es un puntero al primer elemento del mismo y poniendole un subindice especifico le estas pasando el elemento de la posicion sise, no el arreglo completo.

Saludos!


En línea

La gestión manual de bloques de memoria en C es como hacer malabarismos con pastillas de jabón en la ducha de la prisión: todo diversión hasta que cometes un fallo
barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #2 en: 12 Noviembre 2012, 14:51 pm »

Hola C_1^N

Siempre me marca ese error, de que "El tipo de devolucion de main no es int", pero no se que es lo que deberia cambiar, si el codigo esta bien, y si lo ejecuto lo hace con normalidad, ahora en cuanto al codigo, le he dado vueltas y vueltas ya le hice esa modificacion que me dijiste, pase la funcion

suma(arreglo[]);

y nada
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #3 en: 12 Noviembre 2012, 15:04 pm »

Buenas!!!

Te he cambiado el código, a ver si es esto lo que necesitas:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define size 10
  5.  
  6. void suma(int *arreglo);
  7.  
  8. int main () {
  9.    int arreglo[size], i;
  10.    for(i = 0; i < size; i++) { //Aqui voy recorriendo el arreglo
  11.        printf("Escriba el numero\n");
  12.        scanf("%d", &arreglo[i]);  // voy guardando un dato en cada posicion del arreglo
  13.    }
  14.    suma(arreglo);  // mi funcion que trabaja con los datos de mi arreglo
  15.    while(getchar() != '\n') ; // Limpia el buffer
  16.    getchar(); // Pausa la ejecucion del programa hasta que pulses una tecla
  17.    return 0;
  18. }
  19.  
  20. void suma(int *xarreglo) { //Inicializacion de mi funcion
  21.    int sum = 0, i, pnt[size];
  22.    for(i = 0; i < size; i++) {
  23.        pnt[i] = xarreglo[i];
  24.        sum+=pnt[i];
  25.    }
  26.    printf("La suma es: %d\n", sum);
  27. }
  28.  
  29.  

Saludos!!
En línea

Breakbeat como forma de vida
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #4 en: 12 Noviembre 2012, 15:10 pm »

Hola!

Antes que nada, para pasarle a la función el arreglo solo debes hacer:

Código
  1. suma(arreglo);

Le estarías pasando por parámetro la dirección al primer elemento del arreglo. Con eso es suficiente para que tu argumento actual actúe ordenadamente.

Por otro lado, dentro del for de la función suma no estoy muy seguro de lo que quieres hacer. Pero lo que estás haciendo ahí es sumar las direcciones de memoria de todos los int que forman el arreglo.
En realidad no es necesario utilizar ese arreglo de punteros "pnt", pero si tanto lo quieres, fijate que al hacer:

Código
  1. sum += pnt[i];

En realidad lo que haces ahí es sumar los punteros (que es lo que guarda pnt) es decir, sumas las direcciones de memoria de cada uno de los int correspondientes.
Para que esto funcione, lo que debes hacer es desreferenciar dichos punteros:

Código
  1. sum += *pnt[i];

Así estarías sumando los valores correspondientes que apuntan dichos punteros.

Si bien esto funcionaría, la verdad es que el code está un poco desordenado y es feo. Fijate de poder arreglarlo y hacer algo más limpio (por ejemplo, ese arreglo de punteros no es necesario). Además, fijate que la función "suma" debería de devolver un "int" y jamás lo hace (sólo imprime la suma por pantalla).
En línea

barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #5 en: 12 Noviembre 2012, 15:13 pm »

Hola satu

Gracias por el codigo, no sabia eso para limpiar el bufer, entonces anlizando tu codigo, mi variable pnt que en este caso queria que fuera mi puntero osea de esta manera *pnt, no va, si no el puntero es el arreglo, y pnt viene siendo un arreglo cualqueira, la magia esta en pasar a la funcion nuestro arreglo sin un subindice, bueno sin nada.. gracias....!!  ;)
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #6 en: 12 Noviembre 2012, 15:18 pm »

una pregunta mas, si estamos trabajando con punteros, puedo imprimir en pantalla la diraccion de ese dato, como lo hago????
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #7 en: 12 Noviembre 2012, 15:21 pm »

Si por ejemplo tenés una variable de tipo "int":

Código
  1. printf("La dirección de la variabe es: %x",&variable);

Lo que hace "%x" es imprimirlo en hexadecimal, y el ampersand (&) te devuelve la dirección de memoria de la variable.

Saludos.
En línea

C_1^N

Desconectado Desconectado

Mensajes: 13



Ver Perfil
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #8 en: 12 Noviembre 2012, 15:22 pm »

tamb podes hacerlo con %p

Saludos!
En línea

La gestión manual de bloques de memoria en C es como hacer malabarismos con pastillas de jabón en la ducha de la prisión: todo diversión hasta que cometes un fallo
barnix456

Desconectado Desconectado

Mensajes: 128


El soft es como el sexo, cuando es Libre es mejor


Ver Perfil
Re: Arreglo y puntero en una funcion [No me corre]
« Respuesta #9 en: 12 Noviembre 2012, 15:29 pm »

gracias muchas gracias...!!
En línea

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

Isaac Asimov
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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