Arthurdr
Membro Júnior-
Posts
7 -
Cadastrado em
-
Última visita
Reputação
1-
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]); } }
-
faz um teste ponto o t como maior que 18 caracteres. Fiz o teste e funcionou Muito obrigado!! Acho que era o N e o M mesmo Valeuu adicionado 44 minutos depois Só mais uma coisa, o programa deve armazenar todos os dados que são as posições das subcadeias, e só apresentar no final depois de digitar 0 0 para os tamanhos. Do jeito que eu fiz, ficou muito complicado e não funcionou, teria um jeito mais fácil de armazenar? eu pensei em matriz, mas não está funcionando. (Os printf no meio do programa são só para testes)
-
Bom, o programa deve ler 2 cadeias de tamanhos variados, onde a cadeia p deve ser menor ou igual a cadeia t. Uma comparação direta ocorre quando a cadeia p aparece como subcadeia de t. Uma cadeia complementar invertida ocorre quando o inverso da cadeia p (além de alterar as letras A<=> T e C<=>G)aparece dentro da t. No caso uma cadeia p=CATA vira uma cadeia p=TATG. O programa vai identificar em que posição a subcadeia aparece na cadeia. Eu procurei na internet, mas não achei muita coisa para comparar os caracteres da string com outros caracteres, no caso do letrasT[ i ] , eu usei o "i" pro "for" percorrer a palavra inteira, e ver uma a uma se elas são iguais a "A", "C", "T", "G". 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;
-
O programa estava com os "i", quando eu copiei eles não vieram. Alterei o char para p[M+1] e t[N+1], não sabia deste caso. Vou enviar o trabalho inteiro, antes enviei só uma parte dele. O problema que está acontecendo no momento é que quando a cadeia do t é comparada com as letras, ele identifica como errada, mesmo estando certo. Obrigado pela ajuda! #include <stdio.h> #include <stdlib.h> #include <string.h> main() { int M, N, cont, i, j, k, x, aux, a, b, salva_direto[cont][a], salva_invertido[cont][b]; 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 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], ocorrencia_direta = 0, ocorrencia_complementar_invertida=0, letrasT[i], letraT, letrasP[i], 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"); 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"); }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"); 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"); }while (letraT==1); }while (N<strlen(t)); printf ("\n%s", p); printf ("\n%s", t); printf ("\nTESTE %i", cont); // ocorrencia direta printf("\nOcorrencia direta: "); 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++; printf (" %i", i+1); salva_direto[cont][a]=i+1; a++; } } } if(ocorrencia_direta==0) { printf("0"); salva_direto[cont][a]=0; } printf("\n"); //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; } printf("Ocorrencia complementar invertida: "); 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++; printf (" %i", i+1); salva_invertido[cont][b]=i+1; b++; } } } if(ocorrencia_complementar_invertida==0) { printf("0"); salva_invertido[cont][b]=0; } printf("\n"); } }while ((M!=0) && (N!=0)); cont=0; do { printf (" Teste %i\n Ocorrencia Direta: ", cont); for (a=0; a<100; a++) printf ("%i", salva_direto[cont][a]); printf ("\n Ocorrencia Complementar Invertida: "); for (b=0; b<100; b++) printf ("%i", salva_invertido[cont][b]); cont++; }while (cont<100); }
-
Estou fazendo um programa, mas estou trancado em uma parte. O ojetivo desta parte do programa é ver se as letras em que o usuário digita, são iguais as permitidas. Procurei algumas maneiras de fazer isso, mas só achei essa. O problema deste programa é que quando ele vai analisar a cadeia t, ele sempre mostra que a cadeia é invalida, mesmo estando dentro do exigido, abrindo melhor a cadeia t, descobri que o programa sempre diz que a 18º letra é invalida, mas não consegui descobrir o motivo, mesmo ponto letras validas, a 18º ele mostra que é errada. #include <stdio.h> #include <stdlib.h> #include <string.h> main() { int M, N, i, j, a, b; char p[M], t[N]; int letrasT, letraT, letrasP, letraP; M=5; N=25; do { do { i=0; letraP=0; letrasP=0; printf ("\n Digite a cadeia p: "); scanf ("%s", p); if (M!=strlen(p)) printf ("\n\n !!!TAMANHO DE p INVALIDO!!!\n"); for (i=0; i<M; i++) if ((p!='A') && (p!='C') && (p!='G') && (p!='T')) letrasP=1; else letrasP=0; for (i=0; i<M; i++) if (letrasP==1) letraP=1; if (letraP==1) printf ("\n\n !!!CADEIA DE p INVALIDA!!!\n"); }while (letraP==1); }while (M<strlen(p)); do { do { i=0; letraT=0; letrasT=0; printf ("\n Digite a cadeia t: "); scanf ("%s", t); if (N!=strlen(t)) printf ("\n\n !!!TAMANHO DE t INVALIDO!!!\n"); for (i=0; i<N; i++) if ((t!='A') && (t!='C') && (t!='G') && (t!='T')) letrasT=1; else letrasT=0; for (i=0; i<N; i++) if (letrasT==1) letraT=1; if (letraT==1) printf ("\n\n !!!CADEIA DE t INVALIDA!!!\n"); }while (letraT==1); }while (N<strlen(t)); printf ("\n%s", p); printf ("\n%s", t); }
-
PC equilibrado?
Arthurdr respondeu ao tópico de Arthurdr em Montagem e upgrade de computadores de mesa
obrigado pela ajuda! Estou montando o computador no site na pichau -
Estou a procura de um pc para jogos. Montei um, mas não sei se ele está equilibrado, as peças são: Processador - i5-7400 3.0ghz placa-mãe - H110M DDR4 Memória - Crucial Ballistix 8GB DDR4 Placa de video - GTX 1050 Ti 4GB Armazenamento - HD 1TB Sata III 3.5 Fonte - XFX 400W Gostaria de saber se tem alguma peça que seria melhor trocar. O valor dele deu 2650, eu consigo algo melhor por esse preço?
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