·
Engenharia Elétrica ·
Linguagens de Programação
Send your question to AI and receive an answer instantly
Recommended for you
5
Trabalho - Truco Mineiro C 2022-2
Linguagens de Programação
UFMG
2
Exercício 8 - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
3
Trabalho Prático 3 - Menságens Assíncronas
Linguagens de Programação
UFMG
3
Trabalho Prático 2 - Menságens Assíncronas
Linguagens de Programação
UFMG
18
Exercício 1 - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
4
Trabalho - Truco Mineiro C 2022 2
Linguagens de Programação
UFMG
5
Trabalho - Truco Mineiro C 2022 2
Linguagens de Programação
UFMG
5
Trabalho - Xadrez C 2022 2
Linguagens de Programação
UFMG
15
5 Vpl s - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
2
Metodos Numericos Computacionais - Programas para Engenharia IME
Linguagens de Programação
UFMG
Preview text
Neste exercício você deverá implementar dois TADs para uma equipe de robótica. Utilizando Structs, você deve criar os seguintes TADs: Ponto2D e Drone. Cada TAD deve seguir as especificações abaixo: ● Ponto2D: 1. Ponto2D(double, double): método construtor que recebe dois parâmetros do tipo double que representam as coordenadas (x,y) e devem ser armazenados internamente. 2. double calcular_distancia(Ponto2D* ponto): método que calcula a distância euclidiana para outro ponto no plano. 3. std::string get_dados(): método que retorna uma string com os dados no seguinte formato: "[x, y]". Os valores de x e y devem possuir no máximo 2 casas decimais de precisão (veja o primeiro link nas referências abaixo e o arquivo main.cpp). ● Drone: 1. Atributos: Além de outros atributos que você julgar necessário, o TAD também deve ter um atributo '_energia', do tipo double, que é sempre inicializado com valor 100. 2. Drone(int, Ponto2D , double): método construtor que recebe três parâmetros: (i) um inteiro é o id único do drone, (ii) uma variável do tipo Ponto2D (atenção, não deve ser usado ponteiro!), e (iii) um double, que representa o raio de comunicação do drone. 3. void mover(double v, double th, double t): método que atualiza a posição do drone nos eixos x e y de acordo com os parâmetros passados: v (magnitude do vetor velocidade), th (orientação, em radianos, do vetor velocidade), t (o tempo que a velocidade foi aplicada). Após o deslocamento, a distância percorrida deve ser deduzida do campo '_energia'. Caso o valor fique menor ou igual a 50 deve-se imprimir a seguinte mensagem: "Alerta, energia baixa!". Dica: faça uma decomposição vetorial simples e use a equação de cinemática. 4. double calcular_distancia(Drone* drone): método que calcula e retorna a distância euclidiana para outro drone passado como parâmetro. 5. void broadcast_mensagem(Drone** drones, int n): método que recebe um array de ponteiros para drones e um parâmetro que informa a quantidade de elementos nesse array. Envia uma mensagem apenas para os drones que estão à uma distância menor ou igual o raio de comunicação. A mensagem é uma string no seguinte formato: "Drone: id, Posição: [x, y]", onde id é o id do drone enviando a mensagem e x, y a sua posição atual. 6. void salvar_mensagem(string mensagem): método que salva internamente a mensagem recebida por um drone. A mensagem deve ser salva em um 'buffer' interno que possui apenas 5 posições. Além disso, a inserção deve ser feita de maneira circular, ou seja, ao chegar na última posição a próxima mensagem deve ser salva na primeira posição novamente e assim sucessivamente (você deve pensar a forma de fazer isso). Dica: esse método deve ser chamado dentro de 'broadcast_mensagem'. 7. imprimir_mensagens_recebidas(): método que imprime todas as mensagens recebidas por um drone, ou seja, que estão no 'buffer'. A impressão segue o seguinte formato: Mensagens de {id_proprio}: Drone: {id_mensagem}, Posição: [x, y] Drone: {id_mensagem}, Posição: [x, y] 8. void imprimir_status(): imprime a situação atual do drone no seguinte formato: "id x y energia". Atenção, nesse caso utilize tab (\t) para separar os elementos. Como entrada serão fornecidos a posição (x, y) e o raio de comunicação de cada drone. Em seguida, o sistema é executado considerando os comandos informados e algumas informações devem ser impressas na tela. Nesse exercício você não precisa implementar a função main! O objetivo é simular o caso em que você está implementando um TAD que será utilizado por outra pessoa (que conhece apenas o contrato). Dessa forma, a leitura dos dados de entrada e jogadas já estão implementadas, e você deve apenas implementar os TADs (Ponto2D e Drone). Você é livre para implementar nos TADS quaisquer outros métodos não mencionados que julgar necessário. Para ilustrar, abaixo são apresentados exemplos de entrada/saída. Nesse primeiro exemplo é informado apenas um drone. O comando 's' é usado para imprimir o status do drone e o comando 'm' move o drone. input= 1 0.0 0.0 1.0 s m 0 1.0 0.0 2.0 s output= 0 0.00 0.00 100.00 0 2.00 0.00 98.00 No segundo exemplo são informados dois drones. O comando 'b' é usado para informar que o drone 0 (primeiro informado) vai fazer um broadcast e o comando 'p' informa que deve-se imprimir as mensagens recebidas pelo drone 1 (segundo informado). Em seguida, o drone 0 se movimenta e o drone 1 fica fora de alcance, por isso ao se fazer novo broadcast o buffer não deveria ser modificado. input= 2 0.0 0.0 3.0 2.0 0.0 3.0 s b 0 p 1 m 0 1.0 3.1415 2.0 s b 0 p 1 output= 0 0.00 0.00 100.00 1 2.00 0.00 100.00 Mensagens de 1: Drone: 0, Posição: [0.00, 0.00] 0 -2.00 0.00 98.00 1 2.00 0.00 100.00 Mensagens de 1: Drone: 0, Posição: [0.00, 0.00] Atenção: Lembre-se de fazer a correta modularização utilizando os arquivos .hpp e .cpp. Dica1: Deve-se conseguir criar variáveis do tipo Ponto2D sem passar nenhum valor para o construtor. Para isso, você pode criar um construtor vazio (um TAD pode ter vários construtores) ou utilizar valores padrão no método construtor com parâmetros (veja o último link nas referências abaixo). Dica2: Você pode copiar o arquivo main.cpp aqui para testar localmente e ver como todo o setup inicial é feito (entrada/saída, comandos, etc).
Send your question to AI and receive an answer instantly
Recommended for you
5
Trabalho - Truco Mineiro C 2022-2
Linguagens de Programação
UFMG
2
Exercício 8 - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
3
Trabalho Prático 3 - Menságens Assíncronas
Linguagens de Programação
UFMG
3
Trabalho Prático 2 - Menságens Assíncronas
Linguagens de Programação
UFMG
18
Exercício 1 - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
4
Trabalho - Truco Mineiro C 2022 2
Linguagens de Programação
UFMG
5
Trabalho - Truco Mineiro C 2022 2
Linguagens de Programação
UFMG
5
Trabalho - Xadrez C 2022 2
Linguagens de Programação
UFMG
15
5 Vpl s - Linguagens de Programação 2022 2
Linguagens de Programação
UFMG
2
Metodos Numericos Computacionais - Programas para Engenharia IME
Linguagens de Programação
UFMG
Preview text
Neste exercício você deverá implementar dois TADs para uma equipe de robótica. Utilizando Structs, você deve criar os seguintes TADs: Ponto2D e Drone. Cada TAD deve seguir as especificações abaixo: ● Ponto2D: 1. Ponto2D(double, double): método construtor que recebe dois parâmetros do tipo double que representam as coordenadas (x,y) e devem ser armazenados internamente. 2. double calcular_distancia(Ponto2D* ponto): método que calcula a distância euclidiana para outro ponto no plano. 3. std::string get_dados(): método que retorna uma string com os dados no seguinte formato: "[x, y]". Os valores de x e y devem possuir no máximo 2 casas decimais de precisão (veja o primeiro link nas referências abaixo e o arquivo main.cpp). ● Drone: 1. Atributos: Além de outros atributos que você julgar necessário, o TAD também deve ter um atributo '_energia', do tipo double, que é sempre inicializado com valor 100. 2. Drone(int, Ponto2D , double): método construtor que recebe três parâmetros: (i) um inteiro é o id único do drone, (ii) uma variável do tipo Ponto2D (atenção, não deve ser usado ponteiro!), e (iii) um double, que representa o raio de comunicação do drone. 3. void mover(double v, double th, double t): método que atualiza a posição do drone nos eixos x e y de acordo com os parâmetros passados: v (magnitude do vetor velocidade), th (orientação, em radianos, do vetor velocidade), t (o tempo que a velocidade foi aplicada). Após o deslocamento, a distância percorrida deve ser deduzida do campo '_energia'. Caso o valor fique menor ou igual a 50 deve-se imprimir a seguinte mensagem: "Alerta, energia baixa!". Dica: faça uma decomposição vetorial simples e use a equação de cinemática. 4. double calcular_distancia(Drone* drone): método que calcula e retorna a distância euclidiana para outro drone passado como parâmetro. 5. void broadcast_mensagem(Drone** drones, int n): método que recebe um array de ponteiros para drones e um parâmetro que informa a quantidade de elementos nesse array. Envia uma mensagem apenas para os drones que estão à uma distância menor ou igual o raio de comunicação. A mensagem é uma string no seguinte formato: "Drone: id, Posição: [x, y]", onde id é o id do drone enviando a mensagem e x, y a sua posição atual. 6. void salvar_mensagem(string mensagem): método que salva internamente a mensagem recebida por um drone. A mensagem deve ser salva em um 'buffer' interno que possui apenas 5 posições. Além disso, a inserção deve ser feita de maneira circular, ou seja, ao chegar na última posição a próxima mensagem deve ser salva na primeira posição novamente e assim sucessivamente (você deve pensar a forma de fazer isso). Dica: esse método deve ser chamado dentro de 'broadcast_mensagem'. 7. imprimir_mensagens_recebidas(): método que imprime todas as mensagens recebidas por um drone, ou seja, que estão no 'buffer'. A impressão segue o seguinte formato: Mensagens de {id_proprio}: Drone: {id_mensagem}, Posição: [x, y] Drone: {id_mensagem}, Posição: [x, y] 8. void imprimir_status(): imprime a situação atual do drone no seguinte formato: "id x y energia". Atenção, nesse caso utilize tab (\t) para separar os elementos. Como entrada serão fornecidos a posição (x, y) e o raio de comunicação de cada drone. Em seguida, o sistema é executado considerando os comandos informados e algumas informações devem ser impressas na tela. Nesse exercício você não precisa implementar a função main! O objetivo é simular o caso em que você está implementando um TAD que será utilizado por outra pessoa (que conhece apenas o contrato). Dessa forma, a leitura dos dados de entrada e jogadas já estão implementadas, e você deve apenas implementar os TADs (Ponto2D e Drone). Você é livre para implementar nos TADS quaisquer outros métodos não mencionados que julgar necessário. Para ilustrar, abaixo são apresentados exemplos de entrada/saída. Nesse primeiro exemplo é informado apenas um drone. O comando 's' é usado para imprimir o status do drone e o comando 'm' move o drone. input= 1 0.0 0.0 1.0 s m 0 1.0 0.0 2.0 s output= 0 0.00 0.00 100.00 0 2.00 0.00 98.00 No segundo exemplo são informados dois drones. O comando 'b' é usado para informar que o drone 0 (primeiro informado) vai fazer um broadcast e o comando 'p' informa que deve-se imprimir as mensagens recebidas pelo drone 1 (segundo informado). Em seguida, o drone 0 se movimenta e o drone 1 fica fora de alcance, por isso ao se fazer novo broadcast o buffer não deveria ser modificado. input= 2 0.0 0.0 3.0 2.0 0.0 3.0 s b 0 p 1 m 0 1.0 3.1415 2.0 s b 0 p 1 output= 0 0.00 0.00 100.00 1 2.00 0.00 100.00 Mensagens de 1: Drone: 0, Posição: [0.00, 0.00] 0 -2.00 0.00 98.00 1 2.00 0.00 100.00 Mensagens de 1: Drone: 0, Posição: [0.00, 0.00] Atenção: Lembre-se de fazer a correta modularização utilizando os arquivos .hpp e .cpp. Dica1: Deve-se conseguir criar variáveis do tipo Ponto2D sem passar nenhum valor para o construtor. Para isso, você pode criar um construtor vazio (um TAD pode ter vários construtores) ou utilizar valores padrão no método construtor com parâmetros (veja o último link nas referências abaixo). Dica2: Você pode copiar o arquivo main.cpp aqui para testar localmente e ver como todo o setup inicial é feito (entrada/saída, comandos, etc).