# Fundamentos da Lógica Session Three
## It's always time to restart
autor: Guilherme Oliveira Verissimo
turma: InfoC
número: 21
[toc]
### Trigonometria
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:
```csharp=
public class Calendario
{
using System;
public class Trigonometria
{
//▪ Calcular a área do retângulo baseado em sua altura e base.
public int AreaRetangulo (int altura, int basee)
{
return altura * basee;
}
//▪ Calcular o perímetro do retângulo baseado em sua altura e base.
public int PerimetroRetangulo (int altura, int basee)
{
return altura * 2 + basee * 2;
}
//▪ Verificar se dois retângulos são iguais baseado em suas áreas.
public bool RetangulosIguais (int altura1, int base1, int altura2, int base2)
{
int area1 = AreaRetangulo (altura1, base1);
int area2 = AreaRetangulo (altura2, base2);
return area1 == area2;
}
}
Trigonometria trig = new Trigonometria();
int Area = trig.AreaRetangulo (10, 5);
Console.WriteLine("A area do retangulo é: " + Area);
int Perimetro = trig.PerimetroRetangulo(10, 5);
Console.WriteLine("O perimetro do retangulo é: " + Perimetro);
bool RetanIguais = trig.RetangulosIguais(10, 5, 25, 2);
Console.WriteLine("Areas iguais: " + RetanIguais);
// A area do retangulo é: 50
// O perimetro do retangulo é: 30
// Areas iguais: True
```
### Forma / Trigonometria
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:
```csharp=
using System;
public class Forma
{
public double altura { get; set; }
public double basee { get; set; }
}
public class Trigonometria
{
//▪ Calcular a área do retângulo baseado em sua altura e base abstraído em um tipo composto.
public double AreaRetangulo (Forma forma)
{
return forma.altura * forma.basee;
}
//▪ Calcular a área do triângulo baseado em sua altura e base abstraído em um tipo composto.
public double AreaTriangulo (Forma forma)
{
return forma.altura * forma.basee / 2;
}
//▪ Calcular a área do paralelogramo baseado em sua altura e base abstraído em um tipo composto.
public double AreaParalelogramo (Forma forma)
{
return forma.altura * forma.basee;
}
}
Trigonometria trig = new Trigonometria();
Forma forma = new Forma();
forma.altura = 10;
forma.basee = 5;
double AreaRetan = trig.AreaRetangulo(forma);
Console.WriteLine("A area do rentagulo é: " + AreaRetan);
double AreaTrian = trig.AreaTriangulo(forma);
Console.WriteLine("A area do triangulo é: " + AreaTrian);
double AreaParale = trig.AreaParalelogramo(forma);
Console.WriteLine("A area do Paralelogramo é: " + AreaParale);
// A area do rentagulo é: 50
// A area do triangulo é: 25
// A area do Paralelogramo é: 50
```
### Calendário
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:
```csharp=
using System;
public class Pessoa
{
public string Nome { get; set; }
public DateTime Niver { get; set; }
}
public class Calendario
{
//▪ Retorne o primeiro dia do mês a partir de uma data.
public DateTime PrimeiroDia (DateTime data)
{
return new DateTime (data.Year, data.Month, 01);
}
//▪ Retorne o último dia do mês a partir de uma data.
public DateTime UltimoDia (DateTime data)
{
int Dia = DateTime.DaysInMonth(data.Year, data.Month);
return new DateTime (data.Year, data.Month, Dia);
}
//▪ Verifique se o mês possui 31 dias a partir de uma data.
public bool Possui31Dias (DateTime data)
{
int Dia = DateTime.DaysInMonth(data.Year, data.Month);
return Dia == 31;
}
//▪ Verifique se uma data cai em uma sexta-feira 13.
public bool SextaFeira13 (DateTime data)
{
DayOfWeek Sexta = data.DayOfWeek;
return Sexta == DayOfWeek.Friday;
}
//▪ 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.
public string SemanasParaNiver (Pessoa pessoa)
{
DateTime Atual = DateTime.Now;
DateTime Nova = new DateTime(pessoa.Niver.Year, pessoa.Niver.Month, pessoa.Niver.Day);
TimeSpan Dias = Nova - Atual;
double Semanas = Math.Round(Dias.TotalDays / 7, 1);
return pessoa.Nome + ", faltam " + Semanas + " semanas para seu niver";
}
//▪ Retorne se uma pessoa é de Libra a partir do dia em que nasceu abstraído em um tipo composto.
public bool SouDeLibra (Pessoa pessoa)
{
DateTime Setembro = new DateTime(pessoa.Niver.Year, 09, 23);
DateTime Outubro = new DateTime(pessoa.Niver.Year, 10, 22);
return pessoa.Niver >= Setembro && Outubro >= pessoa.Niver;
}
}
Calendario data = new Calendario();
DateTime dataa = new DateTime(2021, 12, 15);
DateTime PrimDia = data.PrimeiroDia(dataa);
Console.WriteLine("O primeiro dia do mês é: " + PrimDia);
DateTime UltDia = data.UltimoDia(dataa);
Console.WriteLine("O ultimo dia do mês é: " + UltDia);
bool Possui31 = data.Possui31Dias(dataa);
Console.WriteLine("O mês possui 31 dia: " + Possui31);
bool Sexta13 = data.SextaFeira13(dataa);
Console.WriteLine("O dia cai em uma sexta feira 13: " + Sexta13);
Pessoa pessoa = new Pessoa();
pessoa.Niver = new DateTime(2021, 10, 11);
pessoa.Nome = "Guilherme Oliveira Verissimo";
string SemanNiver = data.SemanasParaNiver(pessoa);
Console.WriteLine(SemanNiver);
bool SouLibra = data.SouDeLibra(pessoa);
Console.WriteLine("Pertenço ao signo de libra: " + SouLibra);
// O primeiro dia do mês é: 12/1/2021 12:00:00 AM
// O ultimo dia do mês é: 12/31/2021 12:00:00 AM
// O mês possui 31 dia: True
// O dia cai em uma sexta feira 13: False
// Guilherme Oliveira Verissimo, faltam 21.7 semanas para seu niver
// Pertenço ao signo de libra: True
```
### RegistroBRValidator
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:
```csharp=
using System;
public class RegistroBRValidator
{
//▪ 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.
public bool ValidarCadastro (string email, string senha)
{
bool Contem = email.Contains("@");
int Posicao = email.IndexOf("@");
string Subs = email.Substring(0, Posicao);
int Carac1 = email.Length;
bool DoisAntes = Carac1 >= 2;
string Subss = email.Substring(Posicao);
int Carac2 = Subss.Length;
bool DoisDepois = Carac2 >= 3;
bool emailCorreto = Contem && DoisAntes && DoisDepois;
bool Senha = senha.Contains("a") || senha.Contains("e") || senha.Contains("i") || senha.Contains("o") || senha.Contains("u");
bool senhaCarac = senha.Contains("!") || senha.Contains("@") || senha.Contains("#") || senha.Contains("$") || senha.Contains("%") || senha.Contains("&") || senha.Contains("*");
bool tamanho = senha.Length >= 8;
bool senhaCorreta = Senha && senhaCarac && tamanho;
return emailCorreto && senhaCorreta;
}
//▪ 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.
public bool ValidarDominio (string Dominio)
{
bool FinalValido = Dominio.Contains(".com.br");
string Numero = Dominio.Substring(1);
bool ContemNr = Dominio.Contains("0") || Dominio.Contains("1") || Dominio.Contains("2") || Dominio.Contains("3")
|| Dominio.Contains("4") || Dominio.Contains("5") || Dominio.Contains("6")
|| Dominio.Contains("7") || Dominio.Contains("8") || Dominio.Contains("9");
bool Neg = ! ContemNr;
int Pont = Dominio.IndexOf(".");
string Subs = Dominio.Substring(0, Pont);
int QtdCarac = Subs.Length;
bool Maior = QtdCarac >= 5;
return Maior && FinalValido && Neg;
}
}
string Email = "guilherme@gmail.com";
string Senha = "guioliveira123#";
RegistroBRValidator registro = new RegistroBRValidator();
bool validarcadas = registro.ValidarCadastro(Email, Senha);
Console.WriteLine("O cadastro é válido: " + validarcadas);
string Dominio = "guilherme.com.br";
bool validardomin = registro.ValidarDominio(Dominio);
Console.WriteLine("O dominio é válido: " + validardomin);
// O cadastro é válido: True
// O dominio é válido: True
```
### Retangulo / Cilindro / Trigonometria
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:
```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
{
//▪ Calcular a área do retângulo.
public double AreaRetangulo (Retangulo retan)
{
return retan.altura * retan.basee;
}
//▪ Calcular o volume do cilindro.
public double VolumeCilindro (Cilindro cilin)
{
return 3.14 * Math.Pow(cilin.raio, 2) * cilin.altura;
}
//▪ Verificar se dois retângulos são iguais baseado em sua área. Utilize a ideia de função composta.
public bool AreasIguais (Retangulo retan1, Retangulo retan2)
{
double area1 = AreaRetangulo (retan1);
double area2 = AreaRetangulo (retan2);
return area1 == area2;
}
//▪ Verificar se é possível transferir o conteúdo do primeiro cilindro ao segundo. Utilize a ideia de função composta.
public bool TransferenciaPossivel (Cilindro cilin1, Cilindro cilin2)
{
double cilindro1 = VolumeCilindro (cilin1);
double cilindro2 = VolumeCilindro (cilin2);
return cilindro1 <= cilindro2;
}
}
Trigonometria trig = new Trigonometria();
Retangulo retan = new Retangulo();
retan.altura = 10;
retan.basee = 5;
double AreaRetan = trig.AreaRetangulo(retan);
Console.WriteLine("A area do retangulo é: " + AreaRetan);
Cilindro cilin = new Cilindro();
cilin.raio = 5;
cilin.altura = 15;
double VolumeCilin = trig.VolumeCilindro(cilin);
Console.WriteLine("O volume do cilindro é: " + VolumeCilin);
Retangulo retan1 = new Retangulo();
retan1.altura = 20;
retan1.basee = 2;
Retangulo retan2 = new Retangulo();
retan2.altura = 40;
retan2.basee = 1;
bool AreasIgua = trig.AreasIguais(retan1, retan2);
Console.WriteLine("A area dos retangulos são iguais: " + AreasIgua);
Cilindro cilin1 = new Cilindro();
cilin1.raio = 3;
cilin1.altura = 7;
Cilindro cilin2 = new Cilindro();
cilin2.raio = 4;
cilin2.altura = 8;
bool TransfePossivel = trig.TransferenciaPossivel(cilin1, cilin2);
Console.WriteLine("A tranferência será possível: " + TransfePossivel);
// A area do retangulo é: 50
// O volume do cilindro é: 1177.5
// A area dos retangulos são iguais: True
// A tranferência será possível: True
```
### Compra / Brecho
▪ 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
```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
{
private double TotalMasculino (Compra compra)
{
double calca = compra.QtdCalca * 30;
double camiseta = compra.QtdCamiseta * 30;
double blusa = compra.QtdBlusa * 30;
return calca + camiseta + blusa;
}
private double TotalFeminino (Compra compra)
{
double calca = compra.QtdCalca * 40;
double camiseta = compra.QtdCamiseta * 40;
double blusa = compra.QtdBlusa * 40;
return calca + camiseta + blusa;
}
private double TotalInfantil (Compra compra)
{
double calca = compra.QtdCalca * 20;
double camiseta = compra.QtdCamiseta * 20;
double blusa = compra.QtdBlusa * 20;
return calca + camiseta + blusa;
}
private double TotalCalcados (int qtdCalcadoMasculino, int qtdCalcadoFeminino, int qtdCalcadoInfantil)
{
int qtdMasculino = qtdCalcadoMasculino * 35;
int qtdFeminino = qtdCalcadoFeminino * 35;
int qtdInfantil = qtdCalcadoInfantil * 35;
return qtdMasculino + qtdFeminino + qtdInfantil;
}
public double CalcularTotal (Compra masculino, Compra feminino, Compra infantil)
{
double totalMasc = TotalMasculino(masculino);
double totalFemi = TotalFeminino(feminino);
double totalInfan = TotalInfantil(infantil);
double totalcalcados = TotalCalcados(masculino.Qtdcalcados, feminino.Qtdcalcados, infantil.Qtdcalcados);
return totalMasc + totalFemi + totalInfan + totalcalcados;
}
}
Compra masculino = new Compra();
masculino.QtdCalca = 6;
masculino.QtdCamiseta = 9;
masculino.QtdBlusa = 5;
masculino.Qtdcalcados = 7;
Compra feminino = new Compra();
feminino.QtdCalca = 1;
feminino.QtdCamiseta = 1;
feminino.QtdBlusa = 1;
feminino.Qtdcalcados = 1;
Compra infantil = new Compra();
infantil.QtdCalca = 1;
infantil.QtdCamiseta = 1;
infantil.QtdBlusa = 1;
infantil.Qtdcalcados = 1;
Brecho brecho = new Brecho();
double CalcTotal = brecho.CalcularTotal(masculino, feminino, infantil);
Console.WriteLine("O total referente à compras no brecho foi: " + CalcTotal);
// O total referente à compras no brecho foi: 2990
```
### Pedido / Nota / LojaMoveis
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
```csharp=
using System;
public class Pedido
{
public double Valor { get; set; }
public int AnosGarantia { get; set; }
public int DistanciaEntregaKm { get; set; }
public int Parcelas { get; set; }
}
public class Nota
{
public double ValorFinal { get; set; }
public string NotaFiscal { get; set; }
}
public class LojaMoveis
{
private double ValorDesconto (double valorcompra, double cupomdesconto)
{
double desconto = (valorcompra / 100) * cupomdesconto;
return desconto + valorcompra;
}
private double Garantia (double valorcompra, int anosgarantia)
{
return (valorcompra / 100) * 15 * anosgarantia;
}
private double ValorFrete (int distancia)
{
return distancia / 10 * 3;
}
private double ValorJuros (double valorcompra, int parcelas)
{
double porcen = (valorcompra / 100) * 3;
return porcen * parcelas;
}
public Nota CalcularCompra (Pedido pedido, double cupom)
{
double desconto = ValorDesconto(pedido.Valor, cupom);
double garantia = Garantia(pedido.Valor, pedido.AnosGarantia);
double distancia = ValorFrete(pedido.DistanciaEntregaKm);
double semiTotal = desconto + garantia + distancia;
double valorjuros = ValorJuros(semiTotal, pedido.Parcelas);
double Total = semiTotal + valorjuros;
DateTime data = DateTime.Now;
Nota nota = new Nota();
nota.ValorFinal = Total;
nota.NotaFiscal = "NF" + data.Year + data.Month + data.Day + data.Hour + data.Minute;
return nota;
}
}
Pedido pedido = new Pedido();
pedido.Valor = 100;
pedido.AnosGarantia = 1;
pedido.DistanciaEntregaKm = 30;
pedido.Parcelas = 12;
double Cupom = 10;
LojaMoveis compra = new LojaMoveis();
Nota TotalCompra = compra.CalcularCompra(pedido, Cupom);
Console.WriteLine(TotalCompra.NotaFiscal);
Console.WriteLine(TotalCompra.ValorFinal);
// NF20215141710
// 182.24
```