# Session Three: It's always time to restart Fund.Lógica
**Autor**: Elias de Freitas Cavalcante
**Número**: 12
**Turma**: INFO C
## Exercícios
[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.**
```charp=
public class Trigonometria
{
public bool RetanguloIguais(int altura1, int base1, int altura2, int base2)
{
return AreaRetangulo(altura1, base1) == AreaRetangulo(altura2, base2);
}
private double AreaRetangulo(int a, int b)
{
double area = a * b;
return area;
}
public double PerimetroRetangulo(int a, int b)
{
double per = a + a + b + b;
return per;
}
}
Trigonometria trig = new Trigonometria();
bool x3 = trig.RetanguloIguais(4,2,2,4);
Console.WriteLine("As areas dos retangulos são verdadeiras ? :" +x3);
double x1 = trig.PerimetroRetangulo(10, 5);
Console.WriteLine("O perimetro do retangulo é:" + x1);
//
As areas dos retangulos são verdadeiras ?: True
O perimetro do retangulo é:30
```
### 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.**
```charp=
public class Forma
{
public double altura {get;set;}
public double basse {get;set;}
}
public class Trigonometria
{
public bool RetanguloIguais(Forma ret1, Forma ret2)
{
return AreaRetangulo(ret1.altura, ret1.basse) == AreaRetangulo(ret2.altura, ret2.basse);
}
private 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;
}
}
Trigonometria trig = new Trigonometria();
double x1 = trig.PerimetroRetangulo(10, 5);
Console.WriteLine("O perimetro do retangulo é:" + x1);
Forma r1 = new Forma();
r1.altura = 10;
r1.basse = 5;
Forma r2 = new Forma();
r2.altura = 25;
r2.basse = 2;
bool x3 = trig.RetanguloIguais(r1, r2);
Console.WriteLine("As areas dos retangulos são verdadeiras ? :" + x3);
//
As areas dos retangulos são verdadeiras ?: True
O perimetro do retangulo é:30
```
### 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.**
```charp=
public class Pessoa
{
public string Nome { get; set; }
public DateTime Niver { get; set; }
}
public class Calendario
{
public DateTime PrimeiroDia (DateTime data)
{
return data.AddDays(1 - data.Day);
}
public DateTime UltimoDia (DateTime data)
{
return data.AddMonths(1).AddDays(- data.Day);
}
public bool Possui31Dias (DateTime data)
{
return UltimoDia(data).Day == 31;
}
public bool SextaFeira13 (DateTime data)
{
return data.DayOfWeek == DayOfWeek.Friday && data.Day == 13;
}
public string SemanasParaNiver (Pessoa pessoa)
{
DateTime o = DateTime.Now;
DateTime s = new DateTime(o.Year, pessoa.Niver.Month, pessoa.Niver.Day);
TimeSpan a = s - o;
double f = a.TotalDays/7;
double h = Math.Round(f);
string k = pessoa.Nome + ", faltam " + h + " semanas para seu niver!";
return k;
}
public bool SouDeLibra (Pessoa pessoa)
{
DateTime u = new DateTime(pessoa.Niver.Year,09,23);
DateTime k = new DateTime(pessoa.Niver.Year,10,22);
return pessoa.Niver >= u
&&
pessoa.Niver <= k;
}
}
Pessoa k = new Pessoa ();
k.Nome = "Elias Cavalcante";
k.Niver = new DateTime(2004,09,29);
Calendario c = new Calendario ();
DateTime a = c.PrimeiroDia(k.Niver);
DateTime b = c.UltimoDia(k.Niver);
bool d = c.Possui31Dias(k.Niver);
bool e = c.SextaFeira13(k.Niver);
string f = c.SemanasParaNiver(k);
bool g = c.SouDeLibra(k);
Console.WriteLine("Primeiro dia do mês: " + a);
Console.WriteLine("Último dia do mês: " + b);
Console.WriteLine("O mês possui 31 dias?: " + d);
Console.WriteLine("A data cai em ua sexta-feira 13?: " + e);
Console.WriteLine(f);
Console.WriteLine("Sou de Libra?: " + g);
//
Primeiro dia do mês: 9/1/2004 12:00:00 AM
Último dia do mês: 9/30/2004 12:00:00 AM
O mês possui 31 dias?: False
A data cai em ua sexta-feira 13?: False
Elias Cavalcante, faltam 20 semanas para seu niver!
Sou de Libra?: True
```
### 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**
```charp=
public class RegistroBRValidor{
public bool validarCadastro( string email)
{
bool validarE = email.Contains("@");
return validarE;
}
public bool validarSenha(string senha)
{
bool validarE = senha.Contains("a");
return validarE;
}
public string validarDominio( string dominio)
{
string validarD = dominio.Substring(2,10);
return validarD;
}
}
RegistroBRValidor val = new RegistroBRValidor();
bool em = val.validarCadastro("elias@gmail");
Console.WriteLine("Esse e-mail tem o @ ?" +em);
bool se = val.validarSenha("Marco2005");
Console.WriteLine("A senha possui uma vogal?" + se);
string domi = val.validarDominio("El@gmail.com");
Console.WriteLine("Dominio do e-mail : " + domi);
//
Esse e-mail tem o @ ? True
A senha possui uma vogal ? True
Dominio do e-mail : @gmail.com
```
### 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.**
```charp=
```
### 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 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.**
```charp=
```
### 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.**
```charp=
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("yyyyMMddHHmmss");
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 p = new Pedido();
p.Valor = 1000;
p.AnosGarantia = 2;
p.DistanciaEntregaKm = 50;
p.Parcelas = 18;
double cupom = 10;
LojaMoveis loja = new LojaMoveis();
Nota n = loja.CalcularCompra(p, cupom);
Console.WriteLine("Valor final é: " + n.ValorFinal);
Console.WriteLine("Nota Fiscal é: " + n.NotaFiscal);
//
Valor final é: 2068.46
Nota Fiscal é: NF20210514193741
```
{"metaMigratedAt":"2023-06-16T00:15:04.004Z","metaMigratedFrom":"Content","title":"Session Three: It's always time to restart Fund.Lógica","breaks":true,"contributors":"[{\"id\":\"330b3204-61c5-4231-8ab3-e59d5589a829\",\"add\":11106,\"del\":624}]"}