C/Visual C - Matriz en espiral, duda sobre código

 
Vista:
Imágen de perfil de Zulema
Val: 3
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Matriz en espiral, duda sobre código

Publicado por Zulema (2 intervenciones) el 17/02/2020 01:05:35
Hola! Bueno, en mi carrera tenemos de ejercicio desarrollar un programa que en primera reciba datos en formato caracter, los ordene y después los acomode en forma de espiral, ya he logrado lo primero, sin embargo, he presentado muchas dificultades para desarrollar lo segundo. He aquí el código en C


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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//Ordenar los elementos  de una matriz n x m de tipo caracter de Menor a Mayor.
//Poner los elementos de la matriz del ejercicio anterior y organizarlos en forma de espiral.
 
#include <stdio.h>
#define FILAS 3
#define COLUMNAS 3
 
int main(){
	int fila=0, columna, fxc, i, j, FXC=FILAS*COLUMNAS, a, f ,c, pos;
	char m[FILAS][COLUMNAS], temp;
 
 
	printf("Llena la matriz con un caracter por posicion\n");
	for(fxc=0; fxc<FXC; fxc++){
		scanf("%s", &m[0][fxc]);
	}
 
	printf("\nMatriz ingresada\n");
	for(fila=0; fila<FILAS; fila++){
		for (columna=0; columna<COLUMNAS; columna++){
			printf("%c ", m[fila][columna]);
		}
		printf("\n");
	}
 
 
	for (i=0; i<FXC; i++){
		for (j=0; j<FXC; j++){
			if (m[0][j]>m[0][j+1]){
				temp=m[0][j];
				m[0][j]=m[0][j+1];
				m[0][j+1]=temp;
			}
		}
	}
	printf("\n");
	printf("\nMatriz ordenada\n");
	for(fila=0; fila<FILAS; fila++){
		for (columna=0; columna<COLUMNAS; columna++){
			m[fila][columna]=m[fila][columna+1];
			printf("%c ", m[fila][columna]);
		}
		//printf("\n");
	}
 
	a=0;
	f=FILAS;
	c=COLUMNAS;
	pos=0;
 
 
	while (pos<FXC){
		for (columna=a; columna<c; columna++){
			m[fila][columna]=m[0][pos];
			pos++;
		}
 
		for (fila=a+1; fila<f; fila++){
			m[fila][columna]=m[0][pos];
			pos++;
		}
 
		for (columna=c-1; columna>a; columna--){
			m[fila-1][columna-1]=m[0][pos];
			pos++;
		}
 
		for (fila=f-1; fila>a+1; fila--){
			m[fila-1][columna]=m[0][pos];
			pos++;
		}
		a++;
		f--;
		c--;
	}
 
	printf("\n\n\n");
	for(fila=0; fila<FILAS; fila++){
		for (columna=0; columna<COLUMNAS; columna++){
			printf("%c  ", m[fila][columna]);
		}
		printf("\n");
	}
	return 0;
}


Matrices9

Sin-titulo-1
En este ultimo, ilustro mas el ejemplo. Debería de quedar
1 2 3
8 9 4
7 6 5
pero pues nada más no:(
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
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Matriz en espiral, duda sobre código

Publicado por Rodrigo (119 intervenciones) el 21/02/2020 14:45:13
Tienes varios problemas.
Uno de ellos, al parecer, es que mientras recorres para poner los datos en espiral, estas sobreescribiendo los datos de un lugar a otro.

Un ejemplo para explicar lo que digo, en esta matriz el 4 debe ir donde esta el 6 ..

1
2
3
1 2 3
4 5 6
7 8 9


Si copio el 4 donde va el 6...

1
2
3
1 2 3
4 5 4
7 8 9


y el 6 se perdio.

y asi sucesivamente.

Sugiero que los datos los ingreses y mantengas en un vector aparte y vayas copiando en la matriz resultante desde alli,

No entiendo bien el recorrido que haces, aunque reconozco que no inverti tiempo suficiente para comprenderlo, porque me nublo el que estuvieras sobreescribiendo valores.

Tal vez al arreglar esto ya compruebes que el recorrido esta bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar