# Session Three: It's always time to restart | Fund. Lógica
>[color=pink]**Autor:** Letícia Rodrigues da Silva
**Turma:** IndoD
**Número:** 25
[TOC]
## Exercício 1
**Crie uma classe representando a abstração de função
e/ou dados ao lado. Abaixo a especificação das
situações a serem resolvidas:
▪ Calcular a área do retângulo baseado em sua
altura e base.
▪ Calcular o perímetro do retângulo baseado em
sua altura e base.
▪ Verificar se dois retângulos são iguais baseado em
suas áreas.**
```csharp=
public class Trigonometria
{
public int AreaRetangulo(int basee, int altura)
{
int area = basee * altura;
return area;
}
public int PerimetroRetangulo(int basee, int altura)
{
int perimetro = basee + basee + altura + altura;
return perimetro;
}
public bool RetanguloIguais(int a1, int b1, int a2, int b2)
{
double area1 = a1 * b1;
double area2 = a2 * b2;
bool verificar = area1 == area2;
return verificar;
}
}
Trigonometria t = new Trigonometria();
double r = t.AreaRetangulo(15, 5);
Console.WriteLine(r);
Console.WriteLine();
double p = t.PerimetroRetangulo(3, 8);
Console.WriteLine(p);
Console.WriteLine();
bool v = t.RetanguloIguais(12, 4, 8, 6);
Console.WriteLine(v);
// 75
// 22
// True
```
## Exercício 2
**Crie uma classe representando a abstração de função
e/ou dados ao lado. Abaixo a especificação das
situações a serem resolvidas:
▪ Calcular a área do retângulo baseado em sua
altura e base abstraído em um tipo composto.
▪ Calcular a área do triângulo baseado em sua
altura e base abstraído em um tipo composto.
▪ Calcular a área do paralelogramo baseado em sua
altura e base abstraído em um tipo composto.**
```csharp=
public class Forma
{
public double basee {get; set;}
public double altura {get; set;}
}
public class Trigonometria
{
public double AreaRetangulo(Forma f)
{
double area = f.basee * f.altura;
return area;
}
public double AreaTriangulo(Forma f)
{
double area = (f.basee * f.altura) / 2;
return area;
}
public double AreaParalelogramo(Forma f)
{
double area = f.basee * f.altura;
return area;
}
}
Trigonometria t = new Trigonometria();
Forma tri = new Forma();
tri.altura = 10;
tri.basee = 4;
double x = t.AreaRetangulo(tri);
Console.WriteLine(x);
Console.WriteLine();
double y = t.AreaTriangulo(tri);
Console.WriteLine(y);
Console.WriteLine();
double z = t.AreaParalelogramo(tri);
Console.WriteLine(z);
// 40
// 20
// 40
```
## Exercício 3
**Crie uma classe representando a abstração de função e/ou
dados ao lado. Abaixo a especificação das situações a
serem resolvidas:
▪ Retorne o primeiro dia do mês a partir de uma data.
▪ Retorne o último dia do mês a partir de uma data.
▪ Verifique se o mês possui 31 dias a partir de uma data.
▪ Verifique se uma data cai em uma sexta-feira 13
▪ Retorne quantas semanas faltam para chegar no
aniversário de uma pessoa a partir de seu nome e data
de aniversário abstraído em um tipo composto. O
retorno deve seguir o template: “XXXX, faltam XXXX
semanas para seu niver.”
▪ Retorne se uma pessoa é de Libra a partir do dia em
que nasceu abstraído em um tipo composto.**
```csharp=
using System;
public class Pessoa
{
public string Nome;
public DateTime Niver;
}
public class Calendario
{
public DateTime PrimeiroDia(DateTime data)
{
DateTime primeiroDia = new DateTime(data.Year, data.Month, 1);
return primeiroDia;
}
public DateTime UltimoDia(DateTime data)
{
DateTime dia = new DateTime(2021, 05, 10);
DateTime proxMes = new DateTime(data.Year, data.Month, 1);
DateTime p = proxMes.AddMonths(1);
DateTime ultimoDia = p.AddDays(-1);
return ultimoDia;
}
public bool Possui31Dias(DateTime data)
{
bool possui = DateTime.DaysInMonth(data.Day, data.Month) == 31;
return possui;
}
public bool SextaFeira13(DateTime data)
{
bool sexta = data.DayOfWeek == DayOfWeek.Friday;
bool sexta13 = data.Day == 13;
return sexta13 && sexta;
}
public string SemanaParaNiver(Pessoa pessoa)
{
DateTime dia = DateTime.Now;
DateTime d = new DateTime(2021, 08, 31);
int totalDias = (d - dia).Days / 7;
string mensagem = pessoa.Nome + ", faltam " + totalDias + " semanas para seu niver.";
return mensagem;
}
public bool SouLibra (Pessoa pessoa)
{
bool mes = pessoa.Niver.Month == 9 && pessoa.Niver.Day > 22;
bool mes1 = pessoa.Niver.Month == 10 && pessoa.Niver.Day <23;
bool libra = mes == true || mes1 == true;
return libra;
}
}
Calendario c = new Calendario();
Pessoa p = new Pessoa();
p.Niver = new DateTime(2003, 08, 31);
p.Nome = "Letícia";
DateTime pri = new DateTime(2021, 04, 01);
Console.WriteLine(c.PrimeiroDia(pri));
Console.WriteLine();
DateTime ult = new DateTime(2021, 08, 20);
Console.WriteLine(c.UltimoDia(ult));
Console.WriteLine();
DateTime possui = new DateTime(2021, 08, 10);
Console.WriteLine(c.Possui31Dias(possui));
Console.WriteLine();
DateTime dias = new DateTime(2021, 08, 13);
Console.WriteLine(c.SextaFeira13(dias));
Console.WriteLine();
string niver = c.SemanaParaNiver(p);
Console.WriteLine(niver);
Console.WriteLine();
bool signo = c.SouLibra(p);
Console.WriteLine(signo);
// 4/1/2021
// 8/31/2021
// True
// True
// Letícia, faltam 15 semanas para seu niver.
// False
```
## Exercício 4
**Crie uma classe representando a abstração de função
e/ou dados ao lado. Abaixo a especificação das
situações a serem resolvidas:
▪ Verifique se um cadastro de usuário é válido
seguindo as regras: (1) O e-mail deve ter o
caractere ‘@’ e possuir no mínimo 2 caracteres
antes e depois do ‘@’. (2) A senha precisa ter pelo
menos uma vogal, um caractere especial e
tamanho de 8 caracteres.
▪ Verifique se um domínio escolhido é válido se
terminar em ‘.com.br’ , se o primeiro caractere
não for um número e o domínio possuir 5
caracteres no mínimo.* Deve-se enviar o domínio completo.
ex: meudominio.com.br**
```csharp=
public class RegistroBrValidator
{
public bool ValidarCadastro(string email, string senha)
{
bool validar = email.Length >= 8;
bool validar1 = email.Contains("@");
bool vogal = senha.Contains("a") || senha.Contains("e") || senha.Contains("a") || senha.Contains("a") || senha.Contains("a");
bool caracters = senha.Contains("!") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@");
bool validarSenha = vogal && caracters;
int qsenha = senha.Length;
bool result = caracters == validarSenha == qsenha >= 8;
return result && validar && validar1 && validarSenha;
}
public bool ValidarDominio(string dominio)
{
bool v = dominio.EndsWith(".com.br");
bool caracter = dominio.Length >= 5;
return v && caracter;
}
}
RegistroBrValidator r = new RegistroBrValidator();
bool v = r.ValidarCadastro("le23@gmail.com", "le0!rodrig");
Console.WriteLine(v);
Console.WriteLine();
bool d = r.ValidarDominio("www.instagram.com.br");
Console.WriteLine(d);
// True
// True
```
## Exercício 5
**Crie uma classe representando a abstração de função
e/ou dados ao lado. Abaixo a especificação das
situações a serem resolvidas:
▪ Calcular a área do retângulo.
▪ Calcular o volume do cilindro.
▪ Verificar se dois retângulos são iguais baseado em
sua área. Utilize a ideia de função composta.
▪ Verificar se é possível transferir o conteúdo do
primeiro cilindro ao segundo. Utilize a ideia de
função composta.**
```csharp=
using System;
public class Retangulo
{
public double altura { get; set;}
public double basee { get; set;}
}
public class Cilindro
{
public double Raio { get; set;}
public double altura { get; set;}
}
public class Trigonometria
{
public bool AreasIguais(Retangulo ret1, Retangulo ret2)
{
double area1 = AreaRetangulo(ret1);
double area2 = AreaRetangulo(ret2);
bool igual = area1 == area2;
return igual;
}
public double AreaRetangulo(Retangulo ret)
{
double area = ret.basee * ret.altura;
return area;
}
public bool TransferenciaPossivel(Cilindro c1, Cilindro c2)
{
double cili = VolumeCilindro(c1);
double cili2 = VolumeCilindro(c2);
return cili == cili2;
}
public double VolumeCilindro(Cilindro cilindro)
{
double volume = Math.PI * (cilindro.Raio * cilindro.Raio) * cilindro.altura;
double arredondar = Math.Round(volume, 2);
return arredondar;
}
}
Trigonometria tri = new Trigonometria();
Retangulo ret1 = new Retangulo();
ret1.basee = 12;
ret1.altura = 5;
Retangulo ret2 = new Retangulo();
ret2.basee = 10;
ret2.altura = 3;
Cilindro cili = new Cilindro();
cili.altura = 8;
cili.Raio = 3.8;
Cilindro cili2 = new Cilindro();
cili2.altura = 20;
cili2.Raio = 8;
double a = tri.AreaRetangulo(ret1);
Console.WriteLine("Area do Retangulo é ret1: " + a);
Console.WriteLine();
double b = tri.AreaRetangulo(ret2);
Console.WriteLine("Area do Retangulo é ret2: " + b);
Console.WriteLine();
bool c = tri.AreasIguais(ret1, ret2);
Console.WriteLine("Os retangulos são iguais? " + c);
Console.WriteLine();
double d = tri.VolumeCilindro(cili);
Console.WriteLine("O volume do cilindro é: " + d);
Console.WriteLine();
bool e = tri.TransferenciaPossivel(cili, cili2);
Console.WriteLine("Transferencia é possível? " + e);
// Area do Retangulo é ret1: 60
// Area do Retangulo é ret2: 30
// Os retangulos são iguais? False
// O volume do cilindro é: 362.92
// Transferencia é possível? False
```
## Exercício 6
Crie uma classe representando a abstração de função
e/ou dados ao lado. Abaixo a especificação das
situações a serem resolvidas:
▪ Calcular o total de uma compra em um brechó a
partir das compras masculinas, femininas e
infantis. Nesse brechó, todas as roupas de uma
categoria possui o mesmo preço, conforme
listagem abaixo:
- Masculina = R$ 30,00
- Feminina = R$ 40,00
- Infantil = R$ 20,00
- Calçados = R$ 35,00
* Os calçados são cobrados independente do gênero.
* Utilize ideia de função composta.
* Utilize a ideia de tipos compostos.
* As funções auxiliares devem ser marcadas como private.
```csharp=
using System;
public class Compra
{
public int QtdCalca { get; set; }
public int QtdCamiseta { get; set; }
public int QtdBlusa { get; set; }
public int QtdCalcados { get; set; }
}
public class Brecho
{
public double TotalMasculino(Compra compra)
{
double masc = (compra.QtdBlusa * 30.00) + (compra.QtdCalca * 30.00) + (compra.QtdCamiseta * 30.00);
return masc;
}
public double TotalFeminino(Compra compra)
{
double fem = (compra.QtdBlusa * 40.00) + (compra.QtdCalca * 40.00) + (compra.QtdCamiseta * 40.00);
return fem;
}
public double TotalInfantil(Compra compra)
{
double inf = (compra.QtdBlusa * 20.00) + (compra.QtdCalca * 20.00) + (compra.QtdCamiseta * 20.00);
return inf;
}
public double CalcularTotal(Compra masculino, Compra feminino, Compra infantil)
{
double m = TotalMasculino(masculino);
double f = TotalFeminino(feminino);
double i = TotalInfantil(infantil);
double c = TotalCalcados(masculino.QtdCalcados, feminino.QtdCalcados, infantil.QtdCalcados);
double total = m + f + i + c;
return total;
}
public double TotalCalcados(int qtdCalcadoMasculino, int qtdCalcadoFeminino, int qtdCalcadoInfantil)
{
double t = (qtdCalcadoMasculino + qtdCalcadoFeminino + qtdCalcadoInfantil) * 35.00;
return t;
}
}
Brecho b = new Brecho();
Compra co = new Compra();
co.QtdBlusa = 3;
co.QtdCalca = 2;
co.QtdCalcados = 5;
co.QtdCamiseta = 4;
double tt = b.CalcularTotal(co, co, co);
Console.WriteLine("O valor total da compra é: " + tt);
// O valor total da compra é: 1335
```
## Exercício 7
**Crie uma classe representando a abstração de função e/ou
dados ao lado. Abaixo a especificação das situações a serem
resolvidas:
▪ Calcular o total de uma compra em uma loja de móveis
seguindo as seguintes regras de negócio:
(1) O cupom é um valor representando a porcentagem de
desconto a ser aplicado no valor da compra antes de aplicar
os juros, frete e garantia.
(2) Cada ano de garantia é adicionado 15% do valor da
compra.
(3) A cada 10km de distância é cobrado o valor de R$ 3,00
(4) Deve ser aplicado o juros compostos de 3% ao mês no
valor da compra com o desconto, garantia e frete aplicados.
(5) A nota fiscal é a hora atual no formato YYYYMMDDHHmm
com o prefixo NF. Ex: NF202105091918
* Utilize ideia de função composta.
* Utilize a ideia de tipos compostos.
* As funções auxiliares devem ser marcadas como private.**
```csharp=
using System;
public class Pedido
{
public double valor { get; set; }
public int AnosGarantia { get; set; }
public int DistanciaEntreKm { get; set; }
public int Parcelas { get; set; }
}
public class Nota
{
public double ValorFinal;
public string NotaFiscal;
}
public class LojaMoveis
{
public double ValorDesconto(double Compra, double cupom)
{
return Compra * (cupom/100);
}
public double ValorGarantia(double valorCompra, int Anos)
{
return valorCompra * (15 / 100) * Anos;
}
public double ValorFrete(int distancia)
{
return distancia / 10 * 3;
}
public double ValorJuros(double valor, int parcelas)
{
return valor * Math.Pow(1 + 0.3, parcelas);
}
public Nota CalcularCompra(Pedido pedido, double cupom)
{
double desconto = ValorDesconto(pedido.valor, cupom);
double garantia = ValorGarantia(pedido.valor, pedido.AnosGarantia);
double frete = ValorFrete(pedido.DistanciaEntreKm);
double valor = pedido.valor - desconto + garantia + frete;
double valorFinal = ValorJuros(valor, pedido.Parcelas);
valorFinal = Math.Round(valorFinal, 2);
Nota notafiscal = new Nota();
notafiscal.ValorFinal = valorFinal;
notafiscal.NotaFiscal = "NF" + DateTime.Now.ToString("yyyyMMddHHmmss");
return notafiscal;
}
}
Pedido p = new Pedido();
p.valor = 580;
p.AnosGarantia = 2;
p.DistanciaEntreKm = 30;
p.Parcelas = 10;
double cupom = 8;
LojaMoveis loja = new LojaMoveis();
Nota n = loja.CalcularCompra(p, cupom);
Console.WriteLine("O valor final é: " + n.ValorFinal);
Console.WriteLine();
Console.WriteLine("Nota Fiscal é: " + n.NotaFiscal);
// O valor final é: 7480.2
// Nota Fiscal é: NF20210515030057
```
{"metaMigratedAt":"2023-06-16T00:13:13.676Z","metaMigratedFrom":"Content","title":"Session Three: It's always time to restart | Fund. Lógica","breaks":true,"contributors":"[{\"id\":\"f2f98191-1ff5-4afd-8e66-66ff77c4c5b1\",\"add\":14896,\"del\":719}]"}