Ir para conteúdo
Fórum Script Brasil
  • 0

Tradução de C++ para C


rika1987

Pergunta

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

Editado por Micheus
Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Acho que de mais a mais, o seu trabalha será "apenas": Redefinir as funções destrutoras,substituir os cout e cin por printf e scanf...acho que vi um delete também,então você deverá a memória como free().Bom,aí está.Mãos à obra.

Querer que nós implementemos por você,o seu trabalho de faculdade, é meio cruel não acha?

Abraços!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...