• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

saskia

ALINHAR NUMEROS A DIREITA

19 mensagens neste tópico

Caros colegas tenho que fazer uma funçao que alinhe numeros a direita!!! o utilizador insere numeros e em vez de eles aparecerem da esquerda para a direita da direita para a esquerda !!! como aparece na maquina de calcular do windows.... Agradeço desde ja a vossa ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se eu percebi bem a tua dúvida, através do logaritmo de base 10 (do módulo) do número podes saber quantos algarismo este tem. Depois é só adicionar 0s.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

senao for pedir mt nao podes me dar a funçao... nao sou la mt boa a matematica :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A única coisa que isto têm de Matemática é mesmo saber que através do logaritmo podes saber quantos algarismos tem um número, de resto é apenas programação. Aprendes muito mais a tentar resolver o problema do que se eu o resolver e colocar aqui a solução.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se explicares melhor o problema e chegares a dúvidas concretas, tens mais probabilidades de ser ajudada!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

quero que escrevendo os numeros eles fiquem alinhados a direita, tipo:

custos com o pessoal 4535

caixa                              55

ou seja os numeros no momemento em que estamos a introduzir vao aparecendo alinhados a direita ou seja vao sendo inscritos da direita para a esquerda como se fosse uma maquina de calcular.

PS:

.... nao sei mesmo como fazer.!!

:(

cumprimentos,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com as bibliotecas standard de C não me parece que te safes, Se estiveres em linux procura por ncurses pode ser que dê, em Windows não faço ideia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por acaso as bibliotecas de C até são suficientes. O printf permite fazer isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

claro que sim... :|

Imaginemos que queres que as tuas linhas ocupem 20 espaços, no máximo:

printf("%20d", var_int);

Mais simples não pode... Se quiseres reservar os mesmos 20 espaços mas alinhar à esquerda, fazes

printf("%-20d", var_int);

Se, em vez de espaços, quiseres que preencha com zeros:

printf("%020d", var_int);

etc............... Dá bastante jeito saber trabalhar com printf, porque dá para fazer mesmo muita coisa sem ter de inventar soluções exaustivas....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Leiam de novo o pedido. É ao escrever que os algarismos devem ficar alinhados à direita, e isso sem funções de posicionamento do cursor na consola não é possível.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois era isso que eu percebi.

Deve ser algo como ler caracter a caracter sem que o mesmo apareca logo no ecran e ir imprimindo da direita para a esquerda.

Mas não faço ideia de como fazer.  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegui (em Windows), mas é um bocado elaborado e não queria dar aqui a solução de caras...

Vou dar já uma função para posicionar o cursor nas coordenadas dadas:

#include <windows.h>

void gotoxy(int x, int y) {
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
static COORD position;
position.X = x;
position.Y = y;
SetConsoleCursorPosition(console, position);
}

Eu sei que isto é optimizável, basta que console seja estática, e que seja apenas inicializada uma vez.

Agora é uma questão de utilizar a função _getch para ler um caracter de cada vez, verificar se está entre '0' e '9' e se o número não é já demasiado comprido, e se tudo estiver bem adicionar o caracter lido a um array.

Se for a tecla backspace, eliminar o último caracter lido trocando-o pelo valor 0 (não pelo caracter '0', mas mesmo pelo valor).

Após qualquer um dos casos anteriores, posicionar o cursor no início do espaço reservado ao número, escrever um número de espaços adequado, e escrever a string onde está o número.

Se for um enter, sair do ciclo e utilizar a função atoi para transformar o array num inteiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sera algo tipo isto:

int le_n(int linha, int coluna){

int i=0, n;
char c[10];
do{
	c[i]=getch();
	c[i+1]='\0';
	if (isdigit(c[i]))
	{
		for(int j=0; (c[j] != '\0') ;j++){
			go2xy(linha,coluna-i);
			printf("%c",c[j]);

		}
	i++;	

	}
	if(i==8)
		break;
}while(c[i]!=13 );
n=atoi (c);
return (n);
}

mas esta com o seguinte problema se  digitar 10 ele escreve 01 .... mas já escreve da direita para a esquerda!!

cumprimentos,

bushin

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

...

Consegui (em Windows), mas é um bocado elaborado e não queria dar aqui a solução de caras...

A ideia era não dar a solução! Apenas ajudar a chegar lá!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens razão TheDark mas.... mas ainda não esta resolvido na totalidade!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora