Exercicio 1

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 <- 5
B <- 10
C <- 15

resultado <- c(A + B, A + C, B + C)
resultado
## [1] 15 20 25

Exercicio 2

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 <- 6
B <- 8
temp <- A
A <- B
B <- temp
cat("A =", A, "e B =", B)
## A = 8 e B = 6

Exercicio 3

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

# Definindo a temperatura em Fahrenheit
F <- 77

# Convertendo para Celsius
C <- (F - 32) * (5/9)

# Imprimindo o resultado
C
## [1] 25

Exercicio 4

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

X <- 10
Y <- (X * 2) + 5
Z <- (X * 3) - Y
Y
## [1] 25
Z
## [1] 5

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

e) Referencie os valores do vetor com o comando: “vetor[i]”, onde “i” é o índice referência (número)

vetor <- c(1:10)

for (i in 1:length(vetor)) {
  print(paste("Valor refderenciado", i, ":", vetor[i]))
}
## [1] "Valor refderenciado 1 : 1"
## [1] "Valor refderenciado 2 : 2"
## [1] "Valor refderenciado 3 : 3"
## [1] "Valor refderenciado 4 : 4"
## [1] "Valor refderenciado 5 : 5"
## [1] "Valor refderenciado 6 : 6"
## [1] "Valor refderenciado 7 : 7"
## [1] "Valor refderenciado 8 : 8"
## [1] "Valor refderenciado 9 : 9"
## [1] "Valor refderenciado 10 : 10"

Exercicio 6

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

vetor <- c(1:10)
media <- mean(vetor)
print(media)
## [1] 5.5

Exercicio 7

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 <- 5
y <- 10

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

Exercicio 8

Repita o exercício “7)” realizando os seguintes ajustes:

Substitua o sinal de maior (“>”) pelo de menor ou igual (“<=”) e ajuste dos dizeres da resposta.

x <- 10
y <- 20
if (x <= y) {
  print("x é menor ou igual a y")
} else {
  print("x é maior que y")
}
## [1] "x é menor ou igual a y"

Exercicio 9

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

# criação do vetor
vetor <- c(1:10)

inicialização da soma

soma <- 0

loop para calcular a soma se o número é par ou ímpar

for (i in vetor) {
  if (i %% 2 == 0) { 
    soma <- soma + i 
  }
}


print(soma)
## [1] 30

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

Repita o exercício “14)” com os dados do data.frame do exercício “13)” recriando a matriz e transformá-la em um data.frame:

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

# Transformando em data.frame
df <- as.data.frame(matriz)

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.

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

2. 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"

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

4. 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("João", "Maria", "Pedro")
idades <- c(30, 25, 35)
cidades <- c("São Paulo", "Rio de Janeiro", "Belo Horizonte")
pessoas <- data.frame(nome = nomes, idade = idades, cidade_natal = cidades)
print(pessoas)
##    nome idade   cidade_natal
## 1  João    30      São Paulo
## 2 Maria    25 Rio de Janeiro
## 3 Pedro    35 Belo Horizonte

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

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

7. 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("João", "Maria", "Pedro"), idade = c(25, 30, 35), 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  João    25
## 2 Maria    30
## 3 Pedro    35

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

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

10. 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("O Cortiço", "Memórias Póstumas de Brás Cubas", "Iracema"),
  autor = c("Aluísio Azevedo", "Machado de Assis", "José de Alencar"),
  ano_publicacao = c(1890, 1881, 1865),
  num_paginas = c(336, 272, 168)
)
print(livros)
##                            titulo            autor ano_publicacao num_paginas
## 1                       O Cortiço  Aluísio Azevedo           1890         336
## 2 Memórias Póstumas de Brás Cubas Machado de Assis           1881         272
## 3                         Iracema  José de Alencar           1865         168

Núcleo 9 – Ciclo 1

Revisão de Programação em RStudio Parte 2

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

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

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

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