Autor Tema: C (LenguajeC) Dibujar rombo diamante por consola uso módulo división CU00542F  (Leído 3661 veces)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Posible solución al ejercicio CU00542F del curso básico de programación en lenguaje C.

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:

    *

   **

  ***

 ****

*****

 ****

  ***

   **

   *

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


int main()
{
    int i = 0;
    int j = 0;
    int limiteMaximo = 0; // número máximo de asteriscos que contendra la línea central del diamante
    int numEspacios;

    // pedimos que se introduzca el número de asteriscos que contendrá la línea central del diamante.
    printf("Vamos a dibujar un diamante formado por asteriscos.\n\n"
        "Si el n\xA3mero introducido es par, el rombo tendr\xA0 un espacio entre cada asterisco.\n"
        "Si el n\xA3mero introducido es impar, el rombo no tendr\xA0 espacios entre los asteriscos.\n"
        "Introduce un n\xA3mero mayor que 3 para saber cuantos asteriscos contendr\xA0 la l\xA1nea central del diamante: ");
    scanf("%d", &limiteMaximo);
    numEspacios = limiteMaximo / 2;

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

Resolví el ejercicio de dos formas distintas, dependiendo de si se introduce un número par o impar como respuesta a la pregunta ¿Cuantos asteriscos contendrá la fila central del diamante?, si el número es impar se resolverá como el ejemplo del enunciado y si es par, se dejará un espacio en blanco entre cada asterisco.


Saludos.  ;D
« Última modificación: 22 de Junio 2016, 22:15 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! Este ejercicio parece fácil pero a mí por lo menos recuerdo que cuando lo hice me costó bastante, no es tan sencillo como parece y de hecho mucha gente necesita de ayuda para poder sacarlo.

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

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola César.

El ejercicio me resultó bastante complicado hasta que decidí plantearlo sobre papel mediante una tabla que fui rellenando con asteriscos y espacios en blanco, una vez hecho esto me resultó bastante mas fácil resolverlo.

Gracias por la corrección.

Saludos.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Sí, plantear los problemas sobre papel es algo que suele ser útil, sobre todo cuando no se trata de cosas sencillas

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".