Autor Tema: Crear o Dibujar un rombo o diamante por consola en C ejemplo LenguajeC CU00542F  (Leído 6529 veces)

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Aquí dejo una posible solución al ejercicio CU00542F;  he de decir que me ha costado bastante solucionarlo, me planteé el dibujo en papel y mas o menos le fui dando forma al ejercicio. 

Citar
EJERCICIO

Crear un programa que muestre en pantalla un diamante formado por asteriscos, dado un valor de número de asteriscos máximo en el punto central del diamante o rombo. Ejemplo: si el valor en el punto central es 5 el rombo sería:

Ejemplo:

*

**

***

****

*****

****

***

**

*

 

Nota: antes de crear el código hay que estudiar la lógica para proceder a crear el rombo, teniendo en cuenta que para poder mostrarlo habremos de dejar espacios en blanco a la derecha e izquierda de todas las líneas excepto la central.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 0;
    int j = 0;
    int asteriscosMaximos = 0;
    int numEspacios;
    // pedimos los asteriscos en la línea central del rombo
    printf("\n\t\tDibujaremos un diamante formado por asteriscos.\n\n"
           "\n Introduce un n%cmero mayor que 3 para ver bien el diamante.\n", 163);
    printf (" Cuantos asteriscos quieres que tenga el punto central de diamante: ");

    scanf("%d", &asteriscosMaximos);
    numEspacios = asteriscosMaximos / 2;

    if (asteriscosMaximos > 3 && !(asteriscosMaximos%2==0)) {
        for (i=1; i<=asteriscosMaximos; i++) {
            for (j=0; j<numEspacios; j++) {
                printf(" ");
            }
            for (j=0; j<(asteriscosMaximos-(numEspacios*2)); j++) {
                printf("*");
            }
            for (j=0; j<numEspacios; j++) {
                printf(" ");
            }
            printf("\n");
            if (i < ((asteriscosMaximos/2)+1)){
               numEspacios--;
            } else {
                numEspacios++;
        }
    }
    } else if(asteriscosMaximos > 3) {
        asteriscosMaximos = asteriscosMaximos+(asteriscosMaximos);
       numEspacios = asteriscosMaximos/2;
        for (i=1; i<=asteriscosMaximos; i++){
            for (j=0; j<numEspacios; j++) {
                printf(" ");
            }
            for (j=0; j<(asteriscosMaximos-(numEspacios*2)); j++) {
                if(i%2==0){
                   if(((j+numEspacios)%2)!=0){
                        printf("*");
                    } else {
                        printf(" ");
                    }
                }else {
                    if(((j+numEspacios)%2)==0){
                    printf("*");
                    } else {
                        printf(" ");
                    }
                }
            }
            for (j=0; j<numEspacios; j++) {
                printf(" ");
            }
             printf("\n");
            if (i < ((asteriscosMaximos/2)+1)){
                numEspacios--;
            } else {
                numEspacios++;
            }
        }
    } else {
        puts("\n\n\t\tEl n\xA3mero introducido no es mayor que 3.");
    }
    return 0;

}



Saludos y gracias por vuestro tiempo....  :D
« Última modificación: 29 de Junio 2016, 22:14 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! Está bien. Has usado la misma lógica que en otro hilo del foro. Podrían buscarse otras formas de plantear el programa, por ejemplo esta (habría que adaptarlo al ejercicio que se pide):

Código: [Seleccionar]
#include <stdio.h>

int main() {
    int n, c, k, space = 1;

    printf("Introduce el numero de filas\n");
    scanf("%d", &n);

    space = n - 1;

    for (k = 1; k <= n; k++) {
        for (c = 1; c <= space; c++)
            printf(" ");

        space--;

        for (c = 1; c <= 2*k-1; c++)
            printf("*");

        printf("\n");
    }

    space = 1;

    for (k = 1; k <= n - 1; k++) {
        for (c = 1; c <= space; c++)
            printf(" ");

        space++;

        for (c = 1 ; c <= 2*(n-k)-1; c++)
            printf("*");

        printf("\n");
    }

    return 0;
}

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".