• Lunes 23 de Diciembre de 2024, 17:15

Autor Tema:  Ayuda Con Los Punteros Y Los Procedimientos  (Leído 1114 veces)

angelpucci

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Ayuda Con Los Punteros Y Los Procedimientos
« en: Lunes 17 de Abril de 2006, 00:53 »
0
:scream:  Hola a todos, yo soy prácticamente nuevo en C++, ahora estoy aprendiendo este lenguaje pero tengo ciertos problemas para entender el funcionamiento de los punteros con los vectores o matrices o structuras, ósea no entiendo como pasar un vector como un puntero hacia una función o procedimiento, si alguien supiera le agradecería mucho su ayuda y le agradecería que me responda a mi mail anpuccinelli@yahoo.com o por este foro o por ambos; aqui mando un código para que lo analicen, espero lo entiendan y me digan que estoy haciendo mal, no me copila y no entiendo por que  :think: , siento que me falta mucha practica y tambien teoria, todos los dias le pido a San Codigo  :angel:  que me ilumine pero este Santo se ha olvidado de mi:

Porsiacaso estoy trabajando en el DEV c++...........

Código: Text
  1. //Dados 50 números enteros, obtener el promedio de ellos y mostrar en pantalla el
  2. //promedio y todos los números ingresados mayores que el.
  3.  
  4. #include <iostream.h>
  5. #include <stdlib.h>
  6. #include <streambuf.h>
  7.  
  8. void carga (double *vector[], int num);
  9. double promedio (double vector[], int num);
  10. void impresion (double vector[], double xprom, int num);
  11.  
  12. int main()
  13. { int n;
  14.   double *vec, prom;
  15.  
  16.   cout<<"Ingresar la cantidad de numeros a procesar: ";cin>>n;
  17.   carga (&vec, n);
  18.   prom = promedio(vec,n);
  19.   impresion (vec, prom, n);
  20.  
  21.       system("PAUSE");
  22.       return 0;
  23. }
  24.  
  25. void carga (double *vector[], int num){
  26.      int i;
  27.  
  28. for (i=0;i<num;i++){
  29. cout<<"Numero "<<i+1<<": ";
  30. cin>>vector[i];}
  31.  
  32. }
  33.  
  34. double promedio (double vector[], int num){
  35.        int i;
  36.        double promedio, suma=0;
  37.  
  38. for(i=0;i<num;i++)
  39.    suma= suma + vector[i];
  40.  
  41. promedio= suma/num;
  42. return(promedio);
  43. }
  44.  
  45. void impresion (double vector[], double xprom, int num){
  46.      int i, j=0,p;
  47.      double *vectorimp;
  48.  
  49. for (i=0;i<num;i++)
  50.     if (vector[i]<xprom){
  51.        vectorimp[j]= vector[i];
  52.        j++;}
  53.  
  54. cout<<"El promedio es: "<<xprom;
  55. cout<<endl<<endl;
  56. cout<<"Los numeros ingresados mayores al promedio son: "<<endl<<endl;
  57. for (p=0;p<=j;j++)
  58.     cout<<vectorimp[p]<<"/n";
  59.  
  60. }
  61.  

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Ayuda Con Los Punteros Y Los Procedimientos
« Respuesta #1 en: Lunes 17 de Abril de 2006, 06:23 »
0
Cuando tengas problemas al compilar, lo mejor es tratar de incluir también los errores que te mostró el compilador (en la ventana de salida, clic derecho-> copiar). Allí es donde se ve con claridad de qué es lo que se queja el compilador ;).

Viendo rápido tu código, me parece que el primer parámetro de la función carga está mal, debería ser algo como vector[] ó *vector. También, en la función impresion, declaras un puntero a double (vectorimp) que al parecer pretendes utilizar como vector, pero nunca reservas memoria para dicho vector.

También, en el C++ estándar, el archivo de cabecera es <iostream> y no <iostream.h>, además de que la función (bueno, instancia) cout está dentro del namespace (espacio de nombre) std, por lo que para usarlo tiene que ser algo como esto:
Código: Text
  1.  
  2. #include &#60;iostream&#62;
  3. using std::cout;
  4. using std::endl;
  5. ...
  6. cout &#60;&#60; &#34;Hola amigos de Solo Codigo&#34; &#60;&#60; endl;
  7. ...
  8.  
  9.  
o
Código: Text
  1.  
  2. #include &#60;iostream&#62;
  3. ...
  4. std::cout &#60;&#60; &#34;Hola amigos de SoloCodigo&#34; &#60;&#60; std::endl;
  5. ...
  6.  
  7.  

Si no estás en un curso, te convendría comprarte un libro (yo me compré uno, también estoy aprendiendo C++, pero ya manejo más o menos C y los punteros), o también (aunque siempre es mejor un libro), puedes buscar algún tutorial aquí.

Saludos,
José Jorge (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

angelpucci

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Ayuda Con Los Punteros Y Los Procedimientos
« Respuesta #2 en: Martes 18 de Abril de 2006, 00:32 »
0
Hola Geo, muchas gracias por responder y gracias tambien por la ayuda que le das a todos aqui, mira yo uso el DEV C++, este IDE te pone en la pantalla las librerias que usualmente se usan, es por ello que las librerias estan asi como se ven, lo que yo ando buscando con este codigo es aprender a trabajar vectores y matrices pero mandandolas a un funcion o procedimiento para asi trabajar todo por separado y no complicarme la vida con una forma estructurada tradicional, aunque está tambien es una forma estructurada de trabajar pero con funciones y procedimientos se hace mas leible el codigo, corrijeme si me equivoco, entonces lo que quiero entender es como mandar un vector o matriz de forma dinamica y no estatica para aprovechar espacio en memoria, a un procedimiento  o funcion para asi trabajarlo dentro de la funcion o proced. y luego regresar al main y seguir con el siguiente procd. o func. , si puedes descargate el DEV C++ de aqui , y veraz lo que te digo de las librerias....
Espero que me puedas ayudar.....

Saludos

Ång

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Ayuda Con Los Punteros Y Los Procedimientos
« Respuesta #3 en: Miércoles 19 de Abril de 2006, 02:32 »
0
Citar
Hola Geo, muchas gracias por responder y gracias tambien por la ayuda que le das a todos aqui, mira yo uso el DEV C++, este IDE te pone en la pantalla las librerias que usualmente se usan, es por ello que las librerias estan asi como se ven,
Yo uso Dev-C++ y esto es lo que te pone cuando creas un nuevo proyecto de aplicación de consola con C++:
Código: Text
  1.  
  2. #include &#60;cstdlib&#62;
  3. #include &#60;iostream&#62; // Esta es la forma de incluir cabeceras estándar
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.     system(&#34;PAUSE&#34;);
  10.     return EXIT_SUCCESS;
  11. }
  12.  
  13.  

Citar
lo que yo ando buscando con este codigo es aprender a trabajar vectores y matrices pero mandandolas a un funcion o procedimiento para asi trabajar todo por separado y no complicarme la vida con una forma estructurada tradicional, aunque está tambien es una forma estructurada de trabajar pero con funciones y procedimientos se hace mas leible el codigo, corrijeme si me equivoco
Eso que mencionas es precisamente la programación estructurada: dividir una gran tarea en pequeñas subtareas, y si alguna subtarea es medianamente grande pues también dividirla en más subtareas (aunque tampoco hay que exagerar demasiado), tratando de que las subtareas sean lo más generales posibles (cuando se pueda) de manera que puedan aprovecharse el mayor número posible de veces.

Citar
entonces lo que quiero entender es como mandar un vector o matriz de forma dinamica y no estatica para aprovechar espacio en memoria, a un procedimiento o funcion para asi trabajarlo dentro de la funcion o proced. y luego regresar al main y seguir con el siguiente procd. o func.
Lo que haces es en cierta forma correcto, una función que reciba como parámetro un array (vector) sería como una de estas (su declaración/prototipo):
Código: Text
  1.  
  2. tipoRetorno recibeArray( elArray[], int tamanioArray );
  3. tipoRetorno recibeArray( *punteroAlPrimerElemento, int tamanioArray );
  4.  
  5.  
Aquí es necesario pasar el tamaño como parámetro pues no hay forma de saberlo de otra manera. El array se pasaría más o menos así:
Código: Text
  1.  
  2. #define TAM_ARRAY 5
  3. int miArray[ TAM_ARRAY ] = { 0 };
  4. ...
  5. recibeArray( miArray, TAM_ARRAY );
  6.  
  7.  

Ahora, esto es básico para entender cómo trabajan los punteros y su relación con los arrays. Pero una mejor implementación sería crear un tipo de dato nuevo que encapsule el comportamiento de un vector o de una matriz (en la biblioteca del C++ estándar ya se tiene una forma de implementar vectores). Por ejemplo, para manejo de matrices de enteros podrías usar algo como esto (es precisamente lo que estoy haciendo ahora para un pequeño programa de operaciones sencillas de matrices):

Código: Text
  1.  
  2. struct MATRIZ {
  3.   int filas;
  4.   int columnas;
  5.   int* datos;
  6. };
  7.  
  8. tipoRetorno recibeMatriz( MATRIZ *laMatriz );
  9.  
  10.  
Aquí, ya no necesitas pasar el tamaño pues de eso te encargarías en la parte donde creas la matriz.

Nota: esto que pongo es una struct al estilo C, en C++ puedes crear un objeto Matriz (una clase) con todos los métodos (funciones) para manejarse.

Por último, te recuerdo nuevamente, te recomiendo mucho que te consigas un libro (o busques un buen tutorial, como este: http://c.conclase.net/curso/index.php), avanzarás más rápido leyendo/practicando un poco por tu cuenta y preguntando de vez en cuando (o a menudo, si lo amerita) por aquí :).

Saludos,
José Jorge (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip