Autor
|
Tema: alinear texto (Leído 8,310 veces)
|
m@o_614
Desconectado
Mensajes: 389
|
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 int main() { int i,j,numero; for(i=1;i<=numero;i++) { for(j=1;j<=i;j++) } return 0; }
gracias de antemano
|
|
|
En línea
|
|
|
|
xassiz~
|
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í: #include<stdio.h> int main() { int i, j, z, numero; for(i=1;i<=numero;i++) { for(z=0;z<(numero-i);z++) for(j=1;j<=i;j++) } return 0; }
$ ./test Dame un numero 4 1 22 333 4444
Saludos!
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
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: int main() { int a=10; int i=0; while(i<5) { printf("%6d\n",a ); // el "6" hace que la salida se alinie 6 espacios hacia la derecha a*=10; i++; } return 0; }
Saludos
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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: #include <stdio.h> #include <stdlib.h> int main(void) { int num; int i; int j; puts("Dame un digito (1-9):"); if (scanf("%d",&num ) != 1) return EXIT_FAILURE; for (i = 0; i < num; i++){ /* Secuencia de espacios (alineacion) mas un caracter */ printf("%*d", num - i , i + 1); /* Caracteres restantes (relleno) */ for (j = 0; j < i; j++) } return EXIT_SUCCESS; }
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~
|
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
|
|
|
|
|
xassiz~
|
Ya, ahora ya lo había leído, gracias de todas formas
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Puesto a hacerlo sin usar más de un for salió esto, que además funciona:#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ int i,num; char valor[2],str[20]={0}; printf("Dame un digito (1-9): \n"); scanf("%d",&num); for (i = 1; i <=num; i++){ memset (str,' ',num-i); strcat(str,itoa (i,valor,10)); memset (&str[strlen (str)-1], i+'0',i); printf ("%s\n",str); memset (str,0,strlen (str)-1); } return EXIT_SUCCESS; }
Se admiten críticas o sugerencias. Saluditos!.REEDITO: Pensándolo bien, ¿para qué usar strcat?:#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ int i,num; char valor[2],str[20]={0}; printf("Teclea un digito (1-9): \n"); scanf("%d",&num); for (i = 1; i <=num; i++){ memset (str,' ',num-i);//relleno izquierda con espacios memset (&str[strlen (str)], i+'0',i);//relleno derecha con numeros printf ("%s\n",str); memset (str,0,strlen (str)-1);//hago nula la cadena para volver a usarla } return EXIT_SUCCESS; }
Y con una pequeña variante puedo obtener una pirámide, tipo:Teclea un digito (1-9): 6 1 222 33333 4444444 555555555 66666666666
Con sólo esto:#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ int i,num; char valor[2],str[20]={0}; printf("Teclea un digito (1-9): \n"); scanf("%d",&num); for (i = 1; i <=num; i++){ memset (str,' ',num-i);//relleno izquierda con espacios memset (&str[strlen (str)], i+'0',2*i-1);//relleno derecha con numeros printf ("%s\n",str); memset (str,0,strlen (str)-1);//hago nula la cadena para volver a usarla } return EXIT_SUCCESS; }
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! Viendo que ya te han dado varias soluciones aqui va la mia. #include <stdio.h> int main(int argc, char *argv[]) { int i,j,n; /* esto esta hecho rapido y mal, deberias de asegurarte de que los datos leidos son correctos */ /* mostramos la piramide */ for(i = 0 ; i < n ; i++) { for(j = 0 ; j <= i ; j++) } return 0; }
¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
|
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,367
|
25 Septiembre 2013, 16:33 pm
por eferion
|
|
|
Alinear texto (Solucionado)
« 1 2 »
Programación C/C++
|
nolasco281
|
11
|
8,845
|
26 Marzo 2014, 17:46 pm
por leosansan
|
|
|
Alinear texto a la derecha
Programación C/C++
|
Sothu
|
4
|
4,677
|
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,173
|
9 Enero 2016, 03:17 am
por xiruko
|
|
|
[Resuelto] Alinear texto dentro de imagen (IE)
Desarrollo Web
|
.:UND3R:.
|
1
|
4,162
|
8 Febrero 2016, 21:25 pm
por karmany
|
|