Depois de determinar o que o programa do Exercício 5.43 faz, modifique-o para que funcione devidamente depois de removida a restrição que estabelece que o segundo argumento não pode ser negativo.
Passo 1
Fala Galera!!! Tudo certo? Espero que sim!!! Bora para mais um exercício.
Para começar, vamos relembrar o que o programa do exercício faz:

A função mystery recebe como parâmetros dois inteiros, int a e int b, em seguida tem uma condição caso o valor de b seja igual a 1, se for retornará o valor de a, caso contrário retorna uma recursão da função, retornando a + mystery (a, b -1). Podemos concluir que a função imita uma multiplicação ao somar a, b vezes.
Passo 2
O exercício pede para modificar a função para que ela consiga realizar os cálculos sem nenhum erro caso o segundo argumento seja negativo. Para fazer essa modificação é bem simples, podemos colocar uma condição if dentro da função, da seguinte forma:
if ( ( a
a *= -1;
b *= -1;
Ou seja, se a e b ou apenas b forem negativos, vamos multiplicar o valor de a e b por -1 para tornar os valores positivos. A função modificada será:
int mystery( int a, int b ){
/* caso básico */
/* se a e b ou apenas b forem negativos */
if ( ( a
a *= -1;/* multiplicar a e b por -1 para tornar positivo */
b *= -1;
}
if ( b == 1 ){
return a;
}/* fim do if */
else { /* etapa recursiva */
return a + mystery( a, b - 1 );
} /* fim do else */
} /* fim da função mystery */
Passo 3
Desta forma, a nossa função mystery() está modificada para receber os valores negativos e realizar o tratamento. O próximo passo, é chamar a função dentro do main():
#include
int mystery( int a, int b ); /* protótipo de função */
int main( void ){
int x; /* primeiro inteiro */
int y; /* primeiro inteiro */
printf( "Digite dois inteiros: " );
scanf( "%d%d", &x, &y );
printf( "O resultado %d\n", mystery( x, y ) );
return 0; /* indica conclusão bem--sucedida */
}
E assim finalizamos nosso exercício Galera!!! Até o próximo!!
Resposta
O programa final será:
