LuisFilipe Escreveu:Red_Beret Escreveu:Será isto que queres?
- Código: Seleccionar todos
#include <stdio.h>
int somador(int num){
static int total;
if(num==0){
return total;
}
else{
total=total+(3*num);
return somador(num-1);
}
}
void main(){
int numero;
printf("Numero?\n");
scanf("%d", &numero);
printf("%d\n", somador(numero));
}
Muito bem Red_Beret mas só uma achega
Não é pouco ortodoxo passar o total sem garantir que foi inicializado ?
A resposta a somador(0) será ? (Barraca ?)
Agora como evitar isso, visto que o total é static (que significa que mantem o valor após sair da função. Hummmmm
Pois o total tem de ser inicializado de alguma forma não é ?
vou pensar um pouco ...
.
Ya tens razão, esqueci-me disso. De qualquer das maneiras, é só por lá o "=0". A static só é inicializada a 1ª vez.
Fica assim
- Código: Seleccionar todos
#include <stdio.h>
int somador(int num){
static int total=0;
if(num==0){
return total;
}
else{
total=total+(3*num);
return somador(num-1);
}
}
void main(){
int numero;
printf("Numero?\n");
scanf("%d", &numero);
printf("%d\n", somador(numero));
}
Já agora, ele enviou-me uma MP com isto
Boas Red!
Antes de mais muito obrigado pelo teu tempo!
É mesmo isto q eu queria, mas com uma ressalva: ainda n dei o atributo "static" antes do "int"... E se tiro o static ou igualo a 0, n da certo.
O q posso fazer?
Muito obrigado,
tntnt
Acho que é só declarar o total como int, fora da função, não é? Pelo menos funciona..
Assim:
- Código: Seleccionar todos
#include <stdio.h>
int total=0;
int somador(int num){
if(num==0){
return total;
}
else{
total=total+(3*num);
return somador(num-1);
}
}
void main(){
int numero;
printf("Numero?\n");
scanf("%d", &numero);
printf("%d\n", somador(numero));
}
De qualquer das maneiras, acho que devias entregar uma versão com o static (até porque deve ser isso que o teu prof quer). Dizes que andaste a investigar, e que encontraste o static, que não é mais do que uma variavel que mantem o seu valor entre as várias chamadas da função (o int normal, quando voltas a chamar a função volta a reinicializar-se ao valor que lá está, neste caso 0 (a menos que o inicializes fora da função, como eu fiz))
Agora, o que devias fazer, era pegar neste código, estudá-lo, e tentar fazer o teu próprio programa (principalmente porque a sintaxe que vocês usam deve ser diferente desta sintaxe "Visual Studio" que eu usei)
Nota: tens de melhorar o main, visto que os printf's estão ranhosos, e convém que tenha lá uum if para detectar se poem nºs negativos (é que se passas um nº negativo para a função ela rebenta)