Subprograma - exercicio

  1. Faça uma função em C chamada fibo que, recebendo como parâmetro um número natural n, calcula e resulta um número natural que expressa o n[SUP]ézimo[/SUP] termo da seqüência de Fibonacci (considere que os termos serão numerados a partir de 0).
Seqüência de Fibonacci:
Número do Termo
0
1
2
3
4
5
6
7
8
9
10
...
Valor do Termo
1
1
2
3
5
8
13
21
34
55
89
...

Observe que os termos 0 e 1 são ambos iguais a 1 por definição e que todos os demais termos são dados pela soma dos dois anteriores.

alguém sabe a resolução?
 
fazes um ciclo ate n, e vais somando o resultado anterior ao total.

Qualquer coisa assim

total += anterior;
anterior = total - anterior;
 
Há várias pessoas que sabem a resolução, eu inclusive, mas não somos nós que estamos a ser avaliados. Tu é que tens que tentar fazer o exercício e se tiveres alguma dúvida então aí sim podemos dar um "empurrão". Resolver o exercício todo não
 
include <stdio.h>
int main() {
int i, penultimo, ultimo, termo, N;
scanf("%d", &N);
penultimo = 1;
ultimo = 1;
printf("\n%d\t%d", penultimo, ultimo);
for (i=2; i<=N; i++) {
termo = penultimo + ultimo;
printf("\t%d", termo);
penultimo = ultimo;
ultimo = termo;
}
return 0;
}

tentei isso, mas acho que nem é função isso...
 
Sabes o que é uma função?

Qual é o teu problema neste caso? O que é que achas que não consegues fazer?

Correste o programa?

O programa está praticamente correcto.

Não sei se foi erro a copiar para aqui ou não mas falta um # na 1ª linha.

O programa está a calcular os termos correctamente mas não deves imprimir sempre os termos anteriores. Só deves imprimir o N-ézimo termo, que é o introduzido pelo utilizador
 
Última edição:
Tens que fazer a funçao fibo, lê o enunciado.

Tens a main, vais buscar o número introduzido e deves dá-lo como parâmetro à função fibo que deverá retornar o valor desse n-ésimo termo e finalmente imprimes esse valor.
 
O que é que não estás a entender?

Pedem-te para fazer uma função fibo que devolve o n-ésimo termo. Logo, algures no teu código vais ter que ter essa função.

O que tu fizeste está praticamente correcto. Apenas tens de criar a função e na main recebes apenas o input do utilizador e depois passas o valor introduzido à função fibo que faz tudo o resto que está na main.

Atenção que o que tens de devovler é o n-ésimo termo e não o n-ésimo e todos os anteriores. Tens de corrigir isso também

Ou começa com void ou com int.

A função deve estar à espera do input... :confused:

void, int, float....tanta coisa...
 
Vamos lá ver se consigo explicar. O int main(), por exemplo, é uma função. Só que é a função principal do programa que estás a executar...

De qualquer forma, num programa podes ter várias funções. O printf() é uma função, o scanf() é uma função, só que essas funções estão definidas no stdio.h ou no stdlib.h cujo "include" tu fazes antes do código.

Aquilo que o exercício pede é para tu fazeres a tua própria função...

Isso significa que no teu código tens o main(), e tens ainda outra função, chamada fibo.
Uma função é declarada/feita de seguinte forma. Antes do main(), escreves:

[tipo de retorno] [nome da função]([argumento1], [argumento2], ...){


/*codigo da função*/

}

Tipo de retorno é aquilo que a função retorna, se é um inteiro, um float, ou pode até nem retornar nada (void)... Na prática uma função pode retornar uma infinidade de tipos diferentes, depende apenas da utilização.
argumentos é o que a função recebe para processar.

Por exemplo, "faça uma função que diga se o numero x é maior que o número y, e retorna 1 caso afirmativo ou zero caso negativo".
O código disto ficava assim:

Código:
int numero_maior(int x, int y){

  if(x > y) return 1;
  else return 0;

}

Outro exemplo, "Faça uma função que imprime hello world no ecrã". Repara que esta função só imprime, não retorna nada, logo:

Código:
void imprime(){
   printf("Hello World\n");
}


portanto, eles pedem uma função que receba a ordem do termo de fibonacci que procuras, e retorne o seu valor.
Logo:

Código:
int fibo(int ordem){

/*codigo*/
}

Tu fazes esta função, e depois no main chamas a função, e fazes da seguinte maneira:

Código:
int fibo(int ordem){


/*codigo*/

}

int main(){
  
  int valor, retorno;
  printf("Indique a ordem do termo de fibonacci: ");
  scanf("%d\n", &valor);

  retorno = fibo(valor);

  printf("O Termo de fibonacci pedido é %d\n", retorno);

  exit(0);

}

Espero que ajude a perceber como funcionam as funções.

Cumps
 
O que é que não estás a entender?

Pedem-te para fazer uma função fibo que devolve o n-ésimo termo. Logo, algures no teu código vais ter que ter essa função.

O que tu fizeste está praticamente correcto. Apenas tens de criar a função e na main recebes apenas o input do utilizador e depois passas o valor introduzido à função fibo que faz tudo o resto que está na main.

Atenção que o que tens de devovler é o n-ésimo termo e não o n-ésimo e todos os anteriores. Tens de corrigir isso também



void, int, float....tanta coisa...


Pois.. devolve o que o programador achar melhor...
 
Back
Topo