Tah de parabens!!!
Isso é lindo demais!!!
Eu até tinha comentado com o Will que eu queria fazer um programa que fazia transcrição e tradução de DNA(o EP não eh sobre isso mas o fato de ser DNA jah eh bem legal)!!!
Aproveito para iniciar o tópico sobre dúvidas do EP2.
Até!
Concordo completamente com o Marcos!!
Acabei de ler sobre o EP e lembrei dos exercícios da maratona. Muito legal!!
Pena que não pode fazer em Java, né Marcos? hahaha...
Nem em C++, né Greg?? hahaha...
Ainda não comecei a fazê-lo, talvez faça na segunda, mas gostei muito da idéia do EP e do molde "maratonístico" dele.
Abraços!
Nessa frase, seria ai e bi nessa ordem necessariamente ([ai,bi])?
Em caso afirmativo, porque há essa necessidade? Pelo que eu intendi, trocar 3 por 6 é o mesmo que trocar 6 por 3.
Em caso negativo, desculpem a minha incompetencia para com a lingua portuguesa. = /
No caso do EP2, ambas alternativas de tratamento de erro são aceitáveis.
Talvez alguém muito perdido se confunda.
Foi dada em aula? (Eu faltei na quinta-feira...
)Eu tenho que dar um jeito de acessar os termos da lista diretamente, sem ter que percorrer ela do começo?
A idéia é a acessar os pontos em que a reversão será realizada de forma mais rápida que isso.
Para isso pense no sequinte sub-problema: Se a reversão é [a,b], como encontrar o índice inicial do elemento que agora está na posição 'a'?
Se vocês estão com dúvidas aconselho a procurarem a monitoria, tanto aqui no paca quanto pessoalmente. Estava comentando com o Igor ( nosso monitor de mac110 ) e ele dizia que mesmo em época de EPs ninguém ia perguntar. Eles estão lá para isso, não vão dar a resposta completa mas acho que bons guias eles são.
Até!
Eu sou um dos monitores e responderei a dúvidas que aparecerem por aqui o mais rápido possível.
Esse EP não é fácil então não deixem para a última hora.
Só duas dúvidas:
- Horários de monitoria? Eu os perdi, quando e onde são?
- Data definitiva do EP? Ficou para o mesmo dia da prova?
Até!
Haverá plantão de monitoria no CEC, às quartas-feiras, 14:00-15:00. Isso poderá ser alterado, conforme a demanda.
Direto do site do Mandel...
Uma dúvida:
o que "custa" mais? Uma comparação ou uma atribuição? Ou isso depende de sistema para sistema?
Contando com as trocas que eu vou ter que fazer na minha lista ligada (4 por reversão), o programa ficaria com a complexidade: O((M + 1) * M/2 + 4M), certo?
Desse jeito ele vai ser eficiente? Afinal, o número de reversões não passa de 10000.
Não sei se eu consegui me expressar direito, e nem se todas estas contas estão certas...

Aliás, essa é uma parte que tá meio vaga ainda pra mim. Digo, eu acompanho, mas às vezes não sei explicar.
Posso pedir pra explicar pelo fórum ou vou até a monitoria?
Sim , pode ir na monitoria, mas como é apenas 1 uma vez por semana, se for uma coisa mais fácil de explicar, pode ser por email também.
>específica, pois isso pode influenciar outras pessoas ... e etc.
Ah, beleza. Foi por isso que eu perguntei... =)
Abs.
Até!
Até!
Estou curioso quanto a essa sua preocupação. Você já tentou rodar o programa e deu problema?
Até!
Seja calloc (num de vezes,tamanho);
Até onde fui capaz de constatar, o número de 'campos' zerados é igual ao 'num de vezes'. O que é estranho, mas faz sentido. =P
Edit: Resumindo: "calloc" function Considered Harmful! [with structs]
O Windows aqui de casa tá derrubando meu programa. Imagino (e espero) que seja pelo fato de eu estar mallocando um monte de uma vez só. =D
Alguém teve o mesmo problema (supondo que alguém tentou fazer o EP no Windows)???
Mas estou enfrentando um novo problema:
Tenho um arquivo "teste.in" que contém EXATAMENTE os mesmos dados do arquivo "exemplo1.in", disponível para download...
O problema é: meu programa lê normalmente o MEU arquivo, e devolve a resposta correta. Quando mando-o ler o arquivo "exemplo1.in", ele dá SegFault...
Investigando um pouco mais, descobri que, ao apagar todas as quebras de linha e refazendo-as, o meu programa passava a reconhecer a entrada "exemplo1.in" sem dar SegFault.
Isso tem a ver com os "\n"s e "\r"s da vida???? Ou será algo ainda mais obscuro????
Se você usar scanf para pegar o dado incial (vulgo número de repetições de inversões em determinados termos da cadeia de DNA), você pegará SOMENTE o número. Depois, sobrarão (um ou dois) caracteres (o 0A, vulgo \n, e o 0D, vulgo \r). Se você começar a pegar chars (com getchar(), por exemplo) depois de dar o scanf, o que acontecerá é que você terá de pegar o 0D e o 0A (ou só o 0A) dependendo da entrada.
Alguns editores de texto acabam por colocar acho que 0D 0A (ou o contrário) quando você quebra uma linha. Outros, por sua vez, colocam apenas o 0A.
Nas entradas há arquivos tanto com 0D0A como com 0A somente (a entrada 5 não deve "segfaultar" no seu programa).
Cada plataforma usa uma quebra de linha distinta, por isso o problema:
Windows: \r\n
Linux (UNIX): \n
Mac: \r
Creio que seja isso sim..
Will: Meu algoritmo deu SegFault com o exemplo5...
Francisco: Funcionou com os outros mallocs? De que tipo é a variável x?
Então, os mallocs funcionam, o programa funciona, mas ele dá esse warning pra todos os mallocs que tem sizeof(struct celula). E x é um apontador pra célula.
ep2_final.c:57: aviso: incompatible implicit declaration of built-in function ‘malloc’
ele se refere a esse malloc:
x = malloc(sizeof(struct celula));
eu usei o malloc de algum jeito errado?
tenta criar um tipo novo e então usar no malloc...assim:
typedef struct celula cell; /*Cria um tipo chamado cell que é um struct celula.*/
x = malloc(sizeof(cell) );
Bem...tenta isso...se não der certo, aí não sei =D
Até!
x = (cell*)malloc(sizeof(cell));
, enquanto era pra ser
x = (*cell)malloc(sizeof(cell));
If a type name is used, it always needs to be enclosed in parentheses, whereas variable names and expressions can be specified with or without parentheses.
(Ah, por isso que meu "malloc(sizeof int)" tava coisando!)
Não quero mais brincar!
Professor caso o ep não rode no tempo especificado qual vai ser o critério de correção?
Eps que não rodam no tempo vão ser zerados ou o senhor vai considerar o codigo e descontar pontos pelo tempo?
Meu ep roda muito lento para os casos dos exemplos 4 e 5. E eu estou usando lista ligada e pilha para inversão das cadeias de DNA. Sera que meu metodo que é ruim? Porque eu vi o DNA rapidor e o meu não chega nem perto do tempo especificado. Demorou 20 min para a inversão do exemplo 4.
Cadê a segunda dica??? ^^
Cara, reveja seu algoritmo. 1 min é um tempo que podemos falar que é considerável para correção, 20 não.
Até!
Este metodo é lento sim (demora até n passos para cada inversão, certo?), você precisa achar um jeito mais rápido de fazer a inversão.
Para isso recomendo fazer as duas listas como indicado na dica 1.2, achar um jeito rápido de achar os elementos por índice (sem varrer a lista) e fazer a troca de forma rápida (sem trocar elemento a elemento, utilize o fato de ser uma lista ligada).
Comparar 1000 caracteres não é legal! e eu aposto que tem algo que faça isso no linux...
Alguém saberia como (no linux):
Montar um PIPE para automatizar tanto o processo de entrada de dados quando o de saída? Sei lá, algo do tipo:
Valeu!
retorna 'nada' caso sejam iguais, retorna as diferenças caso não sejam iguais.
Talvez dê para fazer um bash que funcione dessa forma.
Para que a pressa? (eu também não consegui, encontrei uma solução razoável que não servia para minha estrutura usada no programa - agora terei de começar do zero com uma estrutura compatível).
Se vc for usar o diff, use a opção "-w", que aí ele desconsidera os eventuais espaços em branco '\n', etc... Que possam ter de diferença entre os dois arquivos de texto.
alguem pode me dizer uma forma rapida de encontrar elementos em listas?
meu ep tá rodando em 12 minutos (o dna rapido roda em 2,5 segundos!!) só pq eu percorro a lista elemento por elemento até o ponto de troca e pra piorar tô usando 2 listas!
tem problema se o meu ep gasta ~300mb de memoria?
Tem solução sim, eu só não consigo fazê-la funcionar. UAHEaHEUheuaheuAHE
Se voce malloca uma memoria, os chars serão armazenados em sequencia, eu axo q se voce pegar por exemplo o endereço inicial, vamos supor q seja 10000, se voce qr saber aonde está o quinto char, vc deveria fazer algo do tipo 10000 +(tanto que o char ocupa em bytes)*4 .
Espero q seja isso (tive essa ideia agora, que pode estar completamente errada) , eu pretendo aprender isso ateh o final da tarde (tirei o dia pra isso) espero ter ajudado.
Tente desenhar num papel tudo o que está acontecendo , e pense em algum outro jeito de achar o elemento.
quanta nota eu perco pq o meu ep roda em 6 minutos?
eu entendi que devemos imprimir toda a lista, mas se o usario fizer alguma restrição, imprimimos o numero de bases digitado por ele.
é isso mesmo ou entendi errado?
O melhor é esquecer essa possibilidade...
(eu não entendi direito)
(vamos ver quantos lêem o fórum)
Uma coisa é encontrar o índice original de uma posição na sequência, dado seu índice depois de algumas inversões. Outra é, dado esse índice original, como encontrar seu conteúdo, já que a sequência mudou adoidado?
Um jeito de fazer isso é colocar cada caractere da sequência em uma célula, como a dica 1, e guardar um mapeamento de índices para células, construído logo no começo.
Acho que isso é uma dica duca, mais que isso só fazendo o programa
Enfim, essa dica 2 do enunciado ficou meio estranha msm... muito melhor com essa explicação adicional do fórum.
var->next->next->prev
var->prev->next->prev
facilitando a vida de quem vê o código?
Edit:
Fica melhor se usar:
(var->next->next)->prev
(var->prev->next)->prev
?
((var.prev).next).prev
IMHO, não ajuda muito.
#define TRES_DEPOIS(x) (x)->next->next->next
Isso ajuda se o nome da macro realmente evocar o significado dessas expressões.
----------------
Seu programa deve funcionar (no linux) com um comando parecido com:
time ./programa < teste.in > teste.out
Mais precisamente: o teste de tempo será com
time ./programa < teste.in > /dev/null
----------------
Vão ser dois testes então: um de tempo e outro de corretude de saída, certo?
Porque esse "/dev/null" é que a saída vai ser jogada fora, não? Isso melhora a eficiência do programa em questões de tempo? Melhor dizendo, ele vai rodar mais rápido por ter colocado a saída nula?
Tô longe de terminar o meu ainda, mas gostaria de saber disso porque senão eu mudo o jeito de fazer agora mesmo... =)
Obrigado!
[isso acontece ao meu EP]
v[0] v[1] v[2] ...
| | |
cabeca -> A -> G ...
E a sua lista espelho
... v[n-1] v[n] v[n+1]
| | |
... G -> A -> calda
e quando eu fizesse as modificações nos apontadores fazendo a cabeca do de cima apontar para o G d baixo e o A de baixo apontar para o seginte do G de cima e fazer o mesmo na parte d baixo , em seguida usar o memmove para passar o bloco de memoria do v[1] ate o v[2] para v[n-1] ate v[n] e vice versa.
Sera q é possivel e rápido ou ele faria varias pequenas atribuicoes ao inves de uma gigante.
vai ai um link pra ajudar
http://www.cplusplus.com/reference/clibrary/cstring/memmove.html
vlw
Quando uso o diff <arquivo_gerado_pelo_meu_ep> <saida_esperada>, ele acusa diferença; porém quando dou um cat nesses dois arquivos, eles são exatamente idênticos (entenda por: todos os 1000 chars aparecem corretamente). Além do mais, ocorre uma diferença de 1 char quando uso wc nos dois arquivos.
Isso me deixou com uma dúvida:
Quando a correção for feita, essa diferença será levada em consideração (visto que a troca é feita corretamente e num intervalo de tempo menor que 10 segundos)?
Abraço.
(Deus salve o editor hexadecimal).
Mas descobrir o erro usando editor hexadecimal é supimpa!
hahauahuahauha...
Até!
De casa 'ssh <usuario>@linux.ime.usp.br'
Alguma coisa eu aprendo nessa vida ¬¬
Se você se conectar de fora da Linux, basta usar <user>@linux.ime.usp.br, se você se conectar de dentro da Linux, então deverá usar o <user>@shell.linux.ime.usp.br.
ssh <user>@zillertal
Amanhã eu coloco linux no meu pc!
Eu jah programo mal e o Windows XP /Vista naum deixa o malloc funfar!
Isso me deixa tristes!!
O tio Bill me zuou = /