---
# System prepended metadata

title: SESSION THREE — FUNDAMENTOS DA LÓGICA

---

# SESSION THREE — FUNDAMENTOS DA LÓGICA
Author: Igor Lima Charles
N°: 18
Grade: INFOA


## ABSTRAÇÃO DE FUNÇÕES

###  EXERCÍCIO 1
```csharp=
using System;
					
public class Retangulo
{
	public double Basee		{get; set;}
	public double Altura	{get; set;}
}

public class Trigonometria
{

	public double AreaRetangulo (double Basee, double Altura)
	{
		return Basee * Altura;
	}
		
	
	public double PerimetroRetangulo (double Basee, double Altura)
	{
		return Basee + Basee + Altura + Altura;
	}
	
	
	public bool AreasIguais(Retangulo ret1, Retangulo ret2)
	{
	  return AreaRetangulo(ret1.Basee, ret1.Altura) == AreaRetangulo(ret2.Basee, ret2.Altura);
	}
}

Trigonometria termo = new Trigonometria ();
double x = termo.AreaRetangulo(5, 5);
Console.WriteLine("A área do retângulo é: " + x);

double y = termo.PerimetroRetangulo(5, 5);
Console.WriteLine("O perímetro do retângulo é:" + y);

Retangulo ret1 = new Retangulo();
ret1.Basee = 6;
ret1.Altura = 6;

Retangulo ret2 = new Retangulo();
ret2.Altura = 10;
ret2.Basee = 5;

bool a = termo.AreasIguais(ret1, ret2);
Console.WriteLine("Os dois retângulos são iguais? " + a)

A área do retângulo é: 25
O perímetro do retângulo é:20
Os dois retângulos são iguais? False
```


### EXERCÍCIO 2
```csharp=
using System;
					
public class Forma
{
	public double Base {get; set;}
	public double Altura {get; set;}
}

public class Trigonometria
{
	
	public double AreaRetangulo (Forma retangulo)
	{
		return retangulo.Base * retangulo.Altura;
	}
	
	public double AreaTriangulo (Forma triangulo)
	{
		return (triangulo.Base * triangulo.Altura) / 2;
	}
	
	public double AreaPararelogramo (Forma retangulo)
	{
		return retangulo.Base * retangulo.Altura;
	}
}

Trigonometria Termo = new Trigonometria ( );
Forma f = new Forma ();
f.Altura = 5;
f.Base = 6;

double x = Termo.AreaRetangulo(f);
Console.WriteLine("A área do retângulo é: " + x);

f.Altura = 6;
f.Base = 6;

double y = Termo.AreaTriangulo(f);
Console.WriteLine("A área do triângulo é: " + y);

f.Altura = 7;
f.Base = 7;

double z = Termo.AreaPararelogramo(f);
Console.WriteLine("A área do paralelogramo é: " + z)

A área do retângulo é: 30
A área do triângulo é: 18
A área do paralelogramo é: 49
```


### EXERCÍCIO 3
```csharp=
using System;
					
public class Pessoa
{
	public string Nome {get; set;}
	public DateTime Aniversario {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 a = DateTime.Now;
		DateTime b = new DateTime (a.Year, pessoa.Aniversario.Month, pessoa.Aniversario.Day);
		TimeSpan c = a - b;
		double d = c.TotalDays /7;
		double e = Math.Round(d);
		string f = $"pessoa.Nome faltam {e} semanas para o seu aniversário";
		return f;
	}
	
		public bool SouDeLibra (Pessoa pessoa)
	{
		DateTime SignoDetestavel1 = new DateTime(pessoa.Aniversario.Year,09,23);
		DateTime SignoDetestavel2 = new DateTime(pessoa.Aniversario.Year,10,22);
		return pessoa.Aniversario >= SignoDetestavel1 && pessoa.Aniversario <= SignoDetestavel2;
	}	
	
}


Pessoa p = new Pessoa ();
p.Nome = "Igor Lima Charles";
p.Aniversario = new DateTime (2004, 08, 12);

Calendario n = new Calendario ( );
DateTime a = n.PrimeiroDia(p.Aniversario);
DateTime b = n.UltimoDia(p.Aniversario);
bool c = n.Possui31Dias(p.Aniversario);
bool d = n.SextaFeira13(p.Aniversario);
string e = n.SemanasParaNiver(p);
bool f = n.SouDeLibra(p);

Console.WriteLine("O primeiro dia do mês é: " + a);
Console.WriteLine("O último dia do mês é: " + b);
Console.WriteLine("O mês de aniversário possui 31 dias? " + c );
Console.WriteLine("A data cai numa sexta-feira 13? " + d);
Console.WriteLine("Quantas semanas faltam para o aniversário? " + e);
Console.WriteLine("O aniversariante pertence ao detestável signo de Libra? " + f);

O primeiro dia do mês é: 8/1/2004 12:00:00 AM
O último dia do mês é: 8/31/2004 12:00:00 AM
O mês de aniversário possui 31 dias? True
A data cai numa sexta-feira 13? False
Quantas semanas faltam para o aniversário? pessoa.Nome faltam -13 semanas para o seu aniversário
O aniversariante pertence ao detestável signo de Libra? False
```


### EXERCÍCIO 4
```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 x = registroBR.ValidarCadastro("IgorLimaCharlesgmail.com", "99083");
Console.WriteLine("Cadastro mencionado está ok? " + x);

RegistroBRValidator novoRegistroBR = new RegistroBRValidator();
bool z = novoRegistroBR.ValidarCadastro("1gorLim4Charles@gmail.com.br", "20040812");
Console.WriteLine("Cadastro mencionado está ok? " + z);

x = Cadastro mencionado está ok? False
z = Cadastro mencionado está ok? True
```


### EXERCÍCIO 5
```csharp=
using System;
					
public class Retangulo
{
	public double Basee		{get; set;}
	public double Altura	{get; set;}
}

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

public class Trigonometria
{

	public double AreaRetangulo (Retangulo x)
	{
		return x.Basee * x.Altura;
	}
		
	public bool AreasIguais(Retangulo ret1, Retangulo ret2)
	{
	  return AreaRetangulo(ret1) == AreaRetangulo(ret2);
	}
	
	public double VolumeCilindro (Cilindro cilindro)
	{
		double a = (Math.PI * (Math.Pow(cilindro.Raio, 2)) * cilindro.Altura);
		double b = Math.Round(a, 2);
		return b;
	}
	
		public bool TransferenciaPossivel (Cilindro ci1, Cilindro ci2)
	{
		 return VolumeCilindro(ci1) == VolumeCilindro(ci2);
	}
}

Retangulo r1 = new Retangulo ( );
r1.Basee = 5;
r1.Altura = 5;

Retangulo r2 = new Retangulo ( );
r2.Basee = 6;
r2.Altura = 6;

Cilindro c1 = new Cilindro ( );
c1.Altura = 4;
c1.Raio = 5;

Cilindro c2 = new Cilindro ( );
c2.Altura = 5;
c2.Raio = 4;

Trigonometria r = new Trigonometria();
double x = r.AreaRetangulo(r1);
Console.WriteLine("AreaRetangulo: " + x);

bool y = r.AreasIguais(r1, r2);
Console.WriteLine("AreasIguais: " + y );

double z = r.VolumeCilindro(c1);
Console.WriteLine("O volume do cilindro é de: " + z);

bool p = r.TransferenciaPossivel(c1, c2);
Console.WriteLine(" É possível transferir de um cilindro pra outro? " + p);

AreaRetangulo: 25
AreasIguais: False
O volume do cilindro é de: 314.16
É possível transferir de um cilindro pra outro? False
```


### EXERCÍCIO 6
```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
{
	public double CalcularTotal(Compra c1, Compra c2, Compra c3)
	{
		   double a = TotalMasculino(c1);
		   double b = TotalFeminino(c2);
		   double c = TotalInfantil(c3);
		   double d = TotalCalcados(c1.QtdCalcados, c2.QtdCalcados, c3.QtdCalcados);
		   
		   return a + b + c + d;
	}
	
	private double TotalMasculino(Compra x)
	{
	       double a = x.QtdBlusa * 30;
		   double b = x.QtdCalca * 30;
		   double c = x.QtdCamiseta * 30;
		   return a + b + c;   
	}
	
	private double TotalFeminino(Compra x)
	{
		   double a = x.QtdBlusa * 40;
		   double b = x.QtdCalca * 40;
		   double c = x.QtdCamiseta * 40;
		   return a + b + c; 
	}	
	
	private double TotalInfantil(Compra x)
	{
	       double a = x.QtdBlusa * 20;
		   double b = x.QtdCalca * 20;
		   double c = x.QtdCamiseta * 20;
		   return a + b + c; 
	}
	
	private double TotalCalcados(int qtdCalcadoMasculino, int qtdCalcadoFeminino, int qtdCalcadoInfantil)
	{
	       double a = qtdCalcadoMasculino * 35;
		   double b = qtdCalcadoFeminino * 35;
		   double c = qtdCalcadoInfantil * 35;
		   return a + b + c;
	}
}

Compra Compra1 = new Compra ( );
Compra1.QtdCamiseta = 4;
Compra1.QtdCalca = 2;
Compra1.QtdBlusa = 1;
Compra1.QtdCalcados = 1;

Compra Compra2 = new Compra ( );
Compra2.QtdBlusa = 1;
Compra2.QtdCalca = 2;
Compra2.QtdCamiseta = 0;
Compra2.QtdCalcados = 1;

Compra Compra3 = new Compra ( );
Compra3.QtdCalca = 2;
Compra3.QtdCamiseta = 6;
Compra3.QtdBlusa = 0;
Compra3.QtdCalcados = 1;

Brecho brecho = new Brecho ( );
double z = brecho.CalcularTotal(Compra1, Compra2, Compra3);
Console.WriteLine($"O valor total de sua compra é de {z} reais");

O valor total de sua compra é de 595 reais
```


### EXERCÍCIO 7
```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 valorFinal = ValorJuros( pedido.Valor - ValorDesconto(pedido.Valor, cupom) + ValorGarantia(pedido.Valor, pedido.AnosGarantia)
        + ValorFrete(pedido.DistanciaEntregaKm), 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 = 1500;
p.AnosGarantia = 3;
p.DistanciaEntregaKm = 20;
p.Parcelas = 10; 
double cupom = 15;

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

Console.WriteLine($"O valor final é de {x.ValorFinal} reais e o número de sua DANTE/NF é: {x.NotaFiscal}");

O valor final é de 2628.7 reais e o número de sua DANTE/NF é: NF20210515163945
```
