View Full Version : CompilaÇao De C++ Para C (urgente)


rika1987
26-01-2008, 23:21
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 se conseguirem.

comprimentos

napalm
27-01-2008, 00:09
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:

// 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);

SL87
27-01-2008, 00:32
Esperas mesmo que alguém acredite nisso??????
Se o soubeste fazer em C++ também o sabes fazer em C......

GloriosoSLB
27-01-2008, 00:39
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.

napalm
27-01-2008, 01:12
Fds eu tb topei que havia algo de errado mas decidi cagar e dar uma abébia para ver se o gajo se desenrasca mas agora vejo isto:
http://everything2.com/index.pl?node_id=1702086

Não merecia um banzito?

rika1987
27-01-2008, 12:52
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.

Mr. Brightside
27-01-2008, 13:10
Mas a ideia era procurar um programa ou fazeres tu?

rika1987
27-01-2008, 15:31
a ideia era eu fazer um programa k faz o k esse faz, so k em C.

Helixsk8
27-01-2008, 16:07
a ideia era eu fazer um programa k faz o k esse faz, so k em C.

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.

Baderous
27-01-2008, 16:10
a ideia era eu fazer um programa k faz o k esse faz, so k em C.

Sim, então faz.

Assim não vais aprender nada de programação, e se estás a ter tal cadeira é porque esta será-te útil no futuro...

ser-te-á

HecKel
27-01-2008, 17:12
A discussão acaba por aqui.

@rika1987 (http://www.techzonept.com/member.php?u=90089), 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.