-
Posts
2 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por Kiko Xavier
-
-
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
- 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
projeto de programção (sequenciador)
em C/C#/C++
Postado
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