Pesquisar este blog

Livros Recomendados

quarta-feira, 17 de março de 2021

URI (BEECROWD) - 2630 - Escala de Cinza - Iniciante - C e C++

Solução para o problema Escala de Cinza sendo postada! Aproveitem!

Plataforma: URI (BEECROWD)

Problema2630

Enunciado:

Alguns algoritmos de processamento de imagem exigem um pré-processamento no qual é necessário transformar uma imagem colorida em uma imagem em tons de cinza. Esta conversão pode ser realizada de diversas maneiras, dependendo do resultado que se pretende obter.

Para preservar a percepção das cores básicas pelo olho humano, uma conversão apropriada seria tomar 30% da componente vermelha (R), 59% da componente verde (G) e 11% da componente azul (B). Em termos matemáticos,

P = 0, 30R + 0, 59G + 0, 11B

Outras abordagens possíveis seriam determinar o valor de P através da média aritmética das três componentes ou atribuir a P os valores da maior ou da menor entre as três componentes.

Dadas as componentes RGB de um pixel da imagem colorida, determine o valor do pixel P da imagem em tons de cinza correspondente, determinada a conversão a ser utilizada. Despreze a parte decimal do resultado, caso exista.

Linguagens: C e C++


Solução:

Usei bastante o operador ternário nesse exercício!

Outra coisa interessante foi o casting (coerção) de tipos, pois trabalhei com valores reais, mas precisei "forçá-los" a serem inteiros depois. Isso foi feito com (int).

Alguma dúvida nas soluções? Entre em contato!

Código em C:

#include <stdio.h>

int main() {
    
    int t, r, g, b, c = 0;
    char tipo[6];
    scanf("%d", &t);
    
    while (t--) {
        scanf("%s", &tipo);
        scanf("%d %d %d", &r, &g, &b);
        
        printf("Caso #%d: ", ++c);
        if (tipo[1] == 'i') {
            printf("%d\n", (r <= g && r <= b? r : (g <= r && g <= b? g : b)));
        }
        else if (tipo[1] == 'a') {
            printf("%d\n", (r >= g && r >= b? r : (g >= r && g >= b? g : b)));
        }
        else if (tipo[1] == 'e')
            printf("%d\n", (int) (r + g + b)/3);
        else
            printf("%d\n", (int) (.3 * r + .59 * g + .11 * b));
    }

    return 0;
}

Código em C++:

#include <iostream>

using namespace std;

int main() {
    
    int t, r, g, b, c = 0;
    char tipo[6];
    cin >> t;
    
    while (t--) {
        cin >> tipo;
        cin >> r >> g >> b;
        
        cout << "Caso #" << ++c << ": ";
        if (tipo[1] == 'i') {
            cout << (r <= g && r <= b? r : (g <= r && g <= b? g : b)) << endl;
        }
        else if (tipo[1] == 'a') {
            cout << (r >= g && r >= b? r : (g >= r && g >= b? g : b)) << endl;
        }
        else if (tipo[1] == 'e')
            cout << (int) (r + g + b)/3 << endl;
        else
        // 30R + 0, 59G + 0, 11B
            cout << (int) (.3 * r + .59 * g + .11 * b) << endl;
    }

    return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas