---
# System prepended metadata

title: Funções Packages | Fund. Lógica

---

# Funções Packages | Fund. Lógica
**Author:** Matheus Rafael Morato Rocha
**Turma:** InfoC
**Número:** 40

[TOC]


## Nível 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 basee, int altura)
	{
		int Area = basee * altura;
		return Area;
	}
	public int PerimetroRetangulo (int basee, int altura)
	{
		int Perimetro = basee + basee + altura + altura;
		return Perimetro;
	}
	
	public bool RetangulosIguais (int altura1,int basee1,int altura2, int basee2)
	{
		double area1  = AreaRetangulo(basee1, altura1);
		double area2 = AreaRetangulo(basee2, altura2);
		bool iguais = area1 == area2;
		return iguais;
	}
}

trigonometria trig = new trigonometria();
	
int a = trig.AreaRetangulo(4,2);
System.Console.WriteLine("Area do retangulo: " + a);

int x = trig.PerimetroRetangulo (4,2);
System.Console.WriteLine("Perimetro do retangulo: " + x);	

bool z = trig.RetangulosIguais(4,2,3,5);
System.Console.WriteLine("Retangulos Iguais: " + z);
		
//Area do retangulo: 8
//Perimetro do retangulo: 12
//Retangulos Iguais: False
```

## Nível 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 Forma
{
	public double basee {get;set;}
	public double altura {get;set;}
}

public class trigonometria
{
	public double AreaRetangulo(Forma retangulo)
	{
		double Area = retangulo.basee * retangulo.altura;
		return Area;
	}
	public double AreaTriangulo (Forma triangulo)
	{
		double AreaTri = (triangulo.basee * triangulo.altura) /2;
		return AreaTri;
	}	
	public double AreaParalelogramo(Forma retangulo)
	{
		double AreaPara = retangulo.basee * retangulo.altura;
		return AreaPara;
	}
}
		
Forma form = new  Forma();	
form.basee = 4;
form.altura = 2;


trigonometria trig = new trigonometria();
double a = trig.AreaRetangulo(form);
double b = trig.AreaTriangulo(form);
double c = trig.AreaParalelogramo(form);

System.Console.WriteLine("Area do retangulo: " + a);
System.Console.WriteLine("Area do Triangulo: "  + b);
System.Console.WriteLine("Area Paralelogramo: " + c);

//Area do retangulo: 8
//Area do Triangulo: 4
//Area Paralelogramo: 8
```

## Nível 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 mes = new DateTime(data.Year,data.Month,1);
		DateTime proximo = mes.AddMonths(1);
		return proximo;
	}	
	
	public DateTime UltimoDia (DateTime data)
	{
		DateTime a = data.AddMonths(1);
		int b = data.Day;
		DateTime d = a.AddDays(-b);
		return d;
	}
	
	public bool Possui31Dias (DateTime data)
	{
		bool a = data.Day == 31;
		return a;
	}
	
	public bool SextaFeira13 (DateTime data)
	{
		bool a = data.Day == 13;
		bool z = data.DayOfWeek == DayOfWeek.Friday;
		bool x = a && z;
		return  x;
	}
	
	public string SemanasParaNiver (Pessoa Aniversario)
	{		
		int ano = DateTime.Now.Year;
		DateTime Niver = new DateTime(ano, Aniversario.Niver.Month,Aniversario.Niver.Day);
		TimeSpan Dias = DateTime.Now - Niver;
		double Semanas = Dias.TotalDays / 7;
		double SemanasTotal = Math.Ceiling(Semanas);
		double SemandaPositivo = Math.Abs(SemanasTotal);
		string Mensagem = Aniversario.nome  +  ",faltam " + SemandaPositivo + " semanas para seu niver.";
		return Mensagem;
	}
	
	public bool SouDeLibra (Pessoa Signo)
	{
		bool op = Signo.Niver.Month == 9 && Signo.Niver.Day > 22;
		bool op2 = Signo.Niver.Month == 10 && Signo.Niver.Day < 23;
	
		bool Libra = op == true || op2 == true;
		return Libra;
	}
}

Pessoa Humano = new Pessoa();
Humano.Niver = new DateTime (2004, 09, 10);
Humano.nome = "Matheus Rafael";

DateTime data = new DateTime (2021, 08, 13);

Calendario datas = new Calendario();
DateTime a = datas.PrimeiroDia(data);
DateTime b = datas.UltimoDia(data);
bool c = datas.Possui31Dias(data);
bool d = datas.SextaFeira13(data);
string e = datas.SemanasParaNiver(Humano);
bool f = datas.SouDeLibra(Humano);

Console.WriteLine("Primeiro dia do més: " + a);
Console.WriteLine("Ùltimo dia do més: " + b);
Console.WriteLine("O més possui 31 dias: " + c);
Console.WriteLine("Esse dia e sexta-feira 13" + d);
Console.WriteLine(e);
Console.WriteLine("Sou de libra?: " + f);

//Primeiro dia do més: 9/1/2021 12:00:00 AM
//Ùltimo dia do més: 8/31/2021 12:00:00 AM
//O més possui 31 dias: False
//Esse dia e sexta-feira 13True
//Matheus Rafael,faltam 17 semanas para seu niver.
//Sou de libra?: False

```

## Nível 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=
using System;


public class RegistroBRValidator
{
	public bool ValidarCadastro (string email,string senha)
    {
		bool arrouba  = email.Contains("@");

		int possui = email.IndexOf("@");
		string b = email.Substring(possui,2);

		int a = possui -2;
		string x = email.Substring(a,2);

		int s = email.IndexOf(x);
		int f = email.IndexOf(b);

		bool r = s == 2;
		bool e = f == 2;
		bool Verificar = e == r;

		bool password1 = senha.Contains("a") || senha.Contains("e") ||
						 senha.Contains("i") || senha.Contains("o") ||
						 senha.Contains("u") || senha.Contains("A") || 
						 senha.Contains("E") || senha.Contains("I") || 
						 senha.Contains("O") || senha.Contains("U");


		bool password2 = senha.Contains("!") || senha.Contains("@") ||
						 senha.Contains("#") || senha.Contains("$") ||
						 senha.Contains("%") || senha.Contains("¨") ||
						 senha.Contains("&") || senha.Contains("*") ||
						 senha.Contains("(") || senha.Contains(")");

		bool tamanho = senha.Length == 8;


		return arrouba && password1 && password2 && tamanho && Verificar;		
	}
	
	
	
	public bool ValidarDominio (string dominio)
	{
		int a = dominio.IndexOf(".");
		string b = dominio.Substring(a,7);
		bool r = b.Contains(".com.br");
			
			
		bool z = 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");

		int s = dominio.LastIndexOf("@");
		string g = dominio.Substring(s,5);
		bool v = g.Length == 5; 

		return z && v && r;
	}
}

	
RegistroBRValidator email = new RegistroBRValidator();
bool a = email.ValidarCadastro("matheusrafa12@gmail.com.br","a25#%#55");
bool b = email.ValidarDominio("matheusrafa12.com.br");
							  
Console.WriteLine(a);
Console.WriteLine(b);


// True
// True
```


## Nível 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 Base {get;set;}
}

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

public class Trigonometria
{
    public bool AreaIguais (Retangulo ret1,Retangulo ret2)
    {
        double area1 = AreasRetangulo(ret1);
        double area2 = AreasRetangulo(ret2);
        bool a = area1 == area2;
        return a;
    }

    public double AreasRetangulo(Retangulo ret)
    {
        double area = ret.Base * ret.Altura;
        return area;

    }
	public double VolumeCilindro (Cilindro cilindro)
	{
		double a = 3.14 * Math.Pow(cilindro.Raio,2) * cilindro.Altura;
		return a;
	}	

	public bool TransferenciaPossivel (Cilindro ci1,Cilindro ci2)
	{
		double Volume1 = VolumeCilindro(ci1);
		double Volume2 = VolumeCilindro(ci2);
		bool a = Volume1 == Volume2;
		return a;
	}
}

Retangulo  Ret = new Retangulo();
Ret.Altura = 4;
Ret.Base = 2;

Cilindro ci = new Cilindro();
ci.Altura = 5;
ci.Raio = 10;


Trigonometria trig = new Trigonometria();
double a = trig.AreasRetangulo(Ret);
bool b = trig.AreaIguais(Ret, Ret);
bool c = trig.TransferenciaPossivel(ci,ci);
double d = trig.VolumeCilindro(ci);

Console.WriteLine("Area do Retangulo " + a);
Console.WriteLine("Areas Iguais " + b);
Console.WriteLine("Transferencia Possivel " +c);
Console.WriteLine("Volume Cilindro " + d);



//8
//True
//True
//1570

```
## Nível 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;}
}


Compra a = new Compra();
a.QtdCalca = 1;
a.QtdCamiseta = 2;
a.QtdBlusa = 3;
a.QtdCalcados = 3;

Compra b = new Compra();
b.QtdCalca = 1;
b.QtdCamiseta = 2;
b.QtdBlusa = 3;
b.QtdCalcados = 3;

Compra c = new Compra();
c.QtdCalca = 1;
c.QtdCamiseta = 2;
c.QtdBlusa = 3;
c.QtdCalcados = 3;

public class Brecho
{
	public double CalcularTotal (Compra masculino,Compra feminino,Compra infantil)
	{
		double TotalFinal = TotalMasculino(masculino) + TotalFeminino(feminino) + TotalInfantil(infantil) + TotalCalcados(masculino.QtdCalcados, feminino.QtdCalcados, infantil.QtdCalcados);
        return TotalFinal;
	}
	
	private double TotalMasculino (Compra compra)
	{
		double total = compra.QtdCalca + compra.QtdCamiseta + compra.QtdBlusa * 40;
		return total;
	}
	
	private double TotalFeminino (Compra compra)
	{
		double total = compra.QtdCalca + compra.QtdCamiseta + compra.QtdBlusa * 20;
		return total;
	}
	
	private double TotalInfantil (Compra compra)
	{
		double total = compra.QtdCalca + compra.QtdCamiseta + compra.QtdBlusa *  20;
		return total;
	}
	
	private double TotalCalcados (int qtdCalcadoMasculino, int qtdCalcadoFeminino, int qtdCalcadoInfantil)
	{
		double total = qtdCalcadoMasculino + qtdCalcadoFeminino + qtdCalcadoInfantil * 35;
		return total;
	}
}

	Brecho venda = new Brecho();
	double total = venda.CalcularTotal(a,b,c);

Console.WriteLine(total);

// 360
```
## Nível 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 p = new Pedido();
    p.Valor = 5014;
    p.AnosGarantia = 5;
    p.DistanciaEntregaKm = 30;
    p.Parcelas = 20;
    
    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 é: 14958.39
//Nota Fiscal é: NF20210515001250

```