Você deve construir um algoritmo que terá uma variável COR que poderá receber valores inteiros com a seguinte codificação:
1- Vermelho
2 - Verde
3 - Amarelo
O algoritmo deverá inicializar essa variável com 1, indicando a cor vermelha. Na sequência, o algoritmo deve iniciar uma repetição que deve:
- Mostrar o nome da cor correspondente à variável COR (utilizar um procedimento que cumpra esse objetivo);
- Na sequência, chamar outra função que mude o valor da variável COR, conforme a sequência de funcionamento do semáforo.
Assim como um semáforo, o algoritmo não precisa ter condição de parada, ele pode ser repetido infinitamente!
Respostas
Resposta:
No algoritmo, você poderá perceber que:
- o procedimento mostra, que recebe por passagem por valor, o conteúdo da variável cor, e conforme este mostra a cor correspondente
- o procedimento troca, que recebe por passagem por referência a variável cor e a altera, conforme a sequência de funcionamento do semáforo
- no algoritmo principal, há o laço de repetição infinito (o programa nunca terminará); dentro dele, são chamados os procedimentos mostra e troca; após, tem-se uma repetição, para que demore um pouco antes de repetir.
algoritmo "semaforo"
var
cor,i : inteiro
procedimento mostra(c:inteiro)
inicio
escolha c faca
caso 1
escreval("Vermelho")
caso 2
escreval("Verde")
caso 3
escreval("Amarelo")
fimescolha
fimprocedimento
procedimento troca(var c:inteiro)
inicio
c <- c + 1
se (c > 3) entao
c <- 1
fimse
fimprocedimento
inicio
cor <- 1
repita
mostra(cor)
troca(cor)
para i de 1 ate 50000 faca
i <- i + 1
fimpara
ate cor > 3
fimalgoritmo
Explicação:
O algoritmo a seguir, escrito em Visualg, é praticamente idêntico ao da primeira resposta, aliás muito boa. A maior diferença (marcada em negrito) está em eu ter trocado o laço repita por um laço enquanto. Fiz a mudança porque, no teste do código original, "amarelo" só imprime ao mesmo tempo que "vermelho".
Sempre teste os códigos que encontrar. Ajuda a entender como funciona e você pode evitar surpresas (eu já vi cada coisa...)
Algoritmo "Semáforo"
var
cor,i : inteiro
procedimento mostra(c:inteiro) // função de exibição de cor conforme caso
// recebe o *conteúdo* da variável "cor" mediante passagem por valor
inicio
escolha c faca
caso 1
escreval("Vermelho")
caso 2
escreval("Verde")
caso 3
escreval("Amarelo")
fimescolha
fimprocedimento
procedimento troca(var c:inteiro) // função de mudança de cor
// recebe a varíável "cor" por referência (por isso "var c:inteiro")
// e altera o valor dela
inicio
c <- c + 1 //incrementa valor de "c"
se (c > 3) entao
c <- 1
fimse
fimprocedimento
inicio
cor <- 1
//laço enquanto infinito, porque a condição sempre será verdadeira
enquanto (cor<4) faca
mostra(cor)
troca(cor)
para i de 1 ate 10000 faca // pausa temporária antes da próxima repetição do mostra e do troca
i <- i + 1
fimpara
fimenquanto
fimalgoritmo