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: Pandemia en 25 de Junio 2016, 13:24
-
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.
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.
#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
-
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):
#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!