***NOME*** João Gabriel Camargo Ramos
***TURMA*** INFO C
***NUMERO*** 23
# FUNDAMENTOS LOGÌCOS
## Exercício 01
*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 Trigonometria
{
public int AreaRetangulo (int altura, int basee)
{
return altura * basee;
}
public int PerimetroRetangulo (int altura, int basee)
{
return (altura + basee) + (altura + basee);
}
public bool RetangulosIguais (int a1, int b1, int a2, int b2)
{
return AreaRetangulo(a1,b1) == AreaRetangulo(a2,b2);
}
}
Trigonometria g = new Trigonometria ();
int a = g.AreaRetangulo(10,2);
int b = g.PerimetroRetangulo(10,2);
bool c = g.RetangulosIguais(10,2,4,5);
Console.WriteLine("Área Retângulo: " + a);
Console.WriteLine("Perímetro Retângulo: " + b);
Console.WriteLine("Retângulos Iguais?: " + c);
//Área Retângulo: 20
//Perímetro Retângulo: 24
//Retângulos Iguais?: True
```
## Exercício 02
*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 Base {get; set;}
public double Altura {get; set;}
}
public class Trigonometria
{
public double AreaRetangulo (Forma retangulo)
{
return retangulo.Altura * retangulo.Base;
}
public double AreaTriangulo (Forma triangulo)
{
return (triangulo.Altura * triangulo.Base)/2;
}
public double AreaParalelogramo (Forma retangulo)
{
return retangulo.Altura * retangulo.Base;
}
}
Forma fret = new Forma ();
fret.Altura = 10;
fret.Base = 8;
Forma ftri = new Forma ();
ftri.Altura = 10;
ftri.Base = 10;
Forma fpar = new Forma ();
fpar.Altura = 10;
fpar.Base = 6;
Trigonometria oi = new Trigonometria ();
double a = oi.AreaRetangulo(fret);
double b = oi.AreaTriangulo(ftri);
double c = oi.AreaParalelogramo(fpar);
Console.WriteLine("Área Retângulo: " + a);
Console.WriteLine("Área Triângulo: " + b);
Console.WriteLine("Área Paralelogramo: " + c);
//Área Retângulo: 80
//Área Triângulo: 50
//Área Paralelogramo: 60
```
## Exercício 03
*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)
{
int a = data.Day;
DateTime b = data.AddDays(1 - a);
return b;
}
public DateTime UltimoDia (DateTime data)
{
DateTime final = data.AddMonths(1);
int s = data.Day;
DateTime d = final.AddDays(-s);
return d;
}
public bool Possui31Dias (DateTime data)
{
return UltimoDia(data).Day == 31;
}
public bool SextaFeira13 (DateTime data)
{
bool a = data.DayOfWeek == DayOfWeek.Friday;
bool s = data.Day == 13;
return a && s;
}
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 = "Laura Oliveira Rocha";
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
//Laura Oliveira Rocha, faltam 20 semanas para seu niver!
//Sou de Libra?: True
```
## Exercício 04
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)
{
int a = email.IndexOf("@");
int b = email.Length;
bool s = email.Substring(0,a).Length >= 2 && email.Substring(a,(b-a)).Length >= 2;
int c = senha.Length;
bool g = senha.Contains("a") || senha.Contains("e") || senha.Contains("i") || senha.Contains("o") || senha.Contains("u")
|| senha.Contains("A") || senha.Contains("E") || senha.Contains("I") || senha.Contains("O") || senha.Contains("U")
&&
senha.Contains("!") || senha.Contains("@") || senha.Contains("#") || senha.Contains("$") || senha.Contains("%") || senha.Contains("&") || senha.Contains("*");
return c == 8 && s && g;
}
public bool ValidarDominio (string dominio)
{
int a = dominio.Length;
int b = dominio.IndexOf(".");
string c = dominio.Substring((b-1),(a-b));
string d = dominio.Substring(b,1);
bool e = d != "1" || d != "2" || d != "3" || d != "4" || d != "5" || d != "6" || d != "7" || d != "8" || d != "9" || d != "0" ;
bool f = c == ".com.br";
bool g = c.Length >= 5;
return e && g || f;
}
}
string a = "fofinanet0@gmail.com";
string b = "iamyue22";
string c = "meudominio.com.br";
RegistroBRValidator k = new RegistroBRValidator ();
bool d = k.ValidarCadastro(a,b);
bool z = k.ValidarDominio(c);
Console.WriteLine("Cadastro Válido?: " + d);
Console.WriteLine("Domínio Válido?: " + z);
//Cadastro Válido?: True
//Domínio Válido?: True
```
## Exercício 05
*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 Retangulo
{
public double Altura{get; set;}
public double Base {get; set;}
}
public class Cilindro
{
public double Raio {get; set;}
public double Altura {get; set;}
}
public class Trigonometria
{
public bool AreasIguais (Retangulo ret1, Retangulo ret2)
{
return AreaRetangulo(ret1) == AreaRetangulo(ret2);
}
public double AreaRetangulo (Retangulo ret)
{
return ret.Altura * ret.Base;
}
public bool TransferenciaPossivel (Cilindro ci1, Cilindro ci2)
{
return VolumeCilindro(ci1) <= VolumeCilindro(ci2);
}
public double VolumeCilindro (Cilindro cilindro)
{
return 3.14 * Math.Pow(cilindro.Raio,2) * cilindro.Altura;
}
}
Cilindro a = new Cilindro ();
a.Altura = 10;
a.Raio = 5;
Cilindro b = new Cilindro ();
b.Altura = 8;
b.Raio = 7;
Retangulo c = new Retangulo ();
c.Altura = 5;
c.Base = 3;
Retangulo d = new Retangulo ();
d.Altura = 10;
d.Base = 3;
Trigonometria e = new Trigonometria ();
double f = e.AreaRetangulo(c);
bool g = e.AreasIguais(c,d);
double h = e.VolumeCilindro(a);
bool i = e.TransferenciaPossivel(a,b);
Console.WriteLine("Área do Retângulo: " + f);
Console.WriteLine("Os retângulos possuem áreas iguais?: " + g);
Console.WriteLine("Volume do cilindro: " + h);
Console.WriteLine("É possível transferir do cilindro 1 para o cilindro 2?: " + i);
//Área do Retângulo: 15
//Os retângulos possuem áreas iguais?: False
//Volume do cilindro: 84.78
//É possível transferir do cilindro 1 para o cilindro 2?: True
```
## Exercício 06
*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 compra)
{
double a = (compra.QtdBlusa + compra.QtdCalca + compra.QtdCamiseta) * 30;
double b = compra.QtdCalcados * 35;
return a + b;
}
private double TotalFeminino (Compra compra)
{
double a = (compra.QtdBlusa + compra.QtdCalca + compra.QtdCamiseta) * 40;
double b = compra.QtdCalcados * 35;
return a + b;
}
private double TotalInfantil (Compra compra)
{
double a = (compra.QtdBlusa + compra.QtdCalca + compra.QtdCamiseta) * 20;
double b = compra.QtdCalcados * 35;
return a + b;
}
public double CalcularTotal (Compra masculino, Compra feminino, Compra infantil)
{
return TotalMasculino(masculino) + TotalFeminino(feminino) + TotalInfantil(infantil);
}
}
Compra cm = new Compra ();
cm.QtdBlusa = 2;
cm.QtdCalca = 3;
cm.QtdCamiseta = 1;
cm.QtdCalcados = 4;
Compra cf = new Compra ();
cf.QtdBlusa = 1;
cf.QtdCalca = 1;
cf.QtdCalcados = 2;
cf.QtdCamiseta = 1;
Compra ci = new Compra ();
ci.QtdBlusa = 4;
ci.QtdCalca = 2;
ci.QtdCamiseta = 1;
ci.QtdCalcados = 1;
Brecho iupi = new Brecho ();
double y = iupi.CalcularTotal(cm,cf,ci);
Console.WriteLine("O valor total da sua compra foi de R$" + y);
//O valor total da sua compra foi de R$685
```
## Exercício 07
*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
{
private double ValorDesconto (double valorCompra, double cupom)
{
return (valorCompra * (cupom/100));
}
private double ValorGarantia (double valorCompra, int anos)
{
return (valorCompra * 0.15 * anos);
}
private double ValorFrete (int distancia)
{
return (distancia/10) * 3;
}
private double ValorJuros (double valor, int parcelas)
{
return valor * (1 + Math.Pow(0.03,parcelas));
}
public Nota CalcularCompra (Pedido pedido, double cupom)
{
double a = pedido.Valor - ValorDesconto(pedido.Valor,cupom);
double b = ValorGarantia(a,pedido.AnosGarantia);
double c = ValorFrete(pedido.DistanciaEntregaKm);
double d = a + b + c;
double e = ValorJuros(d,pedido.Parcelas);
DateTime m = DateTime.Now;
string f = m.Year.ToString();
string g = m.Month.ToString();
string h = m.Day.ToString();
string i = m.Hour.ToString();
string j = m.Minute.ToString();
Nota k = new Nota ();
k.ValorFinal = e;
k.NotaFiscal = "NF" + f + g + h + i + j;
return k;
}
}
Pedido p = new Pedido ();
p.Valor = 1000;
p.AnosGarantia = 2;
p.DistanciaEntregaKm = 20;
p.Parcelas = 12;
LojaMoveis n = new LojaMoveis ();
Nota d = n.CalcularCompra(p,10);
Console.WriteLine(d.NotaFiscal + ": R$" + d.ValorFinal);
//NF20215122259: R$1176
```