Ir ao conteúdo

Posts recomendados

Postado

Estou tentando fazem um programa básico em C que mistura as cores primarias. O problema é que o resultado sai errado, o programa sempre mostra o primeiro resultado das 3 respostas possível e junto o resultado correto.. Acredito que se passa de um erro de logica

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

int main() {

	char cor1[10], cor2[10];
	
	//escolha da primeira cor primeria 
	printf("Bem vindo ao sistema de mistura de cores primarias, selecione uma cor para continuar:\n");
	printf("\n vermelho");
	printf("\n verde");
	printf("\n azul\n");
	
	// ordena na variavel a string da esquerda para direita
	gets(cor1);
	
	system("cls");
	
	printf("Escolha a segunda cor:\n");
	printf("\n verde");
	printf("\n azul");
	printf("\n vermelho\n");
		
	gets(cor2);
	
	system("cls");

	if (strcmp (cor1,"vermelho") == 0) {
		
		if (strcmp (cor2,"verde") == 0); {
			printf("\na miscura deu AMARELO\n");

		} if (strcmp (cor2, "azul")==0) {
			printf("\na mistura deu ROSA\n");

		} if (strcmp (cor2,"vermelho")==0) {
			printf("\na mistura deu VERMELHO\n");
		}

	}if (strcmp (cor1,"verde") == 0)   {
		if (strcmp(cor2, "verde") == 0) ; {
			printf("\na miscura deu VERDE\n");

		} if (strcmp (cor2,"azul") == 0)  {
			printf("\na mistura deu CIANO");

		} if (strcmp (cor2,"vermelho") == 0) {
			printf("\na mistura deu AMARELO");
		}

	}if (strcmp (cor1,"azul") == 0) {
		if (strcmp (cor2,"verde") == 0); {
			printf("\na miscura deu CIANO\n");

		}if (strcmp(cor2,"vermelho") == 0) {
			printf("\na mistura deu ROSA");

		} if (strcmp (cor2,"azul") == 0) {
			printf("\na mistura deu AZUL");
		}
}
	
	system ("pause");
	return(0);

}

 

Postado

Olá!

 

Está um pouco difícil de ler assim. 

 

Bom que resolveu afinal.


Como resolveu, vou te mostrar duas outras maneiras que talvez ache mais simples de ler, e uma outra ideia para não ter que repetir o código sem necessidade quando acontecem as mesmas cores na orem inversa

 

Esse programa mostra isso na tela (mudei um pouco a impressão para ficar maios compacto)

Bem vindo...

Escolha a primeira cor:

vermelho, verde ou azul: verde

Escolha a segunda cor:

vermelho, verde ou azul: verde

Cores escolhidas: verde e verde
(Valor da cor final: 9)

 Na mistura deu VERDE

A ideia é bem simples: para ficar mais fácil de manipular, dar um valor para cada cor. Nada novo, porque os sistemas usam mesmo isso, valores entre 0 e 255 para representar cada cor. Só que gravam a cor no mesmo int, um byte para cada cor e um para a camada de transparência, acho que chamam em geral de formato RGBA. A gente não precisa disso. Vamos definir 2 para vermelho, 3 para verde e 5 para azul e fazer a conta usando multiplicação mesmo...

 

Eis nossa tabela, multiplicando as cores escolhidas

                       vermelho2    verde3     azul5
        vermelho2          4           6         10
        verde3                6           9         15
        azul5                10          15         25
 

Só isso. Eis o programa

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main(int argc, char** argv)
{
    char cor1[10];
    char cor2[10];
    int vermelho    = 2;
    int verde       = 3;
    int azul        = 5;
    int cor_final   = 1;    // aqui vai calcular o produto da mistura

    printf("\n\n\nBem vindo...\n");

    printf("\nEscolha a primeira cor:\n\n");
    printf("vermelho, verde ou azul: ");
    scanf("%s",cor1);

    printf("\nEscolha a segunda cor:\n\n");
    printf("vermelho, verde ou azul: ");
    scanf("%s", cor2);

    printf("\nCores escolhidas: %s e %s\n", cor1, cor2);

    // agora com as cores definidas a gente faz as contas
    // usando os valores de cada cor

    if (strcmp(cor1, "vermelho") == 0)
    {
        cor_final = cor_final * 2;
    }
    else
    {
        if (strcmp(cor1, "verde") == 0)
        {
            cor_final = cor_final * 3;
        }
        else
        {
            if (strcmp(cor1, "azul") == 0)
            {
                cor_final = cor_final * 5;
            }
            else
            {
                cor_final = cor_final * 7;
            }    // end if
        }    // end if
    }    // end if

    if (strcmp(cor2, "vermelho") == 0)
    {
        cor_final = cor_final * 2;
    }
    else
    {
        if (strcmp(cor2, "verde") == 0)
        {
            cor_final = cor_final * 3;
        }
        else
        {
            if (strcmp(cor2, "azul") == 0)
            {
                cor_final = cor_final * 5;
            }
            else
            {
                cor_final = cor_final * 11;
            }    // end if
        }    // end if
    }    // end if

    printf("(Valor da cor final: %d)\n", cor_final);    // so para testar

    // agora em cor_final tem a mistura
    // com os pesos a gente sabe
    /*
                       vermelho2    verde3     azul5
        vermelho2          4           6         10
        verde3             6           9         15
        azul5             10          15         25
    */
    if (cor_final == 4)
    {
        printf("\n Na mistura deu VERMELHO\n");
        return 0;
    };    // end if
    if (cor_final == 6)
    {
        printf("\n Na mistura deu AMARELO\n");
        return 0;
    }    // end if
    if (cor_final == 9)
    {
        printf("\n Na mistura deu VERDE\n");
        return 0;
    }    // end if
    if (cor_final == 10)
    { 
        printf("\n Na mistura deu ROSA\n");
        return 0;
    }    // end if
    if (cor_final == 15)
    { 
        printf("\n Na mistura deu CIANO\n");
        return 0;
    }    // end if
    if (cor_final == 25)
    {
        printf("\n Na mistura deu AZUL\n");
        return 0;
    }    // end if
}    // end main()

Talvez ache mais simples de ler. Note que não há razão para usar um mihão de else quando sabe que já encontrou a solução...

 

Uma outra opção para o final, depois de ler a cor, seria usar o comando switch() ao invés dos if. O resultado é exatamente o mesmo. Veja como ficaria o código:

    
/*
			       vermelho2    verde3     azul5
		vermelho2          4           6         10
		verde3             6           9         15
		azul5             10          15         25
	*/
    switch( cor_final )
    {
    case 4:
        printf("\n Na mistura deu VERMELHO\n");
        break;
    case 6:
        printf("\n Na mistura deu AMARELO\n");
        break;
    case 9:
        printf("\n Na mistura deu VERDE\n");
        break;
    case 10:
        printf("\n Na mistura deu ROSA\n");
        break;
    case 15:
        printf("\n Na mistura deu CIANO\n");
        break;
    case 25:
        printf("\n Na mistura deu AZUL\n");
        break;
    default:
        printf("Erro na selecao: mistura era %d\n", cor_final);
    }    // end switch

Mais simples de ler, não?

 

 

 

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!