(5) Implemente uma função template findMin que receba um vetor de qualquer tipo e seu tamanho e retorne o menor elemento.
(6) Escreva uma função genérica que recebe como parâmetro um vector de valores de qualquer tipo e retorna true se os elementos estiverem ordenados ou false, caso contrário. Na função main, faça a chamada da função para valores do tipo int, float e char.

Passo 1

Beleza, então o enunciado pede duas coisas bem de boa em C++ usando template:
  1. Uma função findMin que recebe um vetor genérico (array) e seu tamanho, e devolve o menor elemento.
  2. Uma função isSorted que recebe um std::vector genérico e retorna true se ele já estiver ordenado (do menor para o maior) ou false caso contrário.
    Conteúdo: templates em C++, laços de repetição, comparações (<), uso de std::vector e funções genéricas. Vamos precisar saber como declarar template<typename T>, como iterar em arrays/vetores e como usar operadores de comparação.

Passo 2

Implementando findMin:
  • A ideia é simples: suponha que o primeiro elemento seja o menor (min = vec[0]).
  • Depois percorre o restante do array com um for.
  • A cada passo, compara vec[i] < min; se for menor, atualiza min.
  • No fim, retorna min.
    Teoria: isso é um algoritmo de complexidade , porque faz uma única varredura de todos os elementos.
Código da função:
template<typename T>
T findMin(T vec[], int size) {
T min = vec[0]; // passo 1: inicializa
for (int i = 1; i < size; ++i) { // passo 2: percorre
if (vec[i] < min) { // passo 3: compara
min = vec[i]; // passo 4: atualiza
}
}
return min; // passo 5: devolve o menor
}

Passo 3

Implementando isSorted:
  • Queremos checar se cada par de elementos adjacentes está em ordem crescente.
  • Então usamos um for que começa em 1 e vai até v.size()-1.
  • Em cada iteração, se v[i] < v[i-1], já sabemos que não está ordenado e devolvemos false.
  • Se passar por todo o vetor sem achar inversão, devolve true.
    Teoria: mesmíssimo , pois para cada elemento, faz no máximo uma comparação com o anterior.
Código da função:
#include <vector>
template<typename T>
bool isSorted(const std::vector<T>& v) {
    for (size_t i = 1; i < v.size(); ++i) {
        if (v[i] < v[i-1]) {
            return false;   // encontrou par fora de ordem
        }
    }
    return true;            // passou em todas as comparações
}

Passo 4

Chamando as funções no main:
  • Vamos testar findMin num array de int, num de float e num de char.
  • E testar isSorted em vetores desses mesmos tipos.
  • Para imprimir, usamos std::cout.
  • Assim o aluno vê como o template serve pra qualquer tipo que suporte <.
Exemplo de main completo:
#include <iostream>
#include <vector>
// aqui entram findMin e isSorted

int main() {
    int vi[]    = { 5, 2, 8, 1, 9 };
    float vf[]  = { 3.2f, 1.1f, 4.8f, 2.0f };
    char vc[]   = { 'z', 'a', 'm', 'b' };

    std::cout << "Menor int: "   << findMin(vi, 5)    << "\n";
    std::cout << "Menor float: " << findMin(vf, 4)    << "\n";
    std::cout << "Menor char: "  << findMin(vc, 4)    << "\n\n";

    std::vector<int>    v1 = {1, 2, 3, 4, 5};
    std::vector<float>  v2 = {1.0f, 2.5f, 2.5f};
    std::vector<char>   v3 = {'a', 'b', 'c'};

    std::cout << "v1 ordenado? " << (isSorted(v1) ? "true" : "false") << "\n";
    std::cout << "v2 ordenado? " << (isSorted(v2) ? "true" : "false") << "\n";
    std::cout << "v3 ordenado? " << (isSorted(v3) ? "true" : "false") << "\n";

    return 0;
}

Resposta

#include <iostream>
#include <vector>
// Passo 2: findMin
template<typename T>
T findMin(T vec[], int size) {
    T min = vec[0];
    for (int i = 1; i < size; ++i) {
        if (vec[i] < min) {
            min = vec[i];
        }
    }
    return min;
}

// Passo 3: isSorted
template<typename T>
bool isSorted(const std::vector<T>& v) {
    for (size_t i = 1; i < v.size(); ++i) {
        if (v[i] < v[i-1]) {
            return false;
        }
    }
    return true;
}

int main() {
    int vi[]    = { 5, 2, 8, 1, 9 };
    float vf[]  = { 3.2f, 1.1f, 4.8f, 2.0f };
    char vc[]   = { 'z', 'a', 'm', 'b' };

    std::cout << "Menor int: "   << findMin(vi, 5)    << "\n";
    std::cout << "Menor float: " << findMin(vf, 4)    << "\n";
    std::cout << "Menor char: "  << findMin(vc, 4)    << "\n\n";

    std::vector<int>    v1 = {1, 2, 3, 4, 5};
    std::vector<float>  v2 = {1.0f, 2.5f, 2.5f};
    std::vector<char>   v3 = {'a', 'b', 'c'};

    std::cout << "v1 ordenado? " << (isSorted(v1) ? "true" : "false") << "\n";
    std::cout << "v2 ordenado? " << (isSorted(v2) ? "true" : "false") << "\n";
    std::cout << "v3 ordenado? " << (isSorted(v3) ? "true" : "false") << "\n";

    return 0;
}

Exercícios relacionados