Devolver un Array

Iniciado por AprendiendoAProgramar, 13 Diciembre 2016, 00:54 AM

0 Miembros y 1 Visitante están viendo este tema.

AprendiendoAProgramar

Buenas compañeros programadores. :D

Soy nuevo en el foro y me uní para resolver una duda respecto a un programa que intento desarrollar pero me ha costado.

Primeramente cabe recalcar que soy muy muy principiante en eso de programación así que habrá gente a la que le parezca muy fácil pero eso es lo que busco precisamente, ese conocimiento para poder solucionar mi problema.


Bueno al tema. el caso es el siguiente.

Estoy desarrollando el juego de picas y fijas ( ampliamente conocido, muy sencillo ) básicamente el ordenador genera un numero aleatorio ( sin dígitos repetidos ) y la persona tiene que intentar adivinar dicho numero ingresando un numero de 4 dígitos y de acuerdo a si acierta o falla se irá revelando el numero. ahora bien, ya acabe mi programa, simplemente con sentencias if y else y alguno que otro while se puede resolver ( como dije nada del otro mundo ).

Pero me tome un reto, quiero modularizar mi programa y desearía crear una función que me devuelva un array ( se que no es posible que devuelva un array, pero es como lo pienso ) para poder así volver en pequeños procesos mi programa.
básicamente la función hace el proceso de crear numero aleatorio y me regresa esos números, ( tiene que ser array para poder hacer comparaciones con el numero ingresado por la persona) .
de igual forma tener otra función para volver array el numero ingresado por la persona y luego otra función que compare los números y genere un resultado, como ya había dicho tengo desarrollado el programa, tengo todo los procesos, las comparaciones etc, solo me falta meter esas partes en funciones y así poder tener un mejor control del programa.


De todas maneras adjunto el codigode la parte en la cual genero el numero aleatorio ( es largo pero es la forma como se me ocurrió)

Código (cpp) [Seleccionar]


    /** METER ESTO EN UNA FUNCION**/

   srand(time(NULL)); /** para crear numero aleatorio **/

   int numeroaleatorio = (rand()%9)+1;                                  /** se le asigna un valor a la variable numero aleatorio comprendido entre 1-9**/

   numeroaleatoriofuncion[0] = numeroaleatorio;
   numeroaleatoriofuncion[1] = numeroaleatorio;
   numeroaleatoriofuncion[2] = numeroaleatorio;                         /** Lo que  se hace es comparar el valor de las variables para poder asi cambiarlas, **/
   numeroaleatoriofuncion[3] = numeroaleatorio;                          /**   inicialmente se tiene que todos los numeros iguales, pero luego, por medio del bucle
                                                                            se hacen las comparaciones y asi asegurar que ningun numero se repetira **/

   while( numeroaleatoriofuncion[3]==numeroaleatoriofuncion[2]){
    int numeroaleatorio = (rand()%9)+1;
    numeroaleatoriofuncion[2] = numeroaleatorio;
       }
    while (numeroaleatoriofuncion[3] == numeroaleatoriofuncion[1]|| numeroaleatoriofuncion[2] == numeroaleatoriofuncion[1]){
            int numeroaleatorio = (rand()%9)+1;
    numeroaleatoriofuncion[1] = numeroaleatorio;
       }

   while (numeroaleatoriofuncion[3] == numeroaleatoriofuncion[0]|| numeroaleatoriofuncion[2] == numeroaleatoriofuncion[0]||numeroaleatoriofuncion[1] == numeroaleatoriofuncion[0]){
    int numeroaleatorio = (rand()%9)+1;
    numeroaleatoriofuncion[0] = numeroaleatorio;
   }

                /** ACA TERMINAR LA PARTE PARA GENERAR UN NUMERO ALEATORIO **/



claramente eso está en el main,ojala se pueda pasar a una función pero me tiene que devolver esos valores aleatorio por separado para poder manipularlos.

He leído bastante y me he topado con los apuntadores y todo ese tema, pero no se como lo puedo aplicar directamente en mi programa.


Gracias por su atención, ojala hayan entendido.


Saludos.
APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)

AnthonyS

#1
Para lograr el objetivo que propones,la forma mas habitual es usar el paso por referencia.
Con esto usaremos un vector creado en main y poder variar sus datos en funciones o procedimiento,espero que hayas visto el paso por referencia y como se trabaja con el.Un ejemplo:

C++:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;  //incluir iostream y esta instruccion son lo mas habitual en c++

//Supongamos un procedimiento que trabajara con el vector que le transfiero.
void cambiar_valores(int* vec);  //Recibira la direccion de memoria del primer elemento  
                                             //de vec.
int main()
{
int vector[5]={0,1,2,3,4};
cambiar_valores(vector);   //Se transfiere el vector al procedimiento.
cout<<vector[0]<<vector[1]<<vector[2]<<vector[3]<<vector[4]<<endl;
//Se mostraran los valores cambiados.
return 0;
}

void cambiar_valores(int* v) //Al haber paso por referencia,los datos cambiado de                      /                                        //v,permaneceran tras el procedimiento.
{
//Cambio de los valores
v[0] = 100;
v[1] = 200;
v[2]=300;
v[3]=400;
v[4]=500;
}


X--------------------X

Espero haberte ayudado.
Un saludo.
Anthony.[/size]


Mod: Los códigos deben ir en etiquetas GeSHi

AprendiendoAProgramar

 :rolleyes: ;-)
En este proceso propones tener el vector creado en el main y manipularlo con una función, y gracias por tu respuesta, me puede ayudar bastante.

La pregunta que me surge es si hay algún modo de tener el vector en una función(crearlo en una función) y pasar esos valores de vector a otras funciones para manipularlos y que solo en el main me trajera el resultado.
No se si me haga entender.


Gracias.  ;-)
APENAS EMPIEZO CON ESTO DE LA PROGRAMACIÓN Y CUANDO APARECEN ERRORES ES ALGO COMO........



(ES SOLO HUMOR)

TheFlash

Para mi la mejor forma de lograr lo que propones es usar una clase que contenga como dato miembro un vector y definir en el main un objeto de dicha clase.

Si tienes alguna duda respecto al código no dudes en preguntarme y si tengo alguna cosa mal corregidme por favor, que yo también estoy empezando a aprender ahora.
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

class NumeroAleatorio{
public:
int vector[4];

void GeneradorAleatorios(){
int numeroaleatorio;
srand(time(NULL)); /** para crear numero aleatorio **/
    for(int i =0; i < 5; i++){
      numeroaleatorio = (rand()%9)+1;                                  //Este bucle recorre el vector(array) desde la posición 0 a la 4 y le va dando valores a cada uno de sus elementos.
    vector[i] = numeroaleatorio;
    }
                         /** Lo que  se hace es comparar el valor de las variables para poder asi cambiarlas, **/
                          /**   inicialmente se tiene que todos los numeros iguales, pero luego, por medio del bucle
                                                                            se hacen las comparaciones y asi asegurar que ningun numero se repetira **/
   while( vector[3]==vector[2]){
    numeroaleatorio = (rand()%9)+1;
    vector[2] = numeroaleatorio;
       }
    while (vector[3] == vector[1]|| vector[2] == vector[1]){
            numeroaleatorio = (rand()%9)+1;
    vector[1] = numeroaleatorio;
       }

   while (vector[3] == vector[0]|| vector[2] == vector[0]||vector[1] == vector[0]){
    numeroaleatorio = (rand()%9)+1;
    vector[0] = numeroaleatorio;
   }
}
};

int main(){
NumeroAleatorio mi_numero_aleatorio;
.....

mi_numero_aleatorio.GeneradorAleatorios(); //La llamada en el main se realizaría así

mi_numero_aleatorio.vector[<índice>]; //Para realizar las comparaciones se accedería de esta manera a cada elemento del vector.
}


*Nota: Yo suelo usar más variables a la hora de definir el vector y lo declaro como dato miembro privado para que no pueda ser modificado fuera de la clase si no es a través de alguno de sus métodos, he decidido hacerlo así porque simplifica mucho a la hora de entender un código. Espero que los más expertos lo entiendan.