Projeto

1. Projeto

flavio
flavyo

(usa Outra)

Enviado em 09/04/2008 - 21:08h

olá, meu nome é flavio.
Estou com um problema, tenho que fazer um programa em c que, ao usuario digitar um numero inteiro qualquer o programa exiba este numero por extenso. os primeiros caracteres ainda conseguir fazer mais ou menos a logica do programa. Mas quando o numero for maior, por exemplo que 159785, como vou fazer para poder ajustar esse programa e nao ter que digitar numero por numero. Gostaria que alguem mim desse essa força, tem alguma funcao especifica pra isso

deste ja agradecido


  


2. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 09/04/2008 - 22:10h

eu faria o seguinte.
Primeiro dividiria o numero em blocos de 3 numeros.
Ai cada bloco de 3 numeros utilizaria uma função para mostrar o número e mais o identificador de acordo com a ordem, no começo nada, depois mil, depois milhão, depois bilhão, etc.
Ai dos 3 números fazia uma regra para o primeiro número de cem (cento, duzentos, trezentos... novecentos) e depois no segundo (dez, vinte, trinta) e depois o número em si.
Poderia fazer uma matriz com os números e a string correspondente para assim ficar mais facil exibir (não precisa encher de if).

Não é dificil não.
Só que agora to sem tempo pra fazer.
Mas seria algo assim (lógica, este codigo nao compila).

// Defina os arrays
char * num[10];
num[0] = "Um";
num[1] = "Dois";
num[2] = "Tres";
//etc

char * seq[6];
seq[0] = "";
seq[1] = "Mil";
seq[2] = "Milhão";
seq[3] = "Milhões];
seq[4] = "Bilhao";
seq[5] = "Bilhões";

char * dez[10];
dez[0] = "";
dez[1] = "Dez";
dez]2] = "Vinte";
dez[3] = "Trinta";
// etc

// Aqui vai ter de dar uma modificada por causa do // cem
char * cent[10];
cent[0] = "Cento";
cent[1] = "Duzentos"

// Numero de 10 posicoes
// Pode utilizar como entrada de dados o argv[1]
char * numero = (char *) malloc(sizeof(char) * 10);
char * numeroTmp = (char *) malloc(sizeof(char) * 3);
strcpy(numero, argv[1]);
int cont = strlen(numero);
int seqCont = 0;
while (cont > 0) {
numeroTmp[0] = numero[cont-3];
numeroTmp[1] = numero[cont-2];
numeroTmp[2] = numero[cont-1];

// Cuidado quando não tiver 3 numeros, implemente melhor
printf("%s e %s e %s %s", cent[numeroTmp[0]], dez[numeroTmp[1]], num[numeroTmp[2]], seq[seqCont]);

// Basicao, cuidado que tem um erro por causa do cem, cento, milhão, milhões, terá aqui de fazer if conforme o número

cont -= 3;
seqCont++;
}


Claro tem varios erros no código, como falei to sem tempo, mas é mais ou menos isso o "caminho das pedras".


3. Re: Projeto

flavio
flavyo

(usa Outra)

Enviado em 12/04/2008 - 11:57h

olha fera, tou ainda com uns problemas, para eu indetificar a posicao do vetor eu teria que dividir o valor, por exemplo, 1234/1000 e dpois o resto dessa divisao colocar num if para poder indentificar a posicao da string do vetor. eu nao compreendir muito bem o questao da matriz para poder indentificar.

valeu, desde já meus agradecimentos


4. então

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 12/04/2008 - 12:09h

não precisa dividir não.
Se você colocar um número numa string (char *) por ex. de tamanho 10, seria a mesma coisa que um char array. Ex:
Número: 1324565 na string numero
numero[0] = '1';
numero[1] = '3';
numero[2] = '2';
numero[3] = '4';
numero[4] = '5';
numero[5] = '6';
numero[6] = '5';
Ou seja, se você tiver o total da string com strlen, você sabe a quantidade de número, por ex, neste caso você tem um número com 7 números, logo, subtraindo 3, 2 e 1 do total, você terá as posições 6, 5, 4, depois 3, 2, 1, agora depois 0, ai tem de tomar cuidado (como falei, o programa só quis passar uma ideia geral), pois ai depois que for menos que 0, você não pode sair pegando os números, mas considerar como se fosse um unico número. Tem tbem que tomar cuidado com os tratamentos do cem e centro, milhão e milhões, bilhão e bilhões, além é claro do 0 ao dezenove que são diferentes.

Vai estudando ai que você consegue, como falei se eu fizer o programa todo você não aprenderá nada, o intuito é te ajudar mas quem vai fazer é VOCÊ.

Abs






5. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 12/04/2008 - 12:45h

para ficar mais claro esse negócio da matriz que você não tinha entendido, fiz um programinha bobo só pra te mostrar como funciona. Este programa esta ok e compila com gcc (gcc -o prog proc.c), depois tem de tar permissão de execução (chmod +x prog)

Você verá como funciona a navegação em qualquer ponteiro através de matriz, neste caso é uma string ou (ponteiro de caracteres).

-------- prog.c --------
#include "stdio.h"

int main(int argc, char * argv[])
{
// Vamos criar um ponteiro para um caractere alocando 10 bytes
char * numero = (char *) malloc(sizeof(char) * 10);
// Caso queira um número fixo
strcpy(numero, "1345321");
// Caso queira entrada por argv
strcpy(numero, argv[1]);
int x = 0;
for (x = 0; x < 10; x++) {
if (numero[x] != NULL) {
printf("%d - %c\n", x, numero[x]);
} else {
printf("%d - NULL\n", x);
}
}
return 0;
}
--------- fim prog.c --------------


6. ah

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 12/04/2008 - 12:51h

se quiser processar só o tamanho do número basta trocar:
for (x = 0; x < 10; x++) {
por:
for (x = 0; x < strlen(numero); x++) {

Outra coisa, esse forum não permite certas coisas no código e talvez o != NULL não compile pois o correto é != (char) 0. Só que isso no C se representa como aspa simples barra zero aspa simples sem os espaços, é que ele bloqueia este conteudo no envio da pergunta.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts