Ir para o conteúdo
shiftz

duvida da escola

Mensagens Recomendadas

shiftz    0
shiftz

a pergunta é esta:

A companhia de elevadores Suba-Suba optou por um novo o sistema de controlo de grupos de elevadores de forma a minimizar o consumo de energia. Para um grupo de dois elevadores, identificados como 1 e 2, o sistema enviará o elevador que se encontre mais próximo do andar de onde foi feita a chamada. Se os elevadores se encontram à mesma distância então será enviado o que encontra numa posição mais elevada. Se ambos os elevadores se encontram no mesmo andar, accionará sempre o elevador 1. Nem sempre os elevadores estarão parados e disponíveis a serem chamados. Poderão estar em serviço, em manutenção ou avariados. Neste caso, enviará o único elevador disponível, ou um erro se ambos estiverem indisponíveis.

Tarefa

Pretende-se programar o sistema que controla a chamada de um grupo dois elevadores segundo a especificação dada. O programa receberá como input o número do andar em que um elevador foi chamado, bem como a situação actual de cada um dos elevadores; indicará o número do elevador melhor posicionado para efectuar o percurso.

Input

Uma linha com trẽs inteiros separados por um espaço: o número do andar de onde foi feita a chamada, a situação do elevador 1, seguida da situação do elevador 2. O número do andar onde foi chamado o elevador é um inteiro entre -100 e 100. A posição dos elevadores 1 e 2 poderá ser o número de um andar, também um valor entre -100 e 100, ou o número 999 para indicar que se encontra indisponível.

Output

Uma linha com o valor 0, 1 ou 2. O valor 0 é reservado para o caso de ambos os elevadores estarem indisponíveis. Caso contrário será indicado o número do elevador melhor posicionado para responder à chamada (1 ou 2).

Exemplo 1

Input

2 4 2

Output

2

Exemplo 2

Input

1 999 -1

Output

2

Exemplo 3

Input

3 1 5

Output

2

Exemplo 4

Input

4 6 6

Output

1

Exemplo 5

Input

7 999 999

Output

0

#include <stdio.h>
int main(void){
 int a,e1,e2,mode1,mode2;
 if(0<e1-a){
   mode1=(-1)*(e1-a);}
 if(0>e1-a){
   mode1=e1-a;}
 if(0<e2-a){
   mode2=(-1)*(e2-a);}
 if(0>e2-a){
   mode1=e2-a;}
 scanf("%d %d %d", &a, &e1, &e2);
 if((a>=-100 && a<=100 && e1>=-100 && e1<=100 && e2>=-100 && e2<=100) || (a>=-100 && a<=100 && e2>=-100 && e2<=100 && e1==999) || (a>=-100 && a<=100 && e1>=-100 && e1<=100 && e2==999) || (a>=-100 && a<=100 && e1==999 && e2==999)){
   if(mode1<mode2){
     if(e1==999){
       printf("2a\n");
     }
     else{
       printf("1\n");
     }
   }
   if(mode1>mode2){
     if(e2==999){
       printf("1\n");
     }
     else{
       printf("2b\n");
     }
   }
     if(mode1==mode2 && e1!=999 && e2!=999){
     if(e2-a>0){
       printf("2\n");
     }
     if(e1-a>0){
       printf("1\n");
     }
     if(a==e2 && a==e1){
       printf("1\n");
         }
   }
   if(e2==e1){
     printf("1\n");
   }
   if(e1==999 && e2==999){
     printf("0\n");
   }
 }
 return 0;
}

basicamente eu fiz o codigo que aqui está mas o output dá errado, ou seja quando introduzo p.e.:

2 -3 -3

2b

1

o output é assim, nao percebo porque se mode1=mode2 e nao mode1>mode2

alguma ajuda?

Editado por thoga31
Formatação do tópico + link inapropriado removido + colocação do código

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pwseo    223
pwseo

O teu código tem o seguinte output no meu pc:

~ $ gcc -o shiftz -Wall -Wextra -pedantic -std=c89 shiftz.c
~ $ ./shiftz 
2 -3 -3
1
1

De qualquer modo, não achas que deverias rever aquela tua linha #13? Está absurdamente grande... pensa bem nas condições que tens que considerar.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
thoga31

Cuidado com a formatação do tópico. Removi igualmente o link que fazia uma paragem pelo Facebook totalmente desnecessária. Por favor coloca o código aqui usando as tags CODE.

Qual é a tua dúvida em concreto?

Editado por thoga31

Knowledge is free!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

consegues comentar o código de maneira a explicar a razão de cada instrução ?

se o output é 0, 1 ou 2, porque raio anda prai un "2a" ou "2b" ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
thoga31

ja esta tirada a duvida, muito obrigado a todos!

Podias dizer qual era o problema do código e qual a solução para referência futura.


Knowledge is free!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

para referencia, uma solução mais aprazível aos olhos:

#include <stdio.h>

int main(int argc, char** argv) {
 int a, e1, e2;

 if (argc != 4 ||
     sscanf(argv[1], "%d", &a) != 1 ||
     sscanf(argv[2], "%d", &e1) != 1 ||
     sscanf(argv[3], "%d", &e2) != 1) {
   printf("command : elevadores <andar_destino> <andar_elevador1> <andar_elevador2>\n");
   return -1;
 }

 if ((abs(e1 - a) <= abs(e2 - a)) &&
     (e1 != 999)) {
   printf("1\n");
 } else if (e2 != 999) {
   printf("2\n");
 } else {
   printf("0\n");
 }

 return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.