Dúvidas em geral

Dúvidas em geral

por Alfredo Goldman -
Número de respostas: 50
Neste fórum você deve tirar as dúvidas em geral 
Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por André Meneghelli -
   Esta é somente uma dica aos outros alunos. Sempre que tive que fazer algum programa, normalmente alguns tipos de informações sobre programação se encontram de forma dispersa pela internet. O que dificulta muito encontrar uma solução conveniente ao problema apresentado.
   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. maneiro
Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Diego Zuqueto -
uma dúvida, neste primeiro EP pode se utilizar de funções ou operadores lógicos que ainda não foram passados em sala de aula como <e> <ou> <not> ????
Em resposta à Diego Zuqueto

Re: Dúvidas em geral

por Alfredo Goldman -
Olás,
  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
Em resposta à Alfredo Goldman

Duvida sobre a geração de numeros aleatórios

por André Meneghelli -

   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.

Em resposta à André Meneghelli

Re: Duvida sobre a geração de numeros aleatórios

por Alfredo Goldman -
Oi André,
   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
Em resposta à Alfredo Goldman

Re: Duvida sobre a geração de numeros aleatórios

por André Meneghelli -

   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...

Em resposta à Alfredo Goldman

EP em dupla

por André Meneghelli -
   Se duas pessoas optarem por fazer um ep em dupla, é necessário que os dois entreguem o EP, ou apenas um da dupla e o cabeçalho contendo informações sobre os dois alunos???
Em resposta à André Meneghelli

Re: EP em dupla

por Alfredo Goldman -
Oi,
  Basta que um entregue, mas o cabeçalho deve conter (obrigatoriamente) infomações dos dois integrantes da equipe.

Alfredo
Em resposta à Alfredo Goldman

Outra dúvida sobre o EP

por André Meneghelli -
   Oi, pelo que entendi no enunciado, o jogo é vencido por aquele que tiver mais vitórias no desenrolar de uma partida de cinco jogos, estou certo??? Então a verificação de vitória não deveria ser para o primeiro que conseguir mais que dois pontos e não apenas dois pontos???
   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... mostrando a língua...
Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Elienos Pereira de Oliveira -
Bom, a minha duvida é a seguinte, onde a programação é usada na Física? 
Em resposta à Elienos Pereira de Oliveira

Re: Dúvidas em geral

por André Meneghelli -

   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.

Em resposta à Elienos Pereira de Oliveira

Re: Dúvidas em geral

por Alfredo Goldman -
Olás,
  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
Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Jair Pontes Pisani -

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.

Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Elienos Pereira de Oliveira -

Professor, se puder coloca o capitulo da proxima no site

até mais

Em resposta à Elienos Pereira de Oliveira

Re: Dúvidas em geral

por Thiago Silva Lisboa -

PROFESSOR: EU POSSO CRIAR UM OBJETO DE UMA CLASSE DENTRO DESTA MESMA CLASSE???

EXEMPLO:

CLASS TESTE

{

TESTE T = NEW TESTE();

......

}

Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Maiko Carvalho -

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!!!

Em resposta à Maiko Carvalho

Re: Dúvidas em geral

por Maiko Carvalho -

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...

Em resposta à Maiko Carvalho

Re: Dúvidas em geral

por Alfredo Goldman -
Oi Maiko,
  Modifiquei um pouco o seu código para que ele funcionasse.
Na prática não se esqueça dos efeitos da inflação sorriso

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;
  }
}
Em resposta à Maiko Carvalho

Re: Dúvidas em geral

por Maiko Carvalho -

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!

Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Maiko Carvalho -

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!

Em resposta à Maiko Carvalho

Re: Dúvidas em geral

por Maiko Carvalho -
Tá... Agora tá rodando... Mas os valores só batem no intervalo de 0 < x < 1.5708... Num tô intendendo...
Em resposta à Maiko Carvalho

Re: Dúvidas em geral

por Alfredo Goldman -
Olá,
  A priori as séries de taylor que ensinamos só funcionam para valores de ângulos
entre -1 e 1 em radianos....

Alfredo
Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Victor Cassini -

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.

Em resposta à Victor Cassini

Re: Dúvidas em geral

por Jair Pontes Pisani -

A nota dos EPs feitos em dupla será cadastrada nos dois usuários. Os dois receberam a mesma nota e os mesmos comentários.

Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Diego Zuqueto -
Professor a semana do dia 23 de maio é a semana que nao teremos aula de MAC sera que a entrega do EP nao poderia ser pra proxima semana, pois assim poderiamos usar as suas aulas que nao teriam pra fazer o EP.
Em resposta à Diego Zuqueto

Re: Dúvidas em geral

por Alfredo Goldman -
Oi,
  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
Em resposta à Alfredo Goldman

Segundo EP

por William Ananias -
No EP 2, para a fórmula do ln, criamos o seguinte código:

  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á!
Em resposta à William Ananias

Re: Segundo EP

por Elienos Pereira de Oliveira -
Se não me engano no enunciado do EP está escrito que essa fórmula funciona só quando |x| < 1.
Em resposta à Elienos Pereira de Oliveira

Re: Segundo EP

por Bruno Albuquerque -

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 =calculaFatorialNão/(calculaFatorial(k)*calculaFatorial(n-k));
      return resultado;
    }
  }
}

Em resposta à Bruno Albuquerque

Re: Segundo EP

por Diego Zuqueto -

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;
  }

Em resposta à Diego Zuqueto

Re: Segundo EP

por Bruno Albuquerque -

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 

Em resposta à Bruno Albuquerque

Re: Segundo EP

por Alfredo Goldman -
Oi,
  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
Em resposta à Alfredo Goldman

Dr Java: Debugger

por Ricardo Piovesan -
Alguém sabe como utilizar o DEBUGGER no Dr.Java? Depois de copilado um programa como posso visualizar os valores das variáveis passo a passo? Quando programo em c (copilador icc) é possível visualizar passo a passo os valores das variáveis através do DEBUGGER.
Em resposta à Alfredo Goldman

Dúvidas em geral

por Elienos Pereira de Oliveira -

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?

Em resposta à Elienos Pereira de Oliveira

Re: Dúvidas em geral

por André Meneghelli -
O problema é você ultrapassa o maior valor a ser atribuido a uma variavel do tipo int. O interessante é usar uma variavel double como parâmetro de entrada para este metodo. Ele ficaria assim:

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!!!
Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Thiago Silva Lisboa -

Olá

Alguém ainda está sem dula para fazer o 3º EP???

Esse vai ser muito difícil fazer sozinho!

Em resposta à Thiago Silva Lisboa

Re: Dúvidas em geral

por Bruno Albuquerque -

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.

Em resposta à Bruno Albuquerque

Re: Dúvidas em geral

por Alfredo Goldman -
Melhor um exemplo prático do que mil palavras sorriso


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
Em resposta à Alfredo Goldman

Re: Dúvidas em geral

por Bruno Albuquerque -
Muito obrigado, professor!
Em resposta à Bruno Albuquerque

Re: Dúvidas em geral

por José Eduardo Biasoto USP 1002074 -

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.

Em resposta à José Eduardo Biasoto USP 1002074

Re: Dúvidas em geral

por Alfredo Goldman -
Olá,
  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