Exercicio 5
Elabore um algoritmo que:
a) Crie um vetor com uma sequência de 10 números
b) Faça um loop para calcular a soma dos números do vetor.
c) Utilize o comando “vetor <- c(1:10)” para criar o vetor.
d) Utilize o comando “for( i in 1:10) { …comandos}” para realizar a
soma.
e) Referencie os valores do vetor com o comando: “vetor[i]”, onde
“i” é o índice referência (número) Ex. vetor: 1,2,3,4,5,6,7,8,9,10 |
Soma dos números = 55.
a) Criar vetor de sequencia de 10 números.
vetor <- c(1:10)
soma <- 0
i <- 1
for (i in 1:10) {
soma = soma + vetor [i]
}
vetor
## [1] 1 2 3 4 5 6 7 8 9 10
b) Faça um loop para calcular a soma dos números do vetor.
media <- mean(vetor)
media
## [1] 5.5
c) Utilize o comando “vetor <- c(1:10)” para criar o vetor.
vetor <- c(1:10)
print(vetor)
## [1] 1 2 3 4 5 6 7 8 9 10
soma <- 0
for (i in 1:length(vetor)) {
soma <- soma + vetor[i]
}
print(soma)
## [1] 55
d) Utilize o comando “for( i in 1:10) { …comandos}” para realizar a
soma.
soma <- 0
for (i in 1:10) {
soma <- soma + vetor[i]
}
print(soma)
## [1] 55
Exercicio 10
Faça um algoritmo que calcule e imprima o fatorial de um número
inteiro.
n <- 10
fat <- 1
for(i in 1:n){
fat <- fat * i
}
fat
## [1] 3628800
Exercicio 10 e 11
Crie uma matriz 4x4.
a) Uma matriz no R comporta somente um tipo de dado (número, texto
ou boleano).
b) O comando para criar a matriz é “x <- matrix(data = 1, nrow =
4, ncol = 4, byrow = TRUE)”
matriz <- matrix(1:16, nrow=4, ncol=4)
print(matriz)
## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 2 6 10 14
## [3,] 3 7 11 15
## [4,] 4 8 12 16
Exercicio 12 E 13
Agora, crie uma matriz com a sequência de 1 a 16.
13) Transforme essa matriz em um data.frame
a) Um data.frame é uma estrutura de dados similar a matriz que pode
conter dados diferentes em suas variáveis.
b) Lembre-se que também chamamos as colunas de variáveis e as linhas
de registros.
c) Uma variável (coluna) não pode conter dados diferentes. Ou todas
as linhas dessa variável são números, ou todas são texto, ou ainda,
boleanos.
d) Utilize o comando “df <- as.data.frame(x)”
x <- matrix(1:16, nrow = 4, ncol = 4, byrow = TRUE)
df <- as.data.frame(x)
print(df)
## V1 V2 V3 V4
## 1 1 2 3 4
## 2 5 6 7 8
## 3 9 10 11 12
## 4 13 14 15 16
Exercicio 14
Utilizando os comandos de repetição e decisão (se for necessário),
calcule:
a) a média de uma coluna da matriz do exercício “12)”.
coluna <- 1
media <- mean(matriz[,coluna])
print(paste0("A média da coluna ", coluna, " é ", media))
## [1] "A média da coluna 1 é 2.5"
b) A média de todas as colunas da matriz do exercício “12)”.
media_colunas <- numeric(4)
for (i in 1:4) {
media_colunas[i] <- mean(matriz[,i])
}
cat("Média de todas as colunas da matriz: ")
## Média de todas as colunas da matriz:
cat(media_colunas, sep=", ")
## 2.5, 6.5, 10.5, 14.5
write.table(media_colunas, "media_colunas2.txt", row.names = FALSE, col.names = FALSE)
c) A média de todas as linhas da matriz do exercício “12)”.
media_linhas <- rowMeans(matriz)
print(media_linhas)
## [1] 7 8 9 10
d) A média dos números pares de todas as colunas da matriz do
exercício “12)”.
media_pares_colunas <- numeric(4)
for (i in 1:4) {
soma <- 0
contador <- 0
for (j in 1:4) {
if (matriz[j, i] %% 2 == 0) {
soma <- soma + matriz[j, i]
contador <- contador + 1
}
}
if (contador != 0) {
media_pares_colunas[i] <- soma / contador
} else {
media_pares_colunas[i] <- 0
}
}
print(media_pares_colunas)
## [1] 3 7 11 15
e) A média dos números ímpares de todas as linhas da matriz do
exercício “12)”.
x <- matrix(1:16, nrow=4, ncol=4, byrow = T)
media_impares_linhas <- numeric(nrow(x))
for(i in 1:nrow(x)) {
impares <- x[i, x[i,] %% 2 == 1]
if(length(impares) == 0) {
media_impares_linhas[i] <- 0
} else {
media_impares_linhas[i] <- mean(impares)
}
}
print(media_impares_linhas)
## [1] 2 6 10 14
f) A soma da diagonal principal da matriz.
matriz <- matrix(1:16, nrow=4, ncol=4)
soma_diagonal <- sum(diag(matriz))
print(soma_diagonal)
## [1] 34
g) A soma da diagonal secundária da matriz (desafio).
x <- matrix(1:16, nrow = 4, ncol = 4, byrow = TRUE)
print(x)
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
## [4,] 13 14 15 16
soma_diag_sec <- 0
for (i in 1:nrow(x)) {
j <- ncol(x) - i + 1
soma_diag_sec <- soma_diag_sec + x[i, j]
}
print(soma_diag_sec)
## [1] 34
Exercicio 15
a) a média de uma coluna da matriz do exercício
coluna3 <- df[,3]
media_coluna3 <- mean(coluna3)
print(media_coluna3)
## [1] 10.5
b) Média de todas as colunas:
medias_colunas <- c()
for(i in 1:ncol(df)){
medias_colunas[i] <- mean(df[,i])
}
print(medias_colunas)
## [1] 2.5 6.5 10.5 14.5
c) Média de todas as linhas:
# Média de todas as linhas do data.frame
mean_df_linhas <- apply(df, 1, mean, na.rm = TRUE)
print(mean_df_linhas)
## [1] 7 8 9 10
d) Média dos números pares de todas as colunas:
medias_pares_colunas <- c()
for(i in 1:ncol(df)){
medias_pares_colunas[i] <- mean(df[df[,i] %% 2 == 0,i])
}
print(medias_pares_colunas)
## [1] 3 7 11 15
e) Média dos números ímpares de todas as linhas:
# Média dos números ímpares de todas as linhas
medias_impares_linhas <- apply(df, 1, function(x) mean(x[x %% 2 == 1]))
# Imprimindo as médias
print(medias_impares_linhas)
## [1] 7 NaN 9 NaN
f) Soma da diagonal principal da matriz:
soma_diagonal <- sum(diag(matriz))
print(soma_diagonal)
## [1] 34
g) Soma da diagonal secundária da matriz:
matriz_transposta <- t(matriz)
soma_diagonal_sec <- sum(diag(matriz_transposta[, ncol(matriz_transposta):1]))
print(soma_diagonal_sec)
## [1] 34
MAIS EXERCÍCIOS – PRÁTICA
Prática de criação de vetores, matrizes, data frames e funções.
Prática com loops, listas, condicionais e funções em R.
6. Crie um loop for que imprime os números de 1 a 10.
for (i in 1:10) {
print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
Núcleo 9 – Ciclo 1
Revisão de Programação em RStudio Parte 2
Repita o Exercício 1) calculando o salário mensal da seguinte #
lista abaixo.
NOME DO FUNCIONÁIO
SALÁRIO BASE (R\() VENDAS (R\))
IRPF (%)
VENDEDOR 1 1800,00 20000,00
VENDEDOR 2 2500,00 30000,00
VENDEDOR 3 2500,00 25000,00
VENDEDOR 4 3000,00 15000,00
VENDEDOR 5 3500,00 27000,00
VENDEDOR 6 4000,00 30000,00
VENDEDOR 7 5000,00 32000,00
O valor da alíquota do IR deve ser calculado sobre o salário base,
conforme os dados abaixo:
Base de cálculo Alíquota
Até 1.903,98 Isento
De 1.903,99 até 2.826,65 7,50%
De 2.826,66 até 3.751,05 15%
De 3.751,06 até 4.664,68 22,50%
Acima de 4.664,68 27,50%
# tabela com as informações dos vendedores
vendedores <- data.frame(
nome = c("VENDEDOR 1", "VENDEDOR 2", "VENDEDOR 3", "VENDEDOR 4", "VENDEDOR 5", "VENDEDOR 6", "VENDEDOR 7"),
salario_base = c(1800, 2500, 2500, 3000, 3500, 4000, 5000),
vendas = c(20000, 30000, 25000, 15000, 27000, 30000, 32000),
irpf = c(0, 7.5, 15, 22.5, 27.5, 27.5, 27.5)
)
# salário mensal final para cada vendedor
vendedores$salario_final <- vendedores$salario_base + (vendedores$vendas * 0.05) - (vendedores$salario_base * 0.11)
vendedores$salario_final <- vendedores$salario_final - (vendedores$salario_final * vendedores$irpf / 100)
print(vendedores)
## nome salario_base vendas irpf salario_final
## 1 VENDEDOR 1 1800 20000 0.0 2602.000
## 2 VENDEDOR 2 2500 30000 7.5 3445.625
## 3 VENDEDOR 3 2500 25000 15.0 2953.750
## 4 VENDEDOR 4 3000 15000 22.5 2650.500
## 5 VENDEDOR 5 3500 27000 27.5 3237.125
## 6 VENDEDOR 6 4000 30000 27.5 3668.500
## 7 VENDEDOR 7 5000 32000 27.5 4386.250
3) Elabore um programa para efetuar o cálculo da quantidade de
garrafas e de engradados de cerveja consumida por um determinado bloco
durante o carnaval, considerando que 5000foliões bebem cerca de 2 litros
durante o desfile do bloco.
Outras informações:
• considerar que um engradado de cerveja tem 24 garrafas de 600
ml
• Cada garrafa custa R$ 8,00, e que o engradado custa R$
180,00.
Qual será o lucro do comerciante considerando que:
a) Ele compre as garrafas avulsas e venda cada garrafa a R$
15,00.
b) Ele compre o engradado e venda cada garrafa a R$ 15,00 (ele não
pode comprar fração do engradado – arredonde para menos).
c) Ele venda o copo de 500 ml a R$ 15,00 – cada copo sai a R$
0,20.
Faça uma função para o lucro.
calcula_lucro <- function(qtd_folioes) {
qtd_cerveja <- qtd_folioes * 2 * 1000 / 600 # quantidade de cerveja em garrafas de 600ml
qtd_engradados <- floor(qtd_cerveja / 24) # quantidade de engradados
qtd_garrafas_avulsas <- qtd_cerveja %% 24 # quantidade de garrafas avulsas
lucro_garrafas_avulsas <- qtd_garrafas_avulsas * 15 # lucro com as garrafas avulsas
lucro_engradados <- qtd_engradados * 24 * 15 - qtd_engradados * 180 # lucro com os engradados
lucro_copos <- qtd_cerveja * 0.2 # lucro com os copos de 500ml
return(c(lucro_garrafas_avulsas, lucro_engradados, lucro_copos))
}
qtd_folioes <- 5000
lucros <- calcula_lucro(qtd_folioes)
cat("Lucro com garrafas avulsas: R$", format(lucros[1], nsmall=0), "\n")
## Lucro com garrafas avulsas: R$ 160
cat("Lucro com engradados: R$", format(lucros[2], nsmall=0), "\n")
## Lucro com engradados: R$ 124920
cat("Lucro com copos: R$", format(lucros[3], nsmall=0), "\n")
## Lucro com copos: R$ 3333.333
4) Elabore um data.frame com as seguintes informação:
NOME DO ALUNO DISCIPLINA 1 DISCIPLINA 2 DISCIPLINA 3
ALUNO 1 3 10 7
ALUNO 2 4 9 8
ALUNO 3 5 8 9
ALUNO 4 6 7 10
ALUNO 5 7 6 7
ALUNO 6 8 5 8
ALUNO 7 9 4 9
Faça funções para calcular:
a) A média de cada aluno (CR)
b) A média de cada disciplina.
c) A média final da turma.
d) O aluno com média mais alta.
e) A lista de alunos reprovados, por disciplina
# Criando o data.frame com as notas dos alunos
notas_alunos <- data.frame(
NOME_DO_ALUNO = c("ALUNO 1", "ALUNO 2", "ALUNO 3", "ALUNO 4", "ALUNO 5", "ALUNO 6", "ALUNO 7"),
DISCIPLINA_1 = c(3, 4, 5, 6, 7, 8, 9),
DISCIPLINA_2 = c(10, 9, 8, 7, 6, 5, 4),
DISCIPLINA_3 = c(7, 8, 9, 10, 7, 8, 9)
)
# média de cada aluno (CR)
media_aluno <- function(notas) {
rowMeans(notas[, -1])
}
# média de cada disciplina
media_disciplina <- function(notas) {
colMeans(notas[, -1])
}
# média final da turma
media_turma <- function(notas) {
mean(media_disciplina(notas))
}
# média mais alta
aluno_com_media_mais_alta <- function(notas) {
nomes <- notas$NOME_DO_ALUNO
cr <- media_aluno(notas)
nomes[which.max(cr)]
}
# reprovados por disciplina
alunos_reprovados_por_disciplina <- function(notas, nota_minima) {
nomes <- notas$NOME_DO_ALUNO
disciplinas <- colnames(notas[, -1])
reprovados <- list()
for (d in disciplinas) {
reprovados[[d]] <- nomes[which(notas[, d] < nota_minima)]
}
return(reprovados)
}
cat("Notas dos alunos:\n")
## Notas dos alunos:
print(notas_alunos)
## NOME_DO_ALUNO DISCIPLINA_1 DISCIPLINA_2 DISCIPLINA_3
## 1 ALUNO 1 3 10 7
## 2 ALUNO 2 4 9 8
## 3 ALUNO 3 5 8 9
## 4 ALUNO 4 6 7 10
## 5 ALUNO 5 7 6 7
## 6 ALUNO 6 8 5 8
## 7 ALUNO 7 9 4 9
cat("\nMédia de cada aluno (CR):\n")
##
## Média de cada aluno (CR):
print(media_aluno(notas_alunos))
## [1] 6.666667 7.000000 7.333333 7.666667 6.666667 7.000000 7.333333
cat("\nMédia de cada disciplina:\n")
##
## Média de cada disciplina:
print(media_disciplina(notas_alunos))
## DISCIPLINA_1 DISCIPLINA_2 DISCIPLINA_3
## 6.000000 7.000000 8.285714
cat("\nMédia final da turma:\n")
##
## Média final da turma:
print(media_turma(notas_alunos))
## [1] 7.095238
cat("\nAluno com média mais alta:\n")
##
## Aluno com média mais alta:
print(aluno_com_media_mais_alta(notas_alunos))
## [1] "ALUNO 4"
cat("\nAlunos reprovados por disciplina:\n")
##
## Alunos reprovados por disciplina:
print(alunos_reprovados_por_disciplina(notas_alunos, 7))
## $DISCIPLINA_1
## [1] "ALUNO 1" "ALUNO 2" "ALUNO 3" "ALUNO 4"
##
## $DISCIPLINA_2
## [1] "ALUNO 5" "ALUNO 6" "ALUNO 7"
##
## $DISCIPLINA_3
## character(0)
Lista de Exercícios I – PL:
1. A Fábrica Marvel Toy deseja fazer três modelos de barcos de
brinquedo para melhorar as suas vendas. Eles descobriram que um modelo
do navio a vapor leva uma hora no cortador, 2 horas na pintura, e 4
horas de trabalho na montagem. Este modelo produz $ 6 de lucro. O modelo
do veleiro de quatro mastros leva 3 horas no cortador, 3 horas na
pintura e o montador 2 horas na montagem e produz $ 3 de lucro. O modelo
veleiro de dois mastros leva uma hora no cortador, três horas na
pintura, uma hora na montagem, produzindo $ 2 de lucro. O cortador está
disponível apenas por 45 horas, o pintor por 50 horas, e o montador por
60 horas. Supondo que eles possam vender todos os modelos que são
construídos, encontre as restrições do problema e descreva como a
solução ótima é obtida.
func.obj <- c(6,3,2)
restricoes <- matrix(c(1,3,1,2,3,3,4,2,1), ncol = 3, byrow = TRUE)
direcao.restricoes <- c("<=","<=","<=")
limites.restricoes <- c(45,50,60)
solucao.problema <- lpSolve::lp(direction = "max", objective.in = func.obj, const.mat = restricoes, const.dir = direcao.restricoes, const.rhs = limites.restricoes)
print(solucao.problema)
## Success: the objective function is 94
2. A Reggio Advertising Company deseja planejar uma campanha
publicitária em três meios diferentes - televisão, rádio e revistas. O
objetivo da publicidade é alcançar tantos clientes em potencial quanto
possível. Os resultados de um estudo de mercado são fornecidos
abaixo:
Tabela em PDF.
A empresa não quer gastar mais do que $ 800.000 na publicidade. Além
disso, requer que: (1) pelo menos 2 milhões as exposições ocorrem entre
mulheres; (2) publicidade em televisão seja limitada a $ 500.000; (3)
pelo menos 3 publicidades sejam compradas na televisão diurna, e duas
unidades durante horário nobre; e (4) o número de unidades de
publicidade no rádio e em revistas deve ser entre 5 e 10. Formular o
problema de programação linear.
func.obj <- c(400000,900000,500000,200000)
restricoes <- matrix (c(40000,75000,30000,15000,300000,400000,200000,100000,40000,75000,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,1,1), ncol = 4, byrow = TRUE)
direcao.restricoes <- c("<=",">=","<=",">=",">=",">=","<=")
limites.restricoes <- c(800000,2000000,500000,3,2,5,10)
solucao.problema <- lpSolve::lp(direction = "max", objective.in = func.obj, const.mat = restricoes, const.dir = direcao.restricoes, const.rhs = limites.restricoes)
solucao.problema
## Success: the objective function is 10760000
3. Uma fábrica de tomate em conserva tem 5.000 quilos de tomates de
grau A e 10.000 quilos de tomates grau B, os quais serão transformados
em tomates em lata e pasta de tomate. os tomates em lata devem ser
compostos de pelo menos 80 por cento de tomates de grau A, enquanto a
pasta de tomate deve ser feita com pelo menos 10 por cento de tomates
desta mesma qualidade (grau A). Os tomates em lata são vendidos por US $
0,08 por quilo e os tomates em pasta são vendidos por US $ 0,05 por
quilo. Formule um programa linear para resolver quanto de cada produto
deve ser feito, se a empresa quiser maximizar a sua receita.
func.obj <- c(0.08,0.05)
restricoes <- matrix (c(0.8,0.1,0.2,0.9), ncol = 2, byrow = TRUE)
direcao.restricoes <- c("<=","<=")
limites.restricoes <- c(5000,10000)
solucao.problema <- lpSolve::lp(direction = "max", objective.in = func.obj, const.mat = restricoes, const.dir = direcao.restricoes, const.rhs = limites.restricoes)
solucao.problema
## Success: the objective function is 900
5. O grupo Unido tem duas fazendas que cultivam trigo e milho. Por
causa dos solos e condições climáticas diferentes, existem diferenças
nos rendimentos e custos de cultivo nas duas fazendas. Os rendimentos e
custos são: Tabela em PDF. Cada fazenda possui 100 acres disponíveis
para cultivo; 11.000 alqueires de trigo e 7.000 alqueires de milho devem
ser cultivados. Determine um plano de plantio que irá minimizar o custo
de atender a essas demandas
func.obj <- c(100,120,90,80)
restricoes <- matrix (c(500,650,0,0,0,0,400,350,1,1,0,0,0,0,1,1), ncol = 4, byrow = TRUE)
direcao.restricoes <- c(">=",">=","=","=")
limites.restricoes <- c(7000,11000,100,100)
solucao.problema <- lpSolve::lp(direction = "min", objective.in = func.obj, const.mat = restricoes, const.dir = direcao.restricoes, const.rhs = limites.restricoes)
solucao.problema
## Success: the objective function is 18000
6. Considere que existem 3 silos que são necessários para satisfazer
a demanda de 4 fábricas (Mills), conforme tabela a seguir. (Um silo é
uma área de armazenamento da fazenda usada para armazenar grãos e Moinho
é uma fábrica de moagem de grãos).Determine o quanto de cada silo deve
ir para cada fábrica afim de que o custo de transporte seja minimizado
(tabela em PDF)
func.obj <- c(10, 2, 20, 11, 12, 7, 9, 20, 4, 14, 16, 18)
restricoes <- matrix(c(1,1,1,1,0,0,0,0,0,0,0,0,
0,0,0,0,1,1,1,1,0,0,0,0,
0,0,0,0,0,0,0,0,1,1,1,1,
1,0,0,0,1,0,0,0,1,0,0,0,
0,1,0,0,0,1,0,0,0,1,0,0,
0,0,1,0,0,0,1,0,0,0,1,0,
0,0,0,1,0,0,0,1,0,0,0,1
), ncol = 12, byrow = TRUE)
direcao.restricoes <- c("=","=","=","=","=","=","=")
limites.restricoes <- c(15, 25, 10, 5, 15, 15, 15)
solucao.problema <- lpSolve::lp(direction = "min", objective.in = func.obj, const.mat = restricoes, const.dir = direcao.restricoes, const.rhs = limites.restricoes)
solucao.problema
## Success: the objective function is 435