Ir ao conteúdo
  • Cadastre-se
Amanda Daldon Antunes

C Problema com comando IF na linguagem C

Recommended Posts

O problema é o seguinte: Preciso criar um programa em que eu insira 9 numeros, e eles DEVEM ser nessa ordem: 0,1,1,2,3,5,8,13,21, caso seja em ordem errada, o sistema deve parar e mostrar a mensagem: "A sequencia esta errada!", mas quando eu rodo o programa abaixo, se eu digitei 3 numeros errados, aparece a mensagem dizendo que está errado 3 vezes. Outra coisa, a mensagem "A sequencia e Fibonacci eh:" só deve ser mostrada quando eu digitar a sequencia correta, mas no programa abaixo ele mostra todas as vezes, mesmo a sequencia estando errada...

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char** argv)
{
    int a,b,c,d,e,f,g,h,i;
    printf("Escreva a sequencia dos numeros de Fibonacci: "); 
    scanf("%d %d %d %d %d %d %d %d %d", &a, &b, &c, &d, &e, &f, &g, &h, &i); 
    
    if (a!=0)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    if (b!=1)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    if (c!=1)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    if (d!=2)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    if (e!=3)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    if (f!=5)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    if (g!=8)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    if (h!=13)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    if (i!=21)
    {
    printf("A sequencia esta errada!");
    system("PAUSE");
    }
    else if (a==0, b==1, c==1, d==2, e==3, f==5, g==8, h==13, i==21)
    {
    printf("A sequencia de Fibonacci eh: %d %d %d %d %d %d %d %d %d \n", a, b, c, d, e, f, g, h, i); //O sistema imprimiu os 9 numeros digitados anteriormente
    }
    system("PAUSE");
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dica : toda vez que você repetir comandos muito parecidos, está na hora de usar um laço, seja while, ou for.


No caso, a dica é calcular o primeiro elemento da sequencia de fibo, comparar com o número digitado. Foi igual ? Avança. Foi diferente ? Buzina o cara.

Eis a sequencia

0,1,1,2,3,5,8,13,21

Então definimos que o corrente é 0 e o próximo é 1 (os dois primeiros números). Comparamos o input do usuário com o corrente, foi igual ? Sim, então calculamos o seguinte ao próximo = anterior + próximo
anterior = próximo

próximo = seguinte

repetimos o teste até o usuário errar. O programa fica bem menor e mais simples. Assim

Pode testá-lo aqui

https://repl.it/@bokomoko/Checa-Fibo


Eis o fonte
 

#include <stdio.h>
/*
este programa irá checar a entrada do usuário para ver se é igual a sequencia de fibonacci 
*/
int input(char mensagem[]){
  int entrada;
  printf("%s",mensagem);
  scanf("%d",&entrada);
  return entrada;
}
int main(void) {
  int anterior = 0, proximo = 1, seguinte, chute, n=0 ;
  while (1) { // vai ficar no loop para sempre 
     printf("Qual é o %d-ésimo número de fibonnaci. ",++n);
     chute = input("Qual é ele ? ");
     if (chute != anterior) {
       printf("Lamento mas você errou!\nPrograma terminado\n");
       break;
     }
     seguinte = anterior + proximo;
     anterior = proximo;
     proximo = seguinte;
  }
  return 0;
}

 

  • Curtir 1

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

×