Autor Tema: Ejercicios resueltos en C lenguajeC programar ROMBO asteriscos consola CU00542F#  (Leído 2566 veces)

elendur14

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
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.

Código: [Seleccionar]
#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;
}


« Última modificación: 15 de Octubre 2020, 18:18 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
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í:

Código: [Seleccionar]
#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

mark255

  • Sin experiencia
  • *
  • Mensajes: 10
    • Ver Perfil
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

mark255

  • Sin experiencia
  • *
  • Mensajes: 10
    • Ver Perfil
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

Código: [Seleccionar]
#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

chao chao
« Última modificación: 17 de Enero 2021, 19:46 por Ogramar »

 

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