Ir ao conteúdo
  • Cadastre-se

Arthurdr

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

Reputação

1
  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]); } }
  2. Arthurdr

    Programa dando erro

    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)
  3. Arthurdr

    Programa dando erro

    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;
  4. Arthurdr

    Programa dando erro

    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); }
  5. 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); }
  6. obrigado pela ajuda! Estou montando o computador no site na pichau
  7. 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

×
×
  • Criar novo...