Mostrando postagens com marcador Projeto III. Mostrar todas as postagens
Mostrando postagens com marcador Projeto III. Mostrar todas as postagens

12 de março de 2010

Presentes

Este problema envolve determinar, de um grupo de amigos que estão se presenteando, quanto a mais cada pessoa dá do que recebe (ou vice-versa para aqueles que vêem presentear com cinismo).

Neste problema cada pessoa coloca de lado algum dinheiro para presentear alguns de seus amigos no grupo. Este dinheiro é dividido de forma igual entre todos os presentes que a pessoa dará.

Entretanto, em qualquer grupo de amigos, algumas pessoas são mais generosas que outras e algumas pessoas têm mais dinheiro que outras.

Dado um grupo de amigos, o dinheiro que cada um do grupo gastou com presentes, e uma (sub)lista de amigos que cada um presenteará, você deve escrever um programa que determina quanto a mais (ou a menos) cada pessoa do grupo deu do que recebeu. Note que o valor de todos os presentes dados são inteiros. Cada pessoa dá a mesma quantidade inteira de dinheiro a cada amigo que presenteia, e dá o máximo possível.

Entrada

A entrada é uma seqüência de grupos de pessoas. Cada grupo consiste de muitas linhas:

o número de pessoas no grupo,
a lista de nomes das pessoas do grupo,
uma linha para cada pessoa do grupo, com o nome desta pessoa, a quantidade de dinheiro que ela tem para presentear, o número de pessoas que ela presenteou e o nome dos amigos que ela presenteou.
Todo nome é formado por uma única palavra, só usa letras minúsculas e não possui mais que 12 letras. Dinheiro é um inteiro positivo menor que 2000. Todo grupo tem pelo menos uma pessoa. A entrada consiste de um ou mais grupos e é terminada por um 0.

Saída

Para cada grupo de amigos, deve ser impressa uma linha para cada pessoa do grupo. Cada linha deve conter o nome desta pessoa, seguido do ganho (ou perda) líquida da pessoa, ou seja, a diferença entre o que ela recebeu e o que deu. Os nomes em um grupo devem ser impressos na mesma ordem em que apareceram pela primeira vez na entrada.

A saída para cada grupo deverá ser separada do próximo grupo por uma linha em branco.

Exemplo

Entrada

5 dave laura owen vick amr dave 200 3 laura owen vick owen 500 1 dave amr 150 2 vick owen laura 0 2 amr vick vick 0 0 3 liz steve dave liz 30 1 steve steve 55 2 liz dave dave 0 2 steve liz 0

Saída

dave 302 laura 66 owen -359 vick 141 amr -150 liz -3 steve -24 dave 27

import java.util.Scanner;
import java.util.ArrayList;

/* Membros do Grupo
* Alberto Felipe Dias Rodrigues
* Leandro Hossaki Mielli
* Fernando Costa
*/

public class Presentes {
public static void main(String Args[]){

// Instancia Variáveis
int numPessoas;
ArrayList<Pessoa> Pessoas = new ArrayList<Pessoa>();
Scanner input = new Scanner(System.in);

// Solicita o número de pessoas
System.out.printf("\nDigite o número de pessoas: ");
numPessoas = Integer.parseInt(input.next());

// Laço para solicitar o nome das pessoas e instanciar seus objetos
for(int i=0;i<numPessoas;i++){
System.out.printf("\nDigite o nome da %d pessoa: ", i);
String nome = input.next();
Pessoa pessoa = new Pessoa(nome);
Pessoas.add(pessoa);
}

// Laço para percorrer a lista de pessoas
for(Pessoa pessoa: Pessoas){
// Imprime o nome da pessoa corrente do laço
System.out.printf("\n%s", pessoa.getNome());

// Solicita o valor dado pela pessoa
System.out.printf("\nDigite o valor a ser presenteado: ");
int valor = Integer.parseInt(input.next());
// Atualiza o valor dado no objeto
pessoa.setValorDado(valor);

// Solicita o número de pessoas presenteadas
System.out.printf("\nDigite o número de pessoas que serão presenteadas: ");
int numPessoasPre = Integer.parseInt(input.next());

// Laço para solicitar o nome das pessoas presenteadas
for(int i=0;i<numPessoasPre;i++){

// Solicita o nome da pessoa presenteada
System.out.printf("\nDigite o nome da %d pessoa: ", i);
String nomePre = input.next();

// Laço para percorrer a lista de pessoas a procura da pessoa presenteada solicitada
for(Pessoa pessoaPre: Pessoas){
// Verifica se a pessoa corrente é a pessoa solicitada
if(pessoaPre.verificaIgualdade(nomePre)){
// Adiciona a pessoa aos presenteados
pessoa.addPresenteado(pessoaPre);
// Sai do laço
break;
}
}
}
}

// Laço para percorrer a lista de pessoas atualizando o valor recebido
for(Pessoa pessoa: Pessoas){
// Recupera a lista de presenteados da pessoa corrente
ArrayList<Pessoa> Presenteados = pessoa.getPresenteados();
// Recupera o valor do presente
int valorPre = pessoa.getValorPresente();
// Percorre a lista de presenteados atualizando o valor recebido de cada um
for(Pessoa presenteado: Presenteados){
// Atualiza o valor recebido da pessoa corrente
presenteado.ValorRecebido(valorPre);
}
}

// Laçp para percorrer a lista de pessoas imprimindo o seu saldo
for(Pessoa pessoa: Pessoas)
System.out.printf("\n%s = %d", pessoa.getNome(), pessoa.getSaldo());
}
}

// Classe Pessoa
// Guarda dados como nome da pessoa, valor dado, valor recebido e uma lista dos presenteados por ela
class Pessoa{

// Propriedades
private String Nome;
private int ValorDado;
private int ValorRecebido;
private ArrayList<Pessoa> Presenteados = new ArrayList<Pessoa>();

// Construtores
protected Pessoa(){
this.Nome = null;
this.ValorDado = 0;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome){
this.Nome = Nome;
this.ValorDado = 0;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome, int ValorDado){
this.Nome = Nome;
this.ValorDado = ValorDado;
this.ValorRecebido = 0;
}
protected Pessoa(String Nome, int ValorDado, ArrayList<Pessoa> Presenteados){
this.Nome = Nome;
this.ValorDado = ValorDado;
this.ValorRecebido = 0;
this.Presenteados = Presenteados;
}

// Métodos SET
protected void setNome(String Nome){
this.Nome = Nome;
}
protected void setValorDado(int ValorDado){
this.ValorDado = ValorDado;
}
protected void setPresenteados(ArrayList<Pessoa> Presenteados){
this.Presenteados = Presenteados;
}

// Métodos GET
protected String getNome(){
return this.Nome;
}
protected int getValorDado(){
return this.ValorDado;
}
protected ArrayList<Pessoa> getPresenteados(){
return this.Presenteados;
}

// Adiciona um novo presenteado na lista
protected void addPresenteado(Pessoa Presenteado){
Presenteados.add(Presenteado);
}

// Atualiza(Incrementa) o valor recebido pela pessoa
protected void ValorRecebido(int ValorRecebido){
this.ValorRecebido += ValorRecebido;
}

// Retorna o valor dado como presente para cada pessoa de sua lista
protected int getValorPresente(){
return ValorDado / Presenteados.size();
}

// Retorna o saldo da pessoa
protected int getSaldo(){
return ValorRecebido - ValorDado;
}

// Verifica igualdade de nome da pessoa
protected boolean verificaIgualdade(String Nome){
if(this.Nome.equals(Nome))
return true;
return false;
}
}

Números Piramidais

Os segredos das pirâmides vêm instigando cientistas e místicos há séculos, dando asas à imaginação das pessoas. Uma dessas curiosidades são os chamados números piramidais. Dizemos que um número inteiro é piramidal se for igual à soma de três números primos consecutivos. Assim, por exemplo, o número 15 é piramidal, pois 15 = 3 + 5 + 7 . O número 10 também é piramidal, já que 10 =2 + 3+ 5 . O número 23 é piramidal, pois 23 = 5 + 7 + 11 .

Neste programa você deverá receber uma seqüência de números inteiros maiores que 0, terminada por um zero, e deverá verificar se cada um dos números da seqüência é ou não piramidal.

Entrada

A entrada é composta por uma seqüência de números inteiros positivos, cada um maior que 0 e menor que 10000, cada um deles em uma linha. Na última linha haverá um zero.

Saída

Para cada linha da entrada você deverá imprimir uma linha na saída, colocando a mensagem O numero ... e piramidal ou O numero ... nao e piramidal. A linha com o número 0 não deve causar nenhuma impressão.

Exemplo:

Entrada:

15 7 6 97 0

Saída:

O numero 15 é piramidal O numero 7 não é piramidal O numero 6 não é piramidal O numero 97 é piramidal

/* Membros do Grupo
* Alberto Felipe Dias Rodrigues
* Leandro Hossaki Mielli
* Fernando Costa
*/
package NumerosPiramidais;

import java.util.ArrayList;
import java.util.Scanner;

public class piramide {

public static boolean VerifPrimo(int n){
for (int i=2; i<n; i++) {
if (n%i == 0)
return false;
}
return true;
}

public static void main(String arg[]){

ArrayList<Integer> num = new ArrayList();
Scanner input = new Scanner(System.in);

int i=-1;
while (i!=0){
i=input.nextInt();
if (i<0)
System.out.println("Numero Invalido, Menor que Zero");
else
if (i>0)
num.add(i);
}

int [] tresPrimos = new int[3];
for (i=0;i<num.size();i++){
int numAtual = num.get(i);

tresPrimos[0]=tresPrimos[1]=tresPrimos[2]=0;

boolean piramidal=false;
int n=numAtual;
while (n>0){
if (VerifPrimo(n)){
tresPrimos[2]=tresPrimos[1];
tresPrimos[1]=tresPrimos[0];
tresPrimos[0]=n;

//Só verifica se é piramidal Se existir valores nos tresPrimos
if ((tresPrimos[0]>0)&&(tresPrimos[1]>0)&&(tresPrimos[2]>0)){
if ((tresPrimos[0]+tresPrimos[1]+tresPrimos[2])==numAtual){
n=0;
piramidal=true;
}
else
//se a soma dos 3 numeros for menor que o Numero então já para
if ((tresPrimos[0]+tresPrimos[1]+tresPrimos[2])<numAtual)
n=0;
}
}
n--;
}
if (piramidal)
System.out.println("O numero "+numAtual+" e piramidal");
else
System.out.println("O numero "+numAtual+" nao e piramidal");
}

}
}

26 de fevereiro de 2010

Problemas A e B

Copa do Mundo


import java.util.Scanner;
import java.util.ArrayList;

/* Membros do Grupo
* Alberto Felipe Dias Rodrigues
* Leandro Hossaki Mielli
* Fernando Costa
*/

public class Copa {
public static void main(String Args[]){
Scanner input = new Scanner(System.in); // Instacia classe scanner para ler as entradas do usuário
ArrayList<Jogo> Jogos = new ArrayList<Jogo>(); // Instancia um arraylist do objeto Jogo
int qtdTms = 1; // Quantidade de Times
int numPar = 1; // Quantidade de Partidas
boolean flag; // Flag de validação de entrada do usuário

System.out.printf("Copa\n\n");

// Faz a repetição até que a quantidade de times e pastidas sejam 0(zero)
while((qtdTms != 0) && (numPar != 0)){

flag = false;
// Faz repetição até que a quantidade de times e partidas sejam válidos
while(!flag){
// Tenta executar o código
try{
// Faz a leitura dos dados entrados pelo usuário
qtdTms = Integer.parseInt(input.next());
numPar = Integer.parseInt(input.next());

// Faz validações sobre os dados entrados pelo usuário
if(((qtdTms >= 2) && (qtdTms <= 200) && (numPar >= 0) && (numPar <= 10000)) || ((qtdTms == 0) && (numPar == 0)))
flag = true;
else
System.out.printf("Digite novamente a quantidade de times e partidas!\n");
// Se der algum erro na execução do código, envia mensagem para digitar novamente
}catch(Exception e){
System.out.printf("Digite novamente a quantidade de times e partidas!\n");
}
}

// Verifica se os dados são válidos para executar o programa
if((qtdTms != 0) && (numPar != 0) && (flag = true)){
// Instancia uma nova classe Jogo
Jogo Jogo = new Jogo(numPar);

// Faz repetição do número de times entrado pelo usuário
for(int i=0;i<qtdTms;i++){
String nomTme = "";
int sldGol = 0;

flag = false;
// Faz repetição até que o nome do time e o seu saldo sejam válidos
while(!flag){
// Tenta executar o código
try{
// Faz a leitura dos dados entrados pelo usuário
nomTme = input.next();
sldGol = Integer.parseInt(input.next());

// Faz validações sobre os dados entrados pelo usuário
if(nomTme.length() <= 10)
flag = true;
else
System.out.printf("Digite novamente o nome do time e seu saldo!\n");
// Se der algum erro na execução do código, envia mensagem para digitar novamente
}catch(Exception e){
System.out.printf("Digite novamente o nome do time e seu saldo!\n");
}
}

// Instancia uma nova classe Time passando por parametros os dados entrados pelo usuário
Time Time = new Time(nomTme, sldGol);

// Adiciona ao Jogo o novo time criado
Jogo.addTime(Time);
}

// Adiciona ao arraylist de Jogo o novo Jogo criado
Jogos.add(Jogo);
}
}

// Percorre Todos os jogos criados
for(Jogo Jogo:Jogos){
// Faz o cálculo para ver quantos empates teve o jogo
int empates = (3 * Jogo.getQtdPartidas()) - Jogo.getSaldoGols();
// Imprime a quantidade de Empates
System.out.printf("\n%d", empates);
}
}
}

// Classe Jogo
// Propriedades: ArrayList de Time e Quantidade de Partidas
class Jogo {
private ArrayList<Time> Times = new ArrayList<Time>();
private int qtdPartidas;

// Construtores
protected Jogo(int qtdPartidas){
this.qtdPartidas = qtdPartidas;
}
protected Jogo(ArrayList<Time> Times, int qtdPartidas){
this.Times = Times;
this.qtdPartidas = qtdPartidas;
}

// Métodos SET
protected void setJogo(ArrayList<Time> Times){
this.Times = Times;
}
protected void setQtdPartidas(int qtdPartidas){
this.qtdPartidas = qtdPartidas;
}

// Métodos GET
protected int getQtdPartidas(){
return qtdPartidas;
}
protected ArrayList<Time> getJogo(){
return Times;
}

// Métodos para adicionar um time ao jogo
protected void addTime(Time Time){
Times.add(Time);
}

// Método que retorna o saldo de gols do Jogo
protected int getSaldoGols(){
int saldo = 0;
// Percorre todos os times do Jogo recuperando seu saldo de gols
for(Time Time: Times){
saldo += Time.getGols();
}
return saldo;
}
}

// Classe Time
// Propriedades: Nome do time e Saldo de Gols
class Time {
private String Time;
private int Gols;

// Construtor
protected Time(String Time, int Gols){
this.Time = Time;
this.Gols = Gols;
}

// Métodos SET
protected void setTime(String Time){
this.Time = Time;
}
protected void setGols(int Gols){
this.Gols = Gols;
}

// Métodos GET
protected String getTime(){
return Time;
}
protected int getGols(){
return Gols;
}
}


Suco de Acerola


import java.util.Scanner;
import java.util.ArrayList;

/* Membros do Grupo
* Alberto Felipe Dias Rodrigues
* Leandro Hossaki Mielli
* Fernando Costa
*/

public class Suco {
public static void main(String Args[]){
Scanner input = new Scanner(System.in); // Instacia classe scanner para ler as entradas do usuário
ArrayList<Quantidade> Quantidades = new ArrayList<Quantidade>(); // Instancia um arraylist do objeto Quantidade
int Amigos = 1; // Quantidade de Amigos
int Frutas = 1; // Quantidade de Frutas
boolean flag;; // Flag de validação de entrada do usuário

System.out.printf("Suco\n\n");

// Faz a repetição até que a quantidade de amigos e frutas sejam 0(zero)
while((Amigos != 0) && (Frutas != 0)){

flag = false;
// Faz repetição até que a quantidade de amigos e frutas sejam válidos
while(!flag){
// Tenta executar o código
try{
// Faz a leitura dos dados entrados pelo usuário
Amigos = Integer.parseInt(input.next());
Frutas = Integer.parseInt(input.next());

// Faz validações sobre os dados entrados pelo usuário
if(((Amigos >= 1) && (Amigos <= 1000) && (Frutas >= 1) && (Frutas <= 1000)) || ((Amigos == 0) && (Frutas == 0)))
flag = true;
else
System.out.printf("Digite novamente o número de amigos e frutas!\n");
// Se der algum erro na execução do código, envia mensagem para digitar novamente
}catch(Exception e){
System.out.printf("Digite novamente o número de amigos e frutas!\n");
}
}

// Verifica se os dados são válidos para executar o programa
if((Amigos != 0) && (Frutas != 0) && flag == true){
// Adiciona ao arraylist de Quantidade a nova Quantidade criada
Quantidades.add(new Quantidade(Amigos, Frutas));
}
}

// Percorre Todas as quantidades criadas
for(Quantidade Quantidade:Quantidades){
// Faz o cálculo de qunatos litros cada amigos irá obter
float litros = (float) (Quantidade.getFrutas() * 0.05);
float qtd = litros/Quantidade.getAmigos();
// Imprime a quantidade de litros
System.out.printf("\nLitros = %.2f", qtd);
}
}
}

// Classe Quantidade
// Propriedades: Quantidade de Amigos e Frutas
class Quantidade {
private int Amigos;
private int Frutas;

// Construtor
protected Quantidade(int Amigos, int Frutas){
this.Amigos = Amigos;
this.Frutas = Frutas;
}

// Métodos SET
protected void setAmigos(int Amigos){
this.Amigos = Amigos;
}
protected void setFrutas(int Frutas){
this.Frutas = Frutas;
}

// Métodos GET
protected int getAmigos(){
return Amigos;
}
protected int getFrutas(){
return Frutas;
}
}

17 de fevereiro de 2010

Projeto III - Problemas A e B

Problema A
Copa do Mundo


Nome do arquivo fonte:
copa.c, copa.cpp ou copa.java

Uma Copa do Mundo de futebol de botões está sendo realizada com times de todo o mundo.

A classificação é baseada no número de pontos ganhos pelos times, e a distribuição de pontos é feita da forma usual. Ou seja, quando um time ganha um jogo, ele recebe 3 pontos; se o jogo termina empatado, ambos os times recebem 1 ponto; e o perdedor não recebe nenhum ponto.

Dada a classificação atual dos times e o número de times participantes na Copa do Mundo, sua tarefa é de determinar quantos jogos terminaram empatados até o momento.

Entrada

A entrada contém vários casos de teste. A primeira linha de um caso de teste contém dois inteiros

O final da entrada é indicado por uma linha que contém apenas o número zero.

T e N, indicando respectivamente o número de times participantes (2<=T<=200) e o núumero de partidas jogadas (0 <=N<=104). Cada uma das T linhas seguintes contém o nome de um time (uma cadeia de máximo 10 letras e dígitos), seguido de um espaço em branco, seguido do número de pontos que o time obteve até o momento.Os dados devem ser lidos da entrada padrão

Saída

Para cada um dos casos de teste seu programa deve imprimir uma única linha contendo um número inteiro, representando a quantidade de jogos que terminaram empatados até o momento.

O resultado de seu programa deve ser escrito na saída padrão.

Exemplo de entrada:

3 3

Brasil 3

Australia 3

Croacia 3

3 3

Brasil 5

Japao 1

Australia 1

0 0

Exemplo de saída:

0

2

Possível solução:
Fatos:
Quantidade Total de pontos é igual a 2 vezes o número de empates + 3 vezes o número de vitórias, (QTP = 2EMP+3TV).
O número total de partidas é igual ao número de empates + o número de vitórias,
(TP = EMP+TV).
Tudo isso é obvio se você pensar pensar pensar!!!

Equações:
QTP = 2EMP+3TV
TP = EMP+TV

QTP = Quantidade total de pontos;
EMP = Empates;
TV = Total de vitórias;
TP = Total de partidas.

Conclusão útil:
QTP = 3TP-EMP
ou
EMP = 3TP - QTP

Usando no exemplo dado:
1°
3 3
3
3
3

QTP = 9 ( 3+ 3 + 3)
TP = 3
EMP = 3 * 3 - 9 = 0

2°
3 3
5
1
1

QTP = 7 (5 + 1 + 1)
TP = 3
EMP = 3 * 3 - 7 = 2
Problema B

Suco de Acerola

Nome do arquivo fonte:

suco.c, suco.cpp ou suco.java

Natural das Antilhas, a acerola

Um grupo de amigos está visitando o Sítio do Picapau Amarelo, renomado produtor de acerola. Com a permissão de Dona Benta, dona do sítio, colheram uma boa quantidade de frutas, e pretendem agora fazer suco de acerola, que será dividido igualmente entre os amigos durante o lanche da tarde.

Conhecendo o número de amigos, a quantidade de frutas colhidas, e sabendo que cada unidade da fruta é suficiente para produzir 50 ml de suco, escreva um programa para determinar qual o volume, em litros, que cada amigo poderá tomar.

Malpighia glabra Linn, também conhecida como cereja das Antilhas) já era apreciada pelos nativos das Américas há muitos séculos. Mas o grande interesse por essa fruta surgiu na década de 1940, quando cientistas porto-riquenhos descobriram que a acerola contém grande quantidade de ácido ascórbico (vitamina C). A acerola apresenta, em uma mesma quantidade de polpa, até 100 vezes mais vitamina C do que a laranja e o limão, 20 vezes mais do que a goiaba e 10 vezes mais do que o caju e a amora.

Entrada

A entrada contém vários casos de teste. Cada caso de teste é composto por uma única linha, contendo dois números inteiros

O final da entrada é indicado por uma linha que contém apenas dois zeros, separados por um espaço em branco.

N e F, indicando respectivamente o número de amigos (1<=N <= 103) e a quantidade de de frutas colhidas (1<= F <= 103). Os dados devem ser lidos da entrada padrão Saída

Para cada caso de teste da entrada seu programa deve imprimir uma única linha, contendo um número real, escrito com precisão de duas casas decimais, representando o volume de suco, em litros, a que cada amigo tem direito.

O resultado de seu programa deve ser escrito na saída padrão

Exemplo de entrada:

1 1

5 431

101 330

0 0

Exemplo de saída:

0.05

4.31

0.16

Possível solução:
Este é o mais simples, suponhamos que as entradas sejam A e B, a saída será:
B * 0.05 / A

Usando no exemplo dado:
1°
1 1
1 * 0.05 / 1 = 0.05

2°
5 431
431 * 0.05 / 5 = 4.31


Agora é só fazer o leitor das informações dadas!

lol

12 de fevereiro de 2010

Aviso!!!

Dia 18/02 quinta-feira após carnaval nossa aula será a distância.

Acessem o AVA e vejam as atividades e as respectivas datas de entrega.

voltamos a nos encontrar no dia 25 de fevereiro

*1 dia sem ir pra facul xD

3 de fevereiro de 2010

Começou bem?

Prezados Alunos, que irão cursar a disciplina PROJETO MULTIDISCIPLINAR III
(QUINTA-FEIRA).

Infelizmente, nesta quinta-feira não poderei dar aula em virtude de um
compromisso que eu assumi anteriormente...