Boas malta, em baixo esta um código de um programa para um trabalho de faculdade ao qual querem que desenvolva em C mas eu fiz lo em C++, logo não me aceitaram, e com sorte, deixaram me que o volta se a fazer em C, então vim aqui pedir a vossa ajuda a ver se conseguem traduzir me. ficaria grato com vocês.  O problema é construir uma programa que desenhe o famoso quadrado magico em C  #include <iomanip>
#include <iostream>
#include <stdio.h>
using namespace std;
class cMagicSquare {
private:
    int       **m_ippMagicSquare;
    const int m_iDim;
    int       m_iOtherDiagonal;
public:
    cMagicSquare(int iInput);
    ~cMagicSquare();
    void print() const;
};
cMagicSquare::cMagicSquare(int iInput):m_iDim(iInput) {
    int iCol, iRow;
    m_ippMagicSquare = new int *[m_iDim+1];
    for(int i = 0; i <= m_iDim; m_ippMagicSquare[i++] = new int[m_iDim+1]);
    for(iRow = 0; iRow <= m_iDim; iRow++)
        for(iCol = 0; iCol <= m_iDim; m_ippMagicSquare[iRow][iCol++] = 0);
    iRow = 1;
    iCol = m_iDim / 2 + 1;
    m_iOtherDiagonal = 0;
    for(int iValue = 1; iValue <= m_iDim * m_iDim; iValue++) {
        if(m_ippMagicSquare[iRow][iCol] > 0) {
            iRow += 2;
            if(iRow > m_iDim)
                iRow -= m_iDim;
            if(--iCol < 1)
                iCol = m_iDim;
        }
        m_ippMagicSquare[iRow][iCol] = iValue;
        m_ippMagicSquare[0][iCol] += iValue;
        m_ippMagicSquare[iRow][0] += iValue;
        if(iRow == iCol)
            m_ippMagicSquare[0][0] += iValue;
        if(iRow+iCol == m_iDim+1)
            m_iOtherDiagonal += iValue;
        if(--iRow < 1)
            iRow = m_iDim;
        if(++iCol > m_iDim)
            iCol = 1;
    }
}
cMagicSquare::~cMagicSquare() {
    for(int i = 0; i <= m_iDim; delete [] m_ippMagicSquare[i++]);
    delete [] m_ippMagicSquare;
}
//funçao que imprime a matriz
void cMagicSquare::print() const {
    cout<<"\n O numero que escolheu e o "<<m_iDim<<", e o quadrado e: \n\n";
    int iCol, iRow;
    for(iRow = 1; iRow <= m_iDim; iRow++) {
        cout<<"     ";
        for(iCol = 1; iCol <= m_iDim; cout<<setw(5)<<m_ippMagicSquare[iRow][iCol++]);
        cout<<" = "<<setw(5)<<m_ippMagicSquare[iRow][0]<<"\n";
    }
    for(iCol = 0; iCol <= m_iDim; iCol++, cout<<"-----");
    cout<<"\n"<<setw(5)<<m_iOtherDiagonal;
    for(iCol = 1; iCol <= m_iDim; cout<<setw(5)<<m_ippMagicSquare[0][iCol++]);
    cout<<"   "<<setw(5)<<m_ippMagicSquare[0][0]<<endl;
}
int main() {
    printf("Quadrado Magico \n");
    
//testa o caracter introduzido, e para sair do programa
    for(int i = 1; i != 0;) {
        cout<<"\n-Introduza o numero impar (0 para sair): "<<flush;
        cin>>i;
        if(1) {
            if(i <= 0) {
                if(i != -1)
                    printf("ERRO:\nO inteiro tem de ser positivo.\n");
            }      else if(i % 2 == 0) {
                            printf("ERRO:\nO numero tem de ser impar.\n");
            }           else if(i >= 14) {
                            printf("ERRO:\nO inteiro tem de ser menor que 14.\n");
            } 
            else {
                cMagicSquare *mspMySquare = new cMagicSquare(i);
                mspMySquare->print();
                delete mspMySquare;
            }
        } 
      
    }
    return 0;
}   Ficarei a espera.  comprimentos