Enunciado
Programação - Deitel &Deitel - Como programar em C- Ed: 6º - Capítulo 6.Exercícios - Ex. 17
O que o programa a seguir faz?
Passo 1
Fala Galera!! Bora para mais um exercício.
Vamos analisar o que está acontecendo nesse programa. Para facilitar nossa vida, vamos escrever ele no nosso compilador e ver qual será a resposta.
Fazendo isso a resposta gerada pelo programa é:
Hummm.... Certo, ajudou e não ajudou né rsrs!!!
Mas tranquilo, vamos ver o código então. Olhando de cara assim a alma do programa está dentro da função, se nós pegarmos qual a sacada dela o resto fica fácil.
Passo 2
Analisando a função whatIsThis():
/* O que essa função faz? */
int whatIsThis( const int b[], int p ){
/* caso básico */
if ( p == 1 ){
return b[ 0 ];
} /* fim do if */
else { /* etapa de recursão */
return b[ p - 1 ] + whatIsThis( b, p - 1 );
} /* fim do else */
} /* fim da função whatIsThis */
No if que faz o tratamento para o caso básico, sempre que o valor de p for igual 1 ela irá retornar o valor do elemento [0] do array.
E caso não for, o else, a função está fazendo uma recursividade, retornando o elemento b[ p -1] + whatIsThis( b, p - 1 );
Ou seja, para o array do programa int a[ SIZE ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
A função está pegando o elemento b[ p -1 ] que é o valor 10 + whatIsThis( b, p - 1 ) que será o valor 9.
Resumindo, a função está fazendo a soma dos valores dos elementos do array, começando pelo elemento 9 do array até o elemento 0.
Passo 3
Agora já matamos o que a função whatIsThis faz, ela soma recursivamente os elementos de a.
Olhando para a outra parte do código:
#include
#define SIZE 10
int whatIsThis( const int b[], int p ); /* protótipo de função */
/* função main inicia a execução do programa */
int main( void ){
int x; /* mantém valor de retorno da função whatIsThis */
/* inicializa array a */
int a[ SIZE ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
x = whatIsThis( a, SIZE );
printf( "Resultado e %d\n", x );
return 0; /* indica conclusão bem-sucedida */
} /* fim do main */
É definido uma array inteira com tamanho 10 e criada uma variável que recebe a chamada da função whatIsThis. A função tem como parâmetro o array e o programa imprime o resultado. O resultado é 55, que é justamente a soma dos elementos começando em [ 0 ] até [ 9 ]
Lembrando que o elementos é diferente do valor, ou seja, o elemento [ 0 ] possui valor 1, o [ 1 ] valor 2, e assim vai até o [ 9 ] com valor 10.
A soma fica: 10+9+8+7+6+5+4+3+2+1 = 55.
Finalizamos então nosso exercício GALERA!! Até o próximo.
Resposta
Ei, a resposta está no passo a passo :)