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