Este semestre, resolvi fazer uma procura sobre apostilas que possam auxiliar no aprendizado e encontrei o site www.apostilando.com/ , onde encontrei apostilas sobre diversos tipos de linguagem de programação. Se vc estiver com algum problema em seu programa, uma sugestão é procurar informações nestas apostilas. Espero que a sugestão seja ultil para os novos alunos. Até mais.
Para fazer os Eps é necessário usar apenas o quê foi visto em aula. Outros
comandos podem ser usados, mas a dica é: "Use coisas não vistas em aula, apenas
se você tiver plena certeza de quê está correto".
Alfredo
Bom, só uma duvida simples, a geração de numeros aleatórios do java é uma geração de numeros segura??? É pseudo aleatória??? E a disposição dos numeros gerados é de forma quadratica???
Gostaria de saber sobre esse assunto porquê verei se passo alguns programas que fiz para linux para Java e assim poderei usa-los em qualquer computador. E alguns deles dependem de geração de numeros aleatórios. Desde ja agradeço a quem se interessou pela minha duvida.
Re: Duvida sobre a geração de numeros aleatórios
A sua pergunta é bem avançada, apenas sei que o gerador de Java sempre
foi o suficiente quando precisei de aleatoriedade, e vai ser suficiente
para o nosso jogo.
Alfredo
Re: Duvida sobre a geração de numeros aleatórios
Então é possível eu ler o código fonte do objeto para eu ver como é o algoritmo utilizado??? Ou em java os códigos reaproveitados ficam obscuros??? É que para usar o metodo de integração de Monte Carlo por exemplo a distribuição deve ser quadratica para não ter uma aproximação da integral errada. Só por isso fiz a pergunta.
Obrigado por me responder a pergunta, até mais...
Basta que um entregue, mas o cabeçalho deve conter (obrigatoriamente) infomações dos dois integrantes da equipe.
Alfredo
Tenho outra duvida com relação a impressão. Tentei fazer o apito da placa mãe soar com o \a como em linguagem C, mas deu erro de compilação, como eu faço isso em Java??? E para colocar caracteres especiais, tudo que for digitado será incluido sem alteração ou tem que fazer como em linguagem C, que é necessário colocar \ mais o código octal do caracter??? Mais uma vez obrigado para quem me responder.
Mais uma coisinha, to procurando alguém para dupla no EP, mas to indo só de sexta feira (to fazendo a matéria só como ouvinte e tenho aula na terça no mesmo horario). Se alguém se interessar, é só falar comigo na aula de sexta ou pelo IF. Sou o cara da foto mesmo...
Bom, a programação pode ser usada em muitos setores da física, principalmente na parte de analise de dados, simulações e colheita de dados em experimentos. Se vc for em qualquer laboratório no IF você verá diversos computadores, cada um com uma função, rodando programas especificos para cada situação.
Eu mesmo estava propondo o desenvolvimento de um braço mecânico para auxiliar nas tomadas de dados em um experimento de fisica teórica que eu e meus colegas de grupo desenvolvemos a algum tempo em laboratório de física 1.
Hoje em dia penso que deveria ter começado a programas a mais tempo, mas como gosto muito dessa área e sou bastante aplicado estou suprindo o tempo perdido. Acho que os alunos da fisica devem ver a programação como uma ferramenta na resolução de problemas específicos e não como apenas mais uma matéria chata.
Com relação ao usp de programação em Física gostaria de salientar que vários
dos progressos da computação foram devidos às necessidades dos físicos, que sempre estão em busca de mais poder computacional. Isto fica ainda mais claro na busca de partículas fundamentais, onde a quantidades de dados a serem processados é enorme.
Talvez outros possam colaborar citando outros exemplos.
Alfredo
Aeh prof.
Lembra de deixar os outros capítulos da apostila juntamente com o apêndice A
Valew!
VALEW HEIN PROF, AGORA FICA MAIS FÁCIL!
Um comentário sobre a utilização do forum: Observem que ele tem uma "indentação", semelhante com a que vcs usam para programar em Java. Ou seja, quando eu vou escrever no forum eu devo clicar no link "responder" abaixo da mensagem a qual eu vou responder. Exêmplo:
Dúvida sobre assunto A
Resposta do assunto A
Outra resposta do assunto A
Dúvida sobre o asssunto B
Resposta do assunto B
Comentário sobre a resposta do assunto B
Outra resposta do assunto B
...
Essa naum é uma questão super importante que vá fazer toda diferença na hora de programar, mas ajuda bastante a acompanhar o forum.
Professor, se puder coloca o capitulo da proxima no site
até mais
AEH PROFESSOR, DISPONIBILIZA MAIS DOIS CAPÍTULOS DA APOSTILA PRA GENTE ACOMPANHAR A AULA!
VALEW!
AHHH, NUM ESQUECE DE MUDAR A DATA DE ENTREGA DO EP AQUI NO MOODLE TAMBÉM!
BRIGADÃO!
PROFESSOR: EU POSSO CRIAR UM OBJETO DE UMA CLASSE DENTRO DESTA MESMA CLASSE???
EXEMPLO:
CLASS TESTE
{
TESTE T = NEW TESTE();
......
}
Pode sim, desde que esta criação esteja dentro de um método.
Alfredo
Professor,
Eu estou querendo fazer um programa pra fazer algumas operações em juros compostos e coisas do tipo...
Preciso saber como eu faço as operações de expoentes no Java...
Valew!!!
O mais fácil é criar a sua função de expoente, mas se você estiver com
preguiça, pode usar o método Math.pow. Mais informações em:
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html#pow(double,%20double)
Alfredo
Professor...
Eu decidí fazer um laço... Pois o programa que preciso é um pouco complicado demais pra minha cabeça entender... rs
Eu estou querendo fazer um programa que vai simular um investimento a longo prazo, no qual eu vou fazer um resgate mensal fixo e desse mesmo rendimento vai sair o pagamento do investidor, que é 27,5% do rendimento mensal...
Para isso... Eu fiz a segunte classe:
class Investimento
{
double CapitalAplicado;
double RendimentoMensal;
double ResgateMensal;
double PagamentoMensal;
double Montante;
double TaxaDeJúros;
double TempoDeAplicação;
void carregaCapitalAplicado(double C)
{
CapitalAplicado = C;
}
void carregaResgateMensal(double res)
{
ResgateMensal = res;
}
double estimaMontante(double i, double t)
{
TaxaDeJúros = i;
TempoDeAplicação = 0;
while(TempoDeAplicação <= t)
{
Montante = CapitalAplicado * (1.0 + i);
PagamentoMensal = 0.275 * (Montante - CapitalAplicado);
Montante = Montante - PagamentoMensal - ResgateMensal;
TempoDeAplicação = TempoDeAplicação + 1;
}
return Montante;
}
}
A classe faz o laço apenas uma vez... Enquanto que eu queria fazer laços que se repitissem por 60 vezes (5 anos) ou mais...
O laço não funcionaaa... Heeelp...
Valew...
Modifiquei um pouco o seu código para que ele funcionasse.
Na prática não se esqueça dos efeitos da inflação

Alfredo
class Investimento
{
double CapitalInicial;
double RendimentoMensal;
double ResgateMensal;
double PagamentoMensal;
double Montante;
double TaxaDeJúros;
double TempoDeAplicação;
void carregaCapitalInicial(double C)
{
CapitalInicial = C;
Montante = CapitalInicial;
}
void carregaResgateMensal(double res)
{
ResgateMensal = res;
}
double estimaMontante(double i, double t)
{
double MontanteAnterior;
TaxaDeJúros = i;
TempoDeAplicação = 1;
while(TempoDeAplicação <= t)
{
MontanteAnterior = Montante;
Montante = Montante * (1.0 + i);
PagamentoMensal = 0.275 * (Montante - MontanteAnterior);
Montante = Montante - PagamentoMensal - ResgateMensal;
System.out.println("Mês: " + TempoDeAplicação + " Valor atual = " + Montante);
TempoDeAplicação = TempoDeAplicação + 1;
}
return Montante;
}
}
aaahhh... esquece isso aí aí em cima... eu já resolví... aff... eu sou muito burro... hauhauhau...
mas ó... tô com outro prob... qdo eu vou imprimir a "tabelinha" que eu sugerí nessa nova classe, a impressão dos valores, como é double, saí com várias casas decimais, enquanto que eu eu queria trabalhar com apenas duas... tem como resolver isso???
dá uma olhada em como está a classe...
class Investimento
{
double CapitalAplicado;
double RendimentoMensal;
double ResgateMensal;
double PagamentoMensal;
double Montante;
double TaxaDeJúros; //em porcentagem
double TempoDeAplicação;
void carregaCapitalAplicado(double C)
{
CapitalAplicado = C;
}
void carregaResgateMensal(double res)
{
ResgateMensal = res;
}
double estimaMontante(double i, double t)
{
TaxaDeJúros = i;
TempoDeAplicação = 0;
Montante = CapitalAplicado;
if (i > 2.5)
while(TempoDeAplicação <= t)
{
RendimentoMensal = Montante * (i/100);
Montante = Montante + RendimentoMensal;
PagamentoMensal = 27.5/100 * RendimentoMensal;
Montante = Montante - PagamentoMensal - ResgateMensal;
TempoDeAplicação = TempoDeAplicação + 1;
System.out.print(TempoDeAplicação + "º mês || ");
System.out.print("R$" + Montante + " || ");
System.out.print("rendimento R$" + RendimentoMensal + " || ");
System.out.print("resgatando R$" + ResgateMensal + " || ");
System.out.println("pagando R$" + PagamentoMensal + " || ");
}
else
while(TempoDeAplicação <= t)
{
RendimentoMensal = Montante * (i/100);
Montante = Montante + RendimentoMensal;
Montante = Montante - ResgateMensal;
TempoDeAplicação = TempoDeAplicação + 1;
System.out.print(TempoDeAplicação + "º mês || ");
System.out.print("R$" + Montante + " || ");
System.out.print("rendimento R$" + RendimentoMensal + " || ");
System.out.println("resgatando R$" + ResgateMensal + " || ");
}
return Montante;
}
}
Heeelp de novo...
Valew!
Estou com mais um problema...
Tipow... Na sexta feira passada... O Sr. sugeriu um programa que calculasse senos através de uma das séries de Taylor... Certo?
Então... Estou tentando fazer o programa... Fiz a seguinte Classe:
class SérieDeTaylor
{
double sen(double x)
{
double sen = 0.0;
int k = 1;
double termo = x;
while (termo*termo > 1.0e-12)
{
sen = sen + termo;
termo = termo * x*x*Math.pow((-1),k)/((2*k)*(2*k+1));
k = k + 1;
}
return sen;
}
}
Seguinte, compila legal e normal... Mas qdo eu coloco tipow... Pra calcular o seno de 3.1416... Ele fica rodando e rodando mow tempo e não dá valor nenhum... Uma vez que deu, deu um valor muito estranho...
Help???
Valew!
A priori as séries de taylor que ensinamos só funcionam para valores de ângulos
entre -1 e 1 em radianos....
Alfredo
os ep`s que foram feitos em dupla, mas apenas um da dupla envio o mesmo pro moodle a nota sera cadastrada no moodle no usuario dos dois ou apenas no dakele que enviou o EP???
Victor Cassini.
A nota dos EPs feitos em dupla será cadastrada nos dois usuários. Os dois receberam a mesma nota e os mesmos comentários.
Ola
Professor, se der coloca mais um capitulo da apostila para a aula de sexta
valew tchal.
Desta vez, o EP é um pouco mais fácil, logo eu gostaria de não adiar. Mas,
podemos estudar a possibilidade mais para a frente.
Alfredo
double ln (double umMaisx)
{
double x = umMaisx - 1;
double ln = x;
double termo = x;
int a = 2;
while(termo*termo>1.0e-8)
{
termo = ((termo*x*(-1)*(a-1))/a);
a = a + 1;
ln = ln + termo;
}
return ln;
}
Só que não calcula valores maiores do que 2. É problema do código ou do Java?
Obrigado desde já!
Olá, professor. Tudo bem?
Então, gostaria de saber como posso melhorar esta classe (que segue logo abaixo). Ela calcula fatoriais e números binomiais, mas com um problema: ela só faz isso de maneira correta até n = 12. A partir de 13, os fatoriais e os números binomiais já aparecem errados! Preciso saber como melhorar essa classe, pois ela está interferindo no resultado de outras duas: uma que imprime o Triângulo de Pascal e outra que informa os Números de Bernoulli.
Aguardo por resposta e desde já agradeço.
Bruno Albuquerque
class NúmeroBinomial
{
int fatorial;
int calculaFatorial (int n)
{
if (n == 0)
return 1;
else
fatorial = n;
while (n > 1)
{
fatorial = fatorial*(n-1);
n = n - 1;
}
return fatorial;
}
int resultado;
int calculaBinomial (int n, int k)
{
if (n < k)
return 0;
else
{
resultado =calculaFatorial/(calculaFatorial(k)*calculaFatorial(n-k));
return resultado;
}
}
}
bruno, talvez o seu fatorial esta calculando ate 12 apenas pois acima disso deve estourar o valor que o int comporta, tente alterar para double ou entao usar o codigo abaixo
double fatorial(int x)//apenas para fatorial de 1 pra cima
{
int cont = 1;
double fat = 1.0;
while (cont != x)
{
fat = fat * (cont+1);
cont++;
}
return fat;
}
Valeu Diego. Eu fiz a mudança e ficou um pouco melhor.
A classe do triângulo de Pascal ficou perfeita.
Já a que imprime os números de Bernoulli ficou bem melhor, mas ainda não está perfeita devido aos erros de conta do Java.
No mais, as dicas foram de grande valia.
Muito obrigado!
Bruno Albuquerque
Também tenho as minha dicas, para evitar os erros de precisão, pode
ser bom usar long ao invés de double (aí dá para calcular o fatorial até
uns 120). Sobre o Bernoulli a forma de resolver é levar em conta que você
não precisa calcular o numerador e o denominador de formas independentes,
se você calculá-los interativamente, simplificando sempre que possível a fração,
você não vai trabalhar com números muito grandes.
Alfredo
Ola
professor, se der coloca a apostila
até mais.
Ola
fiz a seguinte class para calcular o numero de digitos de um numero
class Contador
{
int contaNumeroDeDigitos(int n)
{
if(n!=0)
{
int numeroDeDigitos = 0;
while (n > 0)
{
numeroDeDigitos = numeroDeDigitos + 1;
n = n/10;
}
return numeroDeDigitos;
}
else
return 1;
}
}
O problema é que essa classe funciona bem se o numero tiver até 10 digitos, acima disso aparece a seguinte mensagem
NumberFormatException: For input string: "10000000000"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
Qual pode ser o problema?
int calculaNumDigitos(double x){
int n;
double x2=x;
for(n=0; x2>0; n++, x2 /= 10);
return n;
}
Bom, não garanto o metodo pq não testei, fiz ele agora de cabeça. Mas acho que a ideia principal ja é repassada nele. Espero ter resolvido seu problema, até mais!!!
Olá
Alguém ainda está sem dula para fazer o 3º EP???
Esse vai ser muito difícil fazer sozinho!
Olá, professor. Tudo bem?
Então, estou com uma dúvida capital: a maioria das classes que criamos ultimamente envolviam métodos que recebiam arrays ou matrizes como parâmetros. Como eu declaro, no painel de interações, os arrays ou as matrizes que desejo usar? Isso ocorre, por exemplo, na classe Matrizes que criamos em sala de aula. Um dos métodos, o somaMatriz recebe 2 matrizes. Como eu declaro as matrizes no Painel de interações?
É só isso.
Desde já agradeço pela atenção.
Bruno Albuquerque.
Welcome to DrJava.
> int [][] m = new int[2][3];
> m[0][0] = 1;
> m[0][1] = 2;
> m[0][2] = 4;
> m[1][0] = m[0][0] + m[0][1];
> for (int i = 0; i < 2; i ++)
{
for(int j = 0; j < 3; j++)
System.out.print("m["+i+"]["+j+"] = " + m[i][j]);
System.out.println();
}
m[0][0] = 1m[0][1] = 2m[0][2] = 4
m[1][0] = 3m[1][1] = 0m[1][2] = 0
> int [][] n = {{1,2,3},{2,3,4}};
> for (int i = 0; i < 2; i ++)
{
for(int j = 0; j < 3; j++)
System.out.print("n["+i+"]["+j+"] = " + n[i][j]);
System.out.println();
}
n[0][0] = 1n[0][1] = 2n[0][2] = 3
n[1][0] = 2n[1][1] = 3n[1][2] = 4
>
Olá, professor. Eu tenho algumas dúvidas sobre a utilização do teclado. Na apostila é colocado que é necessário o método "public static void main(String [] args)" para a leitura de dados a partir do teclado. Porém, eu fiz alguns métodos usando outros nomes, como o "void teclado"abaixo e funcionou do mesmo jeito.
EX:
import java.util.*;
class OrdenaCarros
{
String [] carros = { "Ford", "BMW", "Alfa" , "Chevrolet" , "Mondeo" };
void imprime()
{
int i=0;
while ( i < carros.length)
{
System.out.println (carros[i]);
i++;
}
}
void teclado ()
{
int i;
Scanner s = new Scanner(System.in);
for(i=0; i < carros.length; i++)
{
System.out.println ("Digite o carro");
String car = s.next();
carros [i] = car;
}
}
}
No exemplo da página 93 (class MediasNaP1), como eu não estava conseguindo chamar o método principal no Dr.Java, eu troquei-o por outro nome "void médias() " e também funcionou.
Minhas perguntas são:
Qual é a exata função deste método "public static void main(String [] args)" e como eu faço para chamá-lo no Dr.Java ?
Obrigado.
Duas observações:
1) No seu trecho de programa bastaria alocar o array, isto é:
String carros = new String[5]; pois você lê os carros pelo teclado
2) o public static void main serve para permitir que o programa
seja chamado fora do DrJava, por exemplo: java OrdenaCarros.
O main pode ser chamado de dentro do DrJava através da tecla f2.
Alfredo
Olá,
Professor, não esqueça de adiar a sub, e se for possível o EP3 tb rs.
até mais.