es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo incluir el código de transposición de matrices aquí en C++?

Tengo este código donde es solo una matriz simple, escribo en la matriz en un archivo .txt y lo imprimo en un archivo rezults.txt, pero ahora, estoy tratando de transponer esa matriz y no puedo entender cómo puedo incluir la función de transposición en mi código, esto es todo lo que tengo hasta ahora

#include <cmath>
#include <iomanip>
#include <fstream>
#include <iostream>
using namespace std;

const char* matrixa = "data.txt";
const char* rez = "rez.txt";

int main()
{
    int n, m;
    int* A;
    ifstream fd(matrixa);
    if (fd.fail()) {
        cerr << "Nepavyko atidaryti " << matrixa << " failo skaitymui." << endl;
        return 1;
    }
    fd >> n >> m;
    A = new int[n * m];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            fd >> *(A + i * m + j);
    fd.close();
    ofstream fr(rez);
    fr << "   ";
    for (int i = 0; i < m; i++)
        fr << setw(3) << i << "  ";
    fr << endl;
    fr << "----------";
    for (int i = 0; i < n; i++)
        fr << "---------";
    fr << endl;
    for (int i = 0; i < n; i++) {
        fr << i << " | ";
        for (int j = 0; j < m; j++)
            fr << setw(3) << *(A + i * m + j) << "   ";
        fr << endl;
    }
    fr.close();
    return 0;
}

y para transponer la matriz, he estado tratando de usar algo como esto

“`cpp
void transpose(int A[][N], int B[][N])
{
int i, j;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
B[i][j] = A[j][i];
}
Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para incluir la función transpose en tu código, puedes hacer lo siguiente:

    1. Agrega la definición de la función transpose antes de la función principal:
    void transpose(int *A, int n, int m) {
        int *T = new int[n * m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                *(T + j * n + i) = *(A + i * m + j);
            }
        }
        memcpy(A, T, sizeof(int) * n * m);
        delete[] T;
    }
    
    1. Llama a la función transpose después de leer los valores de la matriz pero antes de escribirlos en el archivo de resultados:
    transpose(A, n, m);
    

    Entonces, tu función principal actualizada se vería así:

    int main()
    {
        int n, m;
        int* A;
    
        ifstream fd(matrixa);
        if (fd.fail()) {
            cerr << "Nepavyko atidaryti " << matrixa << " failo skaitymui." << endl;
            return 1;
        }
        fd >> n >> m;
        A = new int[n * m];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                fd >> *(A + i * m + j);
        fd.close();
    
        transpose(A, n, m);
    
        ofstream fr(rez);
        fr << "   ";
        for (int i = 0; i < m; i++)
            fr << setw(3) << i << "  ";
        fr << endl;
        fr << "----------";
        for (int i = 0; i < n; i++)
            fr << "---------";
        fr << endl;
        for (int i = 0; i < n; i++) {
            fr << i << " | ";
            for (int j = 0; j < m; j++)
                fr << setw(3) << *(A + i * m + j) << "   ";
            fr << endl;
        }
        fr.close();
        delete[] A;
        return 0;
    }
    

    Ten en cuenta que hice algunas modificaciones a la función transpose para que funcione con una matriz de tamaño dinámico en lugar de una matriz estática con un tamaño fijo. Además, asegúrate de agregar #include <cstring> al principio para la función memcpy.

Comments are closed.