Ir ao conteúdo
  • Cadastre-se

C Preciso fazer um programa em C para converter o numero do resistor para a cor


Sanjey
Ir à solução Resolvido por devair1010,

Posts recomendados

Tenho que fazer o seguinte programa:

"Escreva um programa em C, onde será solicitado um valor numérico de um resistor em ohms
(Ω), o programa deverá imprimir na tela o valor e as cores correspondentes, por exemplo: Se
valor digitado for 1000 Ω, deverá ser impresso na tela, O valor da resistência de 1000 Ω, o qual
tem seu código de cor corresponde às cores: Marrom, Preto e Vermelho.
O programa deverá ficar rodando até que seja digitado o número ZERO (0) para sair, quando
for digitado Zero não deverá ser impresso na tela o valor do resistor ou código de cores.
No fim do programa, deverá ser impresso a quantidade total de resistores digitados e informar
a quantidade de resistores comerciais e não comerciais.
Na execução do código deverá ter mensagens orientativas como o usuário deve proceder.
Os valores de resistência são os valores comerciais, sendo os valores pretendidos para esse
trabalho os múltiplos de:
10, 12, 15, 17, 20, 22, 27, 30, 33, 47, 51, 56, 62, 68, 75, 82, 91.
Para os prefixos de Ω, KΩ, MΩ. Caso seja digitado um valor não comercial deverá ter uma
mensagem informativa e não imprimir o valor do resistor e os código de cores.
Na escrita do programa deverá utilizar funções com passagem parâmetros e retorno, sendo
critério de avaliação a não repetição códigos, por exemplo no exemplo 2 faixa1, faixa2 e mult,
poderão ser alterados para único switch case em uma função."

 

Eu já tenho o seguinte código:

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

int main()
{
    int faixa1, faixa2, mult;
    float resistor, div_r,comp;
    printf("Digite um valor de resistor comercial: ");
    scanf("%f",&resistor);
    printf("\nResistor= %.1f ohns\n",resistor);
    
    if(resistor> 1&& resistor<10)
    {
        faixa1=(int)resistor;
        resistor=resistor*10;
        div_r=(int)resistor/10;
        faixa2=(int)(resistor-(div_r*10));
        mult=-1;
    }
    
    if(resistor>=10 && resistor<100)
    {
        faixa1=(int)resistor/10;
        div_r=(int)resistor/10;
        faixa2=(int)(resistor-(div_r*10));
        mult=0;
    }
    
    if(resistor>=100 && resistor<1000)
    {
        resistor=resistor/10;
        faixa1=(int)resistor/10;
        div_r=(int)resistor/10;
        faixa2=(int)(resistor-(div_r*10));
        mult=1;
    }

    if(resistor>=1000 && resistor<10000)
    {
        resistor=resistor/100;
        faixa1=(int)resistor/10;
        div_r=(int)resistor/10;
        faixa2=(int)(resistor-(div_r*10));
        mult=2;
    }


    printf("F1=%d F2=%d M=%d",faixa1,faixa2,mult);

    printf("\nCodigo de cores ");

    
    switch (faixa1)
    {
        case -1:
            printf("Ouro");
            break;
        case 0:
            printf("Preto, ");
            break;
        case 1:
            printf("Marrom, ");
            break;
        case 2:
            printf("Vermelho, ");
            break;
        case 3:
            printf("Laranja, ");
            break;
        case 4:
            printf("Amarelo, ");
            break;
        case 5:
            printf("Verde, ");
            break;
        case 6:
            printf("Azul, ");
            break;
        case 7:
            printf("Violeta, ");
            break;
        case 8:
            printf("Cinza, ");
            break;
        case 9:
            printf("Bramco, ");
            break;
    }
    
    switch (faixa2)
    {
        case -1:
            printf("Ouro");
            break;
        case 0:
            printf("Preto, ");
            break;
        case 1:
            printf("Marrom, ");
            break;
        case 2:
            printf("Vermelho, ");
            break;
        case 3:
            printf("Laranja, ");
            break;
        case 4:
            printf("Amarelo, ");
            break;
        case 5:
            printf("Verde, ");
            break;
        case 6:
            printf("Azul, ");
            break;
        case 7:
            printf("Violeta, ");
            break;
        case 8:
            printf("Cinza, ");
            break;
        case 9:
            printf("Bramco, ");
            break;
    }
    
    switch (mult)
    {
        case -1:
            printf("Ouro");
            break;
        case 0:
            printf("Preto");
            break;
        case 1:
            printf("Marrom");
            break;
        case 2:
            printf("Vermelho");
            break;
        case 3:
            printf("Laranja");
            break;
        case 4:
            printf("Amarelo");
            break;
        case 5:
            printf("Verde");
            break;
        case 6:
            printf("Azul");
            break;
        case 7:
            printf("Violeta");
            break;
        case 8:
            printf("Cinza");
            break;
        case 9:
            printf("Bramco");
            break;
    }
    
}

 

E preciso ajustar os valores pra quando for em Kilo e Mega e o programa tem que ficar rodando até digitar o valor 0.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Sanjey    para detectar a cor de cada faixa do resistor , você pode usar um vetor contendo as cores , e de acordo com os números decidir qual cor será usada ,  e as outras opções que você precisa pede ser resolvidas com um código semelhante a esse . 

como nesse exemplo , onde verifica a cor da faixa se o valor for de zero até 999 :

#define _WIN32_WINNT 0x600 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
  char cor[][14] = {"preto","marrom","vermelho","laranja","amarelo","verde","azul","violeta","cinza","branco"};
  int i = 0;
  char val_resistor[15]; string da linguagem C
  printf("Digite um valor de resistor comercial: ");
  fgets(val_resistor , 14, stdin);                /// melhor usar string para ler val do resistor
  val_resistor[strlen(val_resistor) - 1 ] = 0;    /// removendo o "\n" newLine da string
  printf("Resistor -= %s ohms\n",val_resistor);   /// para escrevr essa string sem pular a linha
  for( i=0; i< strlen(val_resistor); i++)         /// loop com a qtd de faixas do resistor em questão
  {
    int flg = 0;                                  /// para corrigir o multiplicador
    if(i>1)flg=1;                                 /// 
     printf("Faixa%d ---= %s\n",i+1,cor[(int)val_resistor[i]-48+flg]);
  }
  return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

18 horas atrás, devair1010 disse:

@Sanjey    para detectar a cor de cada faixa do resistor , você pode usar um vetor contendo as cores , e de acordo com os números decidir qual cor será usada ,  e as outras opções que você precisa pede ser resolvidas com um código semelhante a esse . 

como nesse exemplo , onde verifica a cor da faixa se o valor for de zero até 999 :

#define _WIN32_WINNT 0x600 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
  char cor[][14] = {"preto","marrom","vermelho","laranja","amarelo","verde","azul","violeta","cinza","branco"};
  int i = 0;
  char val_resistor[15]; string da linguagem C
  printf("Digite um valor de resistor comercial: ");
  fgets(val_resistor , 14, stdin);                /// melhor usar string para ler val do resistor
  val_resistor[strlen(val_resistor) - 1 ] = 0;    /// removendo o "\n" newLine da string
  printf("Resistor -= %s ohms\n",val_resistor);   /// para escrevr essa string sem pular a linha
  for( i=0; i< strlen(val_resistor); i++)         /// loop com a qtd de faixas do resistor em questão
  {
    int flg = 0;                                  /// para corrigir o multiplicador
    if(i>1)flg=1;                                 /// 
     printf("Faixa%d ---= %s\n",i+1,cor[(int)val_resistor[i]-48+flg]);
  }
  return 0;
}

 

E como eu faria pra por isso num loop com uma condição? Eu ainda não entendo muito bem a programação em C. E desde já agradeço pela resposta!

  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Sanjey     creio que você pode usar um código semelhante a esse para determinar as cores das faixas ,

#define _WIN32_WINNT 0x600
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
int main()
{
  char cor[][14] = 
  {"preto"  ,"marrom" ,"vermelho",
   "laranja","amarelo","verde"   ,
   "azul"   ,"violeta","cinza"   ,
   "branco"
   };
  int mult = 0;
  int i    = 0;
  char val_resistor[15];
  printf("Digite um valor de resistor comercial: ");
  fgets(val_resistor , 14, stdin);                     /// melhor usar string para ler val do resistor
  val_resistor[strlen(val_resistor) - 1 ] = 0;         /// removendo o "\n" newLine da string
  printf("Resistor de %s ohms\n",val_resistor);        /// para escrever essa string sem pular a linha
  for( i=0; i< strlen(val_resistor); i++)              /// loop percorre as posições da string
  {
    if( i>1 && val_resistor[i] == '0' )                /// incrementa o multiplicador conforme a qtd de zero no valor
      mult++;
    else  
      printf("Faixa%d ---= %s\n",i+1,cor[(int)val_resistor[i]-48]); /// digit numeric vai de 48 até 57
  }
  printf("Faixa3 ---= %s\n",cor[mult] );
  return 0;
}

e o restante do enunciado , ainda vai precisar de mais algumas linhas de códigos  . ,

 

Link para o comentário
Compartilhar em outros sites

Imagino que tenha uma tabela como essa

image.png.3d29db175976144676acbe2f272b3e26.png

 

Seu programa não está bom. Não ajudou muito copiar aquele switch enorme 3 vezes para um valor que é constante. E copiar "bramco"com a grafia errada 3X.

 

Porque seu programa iria avaliar 3 vezes a mesma coisa sendo que ela é constante???????

 

Vai perder muita nota por isso. E nem faz sentido afinal.

 

Compare com isso:

 

    const char* cor[] = {
        "Preto",
        "Marrom"
        "Vermelho",
        "Laranja",
        "Amarelo",
        "Verde",
        "Azul",
        "Violeta",
        "Cinza",
        "Branco"};

    const double tolerancia[] = {
        0.,1.,2.,0.,0.,0.5,0.25,0.1,0.05,0.,5.,10.,20.};

 

Então aqueles 2 primeiros switch() seriam apenas

 

    printf("Cores: [%s] [%s]\n", cor[faixa1], cor[faixa2]);

 

num programa complicado assim:

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

int main()
{
    const char* cor[] = {
        "Preto",
        "Marrom",
        "Vermelho",
        "Laranja",
        "Amarelo",
        "Verde",
        "Azul",
        "Violeta",
        "Cinza",
        "Branco"
    };

    const double tolerancia[] = {
        0.,1.,2.,0.,0.,0.5,0.25,0.1,0.05,0.,5.,10.,20.};

    int faixa1 = 2;
    int faixa2 = 3;
    printf("Cores: [%s] [%s]\n", cor[faixa1], cor[faixa2]);
    return 0;
}

 

Que mostra

 

Cores: [Vermelho] [Laranja]

 

 

Veja essa calculadora online em https://novaeletronica.com.br/ferramentas_online/cores-de-resistor-online.php

ou essa em https://br.mouser.com/technical-resources/conversion-calculators/resistor-color-code-calculator?gclid=Cj0KCQjw39uYBhCLARIsAD_SzMRALGEtpHuh1EJndUFeQmmlri2KpQBrBmjg1IvYjhZezaMf0IVGLU4aAj5DEALw_wcB

 

É o que tem que fazer.

 

É uma planilha. Pode só copiar os dados da figura no inicio e consultar no programa. É o simples: Pelas cores acessa o valor das faixas, soma. Aplica o multiplicador --- a outra faixa --- e calcula as tolerâncias, outra multiplicação. E mostra os valores.

O programa que tem que fazer não é o que descreveu no título, mas acho que sabe disso.

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!