Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Error 404: en 6 Septiembre 2014, 11:55 am



Título: Duda en programación C:
Publicado por: Error 404: en 6 Septiembre 2014, 11:55 am
Hola a todos de nuevo, veréis, me he atascado en un programita de C, es un ejercicio de un manual que estoy haciendo. El enunciado dice así:

1)Escriba un programa que imprima los patrones siguientes de manera separada, uno debajo del otro. Utilice ciclos
for para generar los patrones. Todos los asteriscos (*) deben imprimirse mediante una sola instrucción printf
de la forma printf(“*”); (esto provoca que los asteriscos se impriman uno al lado del otro). Pista: Los dos últimos
patrones requieren que cada línea comience con el número apropiado de espacios en blanco.
Los dibujos están en el código en forma de comentario, hay 4 aunque solo aparecen 3 pues es en el que tengo la duda, y una vez sepa el 3, el 4 yo creo que podré sacarlo.
Dejo también los dos primeros, aunque esos si me han salido sin problema, aunque si veis algo que podría optimizarse un poco o cualquier observación, siempre se agradece  :rolleyes:
Ahí va:
Código
  1.  
  2.  
  3. #include<stdio.h>
  4. int main(){
  5. int i,j=10;
  6. int espacios;
  7.  
  8.  
  9.  
  10. /* A)
  11. *
  12. **
  13. ***
  14. ****
  15. *****
  16. ******
  17. *******
  18. ********
  19. *********
  20. */
  21. for(i=1;i<=10;i++){
  22. for(j=1;j<=i;j++){
  23. printf("*");
  24.    }
  25. printf("\n");
  26. }
  27. printf("\n\n");
  28.  
  29.  
  30. /* B)
  31. **********
  32. *********
  33. ********
  34. *******
  35. ******
  36. *****
  37. ****
  38. ***
  39. **
  40. *
  41. */
  42.   for(i=1;i<=10;i++){
  43. for(j=10;j>=i;j--){
  44. printf("*");
  45.    }
  46.   printf("\n");
  47. }
  48. printf("\n\n");
  49.  
  50.  
  51. /* C)
  52. **********
  53.  *********
  54.   ********
  55.    *******
  56.     ******
  57.      *****
  58.       ****
  59.        ***
  60.         **
  61.          *
  62. */
  63.   for(i=1;i<=10;i++){
  64.      for(espacios=1;espacios<=10-j;espacios++)
  65.     printf(" ");
  66.      for(j=10;j>=i;j--){
  67.     printf("*");
  68.  }
  69.      printf("\n");
  70.   }    
  71.  
  72. return 0;
  73. }
  74.  
  75.  
La figura C) es la que me falla, me sale una representación bastante distinta, es algo así:

 **********
                *********
               ********
              *******
            *******
          *******
        *****
......
y así
Gracias por las ayudas de antemano.


Título: Re: Duda en programación C:
Publicado por: ivancea96 en 6 Septiembre 2014, 13:35 pm
Ahí j empieza siendo como terminó en el patrón B. Inicializa j. Luego, sis igue mal, vuelve a decir por aquí.


Título: Re: Duda en programación C:
Publicado por: Blaster en 6 Septiembre 2014, 14:02 pm
La figura C) es la que me falla, me sale una representación bastante distinta, es algo así:

Debería quedar mas o menos así:

Código
  1. for(i = 1; i <= 10; i++)
  2. {  
  3.  for(j = 1; j < i; j++) printf(" ");
  4.     for(j = 10; j >= i; j--) printf("*");
  5.  printf("\n");
  6. }  
  7.  

Saludos


Título: Re: Duda en programación C:
Publicado por: rir3760 en 6 Septiembre 2014, 16:21 pm
La figura C) es la que me falla, me sale una representación bastante distinta, es algo así:

 **********
                *********
               ********
              *******
            *******
          *******
        *****
......
Cuando publiques un dibujo en texto por favor utiliza etiquetas [ code ] para preservar el espaciado. ¿No sera algo así?
Código:
          **********
         *********
        ********
       *******
      ******
     *****
    ****
   ***
  **
 *
En este caso se imprimen diez lineas cada una con el mismo numero de espacios y asteriscos, empezando con diez y terminando con uno. Para hacerlo solo tienes que aplicar lo aprendido en los ejercicios anteriores.

Un saludo


Título: Re: Duda en programación C:
Publicado por: Error 404: en 8 Septiembre 2014, 03:03 am
Hola, gracias por la ayuda. rir3760 el dibujo era como lo había puesto, era raro pero si, era como puse al principio.
ivancea96 ya había pensado en eso y lo probé, pero al ver que no variaba en nada el resultado decidí quitarlo, aunque gracias por la sugerencia.
Blaster gracias por tu ayuda, lo he hecho y a funcionado, y he entendido como funciona asi que muchas gracias  ;D.
Gracias a todos por vuestra ayuda, de veras, gracias a este foro he podido avanzar bastante, mucho más de lo que lo hubiera hecho si estuviera totalmente solo sin ninguna ayuda, ya que este foro es mi única ayuda, además de los manuales  :rolleyes:


Título: Re: Duda en programación C:
Publicado por: Hacknel en 13 Octubre 2019, 00:31 am
Codigo Funcional

Código
  1. //Creacion: 08/10/2019 22:10 AM
  2. //Modificacion: 12/10/2019 16:22 PM
  3. /*
  4. Escriba un programa que imprima los patrones siguientes de manera separada, uno debajo del otro. Utilice ciclosforpara generar los patrones.
  5. Todos los asteriscos (*) deben imprimirse mediante una sola instrucción printfde la forma printf(“*”); (esto provoca que los asteriscos se impriman uno al lado del otro).
  6. Pista:Los dos úl-timos patrones requieren que cada línea comience con el número apropiado de espacios en blanco.
  7. */
  8.  
  9.  
  10. #include <stdio.h>
  11.  
  12.  
  13. int main()
  14. {
  15. //se definen variables
  16. int i,j,k;
  17.  
  18. //primera piramide
  19. //para columnas
  20. for(i=1;i<=10;i++)
  21. {
  22. //para filas
  23. for(j=1;j<=i;j++)
  24. {
  25. printf("*");
  26. }
  27. printf("\n");
  28. }
  29.  
  30. printf("\n");
  31.  
  32. //segunda piramide
  33. //para columnas
  34. for(i=1;i<=10;i++)
  35. {
  36. //para filas
  37. for(j=10;j>=i;j--)
  38. {
  39. printf("*");
  40. }
  41. printf("\n");
  42. }
  43.  
  44. printf("\n");
  45.  
  46. //tercera figura
  47. //para columnas
  48. for(i=1;i<=10;i++)
  49. {
  50. //para espacios
  51. for(j=1;j<=i;j++)
  52. {
  53. printf(" ");
  54. }
  55. //para filas
  56. for(k=10;k>=i;k--)
  57. {
  58. printf("*");
  59. }
  60. printf("\n");
  61. }
  62.  
  63.   printf("\n");
  64.  
  65. //cuarta figura
  66. //para columnas
  67. for(i=1;i<=10;i++)
  68. {
  69. //para espacios
  70. for(j=10;j>=i;j--)
  71. {
  72. printf(" ");
  73.   }
  74.   //para filas
  75.       for(k=1;k<=i;k++)
  76.       {
  77.     printf("*");
  78. }
  79.       printf("\n");
  80.   }    
  81.  
  82.  
  83. return 0;
  84. }
  85.