Autor
|
Tema: paso de vectores a una funcion (Leído 2,177 veces)
|
flony
Desconectado
Mensajes: 585
|
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 
|
|
|
En línea
|
si un problema no tiene solucion entonces no es un problema...es algo inevitable 
|
|
|
ecfisa
Desconectado
Mensajes: 114
|
Hola flony. No sé si interpreté bién la consulta, pero fijate si te sirve del modo de este ejemplo: #include <iostream> #include <string> #include <sstream> using namespace std; void joindata(int*, const int , string* , const int, string*); int main() { int vi[10] = {1,2,3,4,5,6,7,8,9,10}; string vs[6] = {"uno", "dos", "tres", "cuatro", "cinco", "seis"}; string res[100]; int isize = sizeof(vi)/sizeof(vi[0]); int ssize = sizeof(vs)/sizeof(vs[0]); int maxsize = isize > ssize ? isize : ssize; joindata(vi, isize, vs, ssize, res); for (int i=0; i < maxsize; i++) cout << res[i] << endl; cin.get(); return 0; } void joindata(int* vint, const int nvi, string* vstr, const int nvs, string* result) { int minsize = nvi < nvs ? nvi : nvs; for(int i=0; i < minsize; i++) { stringstream aux; aux << vint[i]; result[i] = aux.str() + " " + vstr[i]; } if (nvi > nvs) for(int i=minsize; i<minsize+abs(nvi-nvs);i++) { stringstream aux; aux << vint[i]; result[i] = aux.str(); } if (nvi < nvs) for(int i=minsize; i<minsize+abs(nvi-nvs);i++) result[i] = vstr[i]; }
Saludos.
|
|
« Última modificación: 5 Septiembre 2014, 01:22 am por ecfisa »
|
En línea
|
|
|
|
flony
Desconectado
Mensajes: 585
|
bueno acá mi problema  /* Me dieron la tarea de crear un programa que cumpla con las características para resolver el siguiente problema: En una elección, existen 7 candidatos, cada votante puede votar una vez , por el candidato de su elección . El voto se registra con un numero del 1 al 7.El numero de votantes es desconocido de antemano ,pero la elección termina cuando se ingresa un 0 , cualquier voto que no pertenezca al hongo [1,7] se considerara como nulo . Un archivo llamado votos.txt contiene los nombres de los candidatos. El primer nombre es 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") Los nombres son seguidos por los votos. Se debe escribir con programa que lea los datos y realice el escrimo de la elección, escribiendo los resultados en un archivo llamado resultado.txt La salida de especificar el numero total de votos, el numero total de votos por candidato , total de votos nulos y los ganadores. */ #include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; void votacion (int); //determina a que candidato se esta votando o si es nulo void conteo(int); //determina a que candidato que es un [i] en un vector va el voto void leer_txt(); //lee de un txt los nombres de los candidatos y pasan a formar parte de un vector void fin(int * const, const int ); //quiero conteo() y leer() salgan en pantalla candadato[i]-voto[i] void escribir_txt(); // la funcion fin() se escribe en un txt int main() //funcion main todavia no concluida del todo { int voto; cout<<"bienvenido a la votacion de vaya a saber que cosa"<<endl; cout<<"los candidatos son: " <<endl; leer_txt(); cout<<"emita su voto UNO para el primer candidato"<<endl; cout<<"DOS para el segundo etc etc"<<endl; if (voto!=0) { votacion(voto); } else { cout<<"parece que termino la votacion "<<endl; cout<<"gracias por usar nuestros servicios :)"<<endl; fin(); } return 0; } void votacion(int voto_candidato) { if (voto_candidato>0 && voto_candidato <8) { conteo(voto_candidato); } else { if(voto_candidato<0 || voto_candidato >8 ) { cout<<"ingreso voto nulo" <<endl; voto_candidato=7; } } } void conteo (int posicionEnElVector) { const int tamanioHongo=7; int hongo[tamanioHongo]={0}; hongo[posicionEnElVector-1]+=1; fin(hongo, tamanioHongo); } void fin(int * const elementoPuntero, const int tamanio1) { } void leer_txt() { const int tamanio=7; int candidatosTxt [tamanio]; ifstream MiArchivo ("votos.txt"); if (MiArchivo.is_open()) { for (int i = 0; i < 8; i++) { candidatosTxt[i]; } fin(candidatosTxt, tamanio);//ver tema de pasar un string cuando espera recibir un int } } void escribir_txt() { ofstream myFile; myFile.open("resultado.txt"); myFile<<"aca hasta podemos poner la funcion fin"; // aca pondremos la funcion fin y quedara en un txt ;) myFile.close(); }
|
|
« Ú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
Mensajes: 1.248
|
Tienes varias opciones a la hora de enfocar el problema: Usar contenedoresLos 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: // Este número lo calculas al leer el fichero int numCandidatos = 10; // Creamos un vector que inicialmente va a tener X + 1 elementos // Al ser un vector de tipo int, el valor inicial de cada elemento es 0. std::vector< int > votos{ numCandidatos + 1 }; // Fase de votación std::cout << "Emite tu voto: "; int voto; std::cin >> voto; if ( voto == 0 ) { // Fin de la votación } else if ( voto < 0 || voto >= votos.size( ) ) votos[ 0 ]++; // El voto es nulo else votos[ voto ]++; // Incrementamos los votos del candidato
Con este formato, la presentación de los resultados es bastante trivial: for ( unsigned int i = 1; i < votos.size( ); ++i ) { std:cout << "Candidato " << i << ": " << votos[ i ] << " votos" << std::endl; } std::cout << "Votos nulos: " << votos[ 0 ] << std::endl; // Total de votos versión 1: int total = 0; for ( auto it = std::begin( votos ); it != std::end( votos ); ++it ) total += *it; // Total de votos version 2: int total = std::accumulate( std::begin( vector ), std::end( vector ), 0 ); 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
|
|
|
|
|
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
|
4,073
|
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
|
6,304
|
24 Noviembre 2013, 18:26 pm
por kikian94
|
|
|
Problema con vectores en una función
Programación C/C++
|
Orubatosu
|
2
|
2,096
|
24 Noviembre 2014, 19:34 pm
por Orubatosu
|
|
|
Error en funcion que retorna vectores en C.
Programación C/C++
|
euroesp
|
7
|
3,707
|
29 Julio 2016, 16:17 pm
por do-while
|
|
|
C - Paso de cadenas a una funcion
Programación C/C++
|
Niber
|
1
|
1,652
|
5 Junio 2019, 21:29 pm
por Niber
|
|