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
-
Posible solución al ejercicio CU00542F del curso básico de programación en lenguaje C.
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:
*
**
***
****
*****
****
***
**
*
#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
-
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!
-
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.
-
Sí, plantear los problemas sobre papel es algo que suele ser útil, sobre todo cuando no se trata de cosas sencillas
Saludos!