---
# 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
>[color=pink]**Autor:** Letícia Rodrigues da Silva
**Turma:** IndoD 
**Número:** 25

[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.**
```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 RetanguloIguais(int a1, int b1, int a2, int b2)
	{
		double area1 = a1 * b1;
		double area2 = a2 * b2;
		bool verificar = area1 == area2;
		return verificar;
	}
}
	
Trigonometria t = new Trigonometria();

double r = t.AreaRetangulo(15, 5);
Console.WriteLine(r);
Console.WriteLine();

	
double p = t.PerimetroRetangulo(3, 8);
Console.WriteLine(p);
Console.WriteLine();


bool v = t.RetanguloIguais(12, 4, 8, 6);
Console.WriteLine(v);
// 75
// 22
// True
```

## 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=
public class Forma
{
	public double basee {get; set;}
	public double altura {get; set;}
}

public class Trigonometria 
{
		public double AreaRetangulo(Forma f)
	{
		   double area = f.basee * f.altura;
		   return area;
	}
	
	public double AreaTriangulo(Forma f)
	{
		double area = (f.basee * f.altura) / 2;
		return area;
	}
	
	public double AreaParalelogramo(Forma f)
	{
		double area = f.basee * f.altura;
		return area;
	}
}



Trigonometria t = new Trigonometria();

Forma tri = new Forma();
tri.altura = 10;
tri.basee = 4;

double x = t.AreaRetangulo(tri);
Console.WriteLine(x);
Console.WriteLine();

double y = t.AreaTriangulo(tri);
Console.WriteLine(y);
Console.WriteLine();

double z = t.AreaParalelogramo(tri);
Console.WriteLine(z);
// 40
// 20
// 40
```

## 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;
	public DateTime Niver;
}


public class Calendario
{
	public DateTime PrimeiroDia(DateTime data)
	{
		DateTime primeiroDia = new DateTime(data.Year, data.Month, 1);
		return primeiroDia;
	}
	
	public DateTime UltimoDia(DateTime data)
	{
		DateTime dia = new DateTime(2021, 05, 10);
		DateTime proxMes = new DateTime(data.Year, data.Month, 1);
		DateTime p = proxMes.AddMonths(1);
		DateTime ultimoDia = p.AddDays(-1);
		return ultimoDia;
	}
	
	public bool Possui31Dias(DateTime data)
	{
		bool possui = DateTime.DaysInMonth(data.Day, data.Month) == 31;
		return possui;
	}
	
	public bool SextaFeira13(DateTime data)
	{
		bool sexta = data.DayOfWeek == DayOfWeek.Friday;
		bool sexta13 = data.Day == 13;
		return sexta13 && sexta;
	}
	
	public string SemanaParaNiver(Pessoa pessoa)
	{
		DateTime dia = DateTime.Now;
		DateTime d = new DateTime(2021, 08, 31);
		int totalDias = (d - dia).Days / 7;
		string mensagem = pessoa.Nome + ", faltam " + totalDias + " semanas para seu niver.";
		return mensagem;		
	}
	
	public bool SouLibra (Pessoa pessoa)
	{
		bool mes = pessoa.Niver.Month == 9 && pessoa.Niver.Day > 22;
		bool mes1 = pessoa.Niver.Month == 10 && pessoa.Niver.Day <23;
		bool libra = mes == true || mes1 == true;
		return libra;
	}
}


Calendario c = new Calendario();

Pessoa p = new Pessoa();
p.Niver = new DateTime(2003, 08, 31);
p.Nome = "Letícia";


DateTime pri = new DateTime(2021, 04, 01);
Console.WriteLine(c.PrimeiroDia(pri));
Console.WriteLine();

DateTime ult = new DateTime(2021, 08, 20);
Console.WriteLine(c.UltimoDia(ult));
Console.WriteLine();

DateTime possui = new DateTime(2021, 08, 10);
Console.WriteLine(c.Possui31Dias(possui));
Console.WriteLine();

DateTime dias = new DateTime(2021, 08, 13);
Console.WriteLine(c.SextaFeira13(dias));
Console.WriteLine();

string niver = c.SemanaParaNiver(p);
Console.WriteLine(niver);
Console.WriteLine();

bool signo = c.SouLibra(p);
Console.WriteLine(signo);
// 4/1/2021
// 8/31/2021
// True
// True
// Letícia, faltam 15 semanas para seu niver.
// 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.* Deve-se enviar o domínio completo.
ex: meudominio.com.br**
```csharp=			
public class RegistroBrValidator 
{
	public bool ValidarCadastro(string email, string senha)
	{
		bool validar = email.Length >= 8;
		bool validar1 = email.Contains("@");
		
		bool vogal = senha.Contains("a") || senha.Contains("e") || senha.Contains("a") || senha.Contains("a") || senha.Contains("a");
		bool caracters = senha.Contains("!") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@") || senha.Contains("@");
		bool validarSenha = vogal && caracters;
		
		int qsenha = senha.Length;
		bool result = caracters == validarSenha == qsenha >= 8;
		return result && validar && validar1 && validarSenha;
	}
	
	
	public bool ValidarDominio(string dominio)
	{
		bool v = dominio.EndsWith(".com.br");
		bool caracter = dominio.Length >= 5;
		return v && caracter;
	}
	
}


RegistroBrValidator r = new RegistroBrValidator();

bool v = r.ValidarCadastro("le23@gmail.com", "le0!rodrig");
Console.WriteLine(v);
Console.WriteLine();


bool d = r.ValidarDominio("www.instagram.com.br");
Console.WriteLine(d);
// True
// 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 bool AreasIguais(Retangulo ret1, Retangulo ret2)
	{
		double area1 = AreaRetangulo(ret1);
		double area2 = AreaRetangulo(ret2);
		bool igual = area1 == area2;
		return igual;
	}
	
	public double AreaRetangulo(Retangulo ret)
	{
			double area = ret.basee * ret.altura;
			return area; 
	}
	
	
	public bool TransferenciaPossivel(Cilindro c1, Cilindro c2)
	{
		double cili = VolumeCilindro(c1);
		double cili2 = VolumeCilindro(c2);
		return cili == cili2;
	}
	
	public double VolumeCilindro(Cilindro cilindro)
	{
		double volume = Math.PI * (cilindro.Raio * cilindro.Raio) * cilindro.altura;
		double arredondar = Math.Round(volume, 2);
		return arredondar;
	}
	
}


Trigonometria tri = new Trigonometria();


Retangulo ret1 = new Retangulo();
ret1.basee = 12;
ret1.altura = 5;

Retangulo ret2 = new Retangulo();
ret2.basee = 10;
ret2.altura = 3;

Cilindro cili = new Cilindro();
cili.altura = 8;
cili.Raio = 3.8;

Cilindro cili2 = new Cilindro();
cili2.altura = 20;
cili2.Raio = 8;


double a = tri.AreaRetangulo(ret1);
Console.WriteLine("Area do Retangulo é ret1: " + a);
Console.WriteLine();

double b = tri.AreaRetangulo(ret2);
Console.WriteLine("Area do Retangulo é ret2: " + b);
Console.WriteLine();
	
bool c = tri.AreasIguais(ret1, ret2);
Console.WriteLine("Os retangulos são iguais? " + c);
Console.WriteLine();

double d = tri.VolumeCilindro(cili);
Console.WriteLine("O volume do cilindro é: " + d);
Console.WriteLine();

bool e = tri.TransferenciaPossivel(cili, cili2);
Console.WriteLine("Transferencia é possível? " + e);

// Area do Retangulo é ret1: 60
// Area do Retangulo é ret2: 30
// Os retangulos são iguais? False
// O volume do cilindro é: 362.92
// Transferencia é possível? 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 
{
	public double TotalMasculino(Compra compra)
	{
		double masc = (compra.QtdBlusa * 30.00) + (compra.QtdCalca * 30.00) + (compra.QtdCamiseta * 30.00);
		return masc;
	}
	
	public double TotalFeminino(Compra compra)
	{
		double fem = (compra.QtdBlusa * 40.00) + (compra.QtdCalca * 40.00) + (compra.QtdCamiseta * 40.00);
		return fem; 
	}
	
	public double TotalInfantil(Compra compra)
	{
		double inf = (compra.QtdBlusa * 20.00) + (compra.QtdCalca * 20.00) + (compra.QtdCamiseta * 20.00);
		return inf;
	}
	
	public double CalcularTotal(Compra masculino, Compra feminino, Compra infantil)
	{
		double m = TotalMasculino(masculino);
		double f = TotalFeminino(feminino);
		double i = TotalInfantil(infantil);
		double c = TotalCalcados(masculino.QtdCalcados, feminino.QtdCalcados, infantil.QtdCalcados);
		double total = m + f + i + c;
		return total;
	}
	
	public double TotalCalcados(int qtdCalcadoMasculino, int qtdCalcadoFeminino, int qtdCalcadoInfantil)
	{
		double t = (qtdCalcadoMasculino + qtdCalcadoFeminino + qtdCalcadoInfantil) * 35.00;
		return t;	
	}
}

Brecho b = new Brecho();

Compra co = new Compra();
co.QtdBlusa = 3;
co.QtdCalca = 2;
co.QtdCalcados = 5;
co.QtdCamiseta = 4;

double tt = b.CalcularTotal(co, co, co);
Console.WriteLine("O valor total da compra é: " + tt);
// O valor total da compra é: 1335
```

## 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 DistanciaEntreKm { get; set; }
	public int Parcelas         { get; set; }
}

public class Nota
{
	public double ValorFinal;
	public string NotaFiscal;
}

public class LojaMoveis
{
	public double ValorDesconto(double Compra, double cupom)
	{
		return Compra * (cupom/100);	
	}
	
	public double ValorGarantia(double valorCompra, int Anos)
	{
		return valorCompra * (15 / 100) * Anos;	
	}
	
	public double ValorFrete(int distancia)
	{
		return distancia / 10 * 3;	
	}
	
	public double ValorJuros(double valor, int parcelas)
	{
		return valor * Math.Pow(1 + 0.3, parcelas);
	}
	
	public Nota CalcularCompra(Pedido pedido, double cupom)
	{
		double desconto = ValorDesconto(pedido.valor, cupom);
        double garantia = ValorGarantia(pedido.valor, pedido.AnosGarantia);
        double frete = ValorFrete(pedido.DistanciaEntreKm);

        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;	
	}
}

Pedido p = new Pedido();
    p.valor = 580;
    p.AnosGarantia = 2;
    p.DistanciaEntreKm = 30;
    p.Parcelas = 10;
    
    double cupom = 8;

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

Console.WriteLine("O valor final é: " + n.ValorFinal);
Console.WriteLine();

Console.WriteLine("Nota Fiscal é: " + n.NotaFiscal);
// O valor final é: 7480.2
// Nota Fiscal é: NF20210515030057
```