---
# 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**: Elias de Freitas Cavalcante
**Número**: 12
**Turma**: INFO C



## Exercícios

[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.**

```charp=
public class Trigonometria
{
	
	public bool RetanguloIguais(int altura1, int base1, int altura2, int base2)
	{
		return AreaRetangulo(altura1, base1) == AreaRetangulo(altura2, base2);
	}
	
	private double AreaRetangulo(int a, int b)
	{
		double area = a * b;
		return area;
	}

	public double PerimetroRetangulo(int a, int b)
	{
		double per = a + a + b + b;
		return per;
	}
}

Trigonometria trig = new Trigonometria();

bool x3 = trig.RetanguloIguais(4,2,2,4);
Console.WriteLine("As areas dos retangulos são verdadeiras ? :" +x3);

double x1 = trig.PerimetroRetangulo(10, 5);
Console.WriteLine("O perimetro do retangulo é:" + x1);
//
As areas dos retangulos são verdadeiras ?: True
O perimetro do retangulo é:30
```

### 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.**

```charp=
public class Forma
{
	public double altura {get;set;}
	public double basse {get;set;}
}


public class Trigonometria
{
	
	public bool RetanguloIguais(Forma ret1, Forma ret2)
	{
		return AreaRetangulo(ret1.altura, ret1.basse) == AreaRetangulo(ret2.altura, ret2.basse);
	}
	
	private 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 trig = new Trigonometria();

double x1 = trig.PerimetroRetangulo(10, 5);
Console.WriteLine("O perimetro do retangulo é:" + x1);


Forma r1 = new Forma();
r1.altura = 10;
r1.basse = 5;

Forma r2 = new Forma();
r2.altura = 25;
r2.basse = 2;


bool x3 = trig.RetanguloIguais(r1, r2);
Console.WriteLine("As areas dos retangulos são verdadeiras ? :" + x3);
//
As areas dos retangulos são verdadeiras ?: True
O perimetro do retangulo é:30
```

### 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.**
```charp=
public class Pessoa
{
	public string Nome      { get; set; }
	public DateTime Niver   { get; set; }
}



public class Calendario 
{
	public DateTime PrimeiroDia (DateTime data) 
	{
		return data.AddDays(1 - data.Day);
	}
	
	public DateTime UltimoDia (DateTime data)
	{
        return data.AddMonths(1).AddDays(- data.Day);
	}
	
	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 o = DateTime.Now;
		DateTime s = new DateTime(o.Year, pessoa.Niver.Month, pessoa.Niver.Day);
		TimeSpan a = s - o;
		double f = a.TotalDays/7;
		double h = Math.Round(f);
		string k = pessoa.Nome + ", faltam " + h + " semanas para seu niver!";
		return k;
	}
	
	public bool SouDeLibra (Pessoa pessoa)
	{
		DateTime u = new DateTime(pessoa.Niver.Year,09,23);
		DateTime k = new DateTime(pessoa.Niver.Year,10,22);
		return pessoa.Niver >= u 
                && 
               pessoa.Niver <= k;
	}	

}




Pessoa k = new Pessoa ();
k.Nome = "Elias Cavalcante";
k.Niver = new DateTime(2004,09,29);


Calendario c = new Calendario ();
DateTime a = c.PrimeiroDia(k.Niver);
DateTime b = c.UltimoDia(k.Niver);
bool d = c.Possui31Dias(k.Niver);
bool e = c.SextaFeira13(k.Niver);
string f = c.SemanasParaNiver(k);
bool g = c.SouDeLibra(k);


Console.WriteLine("Primeiro dia do mês: " + a);
Console.WriteLine("Último dia do mês: " + b);
Console.WriteLine("O mês possui 31 dias?: " + d);
Console.WriteLine("A data cai em ua sexta-feira 13?: " + e);
Console.WriteLine(f);
Console.WriteLine("Sou de Libra?: " + g);
//
Primeiro dia do mês: 9/1/2004 12:00:00 AM
Último dia do mês: 9/30/2004 12:00:00 AM
O mês possui 31 dias?: False
A data cai em ua sexta-feira 13?: False
Elias Cavalcante, faltam 20 semanas para seu niver!
Sou de Libra?: True
```



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

```charp=
public class RegistroBRValidor{
	
	public bool validarCadastro( string email)
		{
		  bool validarE = email.Contains("@");
		  return validarE;
		}
	
	public bool validarSenha(string senha)
		{
		  bool validarE = senha.Contains("a");
		  return validarE;
		}
	
	 public string validarDominio( string dominio)
        {
	      string validarD = dominio.Substring(2,10);
	      return validarD;
       }
	
}

RegistroBRValidor val = new RegistroBRValidor();

bool em = val.validarCadastro("elias@gmail");
Console.WriteLine("Esse e-mail tem o @ ?" +em);

bool se = val.validarSenha("Marco2005");
Console.WriteLine("A senha possui uma vogal?" + se);

string domi = val.validarDominio("El@gmail.com");
Console.WriteLine("Dominio do e-mail : " + domi);
//
Esse e-mail tem o @ ? True
A senha possui uma vogal ? True
Dominio do e-mail : @gmail.com
```


### 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.**

```charp=

```


### 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 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.**
```charp=

```

### 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.**
```charp=
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 p = new Pedido();
    p.Valor = 1000;
    p.AnosGarantia = 2;
    p.DistanciaEntregaKm = 50;
    p.Parcelas = 18;
    
    double cupom = 10;

    LojaMoveis loja = new LojaMoveis();
    
    Nota n = loja.CalcularCompra(p, cupom);

    Console.WriteLine("Valor final é: " + n.ValorFinal);
    Console.WriteLine("Nota Fiscal é: " + n.NotaFiscal);

//
Valor final é: 2068.46
Nota Fiscal é: NF20210514193741
```