Exercícios Resolvidos de Memória e Modificadores

Ver Teoria

Enunciado

Um Arduino é um microcontrolador, programável em C++, que é muito utilizado mundialmente. Nele, existe uma função própria que diz quanto tempo ele está funcionando em microssegundos, a função m i c r o s ( ) . Ela retorna um valor que varia entre 0 e 4,294,967,279 , após o arduino ficar ligado por um tempo que exceda esse valor, a função reseta a contagem.

No código acima, a função m i c r o s ( ) é utilizada na linha 7 , na qual é passada o valor do tempo no qual o Arduino ficou ligado para uma variável t e m p o , declarada na primeira linha de código.

Tal código é utilizado no Arduino com a intenção de monitorar a quantidade de tempo no qual ele está ligado, fazendo com que seja impresso na tela o valor armazenado na variável t e m p o . Um estudante percebe que, em certo momento, esse código começa a imprimir uns valores incoerentes para o tempo. Diga uma possível razão para isso.

Passo 1

Fala aí, tudo tranquilo?

Nessa questão, nós não precisamos ter conhecimento prévio em Arduino, devemos apenas compreender o que esse código está fazendo com base no que é dito no enunciado.

Basicamente, esse código imprime o valor do tempo em que o Arduino está ligado por meio do comando m i c r o s ( ) , que nos fornece um valor que varia entre 0 e 4,294,967,279 . Esse valor é armazenado variável tempo, declarada como um i n t , e é impresso na tela do computador por meio dos comandos que estão depois da linha 7 .

Passo 2

O problema aqui está na capacidade de armazenamento de uma variável do tipo i n t . A variável t e m p o pode receber valores que variam entre - 2,147,483,648 e 2,147,483,64 7 , no entanto, ela está recebendo valores maiores que isso, o que vai levar aos valores incoerentes que são observados pelo estudante.

Para que isso fosse consertado, seria recomendado declarar a variável t e m p o como um u n s i g n e d   l o n g   i n t , ou simplesmente u n s i g n e d   i n t . Dessa forma, ela poderá receber os valores sem que o seu limite seja ultrapassado.

Resposta

A variável t e m p o está declarada como i n t , mas deveria ser uma u n s i g n e d   l o n g   i n t .