Autor Tema: Dibujar rombo o diamante de números a partir de matriz C++ (cplusplus lenguajec)  (Leído 12726 veces)

DotarSojat

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
Buenas, necesito construir una matriz NxN cuyos elementos  son números enteros, construya un programa que imprima los valores de las diagonales secundarias de la matriz según la distribución en forma de rombo y espacios



de ese modo


Código: [Seleccionar]
#include <iostream>
using namespace std;

int main () {

int mat[4][4];
int cont=1;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){

mat[j][i]=cont++;

}
}
int k=0,r=0;
for(int i=0; i<7; i++){
r=(i/4);

for(int j=k; j>=0; j--){

cout << mat[r][j]<<" ";
r++;
}
cout << endl;
k++;
k-=k/4;
}

cin.get();
return 0;
}


Eso es lo que llevo de código pero me quede estancado,
« Última modificación: 22 de Octubre 2015, 12:19 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Puedes tomar como punto de partida este programa que dibuja un rombo como el que necesitas con asteriscos, lo que te faltaría es introducir la gestión de índices para que en lugar de asteriscos te imprima los números deseados:

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;
}

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

DotarSojat

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
disculpa mi ignorancia, me podrías explicar la funcionalidad de los for de esos for con esas condiciones es que no la entiendo

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! esos for lo que hacen es dibujar la forma de diamante o rombo, lo que contienen es la lógica para ir introduciendo asteriscos o espacios de manera que se dibuje un diamante o rombo de cierta manera.

Hay dos for, uno dibuja parte superior del diamante y otro la parte inferior, si ejecutas este código ves lo que hace cada for:

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");
    }
    printf("Esto es lo que ha dibujado el primer for\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");
    }
    printf("Esto es lo que ha dibujado el segundo for\n");

    return 0;
}

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

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