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: DotarSojat en 19 de Octubre 2015, 01:37

Título: Dibujar rombo o diamante de números a partir de matriz C++ (cplusplus lenguajec)
Publicado por: DotarSojat en 19 de Octubre 2015, 01:37
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

(http://i.imgur.com/DhFymVL.png)

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,
Título: Re:Dibujar rombo o diamante de números a partir de matriz C++ (cplusplus lenguajec)
Publicado por: César Krall en 22 de Octubre 2015, 12:21
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!
Título: Re:Dibujar rombo o diamante de números a partir de matriz C++ (cplusplus lenguajec)
Publicado por: DotarSojat en 22 de Octubre 2015, 15:21
disculpa mi ignorancia, me podrías explicar la funcionalidad de los for de esos for con esas condiciones es que no la entiendo
Título: Re:Dibujar rombo o diamante de números a partir de matriz C++ (cplusplus lenguajec)
Publicado por: César Krall en 23 de Octubre 2015, 09:26
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!