saskia Posted November 13, 2007 at 06:49 PM Report Share #147183 Posted November 13, 2007 at 06:49 PM 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 Link to comment Share on other sites More sharing options...
Rui Carlos Posted November 13, 2007 at 07:14 PM Report Share #147193 Posted November 13, 2007 at 07:14 PM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
saskia Posted November 13, 2007 at 07:31 PM Author Report Share #147198 Posted November 13, 2007 at 07:31 PM senao for pedir mt nao podes me dar a funçao... nao sou la mt boa a matematica :S Link to comment Share on other sites More sharing options...
Rui Carlos Posted November 13, 2007 at 09:01 PM Report Share #147227 Posted November 13, 2007 at 09:01 PM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
TheDark Posted November 14, 2007 at 01:31 AM Report Share #147267 Posted November 14, 2007 at 01:31 AM Se explicares melhor o problema e chegares a dúvidas concretas, tens mais probabilidades de ser ajudada! Desaparecido. Link to comment Share on other sites More sharing options...
saskia Posted November 14, 2007 at 11:55 AM Author Report Share #147295 Posted November 14, 2007 at 11:55 AM 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, Link to comment Share on other sites More sharing options...
TheDark Posted November 14, 2007 at 12:10 PM Report Share #147298 Posted November 14, 2007 at 12:10 PM Mas isso em ambiente de janelas ou em linha de comandos? Desaparecido. Link to comment Share on other sites More sharing options...
saskia Posted November 14, 2007 at 12:35 PM Author Report Share #147306 Posted November 14, 2007 at 12:35 PM em linha de comandos... Link to comment Share on other sites More sharing options...
rgcaldas Posted November 14, 2007 at 04:18 PM Report Share #147347 Posted November 14, 2007 at 04:18 PM 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. Link to comment Share on other sites More sharing options...
Rui Carlos Posted November 14, 2007 at 04:51 PM Report Share #147354 Posted November 14, 2007 at 04:51 PM Por acaso as bibliotecas de C até são suficientes. O printf permite fazer isso. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
nDray Posted November 15, 2007 at 12:01 AM Report Share #147487 Posted November 15, 2007 at 12:01 AM 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.... Link to comment Share on other sites More sharing options...
TheDark Posted November 15, 2007 at 01:18 AM Report Share #147494 Posted November 15, 2007 at 01:18 AM 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. Desaparecido. Link to comment Share on other sites More sharing options...
rgcaldas Posted November 15, 2007 at 10:14 AM Report Share #147502 Posted November 15, 2007 at 10:14 AM 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. 🙂 Link to comment Share on other sites More sharing options...
TheDark Posted November 15, 2007 at 12:50 PM Report Share #147525 Posted November 15, 2007 at 12:50 PM 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. Desaparecido. Link to comment Share on other sites More sharing options...
bushin Posted November 15, 2007 at 08:12 PM Report Share #147603 Posted November 15, 2007 at 08:12 PM 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 Link to comment Share on other sites More sharing options...
TheDark Posted November 16, 2007 at 01:27 AM Report Share #147716 Posted November 16, 2007 at 01:27 AM ... 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á! Desaparecido. Link to comment Share on other sites More sharing options...
nDray Posted November 16, 2007 at 07:32 AM Report Share #147734 Posted November 16, 2007 at 07:32 AM podes também tentar tirar partido disto, funciona tanto em Linux como em Windows... http://f3wm.free.fr/linux/ansidrv.html Link to comment Share on other sites More sharing options...
bushin Posted November 18, 2007 at 08:18 PM Report Share #148447 Posted November 18, 2007 at 08:18 PM Tens razão TheDark mas.... mas ainda não esta resolvido na totalidade! Link to comment Share on other sites More sharing options...
TheDark Posted November 18, 2007 at 09:06 PM Report Share #148456 Posted November 18, 2007 at 09:06 PM Já agora... onde vais buscar a função go2xy? Desaparecido. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now