Dev - C++ - Rombo con numero C++

   
Vista:

Rombo con numero C++

Publicado por Juan (5 intervenciones) el 20/10/2015 23:37:08
Buenas necesito hacer un programa con una matriz de entero y llenarla y que al imprimirla salga de este modo http://prntscr.com/8ssapl Pero no logro hacer que salga de este modo, si podrían echarme una mano, por favor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Rombo con numero C++

Publicado por aguml (310 intervenciones) el 21/10/2015 09:48:13
Tienes que usar dos bucles for anidados donde se inicializan con variable=nElementsRow/2 en el más interior vas incrementando 1 y en el más exterior vas decrementando 1. En el interior vas rellenando el array incrementando la fila y consigues ese efecto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por Juan (5 intervenciones) el 21/10/2015 17:31:19
Así lo intente pero no da la forma deseada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por aguml (310 intervenciones) el 21/10/2015 21:19:18
Tienes que inicializan el array con \0 y dentro del for más interior pones un if que imprima un espacio cuando su valor sea \0 y si no lo es pues que imprima el valor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por Juan (5 intervenciones) el 21/10/2015 22:42:17
Haber si entiendo, dos for anidados los dos inicializan en 0 con punto de parada con variable=nElementsRow/2? la variable "nElementsRow/2" es una variable declarada al inicio que seria la mitad del n? ¿Si no es cero? si no es cero la matriz o la variable en esa posición?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por aguml (310 intervenciones) el 22/10/2015 01:26:10
Lo he creado en el móvil sin poder probarlo pero creo seria algo asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int array [7][7]={'\0'};
int n=1;
for (int c=3,r=0;c >=0;c--,r++){
   for (int i=0;i <4;i++){
      array [c+i][r+i]=n;
      n++;
   }
}
 
for (int r=0;r <7;r++){
   for (int c=0;c <7;c++){
      if (array [r][c] !='\0')
         printf ("%d",array [r][c];
      else
         printf (" ");
   }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por Juan (5 intervenciones) el 22/10/2015 05:49:24
No no sale, como en el ejemplo, no entendí bien estos for
1
2
for (int r=0;r <7;r++){
   for (int c=0;c <7;c++){
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por aguml (310 intervenciones) el 22/10/2015 07:53:22
Como sale? No tengo pc para probarlo ahora.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por agustin (310 intervenciones) el 22/10/2015 09:54:33
Vale, he conseguido un pc durante 5 minutos y te preparé esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <string.h>
 
#define NDIMENSION 9
 
int main(int argc, char* argv[])
{
   int array [NDIMENSION][NDIMENSION]={'\0'};
   char espacios[10]={'\0'};
 
int n=1,c,i,r,ret,divisor=1,contador=0;
 
printf("Introduce el valor inicial para N: ");
scanf("%d",&n);
 
//Relleno el array bidimensional
for (c=NDIMENSION/2,r=0;c >=0;c--,r++){
   for (i=0;i<(NDIMENSION/2 + NDIMENSION%2);i++){
      array[r+i][c+i]=n;
      n++;
   }
}
 
//Obtengo una cadena con la cantidad de espacios necesarias para cuadrar bien los numeros
//Tambien obtengo un contador que me indica cuantos espacios se han metido y lo uso para
//indicarle a printf cuantos caracteres como minimo tiene que tener cada numero y si tiene
//menos los alinea a la derecha llenando el resto con espacios
do{
   ret=array[NDIMENSION-1][NDIMENSION/2+NDIMENSION%2-1] / divisor;
   divisor *=10;
   contador++;
   strcat(espacios," ");
}while(ret > 0);
 
//Muestro el rombo
for (r=0;r <NDIMENSION;r++){
   for (c=0;c <NDIMENSION;c++){
      if (array [r][c] !='\0')
         printf ("%*d",contador,array [r][c]);
      else
         printf ("%s",espacios);
   }
   printf("\n");
}
   fflush(stdin);
   getchar();
   return 0;
}

NDIMENSION es tanto para filas como para columnas ya que el rombo tiene que ser cuadrado. Se podria hacer usando memoria dinamica y pidiendo el numero de dimensiones:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(int argc, char* argv[])
{
   int **array;
   char espacios[10]={'\0'};
 
   int n=1,c,i,r,ret,divisor=1,contador=0, nDimensiones;
 
printf("Introduce el valor inicial para N: ");
scanf("%d",&n);
 
printf("Introduce el numero de dimensiones: ");
scanf("%d",&nDimensiones);
printf("\n");
 
array = (int**)calloc(nDimensiones,sizeof(int));
for(i=0;i<nDimensiones;i++)
   array[i] = (int*)calloc(nDimensiones,sizeof(int));
 
//Relleno el array bidimensional
for (c=nDimensiones/2,r=0;c >=0;c--,r++){
   for (i=0;i<(nDimensiones/2 + nDimensiones%2);i++){
      array[r+i][c+i]=n;
      n++;
   }
}
 
//Obtengo una cadena con la cantidad de espacios necesarias para cuadrar bien los numeros
//Tambien obtengo un contador que me indica cuantos espacios se han metido y lo uso para
//indicarle a printf cuantos caracteres como minimo tiene que tener cada numero y si tiene
//menos los alinea a la derecha llenando el resto con espacios
do{
   ret=array[nDimensiones-1][nDimensiones/2+nDimensiones%2-1] / divisor;
   divisor *=10;
   contador++;
   strcat(espacios," ");
}while(ret > 0);
 
//Muestro el rombo
for (r=0;r <nDimensiones;r++){
   for (c=0;c <nDimensiones;c++){
      if (array [r][c] !='\0')
         printf ("%*d",contador,array [r][c]);
      else
         printf ("%s",espacios);
   }
   printf("\n");
}
   for(i=0;i<nDimensiones;i++)
      free(array[i]);
   free(array);
   fflush(stdin);
   getchar();
   return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por Thanatos (72 intervenciones) el 22/10/2015 15:41:45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <vector>
#include <iomanip>
#include <limits>
 
using namespace std;
 
int main() {
    int contador(1);
    unsigned orden(0);
    unsigned f(0);
    unsigned c(0);
 
    cout << "Ingrese el orden de la matriz A (m x m):\norden = ";
    cin >> orden;
 
    vector<vector<int> > numeros(orden, vector<int>(orden, 0));
    for (unsigned fila(0); fila < orden; ++fila) {
        for (unsigned columna(0); columna < orden; ++columna) {
            numeros[fila][columna] = contador;
            ++contador;
        }
    }
 
    cout << endl;
 
    for (unsigned fila(0); fila < orden; ++fila) {
        f = fila;
        c = 0;
 
        for (unsigned espacio(orden - fila); espacio > 0; --espacio) {
            cout << "   ";
        }
 
        for (unsigned columna(0); columna < fila + 1; ++columna) {
            cout << setw(6);
            cout << numeros[f--][c++];
        }
        cout << endl;
    }
 
    for (unsigned fila(0); fila < orden - 1; ++fila) {
        f = orden - 1;
        c = fila + 1;
 
        for (unsigned espacio(0); espacio <= fila + 1; ++espacio) {
            cout << "   ";
        }
 
        for (unsigned columna(0); columna < orden - (fila + 1); ++columna) {
            cout << setw(6);
            cout << numeros[f--][c++];
        }
        cout << endl;
    }
 
    (void)cin.ignore(numeric_limits<streamsize>::max(), '\n');
    (void)cin.get();
    return 0;
}

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por aguml (310 intervenciones) el 22/10/2015 21:47:54
Ya tienes hasta para elegir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rombo con numero C++

Publicado por Juan (5 intervenciones) el 23/10/2015 00:58:49
Gracias, quizás es mucho pedir, pero podrían explicarme la funcionalidad de esos for con esas condiciones, es que no logro entenderlo bien, por favor, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar