aula 192

Encontrar o maior e o menor elemento de um vetor com ponteiros

Continuando nosso curso de programação com a linguagem C, talvez você já tenha sentido a necessidade de retornar mais de um valor em sua função. Contudo, como já vimos em nosso curso de programação, uma função retorna apenas um valor.

Porém, é possível resolver isso utilizando ponteiros. Na aula de hoje aprenderemos como criar um procedimento para encontrar o maior e o menor elemento de um vetor com ponteiros.

A ideia é bem simples. Ao invés de retornar os valores encontrados, iremos passar como parâmetro para o procedimento o endereço de duas variáveis inteiras, uma para receber o menor e outra para receber o maior elemento. Dessa forma, teremos os valores sem a necessidade de retorno. Assim, a assinatura do procedimento fica assim:

// assinatura do procedimento
void maiorMenor(int *vet, int tam, int *menor, int *maior)

Perceba que o procedimento precisa de quatro parâmetros: o endereço do vetor; o tamanho do vetor; e dois ponteiros para receber os valores procurados.

Como o conteúdo da região de memória apontada pelos ponteiros pode ter lixo de memória, vamos então atribuir o primeiro elemento do vetor às duas variáveis. Dessa forma a busca será feita a partir do segundo elemento do vetor.

    // o conteúdo dos ponteiros menor e maior é alterado para o primeiro elemento do vetor
    *menor = *vet;
    *maior = *vet;

Agora, precisamos percorrer o vetor a partir do índice 1 e, para cada elemento, comparar com o conteúdo apontado pelos ponteiros menor e maior e trocando quando for necessário.

    for(i = 1; i < tam; i++){
        if(*menor > *(vet + i))
            *menor = *(vet + i);
        if(*maior < *(vet + i))
            *maior = *(vet + i);
    }

Código completo em C

/*
            Aula 192: Exercício 1
    1) Escreva um procedimento que receba um vetor inteiro, seu tamanho e os endereços
    de duas variáveis inteiras, menor e maior, salve nestas variáveis o menor e o maior
    valor do vetor.

            Código escrito por Wagner Gaspar
            Maior de 2021
*/

void maiorMenor(int *vet, int tam, int *menor, int *maior){
    int i;
    *menor = *vet;
    *maior = *vet;
    for(i = 1; i < tam; i++){
        if(*menor > *(vet + i))
            *menor = *(vet + i);
        if(*maior < *(vet + i))
            *maior = *(vet + i);
    }
}

int main(){
    int menor, maior, v[10] = {45,89,69,23,14,75,2,45,100,58};

    printf("Menor: %d\tMaior: %d\n", menor, maior);
    maiorMenor(v, 10, &menor, &maior);
    printf("Menor: %d\tMaior: %d\n", menor, maior);

    return 0;
}

Deixe um comentário

18 − 1 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.