Ir ao conteúdo

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


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

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
Postado

@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
Postado
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
  • Solução
Postado

@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  . ,

 

Postado

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

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...