Lista 1

Exercicio 01

Dadas 3 variáveis com valores numéricos, apresentar o resultado da soma das combinações dois a dois destes três números. Por exemplo, variáveis A, B e C, mostrar A + B, A + C, B + C..

A <-2
B <-3
C <-4

A + B
## [1] 5
A + C
## [1] 6
B + C
## [1] 7

Exercicio 02

Definir duas variáveis A e B e trocar seus valores. Ex: Entrada: A=6 e B=8 Saída: A=8 e B=6.

A <- 8
B <- 6

Auxiliar <- 0 

A <- B
B <- Auxiliar

A
## [1] 6
B
## [1] 0

Exercicio 03

Converter uma temperatura de Fahrenheit para Centígrados. C = (F - 32) * ( 5 / 9 )

F <- 89
C  <- 5* (F - 32)/ 9

C
## [1] 31.66667

Exercicio 04

Escrever um algoritmo que defina um número X e calcule:

Escrever um algoritmo que defina um número X e calcule: a) X 3 - 4 b) O resto da divisão de X / 3 c) X (x/3) + 2 d) Raiz quadrada de X 2

x <- 3*3
x <- 9
A <- x-3-4
B <- x/3
c <- x: x/3+2
d <- x*x
x
## [1] 9
A
## [1] 2
B
## [1] 3
C
## [1] 31.66667
D
## function (expr, name) 
## .External(C_doD, expr, name)
## <bytecode: 0x00000166beaa35e0>
## <environment: namespace:stats>

Exercicio 5

Exercicio a

Elabore um algoritmo que: a) Crie um vetor com uma sequência de 10 números.

vetor <- 1:10
vetor
##  [1]  1  2  3  4  5  6  7  8  9 10

Exercicio b

Faça um loop para calcular a soma dos números do vetor

for (i in 1:20){
print(i)  
  
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13
## [1] 14
## [1] 15
## [1] 16
## [1] 17
## [1] 18
## [1] 19
## [1] 20

Exercicio c

Utilize o comando “vetor <- c(1:10)” para criar o vetor

"vetor <- c(1:10)"
## [1] "vetor <- c(1:10)"
vetor
##  [1]  1  2  3  4  5  6  7  8  9 10

Exercicio d

Utilize o comando “for( i in 1:10) { …comandos}” para realizar a soma.

vetor <- 11:20 
soma <- 0

for( i in 1:10){ 
  soma <- soma + vetor[i]
}
soma
## [1] 155

Exercicio 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.

vetor <- 1:10 
vetor [i]
## [1] 10
soma <- 0 

for( i in 1:10){ 
  soma <- soma + vetor[i]
  if( i == 55 )break
}
soma
## [1] 55

Exercicio 06

A partir do exercício anterior, faça a média dos valores contidos no vetor

vetor <- c(1:10)
vetor
##  [1]  1  2  3  4  5  6  7  8  9 10
##  [1]  1  2  3  4  5  6  7  8  9 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
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
soma <- 0
cont <- 0

for (i in 1:10){
  soma <- soma + vetor[i]
  cont <- cont + 1
  }

media <- soma/cont
media
## [1] 5.5
## [1] 5.5
rm(soma,cont,media,vetor,i)

Exercicio 07

Crie duas variáveis, x e y. Compare se x é maior que y. Se for, imprima “x é maior que y”, se não for, imprima “y é maior que x”. #a) A sintaxe do comando de comparação é: if (x > y) {comandos…} else {comandos} #b) O comando print(“texto ou variável”) imprime a resposta na tela

x <- 10
y <- 1

if (x > y) {print ("x é maior que y")} 
## [1] "x é maior que y"
## [1] "x é maior que y"

Exercicio 08

Repita o exercício “7)” realizando os seguintes ajustes: #a) Substitua o sinal de maior (“>”) pelo de menor ou igual (“<=”) e ajuste dos dizeres da #resposta.

x <- 10
y <- 1

if (x <= y) {print ("x é menor ou igual a y")} 

Exercicio 09

A partir do exercício “5)”, faça a soma somente dos números pares. # a) Utilize o comando “%%” para identificar o resto da divisão. Ex: “5%%2”, cinco dividido por #dois terá como resto “1”. Ou seja, o resultado dessa operação será “1”. #b) Utilize o comando de decisão “if” para saber se o número é par ou ímpar.

vetor <- c(1:10)

soma <- 0

for (i in c(1:5)) {
  if(i%%2 == 0){
    soma <- soma + vetor[i]
  }
}
soma
## [1] 6
## [1] 6

Exercicio 10

Faça um algoritmo que calcule e imprima o fatorial de um número inteiro. factorial(5) print(factorial) #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)”

x <- matrix(data = 1:16, nrow = 4, ncol = 4, byrow = FALSE)
x[2,2]
## [1] 6
## [1] 6
for ( i in 1:4)
  for(j in 1:4) {
    print (x[i,j])
  }
## [1] 1
## [1] 5
## [1] 9
## [1] 13
## [1] 2
## [1] 6
## [1] 10
## [1] 14
## [1] 3
## [1] 7
## [1] 11
## [1] 15
## [1] 4
## [1] 8
## [1] 12
## [1] 16
## [1] 1
## [1] 5
## [1] 9
## [1] 13
## [1] 2
## [1] 6
## [1] 10
## [1] 14
## [1] 3
## [1] 7
## [1] 11
## [1] 15
## [1] 4
## [1] 8
## [1] 12
## [1] 16

Exercício 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)”.

lar <- matrix(data = 1, nrow = 4, ncol = 4, byrow = TRUE)

lar
##      [,1] [,2] [,3] [,4]
## [1,]    1    1    1    1
## [2,]    1    1    1    1
## [3,]    1    1    1    1
## [4,]    1    1    1    1
##      [,1] [,2] [,3] [,4]
## [1,]    1    1    1    1
## [2,]    1    1    1    1
## [3,]    1    1    1    1
## [4,]    1    1    1    1

Exercicio 12

  1. Agora, crie uma matriz com a sequência de 1 a 16
mat <- matrix (data = 1:16 ,nrow = 4, ncol = 4, byrow = TRUE )
mat[2,4]
## [1] 8
mat[i]
## [1] 13
for(i in 1:4){
  for(i in 1:4){
    print(mat[i])
  }
}
## [1] 1
## [1] 5
## [1] 9
## [1] 13
## [1] 1
## [1] 5
## [1] 9
## [1] 13
## [1] 1
## [1] 5
## [1] 9
## [1] 13
## [1] 1
## [1] 5
## [1] 9
## [1] 13

Exercicio 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 <- c(lar[,3])

soma <- 0

for (i in 1:4) {
  soma <- soma + coluna[i]
}
soma
## [1] 4
## [1] 36
media <- soma/i

media
## [1] 1
## [1] 9

B)A média de todas as colunas da matriz do exercício “12)”.

soma_coluna <- rep(0, dim(lar)[2])
med_coluna <- rep(0, dim(lar)[2])

for (j in 1:dim(lar)[2]) {
  for (i in 1:dim(lar)[1]) {
    soma_coluna[j] <- soma_coluna[j] + lar[i,j]
  }
}
med_coluna <- soma_coluna / dim(lar)[2]
med_coluna
## [1] 1 1 1 1
## [1]  7  8  9 10

C) A média de todas as linhas da matriz do exercício “12)”.

soma_linha <- matrix(data = 0, nrow = dim(lar)[1], ncol = 1)
med_linha <- matrix(data = 0, nrow = dim(lar)[1], ncol = 1)

for (i in 1:dim(lar)[1]) {
  for (j in 1:dim(lar)[2]) {
    soma_linha[i] <- soma_linha[i] + lar[i,j]
  }
}
med_linha <- soma_linha / dim(lar)[1]
med_linha
##      [,1]
## [1,]    1
## [2,]    1
## [3,]    1
## [4,]    1
##      [,1]
## [1,]  2.5
## [2,]  6.5
## [3,] 10.5
## [4,] 14.5

D)A média dos números pares de todas as colunas da matriz do exercício “12)”.

soma_coluna <- rep(0,dim(lar)[2])

for(j in 1:dim(lar)[2]){
  for(i in 1:dim(lar)[1]){
    if(lar[i,j]%%2 ==0){
      soma_coluna[j] <- soma_coluna[j] + lar[i,j]} 
  }  
}  

med_coluna <- soma_coluna / i
med_coluna
## [1] 0 0 0 0
## [1]  0  8  0 10

E)A média dos números ímpares de todas as linhas da matriz do exercício “12)”.

soma_linha <- rep(0,dim(lar)[1])

for(i in 1:dim(lar)[1]){
  for(j in 1:dim(lar)[2]){
    if(lar[i,j]%%2 == 1){
      soma_linha[i] <- soma_linha[i] + lar[i,j]} 
  }  
}  

med_linha<- soma_linha / j
med_linha
## [1] 1 1 1 1
## [1] 1 3 5 7

F)A soma da diagonal principal da matriz.

soma <- 0

for (i in 1:4) {
  for (j in 1:4) {
    if (i == j) {
      soma <- soma + lar[i,j]
    }  
  }
}
soma
## [1] 4
## [1] 34

G)A soma da diagonal secundária da matriz (desafio).

soma_diagonal_sec <- 0

for(i in 1:4){
  for(j in 1:4){
    if(i + j == 5){
      soma_diagonal_sec <- soma_diagonal_sec + lar[i,j]
    } 
  }  
}
soma_diagonal_sec
## [1] 4
## [1] 34

Exercicio 15

Repita o exercício “14)” com os dados do data.frame do exercício “13)”

Utilizando os comandos de repetição e decisão (se for necessário), calcule:

# Criando matriz
matriz <- matrix(1:16, nrow=4)

# Transformando em data.frame
df <- as.data.frame(matriz)
  1. A média de uma coluna da matriz do exercício “13)”
coluna3 <- df[,3]
media_coluna3 <- mean(coluna3)
print(media_coluna3)
## [1] 10.5
  1. A média de todas as colunas da matriz do exercício “13)”.
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
  1. A média de todas as linhas da matriz do exercício “13)”.
# 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
  1. A média dos números pares de todas as colunas da matriz do exercício “13)”.
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
  1. A média dos números ímpares de todas as linhas da matriz do exercício “13)”.
# 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
  1. A soma da diagonal principal da matriz.
soma_diagonal <- sum(diag(matriz))
print(soma_diagonal)
## [1] 34
  1. A soma da diagonal secundária da matriz (desafio)
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.

  1. Crie um vetor numérico com os números de 1 a 10 e armazene-o em uma variável chamada “numeros”. Em seguida, imprima o vetor.
numeros <- 1:10
print(numeros)
##  [1]  1  2  3  4  5  6  7  8  9 10
  1. Crie um vetor de caracteres com os nomes dos dias da semana e armazene-o em uma variável chamada “dias”. Em seguida, imprima o vetor.
dias <- c("Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo")
print(dias)
## [1] "Segunda" "Terça"   "Quarta"  "Quinta"  "Sexta"   "Sábado"  "Domingo"
  1. Crie uma matriz 3x3 com os números de 1 a 9 e armazene-a em uma variável chamada “matriz”. Em seguida, imprima a matriz.
matriz <- matrix(1:9, nrow=3, ncol=3)
print(matriz)
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
  1. Crie um data frame com as informações de 3 pessoas: nome (caracter), idade (numérico) e cidade natal (caracter). Armazene o data frame em uma variável chamada “pessoas” e imprima-o.
nomes <- c("Ramon", "Rosane", "Juan")
idades <- c(40, 26, 18)
cidades <- c("Rio de janeiro", "Paraíba", "Rio de Janeiro")
pessoas <- data.frame(nome = nomes, idade = idades, cidade_natal = cidades)
print(pessoas)
##     nome idade   cidade_natal
## 1  Ramon    40 Rio de janeiro
## 2 Rosane    26        Paraíba
## 3   Juan    18 Rio de Janeiro
  1. Crie uma função chamada “fatorial” que recebe um número inteiro como argumento e retorna o fatorial desse número. Em seguida, teste a função com o número 5.
fatorial <- function(n) {
  if (n <= 1) {
    return(1)
  } else {
    return(n * fatorial(n - 1))
  }
}
resultado <- fatorial(5)
print(resultado)
## [1] 120

Prática com loops, listas, condicionais e funções em R.

  1. 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
  1. Crie uma lista com três elementos: um vetor numérico, um vetor de caracteres e um data frame. Armazene a lista em uma variável chamada “minha_lista” e imprima-a.
#vetor numérico
num <- c(1, 2, 3, 4, 5)
#vetor de caracteres
char <- c("a", "b", "c", "d", "e")
#data frame
df <- data.frame(nome = c("Ramon", "Rosane", "Juan"), idade = c(40, 26, 18), stringsAsFactors = FALSE)

#lista com os três elementos
minha_lista <- list(num, char, df)
print(minha_lista)
## [[1]]
## [1] 1 2 3 4 5
## 
## [[2]]
## [1] "a" "b" "c" "d" "e"
## 
## [[3]]
##     nome idade
## 1  Ramon    40
## 2 Rosane    26
## 3   Juan    18
  1. Crie um vetor numérico com os números de 1 a 100. Em seguida, crie um novo vetor que contenha apenas os números pares do vetor original.
# Criação do vetor
vetor <- 1:100

#números pares apenas
vetor_pares <- vetor[vetor %% 2 == 0]
print(vetor_pares)
##  [1]   2   4   6   8  10  12  14  16  18  20  22  24  26  28  30  32  34  36  38
## [20]  40  42  44  46  48  50  52  54  56  58  60  62  64  66  68  70  72  74  76
## [39]  78  80  82  84  86  88  90  92  94  96  98 100
  1. Crie uma função chamada “maior_elemento” que recebe um vetor numérico como argumento e retorna o maior elemento do vetor. Em seguida, teste a função com o vetor c(10, 5, 8, 2, 20, 15).
maior_elemento <- function(vetor){
  maior <- vetor[1]
  for (i in 2:length(vetor)){
    if (vetor[i] > maior){
      maior <- vetor[i]
    }
  }
  return(maior)
}
vetor_teste <- c(10, 5, 8, 2, 20, 15)
maior <- maior_elemento(vetor_teste)
print(maior)
## [1] 20
  1. Crie um data frame com as informações de 3 livros: título (caracter), autor (caracter), ano de publicação (numérico) e número de páginas (numérico). Armazene o data frame em uma variável chamada “livros” e imprima-o.
# data frame "livros"
livros <- data.frame(
  titulo = c("Como vender mesmo sem querer", "Ansiedade como enfrentar o mal do século", "O grande conflito"),
  autor = c("Michael McCarthy", "Augusto Cury", "Ellen G. Whinte"),
  ano_publicacao = c(2015, 2013, 2007),
  num_paginas = c(167, 153, 290)
)
print(livros)
##                                     titulo            autor ano_publicacao
## 1             Como vender mesmo sem querer Michael McCarthy           2015
## 2 Ansiedade como enfrentar o mal do século     Augusto Cury           2013
## 3                        O grande conflito  Ellen G. Whinte           2007
##   num_paginas
## 1         167
## 2         153
## 3         290

2ª Lista de Exercício.

Exercicio 01. 1) Calcular o salário mensal final de um vendedor. As seguintes informações determinam esse valor: a) salário fixo – R$ 5000,00 b) total de vendas por ele efetuadas – R$ 20.000,00 c) percentual que ele recebe sobre o total de vendas – 5% d) INSS de 11% sobre o salário fixo. e) IR de 27% sobre o total de rendimentos.

salario_fixo <- 5000
total_vendas <- 20000
comissao <- 0.05
inss <- 0.11
ir <- 0.27

# Calculando o valor da comissão
valor_comissao <- total_vendas * comissao

# Calculando o salário bruto
salario_bruto <- salario_fixo + valor_comissao

# Calculando o valor do INSS
valor_inss <- salario_fixo * inss

# Calculando a base de cálculo para o IR
base_ir <- salario_bruto - valor_inss

# Calculando o valor do IR
valor_ir <- base_ir * ir

# Calculando o salário líquido final
salario_liquido <- salario_bruto - valor_inss - valor_ir
cat("O salário mensal final do vendedor é R$", round(salario_liquido, 2))
## O salário mensal final do vendedor é R$ 3978.5

2 Exercício Exercício 1) calculando o salário mensal da seguinte lista abaixo. NOME Salario_Base Vendas VENDEDOR 1 1800 20000 VENDEDOR 2 2500 30000 VENDEDOR 3 2500 25000 VENDEDOR 4 3000 15000 VENDEDOR 5 3500 27000 VENDEDOR 6 4000 30000 VENDEDOR 7 5000 32000 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 Exercício 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 5000 foliõ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 plástico sai a R$ 0,20.

Faça uma função para o lucro.

Resolvendo a 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 Exercício Elabore um data.frame com as seguintes informações: Nome_Aluno Diciplina_1 Diciplina_2 Diciplina_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.

Respostas a) A média de cada aluno (CR)

# 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 1 Luiz Fortes

Trabalho de Programação Linear 01

Carregando as Bibliotecas Necessárias

library(lpSolve)
library(lpSolveAPI)
library(kableExtra)

Execício 1: Uma pequena empresa vende dois produtos, Produto 1 e Produto 2. Cada tonelada do Produto 1 consome 30 horas de trabalho e cada tonelada do Produto 2 consome 20 horas de trabalho. A empresa tem no máximo 2700 horas de trabalho para o período considerado. Além disso, cada tonelada dos Produtos 1 e 2 consome 5 e 10 horas de máquina para processar a matéria prima, respectivamente. Sabe-se que a empresa tem 850 horas disponíveis para processamento da matéria prima. Cada tonelada vendida do Produto 1 gera 20 mil reais de lucro enquanto para o Produto 2 o valor é de 60 mil reais. Por razões técnicas a empresa deve produzir no mínimo um total de 95 toneladas. Nosso objetivo é saber quantas toneladas dos dois produtos devem ser produzidas para maximar o lucro total da empresa.

library(lpSolve)

# coeficientes de P1 e P2 na função objetivo 
func.objetivo <- c(20000 , 60000) # c' 
# coeficientes de P1 e P2 nas restrições. Sempre em matriz como mostrado no texto acima
coeficientes.restricoes <- matrix (c(30, 20, 5, 10, 1, 1), ncol = 2 , byrow = TRUE) # Matriz A
# sinal das restrições. Deve obedecer a ordem da matriz de coeficientes
direcao.restricoes <- c("<=","<=",">=")
# limite das restrições. Deve obedecer a ordem da matriz de coeficientes
limites.restricoes <- c(2700, 850, 95) # vetor b
##########################
####     SOLUÇÃO     #####
##########################
# Basicamente, usamos a função lp do pacote lpSolve 
# com os seguintes parâmetros:
# direction: que recebe max ou min dependendo se o problema é 
# de maximização ou minização, respectivamente
# objective.in: que recebe o nome do vetor com parâmetros da função objetivo
# const.mat: que recebe o nome da matriz com coeficientes das restrições
# const.rhs: que recebe o nome do vetor com os limites das restrições
# mais opções da função podem ser obtidas por meio do help(lp)
solucao.problema <- lpSolve::lp(direction = "max",             
                                objective.in = func.objetivo,  
                                const.mat = coeficientes.restricoes,
                                const.dir = direcao.restricoes,
                                const.rhs = limites.restricoes)
# ou
solucao.problema <- lpSolve::lp ("max", func.objetivo, coeficientes.restricoes, 
                       direcao.restricoes, limites.restricoes)
solucao.problema$objval
## [1] 4900000
solucao.problema$solution
## [1] 20 75

Exercício 2: A Fábrica Marvel Toy deseja fazer três modelos de barcos de brinquedo para melhorar as suas vendas.Eles descobriram que um modelo donavio a vapor leva uma hora no cortador, 2 horas na pintura, e 4 horas de trabalhona montagem. Este modelo produz $ 6 de lucro. O modelo do veleiro de quatro mastros leva 3 horas no cortador,3 horasna pinturae 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.

1.1.1 Modelagem do Problema Max: 6p1 + 3P2 + 2p3 - c(20000, 60000)

sa: 1P1 + 3P2 + 1p3 <= 45

2P1 + 3P2 + 3p3 <= 50

4P1 + 2P2 + 1p3 >= 60

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

Exercício 3: 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:

Custo clientes TV diurna TV Hor.Nobre Rádio Revista Custo de 1 unidade 40.000 75.000 30.000 15.000 N. pot clientes alcançados p/ un 400.00 900.000 500.000 200.000 N. mulheres clientes alcançados p/un 300.000 400.000 200.000 100.000 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.

1.2.1 Modelagem do Problema Maximizar: Z = 400x1 + 900x2 + 500x3 + 200x4.

S.A: 40x1 + 75x2 + 30x3 + 15x4 <= 800

300x1 + 400x2 + 200x3 + 100x4 >= 2.000

40x1 + 75x2 <= 500

x1 >= 3

x2 >= 2

x3 >= 5

x3 <= 10

x4 >= 5

x4 <= 10

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

Exercício 4

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

Exercício 5

A fim de se produzir 1000 toneladas de aço não oxidante para válvulas de motor, pelo menos as seguintes quantidades de manganês, cromo e molibdênio, serão necessários semanalmente: 10 unidades de manganês, 12 unidades de cromo e 14 unidades de molibdênio (uma unidade corresponde a 10Kg). Esses metais são obtidos de revendedores de metais não ferrosos, que, para atrair os mercados os disponibilizam em caixas de três tamanhos, P, M e G. Uma caixa P custa $ 9 e contém 2 unidades de manganês, 2 unidades de cromo e 1 unidade de molibdênio. Uma caixa M custa $ 12 e contém 2 unidades de manganês, 3 unidades de cromo e 1 unidade de molibdênio. Um caso G custa US $ 15 e contém 1 unidade de manganês, 1 unidade de cromo e 5 unidades de molibdênio. Quantas caixas de cada tipo devem ser compradas semanalmente para que as quantidades necessárias de manganês, cromo e molibdênio sejam obtidas no menor custo possível? Qual é o menor custo possível? Formule e resolva por programação linear.

func.obj <- c(9,12,15)
restricoes <- matrix (c(2,2,1,2,3,1,1,1,5), ncol = 3, byrow = TRUE)
direcao.restricoes <- c(">=",">=",">=")
limites.restricoes <- c(10,12,14)




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 72

Exercício 6

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

Exercício 7

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

Exercício 8

Um avião de carga possui três compartimentos para armazenamento de carga: dianteiro, central e traseiro. Esses compartimentos têm os seguintes limites de peso e espaço:

Compartimento Capacidade_de_Peso_Ton Capacidade_de_Espaço_m3 Frente 10 6800 Centro 16 8700 Traseira 8 5300

Além disso, o peso da carga nos respectivos compartimentos deve ter a mesma proporção da capacidade de peso daquele compartimento para manter o equilíbrio do avião. As quatro cargas a seguir estão disponíveis para embarque no próximo voo:

Carga Peso_da_Carga_ton Volume_m3_por_ton Lucro_euro_por_ton C1 18 480 310 C2 15 650 380 C3 23 580 350 C4 12 390 285

Qualquer proporção dessas cargas pode ser aceita. O objetivo é determinar quanto (se houver) de cada carga C1, C2, C3 e C4 deve ser aceita e como distribuir cada um entre os compartimentos para que o lucro total do voo seja maximizado.

# Função Objetivo -> Max z: 310X1 + 310X2 + 310X3 + 380X4 + 380X5 + 380X6 + 350X7 + 350X8 + 350X9 + 285X10 + 285X11 + 285X12

# Restrições: 
#      1X1 + 1X4 + 1X7 + 1X10 <= 10
#      1X2 + 1X5 + 1X8 + 1X11 <= 16
#      1X3 + 1X6 + 1X9 + 1X12 <= 8
#      480X1 + 650X4 + 580X7 + 390X10 <= 6.800
#      480X2 + 650X5 + 580X8 + 390X11 <= 8.700
#      480X3 + 650X6 + 580X9 + 390X12 <= 5.300
#      X1 + X2 + X3 <= 18
#      X4 + X5 + X6 <= 15
#      X7 + X8 + X9 <=23
#      X10 + X11 + X12 <-12


# Coeficiente das variáveis de decisão na Função Objetivo

FO <- c(310, 310, 310, 380, 380, 380, 350, 350, 350, 285, 285, 285)

# Coeficientes das variáveis de decisão nas restrições

restricoes <- matrix(c(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0,
                       0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
                       0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
                       480, 0, 0, 650, 0, 0, 580, 0, 0, 390, 0, 0,
                       0, 480, 0, 0, 650, 0, 0, 580, 0, 0, 390, 0,
                       0, 0, 480, 0, 0, 650, 0, 0, 580, 0, 0, 390,
                       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                       0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
                       0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
                       0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1), ncol = 12, byrow = TRUE)

# Sinal das restrições. Deve obedecer a ordem das matriz

direcao.restricoes <- c("<=", "<=", "<=", "<=", "<=", "<=", "<=", "<=", "<=", "<=")

#Limite dasrestrições. Deve obedecer a ordem da matriz

limites.restricoes <- c(10, 16, 8, 6800, 8700, 5300, 18, 15, 23, 12)

# Solução do Problema

solucao.problema <- lpSolve::lp ("max", FO, restricoes, direcao.restricoes, limites.restricoes)

solucao.problema$objval
## [1] 12151.58
solucao.problema$solution
##  [1]  0.000000  0.000000  0.000000 10.000000  0.000000  5.000000  0.000000
##  [8] 12.947368  3.000000  0.000000  3.052632  0.000000
solucao.problema$scale
## [1] 196