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
Soluções para a tarefa
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");
}