1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Subprograma - exercicio

Discussão em 'Programação' iniciada por The Dark Night, 7 de Junho de 2012. (Respostas: 12; Visualizações: 1030)

    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?
     
  1. ASMor

    ASMor Folding Member

    fazes um ciclo ate n, e vais somando o resultado anterior ao total.

    Qualquer coisa assim

    total += anterior;
    anterior = total - anterior;
     
  2. dagas46

    dagas46 Power Member

    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
     
  3. 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...
     
  4. dagas46

    dagas46 Power Member

    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: 12 de Junho de 2012
  5. Teste e não rodou nada na tela do prompt dos.
    fica piscando apenas, eu queria testar, rodar ele.
     
  6. função não começaria com void?
     
  7. rocksparty

    rocksparty Power Member

    Ou começa com void ou com int.

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

    woodyy Power Member

    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.
     
  9. Não estou entendendo nada.
     
  10. dagas46

    dagas46 Power Member

    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...
     
  11. mauro1855

    mauro1855 I'm cool cuz I Fold

    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
     
  12. rocksparty

    rocksparty Power Member


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

Partilhar esta Página