Ir ao conteúdo
  • Cadastre-se

Kiko Xavier

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

posts postados por Kiko Xavier

  1. Obrigadíssimo pela resposta, muito obrigado. Eu recebi isto também:

     

    typedef struct _instante
    {
      
        /** extensão de tempo em que as notas deste “instante” tocam: valores de 1-16*/
        int duracao;

        /** notas a tocar na guitarra simultaneamente: letras de A-G se não houver nota fica um '-' exemplos 'CB', '-G', 'A-', '--' */
        char notasGuitarra[2];

        /** notas a tocar no piano simultaneamente: letras de A-G se não houver nota fica um '-' exemplos 'CB', '-G', 'A-', '--' */
        char notasPiano[2];

        /** indicação individual de cada instrumento da bateria sobre se toca ou não: exemplo {1, 0, 1, 1, 0, 1, 0, 1}  */
        int bateria[8];

        /** ficheiro de som extra a tocar neste “instante” */
        char *instrumentoExtra;

        /** apontador para o próximo elemento instante */
        struct _instante *proximo;
    } instante;


    /**
     * musica contem apenas dois apontadores para elementos instante
     */
    typedef struct
    {
      /** apontador para o primeiro instante de todos armazenados */
      instante* inicio;
     
      /** apontador para o instante atualmente em reprodução ou para uso genérico se não a tocar */
      instante* cursor;
    } musica;


    #define LISTA_INICIO 0
    #define LISTA_FIM 1

    /**
     *  cria um novo instante com os valores dos parametros
     *  parametros: duracao - valor inteiro de 1 a 16
     *  parametros: notas - string que pode ser NULL se não houve notas ou "C2A3D4B5" se houve todas as notas ou as notas que houverem por exemplo "C3A5"
     *  parametros: bateria - 8 inteiros com valores de 0 ou 1, que reflete a indicação individual de cada instrumento da bateria sobre se toca ou não: exemplo {1, 0, 1, 0, 1, 1, 0, 0}
     *  parametros: instrumentoExtra - string com o nome do ficheiro de som extra se não houver ficheiro está NULL
     *  retorno: retorna o apontador para o instante criado ou NULL se não tiver sucesso ou se alguns dos parametros não tiverem dentro dos valores possiveis
     */
    instante *instante_novo(int duracao, char *notas, int bateria[],  char *instrumentoExtra);


    /**
     *  cria uma nova musica vazia
     *  retorno: apontador para a musica ou NULL se a musica não foi criada retorna NULL
     */

    musica *musica_nova();

    /**
     *  insere um instante na posicao especificada
     *  parametro: m apontador para a musica
     *  parametro: t instante a inserir
     *  parametro: pos  posicao na musica que se pretende inserir o novo instante,
     *             se pos=-1 insere no fim da lista
     *  retorno: 0 se for com sucesso e -1 se ocorrer um erro e a musica ou o instante forem NULL
     *  observacoes: a primeira posicao da musica e´ pos=0 e o pos nao pode ultrapasar o numero de instantes que a musica contem
     */
    int  instante_insere(musica *m, instante *t, int pos );

    /**
     *  indica o numero de instantes na musica
     *  parametro: m apontador para a musica
     *  retorno: numero de instantes da musica ou -1 se musica = NULL ou ocorra um erro
     */
    int musica_tamanho(musica *m);

    /**
     *  pesquisa uma nota especifica da Guitarra ou Piano
     *  parametro: m apontador para a musica
     *  parametro: nota (A-G)
     *  parametro: instrumento 0=guitarra 1=piano
     *  retorno: apontador para o primeiro instante que tenha a nota naquele instrumento ou NULL se ocorrer um erro
     */
    instante * musica_pesquisa_nota(musica * m, char nota, int instrumento);

    /**
     *  remove o instante da posicao especificada
     *  parametro: m apontador para a musica
     *  parametro: pos posicão na musica do instante que se pretende remover
     *  retorno: apontador para instante removido da musica ou NULL se ocorrer um erro ou musica=NULL
     *  observacoes: o pos nao pode ultrapasar o numero de instantes que a musica contem
     */
    instante* instante_remove(musica * m, int pos);

    /**
     *  elimina um instante, libertando toda a memoria ocupada
     *  parametro: t apontador para a instante
     *  retorno: 0 se for com sucesso e -1 em caso t = NULL ou insucesso 
     */
    int instante_apaga(instante * t);

    /**
     *  elimina uma musica, libertando toda a memoria ocupada
     *  parametro: m apontador para musica 
     *  retorno: 0 se for com sucesso e -1 em caso m = NULL ou insucesso 
     */
    int musica_apaga(musica *m);

    /** 
     * lê o conteúdo do ficheiro de texto de nome nomef para o registo musica.
     * parametro: nomef nome do ficheiro
     * retorno: apontador para a musica criada. Em caso de erro retorna NULL. 
     * observacao: O conteúdo do ficheiro está no formato: 
     *              Duração do instante, 8 valores binários (0-1) correspondentes à ativação de cada instrumento da bateria ( Surdo, Timbalão1, Timbalão2, Prato1, Prato2, Címbalo, Tarola, Bombo). 
     *              Seguem-se potencialmente as notas dos instrumentos pela ordem guitarLow, guitarHigh, pianoLow, pianoHigh e por fim o eventual nome do ficheiro extra a tocar nesse instante. 
     *              Os instrumentos guitarra e piano apresentam as notas como uma string de 2 caracteres, com a nota (A-G) e a oitava (2-3 guitarra, 4-5 piano).
     */
    musica *musica_importa(const char *nomef);

    /**
     * Avança o cursor de reprodução para o instante duracao tempos à frente face ao cursor atual. 
     * parametro: m apontador para a musica
     * parametro: duracao numero de tempos a avançar
     * retorno: 0 se bem sucedido ou -1 caso contrário
     * erros: m inválido, duracao negativa
     * observacao: se ficar a meio de um instante o cursor deverá apontar para o instante seguinte
     *             caso a duracao a avançar seja superior à duração total da música, o cursor deve "dar a volta" e reiniciar
     */
    int musica_toca(musica *m, int duracao);

    /**
     * Altera o conteúdo da musica consoante as operações guardadas no ficheiro apontado pelo argumento "ficheiro".
     * Use o ficheiro variante_B.txt para testar a sua implementação. 
     * parametro: m apontador para a musica
     * parametro: ficheiro nome do ficheiro que contem as correções a serem feitas
     * retorno: número de operações bem sucedidas e -1 em caso de erro
     * erros: m, notas, instrumentos e posições inválidas 
     *        (os instantes não podem ser negativos nem exceder o tamanho da musica)
     * observacao: O conteúdo do ficheiro variante_B.txt segue o seguinte formato:
     *  [tipo de modificação] - valores de 1 a 4
     * 
     *  Caso seja 1:
     *      1 [1º instante a ser removido] [último instante a ser removido]
     *      Exemplo:
     *          1 4 7
     *          - Significa remover os instantes de 4 a 7 (inclusive).
     * 
     *  Caso seja 2:
     *      2 [guitarra ou piano] [nota a alterar] [nova nota]
     *      Exemplo:
     *          2 0 A C
     *          - Altera na guitarra todos os instantes que têm a nota A para C.
     * 
     *  Caso seja 3:
     *      3 [qual o instrumento da bateria de 0-7] [0 para silenciar, 1 para tocar] [posição inicial] [posição final]
     *      Exemplo:
     *          3 1 1 5 7
     *          - Altera o instrumento 1 para o estado "tocar" da posição 5 a 7 (inclusive).
     * 
     *  Caso seja 4:
     *      4 [nova duração] [posição inicial] [posição final]
     *      Exemplo:
     *          4 3 7 10
     *          - Altera todos os instantes de 7 a 10 (inclusive) para a duração 3.
     * 
     */
    int musica_corrige(musica *m, char *ficheiro);


    #define MUSICA_H
    #endif

     

     

    O que eu tenho que implementar são as funções escritas no meu primeiro post, isto é um auxílio. Sei que deve ter coisas mais importantes a fazer 🤣🤣 , se me pudesse só explicar o ponto 3 por exemplo, que o 2 já cheguei lá obrigado. Desculpe incomodar
     

    • Obrigado 1
  2. Olá, estou fazendo um projeto para programação, e devo dizer que estou algo preocupado pois não compreendo muito bem o que tenho de fazer, será que alguém me pode ajudar? É o seguinte: Pretende-se que implemente um sequenciador de música. Um sequenciador é uma espécie de instrumento musical em que notas ou sons são tocados consoante uma sequência temporal. A cada instante corresponde uma célula numa grelha. Esta grelha funciona em loop, i.e., em ciclo, voltando ao início depois de executar a última célula. Com o desenvolvimento da biblioteca de listas circulares, espera-se que gira este sequenciador. 

    As funções a implementar neste trabalho encontram-se no ficheiro musica.c e são: 1. instante *instante_novo(int duracao, char *notas, int bateria[], char *instrumentoExtra); Cria uma nova instância do registo instante, copiando cada um dos argumentos para o respetivo elemento. Notas, se vazias, devem ser inicializadas a “--” ou, se só parcialmente vazias, a “X-” ou “-X”. Deve retornar um apontador para um registo do tipo instante contendo os valores recebidos. Em caso de erro retornar NULL.

    2. musica *musica_nova(); Cria uma nova instância vazia do registo musica. Deve retornar um apontador para o registo. Em caso de erro deverá retornar NULL.

    3. int instante_insere(musica *m, instante *t, int pos); Insere o instante t na lista circular na posição pos. Caso o valor de pos seja -1 deverá inserir t na última posição da musica (append). Caso pos seja maior que tamanho, menor que -1, ou outro caso de erro deverá retornar o código de erro -1. Em caso de sucesso deverá retornar 0.

    4. int musica_tamanho(musica *m); Retorna o número de instantes armazenados no registo musica. Deve retornar um inteiro.

    5. instante *musica_pesquisa_nota(musica *m, char nota, int instrumento); Retorna o apontador para o primeiro instante que apresentar determinada nota (A-G) no instrumento indicado, seja na oitava maior ou menor. Se o instrumento for 0 referese a guitarra, se 1 refere-se a piano. Deverá retornar o apontador para o instante encontrado. Em caso de insucesso deverá retornar NULL.

    6. instante *instante_remove(musica *m, int pos); Remove o instante presente na posição pos da musica e reconecta a lista no ponto retirado. Deverá retornar o instante removido. Todos os apontadores que anteriormente apontavam para o instante removido deverão passar a contemplar o seguinte. Em caso de insucesso deverá retornar NULL.

    7. int instante_apaga(instante *t); Elimina as posições de memória alocadas em t. Em caso de sucesso deverá retornar o valor zero ou -1 se insucesso.

    8. int musica_toca(musica *m, int duracao); Avança o cursor de reprodução para o instante duracao tempos à frente. Se ficar a meio de um instante o cursor deverá apontar para o instante seguinte. Recorde o objetivo desta biblioteca. Retorna 0 se bem-sucedido ou -1 em contrário.

    9. int musica_apaga (musica *m); Altera o conteúdo de m de forma a remover e eliminar todos os instantes nele guardados. A função deverá retornar 0 se bem-sucedida e -1 em contrário.

    10. int musica_corrige(musica *m, char *ficheiro); Altera o conteúdo de m consoante as operações presentes no ficheiro apontado pelo argumento “ficheiro”. Use o ficheiro disponibilizado variante_b.txt para testar a sua implementação. O ficheiro poderá ter operações não conformes, portanto, a função deverá retornar a quantidade de operações bem executadas. Não se deverão executar as operações com um formato não previsto. Pode encontrar instruções mais detalhadas no ficheiro da biblioteca. 

     

     

    Ajudem só no que puderem e quiserem, bom dia 

    • Obrigado 1

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!