Ir ao conteúdo
  • Cadastre-se

Boko Moko

Membro Pleno
  • Posts

    149
  • Cadastrado em

  • Última visita

Tudo que Boko Moko postou

  1. eu faria um while dentro de um for o for variaria o divisor de 2 até a metade do número , a partir de 3, seria de 2 em 2, algo assim for (int divisor = 2 ; divisor < (numero/2) ; divisor += 1 + (divisor>2) ) Dentro desse faria um while. Enquanto o resto da divisão do número por divisor for 0, contaria um fator para aquele divisor. Isso teria que ficar num vetor de inteiros. Aqui caberia uma função para fazer isso. No fim do for, teríamos um vetor com os fatores e um contador de quantas vezes aquele fator compoe o número Consegue fazer ?
  2. A pegadinha aí é que essa estrutura tem DUAS listas encadeadas Uma lista encadeada é a óbvia, a lista de cores , uma apontando para outra. A cabeça da lista é apontada pela variável PRIM A outra lista encadeada é a lista de posições llivres, disponíveis. Uma posicao vazia aponta para outra vazia. A cabeça dessa lista é apontada pela variável DISP A lista de cores está assim PRIM aponta para Azul ... cor : Azul -> Vermelho -> Verde -> Amarelo -> fim posicao : 0 1 3 4 Quando removermos o Verde, a cor anterior ao Verde vai apontar para a cor seguinte ao Verde e a célula 3 vai entrar na fila de disposníveis. Eu a colocaria no início da fila de disponíveis, pois assim simplifica o algoritmo. (disponíveis acaba virando uma "pilha") Quando inserirmos o Roxo, colocamos ele na primeira célula disponível, fazendo os ajustes necessários nos apontadores, ou seja, o apontador que aponta para a célula disponível passaria a apontar para a célula seguinte a disponível. Já o último elemento da lista, o Amarelo, em vez de apontar para fim, apontaria para a célula em que Roxo foi alocado. Consegue fazer agora ? Se sua dúvida persistir, entre em contato que a gente faz a simulação
  3. Dica para o exercício 5 Nesse caso, para inverter a fila, basta desinfileirar cada elemento e empilhar na pilha até a fila ficar vazia. Depois é só desempilhar a pilha e enfileirar até a pilha ficar vazia. Sacou ? Dica para o exercício 6 Eu faria assim: criaria uma função que retorna 1 se a lista está em ordem e 0 caso contrário. Como funcionaria essa função ? Ela assume que a lista está ordenada, ou seja, seta uma variável qualquer como 1. Em seguida vai varrendo os elementos da lista até o penúltimo! Nessa varredura, compara o elemento corrente com o seguinte. Se o corrente for MAIOR que o seguinte, significa que a lista NAO está ordenada, retorna 0. Se chegar ao fim do laço, retorna 1, a lista tá ordenada de fato. Então testamos cada uma das listas usando essa função. Se uma das listas falhar ... dá uma buzinada. Nada feito. Se as listas passarem no teste, aí começa a brincadeira. criaria uma terceira lista vazia. Enquanto nao chegar ao fim das DUAS listas testaria um elemento da primeira lista se é menor ou igual ao elemento da segunda lista. Se for adiciono esse elemento da primeira lista a terceira lista e avançaria para o próximo elemento da primeira lista. Se nao for, adiciono o elemento da segunda lista a terceira lista e avançaria para o próximo elemento da segunda lista. aqui cabe um "truque". Criaria uma função pegaEmento(lista , posicao). Essa funcao retornaria o elemento da lista fornecida que está na posicao pedida. Só que ... se a posicao for MAIOR que o tamanho da lista ou seja, pegar um elemento após o "fim" da lista, a funcao retornaria um valor bem alto como 999999 (seis 9's) que indicaria que a lista "chegou ao fim". A vantagem é que ao comparar o elemento da outra lista com 999999 certamente ele será menor, promovendo-o a terceira lista automaticamente. Esse truque serve inclusive para detectar que as listas chegaram ao fim. Se as duas listas derem 999999 significa que as duas chegaram ao fim Que tal ? Consegue fazer a partir das dicas ? Se tiver dificuldade, me avise que eu ajudo.
  4. Já cogitou baixar e usar uma máquina virtual ? Facilita demais e é mais compatível. O da Oracle é gratuito "virtualbox". Você baixa esse sistema, cria quantos computadores quiser. Pode até criar uma rede de computadores virtuais que interagem com a sua rede real. É muuuuuito massa. Outra vantagem é que você pode salvar um computador virtual congelado. QUando você religá-lo ele está EXATAMENTE no ponto em que você deixou. Para dar boot nesse novo computador virtual você usa essa img que você tem aí
  5. O input 2 que vai para o 5 vai ter que ser analógico pois a entrada varia entre 1 e 5 volts. Isso vai requerer uma resolução de 3 bits, o que permitirá ter voltagens de 0 a 7. Se fossem apenas 2 bits, teria uma faixa de apenas 0 a 3 volts e aí não é suficiente para o seu caso. Comece um uma largura de pulso pre definida , sei lá 100 ... (chutei) Defina um passo de aumento , suponha 25. Esse valor indicará a velocidade com que a pressao da bomba é ajustada Quanto maior o valor do passo, mais rápido o sistema reage, porém, menos preciso ele será Quanto menor o valor do passo, mais lentamente o sistema vai reagir, porém, mais preciso ele será. O loop le o dado de pressão do input analógico a pressao é menor que 900 bar (ou seja, a tensão é menor que 3 volts?) aumente a largura do pulso em passo (largura = largura + passo) a pressao é maior que 1000 bar (ou seja, a tensão é maior que 3,5 volts?) diminua a largura do pulso em passo (largura = largura - passo) mande o sinal pwn para a porta de saída digital Consegue fazer a partir dessa dica ? Outra dica : o valores de iniciais de largura e de passo devem ser obtidos experimentalmente na vida real. A lógica pode ser simulada. Você tem o arduino para testar ? Vai precisar de um multímetro na porta de entrada e um na saída. O ideal seria um osciloscópio mas aí é demais né ?
  6. Esse exercício pode ser resolvido aritmeticamente. O que temos : duas populações A e B . A população de A vai crescer a uma "taxa" entre > 0% e < 10% ao ano. O exercício pede, quanto tempo A vai levar para ultrapassar a população de B. O crescimento populacional é uma progressão geométrica. Se fizermos a conta, calculamos direto quanto tempo vai levar. Basta calcular a soma dos n termos de uma PG de razão "taxa" para que a população de A seja maior que população de B. Só que a ideia do exercício não é essa. A ideia é fazer usando while Então como fazer ? Eis a dica: dentro de um while, aplique o crescimento de 1 ano a população de A. Como faz esse crescimento ? Como calcular o aumento da população de A a taxa de x% ??? É a mesma conta de "quanto é o novo salário após um aumento de x%", ou "quanto é o novo preço após um aumento de x%". Reflita sobre essa conta da época da escola. Bom, aí teste se após o crescimento aplicado a populaçào de A ficou igual ou maior a população de B. Enquanto não ficar maior ou igual, (ou seja enquanto a populacao A menor (<) que populacao B ) conte mais um ano e aplique de novo o crescimento, agora a população nova! Quando sair do enquanto, terá a quantidade de anos que sao necessários. Ficou claro agora ? Consegue fazer ? em Python fica muito bom.
  7. @vangodp Muito curioso. Consegui reproduzir a situação aqui. Contornei o problema usando long em vez de int/float e resolveu. Só posso creditar esse problema a um erro na rotina de ponto flutuante do compilador C.
  8. Se você está tendo dificuldade em compilar, recomendo instalar o Eclipse ou o Netbeams. São gratuitos e integrar o ambiente de edição e compilação, passando ao largo de problemas de configuração. De um modo geral, quando o comando javac não funciona no CMD é problema de falta de adição do diretório do java bin ao path. A instalação do Eclipse é uma forma de resolver isso. A outra é adicionar o diretório ao path na configuração de inicialização do seu computador (se estiver usando windows).
  9. Não entendi. Porque o código tem que ser escrito de uma certa forma ? E se você já tem o código pronto, qual é a dificuldade ?
  10. Os passos 3, 4 e 5 podem ser simplificados para c = (a > b);
  11. Primeira e importantíssima dica : Modularize. Crie funções que fazem os blocos do programa. Por exemplo. para cada case no switch, faça uma funçào. Isso facilita a manutenção e o entendimento do programa. Recomendo usar o arquivo em disco como uma coisa que você "salva". ASsim, uma rotina carrega os dados do arquivo em memória. Vale a pena usar uma estrutura como vetor para manipular os dados. Uma opção de "salvar" o arquivo com os dados. Isso facilita demais. Hoje em dia, computadores tem muita RAM então esse cadastro deve caber na RAM da maioria dos computadores. Dessa forma, o programa fica mais simples e rápido. Crie uma rotina para ler o arquivo e carregar um vetor de estruturas. Depois crie outra rotina que grava o vetor de estruturas. O programa vai funcionar todo manipulando os vetores.
  12. Facilitaria muito se você postasse a pergunta sobre Java no fórum de Java. Esse fórum aqui é de C,C++ e C# Enquanto isso, qual é a sua dificuldade em fazer a tarefa ?
  13. Dá uma olhada aqui https://repl.it/@bokomoko/lista-encadeada-duplamente
  14. Se multiplicar o mes por qualquer coisa maior que 31 e o ano por qualquer coisa maior que 365 essa forma vai funcionar.
  15. Quer um truque de programador para facilitar DEMAIS essa comparação de datas ? dia1, mes1, ano1 ... é maior ou menor que dia2, mes2, ano2 ? ë tudo inteiro certo ? então faz assim float wdata1 = (ano1 * 10000 + mes1 * 100 + dia1); float wdata2 = (ano2 * 10000 + mes2 * 100 + dia2); /*agora é só comparar, wdata1 com wdata2 Se for igual, datas iguais se wdata1 for maior que wdata2 então dia1,mes1,ano1 é uma data MAIOR que dia2, mes2, ano2. */ if (wdata1 == wdata2) { printf("as datas sao iguais\n") ; } else if (wdata1 > wdata2) { printf("a primeira data é mais recente que a segunda\n") ; } else { printf("a segunda data é mais recente que a primeira\n"); } Agora me explica que mágica é essa que funciona ? Dá uma olhada aqui https://repl.it/@bokomoko/comparar-datas-inteiras
  16. Esse problema acontece porque a pasta em que o Java foi instalado não está no "path" do seu sistema operacional. No prompt de comando digite PATH e dê enter. você verá que não tem o diretório/pasta do Java no path. Você tem duas alternativas aí: mudar para o diretório onde está o Java e editar os programas nesse diretório. Para mudar para o diretório, use o comando CD para saber onde está o javac (o java compiler) ... tente assim CD \ dir javac.exe /s vai aparecer o diretório onde o javac (o famoso java compiler) está instalado. Dê um CD para esse diretório O melhor mesmo é baixar de graça o Eclispe (ou o Netbeams). Editar com o sublime é massa, muito legal mesmo. Mas um IDE é muito mais produtivo. adicionado 1 minuto depois a outra alternativa é adicionar ao PATH do seu computador o diretório onde está o javac. Isso requer que você configure o seu sistema. Presumo que você esteja usando Windows. Se for Linux, o buraco é mais embaixo. OUtra dica. NO http://repl.it você pode escrever seus programas Java online, compila, edita, compartilha, sem instalar pn no seu computador. EXperimente.
  17. O dia das mães é o segundo domingo de maio. O dia dos pais é o segundo domingo de agosto. O truque aí então é calcular qual o dia da semana do primeiro dia de maio e então ajustar para dois domingos depois Suponha que você tem uma função que dada uma data, calcula o dia da semana daquela data. Existem vários algoritmos que fazem isso. Algumas linguagens inclusive já tem a função que dada uma data, retorna o número do dia da semana. Nesse fórum aqui, hoje mesmo, eu respondi uma pergunta a respeito disso. Pois bem, suponha que função retorna 1 para segunda, 2 para terça e assim por diante até o domingo que é 7. entào para qualquer maio que existiu, o dia 1 de maio caiu numa dia 1 de maio cai numa... -------------------> então o dia das mães cai no dia .... segunda = 1 .............................................. 14 (o primeiro domingo caiu no dia 7) terça = 2 .................................................... 13 (o primeiro domingo caiu no dia 6) quarta = 3................................................... 12 (o primeiro domingo caiu no dia 5) quinta = 4................................................... 11 (o primeiro domingo caiu no dia 4) sexta = 5..................................................... 10 (o primeiro domingo caiu no dia 3) sábado = 6.................................................. 9 (o primeiro domingo caiu no dia 2) domingo = 7.................................................8 (o primeiro domingo é o próprio dia 1) Então a fórmula é 15 - dia da semana do primeiro dia do mês Portanto a fórmula é só somar ao dia 1 de maio assim data( 1 , 5 , 2018) + 14 - diadasemana( data(1,5,2018) ) Em Java, como fica ? Bom, como vimos, o cálculo do dia da semana de uma data em Java retorna um número entre 1 (segunda) e 7 (domingo), Vamos usá-la aqui https://repl.it/@bokomoko/Calcula-dia-das-maes import java.time.LocalDate; class Main { public static LocalDate diaDasMães( int ano ) { LocalDate primeiroDeMaio = LocalDate.of(ano, 5, 1); int qdia = primeiroDeMaio.getDayOfWeek().getValue(); return ( primeiroDeMaio.plusDays(14-qdia)); }; /* programa principal vai calcular que dia cai o dia das mães num certo ano. */ public static void main(String[] args) { System.out.println("Lista de Datas dos dias da mães desde 2000"); System.out.println("Ano Data Dia da Semana"); for (int qual_ano = 2000;qual_ano<=2025;qual_ano++){ LocalDate dia = diaDasMães(qual_ano); System.out.println(qual_ano+" "+dia + " "+dia.getDayOfWeek()) ; } } }
  18. Veja só. A forma mais fácil de detectar esses erros de compilação é simplesmente ... mandar compilar. Baixe o Eclipse Oxygem java no seu computador e pratique. Escreva programas, compile, veja os erros, conserte, compile de novo, veja outros erros, conserte, compile de novo, veja os erros, conserte, até você pegar a manha. Programação se aprende com a prática. Os exercícios de 1 a 6 são resolvíveis por edição/compilação dos códigos fontes que foram fornecidos. Basta tacar o trecho do programa no IDE (Eclipse, Netbeams) e ele dá a dica do que tá errado. No exercício 1, o erro é que tá faltando ponto e vírgula. Compile que o compilador vai mostrar onde. No exercício 2, o erro é que tá faltando ponto e vírgula e está faltando também fechar e abrir as chaves {} corretamente. Analise e verá. Se você usar um Eclipse ou Netbeams, eles já detectam o erro durante a edição do programa, dando a dica da linha que tem o erro. Como ver isso funcionando ? Só praticando. No exercício 3, o erro é na hora de dar nome as variáveis. Quais são as variáveis que aparecem no programa ? Elas tem nomes válidos ? Analise. No exercício 4, o erro também tem a ver com o nome da variável. É uma pegadinha. A variável pode ter qualquer nome ? Ou tem palavras que não podem ser usadas como nomes de variáveis ? Analise. No exercício 5, o erro é ... num tem erro de compilação! Porém, o programa não faz nada. Porque ? Será que é um erro de lógica ? Ou tá faltando alguma coisa ? Preste atenção e verá o que está faltando. No exercício 6, o erro é ... algo que já vimos aqui nessa lista de exercícios, num exercício anterior. A partir do exercício 7 em diante a coisa fica mais interessante. No exercício 7, é o mais interessante. Antes de danar-se a fazer o programa, imagine que você tem as réguas de tomadas nas suas mãos e faça as contas de como cacula o número de tomadas disponíveis. Comece com uma régua com 2 tomadas. Depois pense em duas réguas com número de tomadas diferentes (todos maiores que 2 e menores que 6). Faça uma tabelinha , assim 2 réguas - régua1 ........ 2 tomadas .... 3 tomadas .....4 tomadas ... 5 tomadas ... 6 tomadas régua 2 . 2 tomadas . 3 tomadas . 4 tomadas........................... (2+4) ou (3+3) . 5 tomadas 6 tomadas resolvi para você o caso de 2 réguas, sendo que uma com 4 tomadas e outra com 3 tomadas. Consegue entender como faz a conta de quantas tomadas sobram ? Depois que entender como funciona com 2 réguas, expanda o raciocínio para 3 réguas e tende descobrir a lei de formação, a fórmula matemática que .. dada a quantidade de tomadas de cada régua, calcula o total de tomadas disponíveis, que é a quantidade de equipamentos que podem ser ligados, concorda ? Os exercícios 8 e 9 consistem na aplicação direta das fórmulas que aparecem nos enunciados. Tudo que você tem a fazer é escrever o programa e os comandos para obter os dados pedidos. No caso do exercício 8 é só obter os valores para as variáveis a, b e c do teclado, fazer a conta como o enunciado diz e exibir o resultado. Se ligue que tem que fazer um import no começo do programa para a função sqrt funcionar. O exercício 9 é mais fácil ainda pois o enunciado pede explicitamente que os valores das variáveis sejam atribuidos o início do programa. Chuta uns números para xnum1, xnum2 e xnum3 e taca a fórmula para fazer o cálculo. A mesma coisa aqui em termos de import. Tem que importar para poder fazer log funcionar. O Exercício 10 é só fazer o teste de mesa, acompanhar o código e ver o resultado. Se ler o código do programa com atenção vai entender o que o programa faz. O Exercício 11 é para fazer avaliação de expressões lógicas e depois seguir os ninhos de if's. Requer atenção. Na dúvida, taque o programa no Eclipse, rode ele e veja o resultado. O importante não é saber qual é o resultado mas como o programa chegou a tal resultado. A ideia desse exercício é que o aluno entenda como o programa funciona e o que ele faz. O Exercício 12 é uma variante do exercício 10. Imagine que em vez de votar em candidatos, você estaria votando em carros. É a mesma coisa .. Ou seja, a resposta do exercício 12 é a pergunta do exercício 10 (com algumas modificações) O Exercício 13 é super chato. Num tem graça nenhuma. Tem uma pegadinha que é a conversão de int para double no meio da expressão. Parece complicação mas é só obviedade. O Exercício 14 é um somatório dentro de um for que acontece ..... (quantas vezes? .. hein ?? hein ?? pense direitinho) O Exercício 15 é tão chato e sem graça quanto o 13 só que a pegadinha agora é na declaração das variáveis que já são double na hora de fazer a conta ... O Exercício 16 é uma variante mais interessante do exercício 14. Os exercícios 17 e 18 também, tudo muito parecido. Se fizer um, faz o outro facilmente. Num tem mistério. O Exercício 19 é só seguir o programa e monitorar os valores das variáveis. Chato. O Exercício 20 é a famosa série de Fibonacci. Acho que esse algoritmo, junto com o algoritmo para calcular fatorial de um inteiro, é o algoritmo mais usado em exercício de iniciação a programação. Pense em como você faria manualmente, anote os passos que você fez manualmente e tente fazer o programa reproduzindo esses passos. O exercício 21 é para testar se um número é primo. Dica, número primo é aquele que só é divisível por ele e por 1. Então faça um laço que começa com 2 e vai até a metade do número. Tente obter o resto da divisão do número informado por essa variável do laço. Se o resto for 0 (zero) significa que existe um divisor para aquele número, portanto ele não é primo. O exercício 22 , fazer a tabuada de um número. Se eu fosse você, não me limitaria aos 8 números que ele está pedindo no exercício. Faça para qualquer quantidade de números e irá impressionar o seu professor (além de aprender). Dica: cada tabuada é um laço for O exercício 23 resolve um problema que já foi mencionado aqui nesse post. Qual será ? O exercício 24 é uma pegadinha. Preste atenção nele. O que é que ele faz ? Dica, já foi mencionado aqui nesse post duas vezes. O exercício 25 é uma tiração de onda grande, trolagem grande mesmo que o seu professor fez com você Não fique com raiva dele, ok ? No fundo é engraçado O exercício 26 é o mais complicado de fazer porém a solução é simples. Só requer pensar um pouco no laço e no que vai dentro do laço. Por favor, me informe se você tentou fazer algum desses exercícios e teve dificuldade. Recomendo postar cada um deles separadamente. Outra pergunta: você quer aprender a resolver esses exercícios ou quer que alguém faça-os para você ? adicionado 1 minuto depois Eu morei em Manaus quando era garoto Gosto muito dessa sua terra.
  19. Outra forma mais simples é usar a classe LocalDate assim: import java.time.LocalDate; class Main { /* retorna a próxima data que cai num certo dia da semana */ /* parametros = uma data qualquer - a data base dia da semana - dia que se quer , 1 = segunda, 7 = domingo */ public static LocalDate proxDiaSem( LocalDate umaData, int diasemana) { int qdia = umaData.getDayOfWeek().getValue(); return umaData.plusDays(diasemana-qdia); } /* programa principal */ public static void main(String[] args) { /* crie a variável data com data desejada ... no caso, o primeiro dia do mês */ LocalDate minhaData = LocalDate.of(2018, 4, 1); /* primeiro de abril de 2018 */ System.out.println(proxDiaSem(minhaData,2)); /* quando é a próxima terça ? } }
  20. muito bom tava pensando aqui num jeito de me livrar do vetor. Parabens.
  21. A classe Calendar é bem poderosa e na maioria das vezes é um over kill. Funciona, mas é como usar uma bala de canhão para matar uma muriçoca. Uma forma de fazer o que você quer usando a classe Calendar é assim public Date enesimoDiaDaSemanaDoMes(int diaDaSemana, int mes , int ano , int qualSemana, TimeZone fusoHorario) { Calendar meuCalendario = Calendar.getInstance(); meuCalendario.setTimeZone(fusoHorario); meuCalendario.set(Calendar.DAY_OF_WEEK, diaDaSemana); meuCalendario.set(Calendar.WEEK_OF_MONTH, qualSemana); meuCalendario.set(Calendar.MONTH, mes); meuCalendario.set(Calendar.YEAR, ano); return meuCalendario.getTime(); } o uso seria algo assim quando = enesimoDiaDaSemanaDoMes( 0 , 3 , 2018, 1, Timezone.getTimeZone("Etc/GMT-3") ) ; 0 = dia da semana que se quer, no caso, 1=domingo, 2 = segunda, 2 = terça .... módulo 7 (sábado = 7 = 0 ) 3 = mês que se quer, no caso 0= janeiro, 1=fevereiro ... 3 portanto = abril ... módulo 12 (janeiro = 12 = 0 ) 2018 = ano 1 = qual semana ? então 1 = primeira, 2=segunda, 3 = terceira .. , no caso 1 = primeira semana você quer o segundo (2) domingo (1) do mês de junho (5) de 2018 .. então fica quando = enesimoDiaDaSemanaDoMes( 1 , 5 , 2018, 2, Timezone.getTimeZone("Etc/GMT-3") ) ; timezone = fuso horário. No Brasil normalmente é "Etc/GMT-3" porém isso pode precisar de ajustes se for em Manaus, no Acre. Além disso tem que ver se vai ter horário de verão ou não. Como aqui estamos calculando apenas dias, não faz muita diferença. Se você estiver trabalhando com horas, aí pode mudar o resultado. quer ver ele funcionando ? https://repl.it/@bokomoko/Classe-calendar-dia-da-semana
  22. O import java.util.Scanner foi usado no arquivo da classe usuario. Acontece que não é usado nessa classe. Melhor importá-lo no programa principal, na classe Exemplo1, onde de fato é usado. Dica, prefira dar as classes nomes com letras maiúsculas e variáveis (instancias) nomes com letras minúsculas. Afeta nada na lógica porém ajuda na documentação e manutenção futura do programa a ser feita por você mesmo ou por um coleguinha de trabalho. Outra dica. Quando usamos uma IDE que gera os setter/getter para nós. ela tende a escrever setter/getter para todos os atributos da classe. As vezes não é necessário. Por exemplo, setter de média a rigor não deveria atuar direto na média e sim calculá-la de acordo como "notas" que seriam fornecidas como parametros ou ... a partir dos atributos. No caso, como não tem atributo com as notas, acho que seria melhor usar passando parametros (mais de uma nota). Também não é um erro de programação, não está errado. É apenas uma recomendação de boa prática. Agora vamos depressa a questão do seu programa não compilar. No programa principal, observe como você usa o setNome() no primeiro exemplo usuario1.setNome("Lucas"); Depois você usa o setNome() uma segunda vez, mas com um formato diferente, observe ... usuario1.setNome() = scanf.nextLine(); Concorda que estão diferentes ? Então uma forma está correta e a outra está errada. Aqui o problema é que você não respeitou a sintaxe. A primeira forma é a forma correta de invocar um método, ou seja, objeto.metodo( parametros ); No caso o objeto é usuario1 o método é setNome(), que atribui um nome ao infeliz do usuário o parâmetro é "Lucas", que passará a ser o nome do coitado. A segunda forma está sintaticamente errada pois você está tentando atribuir ao método um valor. Métodos não são campos, não são variáveis. O máximo que se faz com um método é invocá-lo e passar um parâmetro para ele dentro dos parenteses. No caso, você quer dar ao usuário o nome que foi digitado. Então a forma correta seria usario1.setNome(scanf.nextLine()); Então como ficariam os outros ??? Pense um pouco. PS.: esse nome que você deu a instancia do teclado denuncia sua origem hein ?? scanf hein ?? Tö ligado ! Dá uma olhada nesse fonte aqui https://repl.it/@bokomoko/cadastro-de-usuarios
  23. Obrigado a você pela oportunidade de ajudá-la.
  24. OBservando o exercício 1 , seguem algumas dicas. Evite usar static em atributos e métodos. Para a maioria das situações, não precisa usar static. então a dica é, na dúvida, não declare como static. O fato de você declarar praticamente tudo como static demonstra que você ainda não domina esse conceito. Estude mais sobre ele ok ? Só use static se tiver um bom motivo para tornar alguma coisa static. No programa principal você não instanciou pessoa alguma. Recomendo criar uma nova pessoa. Verifique o método construtor da pessoa. O método para calcular IMC deve ser um método da classe pessoa e nao um método público. A ideia seria mais ou menos assim public class Pessoa { /* definicoes de atributos e métodos da classe pessoa ... que você já fez */ . . . /* adicione esse método aqui */ public float imc() { return this.peso / (this.altura * this.altura) ; } com a definição desse método assim, basta criar uma pessoa no programa principal Pessoa umCaraMagro = new Pessoa(); umCaraMagro.setNome("Gabrielzinho"); umCaraMagro.setPeso(60.0); umCaraMagro.setAltura(1.78); System.out.prinln("A pessoa "+umCaraMagro.getNome()+ " pesa "+umCaraMagro.getPeso()+ " e mede "+umCaraMagro.getAltura()+ " o que dá um IMC de "+umCaraMagro.imc() ) ; Quanto a idade, temos um dilema aí que você precisa resolver. É uma opção pessoal sua. Existem algumas alternativas e seu programa sugere pelo menos duas delas. O problema é que você ficou no meio. Ou usa uma forma ou usa a outra. Então vejamos: tem duas formas de você guardar a idade de uma pessoa. Ou você cria um atributo/campo com o idade da pessoa (que você fez) e registra a idade dela, ou ... você cria um campo data de nascimento (que você também fez) e CALCULA a idade da pessoa toda vez que quiser saber a idade dela. Existem vantagens e desvantagens em cada uma das abordagens. Se você cria um campo com a idade, basta ir ver o valor da idade nesse campo e tá resolvido. No caso o método getIdade(), que você já fez, resolve. Simples e prático. Só tem um problema ... e quando o tempo passar ? Qual será a idade da pessoa ? Alguma coisa tem que de ano em ano , em algum mês, num certo dia, mudar a idade da pessoa para idade + 1. Para tanto precisaríamos saber o mês e o dia em que a pessoa nasceu, além da idade. Ihhh, tá começando a complicar ... Se você cria um campo com a data de nascimento (ano, mês, dia) , fica mais fácil e prático calcular a idade. Basta criar um método chamado calcIdade() que em vez de simplesmente pegar o campo idade, calcula a idade baseando-se no ano, mês, dia de nascimento e o ano, mês, dia corrente. A vantagem desse método é que sempre se calcula a idade correta no momento em que se precisa fazer a conta. Não precisa ficar atualizando a idade o tempo todo. Só calcula quando precisa. Tem ideia de como fazer um método que dado o dia, mês, ano de nascimento e o dia, mês, ano atual calcula a idade de ume pessoa ? Ora, se tenho a data de nascimento (dia, mês, ano) de uma pessoa, não preciso ter um campo de idade da pessoa, concorda ? E para facilitar ainda mais, talvez seja melhor usar um campo para dia, outro para mês e outro para ano, em vez de uma string com a data de nascimento. Facilita ter os campos separados para fazer contas, calcular inclusive dias entre uma data e outra e até em que dia da semana uma data cai. Pense nisso. Outra dica. Dentro da classe, ao referenciar o próprio objeto, prefira usar o termo this em vez do nome da classe. Isso facilita a manutenção do programa no futuro. Não faz diferença na lógica porém é um hábito bom de se cultivar para quem pensa em seguir a carreira profissional de programador Java (que inclusive tem forte demanda de programadores bons). Por exemplo, você usa public void setNome(String nome) { Pessoa.nome = nome; } /* prefira usar assim */ public void setNome(String nome) { this.nome = nome; } Recomendo estudar mais a estrutura do programa Java. O fato de você ter declarado dos "mains" no mesmo fonte demonstra que esse ponto está meio fraco e precisa de mais exercício. Se me permite uma dica, use o http://repl.it para testar e compartilhar seus programas em Java. É gratuito e facilita. Não é tão bacana quanto o Eclipse e o Netbeams mas quebra um galhão. Outra dica, instale o teamviewer no seu computador. Assim, quando tiver uma dificuldade maior no seu código, você pode pedir para alguém dar uma olhada via teamviewer. Eu tenho dado dicas assim e agiliza um bocado. Essas são apenas observações quanto ao exercício 1. Portanto, outra dica. QUando tiver uma lista de exercícios, abra um tópico para cada exercício. Facilita ao ajudador responder e também facilita para você entender. adicionado 34 minutos depois Aqui você fez praticamente nada. Apenas declarou a classe com os atributos e novamente exagerou no uso de static. Pode tirar todos os static dai. Não é necessário Novamente você usou o nome da classe para referenciar-se a seus atributos. Prefira usar this. em vez do nome da classe. Esse seu comentário abaixo é preocupante ... Aqui você está misturando e confundindo os conceitos de classe com método. calculaMedia e calculaFinal são métodos e não classes . A classe "teste" na verdade é o programa principal, que você sequer tentou fazer. Precisa se esforçar mais aqui. Voltando ao método que calcula a média. Segundo o enunciado a média é ponderada entre 3 notas, 2 notas e um trabalho. Então a média seria 2.5* nota1 + 2.5*nota2 + 2*trabalho , tudo isso somado pela soma dos pesos que é 2.5+2.5+2 = 7 então ... consegue escrever o método agora ? Tente escrevê-lo e se tiver dificuldade me avise. Agora o método que calcula quanto o aluno precisa para a prova final. Esse cálculo precisa de duas informações que não temos: 1 - Qual é a média necessária para passar direto sem final ? 2 - Como calcula a nota com a final ? é ponderada ? Ou é uma média aritmética normal ? Pergunte ao seu professor e peça mas esclarecimentos. Por último, a classe de teste, que como disse, é o programa principal. Vou dar uma dica para você. Todos os exercícios vão precisar de uma classe de teste que é o programa principal. (exceto num lance aí que explico depois). Então as classes de teste devem ser assim /* este é um template de um programa Java*/ /* Este template serve para 99% dos casos dos exercícios de cursos de Java por aí*/ /* use-o como um modelo, por isso é chamado de template (template = modelo) */ /* primeiro coloque os imports */ import java.util.Scanner; /* para fazer leitura de dados no teclado */ import java.util.Random; /* para gerar números aleatórios, por exemplo */ Class Exercício_xxxxx { /* substitua xxxx pelo lista-número do exercicio. */ /* Este será o nome do arquivo .java (fonte) e do .jar (programa pronto para rodar) */ public static void main(String[] args) { /* declare os objetos e instancie-os */ /* no exemplo seria */ Alunos nerd = new Aluno() ; Alunos malandroQueNaoEstuda = new Aluno(); Alunos peixeDoProfessor = new Aluno(); /* carregue as variáveis com dados iniciais. as vezes vai ler do teclado, as vezes você vai atribuir direto */ /* lógica principal do programa */ } /* fim do main, o programa principal */ } /* fim da classe, o fonte do programa */ Como essa é a segunda resposta que dou para você tem algumas dicas que são específicas para esse exercício e tem algumas dicas que servem para qualquer exercício. Se precisar de mais esclarecimentos, não hesite em me contactar.
  25. primeiro crie uma matriz de booleanos com X linha e Y colunas. Essa matriz será O MAPA onde os veículos irão se movimentar. A linha 0 (zero) vai ficar "em cima", será o "norte". A coluna 0 vai ficar a esquerda, será o "oeste". Então quando o veículo anda para o norte, o número da linha diminui. Quando o veículo anda para o sul, o número da linha aumenta. Quando o veículo anda para o oeste, o número da coluna diminui, quando o veículo anda para o leste, o número da coluna aumenta. Sacou as coordenadas do MAPA ? Cada linha x coluna é um "espaço" que vamos chamar de pixel. Coloque TRUE nos lugares em que é possível o veículo ir e FALSE onde o veículo não pode ir. Isso definirá as "ruas", ou seja, o espaços contíguos onde os veículos podem trafegar. A fronteira TRUE->FALSE é a beira das ruas. Um bloco de pixesl juntos com FALSE pode ser um prédio, ou uma praça, ou um rio/lago onde os veículos não podem trafegar. Mais sobre isso adiante. Para cada objeto veículo deve ter um par de números lin, col que dirá a linha e a coluna em que o veículo se encontra. Vamos chamá-lo de "posicao" do veículo Crie um vetor ou lista de veículos e adicione a esse vetor os veículos que você for criando. Pelo vídeo, dá a entender que existem 3 classes de veículos : carros, caminhões e motos. Isso pode apontar para uma classe abstrata genérica veículo com alguns atributos : tamanho, velocidade, manobrabilidade. Por exemplo, um caminhão deve ter mais dificuldades para girar a esquerda/direita. Já uma moto não pode dar marcha a ré. Um carro pode ser mais veloz que um caminhão, já uma moto acelera mais rápido que um carro. Isso aqui são apenas ideias de como os objetos podem ter características diferentes portanto as sub-classes da classe genérica abstrata veículo terão atributos, métodos diferentes. Importe a classe de randomização import java.util.Random; Instancie um objeto da classe Random que será o gerador de números aleatórios assim Random geradorAleatório = new Random(); Quando precisar gerar um número aleatório faça assim: direcao = geradoroAleatório.nextInt(1000) % 8; Porque isso ? Ao acionar nextInt( valor) o método irá gerar um número aleatório entre 0 e valor-1. No caso, estamos usando 1000 ou seja, entre 0 e 999, em seguida tiramos o resto da divisão por 8. Isso vai dar um número entre 0 e 7. Essa fórmula pode ser sustituita pora direcao = geradorAleatório.nextInt(8) ; E porque queremos 8 ??? Porque são as 8 possíveis direções que o veículo pode ir. Pense da seguinte forma: No nosso MAPA mencionado anteriormente, pense que cada interseção de linha/coluna é um "espaço" que pode ser ocupado. Suponha um veículo pequeno, uma moto, que ocupa apenas um espaço (pixel). Ao redor desse espaço, existem outros 8 espaços que são as direções para as quais o veículo pode ir assim ___________ |___|___|___| |___|_X_|___| |___|___|___| Podemos numerá-las assim ___________ |_0_|_1_|_2_| |_3_|_X_|_4_| |_5_|_6_|_7_| então, ao aleatorizarmos de 0 a 7, estaremos dizendo em que direção o veículo deve ir. 0 -> o veículo vai para a diagonal superior esquerda, ou seja, a linha vai diminuir 1, a coluna diminui 1 1 -> o veículo vai para frente reto (norte), ou seja, a linha vai diminuir 1, a coluna vai ficar igual 2 -> o veículo vai para a diagonal superior direita, ou seja, a linha vai diminuir 1, a coluna vai aumentar 1 3 -> o veículo vai para a lateral esquerda (oeste), ou seja, a linha fica igual, a coluna diminui um 4 -> o veículo vai para a lateral direita (leste), ou seja, a linha fica igual, a coluna aumenta 1 5 -> o veículo vai para a diagonal inferior esquerda, ou seja, a linha aumenta 1, a coluna diminui 1 6 -> o veículo vai para a traz reto (sul), ou seja, a linha aumenta 1, a coluna fica igual 7 -> o veículo vai para a diagonal inferior direita, linha +1, coluna +1 Podemos fazer um vetor com essas modifiações (isso é álgebra linear aplicada) private int movimentos[][] = { { -1, -1} , { -1, 0} , { -1 , 1} , { 0, -1} , { 0, 1} , { 1, -1} , { 1,0} , { 1, 1} } ; Então um método chamado movaSe( int direcao) receberia um número entre 0 e 7 e aplicaria esse elemento do vetor a posição do veículo. Essa é em poucas palavras a essencia desse programa. Os detalhes agora são criar as classes. Recomendo criar a classe abstrata veículo com as seguintes caracteristicas abstract classe Veículos { private int linha; private int coluna; private String cor; boolean mexaSe( int direcao ) { // retorna TRUE se o veículo conseguiu se mexer, falso caso contrário private int praOnde[][] = {} ; private int novaLinha,novaColuna ; novaLinha = this.linha + praOnde[direcao][0] ; novaColuna = this.coluna + praOnde[direcao][1]; if ( mapa[novaLinha][novaColuna] ) { // espaço está ocupado return False; } else { // espaço está vazio ! vamos ocupá-lo this.linha = novaLinha; this.coluna = novaColuna; return True; } } /* outras definições da classe veículo podem ser feitas aqui */ } a casse moto extenderia a classe veículo e permitiria a criação de uma moto que se mexe rapidamente, ocupa só um pixel, por exemplo. Depois que você fizer uma moto se mexer aleatóriamente, tente mexer várias motos. Esse exercício está excelente e serve para praticar praticamente todos os conceitos de orientação a objetos e quem sabe até de multiprogramaçao !!! Imagine que cada veículo é um processo autonomo andando pelo mapa. Essas sao algumas dicas iniciais de como eu faria. Pode sofisticar mais, por exemplo, quando o veículo se mexe ele a rigor "desocupa" um espaço e ocupa outro, concorda ? Podemos até prever no programa a situação de detectar uma "colisão" em que um veículo bate no outro. Imagina, se um caminhão bate numa moto , destrói a moto, por exemplo ... adicionado 1 minuto depois Se precisar de mais dicas, pode entrar em contato ok ?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!