C/Visual C - Necesito ayuda......

 
Vista:

Necesito ayuda......

Publicado por Carito (1 intervención) el 01/09/2001 23:07:25
hola:
Soy una estudiante de sistemas y necesito saber como puedo cargar una matriz en caracol o espiral, se que depronto es sencillo pero hasta ahora estoy aprendiendo el lenguaje, por favor ayudenme...
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 Alejandro

Cargar una matriz en caracol o espiral

Publicado por Alejandro (913 intervenciones) el 11/10/2024 22:26:02
Carito, para cargar una matriz en forma de caracol (o espiral), puedes seguir un enfoque que recorra la matriz en cuatro direcciones: de izquierda a derecha, de arriba hacia abajo, de derecha a izquierda y de abajo hacia arriba. A continuación, te muestro un ejemplo en C++ que ilustra cómo hacerlo.

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
#include <iostream>
#include <vector>
 
void cargarMatrizEnEspiral(std::vector<std::vector<int>>& matriz, int n, int m) {
    int inicioFila = 0, finFila = n - 1;
    int inicioColumna = 0, finColumna = m - 1;
    int valor = 1;
 
    while (inicioFila <= finFila && inicioColumna <= finColumna) {
        // Llenar de izquierda a derecha
        for (int i = inicioColumna; i <= finColumna; i++) {
            matriz[inicioFila][i] = valor++;
        }
        inicioFila++;
 
        // Llenar de arriba hacia abajo
        for (int i = inicioFila; i <= finFila; i++) {
            matriz[i][finColumna] = valor++;
        }
        finColumna--;
 
        // Llenar de derecha a izquierda
        if (inicioFila <= finFila) {
            for (int i = finColumna; i >= inicioColumna; i--) {
                matriz[finFila][i] = valor++;
            }
            finFila--;
        }
 
        // Llenar de abajo hacia arriba
        if (inicioColumna <= finColumna) {
            for (int i = finFila; i >= inicioFila; i--) {
                matriz[i][inicioColumna] = valor++;
            }
            inicioColumna++;
        }
    }
}
 
void imprimirMatriz(const std::vector<std::vector<int>>& matriz) {
    for (const auto& fila : matriz) {
        for (int valor : fila) {
            std::cout << valor << "\t";
        }
        std::cout << std::endl;
    }
}
 
int main() {
    int n, m;
 
    std::cout << "Ingrese el número de filas: ";
    std::cin >> n;
    std::cout << "Ingrese el número de columnas: ";
    std::cin >> m;
 
    std::vector<std::vector<int>> matriz(n, std::vector<int>(m));
 
    cargarMatrizEnEspiral(matriz, n, m);
    std::cout << "Matriz en espiral:\n";
    imprimirMatriz(matriz);
 
    return 0;
}

Explicación del código



1. Función `cargarMatrizEnEspiral`:
- Esta función toma como parámetros la matriz y sus dimensiones (número de filas `n` y columnas `m`).
- Utiliza cuatro variables (`inicioFila`, `finFila`, `inicioColumna`, `finColumna`) para controlar los límites de la matriz mientras se llena en espiral.
- Se recorre la matriz en las cuatro direcciones mencionadas, incrementando el valor que se va a insertar.

2. Función `imprimirMatriz`:
- Esta función imprime la matriz en la consola.

3. Función `main`:
- Solicita al usuario el tamaño de la matriz y llama a las funciones para cargarla y mostrarla.

Compilación y ejecución



Para compilar y ejecutar el código, puedes usar un compilador como `g++`:

1
2
g++ -o matriz_espiral matriz_espiral.cpp
./matriz_espiral

Ejemplo de salida



Si ingresas 3 filas y 3 columnas, la salida será:

1
2
3
4
Matriz en espiral:
1	2	3
8	9	4
7	6	5

Espero que esto te ayude a entender cómo cargar una matriz en forma de caracol.
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