Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dmacias en 2 Febrero 2014, 17:19 pm



Título: Imprimir un patron de asteriscos
Publicado por: dmacias en 2 Febrero 2014, 17:19 pm
Hola, buenas a todos de nuevo

Estoy atascado en un ejercicio del libro que estoy estudiando y algo se me tiene que escapar porque ya probé mil cosas y no doy con la tecla, os ongo el enunciado.

(http://www.dmaciasblog.com/wp-content/uploads/2014/02/captura-libro.png)

Esto es lo que tengo hecho, y no le veo el fallo de porque solo me saca una vez cada linea

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. int fila1 = 1;
  7. int fila2 = 1;
  8. int contador = 1;
  9.  
  10. while (contador <= 8){
  11. if (contador/2 != 0){
  12. while (fila1 <= 8){
  13. printf("* ");
  14. fila1 ++;
  15. }
  16. printf("\n");
  17. contador ++;
  18. }
  19. if (contador/2 == 0){
  20. printf(" ");
  21. while (fila2 <= 8){
  22. printf("* ");
  23. fila2 ++;
  24. }
  25. printf("\n");
  26. contador ++;
  27. }
  28. }
  29. return 0;
  30. }
  31.  

Y esto es lo que me tira este codigo

(http://www.dmaciasblog.com/wp-content/uploads/2014/02/captura-libro2.png)

Pues eso, si podeis orientarme haber donde fallo, porque no lo veo  :rolleyes:

Un saludo


Título: Re: Imprimir un patron de asteriscos
Publicado por: leosansan en 2 Febrero 2014, 17:41 pm
Te falta reiniciar las variables fila1 y fila2 cada vez que invocas al while del contador.

Pero una forma, creo que más simple, y que produce la salida deseada:


Citar
* * * * * * * *
 *  *  *  *  *  *  *  *
* * * * * * * *
 *  *  *  *  *  *  *  *
* * * * * * * *
 *  *  *  *  *  *  *  *
* * * * * * * *
 *  *  *  *  *  *  *  *

podría ser:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int fila1 = 1;
  6. int fila2 = 1;
  7. int contador = 1;
  8.  
  9. for(contador=1;contador<=4;contador++) {
  10. fila1=fila2=1;
  11. while (fila1 <= 8){
  12. printf("* ");
  13.  
  14. fila1++;
  15. }
  16. printf("\n");
  17. while (fila2 <= 8){
  18. printf(" ");
  19. printf("* ");
  20.  
  21. fila2++;
  22. }
  23. printf("\n");
  24.  
  25. }
  26. return 0;
  27. }
  28.  

Claro que a lo mejor sólo puedes usar while. En este caso valdría:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int fila1 = 1;
  6. int fila2 = 1;
  7. int contador = 1;
  8.  
  9. while (contador<=4) {
  10. fila1=fila2=1;
  11. while (fila1 <= 8){
  12. printf("* ");
  13.  
  14. fila1++;
  15. }
  16. printf("\n");
  17. while (fila2 <= 8){
  18. printf(" ");
  19. printf("* ");
  20.  
  21. fila2++;
  22. }
  23. printf("\n");
  24.      contador++;
  25. }
  26. return 0;
  27. }
  28.  



¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)




Título: Re: Imprimir un patron de asteriscos
Publicado por: dmacias en 2 Febrero 2014, 18:12 pm
Si se me olvido comentarlo, solo puedo usar while e if que he lo que he estudiado asta ahora.

Vaya, hace algunos ejercicio tuve que hacer eso mismo y ahora se me paso  :-[  :-[

voy a terminar este con lo que me has dicho, estudio lo que me pusiste y miro las diferencias ;)

Un saludo


Título: Re: Imprimir un patron de asteriscos
Publicado por: ivancea96 en 2 Febrero 2014, 18:30 pm
Código
  1. }
  2. if (contador/2 == 0){
Pusiste eso. Elige 1: O incrementas el contador despues de los 2 "if", o pones ELSE-IF.


Título: Re: Imprimir un patron de asteriscos
Publicado por: dmacias en 2 Febrero 2014, 18:31 pm
Bueno, ya esta solucionado, habia que tocarle un par de cosas mas  :laugh:

Lo dejo por si a alguien mas le pudiera hacer falta

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. int fila1 = 1;
  7. int fila2 = 1;
  8. int contador = 0;
  9.  
  10. while (contador <= 8){
  11. fila1=fila2=1;
  12. if (contador%2 == 0){
  13. while (fila1 <= 8){
  14. printf("* ");
  15. fila1 ++;
  16. }
  17. printf("\n");
  18. contador ++;
  19. }
  20. if (contador%2 != 0){
  21. printf(" ");
  22. while (fila2 <= 8){
  23. printf("* ");
  24. fila2 ++;
  25. }
  26. printf("\n");
  27. contador ++;
  28. }
  29. }
  30. return 0;
  31. }
  32.  

Aqui la salida

Código:
 
* * * * * * * *
 * * * * * * * *
* * * * * * * *
 * * * * * * * *
* * * * * * * *
 * * * * * * * *
* * * * * * * *
 * * * * * * * *
* * * * * * * *
 * * * * * * * *


leosansan ahí te corrijo una pequeño fallo que tienes, pero igualmente muchas gracias ya que lo hice volando en cuanto me comentaste ;)

Te falta reiniciar las variables fila1 y fila2 cada vez que invocas al while del contador.

Pero una forma, creo que más simple, y que produce la salida deseada:


podría ser:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int fila1 = 1;
  6. int fila2 = 1;
  7. int contador = 1;
  8.  
  9. for(contador=1;contador<=4;contador++) {
  10. fila1=fila2=1;
  11. while (fila1 <= 8){
  12. printf("* ");
  13.  
  14. fila1++;
  15. }
  16. printf("\n");
  17. while (fila2 <= 8){
  18. printf(" ");
  19. printf("* ");
  20.  
  21. fila2++;
  22. }
  23. printf("\n");
  24.  
  25. }
  26. return 0;
  27. }
  28.  

Claro que a lo mejor sólo puedes usar while. En este caso valdría:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int fila1 = 1;
  6. int fila2 = 1;
  7. int contador = 1;
  8.  
  9. while (contador<=4) {
  10. fila1=fila2=1;
  11. while (fila1 <= 8){
  12. printf("* ");
  13.  
  14. fila1++;
  15. }
  16. printf("\n");
  17. while (fila2 <= 8){
  18. printf(" "); <---/*Esto no deberia de ir aqui, por eso no te cuadra las lineas*/
  19. printf("* ");     /*no se donde, pero aqui no  ;) */
  20.  
  21. fila2++;
  22. }
  23. printf("\n");
  24.      contador++;
  25. }
  26. return 0;
  27. }
  28.  



¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)




Un saludooo


Título: Re: Imprimir un patron de asteriscos
Publicado por: dmacias en 2 Febrero 2014, 18:35 pm
Código
  1. }
  2. if (contador/2 == 0){
Pusiste eso. Elige 1: O incrementas el contador despues de los 2 "if", o pones ELSE-IF.

Es que estaba mal, deberia haber sido

Código
  1.            if (contador%2 ==0){

Pero ya me percate en cuanto pude hecharlo a andar y ver el resultado

Gracias a los dos