projeto sequenciador em C
24/03/2020
0
Olá, boa tarde, estou a fazer um projeto de programação em que necessitava de alguma ajuda.
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 funcções a implementar são as seguintes:
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.
As duas primeiras funções creio já ter descoberto, precisava de ajuda nas restantes 8 por favor
cumprimentos
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 funcções a implementar são as seguintes:
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.
As duas primeiras funções creio já ter descoberto, precisava de ajuda nas restantes 8 por favor
cumprimentos
Francisco Xavier
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)