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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


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


Desconectado Desconectado

Mensajes: 565



Ver Perfil
paso de vectores a una funcion
« en: 4 Septiembre 2014, 22:50 pm »

hola amigos del foro tengo una duda y es que tengo dos vectores, a una función.
un vector es (int *, const int) y el otro es (string * , const int) y quiero pasar los dos vectores y se unan en una sola funcion
se pasar un vector a una función, pero pasar dos vectores y que se unan no le encuentro la vuelta  ::).
intente (int *, const int, string * , const int) pero solo entiende el primero como le hago  :huh:


En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: paso de vectores a una funcion
« Respuesta #1 en: 5 Septiembre 2014, 01:10 am »

Hola flony.

No sé si interpreté bién la consulta, pero fijate si te sirve del modo de este ejemplo:

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4.  
  5. using namespace std;
  6.  
  7. void joindata(int*, const int , string* , const int, string*);
  8.  
  9. int main() {
  10.  int vi[10] = {1,2,3,4,5,6,7,8,9,10};
  11.  string vs[6] = {"uno", "dos", "tres", "cuatro", "cinco", "seis"};
  12.  string res[100];
  13.  int isize = sizeof(vi)/sizeof(vi[0]);
  14.  int ssize = sizeof(vs)/sizeof(vs[0]);
  15.  int maxsize = isize > ssize ? isize : ssize;
  16.  
  17.  joindata(vi, isize, vs, ssize, res);
  18.  for (int i=0; i < maxsize; i++)
  19.    cout << res[i] << endl;
  20.  cin.get();
  21.  return 0;
  22. }
  23.  
  24. void joindata(int* vint, const int nvi, string* vstr, const int nvs, string* result) {
  25.  int minsize = nvi < nvs ? nvi : nvs;
  26.  
  27.  for(int i=0; i < minsize; i++) {
  28.    stringstream aux;
  29.    aux << vint[i];
  30.    result[i] = aux.str() + " " + vstr[i];
  31.  }
  32.  if (nvi > nvs)
  33.    for(int i=minsize; i<minsize+abs(nvi-nvs);i++) {
  34.      stringstream aux;
  35.      aux << vint[i];
  36.      result[i] = aux.str();
  37.    }
  38.  if (nvi < nvs)
  39.     for(int i=minsize; i<minsize+abs(nvi-nvs);i++)
  40.       result[i] = vstr[i];
  41. }
  42.  

Saludos.


« Última modificación: 5 Septiembre 2014, 01:22 am por ecfisa » En línea

flony


Desconectado Desconectado

Mensajes: 565



Ver Perfil
Re: paso de vectores a una funcion
« Respuesta #2 en: 5 Septiembre 2014, 03:52 am »

bueno acá mi problema  :-[
Código
  1. /*
  2. Me dieron la tarea de crear un programa que cumpla con las características para resolver el siguiente problema:
  3. En una elección, existen 7 candidatos, cada votante puede votar una vez ,
  4. por el candidato de su elección . El voto se registra con un numero del 1 al
  5. 7.El numero de votantes es desconocido de antemano ,pero la elección termina cuando
  6. se ingresa un 0 , cualquier voto que no pertenezca al hongo [1,7] se considerara como
  7. nulo .
  8.  
  9. Un archivo llamado votos.txt contiene los nombres de los candidatos. El primer nombre es
  10. considerado como el candidato numero uno , así sucesivamente.("ACA DECIDI HACERLO MAS DIFICIL Y QUE TENGAN NOMBRES Y NO NUMEROS SINO ES FACIL YA TENGO LA RESPUESTA")
  11.  
  12. Los nombres son seguidos por los votos.
  13.  
  14. Se debe escribir con programa que lea los datos y realice el escrimo de la elección, escribiendo
  15. los resultados en un archivo llamado resultado.txt
  16.  
  17. La salida de especificar el numero total de votos, el numero total de votos por candidato
  18. , total de votos nulos y los ganadores.
  19. */
  20. #include <iostream>
  21. #include <fstream>
  22. #include <string>
  23. #include <vector>
  24.  
  25. using namespace std;
  26.  
  27. void votacion (int); //determina a que candidato se esta votando o si es nulo
  28. void conteo(int);    //determina a que candidato que es un [i] en un vector va el voto
  29. void leer_txt();     //lee de un txt los nombres de los candidatos y pasan a formar parte de un vector
  30. void fin(int * const, const int ); //quiero conteo() y leer() salgan en pantalla candadato[i]-voto[i]
  31. void escribir_txt(); // la funcion fin() se escribe en un txt
  32.  
  33.  
  34. int main() //funcion main todavia no concluida del todo
  35. {
  36. int voto;
  37. cout<<"bienvenido a la votacion de vaya a saber que cosa"<<endl;
  38. cout<<"los candidatos son: " <<endl;
  39. leer_txt();
  40. cout<<"emita su voto UNO para el primer candidato"<<endl;
  41. cout<<"DOS para el segundo etc etc"<<endl;
  42. if (voto!=0)
  43. {
  44. votacion(voto);
  45. }
  46. else
  47. {
  48. cout<<"parece que termino la votacion "<<endl;
  49. cout<<"gracias por usar nuestros servicios :)"<<endl;
  50. fin();      
  51. }
  52.  
  53.  
  54.  
  55. return 0;
  56. }
  57.  
  58. void votacion(int voto_candidato)
  59. {
  60.  
  61. if (voto_candidato>0 && voto_candidato <8)
  62. {
  63. conteo(voto_candidato);
  64. }
  65. else
  66. {
  67. if(voto_candidato<0 || voto_candidato >8 )
  68. {
  69. cout<<"ingreso voto nulo" <<endl;
  70. voto_candidato=7;
  71.    }
  72.  
  73. }
  74. }
  75.  
  76. void conteo (int posicionEnElVector)
  77. {
  78. const int tamanioHongo=7;
  79. int hongo[tamanioHongo]={0};
  80. hongo[posicionEnElVector-1]+=1;
  81. fin(hongo, tamanioHongo);
  82. }
  83.  
  84. void fin(int * const elementoPuntero, const int tamanio1)
  85. {
  86.  
  87. }
  88.  
  89. void leer_txt()
  90. {
  91. const int tamanio=7;
  92. int candidatosTxt [tamanio];
  93. ifstream MiArchivo ("votos.txt");
  94. if (MiArchivo.is_open())
  95. {
  96. for (int i = 0; i < 8; i++)
  97. {
  98. candidatosTxt[i];
  99. }
  100. fin(candidatosTxt, tamanio);//ver tema de pasar un string cuando espera recibir un int
  101. }
  102. }
  103.  
  104. void escribir_txt()
  105. {
  106. ofstream myFile;
  107. myFile.open("resultado.txt");
  108. myFile<<"aca hasta podemos poner la funcion fin"; // aca pondremos la funcion fin y quedara en un txt ;)
  109. myFile.close();
  110. }
« Última modificación: 5 Septiembre 2014, 03:54 am por flony » En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: paso de vectores a una funcion
« Respuesta #3 en: 5 Septiembre 2014, 09:12 am »

Tienes varias opciones a la hora de enfocar el problema:

Usar contenedores

Los contenedores de C++ son de los elementos más útiles en programación. Elegir el contenedor adecuado a cada situación puede ahorrarte mucho código.

En tu caso, imagina que tienes X candidatos. Podrías crear un vector de X+1 elementos, de tal forma que el índice cero se use para almacenar los votos nulos, el resto de índices se usa para contar los votos de cada candidatos:

Código
  1. // Este número lo calculas al leer el fichero
  2. int numCandidatos = 10;
  3.  
  4. // Creamos un vector que inicialmente va a tener X + 1 elementos
  5. // Al ser un vector de tipo int, el valor inicial de cada elemento es 0.
  6. std::vector< int > votos{ numCandidatos + 1 };
  7.  
  8. // Fase de votación
  9. std::cout << "Emite tu voto: ";
  10. int voto;
  11. std::cin >> voto;
  12.  
  13. if ( voto == 0 )
  14. {
  15.  // Fin de la votación
  16. }
  17. else if ( voto < 0 || voto >= votos.size( ) )
  18.  votos[ 0 ]++; // El voto es nulo
  19. else
  20.  votos[ voto ]++; // Incrementamos los votos del candidato

Con este formato, la presentación de los resultados es bastante trivial:

Código
  1. for ( unsigned int i = 1; i < votos.size( ); ++i )
  2. {
  3.  std:cout << "Candidato " << i << ": " << votos[ i ] << " votos" << std::endl;
  4. }
  5.  
  6. std::cout << "Votos nulos: " << votos[ 0 ] << std::endl;
  7.  
  8. // Total de votos versión 1:
  9. int total = 0;
  10. for ( auto it = std::begin( votos ); it != std::end( votos ); ++it )
  11.  total += *it;
  12.  
  13. // Total de votos version 2:
  14. int total = std::accumulate( std::begin( vector ), std::end( vector ), 0 );
  15.  
  16. std::cout << "Total de votos: " << total << std::endl;

Otro contenedor que puedes usar es 'map'. Los mapas tienen la ventaja de que pueden usar un string por índice (y quien dice un string dice un float, una clase propia, ... ), lo cual viene bien en bastantes ocasiones.

También puedes usar new y delete para crear un arreglo. A mi no me parece una buena idea salvo que quieras practicar con ello.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado] Duda con paso de un array a una función.
Programación C/C++
Caster 9 2,261 Último mensaje 18 Julio 2013, 11:38 am
por Caster
paso de parametros a la funcion main y archvos pbm « 1 2 »
Programación C/C++
kikian94 10 3,211 Último mensaje 24 Noviembre 2013, 18:26 pm
por kikian94
Problema con vectores en una función
Programación C/C++
Orubatosu 2 1,031 Último mensaje 24 Noviembre 2014, 19:34 pm
por Orubatosu
Error en funcion que retorna vectores en C.
Programación C/C++
euroesp 7 2,040 Último mensaje 29 Julio 2016, 16:17 pm
por do-while
C - Paso de cadenas a una funcion
Programación C/C++
Niber 1 497 Último mensaje 5 Junio 2019, 21:29 pm
por Niber
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines