# Session Three: It's always time to restart | Csharp
autor : Isabela Silva Sousa
[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=
using System;
public class CalcularRetangulo
{
public double Basee {get; set;}
public double Altura {get; set;}
}
public class CalculoTrigonometria
{
public bool RetanguloIguais(CalcularRetangulo ret1, CalcularRetangulo ret2)
{
return AreaRetangulo(ret1.Basee, ret1.Altura) == AreaRetangulo(ret2.Basee, ret2.Altura);
}
public 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;
}
}
CalculoTrigonometria a = new CalculoTrigonometria();
CalcularRetangulo r1 = new CalcularRetangulo();
r1.Basee = 2;
r1.Altura = 22;
CalcularRetangulo r2 = new CalcularRetangulo();
r2.Basee = 4;
r2.Altura = 24;
double b = a.PerimetroRetangulo(44, 96);
Console.WriteLine(b);
bool c = a.RetanguloIguais(r1, r2);
Console.WriteLine(c);
```
## 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=
using System;
public class CalculoForma
{
public double Basee {get; set;}
public double Altura {get; set;}
}
public class CalculoTrigonometria
{
public double retangulo(CalculoForma d)
{
double area1 = d.Basee * d.Altura;
return area1;
}
public double triangulo(CalculoForma d)
{
double area2 = d.Basee * d.Altura;
return area2;
}
public double paralelogramo(CalculoForma d)
{
double area3 = d.Basee * d.Altura;
return area3;
}
}
CalculoForma tri = new CalculoForma();
tri.Basee = 2;
tri.Altura = 18;
CalculoForma ret = new CalculoForma();
ret.Basee = 7;
ret.Altura = 21;
CalculoForma para = new CalculoForma();
para.Basee = 8;
para.Altura = 42;
CalculoTrigonometria e = new CalculoTrigonometria();
double a = e.retangulo(ret);
Console.WriteLine("A área do retangulo é: " + a);
double b = e.triangulo(tri);
Console.WriteLine("A área do triangulo é: " + b);
double c = e.paralelogramo(para);
Console.WriteLine("A área do paralelogramo é: " + c);
```
## 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 {get; set;}
public DateTime niver {get; set;}
}
public class Calendario
{
public DateTime PrimeiroDia(DateTime data)
{
DateTime primeiroDiaDoMes = data.AddDays(1 - data.Day);
return primeiroDiaDoMes;
}
public DateTime UltimoDia(DateTime data)
{
DateTime ultimoDiaDoMes = data.AddMonths(1).AddDays(- data.Day);
return ultimoDiaDoMes;
}
public bool Possui31Dias(DateTime data)
{
return UltimoDia(data).Day == 30;
}
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.niver.Month, pessoa.niver.Day);
TimeSpan c = b - a;
double d = c.TotalDays/7;
double e = Math.Round(d);
string f = pessoa.nome + ", faltam " + e + " semanas para seu aniversario!";
return f;
}
public bool SouDeLibra (Pessoa pessoa)
{
DateTime g = new DateTime(pessoa.niver.Year,05,05);
DateTime f = new DateTime(pessoa.niver.Year,07,01);
return pessoa.niver >= g
&&
pessoa.niver <= f;
}
}
Pessoa f = new Pessoa();
f.nome = "Isabela Silva Sousa";
f.niver = new DateTime(2004,05,05);
Calendario h = new Calendario();
DateTime b = h.PrimeiroDia(f.niver);
DateTime i = h.UltimoDia(f.niver);
bool j = h.Possui31Dias(f.niver);
bool k = h.SextaFeira13(f.niver);
string l = h.SemanasParaNiver(f);
bool m = h.SouDeLibra(f);
Console.WriteLine("Primeiro dia do mês " + b);
Console.WriteLine("Último dia do mês " + i);
Console.WriteLine("O mês possui 31 dias?: " + j);
Console.WriteLine("A data cai em uma sexta-feira 13?: " + k);
Console.WriteLine(l);
Console.WriteLine("Sou de Touro?: " + m);
```
## 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=
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 a = registroBR.ValidarCadastro("isayogue2015@gmail.com", "969");
Console.WriteLine("Cadrastro ok?: " + a);
```
# 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 CalcularRetangulo
{
public double Altura {get; set;}
public double Basee {get; set;}
}
public class CalcularCilindro
{
public double Raio {get; set;}
public double Altura {get; set;}
}
public class CalcularTrigonometria
{
public double AreaRetangulo(CalcularRetangulo d)
{
double area = d.Altura * d.Basee;
return area;
}
public bool RetanguloIguais(CalcularRetangulo rt1, CalcularRetangulo rt2)
{
double ret1 = AreaRetangulo(rt1);
double ret2 = AreaRetangulo(rt2);
return ret1 == ret2;
}
public double VolumeCilindro(CalcularCilindro cl)
{
double total = cl.Altura * cl.Raio;
return total;
}
public bool TransferenciaValida(CalcularCilindro cl1, CalcularCilindro cl2)
{
double ci1 = VolumeCilindro(cl1);
double ci2 = VolumeCilindro(cl2);
return ci1 == ci2;
}
}
CalcularTrigonometria a = new CalcularTrigonometria();
CalcularRetangulo ret1 = new CalcularRetangulo();
ret1.Basee = 8;
ret1.Altura = 42;
CalcularRetangulo ret2 = new CalcularRetangulo();
ret2.Basee = 7;
ret2.Altura = 21;
CalcularCilindro cl1 = new CalcularCilindro();
cl1.Altura = 9;
cl1.Raio = 3;
CalcularCilindro cl2 = new CalcularCilindro();
cl2.Altura = 10;
cl2.Raio = 5;
double b = a.AreaRetangulo(ret1);
Console.WriteLine(b);
double c = a.VolumeCilindro(cl1);
Console.WriteLine(c);
bool d = a.RetanguloIguais(ret1, ret2);
Console.WriteLine(d);
bool e = a.TransferenciaValida(cl1, cl2);
Console.WriteLine(e);
```
# 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
{
private double TotalMasculino (Compra cp)
{
double compra = (cp.QtdCalca * 30.00) + (cp.QtdCamiseta * 30.00) + (cp.QtdBlusa * 30.00);
return compra;
}
private double TotalFeminino (Compra cp)
{
double compra = (cp.QtdCalca * 40.00) + (cp.QtdCamiseta * 40.00) + (cp.QtdBlusa * 40.00);
return compra;
}
private double TotalInfantil (Compra cp)
{
double compra = (cp.QtdCalca * 20.00) + (cp.QtdCamiseta * 20.00) + (cp.QtdBlusa * 20.00);
return compra;
}
private double TotalCalcados (int QtdMasculino, int QtdFeminino, int QtdInfantil)
{
double compra = (QtdMasculino + QtdFeminino + QtdInfantil) * 35.00;
return compra;
}
public double TotalCompra (Compra masculino, Compra feminino, Compra infantil)
{
double a = TotalMasculino(masculino);
double b = TotalFeminino(feminino);
double c = TotalInfantil(infantil);
double d = TotalCalcados(masculino.QtdCalcados, feminino.QtdCalcados, infantil.QtdCalcados);
double total = a + b + c + d;
return total;
}
}
Brecho bc = new Brecho();
Compra cp = new Compra();
cp.QtdBlusa = 2;
cp.QtdCalca = 1;
cp.QtdCalcados = 1;
cp.QtdCamiseta = 5;
double e = bc.TotalCompra(cp, cp ,cp);
Console.WriteLine(e);
```
# 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 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("YYYYMMDDHHmm");
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 a = new Pedido();
a.Valor = 1000;
a.AnosGarantia = 2;
a.DistanciaEntregaKm = 50;
a.Parcelas = 18;
double cupom = 10;
LojaMoveis loja = new LojaMoveis();
Nota b = loja.CalcularCompra(a, cupom);
Console.WriteLine("Valor final é: " + b.ValorFinal);
Console.WriteLine("Nota fiscal é: " + b.NotaFiscal);
```