# Session five | Fundamentos da Lógica
autora: Isabela Silva Sousa
[toc]
## Exercício 1
> Crie a(s) classe(s) representando a abstração de função e/ou dados ao lado. Abaixo a
> especificação das situações a serem resolvidas:
> ▪ Realize a lógica para implementar uma Calculadora, a partir de dois valores e a operação
> que deve ser realizada (soma, subtração, multiplicação, divisão ou potência).
> ▪ Realize a lógica para implementar uma função que informe se uma pessoa está com febre,
> febre alta, hiportemia ou normal.
> ▪ Realize a lógica para implementar uma função que a partir dos lucros e prejuízos de uma
> empresa, informe se ela ficou positiva ou negativa no fim do mês. Caso ela fique negativa,
> você não deve exibir o sinal de menos (-) na resposta.
> “Muito bem, você está R$ XXX positivo”
> “Poxa, você ficou R$ XXX negativo.”
> ▪ Realize a lógica para implementar uma função que arredone uma nota de meio em meio. Se a
> nota for entre (a) .00 e .25 arredondar para 0.0, (b) entre .26 e .74 arredondar para 0.5,
> e (c) .75 e .99 arredondar para cima.
> ▪ Realize a lógica para implementar uma função que verifique se um aluno passou ou está de
> recuperação, se a nota for maior que 5.
> ▪ Realize a lógica para implementar uma função que verifique se um aluno passou ou está de
> recuperação, se a nota for maior que 5 e a quantidade de falta for menor que 25. Se ele
> ficar de recuperação retorne o motivo: “Recuperação por Falta”, “Recuperação por Nota” ou
> “Recuperação por Nota e Falta”.
> ▪ Realize a lógica para implementar uma função que descubra o tipo de um triângulo:
> Equilátero, Isósceles ou Escaleno.
> ▪ Realize a lógica para implementar uma função que retorne o Índice de Massa
> Corporal (IMC) de uma pessoa: Abaixo do Peso, Peso Normal ou Sobrepeso, no seguinte
> formato: “XXXX você está XXXX”
```csharp=
using System;
public class Calculo
{
public double Valor1 {get; set;}
public double Valor2 {get; set;}
public string Operacao {get; set;}
}
public class Triangulo
{
public double LadoA {get; set;}
public double LadoB {get; set;}
public double LadoC {get; set;}
}
public class Notas
{
public double Nota1 {get; set;}
public double Nota2 {get; set;}
public double Nota3 {get; set;}
}
public class Pessoa
{
public string Nome {get; set;}
public double Altura {get; set;}
public double Peso {get; set;}
}
public class TreinoFocadoA
{
public double Calculadora(Calculo calculo)
{
calculo.Operacao = calculo.Operacao.ToLower();
double resultado = 0;
if (calculo.Operacao == "soma")
{
resultado = calculo.Valor1 + calculo.Valor2;
}
else if (calculo.Operacao == "subtração")
{
resultado = calculo.Valor1 - calculo.Valor2;
}
else if (calculo.Operacao == "multiplicação")
{
resultado = calculo.Valor1 * calculo.Valor2;
}
else if (calculo.Operacao == "divisão")
{
resultado = calculo.Valor1 / calculo.Valor2;
}
else if (calculo.Operacao == "potência")
{
resultado = Math.Pow(calculo.Valor1, calculo.Valor2);
}
return resultado;
}
public string Termometro (double grau)
{
string estado = string.Empty;
if(grau >= 37.8 && grau <= 39.5)
{
estado = "Você está com febre";
}
else if (grau >39.6)
{
estado = "Você está com febre alta";
}
else if (grau < 35)
{
estado = "Você está com hiportemia";
}
else if (grau >= 35.1 && grau <= 37.7)
{
estado = "Você está com temperatura normal";
}
return estado;
}
public string LucroOuPrejuizo (double lucro, double gastos)
{
double saldo = lucro - gastos;
string mensagem = string.Empty;
if(saldo > 0)
{
mensagem = $"Muito bem, você está R$ {saldo} positivo.";
}
else
{
mensagem = $"Poxa, você ficou R$ {Math.Abs(saldo)} negativo.";
}
return mensagem;
}
public double ArredondarMeioEmMeio (double nota)
{
double parteDecimal = nota - Math.Truncate(nota);
if (parteDecimal > 0.0 && parteDecimal < 0.25)
{
nota = Math.Floor (nota);
}
else if (parteDecimal > 0.25 && parteDecimal < 0.75)
{
nota = Math.Floor (nota) + 0.5;
}
else
{
nota = Math.Ceiling(nota);
}
return nota;
}
public string TipoTriangulo (Triangulo t)
{
string tipotriangulo = string.Empty;
if (t.LadoA == t.LadoB && t.LadoA == t.LadoC)
{
tipotriangulo = "É um Triângulo Equilátero";
}
else if (t.LadoA != t.LadoB && t.LadoB != t.LadoC && t.LadoA != t.LadoC)
{
tipotriangulo = "É um Triângulo Escaleno";
}
else
{
tipotriangulo = "É um Triângulo Isósceles";
}
return tipotriangulo;
}
public string Passou1 (Notas notas)
{
return ((notas.Nota1 + notas.Nota2 + notas.Nota3)/3) >=5
?"Passou"
:"Reprovou";
}
public string Passou2 (Notas notas, int faltas)
{
string mensagem = string.Empty;
if ((((notas.Nota1 + notas.Nota2 + notas.Nota3) /3) <5) && (faltas >=25))
{
mensagem = "Recuperação por Nota e Falta";
}
else if (((notas.Nota1 + notas.Nota2 + notas.Nota3) /3) <5)
{
mensagem = "Recuperação por Nota";
}
else if (faltas >= 25)
{
mensagem = "Recuperação por Falta";
}
else
{
mensagem = "Você Passou!";
}
return mensagem;
}
public string IMC (Pessoa pessoa)
{
double imc = pessoa.Peso / (Math.Pow (pessoa.Altura, 2));
string situacao = string.Empty;
if (imc >= 18.5 && imc <= 24.9)
{
situacao = pessoa.Nome + " você está com Peso Normal";
}
else if (imc <= 18.4)
{
situacao = pessoa.Nome + " você está Abaixo do Peso";
}
else if (imc >= 25)
{
situacao = pessoa.Nome + " você está com Sobrepeso";
}
return situacao;
}
}
TreinoFocadoA ta = new TreinoFocadoA();
Calculo cal = new Calculo();
cal.Valor1 = 100;
cal.Valor2 = 50;
cal.Operacao = "soma";
double calc = ta.Calculadora(cal);
Console.WriteLine(calc);
string temp = ta.Termometro(38);
Console.WriteLine(temp);
string lop = ta.LucroOuPrejuizo(55000, 10000);
Console.WriteLine(lop);
double am = ta.ArredondarMeioEmMeio(9.25);
Console.WriteLine(am);
Triangulo t = new Triangulo();
t.LadoA = 10;
t.LadoB = 15;
t.LadoC = 20;
string tt = ta.TipoTriangulo(t);
Console.WriteLine(tt);
Notas n1 = new Notas();
n1.Nota1 = 7;
n1.Nota2 = 10;
n1.Nota3 = 8;
string res1 = ta.Passou1(n1);
Console.WriteLine(res1);
Notas n2 = new Notas();
n2.Nota1 = 10;
n2.Nota2 = 8;
n2.Nota3 = 8.5;
string res2 = ta.Passou2(n2, 7);
Console.WriteLine(res2);
Pessoa pes = new Pessoa();
pes.Nome = "Milena";
pes.Peso = 55;
pes.Altura = 1.60;
string sit = ta.IMC(pes);
Console.WriteLine(sit);
// 150
// Você está com febre.
// Muito bem, você está R$ 45000 positivo.
// 10
// É um Triângulo Escaleno.
// Passou.
// Você Passou!
// Milena você está com Peso Normal.
```
## Exercício 2
> Crie a(s) classe(s) representando a abstração de função e/ou dados ao lado. Abaixo a
> especificação das situações a serem resolvidas:
> ▪ Realize a lógica para implementar uma função que descubra se uma cor é uma cor primária.
> ▪ Realize a lógica para implementar uma função que retorne a cor resultante da combinação
> de duas cores primárias. Você deve realizar todas combinações.
> ▪ Realize a lógica para implementar uma função que retorne o primeiro nome de uma pessoa a
> partir de um nome completo, no entando, se a função receber apenas o primeiro nome não
> deve resultar em um erro, mas no mesmo primeiro nome.
> ▪ Realize a lógica para implementar uma função que a partir de uma peça de dominó e
> verifique se a peça é um dobre.
> ▪ Realize a lógica para implementar uma função que a partir de duas peças de dominó,
> verifique se a primeira peça “encaixa” na segunda, ou seja, se seria um jogada válida.
> ▪ Realize a lógica para implementar uma função que mostre ao usuário uma mensagem de
> recuperação de senha a partir de um e-mail e senha. A mensagem deve ser no formato:
> “Você receberá um e-mail do XXX para resetar a senha. Um código também foi enviado
> para o número YYY.” Sendo XXX o domínio (ex: GMAIL) e YYY apenas o final do telefone
> (ex: xxxx-5764)
> ▪ Realize a lógica para implementar uma função que inicialize um controlador de semáforo.
> O semáforo deve iniciar em vermelho aceso e o resto apagado.
> ▪ Realize a lógica para implementar uma função que a partir de um estado de um semáforo,
> avance para o próximo estado, ou seja, de vermelho para verde, de verde para amarelo e
> amarelo para vermelho.
```csharp=
using System;
public class PecaDomino
{
public double LadoA {get; set;}
public double LadoB {get; set;}
}
public class Semaforo
{
public bool LuzVermelhaAcesa {get; set;}
public bool LuzAmarelaAcesa {get; set;}
public bool LuzVerdeAcesa {get; set;}
}
public class Recuperacao
{
public string Email {get; set;}
public string Telefone {get; set;}
}
public class TreinoFocadoB
{
public bool CorPrimaria (string cor)
{
bool resposta = true;
if (cor == "vermelho" || cor == "amarelo" || cor == "azul")
{
resposta = true;
}
else
{
resposta = false;
}
return resposta;
}
public string CombinacaoCorPrimaria (string cor1, string cor2)
{
string cornova = string.Empty;
if ((cor1 == "azul" && cor2 == "vermelho")
||
(cor2 == "vermelho" && cor1 == "azul"))
{
cornova = "roxo";
}
else if ((cor1 == "azul" && cor2 == "amarelo")
||
(cor2 == "azul" && cor2 == "amarelo"))
{
cornova = "verde";
}
else if ((cor1 == "amarelo" && cor2 == "vemelho")
||
(cor2 == "amarelo" && cor1 == "vermelho"))
{
cornova = "laranja";
}
return cornova;
}
public string PrimeiroNome (string nome)
{
bool vf = nome.Contains (" ");
string primeironome = string.Empty;
if (vf == true )
{
int posicao = nome.IndexOf (" ");
primeironome = nome.Substring(0, posicao);
}
else
{
primeironome = nome;
}
return primeironome;
}
public bool DobreDomino (PecaDomino peca)
{
return peca.LadoA == peca.LadoB;
}
public bool JogadaValida (PecaDomino peca1, PecaDomino peca2)
{
bool jogadavalida = true;
if (peca1.LadoA == peca2.LadoB || peca1.LadoB == peca2.LadoA)
{
jogadavalida = true;
}
else if (peca1.LadoA == peca2.LadoA)
{
jogadavalida = true;
}
else if (peca1.LadoB == peca2.LadoB)
{
jogadavalida = true;
}
else
{
jogadavalida = false;
}
return jogadavalida;
}
public string RecuperacaoSenha (Recuperacao rec)
{
rec.Telefone = rec.Telefone.Substring (rec.Telefone.IndexOf ("-"));
string dominio = rec.Email.Substring (rec.Email.IndexOf ("@") + 1);
string sempontocom = (dominio.Substring (0, dominio.IndexOf (".") )).ToUpper();
string mensagem = $"Você recebera um email do {sempontocom} para resetar a senha. Um código também foi enviado para o numero {rec.Telefone}.";
return mensagem;
}
public Semaforo IniciarSemaforo ()
{
Semaforo s = new Semaforo ();
s.LuzVermelhaAcesa = true;
s.LuzVerdeAcesa = false;
s.LuzAmarelaAcesa = false;
return s;
}
public Semaforo ProximoSinal (Semaforo semaforo)
{
if (semaforo.LuzVermelhaAcesa)
{
semaforo.LuzVermelhaAcesa = false;
semaforo.LuzAmarelaAcesa = true;
semaforo.LuzVerdeAcesa = false;
}
else if (semaforo.LuzAmarelaAcesa)
{
semaforo.LuzVermelhaAcesa = false;
semaforo.LuzAmarelaAcesa = false;
semaforo.LuzVerdeAcesa = true;
}
else if (semaforo.LuzVerdeAcesa)
{
semaforo.LuzVermelhaAcesa = false;
semaforo.LuzAmarelaAcesa = true;
semaforo.LuzVerdeAcesa = false;
}
return semaforo;
}
}
TreinoFocadoB b = new TreinoFocadoB();
bool corp = b.CorPrimaria("preto");
Console.WriteLine(corp);
string cors = b.CombinacaoCorPrimaria("azul", "amarelo");
Console.WriteLine(cors);
string pn = b.PrimeiroNome("Barbara Barbosa dos Santos");
Console.WriteLine(pn);
PecaDomino pc1 = new PecaDomino();
pc1.LadoA = 10;
pc1.LadoB = 8;
bool dd = b.DobreDomino(pc1);
Console.WriteLine(dd);
PecaDomino pc2 = new PecaDomino();
pc2.LadoA = 5;
pc2.LadoB = 5;
bool jv = b.JogadaValida(pc1, pc2);
Console.WriteLine(jv);
Recuperacao rec = new Recuperacao();
rec.Telefone = "94818-7643";
rec.Email = "barbarabs1703@gmail.com";
string recp = b.RecuperacaoSenha(rec);
Console.WriteLine(recp);
Semaforo s = b.IniciarSemaforo();
Console.WriteLine($"vermelho: {s.LuzVermelhaAcesa}, verde: {s.LuzVerdeAcesa}, amerelo: {s.LuzAmarelaAcesa}");
s = b.ProximoSinal(s);
Console.WriteLine($"vermelho: {s.LuzVermelhaAcesa}, verde: {s.LuzVerdeAcesa}, amerelo: {s.LuzAmarelaAcesa}");
// False
// verde
// Barbara
// False
// False
// Você recebera um email do GMAIL para resetar a senha. Um código também foi enviado para o numero -7643.
// vermelho: True, verde: False, amerelo: False
// vermelho: False, verde: False, amerelo: True
```
## Exercício 3
> Crie a(s) classe(s) representando a abstração de função e/ou dados ao lado. Abaixo a
> especificação das situações a serem resolvidas:
> ▪ Realize a lógica para implementar uma função que descubra o trimestre a partir de uma
> data.
> ▪ Realize a lógica para implementar uma função que retorne o nome do mês por extenso.
> ▪ Realize a lógica para implementar uma função que retorne o período do dia a partir de
> uma data. Os períodos são: Manhã, Tarde, Noite, Madrugada.
> ▪ Realize a lógica para implementar uma função que retorne quantos dias de vida uma pessoa
> possui a partir da data de seu nascimento.
> ▪ Realize a lógica para implementar uma função que verifique qual o signo de uma pessoa a
> partir de seu nascimento. A função deve considerar todos os signos.
> ▪ Realize a lógica para implementar uma função que escreva uma data por extenso no
> seguinte formato: “XXX você nasceu há XXX dias, em uma XXX do dia XXX de XXX (Xo
> trimestre) de XXX.
> Seu signo é XXX.”
> Ex.: “Bruno você nasceu há 11680 dias, em uma noite do dia 22 de Outubro (4o trimestre) de
> 1989. Seu signo é Libra.”
```csharp=
using System;
public class Pessoa
{
public string Nome {get; set;}
public DateTime Nascimento {get; set;}
public string Cidade {get; set;}
}
public class TreinoFocadoC
{
public int Trimestre (DateTime data)
{
int trimestre = 0;
if (data.Month == 1 || data.Month == 2 || data.Month ==3)
{
trimestre = 1;
}
else if (data.Month == 4 || data.Month == 5 || data.Month == 6)
{
trimestre = 2;
}
else if (data.Month == 7 || data.Month == 8 || data.Month == 9)
{
trimestre = 3;
}
else
{
trimestre = 4;
}
return trimestre;
}
public string Mes (int mes)
{
string mesescrito = string.Empty;
if (mes == 1)
{
mesescrito = "Janeiro";
}
else if (mes == 2)
{
mesescrito = "Fevereiro";
}
else if (mes == 3)
{
mesescrito = "Março";
}
else if (mes == 4)
{
mesescrito = "Abril";
}
else if (mes == 5)
{
mesescrito = "Maio";
}
else if (mes == 6)
{
mesescrito = "Junho";
}
else if (mes == 7)
{
mesescrito = "Julho";
}
else if (mes == 8)
{
mesescrito = "Agosto";
}
else if (mes == 9)
{
mesescrito = "Setembro";
}
else if (mes == 10)
{
mesescrito = "Outubro";
}
else if (mes == 11)
{
mesescrito = "Novembro";
}
else
{
mesescrito = "Dezembro";
}
return mesescrito;
}
public string PeriodoDia (DateTime data)
{
string periodo = string.Empty;
if (data.Hour < 6)
{
periodo = "Madrugada";
}
else if (data.Hour >= 6 && data.Hour < 12)
{
periodo = "Manhã";
}
else if (data.Hour >= 12 && data.Hour < 18)
{
periodo = "Tarde";
}
else
{
periodo = "Noite";
}
return periodo;
}
public double DiasVida (DateTime nascimento)
{
TimeSpan totalm = DateTime.Now - nascimento;
double totaldias = Math.Floor(totalm.TotalDays);
return totaldias;
}
public string QualSigno (DateTime nasc)
{
string signo = string.Empty;
if ((nasc.Day > 20 && nasc.Month == 3) || (nasc.Day < 21 && nasc.Month == 4))
{
signo = "Áries";
}
else if ((nasc.Day > 20 && nasc.Month == 4) || (nasc.Day < 21 && nasc.Month == 5))
{
signo = "Touro";
}
else if ((nasc.Day > 20 && nasc.Month == 5) || (nasc.Day < 21 && nasc.Month == 6))
{
signo = "Gêmeos";
}
else if ((nasc.Day > 20 && nasc.Month == 6) || (nasc.Day < 23 && nasc.Month == 7))
{
signo = "Câncer";
}
else if ((nasc.Day > 22 && nasc.Month == 7) || (nasc.Day < 23 && nasc.Month == 8))
{
signo = "Leão";
}
else if ((nasc.Day > 22 && nasc.Month == 8) || (nasc.Day < 23 && nasc.Month == 9))
{
signo = "Virgem";
}
else if ((nasc.Day > 22 && nasc.Month == 9) || (nasc.Day < 23 && nasc.Month == 10))
{
signo = "Libra";
}
else if ((nasc.Day > 22 && nasc.Month == 10) || (nasc.Day < 22 && nasc.Month == 11))
{
signo = "Escorpião";
}
else if ((nasc.Day > 21 && nasc.Month == 11) || (nasc.Day < 22 && nasc.Month == 12))
{
signo = "Sargitário";
}
else if ((nasc.Day > 21 && nasc.Month == 12) || (nasc.Day < 21 && nasc.Month == 1))
{
signo = "Capricórnio";
}
else if ((nasc.Day > 20 && nasc.Month == 1) || (nasc.Day < 19 && nasc.Month == 2))
{
signo = "Aquário";
}
else if ((nasc.Day > 18 && nasc.Month == 2) || (nasc.Day < 21 && nasc.Month == 3))
{
signo = "Peixes";
}
return signo;
}
public string DataPorExtenso (Pessoa pessoa)
{
double dv = DiasVida (pessoa.Nascimento);
int d = pessoa.Nascimento.Day;
string p = PeriodoDia (pessoa.Nascimento);
int t = Trimestre (pessoa.Nascimento);
int a = pessoa.Nascimento.Year;
string s = QualSigno (pessoa.Nascimento);
string m = Mes (pessoa.Nascimento.Month);
string mensagem = $"{pessoa.Nome} você nasceu há {dv} dias, em uma {p} do dia {d} de {m} ({t}º trimestre) de {a}. Seu signo é {s}";
return mensagem;
}
}
TreinoFocadoC c = new TreinoFocadoC();
DateTime dt1 = new DateTime (2021, 08, 17);
int trim = c.Trimestre(dt1);
Console.WriteLine(trim);
string mes = c.Mes(12);
Console.WriteLine(mes);
DateTime dt2 = new DateTime(2021, 08, 08, 23, 59, 59);
string periodo = c.PeriodoDia(dt2);
Console.WriteLine(periodo);
DateTime dt3 = new DateTime(2002, 03, 21, 22, 28, 59);
double tdias = c.DiasVida(dt3);
Console.WriteLine(tdias);
string signo = c.QualSigno(dt3);
Console.WriteLine(signo);
Pessoa p = new Pessoa ();
p.Nome = "Barbara";
p.Nascimento = new DateTime (2004, 03, 17, 00, 05, 0);
// 3
// Dezembro
// Noite
// 7015
// Áries.
// Barbara você nasceu há 6289 dias, em uma Madrugada do dia 17 de Março (1º trimestre) de 2004. Seu signo é Peixes.
```