Informática, perguntado por Usuário anônimo, 5 meses atrás

Escreva um programa em Java que leia uma sequência N de números inteiros (negativos, positivos e o zero) para um vetor. No início do programa é solicitado ao usuário (pelo teclado) qual é a quantidade de elementos que serão lidos para o vetor e depois disso os números são lidos para o vetor.

Em seguida você deve implementar para cada um dos itens abaixo uma função:

a) Calcule e retorna o valor da maior diferença entre dois elementos distintos no vetor.

b) Verifica se o vetor está em ordem crescente, e retorna true caso esteja e false caso contrário.

Soluções para a tarefa

Respondido por MoisesCunha0
25

Observação: a resposta da "a)" está na função "maiorDiferenca", já a resposta da "b)" está na função "ordemCrescente".

Programa:

import java.util.Scanner;

public class MeuPrograma {

   public static void main(String[] args) {

       Scanner scanner = new Scanner(System.in);

       int N = scanner.nextInt();

       if (N > 0) {

           int[] vetor = new int[N];

           for (int i = 0; i < N; i++) {

               vetor[i] = scanner.nextInt();

           }

           System.out.println();

           System.out.println(maiorDiferenca(vetor));

           System.out.println(ordemCrescente(vetor));

       }

   }

   public static int maiorDiferenca(int vetor[]) {

       int maior, segundoMaior;

       maior = vetor[0];

       segundoMaior = maior;

       for (int i = 1; i < vetor.length; i++) {

           if (vetor[i] > maior) {

               segundoMaior = maior;

               maior = vetor[i];

           } else if (vetor[i] > segundoMaior && vetor[i] != maior) {

               segundoMaior = vetor[i];

           }

       }

       if (maior == segundoMaior) {

           return 0;

       }

       return maior - segundoMaior;

   }

   public static boolean ordemCrescente(int vetor[]) {

       for (int i = 1; i < vetor.length; i++) {

           if (vetor[i] < vetor[i - 1]) {

               return false;

           }

       }

       return true;

   }

}


eduhbg: Testei o código acima do nosso colega Moises e fiz um pequeno ajuste na função "maiorDiferenca", segue a alteração abaixo:
eduhbg: Me confundi, não fiz alteração. O código dele está excelente, obrigado!
MoisesCunha0: Eu li a alternativa errado HEHE
MoisesCunha0: public static int maiorDiferenca(int vetor[]) {
int maior = vetor[0], menor = vetor[0];
for (int i = 1; i < vetor.length; i++) {

if (vetor[i] > maior) {
maior = vetor[i];
}
if (vetor[i] < menor){
menor = vetor[i];
}
}
return maior - menor;
}
MoisesCunha0: A função maior diferença está correta agora :v
Respondido por eduhbg
5

Apenas para complementar a resposta do nosso colega Moises, que fez um excelente trabalho.

A funcao maiorDiferenca nao esta retornando a maior diferenca entre dois valores distintos.

Supomos que o vetor esta organizado e tem os seguintes elementos: 1, 2, 3, 4, 5. O maior valor da diferença de dois valores distintos seria 4, resultado de 5 - 1.

A funcao do nosso colega Moises esta pegando os dois maiores valores dentro do vetor e os subtraindo, o que imagino que nao condiz com o resultado esperado da questao A.

Alterei a funcao para retornar o valor correto, segue ela abaixo:

  public static int maiorDiferenca(int vetor[]) {

      int maior = 0;

      int index = 1;

       while (index < vetor.length){

           int contador = 0;

           while (contador < vetor.length){

               int novo_valor = vetor[index] - vetor[contador];

               if (novo_valor > maior){

                   maior = novo_valor;

               }

               contador++;

           }

           index++;

       }

       return maior;

  }


gurizikalha: pode mandar o código completo ja com a crrelçao por favor ?
MoisesCunha0: Mas essa função também está errada
MoisesCunha0: Eu tinha lido errado, mas a alternativa quer uma função que retorna a maior diferença, sendo a subtração do maior número e do menor número
MoisesCunha0: Fiz a função correta e coloquei nos comentários da minha resposta, não consigo mais editar :v
Perguntas interessantes