# Session three | Fund.Logica | 2° Bimestre
**Nome** Kevin Ribeiro de Andrade
**Número** 27
**Turma** INFO A
## 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 Retangulo
{
public double Altura { get; set;}
public double Baset { get; set;}
}
public class Trigonometria
{
public bool AreasIguais(Retangulo ret1, Retangulo ret2)
{
return Arearetangulo(ret1.Altura, ret1.Baset) == Arearetangulo(ret2.Altura, ret2.Baset);
}
public double Arearetangulo(double altura, double baset)
{
double calc_retangulo = altura * baset;
return calc_retangulo;
}
public double perimetroretangulo(double altura, double baset)
{
return (altura * 2) + (baset * 2);
}
}
Retangulo retang = new Retangulo();
retang.Altura = 29;
retang.Baset = 23;
Retangulo retang2 = new Retangulo();
retang2.Altura = 29;
retang2.Baset = 23;
Trigonometria Trig = new Trigonometria ();
bool resul = Trig.AreasIguais(retang, retang2);
Console.WriteLine(resul);
```
## 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 Forma
{
public double Altura { get; set;}
public double Baset { get; set;}
}
public class Trigonometria
{
public double Arearetangulo(Forma form)
{
double calc_retangulo = form.Altura * form.Baset;
return calc_retangulo;
}
public double Area_triang (Forma form)
{
return (form.Baset * form.Altura) / 2;
}
public double Area_paraleleogramo ( Forma form)
{
return form.Baset * form.Altura;
}
}
Forma Formas = new Forma();
Formas.Altura = 2;
Formas.Baset = 2;
Forma Forma2 = new Forma ();
Forma2.Baset = 2;
Forma2.Altura = 2;
Forma Forma3 = new Forma ();
Forma3.Baset = 2;
Forma3.Altura = 2;
Trigonometria Trig = new Trigonometria ();
double resulret = Trig.Arearetangulo(Formas);
Console.WriteLine(resulret);
double resultriang = Trig.Area_triang(Forma2);
Console.WriteLine(resultriang);
double resulparaleleogramo = Trig.Area_paraleleogramo(Forma3);
Console.WriteLine(resulparaleleogramo);
```
## 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=
public class Pessoa
{
public string nome {get; set;}
public DateTime aniversario {get; set;}
}
public class Calendario
{
public DateTime PrimeiroDiaMes(DateTime data)
{
DateTime ultimoDiaMes = new DateTime (data.Year, data.Month, DateTime.DaysInMonth(data.Year, data.Month));
DateTime calc_primeirodia = ultimoDiaMes.AddDays(-DateTime.DaysInMonth(data.Year, data.Month));
return calc_primeirodia.AddDays(1);
}
public DateTime UltimateDiames(DateTime data)
{
DateTime ultimoDiaMes = new DateTime (data.Year, data.Month, DateTime.DaysInMonth(data.Year, data.Month));
return ultimoDiaMes;
}
public bool contemdias(DateTime data)
{
DateTime qtddias = new DateTime (data.Year, data.Month, DateTime.DaysInMonth(data.Year, data.Month));
return qtddias.Day == 31;
}
public bool sextaFeira13 (DateTime data)
{
string diaSemana = data.DayOfWeek.ToString();
return diaSemana == "Friday" && data.Day == 13;
}
public string SemanaPraAniversario ( Pessoa p)
{
DateTime hoje = DateTime.Today;
TimeSpan dif = p.aniversario - hoje;
double calcSemana = dif.TotalDays / 7;
return $"{p.nome} faltam {calcSemana} Semanas para o seu aniversário";
}
public bool delibra (Pessoa p)
{
bool comparacao = p.aniversario.Day >= 23 && p.aniversario.Month >= 09
&&
p.aniversario.Day <= 22 && p.aniversario.Month <= 10;
return comparacao;
}
}
Pessoa p1 = new Pessoa ();
p1.nome = "André dos Santos";
p1.aniversario = new DateTime (1798, 02, 03);
Pessoa p2 = new Pessoa();
p2.nome = "Adiana dos Prados";
p2.aniversario = new DateTime (1254, 12, 30);
Calendario agenda = new Calendario ();
DateTime day1 = agenda.PrimeiroDiaMes(new DateTime (1097, 01, 15));
Console.WriteLine(day1);
DateTime lastDay = agenda.UltimateDiames(new DateTime (1001, 04, 16));
bool contemdia = agenda.contemdias(new DateTime (1005, 05, 19));
bool diadoTerror = agenda.sextaFeira13(new DateTime (1754, 02, 10));
string birthday = agenda.SemanaPraAniversario(p1);
bool compara = agenda.delibra(p2);
```
## 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 validator
{
public bool ValidarCadastro (string email, string Senha)
{
//long x = email.LastIndexOf("@");
string calcCaracteres = email.Substring(email.LastIndexOf("@"));
long caracteres2 = calcCaracteres.Length;
bool comparacaoFinal = email.Contains("@") && caracteres2 >= 2;
bool contem1 = Senha.Contains("#");
bool contem2 = Senha.Contains("$");
bool contem3 = Senha.Contains("*");
bool contem4 = Senha.Contains("^");
bool contem5 = Senha.Contains("&");
bool contem6 = Senha.Contains("/");
bool contem7 = Senha.Contains("\\"");
bool contem8 = Senha.Contains("(");
bool contem9 = Senha.Contains(")");
bool contemVogal = Senha.Contains("A");
bool contemVogal2 = Senha.Contains("a");
bool contemVogal3 = Senha.Contains("E");
bool contemVogal4 = Senha.Contains("e");
bool contemVogal5 = Senha.Contains("I");
bool contemVogal6 = Senha.Contains("i");
bool contemVogal7 = Senha.Contains("O");
bool contemVogal8 = Senha.Contains("o");
bool contemVogal9 = Senha.Contains("U");
bool contemVogal10 = Senha.Contains("u");
bool conj_contem = contem1 == true || contem2 == true || contem3 == true || contem4 == true || contem5 == true || contem6 == true || contem7 == true || contem8 == true || contem9 == true;
bool conj_contemVogal = contemVogal == true || contemVogal2 == true || contemVogal3 == true || contemVogal4 == true || contemVogal5 == true || contemVogal6 == true || contemVogal7 == true || contemVogal8 == true || contemVogal9 == true || contemVogal10 == true;
long qtdCaracteres = Senha.Length;
return conj\_contem && conj\_contemVogal && comparacaoFinal && qtdCaracteres == 8;
}
public bool validarDominio( string Dominio)
{
bool comecaNumero = Dominio.Contains("0");
bool comecaNumero1 = Dominio.Contains("1");
bool comecaNumero2 = Dominio.Contains("2");
bool comecaNumero3 = Dominio.Contains("3");
bool comecaNumero4 = Dominio.Contains("4");
bool comecaNumero5 = Dominio.Contains("5");
bool comecaNumero6 = Dominio.Contains("6");
bool comecaNumero7 = Dominio.Contains("7");
bool comecaNumero8 = Dominio.Contains("8");
bool comecaNumero9 = Dominio.Contains("9");
bool conj_Numero = comecaNumero == true || comecaNumero1 == true || comecaNumero2 == true || comecaNumero3 == true || comecaNumero4 == true || comecaNumero5 == true || comecaNumero6 == true || comecaNumero7 == true || comecaNumero8 == true || comecaNumero9 == true;
long qtdCaracteres = Dominio.Length;
return Dominio == ".com.br" && conj_Numero && qtdCaracteres == 5;
}
}
validator valid = new validator();
bool validCadastroFinal = valid.ValidarCadastro("soueu@gmail.com", "1954e");
Console.WriteLine(validCadastroFinal);
bool validdominio = valid.validarDominio("eeleavemario@gmail.com");
Console.WriteLine(validdominio);
```
## 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=
public class Retangulo
{
public double Altura { get; set;}
public double Baset { get; set;}
}
public class Cilindro
{
public double Raio { get; set;}
public double Alturas {get; set;}
}
public class Trigonometria
{
public bool AreasIguais(Retangulo ret1, Retangulo ret2)
{
return Arearetangulo(ret1) == Arearetangulo(ret2);
}
public double Arearetangulo(Retangulo rt)
{
double calc_retangulo = rt.Altura * rt.Baset;
return calc_retangulo;
}
public double volumecilindro (Cilindro cl)
{
return (Math.Pow(cl.Raio, 2)) * cl.Alturas;
}
public bool CabeCilindro (Cilindro cl1, Cilindro cl2)
{
return volumecilindro(cl1) == volumecilindro(cl2);
}
}
Retangulo retang = new Retangulo();
retang.Altura = 21;
retang.Baset = 23;
Retangulo retang2 = new Retangulo();
retang2.Altura = 29;
retang2.Baset = 23;
Cilindro cl1 = new Cilindro ();
cl1.Raio = 2;
cl1.Alturas = 2;
Cilindro cl2 = new Cilindro ();
cl2.Raio = 2;
cl2.Alturas = 2;
Trigonometria Trig = new Trigonometria ();
bool resulRetangulo = Trig.AreasIguais(retang, retang2);
Console.WriteLine(resulRetangulo);
bool resulCilindro = Trig.CabeCilindro(cl1, cl2);
Console.WriteLine(resulCilindro);
```
## 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=
public class Compra
{
public long QtdCalca {get; set;}
public long QtdCamiseta {get; set;}
public long QtdBlusa {get; set;}
public long QtdCalcados {get; set;}
}
public class Brecho
{
public double totalCompra(Compra compra1, Compra compra2, Compra compra3)
{
return totalMasculino(compra1) + totalFeminino(compra2) + totalInfantil(compra3) + totalCalcados(compra1.QtdCalcados, compra2.QtdCalcados, compra3.QtdCalcados);
}
private double totalMasculino(Compra compra)
{
double preco = 30.00;
return (compra.QtdCalca * preco) + (compra.QtdCamiseta * preco) + (compra.QtdBlusa * preco);
}
private double totalFeminino (Compra compra)
{
double preco = 40.00;
return (compra.QtdCalca * preco) + (compra.QtdCamiseta * preco) + (compra.QtdBlusa * preco);
}
private double totalInfantil(Compra compra)
{
double preco = 20.00;
return (compra.QtdCalca * preco) + (compra.QtdCamiseta * preco) + (compra.QtdBlusa * preco);
}
private double totalCalcados(long qtdMasculino, long qtdFeminino, long qtdInfantil)
{
double preco = 35.00;
return (qtdMasculino * preco) + (qtdFeminino * preco) + (qtdInfantil * preco);
}
}
Compra compr1 = new Compra();
compr1.QtdCalca = 0;
compr1.QtdCalcados = 0;
compr1.QtdBlusa = 0;
compr1.QtdCamiseta = 0;
Compra compr2 = new Compra();
compr2.QtdCalca = 1;
compr2.QtdCalcados = 1;
compr2.QtdBlusa = 1;
compr2.QtdCamiseta = 1;
Compra compr3 = new Compra();
compr3.QtdCalca = 1;
compr3.QtdCalcados = 1;
compr3.QtdBlusa = 1;
compr3.QtdCamiseta = 1;
Brecho brexo = new Brecho();
double resul = brexo.totalCompra(compr1, compr2, compr3);
Console.WriteLine(resul)
```
## 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 long AnosGarantia {get; set;}
public long DistanciaEntregaKm {get; set;}
public long Parcelas {get; set;}
}
public class Nota
{
public double valorfinal{get; set;}
public string NotaFiscal{get; set;}
}
public class LojaMoveis
{
public Nota calcCompra(Pedido pd, double Cupom)
{
double total = (valorDesconto(pd.Valor, Cupom)) + valorGarantia(pd.Valor, pd.AnosGarantia) + valorFrete(pd.DistanciaEntregaKm) + valorJuros(pd.Valor, pd.Parcelas);
DateTime dataCompra = DateTime.Now;
string data = Convert.ToString(dataCompra);
Nota nt = new Nota();
nt.valorfinal = total;
nt.NotaFiscal = DateTime.Now.ToString("yyyyMMddHHmmss");
return nt;
}
private double valorDesconto(double valorCompra, double Cupom)
{
return valorCompra - ((Cupom) *(valorCompra)/100);
}
private double valorGarantia(double valorCompra, long anos)
{
return valorCompra * (15.0/100.0) * anos;
}
private double valorFrete(long distancia)
{
return distancia / 10 * 3;
}
private double valorJuros(double valorCompra, long parcelas)
{
return valorCompra * Math.Pow(1 + 0.03, parcelas);
}
}
Pedido pd = new Pedido();
pd.Valor = 100.00;
pd.AnosGarantia = 2;
pd.DistanciaEntregaKm = 12;
pd.Parcelas = 3;
LojaMoveis lj = new LojaMoveis();
Nota resul = lj.calcCompra(pd, 6);
Console.WriteLine(resul);
```