---
# System prepended metadata

title: 'Session Three: It''s always time to restart | Fund. Lógica'

---

# Session Three: It's always time to restart | Fund. Lógica
autor: Alan Oliveira Rocha Santiago
turma: InfoB
número: 02

[TOC]

# Exercicio 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 altura, int basee)
    {
        int area = altura * basee;
        return area;
    }

    public int PerimetroRetangulo(int a1, int b1, int a2, int b2)
    {
        int perimetro = (a1 + a2) + (b1 + b2);
        return perimetro;
    }

    public bool RetangulosIguais(int altura1, int basee1, int altura2, int basee2)
    {
        int area1 = AreaRetangulo(altura1,basee2);
        int area2 = AreaRetangulo(altura2,basee2);
        bool igual = area1 == area2;
        return igual;
    }
}

Trigonometria trig = new Trigonometria();
int AreaR = trig.AreaRetangulo(20 , 5);
int perimetroR = trig.PerimetroRetangulo(20, 5, 20, 5);
bool IguaisR = trig.RetangulosIguais(20, 6, 10, 5);

Console.WriteLine($"Ex1: A Area do Retangulo será de {AreaR}");
Console.WriteLine($"Ex1: O perimetro do retangulo é {perimetroR}");
Console.WriteLine($"Ex1: As areas dos retangulos são iguais? {IguaisR}");
//Ex1: A Area do Retangulo será de 100
//Ex1: O perimetro do retangulo é 50
//Ex1: As areas dos retangulos são iguais? False
```
# Exercicio 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 Forma2
{
    public double Altura{get; set;}
    public double Basee{get; set;}
}

public class Trigonometria2
{
    public double AreaRetangulo2(Forma2 ret)
    {
        double x = ret.Altura * ret.Basee;
        return x;
    }

    public double AreaTriangulo2(Forma2 trig)
    {
        double x = (trig.Altura * trig.Basee) / 2;
        return x; 
    }

    public double AreaParalelogramo(Forma2 para)
    {
        double x = para.Altura * para.Basee;
        return x;
    }
}

Forma2 forma = new Forma2();
forma.Altura = 20;
forma.Basee = 5;
Forma2 forma2 = new Forma2();
forma2.Altura = 18;
forma2.Basee = 3;
Trigonometria2 trigonometria2 = new Trigonometria2();

double ar = trigonometria2.AreaRetangulo2(forma);
double at = trigonometria2.AreaTriangulo2(forma2);
double  ap = trigonometria2.AreaParalelogramo(forma);

Console.WriteLine("Ex2: a area do retangulo será de " + ar);
Console.WriteLine("Ex2: a area do triangulo será de " + at);
Console.WriteLine("Ex2: a area do paralelograma será de " + ap);
//Ex2: a area do retangulo será de 100
//Ex2: a area do triangulo será de 27
//Ex2: a area do paralelograma será de 100
```
# Exercicio 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=
public class Pessoa
{
    public string Nome{get; set;}
    public DateTime Niver{get; set;}
}

public class Calendario
{
    public DateTime PrimeiroDia(DateTime data)
    {
        DateTime pri = data.AddDays(-data.Day).AddDays(1);
        return pri;
    }
    public DateTime UltimoDia(DateTime data)
    {
        DateTime ult = data.AddMonths(1).AddDays(-data.Day);
        return ult;
    }
    public bool Possui31Dias(DateTime data)
    {
        DateTime dt = data.AddMonths(1).AddDays(-data.Day);
        bool p31 = dt.Day == 31;
        return p31;
    }
    public bool SextaFeira13(DateTime data)
    {
        bool dt = data.DayOfWeek == DayOfWeek.Friday;
        bool dt2 = data.Day == 13;
        bool sexta = dt == true && dt2 == true;
        return sexta;
    }
    public string SemanasParaNiver(Pessoa data)
    {
        DateTime hj = DateTime.Now;
        DateTime aniversario = new DateTime(hj.Year, data.Niver.Month , data.Niver.Day);
        TimeSpan x = aniversario - hj;
        double y = x.TotalDays / 7;
        double z = Math.Round(y);
        string text = $"{data.Nome}, faltam {z} semanas para seu niver.";
        return text;
    }
    public bool SouDeLibra(Pessoa pessoa)
    {
        bool a = pessoa.Niver.Month == 9 && pessoa.Niver.Day >= 23;
        bool b = pessoa.Niver.Month == 10 && pessoa.Niver.Day <= 21;

        return a == true || b == true;
    }
}

DateTime dt1 = new DateTime(2004, 9, 30);
DateTime dt2 = new DateTime(1999, 12, 23);
DateTime dt3 = new DateTime(2008, 12, 13);

Pessoa p1 = new Pessoa();
p1.Niver = dt1;
p1.Nome = "Paulo";

Calendario c1 = new Calendario();

DateTime pdia = c1.PrimeiroDia(dt2);
DateTime udia = c1.UltimoDia(dt2);
bool t31dia = c1.Possui31Dias(dt3);
bool sf13 = c1.SextaFeira13(dt3);
string sNiver = c1.SemanasParaNiver(p1);
bool sdLibra = c1.SouDeLibra(p1);
Console.WriteLine("Ex3 " + pdia);
Console.WriteLine("Ex3 " + udia);
Console.WriteLine("Ex3 " + t31dia);
Console.WriteLine("Ex3 " + sf13);
Console.WriteLine("Ex3 " + sNiver);
Console.WriteLine("Ex3 " + sdLibra);
//Ex3 01/12/1999 00:00:00
//Ex3 31/12/1999 00:00:00
//Ex3 True
//Ex3 False
//Ex3 Paulo, faltam 16 semanas para seu niver.
//Ex3 True
```
# Exercicio 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 RegistroBRValidador
{
    public bool ValidarEmail(string email, string senha)
    {
        bool v1 = senha.Length >= 8;
        bool v2 = senha.Contains("a") || senha.Contains("e") || senha.Contains("i") || senha.Contains("o") || senha.Contains("u");
        bool v3 = senha.Contains("!") || senha.Contains("@") || senha.Contains("#") || senha.Contains("$") || senha.Contains("%") || senha.Contains("&") || senha.Contains("*");
        bool v4 = email.Contains("@");
        bool v5 = email.Substring(0,email.IndexOf("@")).Length > 2 
                    && 
                  email.Substring(email.IndexOf("@"),0).Length > 2;
        
        bool vtotal = v1 && v2 && v3 && v4 && v5;
        return vtotal;
    }
    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';
        bool v3 = dominio.Substring(0,dominio.IndexOf(".com.br")).Length >= 5;

        return v1 && v2 && v3;
    }
}           

RegistroBRValidador vl4 = new RegistroBRValidador();

bool vle = vl4.ValidarEmail("alan@hotmail.com", "#abobora1234#");
bool vld = vl4.ValidarDominio("meudominio.com.br");
Console.WriteLine("Ex4 " + vle);
Console.WriteLine("Ex4 " + vld);
//Ex4 False
//Ex4 True
```
# Exercicio 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=
public class Retangulo5
{
    public double Altura{get; set;}
    public double Base{get; set;}
}

public class Cilindro5
{
    public double Raio{get; set;}
    public double Altura{get; set;}
}

public class Trigonometria5
{
    public bool AreasIguais(Retangulo5 ret1, Retangulo5 ret2)
    {
        double rt1 = AreaRetangulo(ret1);
        double rt2 = AreaRetangulo(ret2);
        return rt1 == rt2;
    }
    public double AreaRetangulo(Retangulo5 ret)
    {
        double area = ret.Base * ret.Altura;
        return area;
    }

    public bool TransferenciaPossivel(Cilindro5 ci1, Cilindro5 ci2)
    {
        double volume1 = VolumeCilindro(ci1);
        double volume2 = VolumeCilindro(ci2);
        return volume1 <= volume2;
    }
    public double VolumeCilindro(Cilindro5 ci)
    {
        double pi = Math.PI;
        double AB = pi * Math.Pow(ci.Raio,2);
        double volume = AB * ci.Altura;
        return volume;
    }
}
//
Retangulo5 rt = new Retangulo5();
rt.Altura = 10;
rt.Base = 20;
Retangulo5 rt1 = new Retangulo5();
rt1.Altura = 10;
rt1.Base = 20;
Retangulo5 rt2 = new Retangulo5();
rt2.Altura = 12;
rt2.Base = 20;
//
Cilindro5 ci1 = new Cilindro5();
ci1.Altura = 20;
ci1.Raio = 10;
Cilindro5 ci2 = new Cilindro5();
ci2.Altura = 20;
ci2.Raio = 10;
//
Trigonometria5 trig5 = new Trigonometria5();
//
bool ai5 = trig5.AreasIguais(rt1,rt2);
double ar5 = trig5.AreaRetangulo(rt);
bool tp5 = trig5.TransferenciaPossivel(ci1,ci2);
double vlc5 = trig5.VolumeCilindro(ci1);
Console.WriteLine("Ex5 " + ai5);
Console.WriteLine("Ex5 " + ar5);
Console.WriteLine("Ex5 " + tp5);
Console.WriteLine("Ex5 " + vlc5);
//Ex5 200
//Ex5 True
//Ex5 6283,185307179587
```
# Exercicio 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=
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 CalcularTotal(Compra masculino, Compra feminino, Compra infantil)
    {
        double masc = TotalMasculino(masculino);
        double femi = TotalFeminino(feminino);
        double infa = TotalInfantil(infantil);
        double calsados = TotalCalcados(masculino,feminino,infantil);
        double total = masc + femi + infa + calsados;
        return total;
    }
    private double TotalMasculino(Compra compra)
    {
        double x = (compra.QtdCamiseta + compra.QtdBlusa + compra.QtdCalca) * 30;
        return x;
    }
    private double TotalFeminino(Compra compra)
    {
        double x = (compra.QtdCamiseta + compra.QtdBlusa + compra.QtdCalca) * 40;
        return x;
    }
    private double TotalInfantil(Compra compra)
    {
        double x = (compra.QtdCamiseta + compra.QtdBlusa + compra.QtdCalca) * 20;
        return x;
    }
    private double TotalCalcados(Compra masc, Compra femi, Compra infa)
    {
        double x = (masc.QtdCalcados + femi.QtdCalcados + infa.QtdCalcados) * 35;
        return x; 
    }
}

Compra masculino = new Compra();
masculino.QtdCalca = 1;
masculino.QtdCamiseta = 1;
masculino.QtdBlusa = 1;
masculino.QtdCalcados = 1;

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 brecho6 = brecho.CalcularTotal(masculino, feminino, infantil);
Console.WriteLine("Ex6 " + brecho6);
//Ex6 375
```
# Exercicio 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=
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 vlDesc = ValorDesconto(pedido.Valor, cupom);
        double vlGar = ValorGarantia(pedido.Valor, pedido.AnosGarantia);
        double vlFrete = ValorFrete(pedido.DistanciaEntregaKm);
        double vlJuros = ValorJuros(pedido.Valor, pedido.Parcelas);
        double total = vlDesc + vlGar + vlFrete + vlJuros;

        DateTime dt = DateTime.Now;
        Nota n = new Nota();
        n.ValorFinal = total;
        n.NotaFiscal = "NF" + dt.ToString("yyyyMMddHHmm");
        return n;
    }
    private double ValorDesconto(double valorCompra, double cupom)
    {
        double x = valorCompra * (cupom / 100);
        double y = valorCompra - x;
        return y;
    }
    private double ValorGarantia(double valorCompra, int anos)
    {
        double x = valorCompra * (15 / 100);
        double y = (anos * x) + valorCompra;
        return y;
    }
    private double ValorFrete(int distancia)
    {
        double x = distancia / (10 * 3);
        return x;
    }
    private double ValorJuros(double valor, int parcelas)
    {
        double x = valor * Math.Pow(1 + 0.03, parcelas);
        return x;
    }
}

Pedido ped = new Pedido();
ped.Valor = 20;
ped.AnosGarantia = 3;
ped.DistanciaEntregaKm = 35;
ped.Parcelas = 10;

LojaMoveis lm = new LojaMoveis();
double cp = 20;


Nota notafical = lm.CalcularCompra(ped,cp);
Console.WriteLine("Ex7 " + notafical.ValorFinal);
Console.WriteLine("Ex7 " + notafical.NotaFiscal);
//Ex7 63,87832758688245
//Ex7 NF202106101955
```