Programação Progressiva

Fórum para dúvidas dos sites: Programação Progressiva, Java Progressivo, C Progressivo


Você não está conectado. Conecte-se ou registre-se

Ajuda - Tabela de resistores

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 Ajuda - Tabela de resistores em Seg Set 29, 2014 6:05 am

Opa, boa madrugada a todos! Laughing Laughing

Estou com um pequeno problema em um código que eu criei aqui, ele não está computando três definições que eu criei, abaixo estará o código e depois eu cito os problemas:

Código:
#include <stdio.h>

#define Preto 0
#define Marrom 1
#define Vermelho 2
#define Laranja 3
#define Amarelo 4
#define Verde 5
#define Azul 6
#define Violeta 7
#define Cinza 8
#define Branco 9

#define PretoX 1
#define MarromX 10
#define VermelhoX 100
#define LaranjaX 1000
#define AmareloX 10000
#define VerdeX 100000
#define AzulX 1000000
#define VioletaX 10000000
#define OuroX 0.1
#define PrataX 0.01

#define Ouro 5
#define Prata 10

int main()
{
int x1, x2, x3, x4, y1;
char sair;

   do
   {
      printf("DESCUBRA O VALOR DO SEU RESISTOR!!!!111ONZE!!!11\n");
      printf("0-Preto\n");
      printf("1-Marrom\n");
      printf("2-Vermelho\n");
      printf("3-Laranja\n");
      printf("4-Amarelo\n");
      printf("5-Verde\n");
      printf("6-Azul\n");
      printf("7-Violeta\n");
      printf("8-Cinza\n");
      printf("9-Branco\n");
      printf("10-Prata\n");
      printf("11-Ouro\n\n");
      printf("Qual o valor do seu resistor?");
   do
   {
      printf("\nPrimeira cor:");
      scanf("%d",&x1);
   if (x1==0)
   y1=(Preto*10);
   if (x1==1)
   y1=(Marrom*10);
   if (x1==2)
   y1=(Vermelho*10);
   if (x1==3)
   y1=(Laranja*10);
   if (x1==4)
   y1=(Amarelo*10);
   if (x1==5)
   y1=(Verde*10);
   if (x1==6)
   y1=(Azul*10);
   if (x1==7)
   y1=(Violeta*10);
   if (x1==8)
   y1=(Cinza*10);
   if (x1==9)
   y1=(Branco*10);

   }
while (x1!=0 && x1!=1 && x1!=2 && x1!=3 && x1!=4 && x1!=5 && x1!=6 && x1!=7 && x1!=8 && x1!=9);

   do
   {
      printf("\nSegunda cor:");
      scanf("%d",&x2);

   if (x2==0)
   y1=(y1+Preto);
   if (x2==1)
   y1=(y1+Marrom);
   if (x2==2)
   y1=(y1+Vermelho);
   if (x2==3)
   y1=(y1+Laranja);
   if (x2==4)
   y1=(y1+Amarelo);
   if (x2==5)
   y1=(y1+Verde);
   if (x2==6)
   y1=(y1+Azul);
   if (x2==7)
   y1=(y1+Violeta);
   if (x2==8)
   y1=(y1+Cinza);
   if (x2==9)
   y1=(y1+Branco);
   }

while (x2!=0 && x2!=1 && x2!=2 && x2!=3 && x2!=4 && x2!=5 && x2!=6 && x2!=7 && x2!=8 && x2!=9);

   do
   {
      printf("\nTerceira cor:");
      scanf("%d",&x3);
   if (x3==0)
   y1=(y1*PretoX);
   if (x3==1)
   y1=(y1*MarromX);
   if (x3==2)
   y1=(y1*VermelhoX);
   if (x3==3)
   y1=(y1*LaranjaX);
   if (x3==4)
   y1=(y1*AmareloX);
   if (x3==5)
   y1=(y1*VerdeX);
   if (x3==6)
   y1=(y1*AzulX);
   if (x3==7)
   y1=(y1*VioletaX);
   if (x3==10)
   y1=(y1*PrataX);
   if (x3==11)
   y1=(y1*OuroX);
   }

while (x3!=0 && x3!=1 && x3!=2 && x3!=3 && x3!=4 && x3!=5 && x3!=6 && x3!=7 && x3!=10 && x3!=11);

   do
   {
      printf("\nQuarta cor:");
      scanf("%d",&x4);
   if (x4==10)
   x4=Prata;
   if (x4==11)
   x4=Ouro;

   }

while (x4!=10 & x4!=11);

   if (y1<1000)
      printf("\nO valor desse resistor e %d Ohm(s)",y1);
   if (y1>1000 && y1<1000000)
   {
      y1=(y1/1000);
      printf("\nO valor desse resistor e %d KOhm(s)",y1);
   }
   if (y1>1000000 && y1<1000000000)
   {      
      y1=(y1/1000000);
      printf("\nO valor desse resistor e %d MOhm(s)",y1);
   }
   {
   printf ("\nEsse resistor tem a tolerancia de:  %d por cento para mais ou para menos", x4);
}
   printf("\n\n Deseja sair da aplicacao? S/N");
   scanf("%c",&sair);
   scanf("%c",&sair);
   system("cls");
}
while (sair!='s');

system("PAUSE");
return 0;
}

Beleza, na "segunda cor", a definição Vermelho e Verde (2 e 5, respectivamente) não informam os seus resultados e o meu código pula direto para a informação da resistência, que é outro item que eu estou com alguns problemas.
Na parte da quarta cor, a definição Ouro não está funcionando mas a definição Prata está normal, sendo que a mesmas são extremamente similares (só mudam os seus valores). Quando digito a definição do Ouro (11) o programa pede pra mim repetir a informação, como se eu tivesse digitado um valor não existente.

Qualquer coisa, se a explicação não ficou bem clara, podem pegar e compilar o código pra simular o erro, eu deixo tongue
Preciso muito entender o que está acontecendo, não é a primeira noite que eu perco fazendo esse maldito programa.

Valeu galera!

Ver perfil do usuário

2 Re: Ajuda - Tabela de resistores em Seg Set 29, 2014 5:38 pm

Funcionou direitinho, mas fiz umas observações em fragmentos do código, que gostei porém estão esquisitos; Estou aprendendo faz 1 mês e parabéns pelo código muito legal;
1# Obs.:
Código:

   do
   {
      printf("\nTerceira cor:");
      scanf("%d",&x3);
   if (x3==0)
   y1=(y1*PretoX);
   if (x3==1)
   y1=(y1*MarromX);
   if (x3==2)
   y1=(y1*VermelhoX);
   if (x3==3)
   y1=(y1*LaranjaX);
   if (x3==4)
   y1=(y1*AmareloX);
   if (x3==5)
   y1=(y1*VerdeX);
   if (x3==6)
   y1=(y1*AzulX);
   if (x3==7)
   y1=(y1*VioletaX);
   if (x3==10)
   y1=(y1*PrataX);/**<<< aqui acontece também o casting... */
   if (x3==11)
   y1=(y1*OuroX);/**<<< aqui acontece um fenômeno chamado casting (float to int) os valores decimais são ignorados no final. */
   }
2# Obs.:
Código:
  do
   {
      printf("\nQuarta cor:"); /**<<< Se apenas 10 ou 11 são opções validas isso deveria ser especificado. */
      scanf("%d",&x4);
   if (x4==10)
   x4=Prata;
   if (x4==11)
   x4=Ouro; /**<<< Retoma 5 que satisfaz a condição ser diferente de 10 && 11 (Loop novamente).  */

   }

while (x4!=10 & x4!=11);/**<<< Um operador binário errado, tem que ser X && Y e não X & Y ( & se repete (&&) ) */
    /**^ Tem mais, muito estranha essa condição, pois eu optar por qualquer valor que não seja 10 refaz o Loop, e sua intenção força o 10;...*/
Valeu study

Ver perfil do usuário

3 Re: Ajuda - Tabela de resistores em Ter Set 30, 2014 2:44 am

Bem, eu preciso de uma forma de resolver isso, mas valeu

Ver perfil do usuário

4 Re: Ajuda - Tabela de resistores em Ter Set 30, 2014 10:54 am

1#
substitua int y1;
por float ou double y1;



Ver perfil do usuário

5 Pequena observaçao em Ter Fev 24, 2015 7:12 pm

thiagotigrilo


Convidado
Ao invés de você usar este monte de 'IF' você poderia organizar um SWITCH, pra mim fica mais organizado, mas é só minha opiniao.
VLW, FLW.

Conteúdo patrocinado


Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum