Enuncia da Tarefa 3

Enuncia da Tarefa 3

por Rafael Reggiani Manzo -
Número de respostas: 12

Para esta tarefa, meu programa deve ou não deve se reocupar com ciclos?

Veja: "Um digrafo de depêndencias não deve conter ciclos. Isto, entretanto, não é obstáculo para que um digrafo correspondente a um arquivo MakeFile tenha ciclos. Isto apenas significa que o Make deverá ser capaz de verificar a presença ou não de ciclos no digrafo. A existência de ciclos deve ser considerada pelo Make como um erro na especificação do MakeFile."

Mas logo a seguir vem: "Detecção de ciclos é um dos objetos de estudo da Tarefa 4. Por enquanto não se preocupe com isto."

Eu entendi que a resposta é não para a minha pergunta, mas prefiro ter certeza =D

Em resposta à Rafael Reggiani Manzo

Re: Enuncia da Tarefa 3

por Paulo Cheadi Haddad Filho -

Realmente está ambíguo.

Pelo que eu conversei com o professor e com outras pessoas, a receita do EP é ler o MakeFile, construir o digrafo de arquivos e dependentes e verificar por ciclos, pois caso haja algum é um erro do Make.

Talvez o que o enunciado queira dizer na parte de não se preocupar com detecção seja quanto a certificação de existência de ciclos. Penso que devemos implementar uma função de busca em profundidade como fizemos na prova, que pára ao achar um vértice visitado, que indica um ciclo.

Chutei.

Em resposta à Paulo Cheadi Haddad Filho

Re: Enuncia da Tarefa 3

por Jackson José de Souza -
Eu entendi que nós devemos tentar encontrar uma ordenação topolológica. Verificara presença de ciclos Se não houver temos um ciclo. Isso significa verificar a existência de ciclos ou não. Detectar um ciclo significa verificar se ele existe e se houver um devemos encontrar qual ê o ciclo. Ou seja, mostrar o caminho formado pelo ciclo. Creio que seja isso. Abraços, Jackson.
Em resposta à Rafael Reggiani Manzo

Re: Enuncia da Tarefa 3

por Paulo Cheadi Haddad Filho -

Aliás, percebi q existe uma coleta dos comandos do MakeFile, como mostra esta seção do enunciado.

Me pergunto qual a utilidade dessa coleta, dado q o q importa mesmo é montar o grafo de dependências. Tem a ver com a próxima tarefa?

Obrigado!

Em resposta à Rafael Reggiani Manzo

Re: Enuncia da Tarefa 3

por César Machado -

Seu programa não deve se preocupar com ciclos por enquanto. Os arquivos MakeFile podem ou não ter dependencias ciclicas, como disse a primeira parte que você citou, mas isso não importa para a tarefa 3, cujo objetivo é simplesmente criar um grafo com lista de adjacências para representar as dependências.

A tarefa 4 será uma continuação dessa e envolverá a detecção de ciclos.

Quanto à coleta de comandos, ela também tem a ver com a próxima tarefa. Para criar uma implementação do make, vocês não podem ignorar os comandos... :p

Em resposta à César Machado

Re: Enuncia da Tarefa 3

por Paulo Cheadi Haddad Filho -

"(...) mas isso não importa para a tarefa 3, cujo objetivo é simplesmente criar um grafo com lista de adjacências para representar as dependências."

Então acho que temos um problema no enunciado quanto ao objetivos desejados do EP. Falta especificar um pouco melhor, pois eu e alguns colegas divergimos quanto ao que entendemos hehehe.


1) Objetivos do EP3:

Então eu imagino q o EP3 seja:

- criar o grafo dos arquivos e suas dependencias
- gravar o arquivo MakeFile.dg

certo?


2) MakeFile.dg

Devemos adotar algum padrão pra esse arquivo? Por exclusão, entendi q ele deve conter

...
arquivo1 dependência1
arquivo1 dependência2
...
arquivo1 dependênciaN
(linha em branco pra facilitar esta leitura)
arquivo2 dependência1
...
...
...
arquivoM dependênciaX

Entendi certo?


Se isso não se esclarecer hoje, esclarecemos amanhã com o professor sem problemas. =)

Obrigado!

Em resposta à Paulo Cheadi Haddad Filho

Re: Enuncia da Tarefa 3

por César Machado -

"1) Objetivos do EP3:

Então eu imagino q o EP3 seja:

- criar o grafo dos arquivos e suas dependencias
- gravar o arquivo MakeFile.dg

certo?"

Isso mesmo

"2) MakeFile.dg

Devemos adotar algum padrão pra esse arquivo?"

O MakeFile.dg tem exatamente o mesmo padrão do MakeFile original (e o mesmo conteúdo também):

arquivo1: dep1 dep2 ... depX

comando 1

...

comando Y

arquivo2: dep1 dep2 ... depZ

comando 1

...

comando W

O que eu gostaria de ver no código de vocês:
-uma função de leitura que recebe um arquivo MakeFile e cria um grafo
-uma função de escrita que recebe um grafo e escreve um arquivo MakeFile.dg

(e não, não adianta fazer um programa que simplesmente copia o conteúdo de um arquivo para outro direto.... A criação do grafo é importante para essa disciplina e eu vou olhar todos os códigos :p)

Pensem nesse arquivo como um teste para ver se a estrutura foi criada corretamente. simplesmente imprimam o grafo no formato especificado, sem se preocupar com a ordem das targets, dependências, etc (mas a ordem dos comandos faz diferença).

Em resposta à César Machado

Re: Enuncia da Tarefa 3

por Paulo Cheadi Haddad Filho -

Hmmm! Agora tá melhor! =)

Obrigado!

Em resposta à Paulo Cheadi Haddad Filho

Re: Enuncia da Tarefa 3

por Paulo Cheadi Haddad Filho -

Epa! Outra dúvida!

No enunciado diz

static char *nome[maxV], *comandos[maxV];

mas não existe nenhuma definição de maxV. Existirá algum maxV ou a gente se vira com (ou sem, né? haha) isso?

Obrigado!

Em resposta à Paulo Cheadi Haddad Filho

Re: Enuncia da Tarefa 3

por César Machado -

Vocês podem definir algum maxV aceitável (100 parece bom). O valor colocado não importa muito, mas deixem em algum lugar fácil de mudar no início do código (#define maxV ...).

Se você não quiser chutar um número, um jeito mais elegante seria com o uso de alocação dinâmica, definindo um limite inicial e realocando as estruturas durante a execução conforme a necessidade.

Em resposta à Rafael Reggiani Manzo

Re: Enuncia da Tarefa 3

por Fernando Aluani -

Outra duvida:  Temos alguma limitacao em o que imprimimos no console?

Ou seja, podemos deixar que o EP entregue imprima algumas coisas uteis no console ou o console tem que ser mantido "limpo"?

Em resposta à Fernando Aluani

Re: Enuncia da Tarefa 3

por César Machado -

Não tem limitação. Vocês podem imprimir coisas (ou não), mas eu pessoalmente prefiro códigos menos poluídos (imprimir qual "fase" do programa está acontecendo é interessante, mas eu acho que imprimir cada passo - aresta criada, linha lida, etc - é exagerado, por exemplo)