Ir ao conteúdo
  • Cadastre-se
Josuke

C++ RESOLVIDO Algoritmo pra reconhecer musica

Posts recomendados

 

#include <stdio.h>
#include <stdlib.h>
 

int main(void) {
  
  char baseDadosMusicasTitulos[10][30] = {"Ring of fire", 
                                  "Hurt", 
                                  "Brianstorm", 
                                  "Do me a favour",
                                  "Turn it again",
                                  "I walk the line",
                                  "Wet sand",
                                  "Aint no grave",
                                  "Riders in the sky",
                                  "The man comes around"};
                                  
  int baseDadosMusicasCodificadas[10][40] = {{10,24,33,78,54,92,10,29,36,96,2,66,87,54,-1},
                                              {57,33,20,2,99,87,120,33,69,87,41,1,97,41,23,127,17,-1},
                                              {74,11,20,36,87,62,36,96,77,42,36,38,77,21,22,9,77,8,-1},
                                              {1,22,74,56,98,125,37,32,75,99,2,3,40,-1},
                                              {95,43,55,7,91,63,53,10,24,44,81,6,-1},
                                              {87,64,28,33,40,41,94,72,63,104,99,115,33,-1},
                                              {5,65,95,21,30,14,107,51,50,67,111,121,34,72,91,55,-1},
                                              {64,63,22,78,18,99,21,123,4,95,9,42,32,14,17,52,-1},
                                              {7,66,12,20,87,119,32,44,89,21,3,89,16,4,58,1,1,57,10,21,-1},
                                              {17,10,13,1,7,23,36,54,124,100,32,20,27,89,66,32,-1}};
  
  printf("Musica: %s\n",baseDadosMusicasTitulos[9]);
  
  int NA,vet[10],i,j, vetm[10];
  
  	printf("Digite o tamanho da amostra da musica:");
  	scanf("%d",&NA);
 	for(i=0; i<NA; i++){
 		
 				printf("Digite os numeros da amostra da musica:");
 			scanf("%d",&vet[i]);  		  	
	 }
	 for(i=0; i<127; i++){
	 	for(j=0; j<127; j++){
	 		
	 		if (vet[i] == baseDadosMusicasCodificadas[10][40] ){
	 			(vetm[10] = vet[i]);
			 }
		 }
		
	 }
	 if (vetm[10] == baseDadosMusicasCodificadas[10][40] &&   baseDadosMusicasTitulos[10][30]){
	 	
	 
	 printf("A musica econtrada e : " , baseDadosMusicasTitulos[10][30]);
	 	 }
	 	 else
	 	 printf("A musica nao foi encontrada");
  
  return 0;
}

Bem, alguém poderia me ajudar a arrumar a parte do código eu não estou conseguindo verificar os números um por um para ver se tem na matriz principal das músicas e armazendo em um vetor onde eu posso estar verificando se existe essa música e mostrando na tela o nome da música.

 

alg2.jpg

Alg1.jpg

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <stdlib.h>
 

int main(void) {
  
  char baseDadosMusicasTitulos[10][30] = {"Ring of fire", 
                                  "Hurt", 
                                  "Brianstorm", 
                                  "Do me a favour",
                                  "Turn it again",
                                  "I walk the line",
                                  "Wet sand",
                                  "Aint no grave",
                                  "Riders in the sky",
                                  "The man comes around"};
                                  
  int baseDadosMusicasCodificadas[10][40] = {{10,24,33,78,54,92,10,29,36,96,2,66,87,54,-1},
                                              {57,33,20,2,99,87,120,33,69,87,41,1,97,41,23,127,17,-1},
                                              {74,11,20,36,87,62,36,96,77,42,36,38,77,21,22,9,77,8,-1},
                                              {1,22,74,56,98,125,37,32,75,99,2,3,40,-1},
                                              {95,43,55,7,91,63,53,10,24,44,81,6,-1},
                                              {87,64,28,33,40,41,94,72,63,104,99,115,33,-1},
                                              {5,65,95,21,30,14,107,51,50,67,111,121,34,72,91,55,-1},
                                              {64,63,22,78,18,99,21,123,4,95,9,42,32,14,17,52,-1},
                                              {7,66,12,20,87,119,32,44,89,21,3,89,16,4,58,1,1,57,10,21,-1},
                                              {17,10,13,1,7,23,36,54,124,100,32,20,27,89,66,32,-1}};
  
  
  int NA,vet[10],i,j, k, vetm[10], count = 0;
  
  for (int i=0; i < 10; i++)
  {
    printf("Musica: %d.%s\n",i+1, baseDadosMusicasTitulos[i]);
  }
  
  	printf("Digite o tamanho da amostra da musica:");
  	scanf("%d",&NA);
 	for(i=0; i<NA; i++){
 		
 				printf("Digite os numeros da amostra da musica:");
 			scanf("%d",&vet[i]);  		  	
	 }
	 for(i=0; i<10; i++){
	    
	 	for(j=0; j<30; j++){
	 	    count = 0;
	 	    for(k=0; k<NA; k++){
	 	        if (vet[k] == baseDadosMusicasCodificadas[i][k+j])
	 		    {
	 		        count++;
	 		    } else break;
	 		    
	 	    }
	 	    if (count == NA) break; //achou a musica
		 }
	   if (count == NA) break;	
	 }
	 //if (vetm[10] == baseDadosMusicasCodificadas[10][40] &&   baseDadosMusicasTitulos[10][30]){
	 	
	 if (count == NA) printf("A musica econtrada e : %s" , baseDadosMusicasTitulos[i]);
	 else printf("A musica nao foi encontrada");
  
  return 0;
}

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Flávio Pedroza Realmente  muito obrigado, eu só tenho agradecer a grande ajuda que você forneceu!
Se existir alguma forma que eu possa retribuir a ajuda me conte!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, estou aqui para pedir ajuda aos especialista no assunto, estou com esse enunciado e vim aqui trazer a minha ideia de como fazer e colocar em prática o código, estou com algumas dificuldades na hora de passar para o algoritmo e fazer ele funcionar.

 

Na minha cabeça o que eu preciso fazer é testar os numeros, se o numero da amostra for diferente da canção a depender do tamanho da amostra eu aumentar como diz no enunciado. 
Então eu devo determinar a minha variavel de controle para que aumente.

Certo até ai tudo bem, mas agora que vem o problema eu meio que travo e não consigo fazer

Por exemplo se a minha variavel for k.. na minha cabeça o codigo deve ser assim
 

  if(vet[k] != baseDadosMusicasCodificadas[i][k+j]){
          	if(k==4 || k==5){
			 (k+1); } 
			if(k==6 || k==7 || k==8);{
			(k+2);}
			if(k==9 || k==10);{
			(k+3);

Mas de certa maneira ele não funciona, ai começo a pensar eu devo rodar um for para ir nas posições do vetor, mas com um for ele vai rodar até certo numero e terminar. 
Eu declaro que meu for vá ate o numero de amostras, e abro um if para que se o numero for diferente ele acrescentar, mas ai que está o problema novamente, o meu código da erro quando eu tento fazer...
O Flávio Pedroza que ajudou a fazer o algoritmo abaixo, meus agradecimentos a ele novamente.
 

#include <stdio.h>
#include <stdlib.h>
 

int main(void) {
  
  char baseDadosMusicasTitulos[10][30] = {"Ring of fire", 
                                  "Hurt", 
                                  "Brianstorm", 
                                  "Do me a favour",
                                  "Turn it again",
                                  "I walk the line",
                                  "Wet Sand",
                                  "Aint no grave",
                                  "Riders in the sky",
                                  "The man comes around"};
                                  
  int baseDadosMusicasCodificadas[10][40] = {{10,24,33,78,54,92,10,29,36,96,2,66,87,54,-1},
                                              {57,33,20,2,99,87,120,33,69,87,41,1,97,41,23,127,17,-1},
                                              {74,11,20,36,87,62,36,96,77,42,36,38,77,21,22,9,77,8,-1},
                                              {1,22,74,56,98,125,37,32,75,99,2,3,40,-1},
                                              {95,43,55,7,91,63,53,10,24,44,81,6,-1},
                                              {87,64,28,33,40,41,94,72,63,104,99,115,33,-1},
                                              {5,65,95,21,30,14,107,51,50,67,111,121,34,72,91,55,-1},
                                              {64,63,22,78,18,99,21,123,4,95,9,42,32,14,17,52,-1},
                                              {7,66,12,20,87,119,32,44,89,21,3,89,16,4,58,1,1,57,10,21,-1},
                                              {17,10,13,1,7,23,36,54,124,100,32,20,27,89,66,32,-1}};
  
  
  int NA,vet[10],i,j, k, vetm[10], count = 0;
  
  
  
  // printf("Digite o tamanho da amostra da musica:");
   scanf("%d",&NA);
  for(i=0; i<NA; i++){
   
    // printf("Digite os numeros da amostra da musica:");
    scanf("%d",&vet[i]);       
 }
 for(i=0; i<10; i++){
    
  for(j=0; j<30; j++){
      count = 0;
      for(k=0; k<NA; k++){
          if (vet[k] == baseDadosMusicasCodificadas[i][k+j])
       {
           count++;
       } else break;
       
      }
      if (count == NA) break; //achou a musica
  }
   if (count == NA) break; 
 }
 //if (vetm[10] == baseDadosMusicasCodificadas[10][40] &&   baseDadosMusicasTitulos[10][30]){
  
 if (count == NA) printf("Musica: %s" , baseDadosMusicasTitulos[i]);
 else printf("Musica nao encontrada");
  
  return 0;
}

 

Codigo.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 horas atrás, Josuke disse:

Olá, estou aqui para pedir ajuda aos especialista no assunto, estou com esse enunciado e vim aqui trazer a minha ideia de como fazer e colocar em prática o código, estou com algumas dificuldades na hora de passar para o algoritmo e fazer ele funcionar.

 

Na minha cabeça o que eu preciso fazer é testar os numeros, se o numero da amostra for diferente da canção a depender do tamanho da amostra eu aumentar como diz no enunciado. 
Então eu devo determinar a minha variavel de controle para que aumente.

Certo até ai tudo bem, mas agora que vem o problema eu meio que travo e não consigo fazer

Por exemplo se a minha variavel for k.. na minha cabeça o codigo deve ser assim
 


  if(vet[k] != baseDadosMusicasCodificadas[i][k+j]){
          	if(k==4 || k==5){
			 (k+1); } 
			if(k==6 || k==7 || k==8);{
			(k+2);}
			if(k==9 || k==10);{
			(k+3);

Mas de certa maneira ele não funciona, ai começo a pensar eu devo rodar um for para ir nas posições do vetor, mas com um for ele vai rodar até certo numero e terminar. 
Eu declaro que meu for vá ate o numero de amostras, e abro um if para que se o numero for diferente ele acrescentar, mas ai que está o problema novamente, o meu código da erro quando eu tento fazer...
O Flávio Pedroza que ajudou a fazer o algoritmo abaixo, meus agradecimentos a ele novamente.
 


#include <stdio.h>
#include <stdlib.h>
 

int main(void) {
  
  char baseDadosMusicasTitulos[10][30] = {"Ring of fire", 
                                  "Hurt", 
                                  "Brianstorm", 
                                  "Do me a favour",
                                  "Turn it again",
                                  "I walk the line",
                                  "Wet Sand",
                                  "Aint no grave",
                                  "Riders in the sky",
                                  "The man comes around"};
                                  
  int baseDadosMusicasCodificadas[10][40] = {{10,24,33,78,54,92,10,29,36,96,2,66,87,54,-1},
                                              {57,33,20,2,99,87,120,33,69,87,41,1,97,41,23,127,17,-1},
                                              {74,11,20,36,87,62,36,96,77,42,36,38,77,21,22,9,77,8,-1},
                                              {1,22,74,56,98,125,37,32,75,99,2,3,40,-1},
                                              {95,43,55,7,91,63,53,10,24,44,81,6,-1},
                                              {87,64,28,33,40,41,94,72,63,104,99,115,33,-1},
                                              {5,65,95,21,30,14,107,51,50,67,111,121,34,72,91,55,-1},
                                              {64,63,22,78,18,99,21,123,4,95,9,42,32,14,17,52,-1},
                                              {7,66,12,20,87,119,32,44,89,21,3,89,16,4,58,1,1,57,10,21,-1},
                                              {17,10,13,1,7,23,36,54,124,100,32,20,27,89,66,32,-1}};
  
  
  int NA,vet[10],i,j, k, vetm[10], count = 0;
  
  
  
  // printf("Digite o tamanho da amostra da musica:");
   scanf("%d",&NA);
  for(i=0; i<NA; i++){
   
    // printf("Digite os numeros da amostra da musica:");
    scanf("%d",&vet[i]);       
 }
 for(i=0; i<10; i++){
    
  for(j=0; j<30; j++){
      count = 0;
      for(k=0; k<NA; k++){
          if (vet[k] == baseDadosMusicasCodificadas[i][k+j])
       {
           count++;
       } else break;
       
      }
      if (count == NA) break; //achou a musica
  }
   if (count == NA) break; 
 }
 //if (vetm[10] == baseDadosMusicasCodificadas[10][40] &&   baseDadosMusicasTitulos[10][30]){
  
 if (count == NA) printf("Musica: %s" , baseDadosMusicasTitulos[i]);
 else printf("Musica nao encontrada");
  
  return 0;
}

 

Codigo.jpg



Bem consegui achar a solução!
 

if(count >= X){
     break;
}
 e depois de receber A, você faz:

X = A * 0.7;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!