Você está na página 1de 4

Curso de Engenharia Informática

Ano Lectivo 2023 2º Ano – 2º Semestre

Programação II Teste (T1) Data: 9-Junho-2023

Duração: 45 minutos
Tolerância: 15 minutos

1. Crie uma classe rectângulo que tenha atributos comprimento e largura, tendo o valor 1
como valor por defeito. Implemente os métodos membro que calculam o perímetro e a
área do rectângulo e métodos “set” e “get” para comprimento e largura. As funções
“set” verificam se comprimento e largura são números de vírgula-flutuante maiores que
0.0 e inferiores que 20.0; caso essas restrições não forem respeitadas, assumir-se-á o valor
padrão.

(tempo de resolução: 15 minutos)


(cotação: 9,5 valores)

public class Rectangulo


{
private double comprimento, largura;

public Rectangulo()
{
comprimento = largura = 1;
}

public double perimetro()


{
return 2 * (comprimento + largura);
}

public double area()


{
return comprimento * largura;
}

// Getters and Setters


public double getComprimento()
{
return comprimento;
}
public double getLargura()
{
return largura;
}

public void setComprimento(double comprimento)


{
this.comprimento = (comprimento > 0 && comprimento < 20) ?
comprimento : 1;
}

public void setLargura(double largura)


{
this.largura = ( largura > 0 && largura < 20) ?
largura : 1;
}
}

2. Crie uma classe Data com atributos inteiros, nomeadamente dia, mês e ano, e com
construtores que possibilitem a criação de objectos inicializados com datas nos seguintes
formatos:
DDD YYYY
MM DD YY
June 14 1992

Nota 1: A classe deve ser sensível aos anos bissextos quando


necessário

Nota 2: DDD representa o dia do ano (1 a 365 em 3 dígitos)


YYYY representa o ano (4 dígitos) (cotação: 4,5 valores)
MM representa o mês (1 a 12) (cotação: 2,0 valores)
DD representa o dia do mês (1 a 31) (cotação: 3,0 valores)

(tempo de resolução: 30 minutos)

public class Data


{
private final String NOMES_DOS_MESES[] =
{
"", "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho",
"Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
};

private final int DIAS_NO_MES[] =


{
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};

private int dia, mes, ano;

// DDD YYYY
public Data(int diaAno, int ano)
{
this.ano = ano;
int dias = diaAno;
for (int i = 1; i < mes; i++)
{
dias -= DIAS_NO_MES[i];
if (mes == 2 && isBissexto(ano))
{
dias--;
}
}
dia = dias;
}

// MM DD YY
public Data(int mes, int dia, int ano)
{
this.mes = verificarMes(mes);
this.ano = ano;
this.dia = verificarDia(dia);
}

// June 14 1992
public Data(String mes, int dia, int ano)
{
this.mes = indiceMes(mes);
this.ano = ano;
this.dia = verificarDia(dia);
}

public static boolean isBissexto(int ano)


{
return ((ano % 4 == 0 && ano % 100 != 0) || ano % 400 == 0);
}

private int indiceMes(String m)


{
for (int i = 1; i <= 12; i++)
{
if (m.equalsIgnoreCase(NOMES_DOS_MESES[i]))
return i;
}
return 1;
}

private int verificarMes(int mes)


{
if (mes > 0 && mes <= 12)
{
return mes;
}
else
{
return 1;
}
}

private int verificarDia(int dia)


{
if (dia > 0 && dia <= DIAS_NO_MES[mes])
{
return dia;
}
if (mes == 2 && dia == 29 && isBissexto(ano))
{
return dia;
}
return 1;
}

Você também pode gostar