Ir ao conteúdo

AdrianoSiqueira

Membro Pleno
  • Posts

    1.273
  • Cadastrado em

  • Última visita

Tudo que AdrianoSiqueira postou

  1. Todos são ou já foram iniciantes alguma vez, afinal, temos que começar de algum lugar. Às vezes lendo um código para um determinado problema ajuda a aprender alguma técnica que pode ser útil mais para frente. Hoje pode ser apenas uma cola, mas amanhã pode se deparar com um problema, cuja a resposta de hoje ajuda na solução. Isso se a pessoa, copia e estuda, agora se copia, cola e só entrega, aí não tem jeito...
  2. Usando loop e função, o resultado fica um tanto simples, como o @nickosoft disse, não tem como prever em qual jogada o resultado aparecerá. Uma possível abordagem poderia ser essa: #include <stdio.h> #include <stdlib.h> #include <time.h> int lancarDado(); int main() { int status = 0; // [ -1 ] Derrota | [ 0 ] Continuar | [ 1 ] Vitoria int jogada = 0; // Soma dos dados int ponto = 0; // Objetivo de vitoria (a partir da segunda jogada) srandom(time(NULL)); // Primeira rodada jogada = lancarDado() + lancarDado(); if (jogada == 7 || jogada == 11) { status = 1; } else if (jogada == 2 || jogada == 3 || jogada == 12) { status = -1; } else { status = 0; ponto = jogada; // Rodadas subsequentes while (status == 0) { jogada = lancarDado() + lancarDado(); if (jogada == ponto) { status = 1; } else if (jogada == 7) { status = -1; } } } if (status == -1) { printf(">> voce perdeu. \n"); } else { printf(">> voce venceu. \n"); } return EXIT_SUCCESS; } /** * Realiza a jogada de um dado. * * @return Um inteiro aleatorio entre 1 (inclusive) e 6 (inclusive). */ int lancarDado() { return (int) random() % 6 + 1; } Leia o código com calma, e atente-se principalmente ao loop dentro else.
  3. Isso foi discutido aqui.
  4. Esse tópico está sendo discutido aqui.
  5. Alguns problemas no código: Você sabe que todos os triângulos possuem 3 lados, certo? Pois bem, a classe Triangulo deveria saber isso também, bem como a classe Retangulo. Essa informação não deveria ser recebida pelo construtor uma vez que está implícita na própria essência da forma geométrica. Salvo a classe Poligono, pois ela é genérica e não tem como adivinhar, então ela tem que receber essa informação de alguma forma, que no caso foi via construtor. O atributo area deveria estar na classe Poligono, pois todos os polígonos possuem essa característica. Os laços de repetição na classe Principal estavam com uma lógica estranha, então substituí por um simples do-while. package geometria; public abstract class Poligono { private int lados; private double area; public Poligono() { this(0); } public Poligono(int lados) { this.lados = lados; this.area = 0.0; } public int getLados() { return lados; } public void setLados(int lados) { this.lados = lados; } public double getArea() { return area; } public void setArea(double area) { this.area = area; } public abstract void relatorio(); public abstract void calcularArea(); } package geometria; public class Retangulo extends Poligono { private double largura; private double altura; public Retangulo() { this(0.0, 0.0); } public Retangulo(double largura, double altura) { super(4); this.largura = largura; this.altura = altura; } public double getLargura() { return largura; } public void setLargura(double largura) { this.largura = largura; } public double getAltura() { return altura; } public void setAltura(double altura) { this.altura = altura; } @Override public void relatorio() { System.out.println("Forma: retângulo \n" + "Quantidade de lados: " + super.getLados() + "\n" + "Largura: " + this.getLargura() + "\n" + " Altura: " + this.getAltura() + "\n" + " Area: " + super.getArea()); } @Override public void calcularArea() { super.setArea(largura * altura); } } package geometria; public class Triangulo extends Poligono { private double base; private double altura; public Triangulo() { this(0.0, 0.0); } public Triangulo(double base, double altura) { super(3); this.base = base; this.altura = altura; } public double getBase() { return base; } public void setBase(double base) { this.base = base; } public double getAltura() { return altura; } public void setAltura(double altura) { this.altura = altura; } @Override public void relatorio() { System.out.println("Forma: triângulo \n" + "Quantidade de lados " + super.getLados() + "\n" + " Base: " + this.getBase() + "\n" + "Altura: " + this.getAltura() + "\n" + " Area: " + super.getArea()); } @Override public void calcularArea() { super.setArea(base * altura / 2); } } package geometria; import java.util.Scanner; public class Principal { public static void main(String[] args) { Scanner teclado = new Scanner(System.in); int lados; do { System.out.print("Digite o número de lados do polígono ou zero para encerrar: "); lados = teclado.nextInt(); teclado.nextLine(); if (lados == 0) { System.out.println("Aplicação encerrada!"); } else if (lados == 3) { Triangulo t = new Triangulo(); System.out.print(" Digite a base: "); t.setBase(teclado.nextDouble()); System.out.print("Digite a altura: "); t.setAltura(teclado.nextDouble()); t.calcularArea(); t.relatorio(); } else if (lados == 4) { Retangulo r = new Retangulo(); System.out.print("Digite a largura: "); r.setLargura(teclado.nextDouble()); System.out.print(" Digite a altura: "); r.setAltura(teclado.nextDouble()); r.calcularArea(); r.relatorio(); } else { System.out.println("Quantidade de lados inválida!"); } } while (lados != 0); System.exit(0); } }
  6. Eu cheguei nesse algoritmo: package aslib; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.regex.Pattern; public class ASLibTest { public static void main(String[] args) { File arquivoDesordenado = new File("arquivo.txt"); File arquivoOrdenado = new File("ordenado.txt"); int[] valores = lerDados(arquivoDesordenado); ordenar(valores); escreverDados(arquivoOrdenado, valores); } private static int[] lerDados(File arquivo) { Pattern pattern = Pattern.compile("\\d"); StringBuilder buffer = new StringBuilder(); String[] auxiliar; int[] resultado; try (BufferedReader reader = new BufferedReader(new FileReader(arquivo))) { String linha; /* * Lê os dados do arquivo adicionando apenas as linhas numéricas no * buffer (um número por linha). */ while ((linha = reader.readLine()) != null) { if (pattern.matcher(linha).matches()) { buffer.append(linha).append("\n"); } else { System.out.println("[ A ]: Ignorando linha corrompida: '" + linha + "'"); } } } catch (IOException e) { e.printStackTrace(); } /* * Passa os dados do buffer para um vetor auxiliar de strings, em * seguida passa para o vetor correto de int. */ auxiliar = buffer.toString().split("\n"); resultado = new int[auxiliar.length]; for (int i = 0; i < auxiliar.length; i++) { resultado[i] = Integer.parseInt(auxiliar[i]); } return resultado; } private static void escreverDados(File arquivo, int[] valores) { StringBuilder buffer = new StringBuilder(); for (int i : valores) { buffer.append(i).append("\n"); } try (BufferedWriter writer = new BufferedWriter(new FileWriter(arquivo))) { writer.write(buffer.toString()); } catch (IOException e) { e.printStackTrace(); } } private static void ordenar(int[] valores) { for (int i = 0; i < valores.length; i++) { for (int j = 0; j < valores.length - 1; j++) { if (valores[j] > valores[j + 1]) { int temp = valores[j]; valores[j] = valores[j + 1]; valores[j + 1] = temp; } } } } } Ficou um tanto longo, mas funciona.
  7. Métodos abstratos não podem ter corpo.
  8. @Helena Figma Tente isso: #include <iostream> using namespace std; FILE *abrir(const string &nome); void escrever(FILE *arquivo, const string &conteudo); int main() { FILE *arquivo = abrir(""); escrever(arquivo, "Ola mundo!"); return EXIT_SUCCESS; } FILE *abrir(const string &nome) { FILE *arquivo = fopen(nome.c_str(), "wb"); return arquivo; } void escrever(FILE *arquivo, const string &conteudo) { if (arquivo != nullptr) { fprintf(arquivo, "%s", conteudo.c_str()); } else { cerr << "[ E ]: O arquivo nao foi aberto. \n"; return; } }
  9. Uma possível abordagem poderia ser assim: package factory; public class Carro { private String marca; private String modelo; public Carro() { } public Carro(String marca, String modelo) { this.marca = marca; this.modelo = modelo; } public String getMarca() { return marca; } public void setMarca(String marca) { this.marca = marca; } public String getModelo() { return modelo; } public void setModelo(String modelo) { this.modelo = modelo; } @Override public String toString() { return "Carro{" + "modelo='" + modelo + '\'' + ", marca='" + marca + '\'' + '}'; } } package factory; public interface IFabrica { Carro fabricar(); } package factory; public class FabricaFiat implements IFabrica { @Override public Carro fabricar() { return new Carro("Fiat", "Palio"); } } package factory; public class FabricaVW implements IFabrica { @Override public Carro fabricar() { return new Carro("VW", "Gol"); } } package factory; public class FactoryTest { public static void main(String[] args) { IFabrica fiat = new FabricaFiat(); IFabrica vw = new FabricaVW(); Carro c1 = fiat.fabricar(); Carro c2 = vw.fabricar(); System.out.println("c1 = " + c1); System.out.println("c2 = " + c2); } }
  10. Se você tem dois alunos, precisa de duas médias, uma para cada aluno. Deveria ser algo mais ou menos assim: import java.util.Arrays; public class Principal { private static class Aluno { public String nome; public float[] notas; public float media; public Aluno(String nome, float... notas){ this.nome = nome; this.notas = notas; calcularMedia(); } public void calcularMedia(){ for(float f : notas) { this.media += f; } this.media /= notas.length; } @Override public String toString() { return "Aluno{" + "nome=" + nome + ", notas=" + Arrays.toString(notas) + ", media=" + media + "}"; } } public static void main(String[] args) { Aluno[] alunos = new Aluno[2]; alunos[0] = new Aluno("João", 6, 7); alunos[1] = new Aluno("Maria", 10, 10); for(Aluno a : alunos) { System.out.println(a); } } }
  11. Poderia testar se a primeira string é nula, porque caso for, o método equals irá lançar a exceção NullPointerException.
  12. Acho que é algo mais ou menos assim: package floresta; public class Floresta { private Arvore[] arvores; private Folhagem[] folhagens; private Lago[] lagos; private Ponte[] pontes; public Floresta() { arvores = new Arvore[]{ new Arvore("Castanha", 3), new Arvore("Macieira", 2) }; folhagens = new Folhagem[]{ new Folhagem("Trepadeira", "Verde claro"), new Folhagem("Musgo", "Verde escuro") }; lagos = new Lago[]{ new Lago(2, 3, 1), new Lago(5, 2, 3) }; pontes = new Ponte[]{ new Ponte(2, 5), new Ponte(1, 10) }; } public static void main(String[] args) { Floresta floresta = new Floresta(); } } class Arvore { public String especie; public double altura; public Arvore() { } public Arvore(String especie, double altura) { this.especie = especie; this.altura = altura; } } class Folhagem { public String especie; public String cor; public Folhagem() { } public Folhagem(String especie, String cor) { this.especie = especie; this.cor = cor; } } class Lago { public double largura; public double comprimento; public double profundidade; public Lago() { } public Lago(double largura, double comprimento, double profundidade) { this.largura = largura; this.comprimento = comprimento; this.profundidade = profundidade; } } class Ponte { public double largura; public double comprimento; public Ponte() { } public Ponte(double largura, double comprimento) { this.largura = largura; this.comprimento = comprimento; } } Daí, falta implementar o método de clonagem.
  13. Poderia dividir o programa com funções e substituir a matriz por um vetor de nove posições, acho que ficaria mais fácil assim.
  14. Eu cheguei nesse resultado: public class Calculo { public static void main(String[] args) { double x = 10; double h = h(x); double f = f(h); double g = g(x, f); double resultado = f + g; } private static double h(double x) { return (x * x) - 16; } private static double f(double h) { return (h >= 0) ? h : 1; } private static double g(double x, double f) { return (f == 0) ? (x * x) + 16 : 0; } }
  15. Pode usar um do-while também: #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(void) { char c = ' '; do { printf("voce aceita? [ S / N ]: "); scanf(" %c%*c", &c); c = toupper(c); } while(c != 'N' && c != 'S'); if (c == 'S') { printf("Aceito \n"); } else { printf("Recusado \n"); } return 0; }
  16. Não daria, pois a ROM não iria funcionar em outro celular que não aquele para o qual foi desenvolvido.
  17. Conhece outra pessoa que tem o mesmo celular que o seu? Se sim, tente pedir emprestado.
  18. Dê uma olhada aqui.
  19. Opa, beleza? Valeu pela resposta, mas eu já conheço o conceito de classes abstratas. O meu problema é com a referência de elementos não estáticos. Vou postar um código levemente diferente: package code; public abstract class Teste { public static final Teste IMPLEMENTACAO_1 = new Teste() { @Override public void executar() { teste1(); } }; public static final Teste IMPLEMENTACAO_2 = new Teste() { @Override public void executar() { teste2(); } }; public static final Teste IMPLEMENTACAO_3 = new Teste() { @Override public void executar() { // Non-static method 'teste3()' cannot be referenced from a static context teste3(); } }; public abstract void executar(); public void teste1() {} protected void teste2() {} private void teste3() {} } Na classe acima, a IMPLEMENTACAO_3 não irá compilar devido ao problema de referência estática. Porém todas as implementações possuem essencialmente o mesmo código, com a única diferença ficando por conta do modificador de acesso da função chamada. Nesse caso, apenas a função privada gera o erro de compilação. E eu queria saber por que.
  20. E aí pessoal, tudo bem? public abstract class Teste { public static final Teste IMPLEMENTACAO_1 = new Teste() { @Override public void funcao() { // Non-static method 'falarPrivado()' cannot be referenced from a static context falarPrivado(); } }; public static final Teste IMPLEMENTACAO_2 = new Teste() { @Override public void funcao() { falarPublico(); } }; public abstract void funcao(); private String falarPrivado() { return "Falando privado"; } public String falarPublico() { return "Falando publico"; } } A classe acima está acusando o famoso erro de compilação sobre "um elemento não estático não poder ser referenciado por um estático". Mas analisando as duas funções "falar", vemos que elas possuem exatamente o mesmo código, mudando apenas o modificador de acesso. A questão é que apenas a função privada lança o erro. Alguém poderia me explicar como o modificador de acesso influencia nisso? Tipo, por que só a função privada dá problema? No meu ponto de vista, ambas as funções deveriam lançar esse erro. Desde já agradeço.
  21. Eu usaria um vetor, depois ordenaria esse vetor e por último imprimiria: #include <stdio.h> #include <stdlib.h> void imprimirCrescente(int a, int b, int c); void imprimirDecrescente(int a, int b, int c); void ordenar(int* vetor, int tamanho); int main() { int a = 20; int b = 10; int c = 20; imprimirCrescente(a, b, c); imprimirDecrescente(a, b, c); return EXIT_SUCCESS; } void imprimirCrescente(int a, int b, int c){ int vetor[3] = {a, b, c}; ordenar(vetor, 3); printf(" Crescente: ["); for (int i = 0; i < 3; i++) { printf("%i", vetor[i]); if (i + 1 < 3) { printf(", "); } } printf("] \n"); } void imprimirDecrescente(int a, int b, int c){ int vetor[3] = {a, b, c}; ordenar(vetor, 3); printf("Decrescente: ["); for (int i = 2; i >= 0; i--) { printf("%i", vetor[i]); if (i > 0) { printf(", "); } } printf("] \n"); } void ordenar(int* vetor, int tamanho) { for (int i = 0; i < tamanho - 1; i++) { for (int j = i+1; j<tamanho;j++) { if (vetor[i] > vetor[j]){ int temp = vetor[i]; vetor[i] = vetor[j]; vetor[j] = temp; } } } } Uma solução feia, mas funcional.
  22. Tente instalar um programa qualquer e veja se ele funcionar normalmente. Outra coisa, poderia tentar uma restauração do sistema para uma data anterior ao problema.
  23. O ideal é ter provas... Quando ela estiver boa, faça um teste de velocidade. E quando você notar que está lenta, faça o teste de novo e compare os valores, se realmente houver discrepância, entre em contato com seu provedor e faça uma reclamação. Como seu provedor é da OI, provavelmente pode ser sobrecarga na rede. Esse problema acontece em que horário do dia? Essas empresas de telecomunicação não fazem os devidos investimentos em suas infraestruturas e quando muita gente usa ao mesmo tempo a rede arreia. Já cansei de ter esse tipo de problema com a Vivo, e só tive sossego quando mudei de provedor, contratei um que era especializado em internet, ou seja, somente internet, nada mais. Empresas desse tipo costumam prestar um serviço melhor, pois é a única "fonte de renda" dela, ao contrário da Oi, Claro, Vivo e etc, que se a internet estiver ruim, a empresa ganha dinheiro com telefone, celular, TV, etc...
  24. Aqui foi feito no Windows 7, mas o procedimento serve para todos. Youtube
  25. Não precisa de pendrive, é só abrir o gerenciador de discos do Windows e fazer por lá.

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