Ajuda de conversão de base com função fatorial!

1. Ajuda de conversão de base com função fatorial!

Josnei Cavaco
josneicavaco

(usa Ubuntu)

Enviado em 20/03/2015 - 20:12h

E ai pessoal? Bom, estou com algumas dúvidas, estou começando a programar faz pouco tempo e tenho um desafio a ser feito pelo qual eu não sei por onde começar. Preciso apenas de algumas dicas para saber por onde começo. O enunciado do desafio é bem maluco, vejam:



Um aluno ingressante de matemática resolveu desenvolver uma notação nova para representação de números inteiros. Sua representação, chamada a princípio de "Tenho-Muito-Tempo-Livre" (TMTL), utiliza os mesmos dígitos da base decimal, ou seja, os dígitos 0 a 9.

Para fazer a conversão da notação TMTL para decimal, você precisa fazer uma soma de k termos, sendo k o número de dígitos na representação TMTL do número. O valor do i-ésimo termo da soma, que está associado ao i-ésimo dígito ai da representação TMTL, é dado por ai × i!, onde i! é o fatorial de i. Por exemplo:

719TMTL = 7 × 3! + 1 × 2! + 9 × 1! = 7 × 6 + 1 × 2 + 9 × 1 = 5310

Como o aluno está começando seus estudos na teoria dos números, ele ainda não sabe exatamente quais as propriedades que um sistema numérico deve ter. No entanto, no momento ele precisa de uma ferramenta para fazer a conversão de números na representação TMTL para decimal, e esta é a sua tarefa.

Você deve escrever um programa que receba como entrada um número qualquer positivo, em representação TMTL (valor máximo 9999TMTL), e mostre em sua saída a representação decimal da entrada."

Exemplo 1 de execução:
719

53

Exemplo 2 de execução:
15

7



(Obs: Em negrito é a o número na base TMTL e embaixo é na base decimal)



Só estou precisando de um norte, alguma dica por onde começar. Como eu poderia fazer função fatorial em C? Não sei como diferenciar os casas do número! Se alguém puder me ajudar serei muito grato, valeu!


  


2. Re: Ajuda de conversão de base com função fatorial!

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/03/2015 - 01:36h

Trate o número a ser convertido como string de caracteres.


3. Re: Ajuda de conversão de base com função fatorial!

Reis
gnu_reis

(usa Slackware)

Enviado em 09/04/2015 - 13:32h

A dica do paulo1205 é um bom começo. O próximo passo seria organizar o problema em seus conceitos matemáticos e prosseguir com uma estruturação de um código fonte. Por exemplo, um dos conceitos que você deve ter bem definido é o de fatorial e pensar num algoritmo que o resolva, assim criar um código em linguagem C; tem muitos materiais tratando desse assunto, não precisa reinventar a roda. Uma boa prática para estruturar um código é separar algumas partes bem definidas do problema em funções.

Ah, a função da dica anterior, converte inteiro em string, é a strlen da biblioteca string.

Em último caso, tenho uma função que realiza esta conversão, caso realmente não esteja conseguindo, posso postar para você analisar, pois não faz sentido eu postar antes de você tentar.

Abs


4. Re: Ajuda de conversão de base com função fatorial!

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 10/04/2015 - 18:25h

Ajuda muito quando você escreve um plano de ação e como você já possui um objetivo (o problema), fica fácil listar o que você precisa fazer:

1. Função para calcular o fatorial - esta é a base do programa.
2. Função para calcular o tamanho do número: como dito, existe a função padrão strlen() para isso.
3. Função para converter o número da sua base para decimal.

A parte difícil é o 3.
Como fazer isso? Novamente, outra lista:

1. Tamanho da string (strlen vai te dr isso)
2. Loop através da string.
3. Cada caractere da string deverá ser convertido em seu valor numérico. Como são caracteres, você não conseguirá realizar operações matemáticas com eles. Exemplo: o caractere 0 (zero) tem valor inteiro 48. Para converter:


char c = '0';

int num_a = c - '0'; // ou....
int num_b = c - 48;



4. ENQUANTO o Loop 3 é rodado, você irá realizar os cálculos.

DICA: salve o tamanho da string em uma variável, assim você poderá decrementar essa variável dentro do loop(3).

DICA 2: Imagine seu programa funcionando. O usuário vai digitar um número, o programa vai ler, reunir informações necessárias, executar uma rotina de cálculo e informar o resultado. Quais são os passos necessários (o que o programa precisa fazer) para executar cada uma dessas partes? A partir dessas abstrações e das perguntas que você fizer, você construirá um plano de ação bem eficiente - também chamado de algoritmo.

Qualquer dúvida posta denovo,
Enzo Ferber
[]'s






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts