maxmin

maxmin

por José Coelho de Pina -
Número de respostas: 0

Salve,

Se v é um vetor com n elementos então esses elementos são: v[0], v[1], ..., v[n-1].

Em C uma função devolve apenas um valor, que pode ser um estrutura (como no EP2), mas é apenas um valor.

Em C passagem o mecanismo de passagem de parâmetros é muito simples.
A passagem é sempre "por valor".
Para uma função alterar o valor de uma variável ela deve receber o endereço da variável (ponteiro para a variável).

/* 
   maxmin(n,v,*max,*min)

   Recebe um vetor de inteiros v[0..n-1] e devolve em *max o
   maior elemento do vetor e em *min o menor elemento.

   A funcao faz entre n-1 e 2(n-1) comparacoes entre elementos
   do vetor.

   Quando a funcao faz   n-1  comparacoes?
   Quando a funcao faz 2(n-1) comparacoes?
   
   Pre-condicao: a funcao supoe que o vetor tem pelo menos
      um elemento (n >= 1)
*/

void
maxmin(int n, int v[], int *max, int *min)
{
    if (n == 1)
    {
	*max = *min = v[0];
    }
    else 
    {
	maxmin(n-1, v, max, min); /* maximo e minimo de v[0..n-2] */
	if (v[n-1] > *max)
	{
	    *max = v[n-1];
	}    
	else if (v[n-1] < *min)
	{
	    *min = v[n-1];
	}
    }
}

/*-------------------------------------------------------------*/
/* Versao mais curta e grossa. Faz 2(n-1) comparacoes          */

void
maxmin(int n, int v[], int *max, int *min)
{
    if (n == 1)
    {
	*max = *min = v[0];
	return;
    }
    maxmin(n-1, v, max, min); /* maximo e minimo de v[0..n-2] */
    if (v[n-1] > *max)  *max = v[n-1];
    if (v[n-1] < *min)  *min = v[n-1];
}