Ir ao conteúdo
  • Cadastre-se

Problema com matriz


Arthurdr

Posts recomendados

Estou com problema na hora de salvar os dados a matriz, para depois mostralos. Quando uso somente 1 coluna, a matriz fica normal, mas quando uso mais de 1 coluna, os valores repetem.

Exemplo: Quando a resposta deveria ser:  1   3   5                ela deixa assim:  1   2   4               
                                                                     2   7   9                                           2   4   6

                                                                     4   6   10                                         4   6   10

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

main()
{
	
int M, N, cont, i, j, k, x, aux, a, b, w, ocorrencia_direta[cont], ocorrencia_complementar_invertida[cont], salva_direto[a+1][cont+1], salva_invertido[b+1][cont+1];

	printf ("\n				   PROJETO GENOMA \n\n	        * O tamanho maximo de uma cadeia e 15000 letras *\n   * As cadeias inseridas so poderao conter os caracteres 'A', 'C', 'T', 'G' *\n		* A cadeia t deve ser maior ou igual a cadeia p *\n     * Para executar o programa digite o tamanho das cadeias p e t como 0 *\n\n");
	
	do
	{
	cont=cont+1;
		
		do
		{
			do
			{
			printf ("\n\n	Digite os tamanhos das cadeias p e t:	");
			scanf ("%i %i", &M, &N);
			if((0>M) || (M>15000) || (0>N) || (N>15000) || (M==0 && N!=0) || (N==0 && M!=0))
				printf ("\n\n		!!!VALORES INVALIDOS!!!\n\n");
			}while ((0>M) || (M>15000) || (0>N) || (N>15000) || (M==0 && N!=0) || (N==0 && M!=0));

			if (M>N)
				printf ("\n\n		!!!VALOR INVALIDO!!!\n	!!!VALOR DE p SUPERIOR AO VALOR DE t!!!\n\n");
		}while (M>N);
			
		if ((M!=0) || (N!=0))
		{
	
			char p[M+1], t[N+1];
			int teste[M], letrasT[N], letraT, letrasP[M], letraP;
			bool igual = true ;
		
			do
			{
				do
				{
					i=0;
					letraP=0;
					letrasP[i]=0;
					printf ("\n	Digite a cadeia p: ");
					scanf ("%s", p);
					if (M!=strlen(p))
						printf ("\n\n		!!!TAMANHO DE p INVALIDO!!!\n\n");
					for (i=0; i<M; i++)
						if ((p[i]!='A') && (p[i]!='C') && (p[i]!='G') && (p[i]!='T'))
							letrasP[i]=1;
						else
							letrasP[i]=0;
					for (i=0; i<M; i++)
						if (letrasP[i]==1)
							letraP=1;
					if (letraP==1)
						printf ("\n\n		!!!CADEIA DE p INVALIDA!!!\n\n");
				}while (letraP==1);
			}while (M<strlen(p));
		
			do
			{
				do
				{
					i=0;
					letraT=0;
					letrasT[i]=0;
					printf ("\n	Digite a cadeia t: ");
					scanf ("%s", t);
					if (N!=strlen(t))
						printf ("\n\n		!!!TAMANHO DE t INVALIDO!!!\n\n");
					for (i=0; i<N; i++)
						if ((t[i]!='A') && (t[i]!='C') && (t[i]!='G') && (t[i]!='T'))
							letrasT[i]=1;
						else
							letrasT[i]=0;
					for (i=0; i<N; i++)
						if (letrasT[i]==1)
							letraT=1;
					if (letraT==1)
						printf ("\n\n		!!!CADEIA DE t INVALIDA!!!\n\n");
				}while (letraT==1);
			}while (N<strlen(t));
	
		
			// ocorrencia direta
			a=0;
			ocorrencia_direta[cont]=0;
			for (i=0; i<strlen(t); i++)
				{
					igual = true;
					if (t[i]==p[0])
						{
														
							aux=i+1;
							teste[0]=1;
							for (j=1; j<strlen(p); j++)
							{
									if (p[j]==t[aux])
								{
									teste[j]=1;
									
								} 
								else 
								{
									teste[j] = 0; 
								}
								aux++;
							}
							
						
							for (x=0; x<strlen(p); x++)
							{
								if (teste[x]==0)
									igual = false;	
								  
							}
							if(igual == true){
								ocorrencia_direta[cont]++;
								salva_direto[a][cont]=i+1;
								a++;
							}
						}
				}
				
				if(ocorrencia_direta[cont]==0)
				{
					salva_direto[a][cont]=0;
					a++;
				}
			
		//ocorrencia complementar invertida	

			for(i=0;i<strlen(p); i++)
			{
				if(p[i]=='A')
				{
					p[i]='T';	
				}
				else if(p[i]=='C')
				{
					p[i]='G';	
				}	
				else if(p[i]=='G')
				{
					p[i]='C';	
				}
				else if(p[i]=='T')
				{
					p[i]='A';	
				}	
				
			}
			
			char auxiliar;
			for(i=0;i<M/2; i++)
			{
		
		      auxiliar=p[i]; 
		      p[i]=p[M-1-i];
		      p[M-1-i]=auxiliar;  
		   
			}
			
			b=0;
			ocorrencia_complementar_invertida[cont]=0;
				for (i=0; i<strlen(t); i++)
				{
					igual = true;
					if (t[i]==p[0])
						{
														
							aux=i+1;
							teste[0]=1;
							for (j=1; j<strlen(p); j++)
							{
									if (p[j]==t[aux])
								{
									teste[j]=1;
									
								} 
								else 
								{
									teste[j] = 0; 
								}
								aux++;
							}
							
						
							for (x=0; x<strlen(p); x++)
							{
								if (teste[x]==0)
									igual = false;	
								  
							}
							if(igual == true){
								ocorrencia_complementar_invertida[cont]++;
								salva_invertido[b][cont]=i+1;
								b++;
							}
						}
				}
				
				if(ocorrencia_complementar_invertida[cont]==0)
				{
					salva_invertido[b][cont]=0;
					b++;
				}

		}
		
	}while ((M!=0) && (N!=0));
	
	w=cont;
	
	for (cont=1; cont<w; cont++)
	{
	printf ("\n\n	Teste %i\n	Ocorrencia Direta:  ", cont);
		for (a=0; a<ocorrencia_direta[cont]; a++)
			printf ("%i  ", salva_direto[a][cont]);
			
	printf ("\n	Ocorrencia Complementar Invertida:  ");
		for (b=0; b<ocorrencia_complementar_invertida[cont]; b++)
			printf ("%i  ", salva_invertido[b][cont]);
	}
	
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Cara, você postou um código gigante e sem nenhuma função. Sem falar que ta usando muito do while, o que é incomum. Posta só a parte que da erro e usa mais funções pra nao ter um código tão fat.

 

Ah, também não faça um printf tão gigante com tantos \n. Faça vários printf. É melhor para os outros lerem

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...