elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  alinear texto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: alinear texto  (Leído 8,274 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
alinear texto
« en: 4 Febrero 2013, 23:57 pm »

Saludos  :)

tengo este código que me tiene que hacer una piramide de manera que quede como:

     1
   22
  333
4444

el problema es que no se cómo alinear los números a la derecha

Código
  1. int main()
  2. {
  3.    int i,j,numero;
  4.    printf("Dame un numero\n");
  5.    scanf("%d",&numero);
  6.    for(i=1;i<=numero;i++)
  7.    {
  8.        printf("\n");
  9.        for(j=1;j<=i;j++)
  10.           printf("%d",i);
  11.    }
  12.    return 0;
  13. }
gracias de antemano


En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: alinear texto
« Respuesta #1 en: 5 Febrero 2013, 00:50 am »

No entendí muy bien la representación de tu "pirámide", pero si te refieres a que queden todos alineados a la derecha, podrías pensarlo así:

Si el usuario introduce "numero", te imaginas una cuadrícula de dimensión "numero x numero".
Como sabes que lo que va a ocupar la linea, tienes que imprimir numero-i espacios antes que el propio número. Sería algo así:

Código
  1. #include<stdio.h>
  2.  
  3. int main()
  4. {
  5.    int i, j, z, numero;
  6.  
  7.    printf("Dame un numero\n");
  8.    scanf("%i",&numero);
  9.  
  10.    for(i=1;i<=numero;i++)
  11.    {
  12.        for(z=0;z<(numero-i);z++)
  13.            printf(" ");
  14.  
  15.        for(j=1;j<=i;j++)
  16.            printf("%i",i);
  17.  
  18.        printf("\n");
  19.    }
  20.  
  21.    return 0;
  22. }
Código:
$ ./test
Dame un numero
4
   1
  22
 333
4444

Saludos!


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: alinear texto
« Respuesta #2 en: 6 Febrero 2013, 19:35 pm »

Hola! la solucion ya te la dijeron, pero por si no lo sabias el printf tiene alineacion derecha(aunq para este programa no te va a servir). Ejemplo:
Código
  1.    int main()
  2.    {
  3. int a=10;
  4. int i=0;
  5. while(i<5) {
  6. printf("%6d\n",a); // el "6" hace que la salida se alinie 6 espacios hacia la derecha
  7. a*=10;
  8. i++;
  9. }
  10.       return 0;
  11.    }


Saludos
En línea

Ahorrate una pregunta, lee el man
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: alinear texto
« Respuesta #3 en: 7 Febrero 2013, 16:21 pm »

Para imprimir un triangulo rectángulo (o un pirámide, o un rombo, son casos similares) se deben imprimir dos secuencias: la primera de caracteres de espacio para alinear y la segunda el relleno.

El problema aquí es la falta de una función que imprima de forma repetida un determinado carácter. La excepción es utilizar la función printf con los especificadores de anchura de campo y "*" para conseguir la repetición de espacios.

Un ejemplo que imprime un triangulo de dígitos (y nada mas) es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   int num;
  7.   int i;
  8.   int j;
  9.  
  10.   puts("Dame un digito (1-9):");
  11.   if (scanf("%d",&num) != 1)
  12.      return EXIT_FAILURE;
  13.  
  14.   for (i = 0; i < num; i++){
  15.      /* Secuencia de espacios (alineacion) mas un caracter */
  16.      printf("%*d", num - i, i + 1);
  17.  
  18.      /* Caracteres restantes (relleno) */
  19.      for (j = 0; j < i; j++)
  20.         putchar('1' + i);
  21.      putchar('\n');
  22.   }
  23.  
  24.   return EXIT_SUCCESS;
  25. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: alinear texto
« Respuesta #4 en: 7 Febrero 2013, 17:46 pm »

La excepción es utilizar la función printf con los especificadores de anchura de campo y "*" para conseguir la repetición de espacios.
Buen algoritmo, no conocía el especificador de anchura de printf, gracias!
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: alinear texto
« Respuesta #5 en: 7 Febrero 2013, 23:17 pm »

Buen algoritmo, no conocía el especificador de anchura de printf, gracias!

http://www.cplusplus.com/reference/cstdio/printf/

Saluditos!:
En línea

xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: alinear texto
« Respuesta #6 en: 7 Febrero 2013, 23:54 pm »

Ya, ahora ya lo había leído, gracias de todas formas :xD
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: alinear texto
« Respuesta #7 en: 8 Febrero 2013, 20:31 pm »

Puesto a hacerlo sin usar más de un for salió esto, que además funciona:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(void){
  6.  int i,num;
  7.  char valor[2],str[20]={0};
  8.  printf("Dame un digito (1-9): \n");
  9.  scanf("%d",&num);
  10.  for (i = 1; i <=num; i++){
  11.    memset (str,' ',num-i);
  12.    strcat(str,itoa (i,valor,10));
  13.    memset (&str[strlen (str)-1], i+'0',i);
  14.    printf ("%s\n",str);
  15.    memset (str,0,strlen (str)-1);
  16.  }
  17.   return EXIT_SUCCESS;
  18. }
  19.  
Se admiten críticas o sugerencias.
Saluditos!.


REEDITO: Pensándolo bien, ¿para qué usar strcat?:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(void){
  6.  int i,num;
  7.  char valor[2],str[20]={0};
  8.  printf("Teclea un digito (1-9): \n");
  9.  scanf("%d",&num);
  10.  for (i = 1; i <=num; i++){
  11.    memset (str,' ',num-i);//relleno izquierda con espacios
  12.    memset (&str[strlen (str)], i+'0',i);//relleno derecha con numeros
  13.    printf ("%s\n",str);
  14.    memset (str,0,strlen (str)-1);//hago nula la cadena para volver a usarla
  15.  }
  16.   return EXIT_SUCCESS;
  17. }
  18.  

Y con una pequeña variante puedo obtener una pirámide, tipo:

Código
  1. Teclea un digito (1-9):
  2. 6
  3.     1
  4.    222
  5.   33333
  6.  4444444
  7. 555555555
  8. 66666666666
  9.  

Con sólo esto:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(void){
  6.  int i,num;
  7.  char valor[2],str[20]={0};
  8.  printf("Teclea un digito (1-9): \n");
  9.  scanf("%d",&num);
  10.  for (i = 1; i <=num; i++){
  11.    memset (str,' ',num-i);//relleno izquierda con espacios
  12.    memset (&str[strlen (str)], i+'0',2*i-1);//relleno derecha con numeros
  13.    printf ("%s\n",str);
  14.    memset (str,0,strlen (str)-1);//hago nula la cadena para volver a usarla
  15.  }
  16.   return EXIT_SUCCESS;
  17. }
  18.  
  19.  

Hay que ver lo que da de sí memset ¡ ¡ ¡.

Nuevamente, Saluditos!.
« Última modificación: 9 Febrero 2013, 21:12 pm por leosansan » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: alinear texto
« Respuesta #8 en: 10 Febrero 2013, 20:20 pm »

¡Buenas!

Viendo que ya te han dado varias soluciones aqui va la mia.

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.    int i,j,n;
  6.  
  7.  
  8.    /* esto esta hecho rapido y mal, deberias de asegurarte de que los datos leidos son correctos */
  9.    scanf("%d",&n);
  10.  
  11.    /* mostramos la piramide */
  12.    for(i = 0 ; i < n ; i++)
  13.    {
  14.        for(j = 0 ; j <= i ; j++)
  15.            printf("\r%*d",n - j, i + 1);
  16.  
  17.        printf("\n");
  18.    }
  19.  
  20.    return 0;
  21. }
  22.  

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como crear una funcion en c++ para alinear el texto a ambos lados a la vez
Programación C/C++
Fraguibo 1 8,332 Último mensaje 25 Septiembre 2013, 16:33 pm
por eferion
Alinear texto (Solucionado) « 1 2 »
Programación C/C++
nolasco281 11 8,814 Último mensaje 26 Marzo 2014, 17:46 pm
por leosansan
Alinear texto a la derecha
Programación C/C++
Sothu 4 4,576 Último mensaje 12 Diciembre 2015, 19:38 pm
por fary
Alinear 3 imágenes en una línea con texto abajo? css
Desarrollo Web
andrecid 1 5,077 Último mensaje 9 Enero 2016, 03:17 am
por xiruko
[Resuelto] Alinear texto dentro de imagen (IE)
Desarrollo Web
.:UND3R:. 1 4,067 Último mensaje 8 Febrero 2016, 21:25 pm
por karmany
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines