---
# System prepended metadata

title: Fundamentos da Lógica Session Three

---

# 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
``` 


