Exercícios Resolvidos de Ponteiros e funções

Ver Teoria

Enunciado

Escreva uma função que recebe como parâmetros um vetor de inteiros v , onúmero de elementos dele N e ponteiros para variáveis nas quais devem ser armazenados os valores m a x i m o e m i n i m o do vetor. Sua assinatura deve ser:

v o i d   m a x i m o M i n i m o ( i n t   * v ,   i n t   N ,   i n t   * m a x i m o ,   i n t   * m i n i m o ) ;

Passo 1

Aí beleza?! Vamos pra questão.

Essa é uma questão de função com passagem de parâmetros por ponteiro. A questão descreveu que quer uma função para encontrar os pontos máximos e mínimos de um vetor. O detalhe é que não vamos usar retorno, ao invés disso vamos receber o endereço de memória de duas variáveis que irão armazenar os máximo e mínimo.

Mas antes, vamos começar escrevendo o cabeçalho da questão.

Passo 2

Beleza. Vamos desenvolver a função m a x i m o M i n i m o , que de cara vamos escrever que nem a questão já deu pra gente.

O primeiro parâmetro é i n t * v que é uma passagem por ponteiro pra um inteiro. Mas você lembra que um vetor sem chaves é um ponteiro para a primeira posição?! Então, i n t * v é a mesma coisa que i n t   v [ ] , é um parâmetro que recebe um ponteiro de um vetor.

O segundo parâmetro é um inteiro passado por valor i n t   N que vai receber o tamanho do vetor.

O terceiro e quarto parâmetros i n t * m a x i m o ,   i n t * m i n i m o são dois inteiros recebidos por passagem por ponteiro. Aqui vamos passar o endereço de memória de dois inteiros para guardar o resultado de máximo e mínimo do vetor.

Então vamos desenvolver o conteúdo da função:

Primeiro, vamos acessar o conteúdo apontado por m a x i m o e m i n i m o e setar esses valores para a primeira posição do vetor. Isso é importante, pois a gente não sabe quais valores estão contidos nos endereços, então, inicializando o conteúdo dos endereços com v [ 0 ] vamos ter certeza que poderemos trabalhar com eles.

Seguindo em frente, agora temos que calcular qual é o valor máximo e mínimo existente no vetor. Pra isso vamos usar um loop f o r que inicia em zero e avança de um em um até atingir o tamanho do vetor.

Em cada iteração vamos comparar o valor atual do vetor v [ i ] , com o conteúdo dos endereços de memória apontados por m a x i m o e m i n i m o .

Se o conteúdo de m a x i m o for menor que o valor atual sendo testado, então vamos atualizar o conteúdo de m a x i m o com o valor atual.

Se o conteúdo de m i n i m o for maior que o valor atual sendo testado, então vamos atualizar o conteúdo de m i n i m o com o valor atual.

No código fica assim:

E prontinho! A função está concluída.

Passo 3

Agora vamos criar uma m a i n ( ) para testar o nosso código.

Primeiro, vamos criar um vetor chamado v e c preenchido com alguns valores que eu escolhi de forma aleatória.

Depois temos que criar uma variável inteira N que contém o tamanho do vetor, que nesse exemplo é 7 .

E também vamos precisar de duas variáveis m a x e m i n que vão ser as variáveis que vão guardar os resultados da função m a x i m o M i n i m o .

Em seguida, vamos executar a função m a x i m o M i n i m o . O detalhe é que a gente tem que lembrar é que o v e c , m a x e m i n devem ser passados através de endereços de memória, pois a função está utilizando passagem por ponteiro.

Para passar o endereço de um vetor v e c é só escrever o nome do vetor sem os colchetes. E para passar o endereço das variáveis inteiras m a x e m i n a gente usa o operador de endereço & .

Beleza. Então, depois de executar a função, a gente tem que ver o resultado! Pra isso, a gente vai imprimir as variáveis m a x e m i n usando o c o u t .

Rodando o programa a gente vai ter:

E é isso! Faça testes com vetores com valores e tamanhos diferentes, pra ter certeza que deu tudo certo! Até mais, pessoal!

Resposta