Ir ao conteúdo

Exercício de lógica para controle de elevadores


iisalynch

Posts recomendados

Postado

Bom dia, me passaram um exercicio de logico para o final de semana. Pensei, pensei e nada...

O exercicio é o seguinte:

Um predio de 15 andares tem dois elevadores, o sindico do predio quer fazer com que sempre um dos elevadores esteja no terreo.

Um dia um elevador estava no 10 andar e outro no 9 andar. Eu preciso fazer um codigo para que o elevador que esteja mais proximo volte para o terreo.

A pessoa que me falou, disse que tem dois metodos, um simples e um mais avançado..

Se vocês puderem me ajudar, agradeceria muito.

Obrigada desde já!

  • Membro VIP
Postado
Bom dia, me passaram um exercicio de logico para o final de semana. Pensei, pensei e nada...

O exercicio é o seguinte:

Um predio de 15 andares tem dois elevadores, o sindico do predio quer fazer com que sempre um dos elevadores esteja no terreo.

Um dia um elevador estava no 10 andar e outro no 9 andar. Eu preciso fazer um codigo para que o elevador que esteja mais proximo volte para o terreo.

A pessoa que me falou, disse que tem dois metodos, um simples e um mais avançado..

Se vocês puderem me ajudar, agradeceria muito.

Obrigada desde já!

Olá iisalynch,

Desenvolva algo ai... vá quebrando a cabeça. O passo inicial é o seu. Imagine algumas possibilidades, escreva no papel e vá testando o algoritmo mentalmente... uma hora sai! rs

Com uma ou algumas ideias formadas, e caso ainda tenha dúvida, entre aqui e peça ajuda. ^_^

PS: A pergunta central é:

Em que condições o elevador que está mais próximo deve descer?

Entendendo isso, ficar mais fácil implementar o "monitoramento".

No aguardo.

Abraços

Postado

Simon, fiz o seguinte código:

public class Predio {

int painel1;
int painel2;

void chamarElevador() {

if (painel1 < painel2) {
descerElevador1();
}

if (painel1 > painel2) {
descerElevador2();
}

if (painel1 == painel2) {

if (painel1 = painel2) {
Randon r = new Randon();

if (r.nextInt(15) == 0) {
descerElevador1();
} else {
descerElevador2();
}
}
}
}

void descerElevador2() {
painel2 = 0;

}

void descerElevador1() {
painel1 = 0;

}
}

Está correto? Algum erro bobo de principiante?

Ps: o exercicio mudou um pouquinho. por enquanto ele só precisa descer quando for chamado.

  • Membro VIP
Postado
Simon, fiz o seguinte código:

Código:



int painel1;
int painel2;

void chamarElevador() {

if (painel1 < painel2) {
descerElevador1();
}

if (painel1 > painel2) {
descerElevador2();
}

if (painel1 == painel2) {

if (painel1 = painel2) {
Randon r = new Randon();

if (r.nextInt(15) == 0) {
descerElevador1();
} else {
descerElevador2();
}
}
}
}

void descerElevador2() {
painel2 = 0;

}

void descerElevador1() {
painel1 = 0;

}
}
public class Predio {

Está correto? Algum erro bobo de principiante?

Ps: o exercicio mudou um pouquinho. por enquanto ele só precisa descer quando for chamado.

Olá iisalynch,

Você está no caminho certo... pelo que eu entendi do seu código, só será preciso alguns ajustes.

Obs.: Antes um comentário: Não é uma "reclamação", mas sim uma "sugestão".

COMENTÁRIO CURTO

Seu código não está compilando aqui. Você está com dúvida em quê?

COMENTÁRIO EXTENSO

O seu código do jeito que está, não está compilável, ou seja, existe uns errinhos de sintaxe (independente se a lógica está certa ou não). E aqui estamos tratando dos dois contextos: Sintaxe (erro ao compilar por está usando um comando inválido ou estruturado de forma incorreta) e Lógica (organização do código para fazer o que se deve fazer de uma forma correta).

Então, a ideia que quero passar é que uma coisa está intimamente relacionado com a outra, mas devem ser analisadas de formas separas. Ex.:

Ao postar esse código, presumem-se que você já tem uma lógica meio que formada, mas como o código não está compilando, eu, por exemplo, não sei identificar imediatamente se está com dúvida na Sintaxe para implementar a sua lógica, ou se, está com dúvida na lógica em si, ou seja, analisando o código, e vendo que não está compilando, vejo que no mínimo está com dúvida na sintaxe (pois não compila), logo você teria que buscar uma solução em como fazer compilar... sacou? Tipo: "Tentei fazer o código da forma tal e tal, mas está dando erro na linha X e linha Y. Sei que tal comando serve para isso e aquilo, mas ele não está rodando da forma que imaginei."

Essa minha observação se resume ao seguinte:

- Ou você não está conseguindo fazer compilar o que você quer (erros na sintaxe, mas "sabendo" uma lógica);

- Ou você não está conseguindo criar uma lógica (não encontrou uma forma de organizar o código, mas sabe a sintaxe)

Você não pode ter as duas coisa ao mesmo tempo...

***

Voltando... Pelo que eu entendi do seu código, a sua lógica está no caminho certo. Para compilar falta corrigir a sintaxe do Random e remover um if que está duplicado.

[color=#0000c3]/*[/color]
[color=#0000c3] * OBSERVAÇÕES:[/color]
[color=#0000c3] *[/color]
[color=#0000c3] * Da mesma forma que fizemos no exercício anterior, no memnto não é preciso[/color]
[color=#0000c3] * declarar as classes como públicas. Caso queira se inteirar no assunto, dê[/color]
[color=#0000c3] * uma pesquisada sobre: "Qualificadores de Acesso em Java".[/color]
[color=#0000c3] *[/color]
[color=#0000c3] */[/color]


[color=#0000c3]//Essa classe será usada para interagir com a outra classe.[/color]
[color=#00007f]class[/color] Principal [color=#000000]{[/color]
[color=#00007f]public static[/color] [color=#540054][b]void[/b][/color] [color=#002a54]main[/color] [color=#000000]([/color]String[color=#000000][][/color] args[color=#000000]) {[/color]
Predio predio [color=#000000]=[/color] [color=#00007f]new[/color] [color=#002a54]Predio[/color][color=#000000]();[/color]

java[color=#000000].[/color]util[color=#000000].[/color]Random r [color=#000000]=[/color] [color=#00007f]new[/color] java[color=#000000].[/color]util[color=#000000].[/color][color=#002a54]Random[/color][color=#000000]();[/color]

predio[color=#000000].[/color]painel1 [color=#000000]=[/color] r[color=#000000].[/color][color=#002a54]nextInt[/color][color=#000000]([/color][color=#b85d00]15[/color][color=#000000]+[/color][color=#b85d00]1[/color][color=#000000]);[/color] [color=#0000c3]//sorteia um andar para o elevador 1 (do térreo ao 15°)[/color]
predio[color=#000000].[/color]painel2 [color=#000000]=[/color] r[color=#000000].[/color][color=#002a54]nextInt[/color][color=#000000]([/color][color=#b85d00]15[/color][color=#000000]+[/color][color=#b85d00]1[/color][color=#000000]);[/color] [color=#0000c3]//sorteia um andar para o elevador 2 (do térreo ao 15°)[/color]

[color=#0000c3]//CASO QUEIRA TESTAR COM ANDARES IGUAIS (tira o comentário e bota o andar que quer)[/color]
[color=#0000c3]//predio.painel1 = 7;[/color]
[color=#0000c3]//predio.painel2 = 7;[/color]

System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]([/color][color=#d10000]"Elavador 1 está no "[/color][color=#000000]+[/color]predio[color=#000000].[/color]painel1[color=#000000]+[/color][color=#d10000]" °andar"[/color][color=#000000]);[/color]
System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]([/color][color=#d10000]"Elavador 2 está no "[/color][color=#000000]+[/color]predio[color=#000000].[/color]painel2[color=#000000]+[/color][color=#d10000]" °andar"[/color][color=#000000]);[/color]
System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]();[/color]


predio[color=#000000].[/color][color=#002a54]chamarElevador[/color][color=#000000]();[/color]

System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]([/color][color=#d10000]"Elavador 1 está no "[/color][color=#000000]+[/color]predio[color=#000000].[/color]painel1[color=#000000]+[/color][color=#d10000]" °andar"[/color][color=#000000]);[/color]
System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]([/color][color=#d10000]"Elavador 2 está no "[/color][color=#000000]+[/color]predio[color=#000000].[/color]painel2[color=#000000]+[/color][color=#d10000]" °andar"[/color][color=#000000]);[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]

[color=#00007f]class[/color] Predio [color=#000000]{[/color]
[color=#540054][b]int[/b][/color] painel1[color=#000000];[/color]
[color=#540054][b]int[/b][/color] painel2[color=#000000];[/color]

[color=#00007f]public[/color] [color=#540054][b]void[/b][/color] [color=#002a54]chamarElevador[/color][color=#000000]() {[/color]
[color=#00007f]if[/color] [color=#000000]([/color]painel1 [color=#000000]<[/color] painel2[color=#000000]) {[/color]
[color=#002a54]descerElevador1[/color][color=#000000]();[/color]
[color=#000000]}[/color]
[color=#00007f]if[/color] [color=#000000]([/color]painel1 [color=#000000]>[/color] painel2[color=#000000]) {[/color]
[color=#002a54]descerElevador2[/color][color=#000000]();[/color]
[color=#000000]}[/color]
[color=#00007f]if[/color] [color=#000000]([/color]painel1 [color=#000000]==[/color] painel2[color=#000000]) {[/color]
[color=#0000c3]//Randon r = new Randon(); //o nome da classe é Random (com "m") e precisa importar do pacote "java.util"[/color]
java[color=#000000].[/color]util[color=#000000].[/color]Random r [color=#000000]=[/color] [color=#00007f]new[/color] java[color=#000000].[/color]util[color=#000000].[/color][color=#002a54]Random[/color][color=#000000]();[/color]
[color=#00007f]if[/color] [color=#000000]([/color]r[color=#000000].[/color][color=#002a54]nextInt[/color][color=#000000]([/color][color=#b85d00]2[/color][color=#000000]) ==[/color] [color=#b85d00]0[/color][color=#000000]) {[/color] [color=#0000c3]//soteia um número entre duas possibilidades (0 a 2, não incluíndo o 2)[/color]
[color=#002a54]descerElevador1[/color][color=#000000]();[/color]
[color=#000000]}[/color] [color=#00007f]else[/color] [color=#000000]{[/color]
[color=#002a54]descerElevador2[/color][color=#000000]();[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]

[color=#540054][b]void[/b][/color] [color=#002a54]descerElevador2[/color][color=#000000]() {[/color]
painel2 [color=#000000]=[/color] [color=#b85d00]0[/color][color=#000000];[/color] [color=#0000c3]//andar para onde ele deve ir[/color]
[color=#000000]}[/color]

[color=#540054][b]void[/b][/color] [color=#002a54]descerElevador1[/color][color=#000000]() {[/color]
painel1 [color=#000000]=[/color] [color=#b85d00]0[/color][color=#000000];[/color] [color=#0000c3]//andar para onde ele deve ir[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]

Uma outra forma interessante, seria cria uma classe para os elevadores. Daí, o prédio criaria objetos deles.

Abaixo fiz um exemplo, utilizando esse conceito:

[color=#0000c3]/*[/color]
[color=#0000c3] * OBSERVAÇÕES:[/color]
[color=#0000c3] *[/color]
[color=#0000c3] * Da mesma forma que fizemos no exercício anterior, no memnto não é preciso[/color]
[color=#0000c3] * declarar as classes como públicas. Caso queira se inteirar no assunto, dê[/color]
[color=#0000c3] * uma pesquisada sobre: "Qualificadores de Acesso em Java".[/color]
[color=#0000c3] *[/color]
[color=#0000c3] */[/color]


[color=#0000c3]//Essa classe será usada para interagir com a outra classe.[/color]
[color=#00007f]class[/color] Principal [color=#000000]{[/color]
[color=#00007f]public static[/color] [color=#540054][b]void[/b][/color] [color=#002a54]main[/color] [color=#000000]([/color]String[color=#000000][][/color] args[color=#000000]) {[/color]
Predio predio [color=#000000]=[/color] [color=#00007f]new[/color] [color=#002a54]Predio[/color][color=#000000]();[/color]

java[color=#000000].[/color]util[color=#000000].[/color]Random r [color=#000000]=[/color] [color=#00007f]new[/color] java[color=#000000].[/color]util[color=#000000].[/color][color=#002a54]Random[/color][color=#000000]();[/color]

[color=#0000c3]//inicializa as posições dos elevadores[/color]
predio[color=#000000].[/color]elavadorSocial[color=#000000].[/color]andarAtual [color=#000000]=[/color] r[color=#000000].[/color][color=#002a54]nextInt[/color][color=#000000]([/color][color=#b85d00]15[/color][color=#000000]+[/color][color=#b85d00]1[/color][color=#000000]);[/color] [color=#0000c3]//sorteia um andar para o elevador 1 (do térreo ao 15°)[/color]
predio[color=#000000].[/color]elevadorDeServico[color=#000000].[/color]andarAtual [color=#000000]=[/color] r[color=#000000].[/color][color=#002a54]nextInt[/color][color=#000000]([/color][color=#b85d00]15[/color][color=#000000]+[/color][color=#b85d00]1[/color][color=#000000]);[/color] [color=#0000c3]//sorteia um andar para o elevador 2 (do térreo ao 15°)[/color]

[color=#0000c3]//mostra onde cada um estão os elevadores[/color]
System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]([/color][color=#d10000]"Elavador 1 está no "[/color][color=#000000]+[/color]predio[color=#000000].[/color]elavadorSocial[color=#000000].[/color]andarAtual[color=#000000]+[/color][color=#d10000]"° andar"[/color][color=#000000]);[/color]
System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]([/color][color=#d10000]"Elavador 2 está no "[/color][color=#000000]+[/color]predio[color=#000000].[/color]elevadorDeServico[color=#000000].[/color]andarAtual[color=#000000]+[/color][color=#d10000]"° andar"[/color][color=#000000]);[/color]
System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]();[/color] [color=#0000c3]//pula uma linha[/color]

[color=#0000c3]//chama os elevadores (chama os elevadores, no caso, para vim o mais próximo)[/color]
predio[color=#000000].[/color][color=#002a54]chamarElevadores[/color][color=#000000]();[/color]

[color=#0000c3]//mostra onde cada um estão os elevadores[/color]
System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]([/color][color=#d10000]"Elavador 1 está no "[/color][color=#000000]+[/color]predio[color=#000000].[/color]elavadorSocial[color=#000000].[/color]andarAtual[color=#000000]+[/color][color=#d10000]"° andar"[/color][color=#000000]);[/color]
System[color=#000000].[/color]out[color=#000000].[/color][color=#002a54]println[/color][color=#000000]([/color][color=#d10000]"Elavador 2 está no "[/color][color=#000000]+[/color]predio[color=#000000].[/color]elevadorDeServico[color=#000000].[/color]andarAtual[color=#000000]+[/color][color=#d10000]"° andar"[/color][color=#000000]);[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]

[color=#00007f]class[/color] Elevador [color=#000000]{[/color]
[color=#540054][b]int[/b][/color] andarAtual[color=#000000];[/color]
[color=#540054][b]void[/b][/color] [color=#002a54]descerElevador[/color][color=#000000]() {[/color]
andarAtual [color=#000000]=[/color] [color=#b85d00]0[/color][color=#000000];[/color] [color=#0000c3]//andar para onde ele deve ir[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]

[color=#00007f]class[/color] Predio [color=#000000]{[/color]
[color=#0000c3]//cria dois elevadores no prédio[/color]
Elevador elavadorSocial [color=#000000]=[/color] [color=#00007f]new[/color] [color=#002a54]Elevador[/color][color=#000000]();[/color]
Elevador elevadorDeServico [color=#000000]=[/color] [color=#00007f]new[/color] [color=#002a54]Elevador[/color][color=#000000]();[/color]

[color=#0000c3]//método que chama o elevador mais próximo[/color]
[color=#540054][b]void[/b][/color] [color=#002a54]chamarElevadores[/color][color=#000000]() {[/color]
[color=#00007f]if[/color] [color=#000000]([/color]elavadorSocial[color=#000000].[/color]andarAtual [color=#000000]<[/color] elevadorDeServico[color=#000000].[/color]andarAtual[color=#000000]) {[/color] [color=#0000c3]//social mais próximo[/color]
[color=#00007f]this[/color][color=#000000].[/color]elavadorSocial[color=#000000].[/color][color=#002a54]descerElevador[/color][color=#000000]();[/color]
[color=#000000]}[/color]
[color=#00007f]if[/color] [color=#000000]([/color]elavadorSocial[color=#000000].[/color]andarAtual [color=#000000]>[/color] elevadorDeServico[color=#000000].[/color]andarAtual[color=#000000]) {[/color] [color=#0000c3]//de serviço mais próximo[/color]
[color=#00007f]this[/color][color=#000000].[/color]elevadorDeServico[color=#000000].[/color][color=#002a54]descerElevador[/color][color=#000000]();[/color]
[color=#000000]}[/color]
[color=#00007f]if[/color] [color=#000000]([/color]elavadorSocial[color=#000000].[/color]andarAtual [color=#000000]==[/color] elevadorDeServico[color=#000000].[/color]andarAtual[color=#000000]) {[/color][color=#0000c3]//ambos no mesmo andar[/color]
[color=#00007f]if[/color] [color=#000000]([/color][color=#00007f]new[/color] java[color=#000000].[/color]util[color=#000000].[/color][color=#002a54]Random[/color][color=#000000]().[/color][color=#002a54]nextBoolean[/color][color=#000000]()) {[/color] [color=#0000c3]//soteia entre duas possibilidades (true ou false).[/color]
[color=#00007f]this[/color][color=#000000].[/color]elavadorSocial[color=#000000].[/color][color=#002a54]descerElevador[/color][color=#000000]();[/color]
[color=#000000]}[/color] [color=#00007f]else[/color] [color=#000000]{[/color]
[color=#00007f]this[/color][color=#000000].[/color]elevadorDeServico[color=#000000].[/color][color=#002a54]descerElevador[/color][color=#000000]();[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]
[color=#000000]}[/color]

Por ai vai...

Abraços.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...