Void C++

Topic created · 4 Mensajes · 1197 Visitas
  • Bueno pues estoy en la Uni y al entrar tarde no me entero de nada y lo peor es que durante todo el curso se dio pseudocodigo y ahora tenemos que hacer un proyecto que vale un 40% en C++ pues estoy jodido XD

    Bueno pues tengo que hacer dos cosas, un menu de opciones que ya está hecho o eso creo XD El problema es que tengo que usar varios void que son como funciones supongo... Vamos que pones esto:

    void mostrarCancion(const ListaCanciones &c, int pos)
    {

    //Y aquí pones todo el código que haga la función

    }

    y despues la llamas con

    mostrarCancion()

    Aquí viene mi problema, si no tuviera estas cosas: "const ListaCanciones &c, int pos" funcionaría pero parece ser que tiene que tener esas cosas -.- Usamos CodeBlocks, por cierto!

    Esto es para el jueves o sea que si la ayuda es rápida mejor XD

    Os adjunto el Pdf del proyecto por si alguna alma caritativa me ayuda con ello XD Skype: Gabiiiiii94xd

  • la palabra que viene delante del nombre de la función (en tu caso "void") es lo que devuelve la función.
    como "mostrarCancion" lo que hará es sacar algo por pantalla realmente no interesa que devuelva nada, y por eso se pone "void". Podría devolver un número, un puntero a algo... pero en ese caso concreto, nada (void).

    lo de después del nombre de la función, que viene entre paréntesis, se llaman "parámetros". Son las cosas que recibe la función, se separan con comas.
    en el caso concreto de "mostrarCancion" recibe dos parámetros:

    • "c" que es una ListaCanciones al parecer
    • "pos" que es un número enteroademás hay un detalle y es el "&" que está delante de la "c". Eso significa que la lista de canciones nos la pasan de forma que podremos modificarla. Esto se llama "pasar por referencia". Se pueden pasar los parámetros de otra forma, "por valor", pero todos los cambios que haga la función sobre ese valor no se conservarán una vez terminada la función.

    Así que ya vas entendiendo lo que significa esa línea jeje.

    el código de esa función será bastante sencillo, te dan la lista y te dan el número de canción con lo cual para acceder a la canción:

    c.datos[pos]
    

    Por ejemplo, para mostrar el título de dicha canción:

    cout << c.datos[pos].titulo;
    

    "c" es la lista de canciones, por tanto dentro tendrá dos campos, uno de ellos es "datos". Ese campo "datos" es un array o un vector que contiene Canciones. Por tanto accedemos a la canción que esté en la posición "pos". Recapitulemos, tenemos "c" que es la lista, dentro de la cual está "datos", que contiene canciones, y hemos elegido la canción número "pos". Vale, por tanto c->datos[pos] es la canción que buscamos. ¿qué hacemos con ella? Pues veamos, qué campos tiene una canción:

    struct Cancion {
        int codigo;
        char titulo[LONG];
        char interprete[LONG];
        Tiempo duracion;
        Categoria genero;
        char album[LONG];
        int anho;
    };
    

    Tiene unos cuantos, pero nos interesa por ejemplo el título

  • Te dejo un código funcionando:
    #include
    using namespace std;

    const int MAXCAN=100; //Máximo número de canciones
    const int LONG=50; // Longitud máxima de las cadenas

    enum Categoria {blues,jazz,rock,pop,clasica};
    struct Tiempo{
    int min;
    int seg;
    };
    struct Cancion {
    int codigo;
    char titulo[LONG];
    char interprete[LONG];
    Tiempo duracion;
    Categoria genero;
    char album[LONG];
    int anho;
    };
    struct ListaCanciones{
    Cancion datos[MAXCAN]; // Vector que contiene un conjunto de canciones
    int numCan; //Numero de canciones guardadas hasta el momento en el vector
    };
    ///////////////////////////////////////////////////////////////////////////
    void mostrarCancion(const ListaCanciones &c, int pos);
    /**
    Muestra los datos de una canción que se encuentra en la posición pos del
    vector
    c Vector de las canciones
    pos La posición de la canción a recuperar
    */
    int buscarCancion(const ListaCanciones &c, int codigo);
    /**
    Utilizando una búsqueda binaria, localiza el código de una canción dentro
    del vector y devuelve su posición o -1 en el caso de no encontrarlo.
    c Vector de las canciones
    codigo El código de la canción a buscar
    Retorna: La posición donde están los datos de la canción. Si no lo
    encuentra, devuelve -1
    */
    int posInsertar (const ListaCanciones &c, int codigo );
    /**
    Utilizando una búsqueda secuencial, devuelve la posición en la que se debe
    de insertar una canción dentro del vector, teniendo en cuenta que el vector
    está ordenado por código de canción.
    c Vector de las canciones
    codigo El código de la canción a dar de alta en el vector
    Retorna: La posición donde se debe de insertar la nueva canción
    */
    void desplazar(ListaCanciones &c, int posIns);
    /**
    Desplaza todos los elementos, una posición a la derecha, a partir de
    posins, es decir, abre un hueco para insertar una nueva canción en el vector.
    c Vector de las canciones
    posIns Posición donde se debe de insertar la nueva canción
    */

    void mostrarCancion(const ListaCanciones &c, int pos) {
    cout << c.datos[pos].titulo;
    }

    int main(int argc, char **argv) {
    Tiempo duracion = {2,30};
    Cancion c = {0,"Titulo","Autor",duracion,jazz,"Album",1995};
    ListaCanciones lc = {{c},1};
    mostrarCancion(lc, 0);
    return 0;
    }

    Es solamente un ejemplo, por si te está costando mucho empezar a hacerlo funcionar.

  • Graacias por contestar y tengo que decirte que el codigo va a ser mucho más largo, supongo que lo sabes y solo pones un ejemplo. Se agradece que contestaras y miraré el código para ir entendiendolo ^_^