Informática, perguntado por gugaguga2, 5 meses atrás

Fazer um programa que lê n números inteiros e informa se os números lidos estão

ou não em ordem crescente. n é informado pelo usuário e é um valor positivo e maior que 0. Caso a sequência

não esteja ordenada, o programa deverá interromper o processo de repetição no momento em que a sequência

deixar de ser ordenada. Além disso, o programa deverá encontrar o maior e o menor elemento da sequência e

imprimi-los na tela
linguagem c


lucasbazan: qual a linguagem?
gugaguga2: linguagem c

Soluções para a tarefa

Respondido por neochiai
0

Resposta:

Segue a listagem em linguagem C abaixo.

Explicação:

#include <stdio.h>

#include <stdlib.h>

#include <limits.h>

// Estrutura para conter os parâmetros de entrada e retorno da função

typedef struct {

   int ordenada; // Se a sequência está ordenada

   int ordenada_ate; // Índice até o qual a sequência está ordenada

   int menor; // Menor valor

   int maior; // Maior valor

} resposta_t;

resposta_t* verificar_sequencia(int *sequencia, int n) {

   resposta_t *resposta = (resposta_t*)malloc(sizeof(resposta_t));

   int ordenada = 1; // 0 = falso, 1 = verdadeiro

   int ordenada_ate = n-1;

   int menor = INT_MAX;

   int maior = INT_MIN;

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

       int num = *(sequencia+i);

       // se menor que o minimo

       if (num < menor) {

           menor = num;

       }

       // se maior que o maximo

       if (num > maior) {

           maior = num;

       }

       // Se item anterior menor que o atual, não está ordenada

       if (i > 0 && ordenada && *(sequencia+i) < *(sequencia+i-1)) {

           ordenada = 0;

           ordenada_ate = i-1; // Ordenada até =

       }

   }

   resposta->maior = maior;

   resposta->menor = menor;

   resposta->ordenada = ordenada;

   resposta->ordenada_ate = ordenada_ate;

   return resposta;

}

int main()

{

   int *sequencia;

   int n;

   printf("Digite n: ");

   scanf("%d", &n);

   sequencia = (int *)malloc(n);

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

       int num;

       printf("Digite um inteiro: ");

       scanf("%d", &num);

       *(sequencia+i) = num;

   }

   printf("Sequencia: ");

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

       printf("%d ", *(sequencia+i));

   }

   printf("\n");

   resposta_t *resposta = verificar_sequencia(sequencia, n);

   printf("Menor valor: %d\n", resposta->menor);

   printf("Maior valor: %d\n", resposta->maior);

   if (resposta->ordenada) {

       printf("Sequencia ordenada.\n");

   } else {

       printf("Sequencia nao ordenada.\n");

   }

   printf("Parte ordenada da sequencia: ");

   for (int i = 0; i <= resposta->ordenada_ate; i++) {

       printf("%d ", *(sequencia+i));

   }

   printf("\n");

}

Perguntas interessantes