Matriz en forma de serpiente

Iniciado por chonazar1, 3 Noviembre 2020, 02:37 AM

0 Miembros y 1 Visitante están viendo este tema.

chonazar1

Tengo una duda y es que tengo que hacer una matriz en forma de serpiente donde se lean las filas y columnas y que estos no sean mayores a 20

EJEMPLO
n=2 m=5
1   2  3  4  5
10 9  8  7  6

Mi duda es como hacer el indice j en el ciclo for, mi profesor nos recomendo hacerla por renglones pares e impares pero no entiendo muy bien ademas de que mi codigo me da numeros muy grandes y la matriz no empeza desde 1

Si pudieran darme unos consejos se lo agradeceria

Código (cpp) [Seleccionar]
#include <stdio.h>
int main (){
int c,i,j,m,n;
scanf ("%d %d",&n,&m);
int ma [n][m];
for (i=0;i<n;i++){
for (j=0; j<m;j++){
    printf(" %d ",ma[n][m]);
}
   printf(" \n ");
    }
return 0;

Serapis

Al decirte renglones pares e impares, es porque los impares, son crecientes y los pares decrecientes.

Luego en un bucle externo de 'renglones, añades 2 bucles, uno que recorrer creciente y otro decreciente...

Hay varias formas de montarlos, para llegar al mismo resultado... He aquí el pseudocódigo para una de tales formas...


i=1
bucle para k desde 1 hasta n en pasos de 2
    Bucle para j desde i hasta i+m-1
        Imprimir j    //1 2 3 4 5, 11 12 13 14 15,...
    Siguiente
    i=(i+m+m)
    Bucle para j desde i-1 hasta j-1 retrocediendo // en pasos de - 1
        Imprimir j // 10 9 8 7 6, 20 19 18 17 16,...
    Siguiente
Siguiente


La salida para n=4, m=5, será lo comentado:
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16

La salida para n=4, m=4, sería:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13

La salida para n=2, m=7, sería :
1 2 3 4 5 6 7
14 13 12 11 10 9 8

chonazar1

muchas gracias creo que ya comprendo

K-YreX

Cita de: chonazar1 en  3 Noviembre 2020, 02:37 AM
Tengo una duda y es que tengo que hacer una matriz en forma de serpiente donde se lean las filas y columnas y que estos no sean mayores a 20

Recuerda comprobar también que los valores de n y m no sean mayores que 20 pues es un requisito del programa. Para esto tienes que usar un filtro con el bucle do-while():

const int MIN_FILAS = 1;
const int MIN_COLUMNAS = 1;
const int MAX_FILAS = 20;
const int MAX_COLUMNAS = 20;

int main(){
  int filas, columnas;
  do {
    scanf("%d %d", &filas, &columnas);
  } while(filas < MIN_FILAS || filas > MAX_FILAS || columnas < MIN_COLUMNAS || columnas > MAX_COLUMNAS);
  // ...
}
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;