Autor Tema: Dibujar un diamante o rombo con n asteriscos centrales en C (lenguajeC)  (Leído 20483 veces)

pablotron

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil

He adquirido el libro de Fundamentos de Programación de La Editorial Universitaria Ramon Areces, y acabo de encontrarme dos problemas que no sé resolver, en la sección de ejercicios no resueltos

El primero de ellos parece sencillo pero no doy con la clave: se trata de realizar (en C+-, que es una variante de C++ y C, específica para el aprendizaje), un programa para calcular el máximo común divisor de dos números enteros

Para el otro ejercicio es necesaria la sentencia FOR, (la cual al parecer no he entendido del todo bien en la teoría): Se trata de imprimir un rombo de asteriscos, tomando como dato el número de asteriscos que tiene el lado (también en C+-)

El rombo debe ser algo parecido a esto (para lado = 4):

    *
   * *
  * * *
 * * * *
  * * *
   * *
    *

con espacios en blanco entre un asterisco y otro

Muchas gracias por vuestra atención!!!
« Última modificación: 16 de Enero 2016, 19:35 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola Pablo, el ejercicio del rombo parece sencillo pero no lo es. Tiene una lógica que no es fácil de sacar (puede llevar incluso varias horas la primera vez que se hace). De hecho, te aseguro que muchos programadores tardarían en sacarlo.

Puedes guiarte por este código, tratar de ir razonando y haciendo pruebas hasta que lo saques por tí mismo:

Código: [Seleccionar]
#include <stdio.h>

int main() {
    int NFILAS = 4;
    int NCOLUMNAS = 4;
    int n, c, k, space = 1;

    //n es el numero de filas del rombo
    n = NFILAS;

    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++)
            if (c%2 ==0) {
                printf("*");
            } else {
                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++)
            if (c%2 ==0) {
                printf("*");
            } else {
                printf(" ");
            }

        printf("\n");
    }

    return 0;
}

Nota: para el otro ejercicio abre mejor otro tema en el foro, de ese modo se mantiene cada tema por separado y mantenemos mejor ordenados los foros.

Saludos

 

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