Ir ao conteúdo
  • Cadastre-se

Função dentro de Função


vmso

Posts recomendados

Galera.. é o seguinte:

Comecei programação em C++ e estou totalmente perdido em alguns tópicos, dentre eles, função. É pra fazer um programa que apresente os 'n' primeiros números da sequência de Fibonacci.

O professor começou o programa lá assim:

int lerinteiro(int pmin);

void fibonacci (int pn, int *pv);

void exibevetor (int pn, int *pv);

int main (void)

{

int n, *pv;

n=lerinteiro(3);

pv=(int *) malloc (sizeof(int)*n);

}

e depois nos mandou desenvolve-lo. Logo continuei:

int lerinteiro (int pmin)

{

int n;

cout<<"Forneça um numero \n";

cin>>n;

}

void fibonacci (int pn, int *pv)

{

int cont2,cont=1,f,c=2,n;

pv[0]=1;

pv[1]=2;

for (cont2=3; cont2<n; cont2++)

{

f=cont+c;

cont=c;

c=f;

pv[cont2]=f;

}

}

void exibevetor (int pn,int *pv)

{ int cont,n;

for (cont=0;cont=n;cont++)

cout<< "V[" << cont << "]: " << pv[cont];

system("pause");

}

Ele compila, mas está com alguns erros de lógica que eu não estou conseguindo enxergar. E também não sei se a maneira que eu escrevi as funções está correta, não sei se da função lerinteiro eu tenho que chamar a função fibonacci e nem sei como fazer isso... alguém tem como me ajudar?

Link para o comentário
Compartilhar em outros sites

main() representa o programa. A execução começa no começo dela e termina no seu fim. Se algo não for chamado dentro de main(), ou dentro de uma função chamada por main(), não vai ser executado, não existe, que é o caso desse programa. A única coisa executada aí são: main() e lerinteiro(). fibonacci() e exibevetor() não serão executados.

Pra fazer algumas correções nesse programa eu precisaria dar uma verdadeira aula, então vou apenas passar algumas dicas:

-o *pv no fibonacci não é necessário. Você está passando uma array em branco para ser preenchida. Porque? É tão mais fácil criar essa matriz dentro da própria função fibonacci(). Assim a chamada seria fibonacci(6), por exemplo, para calcular os primeiros 6 termos. Acredito que seu professor ainda não ensinou escopo de variáveis, por isso fez desse jeito, mas já se prepare para melhorar isso no futuro. Por enquanto deixa assim.

-Os dois primeiros números de fibonacci são 1 e 1, e não 1 e 2, como está no programa.

-você pode resumir todo o calculo com pv[num]=pv[num-1]+pv[num-2], dentro do laço for.

-O laço for tem que começar com 2, e não 3. A contagem começa com pv[0], então o 3º elemento é pv[2].

-Depois de voltar do lerinteiro(), chame (dentro de main()), fibonacci(n, pv). Aí a função será executada.

Em forma de código seria mais ou menos:


int lerinteiro(int pmin);
void fibonacci (int pn, int *pv);
void exibevetor (int pn, int *pv);

int main (void){
int n, *pv;

n=lerinteiro(3);
pv=(int *) malloc (sizeof(int)*n);
fibonacci(n, pv);
}

### aí dentro de fibonacci

void fibonacci(int n, int*pv){
///o que você já fez (com as mudanças que disse)

exibevetor (n,pv);
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!