Ir ao conteúdo
  • Cadastre-se
danilo  mendes dos santos

C++ fibonacci erro conversão de int para *int

Recommended Posts

ta dando erro conversão de int para *int

 

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

using namespace std;


const int i = 10;
void def ();
int fib(int n)
{
    if(n==1 || n==2)
        return 1;
    else
        return fib(n-1) + fib(n-2);


}

void troca_valores(int *ptrx, int *ptry)
{
    int auxiliar;
    auxiliar = *ptrx;
    *ptrx = *ptry;
    *ptry = auxiliar;

    return;
}

int main (void )
{
    int valor;
    int a, b, auxiliar, i, n;
    printf ("1 Para FUNCAO SEM ARGUMENTO");
    printf ("\n2 Para PARAMETO POR VALOR");
    printf ("\n3 Para PARAMETRO POR REFERENCIA");
    printf ("\n4 Para PARAMETRO CONSTANTE");
    printf ("\n5 Para DEFAULT\n");

    scanf("%d", &valor);

    switch ( valor )
    {
    case 1 :
        system("cls");
        a = 0;
        b = 1;
        printf("Digite um numero: ");
        scanf("%d", &n);
        printf("Serie de Fibonacci:\n");
        printf("%d\n", b);
        for(i = 0; i < n; i++)
        {
            auxiliar = a + b;
            a = b;
            b = auxiliar;
            printf("%d\n", auxiliar);
        }
        break;

    case 2 :
        system("cls");
        printf("Digite a quantidade de termos da sequencia de Fibonacci: ");
        scanf("%d", &a);
        printf("\nA sequencia de Fibonacci e: \n");
        for(b=0; b<a; b++)
        {
            printf("%d ", fib(b+1));
            getch();
        }
        break;

    case 3 :
        system("cls");
        printf("Digite o primeiro valor: ");
        scanf("%d", &auxiliar, a);
        printf("Digite o segundo valor: ");
        scanf("%d", &auxiliar, b);
        printf("voce digitou os valores na seguinte ordem: %d e %d\n", a, b);
        troca_valores(&auxiliar, a, &auxiliar, b);
        printf("Os valores trocados sao: %d e %d\n", a, b);
        getch();


        break;

    case 4 :

        system("cls");
        int x;
        a = 1;
        b = 1;
        printf("1: 1 \n");
        for (x = 2; x <= i; x++)
        {
            printf(x,":",b);
            b = a + b;
            a = b - a;
        }
        getch();
        break;

    case 5 :
        system("cls");
        
        getch();
        break;


    default :
        printf ("Valor invalido!\n");
    }

    getch();
    return 0;
}


 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@danilo mendes dos santos Olá. Vamos por partes. Seu código tem uns bugs q seria interessante corrigir.

Para o case 1 (opção 1),  a sugestão q eu daria p imprimir a série de Fibonacci seria essa:

 

a = 1;
b = 0;
printf("Digite um numero: ");
scanf("%d", &n);

printf("Serie de Fibonacci:\n");
for(j = 0; j < n; j++)
{
    auxiliar = a + b;
    a = b;
    b = auxiliar;
    printf("%d\n", auxiliar);
}
       

É mais interessante do q ter q imprimir o 1º número da séria em separado como vem fazendo e depois imprimir o restante da série

 

Para o case 2 (opção 2) seria essa a sugestão:

 

printf("Digite a quantidade de termos da sequencia de Fibonacci: ");
scanf("%d", &a);
printf("\nA sequencia de Fibonacci e: \n");
for(b = 1 ; b <= a; b++)
{
    printf("%d ", fib(b));
    getch();
}

Já agora para o q parece ser o motivo desse tópico, pelo q entendi seria inverter os valores de a e b.

Então seria isso:

 

case 3:
    system("cls");
    printf("Digite o primeiro valor: ");
    scanf("%d", &a);
    
    printf("Digite o segundo valor: ");
    scanf("%d", &b);
    printf("voce digitou os valores na seguinte ordem: %d e %d\n", a, b);
    troca_valores(&a, &b);
    printf("Os valores trocados sao: %d e %d\n", a, b);
    getch();

Além disso tem a questão de você estar declarando uma constante global do tipo int e chamando ela de 'i'. Mas, em seguida, no main, você declara uma variável local do tipo int q tbém chama de 'i'. O ideal seria ajustar isso

Outra sugestão q daria para melhorar seu código seria colocar o menu e o switch tudo dentro de um do/while, para q não aconteça como vem acontecendo de selecionar um opção e daí, depois do resultado ser impresso, o programa acabar.

Com respeito a opção 4 que está no case 4 não consegui entender o q você quer fazer. Se puder explicar melhor agradeço

Mas se deu para ajuda com o q passei aqui ok! 

adicionado 12 minutos depois

Outro ponto q esqueci de comentar: A biblioteca <iostream> e o namespace std são do C++ e não do C

Só que a questão é q seu tópico é referente ao C++ e seu código todo é em C (!?)

Editado por giu_d
corrigir comentário

Compartilhar este post


Link para o post
Compartilhar em outros sites

@danilo mendes dos santos  Creio q agora entendi a questão da opção 4. Seria isso?

 

const int k = 15;

// ...

case 4 :
    system("cls");
    int x;
    int temp = 0;
    a = 1;
    b = 0;        
    for (x = 0; x < k; x++)
    {
        temp = a + b;
        a = b;
        b = temp;
        printf("%d : ", temp);
    }
    getch();
    break;

Modifiquei a sua constante dando o nome a ela de K e o valor que atribuí a ela foi de 15

Não sei se isso mesmo q você queria.

Obs: Faltou o break no bloco default

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×