Como disse esse EP pode parecer facil, mas quando pega pra fazer vc ve que não é bem assim, então estou abrindo esse topico para que coloquem suas duvidas, comentarios, sujestões, crises existenciais etc.
Assim podemos discutir e fica tudo centralizado aqui.
Abss e bom EP.
Em resposta à Geraldo Castro Zampoli
Re: EP1 - Periodo Matutino
Geraldo estou com o EP pronto so q com um seguinte problema para a condição 1 < N <= 10.000.000 meu programa da um segmantation fault se eu coloco 1 < N <= 1.000.000 ele funciona, quando ele da seqmentation fault ele nem começa executar o programa logo q abre o .exe ele da o segmentation fault, e agora o que eu faço me parece que e algo relacionado a memoria, mas nao tenho certeza o que voce me diz?
obrigado desde ja
obrigado desde ja
Em resposta à José Eduardo Trindade e Marques
Re: EP1 - Periodo Matutino
por Geraldo Castro Zampoli -
Vc esta tratando quando malloc retorna NULL?
Pode ser que esta estourando a memoria.
Se não for isso o jeito é colocar num depurador, lembre-se de compilar com -g, e caçar esse erro. Outra saida é encher o programa de printf e ver ate onde ele imprime, ai vc tem uma ideia de onde procurar o problema.
Pode ser que esta estourando a memoria.
Se não for isso o jeito é colocar num depurador, lembre-se de compilar com -g, e caçar esse erro. Outra saida é encher o programa de printf e ver ate onde ele imprime, ai vc tem uma ideia de onde procurar o problema.
Em resposta à Geraldo Castro Zampoli
Re: EP1 - Periodo Matutino
geraldo eu fiz isso enchi o pe de prints de debug o meu problema esta qndo coloco :
/** Definicao da dimensao maxima da sequencia **/
#define MAXDNASEQ 1000000 Esse funciona
/** #define MAXDNASEQ 10000000 **/ esse nao funciona
Com 1000000 o programa funciona de boas sem problema algum troca td diretinho masi qndo coloco 10000000 ele da erro antes msm de começar a executar o problema naum possui nenhum erro de compilação ele compila td bunitinho ai abre o prompt de comando com a execução do program ai ele para e da segmentation fault
Outra coisa se malloc retorna NULL o q eu faço para o programa?
e agora??
/** Definicao da dimensao maxima da sequencia **/
#define MAXDNASEQ 1000000 Esse funciona
/** #define MAXDNASEQ 10000000 **/ esse nao funciona
Com 1000000 o programa funciona de boas sem problema algum troca td diretinho masi qndo coloco 10000000 ele da erro antes msm de começar a executar o problema naum possui nenhum erro de compilação ele compila td bunitinho ai abre o prompt de comando com a execução do program ai ele para e da segmentation fault
Outra coisa se malloc retorna NULL o q eu faço para o programa?
e agora??
Em resposta à José Eduardo Trindade e Marques
Re: EP1 - Periodo Matutino
por Geraldo Castro Zampoli -
Se vc estiver alocando com vetor estatico com esse tamanho, tente alocar como global. Parece que o gcc não deixa alocar estaticamente coisas muitos grandes dentro de funções.
Em resposta à Geraldo Castro Zampoli
Re: EP1 - Periodo Matutino
Geraldo, amanha voce vai no ime??
Não estou conseguindo resolver mesmo com as sua ajuda pelo computador, seria possivel voce me dar uma ajudinha??
Obrigado
SE precisar lhe envio o arquivo estou perdido com relação a isso trabalho com o windows e naum estou conseguindo usar o debbuger do codeblock so falta isso se reduzir ele funciona perfeitametne, jah estou ficando maluco com isso
Não estou conseguindo resolver mesmo com as sua ajuda pelo computador, seria possivel voce me dar uma ajudinha??
Obrigado
SE precisar lhe envio o arquivo estou perdido com relação a isso trabalho com o windows e naum estou conseguindo usar o debbuger do codeblock so falta isso se reduzir ele funciona perfeitametne, jah estou ficando maluco com isso
Esqueci de colocar as saidas esperadas para aqueles exemplos do enunciado do ep, elas podem ser encontradas nesse link:
http://www.linux.ime.usp.br/~shakavp/Saidas.zip
http://www.linux.ime.usp.br/~shakavp/Saidas.zip
Oi Cara
Segue o exemplo de declaração de um array para armazenar celulas.
Outra coisa, é para usar função com lista duplamante encadeada, do jeito que se tinha falado.
Além disso, precisa usar lista encadeada e manipulando 4 vetores a gente inverte toda a lista.
Tó vendo agora a seq. de manipulação dos vetores.
Abr.
struct No{
char valor;
struct No *prox;
struct No *ant;
};
typedef struct No cel;
no corpo da função main
cell **arr;
arr = malloc(10*sizeof(cel));//arranjo de 10 posições
cel aux;
aux->valor = 3;
aux->prox = NULL;
aux->ant = NULL;
arr[0] = aux;
printf("%d", arr[0]->valor);
Segue o exemplo de declaração de um array para armazenar celulas.
Outra coisa, é para usar função com lista duplamante encadeada, do jeito que se tinha falado.
Além disso, precisa usar lista encadeada e manipulando 4 vetores a gente inverte toda a lista.
Tó vendo agora a seq. de manipulação dos vetores.
Abr.
struct No{
char valor;
struct No *prox;
struct No *ant;
};
typedef struct No cel;
no corpo da função main
cell **arr;
arr = malloc(10*sizeof(cel));//arranjo de 10 posições
cel aux;
aux->valor = 3;
aux->prox = NULL;
aux->ant = NULL;
arr[0] = aux;
printf("%d", arr[0]->valor);
Em resposta à Alexandre Locci Martins
Re: EP1 - Periodo Matutino
oi alexandre, tentei fazer o vetor de apontadores a partir desse modelo que vc deixou aqui no paca, só que apareceram alguns warnings:
1) undeclared cell
mas só mudar para cel, esse foi simples
2) invalid type argument of `->'
isso apareceu em nas seguintes linhas:
aux->valor = 3;
aux->prox = NULL;
aux->ant = NULL;
para consertar eu coloquei '.' no lugar de '->' e funcionou até essa parte.
3) incompatible types in assignment
isso apareceu na linha:
arr[0] = aux;
esse eu nao consegui consertar...
e acredito q isso de problema em:
printf("%d", arr[0]->valor);
pois nao consigo imprimir, tentei mudar para 'arr[0].valor' e tambem nao deu em nadar.
se alguem souber o que está acontecendo e puder ajudar... obrigado
1) undeclared cell
mas só mudar para cel, esse foi simples
2) invalid type argument of `->'
isso apareceu em nas seguintes linhas:
aux->valor = 3;
aux->prox = NULL;
aux->ant = NULL;
para consertar eu coloquei '.' no lugar de '->' e funcionou até essa parte.
3) incompatible types in assignment
isso apareceu na linha:
arr[0] = aux;
esse eu nao consegui consertar...
e acredito q isso de problema em:
printf("%d", arr[0]->valor);
pois nao consigo imprimir, tentei mudar para 'arr[0].valor' e tambem nao deu em nadar.
se alguem souber o que está acontecendo e puder ajudar... obrigado
Em resposta à renan marcel barros dos santos
Re: EP1 - Periodo Matutino
por Alexandre Locci Martins -
Oi Renan
C fez aux = malloc(sizeof(cel)); ?
Aí deve rolar.
Outra coisa, aqui deu certo
printf("%c\n",arr[qq posicao]->valor);
Vê se foi isso e da um retorno.
Abraço.
C fez aux = malloc(sizeof(cel)); ?
Aí deve rolar.
Outra coisa, aqui deu certo
printf("%c\n",arr[qq posicao]->valor);
Vê se foi isso e da um retorno.
Abraço.
Em resposta à renan marcel barros dos santos
Re: EP1 - Periodo Matutino
eu devia estar errando em alguma coisa, essa parte eu consegui consertar
Como eu vejo no windows o tempo de execução? Uso o Dev C++.
Intão,
o unico jeito que conheço é usar o clock() da time.h e mandar imprimir o tempo na tela, apenas para seu acompanhamento. Não precisa entregar imprimindo o tempo.
O rotina ficaria mais ou menos assim:
int main(){
clock_t tempo_ini, tempo;
/*declaro a variavel do tipo clock_t, esse tipo é da time.h*/
tempo_ini = clock();
.
.
/*Seu progrma*/
.
.
tempo = clock();
tempo -= tempo_ini;
printf("tempo: %f\n", (float)tempo / CLOCKS_PER_SEC);
return 0;
}
Provavelmente escrevi alguma coisa errada, pq escrevi aqui na hora. Mas a ideia é essa.
Outra coisa que vc pode fazer é marcar no relogio mesmo mais ou menos o tempo e ve se da alguma coisa proxima daquilo que tem no enunciado.
Se quiser saber mais da time.h, entre nesse link:
http://www.cplusplus.com/reference/clibrary/ctime/
absss
o unico jeito que conheço é usar o clock() da time.h e mandar imprimir o tempo na tela, apenas para seu acompanhamento. Não precisa entregar imprimindo o tempo.
O rotina ficaria mais ou menos assim:
int main(){
clock_t tempo_ini, tempo;
/*declaro a variavel do tipo clock_t, esse tipo é da time.h*/
tempo_ini = clock();
.
.
/*Seu progrma*/
.
.
tempo = clock();
tempo -= tempo_ini;
printf("tempo: %f\n", (float)tempo / CLOCKS_PER_SEC);
return 0;
}
Provavelmente escrevi alguma coisa errada, pq escrevi aqui na hora. Mas a ideia é essa.
Outra coisa que vc pode fazer é marcar no relogio mesmo mais ou menos o tempo e ve se da alguma coisa proxima daquilo que tem no enunciado.
Se quiser saber mais da time.h, entre nesse link:
http://www.cplusplus.com/reference/clibrary/ctime/
absss
Geraldo
Tudo bem?
Mandei minha pergunta para o lugar errado.
Por favor, sabe dizer se o final de linha dos arquivos é 13 10 ou 10, pois tive uns problemas com isso, dei um jeitinho para superar, mas queria confirmar.
Outra coisa, a estratégia da lista encadeada realmente é muito boa, segue meus tempos:
ex9 4,4s e exe10 5,4 s (sem saída).
Eu conferi a saída com o exe1 ao exe4 mais uns testes q fiz com situações limites, inverte toda lista e coisas do género, ok.
Valeu.
Tudo bem?
Mandei minha pergunta para o lugar errado.
Por favor, sabe dizer se o final de linha dos arquivos é 13 10 ou 10, pois tive uns problemas com isso, dei um jeitinho para superar, mas queria confirmar.
Outra coisa, a estratégia da lista encadeada realmente é muito boa, segue meus tempos:
ex9 4,4s e exe10 5,4 s (sem saída).
Eu conferi a saída com o exe1 ao exe4 mais uns testes q fiz com situações limites, inverte toda lista e coisas do género, ok.
Valeu.
Para a saida vc pode usar o comparação com '\n' ou '\r', não há a necessidade de saber qual é seu valor na tabela ASCII.
De qualquer forma '\n' == 10 e '\r' == 13. Voce pode querer usar os dois por conta daqueles padrões que comentei.
Como vc esta fazendo no linux vc pode digitar alguma coisa assim, para testar o corretude do seu codigo:
executavel < exemplox > respostax #pega a entrada do exemplox e joga pra saidax
diff respostax saidax #compara com o diff o saida com a resposta, se nada é impresso são iguais
abss
De qualquer forma '\n' == 10 e '\r' == 13. Voce pode querer usar os dois por conta daqueles padrões que comentei.
Como vc esta fazendo no linux vc pode digitar alguma coisa assim, para testar o corretude do seu codigo:
executavel < exemplox > respostax #pega a entrada do exemplox e joga pra saidax
diff respostax saidax #compara com o diff o saida com a resposta, se nada é impresso são iguais
abss
Valeu, Geraldo, funcionou.
Bom, até o exemplo 5 vai que é uma beleza, melhor que o enunciado. Depois é só desgraça ... 33s, 12s, 2min 4s ... haha, dureza ... Estou fazendo com lista duplamente encadeada, mas provavelmente com uma reversão não muito inteligente, vou tentar dar uma olhada melhor.
Bom, até o exemplo 5 vai que é uma beleza, melhor que o enunciado. Depois é só desgraça ... 33s, 12s, 2min 4s ... haha, dureza ... Estou fazendo com lista duplamente encadeada, mas provavelmente com uma reversão não muito inteligente, vou tentar dar uma olhada melhor.
Vc provalvelmente esta invertendo toda a lista, amanhã na aula vou dar uma repassada na ideia da inversão, ai discutimos la.
absss
absss
Em resposta à Geraldo Castro Zampoli
Re: EP1 - Periodo Matutino
Geraldo
Estava fazendo meu EP e cheguei ate um ponto no qual com lista duplamente ligada demorava 25 min, tentei reduzir pensar num jeito mas naum consegui porem consegui um jeito sem lista ligada q esta funcionado perfeitamente, conversei com o professor hj pela manha ele disse q eu podia entregar este ep sem a lista gostaria de confirmar
obrigado
Estava fazendo meu EP e cheguei ate um ponto no qual com lista duplamente ligada demorava 25 min, tentei reduzir pensar num jeito mas naum consegui porem consegui um jeito sem lista ligada q esta funcionado perfeitamente, conversei com o professor hj pela manha ele disse q eu podia entregar este ep sem a lista gostaria de confirmar
obrigado
Em resposta à José Eduardo Trindade e Marques
Re: EP1 - Periodo Matutino
por Geraldo Castro Zampoli -
Se esta certo e é eficiente, não tem problema nenhum. Outras ideias são sempre bem-vindas.
absss
absss
Geraldo, eu não estou conseguindo assimilar as idéias que vc deu hoje, não fez mto sentido e eu não consegui fazer a inversão ainda. Será que vc pode dar um help??
Obrigada
Obrigada
Oi Geraldo
Onde no paca eu encontro os arquivos de saida q c gerou?
Valeu
Onde no paca eu encontro os arquivos de saida q c gerou?
Valeu
O segredo para inversão na lista duplamente ligada é saber que nem sempre oq é proximo sera o proximo, essa parte vc entendeu?
Sabendo disso oq vc tem que fazer é com o auxilio de apontadores auxiliares saber se o proximo aponto mesmo para o proximo ou para o anterior, tente desenhar a situação inicial e fazer o algoritmo da troca, depois simule esse mesmo algoritmo para a lista onde ja houveram trocas e veja onde colocar os if's, no caso do proximo ser o anterior e vice-versa.
Lembrando que vc guarda um apontador pro inicio, um pro fim, um pra antes do inicio e um depois do fim.
Tente isso, qualquer coisa é so perguntar.
Sabendo disso oq vc tem que fazer é com o auxilio de apontadores auxiliares saber se o proximo aponto mesmo para o proximo ou para o anterior, tente desenhar a situação inicial e fazer o algoritmo da troca, depois simule esse mesmo algoritmo para a lista onde ja houveram trocas e veja onde colocar os if's, no caso do proximo ser o anterior e vice-versa.
Lembrando que vc guarda um apontador pro inicio, um pro fim, um pra antes do inicio e um depois do fim.
Tente isso, qualquer coisa é so perguntar.
Em resposta à Geraldo Castro Zampoli
Re: EP1 - Periodo Matutino
será que alguém pode me ajudar com a ideia da atualização do indice nos intervalos?
eu fiz uma função, só que trabalhei em cima dela e vi que ela não devolve os valores que deveria devolver...
o que eu sei é q temos q usar a formula : novo indice = fim - ponto + inicio
mas o problema é q dada uma sequencia de trocas eu ja me perdi tentando percorrer as trocas da ultima pra primeira, da primeira pra ultima, atualizando os intervalos q caem nas trocas anteriores, atualizando oss intervalos q caem nas trocas posteriores tudo usando a formulazinha...
bom, se alguem puder ajudar ficaria bastante grato
eu fiz uma função, só que trabalhei em cima dela e vi que ela não devolve os valores que deveria devolver...
o que eu sei é q temos q usar a formula : novo indice = fim - ponto + inicio
mas o problema é q dada uma sequencia de trocas eu ja me perdi tentando percorrer as trocas da ultima pra primeira, da primeira pra ultima, atualizando os intervalos q caem nas trocas anteriores, atualizando oss intervalos q caem nas trocas posteriores tudo usando a formulazinha...
bom, se alguem puder ajudar ficaria bastante grato
Em resposta à renan marcel barros dos santos
Re: EP1 - Periodo Matutino
galera, o geraldo me ajudou, consegui fazer aqui
se alguem tiver duvida nisso, tem q percorrer a partir da ultima atualizacao q foi feita
se alguem tiver duvida nisso, tem q percorrer a partir da ultima atualizacao q foi feita
Em resposta à renan marcel barros dos santos
Re: EP1 - Periodo Matutino
por Alexandre Locci Martins -
Oi Renan
Olha não sei se é bem isso.
Suponha q c t 1 seq de inverções deste tipo:
3 4
5 6
1 5
e aí c quer calcular onde esta os nos 2 e 3 lá no arranjo.
COmeça pelo 2...
Ele tá no intervalo 1 e 5 sim, então faze 5 - 2 + 1 = 4.
4 ta no intervalo 5 e 6 não, pula.
4 esta no intervalo 3 e 4, sim aplica a formúla 4 -4 + 3 = 3, logo no seu vetor a posição 2 da lista esta na posição 3.
Para facilitar, faz como o Geraldo falou, cria um arranjo com o ínicio e o fim de cada intervalo, aí calcula tudo e sai usando quando for o caso.
Belê? Sempre de baixo para cima.
Abr.
Olha não sei se é bem isso.
Suponha q c t 1 seq de inverções deste tipo:
3 4
5 6
1 5
e aí c quer calcular onde esta os nos 2 e 3 lá no arranjo.
COmeça pelo 2...
Ele tá no intervalo 1 e 5 sim, então faze 5 - 2 + 1 = 4.
4 ta no intervalo 5 e 6 não, pula.
4 esta no intervalo 3 e 4, sim aplica a formúla 4 -4 + 3 = 3, logo no seu vetor a posição 2 da lista esta na posição 3.
Para facilitar, faz como o Geraldo falou, cria um arranjo com o ínicio e o fim de cada intervalo, aí calcula tudo e sai usando quando for o caso.
Belê? Sempre de baixo para cima.
Abr.
Em resposta à renan marcel barros dos santos
Re: EP1 - Periodo Matutino
Ixi, infelizmente não deu pra pensar melhor nesse jeito mais inteligente de só mexer com os caminhos, sem inverter os elementos. Vou tentar pensar mais um pouco aqui, mas acabou ficando muito pra última hora. Senão terei que entregar com o método ineficiente mesmo que já estava pronto, espero que pelo menos não saia zerado.