# SESSION THREE | Fundamentos de Lógica
> **Aluna:** Patricia Oliveira Paulino
> **Número:** 37
> **Turma:** Info D
## 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=
using System;
public class Retangulo
{
public double Basee {get; set;}
public double Altura {get; set;}
}
public class Trigonometria
{
public bool RetanguloIguais(Retangulo ret1, Retangulo ret2)
{
return AreaRetangulo(ret1.Basee, ret1.Altura) == AreaRetangulo(ret2.Basee, ret2.Altura);
}
public double AreaRetangulo(double a, double b)
{
double area = a * b;
return area;
}
public double PerimetroRetangulo(double a, double b)
{
double per = a + a + b + b;
return per;
}
}
Trigonometria a = new Trigonometria();
Retangulo r1 = new Retangulo();
r1.Basee = 10;
r1.Altura = 20;
Retangulo r2 = new Retangulo();
r2.Basee = 2;
r2.Altura = 25;
double b = a.PerimetroRetangulo(40, 20);
Console.WriteLine(b);
bool c = a.RetanguloIguais(r1, r2);
Console.WriteLine(c);
// 120
// False
```
## 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=
using System;
public class Forma
{
public double Basee {get; set;}
public double Altura {get; set;}
}
public class Trigonometria
{
public double retangulo(Forma d)
{
double area1 = d.Basee * d.Altura;
return area1;
}
public double triangulo(Forma d)
{
double area2 = d.Basee * d.Altura;
return area2;
}
public double paralelogramo(Forma d)
{
double area3 = d.Basee * d.Altura;
return area3;
}
}
Forma tri = new Forma();
tri.Basee = 2;
tri.Altura = 10;
Forma ret = new Forma();
ret.Basee = 30;
ret.Altura = 10;
Forma para = new Forma();
para.Basee = 20;
para.Altura = 5;
Trigonometria e = new Trigonometria();
double a = e.retangulo(ret);
Console.WriteLine("A área do retangulo é: " + a);
double b = e.triangulo(tri);
Console.WriteLine("A área do triangulo é: " + b);
double c = e.paralelogramo(para);
Console.WriteLine("A área do paralelogramo é: " + c);
// A área do retangulo é: 300.
// A área do triangulo é: 20.
// A área do paralelogramo é: 100.
```
## 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 {get; set;}
public DateTime niver {get; set;}
}
public class Calendario
{
public DateTime PrimeiroDia(DateTime data)
{
DateTime primeiroDiaDoMes = data.AddDays(1 - data.Day);
return primeiroDiaDoMes;
}
public DateTime UltimoDia(DateTime data)
{
DateTime ultimoDiaDoMes = data.AddMonths(1).AddDays(- data.Day);
return ultimoDiaDoMes;
}
public bool Possui31Dias(DateTime data)
{
return UltimoDia(data).Day == 31;
}
public bool SextaFeira13(DateTime data)
{
return data.DayOfWeek == DayOfWeek.Friday && data.Day == 13;
}
public string SemanasParaNiver (Pessoa pessoa)
{
DateTime a = DateTime.Now;
DateTime b = new DateTime(a.Year, pessoa.niver.Month, pessoa.niver.Day);
TimeSpan c = b - a;
double d = c.TotalDays/7;
double e = Math.Round(d);
string f = pessoa.nome + ", faltam " + e + " semanas para seu niver!";
return f;
}
public bool SouDeLibra (Pessoa pessoa)
{
DateTime g = new DateTime(pessoa.niver.Year,09,23);
DateTime f = new DateTime(pessoa.niver.Year,10,22);
return pessoa.niver >= g
&&
pessoa.niver <= f;
}
}
Pessoa f = new Pessoa();
f.nome = "Barbara Barbosa dos Santos";
f.niver = new DateTime(2004,03,17);
Calendario h = new Calendario();
DateTime b = h.PrimeiroDia(f.niver);
DateTime i = h.UltimoDia(f.niver);
bool j = h.Possui31Dias(f.niver);
bool k = h.SextaFeira13(f.niver);
string l = h.SemanasParaNiver(f);
bool m = h.SouDeLibra(f);
Console.WriteLine("Primeiro dia do mês " + b);
Console.WriteLine("Último dia do mês " + i);
Console.WriteLine("O mês possui 31 dias?: " + j);
Console.WriteLine("A data cai em uma sexta-feira 13?: " + k);
Console.WriteLine(l);
Console.WriteLine("Sou de Libra?: " + m);
// Primeiro dia do mês 3/1/2004 12:00:00 AM
// Último dia do mês 3/31/2004 12:00:00 AM
// O mês possui 31 dias?: True
// A data cai em uma sexta-feira 13?: False
// Barbara Barbosa dos Santos, faltam -8 semanas para seu niver!
// Sou de Libra?: 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.
```csharp=
using System;
public class RegistroBRValidator
{
public bool ValidarCadastro(string email, string senha)
{
bool v1 = email.Length >= 8;
bool v2 = email.Contains("!") || email.Contains("@") || email.Contains("#") || email.Contains("%");
bool v3 = email.Contains("a") || email.Contains("e") || email.Contains("i") || email.Contains("o") || email.Contains("u");
bool v4 = email.Contains("@");
bool v5 = email.Contains("@")
&&
email.Substring(0, email.IndexOf("@")).Length > 2
&&
email.Substring(email.IndexOf("@")).Length > 2;
return v1 && v2 && v3 && v4 && v5;
}
public bool ValidarDominio(string dominio)
{
bool v1 = dominio.EndsWith(".com.br");
bool v2 = dominio[0] != '1' && dominio[0] != '2' && dominio[0] != '3' &&
dominio[0] != '4' && dominio[0] != '5' && dominio[0] != '6' &&
dominio[0] != '7' && dominio[0] != '8' && dominio[0] != '9' &&
dominio[0] != '0';
bool v3 = dominio.Substring(0, dominio.IndexOf(".com.br")).Length >= 5;
return v1 && v2 && v3;
}
}
RegistroBRValidator registroBR = new RegistroBRValidator();
bool a = registroBR.ValidarCadastro("barbarabs1703@gmail.com", "831");
Console.WriteLine("Cadrastro ok?: " + a);
// Cadrastro ok?: 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 double AreaRetangulo(Retangulo d)
{
double area = d.Altura * d.Basee;
return area;
}
public bool RetanguloIguais(Retangulo rt1, Retangulo rt2)
{
double ret1 = AreaRetangulo(rt1);
double ret2 = AreaRetangulo(rt2);
return ret1 == ret2;
}
public double VolumeCilindro(Cilindro cl)
{
double total = cl.Altura * cl.Raio;
return total;
}
public bool TransferenciaValida(Cilindro cl1, Cilindro cl2)
{
double ci1 = VolumeCilindro(cl1);
double ci2 = VolumeCilindro(cl2);
return ci1 == ci2;
}
}
Trigonometria a = new Trigonometria();
Retangulo ret1 = new Retangulo();
ret1.Basee = 2;
ret1.Altura = 10;
Retangulo ret2 = new Retangulo();
ret2.Basee = 5;
ret2.Altura = 4;
Cilindro cl1 = new Cilindro();
cl1.Altura = 10;
cl1.Raio = 2;
Cilindro cl2 = new Cilindro();
cl2.Altura = 5;
cl2.Raio = 5;
double b = a.AreaRetangulo(ret1);
Console.WriteLine(b);
double c = a.VolumeCilindro(cl1);
Console.WriteLine(c);
bool d = a.RetanguloIguais(ret1, ret2);
Console.WriteLine(d);
bool e = a.TransferenciaValida(cl1, cl2);
Console.WriteLine(e);
// 20
// 20
// True
// 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
{
private double TotalMasculino (Compra cp)
{
double compra = (cp.QtdCalca * 30.00) + (cp.QtdCamiseta * 30.00) + (cp.QtdBlusa * 30.00);
return compra;
}
private double TotalFeminino (Compra cp)
{
double compra = (cp.QtdCalca * 40.00) + (cp.QtdCamiseta * 40.00) + (cp.QtdBlusa * 40.00);
return compra;
}
private double TotalInfantil (Compra cp)
{
double compra = (cp.QtdCalca * 20.00) + (cp.QtdCamiseta * 20.00) + (cp.QtdBlusa * 20.00);
return compra;
}
private double TotalCalcados (int QtdMasculino, int QtdFeminino, int QtdInfantil)
{
double compra = (QtdMasculino + QtdFeminino + QtdInfantil) * 35.00;
return compra;
}
public double TotalCompra (Compra masculino, Compra feminino, Compra infantil)
{
double a = TotalMasculino(masculino);
double b = TotalFeminino(feminino);
double c = TotalInfantil(infantil);
double d = TotalCalcados(masculino.QtdCalcados, feminino.QtdCalcados, infantil.QtdCalcados);
double total = a + b + c + d;
return total;
}
}
Brecho bc = new Brecho();
Compra cp = new Compra();
cp.QtdBlusa = 2;
cp.QtdCalca = 2;
cp.QtdCalcados = 1;
cp.QtdCamiseta = 3;
double e = bc.TotalCompra(cp, cp ,cp);
Console.WriteLine(e);
// 735.
```
## 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 DistanciaEntregaKm {get; set;}
public int Parcelas {get; set;}
}
public class Nota
{
public double ValorFinal {get; set;}
public string NotaFiscal {get; set;}
}
public class LojaMoveis
{
public Nota CalcularCompra (Pedido pedido, double cupom)
{
double desconto = ValorDesconto(pedido.Valor, cupom);
double garantia = ValorGarantia(pedido.Valor, pedido.AnosGarantia);
double frete = ValorFrete(pedido.DistanciaEntregaKm);
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;
}
private double ValorDesconto(double valorCompra, double cupom)
{
return valorCompra * (cupom/100);
}
private double ValorGarantia(double valorCompra, int anos)
{
return valorCompra * (15.0 / 100.0) * anos;
}
private double ValorFrete(int distancia)
{
return distancia / 10 * 3;
}
private double ValorJuros(double valorCompra, int parcelas)
{
return valorCompra * Math.Pow(1 + 0.03, parcelas);
}
}
Pedido a = new Pedido();
a.Valor = 1000;
a.AnosGarantia = 2;
a.DistanciaEntregaKm = 50;
a.Parcelas = 18;
double cupom = 10;
LojaMoveis loja = new LojaMoveis();
Nota b = loja.CalcularCompra(a, cupom);
Console.WriteLine("Valor final é: " + b.ValorFinal);
Console.WriteLine("Nota fiscal é: " + b.NotaFiscal);
// Valor final é: 2068.46
// Nota fiscal é: NF20210514215030
```