1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

CompilaÇao De C++ Para C (urgente)

Discussão em 'Programação' iniciada por rika1987, 26 de Janeiro de 2008. (Respostas: 10; Visualizações: 2096)

Estado do Tópico:
Fechado a novas mensagens.
  1. 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




    Código:
    #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 se conseguirem.

    comprimentos
     
    Última edição pelo moderador: 27 de Janeiro de 2008
  2. napalm

    napalm Power Member

    não tenho tempo para fazer a tradução, mas vou deixar algumas sugestões:

    - passa a classe para uma estrutura e define um tipo com essa estrutura. (typedef struct ...)
    - podes transformar os métodos quase directamente em funções
    - o último else pode ficar algo como:
    Código:
    // assinaturas das funções
    void init_square(Square *sq, int i);
    void print_square(Square *sq);
    
    // codigo do else
    Square mySquare;
    int input = 1;
    init_square(&mySquare, input);
    print_square(&mySquare);
    
     
  3. SL87

    SL87 Power Member

    Esperas mesmo que alguém acredite nisso??????
    Se o soubeste fazer em C++ também o sabes fazer em C......
     
  4. GloriosoSLB

    GloriosoSLB Power Member

    Eu diria assim. Tens esse trabalho para fazer, procuraste na net e encontraste em C++ e agora queres que nós traduzamos para C. Digo isto, porque se estás na faculdade, e mandaram-te fazer isso em C e tu fizeste em C++ então não deves ter dificuldade em fazer (sei que são linguagens diferentes, mas quem sabe programação, mais ou menos consegue-se adaptar a outra linguagem), não percebo é o porquê de vir aqui pedir para traduzir (fazer o trabalho por ti).

    A faculdade serve para formar uma pessoa para o mercado de trabalho. Quando tiveres num emprego ninguém irá realizar o teu trabalho.

    Edit: Parece que alguém se adiantou a mim.

    Olhem bem para o código, vê-se que foi alguém que percebe da coisa e que certamente não terá dificuldade em fazer o mesmo em C.
     
    Última edição: 27 de Janeiro de 2008
  5. napalm

    napalm Power Member

  6. o meu problema é que encontrei o código em C++ tive alterar algumas coisas que sabia, mas de facto eu só sei trabalhar mais ao menos em C porque nunca me deram em C++, estou nu 1ano, e nunca tinha tido uma linguagem de programação. e na verdade o programa ate faz o que eu procurava.
     
  7. Mas a ideia era procurar um programa ou fazeres tu?
     
  8. a ideia era eu fazer um programa k faz o k esse faz, so k em C.
     
  9. Helixsk8

    Helixsk8 I quit My Job for Folding

    O melhor que tens a fazer é mesmo deixar a cadeira e fazeres no próximo semestre com a mesma...
    Assim não vais aprender nada de programação, e se estás a ter tal cadeira é porque esta será-te útil no futuro...
    Faz-me confusão é como no primeiro ano da universidade (ou seja na mesma exacta posição que eu) ainda tens este espirito de espertalhão: "deixa cá ver se o google mais uns tótós fazem o trabalho por mim..."

    Faz a cadeira para o ano e trabalha mais nela.
     
  10. Baderous

    Baderous Banido

    Sim, então faz.

    ser-te-á
     
  11. HecKel

    HecKel The WORM

    A discussão acaba por aqui.

    @rika1987, pedires ajuda para fazeres um trabalho é algo que aqui ninguém reclama, pedir para lhe fazerem os trabalhos de casa já começa a ser esticar a corda e ninguém gosta de trabalhar para os outros, agora mentir a quem se pede ajuda, é descer demasiado baixo.

    As tuas dúvidas ficam esclarecidas por aqui, tenta fazer o trabalho e depois aparece cá com dúvidas concretas e com algo feito por ti.

    A thread fica encerrada.
     
Estado do Tópico:
Fechado a novas mensagens.

Partilhar esta Página