Exercicios 1.1

O que vem a ser um algoritmo?

Um algoritmo é uma sequência finita e ordenada de instruções bem definidas e executáveis que resolvem um problema específico. 

Exercicios 1.2

###Segundo o livro da referência, quais são as etapas para a construção de um algoritmo?

Entender o problema: O primeiro passo é entender o problema que o algoritmo deve resolver. É importante entender os requisitos e as limitações do problema para criar um algoritmo eficaz.

Definir a entrada e a saída: Em seguida, é preciso definir quais serão os dados de entrada e saída do algoritmo. É importante definir claramente os tipos de dados, como eles serão fornecidos e como serão exibidos.

Identificar os passos: A próxima etapa é identificar os passos necessários para resolver o problema. É importante criar uma lista clara de passos que o algoritmo deve seguir para atingir o resultado esperado.

Organizar os passos: Após identificar os passos, é preciso organizar a sequência dos mesmos em uma ordem lógica e coerente, levando em consideração a eficiência do algoritmo.

Testar e ajustar: Após criar o algoritmo, é importante testá-lo para garantir que ele resolva o problema de maneira correta e eficiente. Caso necessário, é preciso fazer ajustes no algoritmo para melhorar seu desempenho.

Documentar: Por fim, é importante documentar o algoritmo, para que outras pessoas possam entendê-lo e usá-lo no futuro.

Exercicio 1.3

###Quais são os passos para a construção de um algoritmo?

"Entender o problema: O primeiro passo é entender claramente o problema que o algoritmo deve resolver. Isso envolve identificar os requisitos e as limitações do problema, bem como as informações necessárias para resolvê-lo.

Identificar as entradas e saídas: Em seguida, é preciso identificar quais são os dados de entrada necessários para o algoritmo e o que ele deve produzir como saída. Isso pode incluir informações como números, texto, imagens, entre outros.

Projetar a solução: Com base nas informações identifica das nas etapas anteriores, é preciso projetar a solução para o problema. Isso envolve identificar os passos específicos que o algoritmo deve seguir para chegar à solução, bem como os métodos e estruturas de dados que serão usados.

Escrever o algoritmo: Com a solução projetada, é possível escrever o algoritmo usando uma linguagem de programação. Isso envolve codificar os passos identificados na etapa anterior de maneira clara e precisa.

Testar e depurar: Depois de escrever o algoritmo, é importante testá-lo para garantir que ele funcione corretamente. Isso envolve executar o algoritmo com diferentes entradas e verificar se a saída está correta. Se houver erros, é necessário depurá-los para corrigi-los.

Otimizar: Se o algoritmo estiver funcionando corretamente, é possível otimizá-lo para melhorar sua eficiência e desempenho. Isso envolve fazer mudanças no algoritmo para torná-lo mais rápido ou usar menos recursos.

Documentar: Por fim, é importante documentar o algoritmo para que outras pessoas possam entendê-lo e usá-lo no futuro. Isso pode envolver escrever comentários no código, criar documentação técnica ou fornecer exemplos de uso"

Exercicio 1.4

###Faça um algoritmo, apresentando cada passo, para ao seguinte problema:um homem precisa atravessar um rio com um barco que possui capacidade somente para carregar ele mesmo e mais uma de suas três cargas, que são um lobo, uma cabra e um repolho. O que o homem deve fazer para conseguir atravessar o rio sem perder suas cargas? Escreva os passos necessários mostrando a resposta, ou seja, indicando todas as ações necessárias para efetuar uma travessia segura.

Informações do exercício: Homem, Barco, Lobo, Bode e Alface

Ações necessárias para atravessar o rio e não perder as cargas

Obj final: Atravessar todas as cargas, até ao outro lado da margem do Rio.

Resposta:

  inicio

O homem leva a cabra para a outra margem do rio. (O homem volta sozinho.)
    
O homem leva o lobo para a outra margem do rio. (O homem retorna com a cabra.)

O homem deixa a cabra na primeira margem e leva o repolho para a outra margem do rio. (O homem volta sozinho.)

O homem leva a cabra para a outra margem do rio.

fim

Exercicio 1.5

###Faça um algoritmo, apresentado cada passo, para ao seguinte problema: três jesuítas e três canibais precisam atravessar um rio; para tal dispõem de um barco com capacidade para duas pessoas. Por medidas de segurança, não se deve permitir que em alguma margem a quantidade de jesuítas seja inferior a de canibais. Qual a solução para efetuar a travessia com segurança? Elabore os passos de forma a mostrar a resposta, indicando as ações que concretizam a resolução deste problema.

Resposta:

Informações do exercício: Três Jesuítas, Barco, Três Canibais

Ações necessárias para atravessar o rio com a devida segurança

Objetivo final: Atravessar todos os três Jesuítas e os três canibais até ao outro lado da margem do Rio.

inicio

Dois jesuítas cruzam o rio. (Um jesuíta e dois canibais permanecem na margem.)
Um jesuíta retorna para a margem inicial e dois canibais cruzam o rio. (Um jesuíta e um canibal permanecem na margem.)

Dois jesuítas cruzam o rio. (Três canibais permanecem na margem.)

Um jesuíta retorna para a margem inicial e dois canibais cruzam o rio. (Dois jesuítas e um canibal permanecem na margem.)

Dois jesuítas cruzam o rio. (Dois canibais permanecem na margem.)

Um jesuíta retorna para a margem inicial e dois canibais cruzam o rio. (Um jesuíta e dois canibais permanecem na margem.)

Dois jesuítas cruzam o rio.

fim

Exercicio 1.6

###Criar três variáveis que contenham números e apresentar o resultado da soma das combinações dois a dois destes três números. Por exemplo, se forem lidos A, B e C, mostrar A + B, A + C, B + C.

a <- 20
b <- 8
c <- 12

a + b
## [1] 28
a + c
## [1] 32
b + c
## [1] 20

Exercicio 1.7

###Criar 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 <- 5
B <- 15
cat("A e B são ", A, " e " , B)
## A e B são  5  e  15
Aux <- 0

Aux <- A
A <- B
B <- Aux

cat("A e B são ", A, " e " , B)
## A e B são  15  e  5

Exercicio 1.8

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

Temperatura <- 42

graus_celsius <- (Temperatura - 32) * (5/9)

cat("A temperatura equivalente é ", graus_celsius)
## A temperatura equivalente é  5.555556

Exercicio 1.9

###Crie uma variável X e calcule:

x <- 2

# a) X3 - 4
x^3 -4
## [1] 4
# b) O resto da divisão de X / 3
x %% 3
## [1] 2
# c) X(x/3) + 2
x^3 -4
## [1] 4
# d) Raiz quadrada de x^2

sqrt(x^2)
## [1] 2

Exercicio 1.10

Crie 11 variáveis com os valores abaixo, calcule a soma e mostre-a no final.

x1 <- 3
x2 <-5
x3 <-7
x4 <-4
x5 <-3
x6 <-2
x7 <-1
x8 <-9
x9 <-12
x10 <-15
x11 <-9

media <- (x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+x11)/11

cat("Média é =", media)
## Média é = 6.363636

Exercicio 1.11

###Calcule o fatorial de um número

mult <- 1

x <- 8

for(i in 1:8){
  mult <- mult * i
}

cat("O valor do fatorial é: ", mult)
## O valor do fatorial é:  40320

Exercicio 1.12

###Crie uma matriz 4x4.

matriz <- matrix(data = 1, nrow = 4, ncol = 4, byrow = TRUE)
matriz
##      [,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 1.13

###Crie uma matriz com a sequência de 1 a 16

matriz <- matrix(data = 1:16, nrow = 4, ncol = 4, byrow = TRUE)
matriz
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
## [4,]   13   14   15   16

Exercicio 1.14

###Transforme essa matriz em um data.frame

df <- as.data.frame(matriz)
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 1.15

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

## a. a média de uma coluna da matriz do exercicio 13
soma <- 0
for( i in 1:4) {
  soma <- soma + matriz[i,2]
}

media <- soma/i

media
## [1] 8
## b. A média de todas as colunas da matriz do exercicio 13
for(ypsolon in 1:4){
  soma <- 0
  for(i in 1:4){
    soma <- soma + matriz[i,ypsolon]
  }
    
  media <- soma/i
  print(media)
}
## [1] 7
## [1] 8
## [1] 9
## [1] 10
##  c. A média de todas as linhas do exercicios 13
for(i in 1:4){
  soma <- 0
  for(j in 1:4){
  soma <- soma + matriz[i,j]
    }
  media <- soma/j
  print(media)
  }
## [1] 2.5
## [1] 6.5
## [1] 10.5
## [1] 14.5
## d. A média dos numeros pares de todas as colunas 

v_soma_npar_colunas <- rep(0,4) # repete 4 vezes o valor 0

for(linha in 1:4){
  for(coluna in 1:4){
    if(matriz[linha, coluna]%%2 == 0){
      v_soma_npar_colunas[coluna] <- v_soma_npar_colunas[coluna] + matriz[linha, coluna]}
  }
}

v_soma_npar_colunas
## [1]  0 32  0 40
for(coluna in 1:4){
  soma <- 0
  contador <- 0
  for(linha in 1:4){
    if(matriz[linha,coluna]%%2 != 0){
      soma <- soma + matriz[linha,coluna]
    }
  }
    
  media <- soma/i
  print(media)
}
## [1] 7
## [1] 0
## [1] 9
## [1] 0
media_npar_colunas <- v_soma_npar_colunas/linha
media_npar_colunas
## [1]  0  8  0 10
## e. a média dos números ímpares de todas as linhas da matriz do exercício “12)”.

v_soma_nimpar_linhas <- rep(0,4) # repete 4 vezes o valor 0
cont <- rep(0,4)

for(linha in 1:4){
  for(coluna in 1:4){
    if(matriz[linha, coluna]%%2 != 0){
      v_soma_nimpar_linhas[linha] <- v_soma_nimpar_linhas[linha] + matriz[linha, coluna]
      cont[linha] <- cont[linha] +1}
  }
}

v_soma_nimpar_linhas
## [1]  4 12 20 28
cont
## [1] 2 2 2 2
media_nimpar_linhas <- rep(0,4)

for(linha in 1:dim(matriz)[1]){
  if(cont[linha] != 0){
    media_nimpar_linhas[linha] <- v_soma_nimpar_linhas[linha]/cont[linha]}
  else{
    media_nimpar_linhas[linha] <- 0
  }
}

media_nimpar_linhas
## [1]  2  6 10 14
## f. a soma da diagonal principal da matriz.
soma_diagonal <- 0

for(linha in 1:4){
  for(coluna in 1:4){
    if(linha == coluna){
      soma_diagonal <- soma_diagonal + matriz[linha, coluna]}
  }
}

soma_diagonal
## [1] 34
## g. a soma da diagonal secundária da matriz 
soma_diagonal_secundaria <- 0

for(linha in 1:4){
  for(coluna in 1:4){
    if((linha + coluna) == 5){
      soma_diagonal_secundaria <- soma_diagonal_secundaria + matriz[linha, coluna]}
  }
}

soma_diagonal_secundaria
## [1] 34

Exercicio 1.16

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

df <- as.data.frame(matriz)

soma_coluna <- 0

for(linha in 1:dim(df)[1]){
  for(coluna in 1:dim(df)[2]){
    if(coluna == 2){ # serão somados somente os valores da coluna 2
      soma_coluna <- soma_coluna + df[linha, coluna]
    }
  }
}

media_coluna <- soma_coluna/dim(df)[1]
media_coluna
## [1] 8

Exercicio 1.17

###Crie uma matriz VALOR 6x6 e calcule a soma de cada uma das linhas da matriz. Os valores das somas calculadas devem ser armazenados em um vetor. Ao final do programa o vetor deve ser impresso.

v <- matrix(data = 1:36, nrow = 6, ncol = 6, byrow = TRUE)
Res <- rowSums(v)
print(Res)
## [1]  21  57  93 129 165 201

Exercicio 1.18

###Crie um data.frame D 5x5 e calcule a média dos valores armazenados na diagonal principal e a soma dos valores armazenados na diagonal secundária.

df2 <- as.data.frame(matrix(data = 1:25, nrow = 5, ncol = 5, byrow = TRUE))

# Média dos valores diagonal principal

dp1 <- 1

dp2 <- 7

dp3 <- 13

dp4 <- 19

dp5 <- 25


somadiaprinc <-  dp1 + dp2 + dp3 + dp4 + dp5 

MEDIA <- somadiaprinc/5 
print(MEDIA)
## [1] 13
# VALORES ARMAZENADOS NA DIAGONAL SECUNDÁRIA

ds6 <- 5

ds7 <- 9

ds8 <- 13

ds9<- 17

ds10 <- 21

somadiagsecun <- ds6 + ds7 + ds8 + ds9 + ds9
print(somadiagsecun)
## [1] 61

Exercicio 1.19

###Crie um data.frame D 4x4, que contenha números entre 0 e 100, e calcule e imprima: a) A média dos valores pares armazenados no data.frame; b) A quantidade de elementos com valor maior que 50; c)A média dos valores ímpares menores que 30 armazenados no data.frame; d)A soma dos valores das colunas ímpares. e)O maior e o menor valor armazenado

set.seed(123)
D <- data.frame(matrix(sample(0:100, 16, replace = TRUE), nrow = 4))

colnames(D) <- c("A", "B", "C", "D")

# calculando a média dos valores pares

media_pares <- mean(D[D %% 2 == 0])

# calculando a quantidade de elementos maiores que 50

maiores_50 <- sum(D > 50)

# calculando a média dos valores ímpares menores que 30

media_impares <- mean(D[D %% 2 != 0 & D < 30])

# calculando a soma dos valores das colunas ímpares

soma_colunas_impares <- sum(D[, c(TRUE, FALSE)])

# encontrando o maior e o menor valor

maior_valor <- max(D)
menor_valor <- min(D)

# imprimindo os resultados

cat("Média dos valores pares: ", media_pares, "\n")
## Média dos valores pares:  63.09091
cat("Quantidade de elementos maiores que 50: ", maiores_50, "\n")
## Quantidade de elementos maiores que 50:  8
cat("Média dos valores ímpares menores que 30: ", media_impares, "\n")
## Média dos valores ímpares menores que 30:  13
cat("Soma dos valores das colunas ímpares: ", soma_colunas_impares, "\n")
## Soma dos valores das colunas ímpares:  397
cat("Maior valor armazenado: ", maior_valor, "\n")
## Maior valor armazenado:  100
cat("Menor valor armazenado: ", menor_valor, "\n")
## Menor valor armazenado:  13

Exercicio 1.20

Faça um programa em RStudio que com base no salário de um funcionário (criado por vocês), calcule e mostre o seu salário a receber, sabendo-se que esse funcionário tem gratificação de 5% sobre seu salário base e paga 10% de imposto sobre o salário base.

salario_base <- 3000
grat <- salario_base * 0.05
imposto <- salario_base * 0.1

salario <- salario_base + grat - imposto

salario
## [1] 2850

Exercicio 1.21

salario_fixo <- 3000
tot_vendas <- 25000
grat_vendas <- tot_vendas * 0.05
irpf <- salario_fixo * 0.075
inss <- (salario_fixo + grat_vendas) * 0.11

salario <- salario_fixo + grat_vendas - irpf - inss

cat(" BILHETE DE PAGAMENTO \n",
 "-------------------------------------------", "\n",
 "Sálario base"               , salario_fixo, "\n",
 "Gratificação de vendas"     , grat_vendas, "\n",
 "Imposto de Renda"           , irpf, "\n",
 "INSS"                       , inss, "\n",
 " ------------------------------------------------", "\n",
 "Liquido a receber"         , salario
 )
##  BILHETE DE PAGAMENTO 
##  ------------------------------------------- 
##  Sálario base 3000 
##  Gratificação de vendas 1250 
##  Imposto de Renda 225 
##  INSS 467.5 
##   ------------------------------------------------ 
##  Liquido a receber 3557.5

Exercicio 1.22

Efetuar a estimativa da quantidade de litros de cerveja consumida por um determinado bloco durante o carnaval. Outras informações: • o bloco tem 1000 pessoas; • cada pessoa consome em média 3 latões; • considerar que uma caixa de cerveja tem 12 latões; • sabe-se que cada latão tem 473 ml e que 1 litro tem 1000 ml; • considerar que o carnaval são quatro dias

n_pessoas <- 1000

media_consumo <- 3

latoes_por_caixa <- 12

ml_por_latao <- 473

ml_por_litro <- 1000

dias_carnaval <- 5

preco_custo_caixa <- 42

preco_venda_caixa <- 84


# Calcular o consumo total em litros

litros_total <- n_pessoas * media_consumo * ml_por_latao / ml_por_litro * dias_carnaval


# Calcular a quantidade de caixas de cerveja consumidas em um dia

caixas_por_dia <- (n_pessoas * media_consumo) / latoes_por_caixa


# Calcular a quantidade de caixas de cerveja consumidas em cinco dias

caixas_cinco_dias <- caixas_por_dia * dias_carnaval


# Calcular o lucro auferido

lucro_por_caixa <- preco_venda_caixa - preco_custo_caixa

lucro_total <- lucro_por_caixa * caixas_cinco_dias


# Imprimir resultados

cat("Quantidade de caixas de cerveja consumidas por dia:", round(caixas_por_dia, 2), "\n")
## Quantidade de caixas de cerveja consumidas por dia: 250
cat("Quantidade de caixas de cerveja consumidas em cinco dias:", round(caixas_cinco_dias, 2), "\n")
## Quantidade de caixas de cerveja consumidas em cinco dias: 1250
cat("Consumo total de cerveja em litros:", round(litros_total, 2), "\n")
## Consumo total de cerveja em litros: 7095
cat("Lucro auferido em cinco dias:", round(lucro_total, 2))
## Lucro auferido em cinco dias: 52500

Exercicio 1.23

Dois times de futebol fizeram uma disputa entre eles e jogaram 10 partidas. Os resultados de cada jogo foram armazenados em uma matriz JOGO 10x2, onde cada linha representa um jogo e cada coluna um time. Faça um programa em RStudio que calcule a média de gols realizados por cada time.

jogo <- matrix(data = 
  c(4,2,2,3,5,2,1,3,2,1,1,1,1,1,1,1,1,1,1,1), ncol = 2)

soma_fla <- 0
soma_flu <- 0
for(i in 1:10){
  soma_flu <- soma_fla + jogo[i,2]
  soma_fla <- soma_fla + jogo[i,1]
}
 media_fla <-soma_fla/10
 media_flu <-soma_flu/10
 
 cat("A média de gols do Fla foi", media_fla, "\n")
## A média de gols do Fla foi 2.5
 cat("A média de gols do Flu foi", media_flu, "\n")
## A média de gols do Flu foi 2.5