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: elendur14 en 05 de Junio 2020, 22:16
-
Buen dia, presento mi respuesta para el ejercicio CU00542F del tutorial de fundamentos de programación usando lenguaje C de aprenderaprogramar.
Les mando mi código para generar un rombo, mediante un numero dado desde el teclado. Estoy emocionado ya que estoy retomando la programacion, siempre me ha gustado. Por causas del destino la dejé; ya anteriormente tenía conocimientos en c y c++, ensamblador, clipper5, visual basic y foxpro. Estoy retomando de nuevo todos los conocimientos mediante esta pagina. En mis tiempos de estudiante no existia el CODE BLOCKS, ha sido facil adaptarme.
#include <stdio.h>
#include <stdlib.h>
#define CENTRADO 50
int main()
{
int cantidadAsteriscos = 0;
int mitad = 0;
int resto = 0;
printf("Dame el tamano del ROMBO entre 3 y 150: ");
scanf("%d", &cantidadAsteriscos);
mitad = (cantidadAsteriscos/2) + CENTRADO;
if(cantidadAsteriscos%2 == 0)
{
resto = 1;
}
if(cantidadAsteriscos >= 3 && cantidadAsteriscos <= 150)
{
for(int y = 0; y <= cantidadAsteriscos; y+=2)
{
for(int x = 0; x < mitad; x++)
{
printf(" ");
}
for(int h = 0; h <= y - resto; h++)
{
printf("*");
}
mitad --;
printf("\n");
}
for(int y = cantidadAsteriscos-2; y >=0 ; y-=2)
{
for(int x = mitad + 1; x>=0 ; x--)
{
printf(" ");
}
for(int h = 0; h < y; h++)
{
printf("*");
}
mitad ++;
printf("\n");
}
}
else
{
printf("Solo puedes dar valores entre 3 y 150.... \n");
}
return 0;
}
-
Buenas, el código está bien planteado y cumple con lo que pedía el ejercicio.
A mí al ejecutar el código me ha lanzado un error 'for' loop initial declarations are only allowed in C99 mode
debido a expresiones como for(int y = 0; ...
que no todos los compiladores permiten.
En mi caso lo he corregido declarando esas variables al inicio como int y, x, h; de modo que el código en mi caso lo he ejecutado así:
#include <stdio.h>
#include <stdlib.h>
#define CENTRADO 50
int main() {
int cantidadAsteriscos = 0;
int mitad = 0;
int resto = 0;
int y, x, h;
printf("Dame el tamano del ROMBO entre 3 y 150: ");
scanf("%d", &cantidadAsteriscos);
mitad = (cantidadAsteriscos/2) + CENTRADO;
if(cantidadAsteriscos%2 == 0) {
resto = 1;
}
if(cantidadAsteriscos >= 3 && cantidadAsteriscos <= 150) {
for( y = 0; y <= cantidadAsteriscos; y+=2) {
for( x = 0; x < mitad; x++) {
printf(" ");
}
for(h = 0; h <= y - resto; h++) {
printf("*");
}
mitad --;
printf("\n");
}
for(y = cantidadAsteriscos-2; y >=0 ; y-=2) {
for(x = mitad + 1; x>=0 ; x--) {
printf(" ");
}
for(h = 0; h < y; h++) {
printf("*");
}
mitad ++;
printf("\n");
}
} else {
printf("Solo puedes dar valores entre 3 y 150.... \n");
}
return 0;
}
Para quien quiera practicar con un corazón, aquí está su dibujo con asteriscos: https://aprenderaprogramar.com/foros/index.php?topic=7472.0
-
hola ogramar
debido a expresiones como for(int y = 0; ...
parece que tienes c99 como estandar por defecto, mira en las opciones del compilador y podrás cambiarlo, en gcc por ej es añadiendo -std=c11 mas acutal
suerte
-
hola elendur
a mi tampoco me gustaba como estaba planteado el ejercicio y solo he puesto asteriscos impares, queda mas bonito ;-)
mando otra posible solución :D
#define MIN 3 // longitud mínima del rombo
#define MAX 23 // longitud máxima del rombo
#include <stdio.h>
int main(void)
{
int longitud;
printf("Introduce un número impar entre %d y %d: ", MIN, MAX);
scanf("%2d", &longitud);
// número erroneo
if(longitud < MIN || longitud > MAX || longitud%2 == 0) return 1;
for(int i = 1, aporte = 2; 0 < i; i+=aporte) // dibujo el rombo
{
putchar('\t'); // separación
for(int j = longitud-i; j; j-=2) printf(" "); // espacios
for(int j = i; j--;) printf("*"); // asteriscos
putchar('\n'); // nueva línea
if(i == longitud) aporte = -2; // invertir el aporte
}
return 0;
}
/* en respuesta a elendur
* https://aprenderaprogramar.com/foros/index.php?PHPSESSID=u10qb2eusmeambnifoh9a207ii&topic=7651.0
*
* de mark255
*/
--> link (https://linkode.org/#OyT2XRxwDMZlR0xVN9USQ2)
chao chao