Capítulo 4 R como Calculadora e Operações Aritméticas
A Estatística está intimamente ligada à Álgebra, especialmente no que diz respeito ao uso de matrizes e vetores para representar conjuntos de dados e variáveis. No R, estas estruturas de dados são amplamente utilizadas para facilitar a manipulação e a análise estatística. Por isso, é importante primeiro entender como o R lida com estas estruturas antes de avançar para comandos estatísticos mais específicos.
4.1 O Prompt do R
O R utiliza uma interface de linha de comando para executar operações e aceitar comandos diretamente. Esta interface é marcada pelo símbolo >, conhecido como o prompt. Quando se digita um comando após o prompt e se pressiona Enter, o R interpreta o comando, executa a operação correspondente e exibe o resultado no ecrã.
Nas notas de aula, o código R digitado no console é exibido em caixas cinzentas. Quando se vê o símbolo ## no início de uma linha, isso indica o resultado (output) gerado pelo console R após a execução do código.
No R, o caractere #
é utilizado para inserir comentários no código.
Qualquer texto que aparece após #
na mesma linha é ignorado pelo R
durante a execução. Comentários são úteis para adicionar explicações ou
anotações no código, como no exemplo abaixo:
Se conhecer o nome de uma função e desejar aprender mais sobre o seu
funcionamento, pode utilizar o comando ?
seguido do nome da função
para aceder à documentação de ajuda correspondente. Por exemplo:
Este comando abrirá a página de ajuda para a função sum
, que é
utilizada para calcular a soma de elementos.
Além disso, o R oferece uma forma prática de visualizar exemplos de como
uma função pode ser utilizada. Para ver exemplos de uso de uma função,
pode usar o comando example()
com o nome da função como argumento:
Este comando mostrará exemplos de aplicação da função sum
, ajudando a
entender melhor como pode ser usada em diferentes contextos.
4.2 Objetos e Variáveis
Em R, um objeto é uma unidade de armazenamento que pode conter diferentes tipos de dados ou funções, sendo referenciado por um nome. Esses dados podem incluir números, caracteres, vetores, matrizes, data frames, listas ou até mesmo funções. Objetos são criados e manipulados através de comandos, permitindo que seus valores sejam reutilizados em qualquer parte do código. Em resumo, tudo o que é criado ou carregado na sessão do R, como dados ou funções, é considerado um objeto.
4.2.1 O que é uma Variável?
Uma variável é um nome ou identificador associado a um objeto. Quando se cria uma variável, está-se, na verdade, a criar um “rótulo” que aponta para o objeto armazenado na memória. Assim, uma variável é o nome que se utiliza para aceder aos dados ou funções armazenados no objeto. Ela permite manipular e referenciar o objeto de forma conveniente ao longo do seu script ou análise.
4.2.2 Atribuições
A expressão
x <- 10
cria uma variável chamadax
e atribui-lhe o valor 10. Note que o operador de atribuição<-
atribui o valor do lado direito à variável do lado esquerdo. O lado esquerdo deve conter apenas um único nome de variável.Também é possível realizar atribuições usando o sinal de igualdade
=
ou o operador->
. No entanto, para evitar confusões entre o operador de atribuição e o operador de igualdade, é recomendável usar<-
para atribuições.
O comando
c(1,2,3,4,5)
combina os números 1, 2, 3, 4 e 5 em um vetor, criando uma sequência de valores.Vetores podem ser atribuídos a objetos. Por exemplo:
Esta linha de código atribui um vetor numérico de comprimento 4 ao
objeto X
. É importante lembrar que o R distingue entre maiúsculas e
minúsculas, o que significa que X
e x
são considerados dois objetos
distintos.
Ao definir objetos no console, está a modificar o espaço de trabalho actual. Para visualizar todas as variáveis e objetos actualmente guardados no seu espaço de trabalho, pode usar o comando:
No RStudio, a aba Environment exibe todos os objetos e valores presentes no espaço de trabalho.
4.2.3 Regras para definição de variáveis
Os nomes de variáveis em R devem começar com uma letra ou um ponto final (desde que o ponto final seja seguido por uma letra) e podem incluir letras, números, pontos e sublinhados.
O nome de uma variável não pode conter espaços ou caracteres especiais (como @, #, $, %). Apenas letras, números, pontos e sublinhados (_) são permitidos. Exemplo de nome válido:
nome_cliente2
.Ao definir nomes de variáveis, não é permitido usar palavras reservadas do R. Palavras reservadas são termos que têm um significado especial no R e não podem ser redefinidos. Exemplos de palavras reservadas incluem:
if
,else
,for
,while
,class
,FALSE
,TRUE
,exp
,sum
.O R diferencia letras maiúsculas de minúsculas, o que significa que
fcul
eFcul
são tratadas como variáveis diferentes. Uma convenção comum é usar letras minúsculas para nomes de variáveis e separar palavras com sublinhados. Exemplo:faculdade_de_ciencias
.Escolha nomes de variáveis que descrevam claramente a sua finalidade para que o código seja mais legível e compreensível. Por exemplo, use
nome
em vez dex
.
Neste exemplo, idade
e Idade
são duas variáveis diferentes devido à
diferenciação entre letras maiúsculas e minúsculas.
4.2.4 Tipos de Dados
Em R, variáveis podem armazenar diferentes tipos de dados, incluindo:
- Numeric: números inteiros ou decimais. Exemplo:
42
,3.14
. - Character: sequências de caracteres (texto). Exemplo:
"Olá"
. - Logical: valores booleanos que representam verdadeiro ou falso.
Exemplo:
TRUE
,FALSE
. - Vectors: coleções de elementos do mesmo tipo. Exemplos:
c(1, 2, 3)
para números,c("a", "b", "c")
para caracteres. - Data Frames: estruturas de dados tabulares que contêm linhas e colunas, semelhantes a uma tabela de banco de dados ou a uma folha de cálculo.
- Lists: coleções que podem conter elementos de diferentes tipos, como números, caracteres, vetores, e até mesmo outros data frames.
- Factors: variáveis categóricas que representam dados categóricos e são armazenadas como inteiros. São especialmente úteis para análises estatísticas que envolvem dados categóricos.
4.2.5 Comandos Importantes
Abaixo estão alguns comandos úteis para manipular variáveis e objetos no R:
ls() # Exibe a lista de variáveis atualmente armazenadas na memória
ls.str() # Mostra a estrutura das variáveis armazenadas na memória
rm(a) # Remove o objeto 'a' da memória
rm(list=ls()) # Remove todos os objetos da memória
save.image('nome-do-arquivo.RData') # Salva o espaço de trabalho atual em um arquivo .RData
4.3 Operadores Aritméticos em R
Operador | Descrição | Exemplo |
---|---|---|
+ | Adiciona dois valores | 5 + 2 resulta em 7 |
- | Subtrai dois valores | 5 - 2 resulta em 3 |
* | Multiplica dois valores | 5 * 2 resulta em 10 |
/ | Divide dois valores (sem arredondamento) | 5 / 2 resulta em 2.5 |
%/% | Realiza divisão inteira | 5 %/% 2 resulta em 2 |
%% | Retorna o resto da divisão | 5 %% 2 resulta em 1 |
^ | Realiza exponenciação | 5 ^ 2 resulta em 25 |
Exemplos:
1+1
## [1] 2
5-2
## [1] 3
5*21
## [1] 105
sqrt(9)
## [1] 3
3^3
## [1] 27
3**3
## [1] 27
log(9)
## [1] 2.197225
log10(9)
## [1] 0.9542425
exp(1)
## [1] 2.718282
# prioridade de resolução
19 + 26 /4 -2 *10
## [1] 5.5
((19 + 26) /(4 -2))*10
## [1] 225
Ao contrário de funções simples como ls()
, a maioria das funções no R
requer um ou mais argumentos. Nos exemplos acima, utilizamos funções
predefinidas do R como sqrt()
, log()
, log10()
e exp()
, que
aceitam argumentos específicos.
4.3.1 Controle da Quantidade de Dígitos Mostrados
O R permite ajustar a precisão dos números exibidos alterando a configuração global de dígitos. Veja o exemplo a seguir:
4.3.2 Objetos Predefinidos, Infinito, Indefinido e Valores Ausentes
O R inclui diversos conjuntos de dados predefinidos que podem ser usados para prática e teste de funções. Para visualizar todos os conjuntos de dados disponíveis, pode-se utilizar o seguinte comando:
Este comando exibe uma lista de nomes de objetos para cada conjunto de dados disponível. Esses conjuntos de dados podem ser utilizados diretamente ao simplesmente digitar o nome no console. Por exemplo, ao digitar:
O R exibirá os dados de concentração atmosférica de CO2 coletados em Mauna Loa.
Além dos conjuntos de dados, o R também possui objetos predefinidos que
representam constantes matemáticas, como pi
para o número \(\pi\) e
Inf
para o \(\infty\).
pi
## [1] 3.14
1/0
## [1] Inf
2*Inf
## [1] Inf
-1/0
## [1] -Inf
0/0
## [1] NaN
0*Inf
## [1] NaN
Inf - Inf
## [1] NaN
sqrt(-1)
## Warning in sqrt(-1): NaNs produced
## [1] NaN
c(1,2,3,NA,5)
## [1] 1 2 3 NA 5
mean(c(1,2,3,NA,5))
## [1] NA
mean(c(1,2,3,NA,5), na.rm = TRUE)
## [1] 2.75
x <- c(1, 2, NaN, 4, 5)
y <- c(1, 2, NA, 4, 5)
# Note que isso não funciona
y == NA
## [1] NA NA NA NA NA
# E isso também não
y == "NA"
## [1] FALSE FALSE NA FALSE FALSE
is.na(x)
## [1] FALSE FALSE TRUE FALSE FALSE
is.nan(x)
## [1] FALSE FALSE TRUE FALSE FALSE
is.na(y)
## [1] FALSE FALSE TRUE FALSE FALSE
is.nan(y)
## [1] FALSE FALSE FALSE FALSE FALSE
# Operações com NaN e NA
sum(x) # Retorna: NaN, porque a soma envolve um NaN
## [1] NaN
sum(y) # Retorna: NA, porque a soma envolve um NA
## [1] NA
sum(x, na.rm = TRUE) # Retorna: 12, ignora NaN na soma
## [1] 12
sum(y, na.rm = TRUE) # Retorna: 12, ignora NA na soma
## [1] 12
NaN (Not a Number): Representa resultados indefinidos de operações matemáticas. Por exemplo, operações como
0/0
ousqrt(-1)
geram umNaN
porque o resultado não é um número real. No R,NaN
é tecnicamente um tipo especial deNA
que indica especificamente um resultado numérico indefinido.NA (Not Available): Indica dados ausentes ou valores que não estão disponíveis num conjunto de dados. Por exemplo, em um vetor de dados, se um valor está ausente ou não foi medido, ele é representado por
NA
. Ao contrário deNaN
,NA
é utilizado para representar qualquer tipo de dado ausente, não apenas valores numéricos.
4.3.3 Lidando com NaN e NA em Operações
Ao trabalhar com dados, é importante saber como lidar com NaN
e NA
para evitar erros inesperados. Funções como mean()
e sum()
podem
retornar NA
ou NaN
se contiverem esses valores. Para ignorar NA
ou
NaN
ao realizar cálculos, você pode usar o argumento na.rm = TRUE
,
que remove os valores ausentes ou indefinidos da operação.
4.3.4 Funções Úteis para Detectar NaN e NA
Para verificar a presença de NA
ou NaN
em um vetor ou conjunto de
dados, pode-se usar as funções is.na()
e is.nan()
. A função
is.na()
identifica todos os valores que são NA
ou NaN
, enquanto
is.nan()
identifica especificamente valores que são NaN
. Por
exemplo:
is.na(x)
## [1] FALSE FALSE TRUE FALSE FALSE
is.nan(x)
## [1] FALSE FALSE TRUE FALSE FALSE
is.na(y)
## [1] FALSE FALSE TRUE FALSE FALSE
is.nan(y)
## [1] FALSE FALSE FALSE FALSE FALSE
Essas funções são úteis para limpar e preparar dados antes de realizar análises estatísticas, garantindo que os cálculos sejam precisos e significativos.
4.3.5 Tipagem Dinâmica em R
Em R, o tipo de uma variável é determinado dinamicamente com base no valor atribuído a ela. Isso significa que o R automaticamente define o tipo de dado de uma variável quando lhe é atribuído um valor.
x <- 5
class(x)
## [1] "numeric"
y <- "Cinco"
class(y)
## [1] "character"
z <- TRUE
class(z)
## [1] "logical"
A função
class()
retorna a classe de um objeto em R. A classe de um objeto determina como ele será tratado pelas funções e operações que podem ser aplicadas a ele. Por exemplo, vetores, matrizes, data frames e listas são diferentes classes de objetos em R, cada uma com suas próprias características e métodos.A função
typeof()
em R é usada para retornar o tipo de armazenamento interno de um objeto. Ela fornece informações detalhadas sobre como os dados são representados na memória do computador.
x <- 1:10
class(x)
## [1] "integer"
typeof(x)
## [1] "integer"
y <- c(1.1, 2.2, 3.3)
class(y)
## [1] "numeric"
typeof(y)
## [1] "double"
z <- data.frame(a = 1:3, b = c("A", "B", "C"))
class(z)
## [1] "data.frame"
typeof(z)
## [1] "list"
w <- list(a = 1, b = "text")
class(w)
## [1] "list"
typeof(w)
## [1] "list"
Neste exemplo, class(x)
e typeof(x)
ambos retornam “integer” para um
vetor de inteiros, enquanto class(y)
retorna “numeric” para um vetor
de números de ponto flutuante, e typeof(y)
retorna “double”, mostrando
o tipo específico de armazenamento na memória. Para um data.frame,
class(z)
retorna “data.frame”, enquanto typeof(z)
retorna “list”,
indicando que os data frames são armazenados internamente como listas.
4.3.6 Conversão entre Tipos de Dados
Em R, é possível converter uma variável de um tipo de dado para outro usando funções de conversão. Isso é especialmente útil ao trabalhar com dados que podem ter sido importados de fontes externas e precisam ser manipulados ou analisados de diferentes maneiras.
# Convertendo um inteiro em uma string (caractere)
a <- 15
b <- as.character(15)
print(b)
## [1] "15"
# Convertendo um número de ponto flutuante (float) em um inteiro
x <- 1.5
y <- as.integer(x)
print(y)
## [1] 1
# Convertendo uma string em um número (float)
z <- "10"
w <- as.numeric(z)
print(w)
## [1] 10
Essas funções de conversão são essenciais quando há necessidade de manipular diferentes tipos de dados de forma eficiente em análises estatísticas e outras operações de programação.
4.4 Funções print()
, readline()
, paste()
e cat()
No R, existem várias funções úteis para exibir, receber e concatenar informações. Aqui estão algumas das mais comuns:
print()
: Utilizada para exibir valores e resultados de expressões no console. É a função básica para mostrar a saída de dados no R.readline()
: Usada para receber entradas do utilizador via teclado. Esta função permite que o script pause e aguarde a entrada do utilizadorpaste()
: Utilizada para concatenar (combinar) sequências de caracteres (strings) com um separador específico entre elas. Por padrão, o separador é um espaço.paste0()
: Semelhante apaste()
, mas concatena strings sem qualquer separador.cat()
: Usada para concatenar e exibir uma ou mais strings ou valores de uma forma direta, sem estruturas de formatação adicionais como aspas. Ao contrário deprint()
,cat()
não retorna o resultado em uma nova linha.
Exemplo 1:
Neste exemplo, paste()
concatena as duas strings com um espaço entre
elas.
Exemplo 2:
# Solicitar entrada do utilizador
n <- readline(prompt = "Digite um número: ")
# Converta a entrada em um valor numérico
n <- as.integer(n)
# Imprima o valor no console
print(n+1)
Aqui, readline()
recebe a entrada do utilizador, e as.integer()
converte essa entrada para um número inteiro. O resultado é incrementado
em 1 e exibido.
Exemplo 3:
# Solicitar entrada do utilizador
nome <- readline(prompt = "Entre com o seu nome: ")
# Imprima uma mensagem de saudação
cat("Olá, ",nome, "!")
O uso de cat()
aqui é para exibir uma mensagem de saudação que inclui
o nome do utilizador.
Exemplo 4:
# Solicitar ao utilizador a entrada numérica
idade <- readline(prompt = "Digite a sua idade: ")
# Converta a entrada em um valor numérico
idade <- as.numeric(idade)
# Verifique se a entrada é numérica
if (is.na(idade)) {
cat("Entrada inválida. Insira um valor numérico.\n")
} else {
cat("Você tem ", idade, " anos.\n")
}
Este exemplo mostra como verificar se a entrada é numérica usando
is.na()
e fornecer feedback apropriado ao utilizador.
Concatenando Strings
Concatenando Múltiplas Strings
Concatenando Strings com um Separador Específico
Concatenando Vetores de Strings
first_names <- c("Anna", "Bruno", "Carlos")
last_names <- c("Smith", "Oliveira", "Santos")
result <- paste(first_names, last_names)
print(result)
## [1] "Anna Smith" "Bruno Oliveira" "Carlos Santos"
Concatene com cada elemento de um vetor
numbers <- 1:3
result <- paste("Number", numbers)
print(result)
## [1] "Number 1" "Number 2" "Number 3"
Usando paste0()
para Concatenar sem Espaço
Concatenando Strings com Números
4.5 Quizz
- O que é o ‘prompt’ do R?
- Um símbolo que marca o início de um comando
- Um objeto armazenado na memória
- Uma função para adicionar números
- Um operador lógico
- Qual comando é usado para imprimir texto no console no R?
print()
paste()
cat()
readline()
- O que o caractere
#
faz em um script R?
- Executa o comando
- Cria uma variável
- Indica um comentário
- Combina dois números
- Como você cria um vetor com os números 1 a 5?
c(1 2 3 4 5)
combine(1,2,3,4,5)
c(1,2,3,4,5)
vector(1,2,3,4,5)
- O que o operador
<-
faz no R?
- Atribui um valor a uma variável
- Compara dois números
- Soma dois números
- Remove um objeto
- Como remover um objeto da memória no R?
delete(x)
remove(x)
rm(x)
clear(x)
- Qual operador é usado para divisão inteira em R?
/
%/%
%%
^
- Qual operador retorna o resto da divisão de dois números?
%/%
%%
^
/
- Como você controla a precisão dos números exibidos no console do R?
- Usando a função
precision()
- Usando a função
- Alterando a opção
options(digits=)
- Alterando a opção
- Usando a função
format()
- Usando a função
- Usando o comando
round()
- Usando o comando
- Qual função retorna a classe de um objeto no R?
typeof()
class()
str()
is()
- O que
c()
faz no R?
- Cria um vetor
- Calcula a soma de números
- Remove um vetor
- Compara dois números
- O que a função
readline()
faz?
- Imprime texto no console
- Lê uma linha de texto do utilizador
- Remove um objeto da memória
- Soma dois números
- O que
paste()
faz?
- Soma números
- Imprime texto sem quebrar linhas
- Combina strings
- Cria vetores
4.6 Operadores Lógicos e Relacionais
Em R, operadores lógicos e relacionais são utilizados para realizar
comparações e tomar decisões com base nos resultados dessas comparações.
Esses operadores são fundamentais para a construção de estruturas de
controle de fluxo, como instruções condicionais (if
, else
) e loops
(for
, while
).
4.6.1 Operadores Lógicos
Os operadores lógicos são usados para combinar ou modificar condições
lógicas, retornando valores booleanos (TRUE
ou FALSE
).
&
(E lógico): RetornaTRUE
se todas as expressões forem verdadeiras.|
(OU lógico): RetornaTRUE
se pelo menos uma das expressões for verdadeira.!
(Não lógico): Inverte o valor de uma expressão booleana, transformandoTRUE
emFALSE
e vice-versa.
Exemplos:
4.6.2 Operadores Relacionais
Os operadores relacionais são usados para comparar valores e retornam
valores lógicos (TRUE
ou FALSE
) com base na comparação.
a == b
: Verifica se “a” é igual a “b”.a != b
: Verifica se “a” é diferente de “b”.a > b
: Verifica se “a” é maior que “b”.a < b
: Verifica se “a” é menor que “b”.a >= b
: Verifica se “a” é maior ou igual a “b”.a <= b
: Verifica se “a” é menor ou igual a “b”.is.na(a)
: Verifica se “a” é um valor ausente (NA).is.null(a)
: Verifica se “a” é nulo (NULL).
Exemplos:
# Maior que
2 > 1
## [1] TRUE
1 > 2
## [1] FALSE
# Menor que
1 < 2
## [1] TRUE
# Maior ou igual a
0 >= (2+(-2))
## [1] TRUE
# Menor ou igual a
1 <= 3
## [1] TRUE
# Conjunção E (ambas as condições devem ser verdadeiras)
9 > 11 & 0 < 1
## [1] FALSE
# Disjunção OU (pelo menos uma condição deve ser verdadeira)
6 < 5 | 0>-1
## [1] TRUE
# Igual a
1 == 2/2
## [1] TRUE
# Diferente de
1 != 2
## [1] TRUE
4.7 Quizz
- Qual operador relacional verifica se dois valores são iguais?
=
==
!=
<=
- Qual operador verifica se um valor é maior que outro?
>=
<
>
<=
- Qual o resultado de
5 != 3
?
TRUE
FALSE
NA
NULL
- O que
x & y
faz em R, ondex
ey
são lógicos?
- Realiza uma operação “OR”.
- Verifica se ambos são
TRUE
.
- Verifica se ambos são
- Verifica se ao menos um é
TRUE
.
- Verifica se ao menos um é
- Inverte o valor lógico de
x
.
- Inverte o valor lógico de
- O que faz o operador
|
em expressões lógicas?
- Verifica se ambos os operandos são verdadeiros.
- Verifica se ao menos um dos operandos é verdadeiro.
- Verifica se ambos os operandos são falsos.
- Compara se os operandos são iguais.
- O que faz o operador
!
em R?
- Inverte um valor lógico
- Multiplica dois valores
- Compara dois valores
- Calcula o resto da divisão
- Qual o resultado de
!(TRUE)
?
- TRUE
- FALSE
- NA
- NULL
4.8 Exercícios
1. Escreva um programa em R que leia dois inteiros inseridos pelo utilizador e imprima:
- A soma dos dois números.
- O produto dos dois números.
- A diferença entre o primeiro e o segundo número.
- A divisão do primeiro pelo segundo número.
- O resto da divisão do primeiro pelo segundo.
- O resultado do primeiro número elevado à potência do segundo.
Dica: Use as funções readline()
para entrada de dados e
as.integer()
para conversão de tipos.
2. Escreva um programa em R que leia dois números de ponto flutuante (números decimais) e imprima:
- A soma dos dois números.
- A diferença entre os dois números.
- O produto dos dois números.
- O resultado do primeiro número elevado à potência do segundo.
Dica: Use as.numeric()
para converter a entrada para números de
ponto flutuante.
3. Escreva um programa em R que leia uma distância em milhas inserida pelo utilizador e a converta para quilómetros usando a fórmula: \(K = M*1.609344\).
Dica: Lembre-se de usar as.numeric()
para converter a entrada para
um número.
4. Escreva um programa em R que leia três inteiros correspondentes ao comprimento, largura e altura de um paralelepípedo, e imprima seu volume.
5. Escreva um programa em R que leia três inteiros e imprima a média dos três números.
6. Escreva um programa em R que leia uma temperatura em graus Fahrenheit e a converta para graus Celsius usando a fórmula: \(C = \frac{F - 32}{1.8}\).
7. Escreva um programa em R que leia uma hora no formato de 24 horas e imprima a hora correspondente no formato de 12 horas.
8. Está a olhar para um relógio e são exatamente 14h. Definiu um alarme para tocar dentro de 51 horas. A que horas o alarme tocará?
9. Escreva um programa em R que resolva a versão geral do problema acima. Peça ao utilizador para inserir a hora atual (em horas) e o número de horas de espera antes que o alarme toque. O programa deve imprimir a hora em que o alarme tocará.
10. Escreva um programa em R que leia um número inteiro fornecido
pelo utilizador e verifique se esse número é maior que 10. O programa
deve imprimir TRUE
se o número for maior que 10 ou FALSE
caso
contrário.
11. Escreva um programa em R que leia dois números fornecidos pelo
utilizador e verifique se eles são iguais. O programa deve imprimir
TRUE
se os números são iguais ou FALSE
caso contrário.
12. Escreva um programa em R que peça ao utilizador para inserir
dois números e verifique se o primeiro número é maior ou igual ao
segundo. O programa deve imprimir TRUE
ou FALSE
.
13. Escreva um programa em R que peça ao utilizador para inserir um
número e verifique se esse número está entre 0 e 100, inclusive. O
programa deve imprimir TRUE
se o número está no intervalo e FALSE
caso contrário.
14. Escreva um programa em R que leia três números fornecidos pelo utilizador e verifique se o primeiro número é menor que o segundo e se o segundo é menor que o terceiro. O programa deve imprimir uma mensagem indicando se a condição é verdadeira ou falsa.