EP1 - Periodo Matutino

EP1 - Periodo Matutino

por Geraldo Castro Zampoli -
Número de respostas: 26
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

por José Eduardo Trindade e Marques -
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
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.


Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por José Eduardo Trindade e Marques -
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??


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

por José Eduardo Trindade e Marques -
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

Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por Geraldo Castro Zampoli -
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


Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por Alexandre Locci Martins -
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);


Em resposta à Alexandre Locci Martins

Re: EP1 - Periodo Matutino

por renan marcel barros dos santos -
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
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.
Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por Allan Felipe Pereira de Brito -
Como eu vejo no windows o tempo de execução? Uso o Dev C++.
Em resposta à Allan Felipe Pereira de Brito

Re: EP1 - Periodo Matutino

por Geraldo Castro Zampoli -
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

Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por Alexandre Locci Martins -
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.
Em resposta à Alexandre Locci Martins

Re: EP1 - Periodo Matutino

por Geraldo Castro Zampoli -
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
Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por Allan Felipe Pereira de Brito -
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.
Em resposta à Allan Felipe Pereira de Brito

Re: EP1 - Periodo Matutino

por Geraldo Castro Zampoli -
Vc provalvelmente esta invertendo toda a lista, amanhã na aula vou dar uma repassada na ideia da inversão, ai discutimos la.

absss
Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por José Eduardo Trindade e Marques -
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
Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por Ana Carolina Barbosa Silva -
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
Em resposta à Ana Carolina Barbosa Silva

Re: EP1 - Periodo Matutino

por Geraldo Castro Zampoli -
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.
Em resposta à Geraldo Castro Zampoli

Re: EP1 - Periodo Matutino

por renan marcel barros dos santos -
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
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.
Em resposta à renan marcel barros dos santos

Re: EP1 - Periodo Matutino

por Allan Felipe Pereira de Brito -
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.