EP1

EP1

por Carlos E. Ferreira -
Número de respostas: 52
Se você tem dúvidas no EP1, este é o forum para escrever.

--
carlinhos
Em resposta à Carlos E. Ferreira

Re: EP1

por Felipe Viviani Martins -
Olá Prof,

Gostaria de saber se o EP é individual ou em dupla?

Em relação ao programa, eu já estou gerando meus aviões aleatoriamente, mas tenho algumas duvidas em relação a isso. Assim que o programa cria um novo avião, ele deve definir muitas inflormações sobre o mesmo; por exemplo a companhia aérea é definida por meio de prcentagem ( 30% GOL, 40% TAM, 15% VARIG... ), assim como o aeroporto de origem/destino e o desejo de pousar/decolar:

1 - Mas quantos aviões devem ser gerados por atualização? Eu defini 10% - 0 aviões, 10% - 1 aviões, 30% - 2 aviões, 30% - 3 aviões, 10% - 4 aviões e 10% - 5 aviões.

2 - Quantos voos de emergência? Eu defini 10% - emergencia e 90% - normal.

Gostaria de saber se estas proporções estão boas ou se sugere outra.

Obrigado, Felipe.
Em resposta à Felipe Viviani Martins

Re: EP1

por Carlos E. Ferreira -
O EP é individual.

A geração de testes deve ser feita de forma parametrizada, de forma que, se você notar que os testes estão ficando muito simples pode alterar. Por exemplo, com os números que você deu acima, a chance de gerar 4 ou 5 aviões é de 20%, igual à chance de gerar 0 ou 1. Dessa forma, como o aeroporto atende a 3 aviões por iteração, em uma a cada 5 iterações sobra 1 ou 2 aviões. Mas, sobra também uma pista para atendê-los. Meu chute é que com esses parâmetros os conflitos (que são o interessante neste EP) não vão ocorrer.

Sugiro que vocês testes várias escolhas nos vários parâmetros, e anotem seus testes para poder colocar no relatório que pedi a vocês para fazerem.

abraços,

--
carlinhos
Em resposta à Carlos E. Ferreira

Re: EP1

por Almir Alves Pereira -
No enunciado esta escrito que todos os dados são parametrizados. Isso inclui os aeroportos de origem\destino? Posso inventar um arquivo de entrada com todos os parametros
Em resposta à Almir Alves Pereira

Re: EP1

por Carlos E. Ferreira -
Sim, pode.

Aliás, seria excelente se alguém inventasse um formato de arquivo padrão com todos os parâmetros para que vocês pudessem testar uns as entradas dos outros. Algum voluntário para fazer isso?

--
carlinhos
Em resposta à Carlos E. Ferreira

Re: EP1

por Felipe Viviani Martins -
Eu já tinha feito isso para o meu programa, eu utilizei bloco de notas para a entrada das inflormações.
Primeiro eu criei um arquivo com os dados das companhias aéreas, o formato deste arquivo esta abixo:

n
nome|parcela|
.
.
.
*

n - é o número de companhias aéreas que você irá utilizar;
nome - é a sigla da companhia;
parcela - é o valor em porcentagem da atuação daquela companhia no seu aeroporto.

Chamei o meu arquivo de CIA.txt, ele esta ai:

5
OC|4029304|.............. /* OC - Oceanair */
PA|6593407|.............. /* PA - Pantanal */
VR|18681318|............ /* VR - Varig */
TM|43589744|............ /* TM - Tam */
GL|27106227|............ /* GL - Gol */
*

Veja que a porcentagem eu coloquei em inteiro, assim eu puxo para o programa o valor da 'parcela' numa variável 'int n' e converto para uma 'float m; m = (float) n / 1000000;' assim eu obtenho um número de 6 casas decimais.

Depois eu criei 5 arquivos que trazem inflormações dos vôos de cada companhia. Denominei-os de OC.txt, PA.txt, VR.txt, TM.txt e GL.txt. O formato deles esta ai:

n
aeroporto|parcela|distância|
.
.
.
*

n - é o número total de ordens da companhia aérea;
aeroporto - é o aeroporto; ¬¬
parcela - é a porcentagem do dado vôo dentro da companhia aérea;
distância - é a distância do seu aeroporto até o outro.

Acho que estes dados são os necessários, o resto acho melhor gerar pelo próprio programa.
Eu criei uma struct COMPANHIA e uma struct ORDEM, assim eu declaro ponteiros para alocar os dados em vetores; por isso eu informo o número 'n' nos meus arquivos.
Peguei todos os meus dados no site da infraero.

Este modelo me parece prático e eficiente, se concordarem, esta ai para ser usado!

Abraços, Felipe.
Em resposta à Carlos E. Ferreira

Re: EP1

por André Casimiro -
Olá,


Gostaria de saber se há algum problema trabalhar com aeroportos de origem/destino todos dentro do Brasil. Digo isto porque alguém que toma um avião do rio para são paulo não gostaria de ser remanejado para a bahia... hauhauah...

Mas para o nosso ep isto não chega a ser um problema, chega?


Abraços.

(ps: é óbvio que só estou fazendo esta pergunta pq já fiz a lista só com aeroportos brasileiros).
Em resposta à André Casimiro

Re: EP1

por Carlos E. Ferreira -
Ué, e a Bahia não é no Brasil? ;)

Legal sua lista de aeroportos brasileiros. Vocês podem compartilhar esses dados para fazer os testes sem problemas.

abraços,

--
carlinhos
Em resposta à Carlos E. Ferreira

Re: EP1

por André Casimiro -
Olá!

Alguém sabe o significa este erro do gcc?
erro: dereferencing pointer to incomplete type


Ahh! gostaria de saber como importar um arquivo .c dentro de outro. Tentei do jeito óbvio #include <arquivo.c> e deu erro. Como fazer?

Para os parâmetros é melhor usar defines ou variáveis globais?


[]'s
Em resposta à André Casimiro

Re: EP1

por Thiago Henrique Coraini -
Olá André,

Sobre o erro, provavelmente tem a ver com a manipulação incorreta de ponteiros para struct's. Para ter certeza exatamente do que se trata, você poderia postar o trecho de código onde o erro foi apontado?

Sobre importar arquivos dentro de outros, faça um arquivo .h do arquivo que você quer importar somente com os protótipos das funções, e com o mesmo nome. Então, dê #include nesse arquivo .h. Por exemplo, caso você tenha um arquivo func.c, com funções auxiliares que deseja importar, crie um func.h apenas com as assinaturas das funções de func.c, dê um #include "func.h" no arquivo principal e você poderá usar ali as funções do outro arquivo. Note que você deve usar aspas para definir o nome do arquivo, e não < e >, já que esses indicam que o arquivo a ser incluído está num diretório padrão das bibliotecas. Além disso, nunca inclua diretamente o .c, ok?

Para os parâmetros, use define.
Em resposta à Thiago Henrique Coraini

Re: EP1

por André Casimiro -
o que eu queria era importar os parametros (#define's) de um outro arquivo... porque nunca incluir diretamente o .c?

Não consigo de jeito nenhum me livrar desse erro, segue o código "resumido" com as linhas que retornam erro em negrito:

link newNode(){
link n;
n = malloc(sizeof(node));
n->flight = malloc(sizeof(flig));
n->next = NULL;
return n;
}


Meu typedef:

typedef struct node *link;
typedef struct{
flig* flight;
link next;
} node;


Não faz o menor sentido não estar fucionando, comparei com eps anteriores... a estrutura é a mesma.
=S


[]'s
Em resposta à André Casimiro

Re: EP1

por Gregory De Bonis -
Os typedefs parecem meio errados, pois link é um pointer para struct node, e você não tem struct node, pois não deu nome pra sua struct. Tenta isso:

typedef struct node {
flig *flight;
struct node *next;
} node;
typedef node *link;

Em resposta à André Casimiro

Re: EP1

por Wellington Souza -
Uma boa prática é colocar os tipos, defines e protótipos de função em um arquivo .h e importá-lo onde for necessário com #include.

Você até consegue fazer o include de arquivos .c, mas assim, você estará fugindo das convenções.

Outro motivo para não fazer include de arquivo .c, é se vc tiver que fazer include de um arquivo .c em mais de um arquivo .c, se tiver alguma função implementada, vai ter problemas mais tarde no processo de linkedição (juntar os arquivos objeto no executável final), o linkeditor pode chiar que existe a função mais que uma vez. A não ser que o seu arquivo .c só tenha defines e typedefs, mas aí, esse arquivo fica muito parecido com um arquivo .h convencional.

Outro truque, ainda nos arquivos .h, é colocar a definição de tipos entre um bloco protegido por defines para evitar o include indireto (arquivos include com dependência indireta ou arquivos include que dependem um do outro) como no exemplo abaixo:

#ifndef _MEU_ARQUIVO_H
#define _MEU_ARQUIVO_H

#define QTDE_MAXIMA_ARQUIVOS 50
#define ERRO_LEITURA -1
#define ERRO_ESCRITA -2

.
.
.

typedef struct TABELA {
int campo1;
int campo2;
} TABELA_T;


void processaTabela(TABELA_T* tabela);
void funcaoQualquer(void);


#endif



[]s, Wellington

Em resposta à Carlos E. Ferreira

Re: EP1

por Francisco Zigmund Sokol -
Quanto de combustível cada avião que chega no aeroporto deve ter? Eu tinha definido: 15% do combustível necessário para toda a viagem + 5 unidades, mas desse jeito um certo voô pode não ter combustível suficiente para ser redirecionado para outro aeroporto, caso seja preciso...
Posso definir que cada avião chega ao aeroporto com 15% do combustível necessário para a viagem + X , onde X é a distância para o aeroporto mais próximo?
Em resposta à Francisco Zigmund Sokol

Re: EP1

por Felipe Viviani Martins -
Eu posso t dar uma ideia:

Estou simulando Congonhas, quando um avião vai ficar sem combustível, eu o redireciono para o aeroporto de Guarulhos (q eh bem proximo)... acho q nao precisa ser de outra cidade...
Em resposta à Felipe Viviani Martins

Re: EP1

por Nicoli G -
Entre Cumbica e Congonhas eu posso considerar quantas unidades de tempo?
Em resposta à Nicoli G

Re: EP1

por Gabriel Pugliese -
Galera, eu fiz um gerador de distâncias entre aeroportos em Perl. Pra vocês rodarem, façam o seguinte:

1- põe numa pasta no linux e dê o comando: chmod +x pontos.pl
2- na mesma pasta, crie um arquivo "aeroportos.txt" e nele coloque qquer número de aeroportos que você quiser no seguinte esquema:

CGH
GRU
REC

etc...
(não deixe nenhuma linha em branco no final)
3- Agora só digitar: ./pontos.pl > arquivo
4- Ele vai gerar pontos no R² e calcular a distância entre eles e imprimir desse jeito:
AJU 0 26 21
BCV 26 0 10
BEL 21 10 0
5- Agora é só pegar no C esse arquivo.

Dá pra fazer a mesma coisa em C e é bem fácil. Mas pra economizar tempo fiz em Perl msm. Portanto, não tentem procurar bugs, pq está cheio hehehehehe.

Abs.
Em resposta à Nicoli G

Re: EP1

por Nicoli G -
Alguém sabe qual a quantidade de combústivel com que os aviões podem chegar?
@ Um avião pode chegar com zero de combustível?
@ Qual valor de C é melhor para ser usado para testes?
@ E qual a distância mínima que deve ser considerada até o aeroporto mais próximo?

Precisava ter uma idéia disso pra poder continuar.
Em resposta à Carlos E. Ferreira

Re: EP1

por Francisco Zigmund Sokol -
Qual seria uma boa distribuição de probabilidades para o número de novos aviões por rodada? Uma distribuição com esperança = 3, é adequada para testes?
Com esperança maior que 3, é inevitável que o aeroporto tenha problemas, certo? Pelo menos no meu ep, se a esperança é 4, o número de aviões com prioridade de decolagem não atendidos (há mais de 10% do tempo de viagem esperando) vai crescendo a cada rodada...
Em resposta à Francisco Zigmund Sokol

Re: EP1

por Carlos E. Ferreira -
OLá,

Faça vários testes, e coloque seus resultados no relatório que deve ser entregue.

abraços,

--
carlinhos
Em resposta à Carlos E. Ferreira

Re: EP1

por Susanna Rezende -
Alguém sabe se é permitido redirecionar mais de 1 avião para um mesmo aeroporto?
Se é permitido, para que serve manter uma tabela de todos os aeroportos de distância até D? Não bastaria guardar o mais próximo que opera com cada cia?
Em resposta à Susanna Rezende

Re: EP1

por Nicoli G -
Porque nem todas as companias atendem todos os aeroportos, Guarulhos pode não aceitar a Gol e aí só redirecionando pra Campinas. sorriso
Em resposta à Susanna Rezende

Re: EP1

por Carlos E. Ferreira -
Em uma situação real você poderia querer evitar sobrecarregar um aeroporto vizinho com muitos voos de emergência. Por exemplo, se você tem 4 voos em situação de emergencia e mandá-los para um aeroporto vizinho provavelmente 1 deles vai cair... sorriso

Bem, para efeito deste EP a situação se resolve quando você identifica o problema e manda o avião para outro aeroporto.

abraços,

--
carlinhos
Em resposta à Carlos E. Ferreira

Re: EP1

por Alberto Bueno Junior -
Bem, eu criei uma funçao que, dado um natural C e uma companhia aeria, encontra um aeroporto com distancia <= C e que aceita essa companhia.

O problema nesse caso e' se dois avioes em emergencia tiverem a mesma companhia aeria. Ai' a minha funcao devolve o mesmo aeroporto. Mas se isso for razoavelmente dificil de acontecer, entao esse jeito resolve o problema?

Quanto ao combustivel dos avioes:

Suponha que no tempo t, um determinado aviao tem combustivel 1.
Assim, no tempo t + 1, o aviao vai ter combustivel 0.

Nesse caso, devo pousar o aviao no tempo t + 1 (no momento em que o combustivel dele vira 0) ou em t + 2 (momento imediatamente seguinte ao instante em que ele chegou a ter combustivel 0)?

Em resposta à Carlos E. Ferreira

Re: EP1 - Cria Biblioteca

por Felipe Viviani Martins -
Olá, estou com um problema:

Criei o meu EP1 em seis arquivos diferentes, sendo um deles .c e os outros cinco .h. Assim, eu programo varias funções nas minhas bibliotecas .h para utilizá-las no meu programa .c sem prejudicar o leiaute do programa com tantas linhas de código em um só arquivo. Porém quando eu faço o #include da minha biblioteca eu faço:

#include <C:\Users\....\MAC0323\EP1\biblioteca.h> /*(1)*/

O programa compila e roda normalmente no meu computador, porém quando o monitor compilar o meu programa .c em seu computador, certamente o diretório das bibliotecas não serão os mesmos que coloquei em /*(1)*/. Já tentei colocar apenas '#include <biblioteca.h>', mas o compilador não acha os arquivos .h mesmo estando no mesmo diretório do arquivo .c. Como eu faço para resolver este problema?

Felipe
Em resposta à Carlos E. Ferreira

Re: EP1

por Francisco Zigmund Sokol -
Quanto às especificações da saída:

• a quantidade média de combustível disponível dos aviões que pousaram;
É a média relativa aos aviões que pousaram nesta exata rodada ou a média "histórica" relativa a todos os aviões que já pousaram?

Não sei se consegui me expressar muito bem...
Em resposta à Francisco Zigmund Sokol

Re: EP1

por Carlos E. Ferreira -
A média histórica.

--
carlinhos
Em resposta à Carlos E. Ferreira

Re: EP1

por Susanna Rezende -
Pelo que entendi todos estes são históricos:
  • o tempo medio de espera para pouso;
  • o tempo medio de espera para decolagem;
  • a quantidade media de combustivel disponivel dos avioes que pousaram;

Mas fiquei na dúvida em relação a estes:
  • a quantidade media de combustivel dos avioes esperando para pousar;
  • a quantidade de avioes pousando/decolando em condicoes de emergencia.
Alguém saberia esclarecer?
Em resposta à Carlos E. Ferreira

Re: EP1

por Everton Topan da Silva -
Estou com um problema no meu EP. Eu opreciso verificar se um ponteiro s->nextpr ( proximo da fila de prioridade) é NULL ou não. Mas quando eu faço essa comparação e mando imprimir sai uns numeros estranhos, e jah quando eu não faço imprime certo mas posteriormente pode dar segfault. Alguem sabe oq pode ser isso??
Em resposta à Everton Topan da Silva

Re: EP1

por Thiago Henrique Coraini -
O que exatamente sai estranho na impressão?

Certifique-se que você não fez a comparação com = ao invés de ==. Uma comparação apenas não deveria alterar o estado do programa.
Em resposta à Thiago Henrique Coraini

Re: EP1

por Everton Topan da Silva -
tipo, se era pra imprimir 5 ele imprime 134520904
e é só tirar a comparação q volta ao normal...
a comparação ta certa na verdade é um "!="
Em resposta à Everton Topan da Silva

Re: EP1

por Thiago Henrique Coraini -
É Everton, isso é bem estranho.

Se possível, poste ou anexe o trecho do código em que o problema ocorre, para ver se alguma idéia surge sobre o que está acontecendo.
Em resposta à Thiago Henrique Coraini

Re: EP1

por Carlos E. Ferreira -
Melhor do que postar um trecho de código seria discutir isso com o Alvaro durante o plantão de monitoria. O ALvaro me disse que ninguém apareceu lá, nem mesmo hoje...

--
carlinhos
Em resposta à Carlos E. Ferreira

Re: EP1

por André Casimiro -
Ahh!!

A uma hora destas um erro desse é de matar. To recebendo um Seg Fault vindo da libc... com relação a função free()

Meu programa vai funcionando bem até que lá pela milésima unidade de tempo passada dá esse erro.
Como a coisa é aleatória as vezes aprece isso tbm:

*** glibc detected *** ./aero: corrupted double-linked list: 0x0804f730 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7e87c82]
/lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7e8b4f0]
./aero[0x804926f]
./aero[0x80498f4]
./aero[0x8049c9e]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7e32450]
./aero[0x80485b1]
======= Memory map: ========
08048000-0804b000 r-xp 00000000 08:05 974941 /home/andre/Faculdade/MAC-323/EP1/aero
0804b000-0804c000 rw-p 00002000 08:05 974941 /home/andre/Faculdade/MAC-323/EP1/aero
0804c000-0806d000 rw-p 0804c000 00:00 0 [heap]
b7d00000-b7d21000 rw-p b7d00000 00:00 0
b7d21000-b7e00000 ---p b7d21000 00:00 0
b7e1b000-b7e1c000 rw-p b7e1b000 00:00 0
b7e1c000-b7f65000 r-xp 00000000 08:05 3486 /lib/tls/i686/cmov/libc-2.7.so
b7f65000-b7f66000 r--p 00149000 08:05 3486 /lib/tls/i686/cmov/libc-2.7.so
b7f66000-b7f68000 rw-p 0014a000 08:05 3486 /lib/tls/i686/cmov/libc-2.7.so
b7f68000-b7f6b000 rw-p b7f68000 00:00 0
b7f6f000-b7f79000 r-xp 00000000 08:05 1466369 /lib/libgcc_s.so.1
b7f79000-b7f7a000 rw-p 0000a000 08:05 1466369 /lib/libgcc_s.so.1
b7f7a000-b7f7f000 rw-p b7f7a000 00:00 0
b7f7f000-b7f80000 r-xp b7f7f000 00:00 0 [vdso]
b7f80000-b7f9a000 r-xp 00000000 08:05 266 /lib/ld-2.7.so
b7f9a000-b7f9c000 rw-p 00019000 08:05 266 /lib/ld-2.7.so
bf9ef000-bfa04000 rw-p bffeb000 00:00 0 [stack]
./vai.sh: line 10: 13487 Cancelado ./aero



Help Me, plzzz!!
Em resposta à André Casimiro

Re: EP1

por Felipe Simionato Solferini -
/*Vc tah dando free errado!!*/ (isso vc jah sabia, eh q eu fikei com pregiça de ler)
Dah uma olhadinha no que vc tah passando pra ele (eu jah desisti de frees)
provavelmente vc tah passando x, no lugar do endereço ou alguma coisa assim, é soh brincar com akelas coisas magicas q dá certo (& e *)
Em resposta à Felipe Simionato Solferini

Re: EP1

por Santiago Manfredine Oliveira -

Desculpe, eu estou com o ep pronto desde ontem mas tinha achado estranho que na página do ep não tinhamos espaço para passarmos ele, só que até agora não aparece o espaço triste

Por favor, tem como alguém me responder para onde que devemos enviar o ep?

Em resposta à Santiago Manfredine Oliveira

Re: EP1

por Marcos de Azevedo Iriarte -
Em resposta à Marcos de Azevedo Iriarte

Re: EP1

por Felipe Simionato Solferini -
Aaaaaaaaaaaaaaaaaaaah!!!
Naum consegui enviar o ep!!! = /
Em resposta à Felipe Simionato Solferini

Re: EP1

por daniel reverbel -
acho que tambem nao. uploadei para um link perdido de EP2 que ta no dia do ep1 e depois vi que tava estranho.

talvez deu meia noite e fechou para receber EP's...