Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 3142. Mostrar todas as postagens
Mostrando postagens com marcador 3142. Mostrar todas as postagens

domingo, 27 de dezembro de 2020

URI - 3142 - Excel Bugado - Iniciante - C++

Plataforma: URI

Problema3142

Enunciado:
Enquanto o nosso aniversariante permutava balões, ele recebeu um e-mail de uma professora pedindo para enviar com urgência alguns dados estatísticos adicionais para incluir em relatório sobre um projeto do qual ele participa.

Prontamente o Tobias abriu a planilha do Excel onde os dados estavam salvos para fazer as contas necessárias e enviar o mais rápido possível os dados solicitados. Quanto antes ele terminar essa tarefa, mais tempo sobrará para ele aproveitar o dia do seu aniversário.

No Excel, cada coluna da planilha é indicada por letras. A primeira coluna é a letra “A”, a segunda coluna é a letra “B”, a terceira “C” e assim por diante até “Z”, onde a próxima coluna é “AA”. Depois vem “AB”, “AC”, “AD”, ..., até “AZ”. Daí vem “BA”, “BB”, “BC”, ..., e assim por diante até “ZZ”. Após vem “AAA”, “AAB”, ..., até chegar em “XFD” que é a última coluna da planilha. (Sim, existe uma última coluna! Desculpa destruir o sonho de quem achava que ela era infinita).

No Excel, existem ainda, fórmulas que realizam operações específicas e podem receber como parâmetros células da planilha. Uma dessas fórmulas é a =COL(), que se chamada sem parâmetros retorna a posição numérica da coluna em que ela foi chamada. Por exemplo, chamar a função =COL() em alguma linha qualquer da coluna “A” retornaria 1. Chamar na coluna “D” retornaria 4, na coluna “Z” retornaria 26, na coluna “AB” retornaria 28 e assim por diante.

Ao tentar realizar as operações necessárias para recuperar os dados solicitados, Tobias notou que a fórmula =COL() não estava funcionando.

Você consegue ajudá-lo a resolver esse problema escrevendo um algoritmo que dado o conjunto de letras que identifica a coluna retorne à posição numérica dela? Como ele está com um pouco de pressa em terminar isso, é possível que digite por engano algum código de coluna que não exista (fora do intervalo “A” – “XFD”), nesse caso você deve avisá-lo disso.

Linguagem: C++

Solução:

#include <iostream>
using namespace std;
int contaCaracteres(string coluna) {
    int contador = 0;
    while (coluna[contador++] != '\0');
    return contador-1;
}
int potencia(int base, int expoente) {
    int resposta = 1;
    while (expoente-- != 0)
        resposta *= base;
    return resposta;
}
int main() {
    string coluna;
    int resposta, qtdDigitos, indice, flag;
    while (cin >> coluna) {
        resposta = 0;
        flag = 0;
        qtdDigitos = contaCaracteres(coluna);
        if (qtdDigitos < 4)
            for (indice = 0; indice < qtdDigitos; indice++)
                resposta += (coluna[indice]-64) * potencia(26,qtdDigitos-1-indice);
        else
            flag = 1;
        if (resposta > 16384)
            flag = 1;
        if (flag)
            cout << "Essa coluna nao existe Tobias!" << endl; 
        else
            cout << resposta << endl;
    }
    return 0;
}

URI - 3142 - Excel Bugado - Iniciante - C

Plataforma: URI

Problema3142

Enunciado:
Enquanto o nosso aniversariante permutava balões, ele recebeu um e-mail de uma professora pedindo para enviar com urgência alguns dados estatísticos adicionais para incluir em relatório sobre um projeto do qual ele participa.

Prontamente o Tobias abriu a planilha do Excel onde os dados estavam salvos para fazer as contas necessárias e enviar o mais rápido possível os dados solicitados. Quanto antes ele terminar essa tarefa, mais tempo sobrará para ele aproveitar o dia do seu aniversário.

No Excel, cada coluna da planilha é indicada por letras. A primeira coluna é a letra “A”, a segunda coluna é a letra “B”, a terceira “C” e assim por diante até “Z”, onde a próxima coluna é “AA”. Depois vem “AB”, “AC”, “AD”, ..., até “AZ”. Daí vem “BA”, “BB”, “BC”, ..., e assim por diante até “ZZ”. Após vem “AAA”, “AAB”, ..., até chegar em “XFD” que é a última coluna da planilha. (Sim, existe uma última coluna! Desculpa destruir o sonho de quem achava que ela era infinita).

No Excel, existem ainda, fórmulas que realizam operações específicas e podem receber como parâmetros células da planilha. Uma dessas fórmulas é a =COL(), que se chamada sem parâmetros retorna a posição numérica da coluna em que ela foi chamada. Por exemplo, chamar a função =COL() em alguma linha qualquer da coluna “A” retornaria 1. Chamar na coluna “D” retornaria 4, na coluna “Z” retornaria 26, na coluna “AB” retornaria 28 e assim por diante.

Ao tentar realizar as operações necessárias para recuperar os dados solicitados, Tobias notou que a fórmula =COL() não estava funcionando.

Você consegue ajudá-lo a resolver esse problema escrevendo um algoritmo que dado o conjunto de letras que identifica a coluna retorne à posição numérica dela? Como ele está com um pouco de pressa em terminar isso, é possível que digite por engano algum código de coluna que não exista (fora do intervalo “A” – “XFD”), nesse caso você deve avisá-lo disso.

Linguagem: C

Solução:

#include <stdio.h>
int main() {
    char col[11];
    int resp, qtdDigitos, indice, expo, pot;
    while (scanf("%s ", &col) != EOF) {
        resp = 0;
        qtdDigitos = 0;
        while (col[qtdDigitos++] != '\0');
        if (--qtdDigitos < 4)
            for (indice = 0; indice < qtdDigitos; indice++) {
                expo = qtdDigitos-1-indice;
                pot = 1;
                while (expo-- != 0)
                    pot *= 26;
                resp += (col[indice]-64) * pot;
            }
        if (resp > 16384 || qtdDigitos > 3)
            printf("Essa coluna nao existe Tobias!\n");
        else
            printf("%d\n", resp);
    }
    return 0;
}

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