Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: pedro,, en 14 de Junio 2016, 00:21

Título: C (LenguajeC) Dibujar rombo diamante por consola uso módulo división CU00542F
Publicado por: pedro,, en 14 de Junio 2016, 00:21
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
Título: Re:C (LenguajeC) Dibujar rombo diamante por consola uso módulo división CU00542F
Publicado por: César Krall en 22 de Junio 2016, 22:16
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!
Título: Re:C (LenguajeC) Dibujar rombo diamante por consola uso módulo división CU00542F
Publicado por: pedro,, en 23 de Junio 2016, 00:49
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.
Título: Re:C (LenguajeC) Dibujar rombo diamante por consola uso módulo división CU00542F
Publicado por: César Krall en 24 de Junio 2016, 22:21
Sí, plantear los problemas sobre papel es algo que suele ser útil, sobre todo cuando no se trata de cosas sencillas

Saludos!