### INFO B - Caroline Campos Lima, 04 # F.L Session Three: It's always time to restart [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 altura, int basee) { int area = altura * basee; return area; } public int PerimetroRetangulo(int altura, int basee) { int perimetro = (altura * 2) + (basee * 2); return perimetro; } public bool RetangulosIguais(int a1, int b1, int a2, int b2) { int retangulo1 = AreaRetangulo(b1, a1); int retangulo2 = AreaRetangulo(b2, a2); bool iguais = retangulo1 == retangulo2; return iguais; } } Trigonometria t = new Trigonometria(); int a = t.AreaRetangulo(24, 13); Console.WriteLine("Área do retângulo: " + a); int b = t.PerimetroRetangulo(15, 7); Console.WriteLine("Perímetro do retângulo: " + b); bool c = t.RetangulosIguais(34, 26, 22, 5); Console.WriteLine("São retângulos iguais? " + c); // Área do retângulo: 312 // Perímetro do retângulo: 44 // São retângulos iguais? False ``` ## 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 Base {get;set;} public double Altura {get;set;} } public class Trigonometria { public double AreaRetangulo(Forma retangulo) { double areaR = retangulo.Base * retangulo.Altura; return areaR; } public double AreaTriangulo(Forma triangulo) { double areaT = (triangulo.Base * triangulo.Altura) / 2; return areaT; } public double AreaParalelogramo(Forma paralelogramo) { double areaP = paralelogramo.Base * paralelogramo.Altura; return areaP; } } Trigonometria t = new Trigonometria(); Forma ar = new Forma(); ar.Base = 10; ar.Altura = 12; Forma at = new Forma(); at.Base = 5; at.Altura = 9; Forma ap = new Forma(); ap.Base = 10; ap.Altura = 8; double a = t.AreaRetangulo(ar); Console.WriteLine("Área do retângulo: " + a); double b = t.AreaTriangulo(at); Console.WriteLine("Área do triângulo: " + b); double c = t.AreaParalelogramo(ap); Console.WriteLine("Área do paralelogramo: " + c); // Área do retângulo: 120 // Área do triângulo: 22.5 // Área do paralelogramo: 80 ``` ## 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 Niver {get;set;} } public class Calendario { public DateTime PrimeiroDia(DateTime data) { DateTime dia1 = data.AddDays(1 - data.Day); return dia1; } public DateTime UltimoDia(DateTime data) { DateTime passo = data.AddMonths(1).AddDays(- data.Day); return passo; } public bool Possui31Dias(DateTime data) { bool dia31 = UltimoDia(data).Day == 31; return dia31; } public bool SextaFeira13(DateTime data) { bool sexta13 = data.DayOfWeek == DayOfWeek.Friday && data.Day == 13; return sexta13; } public string SemanasParaNiver(Pessoa pessoa) { DateTime data1 = DateTime.Now; DateTime data2 = new DateTime(data1.Year, pessoa.Niver.Month, pessoa.Niver.Day); TimeSpan data = data2 - data1; double dia = data.TotalDays/7; double semana = Math.Round(dia); string frase = pessoa.Nome + ", faltam " + semana + " semanas para seu niver"; return frase; } public bool SouDeLibra(Pessoa pessoa) { DateTime passo1 = new DateTime(pessoa.Niver.Year,09,23); DateTime passo2 = new DateTime(pessoa.Niver.Year,10,22); return pessoa.Niver >= passo1 && pessoa.Niver <= passo2; } } Calendario cal = new Calendario (); Pessoa p = new Pessoa (); p.Nome = "Eduarda de Lima Severo"; p.Niver = new DateTime(2001,08,12); DateTime a = cal.PrimeiroDia(p.Niver); Console.WriteLine("Primeiro dia do mês: " + a); DateTime b = cal.UltimoDia(p.Niver); Console.WriteLine("Último dia do mês: " + b); bool c = cal.Possui31Dias(p.Niver); Console.WriteLine("O mês possui 31 dias? " + c); bool d = cal.SextaFeira13(p.Niver); Console.WriteLine("É uma sexta-feira 13? " + d); string e = cal.SemanasParaNiver(p); Console.WriteLine(e); bool f = cal.SouDeLibra(p); Console.WriteLine("É de Libra? " + f); // Primeiro dia do mês: 8/1/2001 12:00:00 AM // Último dia do mês: 8/31/2001 12:00:00 AM // O mês possui 31 dias? True // É uma sexta-feira 13? False // Eduarda de Lima Severo, faltam 13 semanas para seu niver // É de Libra? 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 v1 = email.Contains("@"); bool v2 = email.Contains("@") && email.Substring(0, email.IndexOf("@")).Length >= 2 && email.Substring(email.IndexOf("@")).Length >= 2; bool v3 = senha.Contains("a") || senha.Contains("e") || senha.Contains("i") || senha.Contains("o") || senha.Contains("u"); bool v4 = senha.Contains("!") || senha.Contains("@") || senha.Contains("#") || senha.Contains("$") || senha.Contains("%") || senha.Contains("&") || senha.Contains("*") || senha.Contains("-") || senha.Contains("_") || senha.Contains("/"); bool v5 = senha.Length >= 8; return v1 && v2 && v3 && v4 && v5; } public bool ValidarDominio (string dominio) { bool v1 = dominio.EndsWith(".com.br"); bool v2 = dominio[0] != '0' && 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; } } RegistroBRValidator registroBR = new RegistroBRValidator(); bool a = registroBR.ValidarCadastro("carol@gmail.com", "23_lindinha"); Console.WriteLine("O cadastro foi aprovado? " + a); // O cadastro foi aprovado? True ``` ## Exercícioo 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 Base {get;set;} public double Altura {get;set;} } public class Cilindro { public double Raio {get;set;} public double Altura {get;set;} } public class Trigonometria { public double AreaRetangulo(Retangulo ret) { double area = ret.Altura * ret.Base; return area; } public double VolumeCilindro(Cilindro cilindro) { double volume = Math.Round(Math.PI * Math.Pow(cilindro.Raio, 2) * cilindro.Altura, 2); return volume; } public bool AreasIguais(Retangulo ret1, Retangulo ret2) { double retangulo1 = AreaRetangulo(ret1); double retangulo2 = AreaRetangulo(ret2); bool iguais = retangulo1 == retangulo2; return iguais; } public bool TransferenciaPossivel(Cilindro ci1, Cilindro ci2) { double cilindro1 = VolumeCilindro(ci1); double cilindro2 = VolumeCilindro(ci2); bool possivel = cilindro1 <= cilindro2; return possivel; } } Retangulo r = new Retangulo(); r.Altura = 4; r.Base = 7; Cilindro ci = new Cilindro(); ci.Raio = 4; ci.Altura = 6; Retangulo r1 = new Retangulo(); r1.Base = 9; r1.Altura = 2; Retangulo r2 = new Retangulo(); r2.Base = 6; r2.Altura = 3; Cilindro ci1 = new Cilindro(); ci1.Raio = 12; ci1.Altura = 8; Cilindro ci2 = new Cilindro(); ci2.Raio = 15; ci2.Altura = 20; Trigonometria t = new Trigonometria(); double a = t.AreaRetangulo(r); Console.WriteLine("Área do retângulo: " + a); double b = t.VolumeCilindro(ci); Console.WriteLine("Volume do cilindro: " + b); bool c = t.AreasIguais(r1, r2); Console.WriteLine("São retângulos iguais? " + c); bool d = t.TransferenciaPossivel(ci1, ci2); Console.WriteLine("É possível fazer a transferência? " + d); // Área do retângulo: 28 // Volume do cilindro: 301.59 // São retângulos iguais? True // É possível fazer a transferência? True ``` ## 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 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) { return TotalMasculino(masculino) + TotalFeminino(feminino) + TotalInfantil(infantil) + TotalCalcados(masculino.QtdCalcados, feminino.QtdCalcados, infantil.QtdCalcados); } private double TotalMasculino(Compra compra) { double totalM = (compra.QtdCalca + compra.QtdCamiseta + compra.QtdBlusa) * 30.00; return totalM; } private double TotalFeminino(Compra compra) { double totalF = (compra.QtdCalca + compra.QtdCamiseta + compra.QtdBlusa) * 40.00; return totalF; } private double TotalInfantil(Compra compra) { double totalI = (compra.QtdCalca + compra.QtdCamiseta + compra.QtdBlusa) * 20.00; return totalI; } private double TotalCalcados(int qtdCalcadoMasculino, int qtdCalcadoFeminino, int qtdCalcadoInfantil) { double totalC = (qtdCalcadoMasculino + qtdCalcadoFeminino + qtdCalcadoInfantil) * 35.00; return totalC; } } Compra cm = new Compra(); cm.QtdCalca = 2; cm.QtdCamiseta = 4; cm.QtdBlusa = 1; cm.QtdCalcados = 0; Compra cf = new Compra(); cf.QtdCalca = 1; cf.QtdCamiseta = 1; cf.QtdBlusa = 3; cf.QtdCalcados = 1; Compra ci = new Compra(); ci.QtdCalca = 2; ci.QtdCamiseta = 2; ci.QtdBlusa = 1; ci.QtdCalcados = 0; Brecho b = new Brecho(); double a = b.CalcularTotal(cm, cf, ci); Console.WriteLine("Total da compra: " + a); // Total da compra: 545 ``` ## 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= 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 valorCompra = ValorJuros(pedido.Valor - ValorDesconto(pedido.Valor, cupom) + ValorGarantia(pedido.Valor, pedido.AnosGarantia) + ValorFrete(pedido.DistanciaEntregaKm), pedido.Parcelas); valorCompra = Math.Round(valorCompra, 2); Nota nf = new Nota(); nf.ValorFinal = valorCompra; nf.NotaFiscal = "NF" + DateTime.Now.ToString("yyyyMMddHHmmss"); return nf; } private double ValorDesconto(double valorCompra, double cupom) { double desconto = valorCompra * (cupom / 100); return desconto; } private double ValorGarantia(double valorCompra, int anos) { double garantia = valorCompra * (15.0 / 100.0) * anos; return garantia; } private double ValorFrete(int distancia) { double frete = distancia / 10 * 3; return frete; } private double ValorJuros(double valor, int parcelas) { double juros = valor * Math.Pow(1 + 0.03, parcelas); return juros; } } LojaMoveis lm = new LojaMoveis(); Pedido p = new Pedido(); p.Valor = 5649; p.AnosGarantia = 3; p.DistanciaEntregaKm = 70; p.Parcelas = 10; double cupom = 20; Nota a = lm.CalcularCompra(p,cupom); Console.WriteLine("Valor da compra: " + a.ValorFinal); Console.WriteLine("Nota fiscal: " + a.NotaFiscal); // Valor da compra: 9517.95 // Nota fiscal: NF20210514171236 ```
{"metaMigratedAt":"2023-06-16T00:15:49.443Z","metaMigratedFrom":"Content","title":"F.L Session Three: It's always time to restart","breaks":true,"contributors":"[{\"id\":\"d83c7a84-ea20-48d2-809b-933a34168ebe\",\"add\":25714,\"del\":11323}]"}
Expand menu