Escreva um programa que leia uma lista contendo o peso de uma série de indivíduos em um vetor denúmeros reais. A lista possui 150 elementos. Depois que a lista foi toda inserida o programa deve procurar e imprimir qual a posição no vetor onde está o menor peso.
Abaixo tem um exemplo de como gerar um peso aleatório para inicialização do vetor.
In [2]:
import java.util.Random;
Random rand = new Random();
double r = rand.nextGaussian()*10 + 60; //Valor em distribuição Gaussiana com média 60 e desvio padrão 10.
System.out.println(r)
In [10]:
import java.util.Random;
Random rand = new Random();
double[] weights = new double[150];
for (int i=0; i < 150; i++)
{
weights[i] = rand.nextGaussian()*10 + 60;
}
double min = Double.POSITIVE_INFINITY;
for (int i=0; i < 150; i++)
{
if (weights[i] < min) {
min = weights[i];
}
}
System.out.println(min);
A linguagem Java dispõe de um suporte nativo a vetores, que exige a definição de seu tamanho nomomento da instanciação. Depois de instanciado, o tamanho do vetor não pode ser modificado. Escreva uma classe chamada Vetor cujos objetos simulem vetores de tamanho variável. A classe define osseguintes métodos:
Método | Descrição |
---|---|
construtor | recebe como parâmetro o tamanho inicial do vetor |
insert | recebe como parâmetro uma string e a coloca na próxima posição disponível do vetor; note que o vetor cresce automaticamente, portanto, se a inserção ultrapassar o tamanho inicial estabelecido na criação, por exemplo, o vetor deve aumentar seu tamanho automaticamente. |
get | recebe como parâmetro uma posição do vetor e retorna a string que estiver naquela posição; se a posição não estiver ocupada ou ultrapassar o tamanho do vetor, este método retorna nulo |
size | retorna o número de elementos inseridos no vetor (independente do tamanho do mesmo) |
O java dispõe de classes – tal como a Vector – que realizam a tarefa solicitada nesta questão. Taisclasses não devem ser usadas. É possível resolver esta questão apenas usando o sistema de vetorespreexistente do Java, sem nenhum comando especial extra
In [3]:
public class MyVector {
int totalSize;
String [] vec;
int size = 0; // variable to track the last position with value in the vector
public MyVector(int size) {
this.totalSize = size;
this.vec = new String[this.totalSize];
}
public void doubleSize() {
String[] auxVec = new String[this.totalSize*2];
for (int i=0; i < this.totalSize; i++)
{
auxVec[i] = this.vec[i];
}
this.totalSize = this.totalSize*2;
this.vec = auxVec;
}
public void insert(String s) {
if (size == totalSize)
doubleSize();
this.vec[size] = s;
size++;
}
public String get(int p) {
if (p >= size) {
return null;
}
return vec[p];
}
public int size() {
return this.size;
}
}
MyVector v = new MyVector(2);
v.insert("oi");
System.out.println(v.get(0));
System.out.println(v.get(1));
v.insert("olá");
v.insert("valor extra");
System.out.println(v.get(2));
v.insert("outra string");
System.out.println(v.get(3));
Dada uma classe Equipamento na qual cada objeto representa um conjunto de N equipamentos de uma empresa com seus respectivos valores, cujo diagrama UML está representado a seguir:
Método | Descrição |
---|---|
construtor | recebe como parâmetro o número de equipamentos e cria um vetor de valores do respectivo tamanho |
getNumeroEquipamentos | retorna o número de equipamentos |
getValor | recebe como parâmetro o número do equipamento (começando de zero) e retorna seu valor. |
setValor | recebe como parâmetro o número do equipamento e seu valor e o registra |
Cada equipamento possui um código numérico sequencial, começando de zero, que corresponde a sua posição no vetor.Escreva uma classe, herdeira da classe Equipamento, denominada EquipamentoCorrigido em que cada objeto representa os mesmos equipamentos com valor corrigido, conforme diagrama UML parcialrepresentado anteriormente.Todo equipamento só é corrigido anualmente no mês em que foi comprado, por este motivo a classe deve acrescentar para cada equipamento um registro do seu mês de compra. Além disto, deve possuir os métodos:
Método | Descrição |
---|---|
construtor | recebe como parâmetros o número de equipamentos e o mês corrente. |
getMesCompra | recebe como parâmetro o número do equipamento (começando de zero) e retorna seu mês de compra. |
setMesCompra | recebe como parâmetro o número do equipamento e seu mês de compra e o registra. |
corrige | este método recebe como parâmetro apenas o percentual de correção e corrige todos os equipamentos cujo mês de compra seja igual ao mês corrente; O objeto deve manter registrado em um atributo o mês corrente. Cada vez que este método é chamado, após a correção, o mês é incrementado de um e, se estiver em dezembro, retorna para janeiro |
substitui | recebe como parâmetro um outro objeto da classe EquipamentoCorrigido e substitui o valor e o mês de compra de todos os equipamentos do objeto corrente pelos do objeto recebido como parâmetro; a operação só será realizada se ambos os objetos possuírem o mesmo número de equipamentos |
Note que o atributo “valor” da classe Equipamento é privado, portanto, só poderá ser acessadoindiretamente, até mesmo pela classe herdeira.
In [11]:
public class Equipamento
{
int [] valor;
int NumeroEquipamentos;
public Equipamento (int size){
this.valor = new int[size];
this.NumeroEquipamentos = size;
}
public int getNumeroEquipamentos() {
return this.NumeroEquipamentos;
}
public int getValor(int numero) {
return this.valor[numero];
}
public void setValor(int numero, int valor)
{
this.valor[numero] = valor;
}
}
public class EquipamentoCorrigido extends Equipamento
{
int [] mesCompra; //Armazena mês de compra de cada equipamento [1-12]
int mesCorrente;
public EquipamentoCorrigido(int numeroTotal, int mesCorrente)
{
super(numeroTotal);
this.mesCompra = new int[numeroTotal];
this.mesCorrente = mesCorrente;
}
public int getMesCompra(int numero) {
return this.mesCompra[numero];
}
public void setMesCompra(int numero, int mes) {
this.mesCompra[numero] = mes;
}
public void corrige(int percentual) {
for (int i = 0; i < this.getNumeroEquipamentos(); i++) {
int corrigido = getValor(i);
if (this.mesCompra[i] == this.mesCorrente)
{
corrigido *= percentual/100;
setValor(i, corrigido);
}
}
this.mesCorrente++;
}
public int getMesCorrente(){
return this.mesCorrente;
}
public void setMesCorrente(int mes){
this.mesCorrente = mes;
}
public void substitui(EquipamentoCorrigido ec) {
if (this.getNumeroEquipamentos() == ec.getNumeroEquipamentos()){
for (int i = 0; i < this.getNumeroEquipamentos(); i++) {
this.setMesCompra(i, ec.getMesCompra(i));
this.setValor(i, ec.getValor(i));
this.setMesCorrente(ec.getMesCorrente());
}
}
}
}