Ir para conteúdo
Fórum Script Brasil

aninha1988

Membros
  • Total de itens

    14
  • Registro em

  • Última visita

Sobre aninha1988

aninha1988's Achievements

0

Reputação

  1. :unsure: Pessoal...eu preciso fazer um codigo que inverta slices de uma lista duplamente ligada...alguém sabe para que serve uma copia da minha lista original mantida junto com a lista que eu vou trocar...digo...essa foi a dica dada para a resolução do exercicio...manter uma copia da lista junto com a lista que avança...com ligação entre os elementos correspondentes das duas lisats...mas para que serve a copia da lista....alguém sabe me explicar??????????????
  2. se eu usar o codigo desse jeito...não vou acrescentar elementos na lista andando do final para o começo???
  3. Oi pessoal...alguém sabe me dizer o que há de errado com o código abaixo... O meu programa tem que ler uma string do teclado com no maximo 9 caracteres...cada caractere lido precisa ser armazenado separadamente em uma celula contendo um indice que começa em 1...quero inserir celulas sempre ao final de uma lista duplamente ligada... #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int j; int l; struct node{ struct node*prev; int index; char item; struct node*prox; }*head, *tail; typedef struct node node; gene*criar(int n, char str[]){ node*nova; nova=(node*)malloc(sizeof(node)); nova->index=j; nova->item=str[l]; nova->prox=tail; nova->prev=head; return nova; } node*inserir(int n, char str[]){ node*nova; while((nova->prox==NULL)==0){ nova=nova->prox; nova->prox=(criar(n, str)); (nova->prox)->prev=nova; } return nova; } int main(){ head=tail=NULL; node*no; char cadeia[9]; gets(cadeia); for(j=1; j<=9; j++){ for(l=0; l<9; l++){ no=(inserir(9,cadeia)); printf("%d\n", node->index); printf("%c\n", node->item); } } getch(); } O problema é que quando o programa imprime cada saida....aparece sempre um 0 e um simbolo estranho...e não o indice seguido do respectivo caratere...
  4. Valeu mesmo....eu precisava de uma função de inserção...que nem essa que você me passou ...e uma de inversão do conteudo da lista...tipo uma que troque dois a dois os elementos...ou que troque o primeiro com o ultimo...o segundo com o antepenultimo...que seria bem mais rapido para inveter uma parte especifica da lista....masw mesmo assim muito obrigada...agora que seii como criar a lista vou tentar inverte-la...valeu...
  5. Obrigada...vou tentar implementar o codigo com a mudança que você sugeriu...
  6. :unsure: Oi pessoal...por favor...alguém tem ai algum codigo (EM C) que crie uma lista duplamente ligada...adiocionando novos nós e atualizando tantos os ponteiros de proxima celula quanto os de celula anterior.... me ajudem por favor...eu não consigo atualizar os ponteiros de celula anterior....
  7. valeu...vou tentar usa-lo no meu programa...
  8. eu arrumei o lance do indice e do looping...e o codigo tah assim #include <stdio.h> #include <string.h> #include <conio.h> #define MAXV 20 #define MAXM 10001 int main(){ char linha[100];; int a; int v[MAXV]; int i; int b; int nc; FILE*arquivo; b=0; arquivo=fopen("entrada.txt", "r"); fscanf(arquivo, "%d", &a); if((a<1)||(a>MAXM)){ printf("\nErro: O numero lido excede o numero maximo de operacoes aceito pelo programa!!!\n\n"); printf("\nO programa aceita no maximo 10000 operacoes de troca!!!\n\n"); exit(1); } fgets(linha, 100, arquivo); nc=strlen(linha); if(nc<1){ printf("\nErro: não há string no arquivo!!!\n\n"); exit(1); } for(i=0; i<MAXV; i++){ fscanf(arquivo, "%d", &(v)); b=b+1; printf("%d\n", v); } printf("%d\n", a); printf("%s\n",linha); getch(); } só que ainda tem algum erro....o meu arquivo de entrada tem as seguintes linhas... 3 ATATGCGA 3 6 4 8 3 4 era pra imprimir... 3 3 6 4 8 3 4 ATATGCGA e tah imprimindo... 3 3998056 não consigo entender porque????
  9. :unsure: quando digito o seguinte codigo em c... #include <stdio.h> #include <string.h> #include <errno.h> #include <conio.h> #define MAXV 20 #define MAXM 10001 int main(){ char*linha; int a; int v[MAXV]; int i; int b; int nc; FILE*arquivo; b=0; arquivo=fopen("entrada.txt", "r"); fscanf(arquivo, "%d", &a); if((a<1)||(a>MAXM)){ printf("\nErro: O numero lido excede o numero maximo de operacoes aceito pelo programa!!!\n\n"); printf("\nO programa aceita no maximo 10000 operacoes de troca!!!\n\n"); ferror(arquivo); } linha=(char*)malloc(100); fgets(linha, 100, arquivo); nc=strlen(linha); if(nc<1){ printf("\nErro: não existe string no arquivo!!!\n\n"); ferror(arquivo); } for(i=0; i<MAXV; i++){ fscanf(arquivo, "%d", v); b=b+1; } printf("%d\n", a); printf("%d\n", v[0]); printf("%s\n",linha); getch(); } O Devc++ executa e compila...porem o meu programa só esta imprimindo a leitura da primeira linha do arquivo...no caso... o a... o compilador apresenta dois erros....e mesmo assim forma o arquivo executavel... Permission denied ld returned 1 exit status alguém sabe o que são esses erros e auql o problema com o meu codigo???????
  10. :unsure: Alguém conhece algum algoritmo...algum codigo que inverta os elementos de uma lista ligada...mas não o jeito convencional...trocar o primeiro pelo segundo ...depois o segundo pelo terceiro...ateh que toda a lista esteja invertida....preciso de algo que seja mais rapido...por exemplo....tenho uma lista duplamente ligada com variaos elelemntos indexados...preciso trocar o elemento de indice 2 pelo de indice 5...o de indice 3 pelo de indice 4....tipo invertendo apenas slices da lista.... se a minha slice for de tamanho impar...preciso inverter is elemntos da ponta ateh que chegue no elemento central....usando um ponteiro de estrutura que aponta para a proxima celula enquanto o outro aponta para a anterior....ateh que eles se encontrem .... se alguém souber como fazer para me ajudar...agradeço....
  11. :unsure: Para inverter os elementos de uma lista duplamente ligada....por exemplo...com o ponteiro p1 apontando para o elemento 2...o ponteiro p2 apobntando para o elemento 5 e trocar o conteudo deles até que eles se encontrem no mesmo elemento posso usar o seguinte codigo??? while(p1->index!=p2->index){ if(p1->item!=p2->item){ p3->item=p1->item; p1->item=p2->item; p2->item=p3->item; } p1=p1->proximo; p2=p2->anterior; } O correto é dizer p1=p1->proximo; ou p1->proximo=p1->proximo; para que o meu ponteiro aponte para aproxima celula??? E para percorrer uma lista os ponteiros precisam ser iniciados da cabeça dela os posso coloca-los direto na posição que eu quero????? :unsure: Posso comparar o elemento de uma lista com um numero qualquer...por exemplo... if(p1->item!=vetor){ blá blá blá.... } Posso incrementar ou decrementar um campo de uma celula de uma lista???...por exemplo... p2->item=p2->(item-1);
  12. Valeu pela dica...obrigada...vou tentar resolver agora.... :D
  13. Como posso declarar uma string sem tamanho definido?
  14. Oi pessoal...sou nova neste fórum e estou aprendendo sobre linguagem C... tenho dúvidas em um exercício que preciso fazer....aqui vai o enunciado para que vocês possam entendê-lo: Este exercício está baseado num problema que ocorre em Biologia Computacional. Todos sabem sobre DNA. Um DNA pode ser resumido como um string nas letras ATCG. O DNA pode sofrer uma série de mutações, alguma das quais podem ser descritas como transformações algorítmicas no string. Uma delas é a reversão, e este problema consiste em simular uma série de reversões. Dada uma sequência de DNA inicial (descrita por uma sequência de N caracteres, com valor A, T, C ou G), uma reversão consiste em destacar um trecho contínuo desta sequência e recolocá-lo na ordem invertida, invertendo a sequência de caracteres deste trecho. A operação é descrita pelos índices da posição inicial e final do trecho (indexamento começando em 1). O programa deve ler, da entrada padrão (stdin), uma sequência de DNA inicial e uma série de operações de inversão a serem realizadas em sequência e imprimir os 1000 primeiros caracteres (ou todos caso N < 1000) da sequência final, na saída padrão (stdout). A entrada conterá 3 linhas. A primeira linha conterá um número, M, com a quantidade de operações a serem realizadas. A segunda linha conterá uma sequência de N caracteres representando o DNA inicial, cada caracter com valor A, T, C ou G. A terceira linha conterá M pares de números (ai e bi, respeitando 1 ≤ ai < bi ≤ N) representando o índice inicial e final de cada operação. Restrições: 1 < N ≤ 10.000.000; 1 ≤ M ≤ 10.000. Tempo de processamento: 10 seg. Exemplo de entrada e saída: 3 ATATGCGA 3 6 4 8 3 4 ATACGATG Veja o que aconteceu (em vermelho os trechos invertidos): Sequência inicial: ATATGCGA Operação 1: [3, 6] Sequência 2: ATCGTAGA Operação 2: [4, 8] Sequência 3: ATCAGATG Operação 3: [3, 4] Sequência final: ATACGATG A intenção deste exercício é testar a capacidade de adaptar estrutura de dados para aplicações específicas, otimizando o tempo de processamento, reduzindo a complexidade computacional temporal da solução.Uma solução intuitiva, realizando as operações de reversão em um vetor de modo direto, tem tempo de complexidade computacional O(M*N), N para cada operação. Para as restrições acima, isso corresponderia a uma ordem de 1012 operações, o que deve estourar o limite de 10 seg imposto.Para melhorar o tempo de processamento, o programa deve conter uma estrutura mais eficiente. Uma possibilidade é uma estrutura baseada em lista ligada, que não tenha que inverter os caracteres um por um a cada operação. Alguém sabe como posso utilizar uma lista ligada para conseguir inverter a sequencia do DNA??? A lista ligada deve ser a seuqncia recebida pelo meu programa...tipo...cada gene deve ser uma célula da lista?? Minha idéia inicial era inverter os elementos da string com base no bubblesort...mas ira estourar o tempo de execução do programa.... Se alguém puder me ajudar ficarei muito agradecida....
×
×
  • Criar Novo...