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