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