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; }