Necesito convertir este código de C++ a C

Iniciado por Xcution, 1 Noviembre 2013, 02:47 AM

0 Miembros y 1 Visitante están viendo este tema.

Xcution

Buenas noches amigos, ¿Qué tal?. He de necesitar convertir este código de C++ a C, conozco muy poco de C++ y este programa es un ejemplo igual al que necesito en C, espero que me brinden su ayuda por favor y gracias de antemano.

#include <iostream>
#include <stdlib.h>
using namespace std;

struct nodo{
    int nro;
    struct nodo *sgte;
};

typedef nodo *ptrPila;   // creando nodo tipo puntero( tipo de dato )

/*                        Apilar elemento     
---------------------------------------------------------------------*/
void push( ptrPila &p, int valor )
{
     ptrPila aux;
     aux = new(struct nodo);  // apuntamos al nuevo nodo creado
     aux->nro = valor;
     
     aux->sgte = p ;
     p = aux ;
}

/*                Desapilar elemento(devuelve elemento)     
---------------------------------------------------------------------*/
int pop( ptrPila &p )
{
     int num ;
     ptrPila aux;
     
     aux = p ;
     num = aux->nro;   // asignamos el primer vamor de la pila
     
     p = aux->sgte ;
     delete(aux);
     
     return num;
}

/*                     Muestra elementos de la pila     
---------------------------------------------------------------------*/
void mostrar_pila( ptrPila p )
{
     ptrPila aux;
     aux = p;     // apunta al inicio de la lista
     
     while( aux !=NULL )
     {
            cout<<"\t"<< aux->nro <<endl;
            aux = aux->sgte;
     }   
}

/*                Eliminar todos los elementos de la pila     
---------------------------------------------------------------------*/
void destruir_pila( ptrPila &p)
{
     ptrPila aux;
     
     while( p != NULL)
     {
           aux = p;
           p = aux->sgte;
           delete(aux);
     }
}

/*                        Menu de opciones   
----------------------------------------------------------------------*/
void menu()
{
    cout<<"\n\t IMPLEMENTACION DE PILAS EN C++\n\n";
    cout<<" 1. Insertar Libros                               "<<endl;
    cout<<" 2. Sacar libro                         "<<endl;
    cout<<" 3. MOSTRAR PILA                          "<<endl;
    cout<<" 4. DESTRUIR PILA                         "<<endl;
    cout<<" 5. SALIR                                 "<<endl;

    cout<<"\n INGRESE OPCION: ";
}

/*                        Funcion Principal       
----------------------------------------------------------------------*/
int main()
{
    ptrPila p = NULL;  // creando pila
    int dato;
    int op;
    int x ; // numero que devuelve la funcon pop
   
   

    do
    {
        menu();  cin>> op;

        switch(op)
        {
            case 1:

                 cout<< "\n NUMERO A APILAR: "; cin>> dato;
                 push( p, dato );
                 cout<<"\n\n\t\tNumero " << dato << " apilado...\n\n";
            break;


            case 2:

                 x = pop( p );
                 cout<<"\n\n\t\tNumero "<< x <<" desapilado...\n\n";
            break;
                 

            case 3:

                 cout << "\n\n MOSTRANDO PILA\n\n";
                 if(p!=NULL)
                    mostrar_pila( p );
                 else
                    cout<<"\n\n\tPila vacia..!"<<endl;
            break;


            case 4:

                 destruir_pila( p );
                 cout<<"\n\n\t\tPila eliminada...\n\n";
            break;
           
         }

        cout<<endl<<endl;
        system("pause");
  system("cls");

    }while(op!=5);
   
   
    return 0;
}

edr89

cout<< es a printf()
y cin>> un scanf()

tampoco conozco C++ pero el código parece de C, no hay clases sino estructuras. Qué es lo que no puedes traducir? o no entiendes?. Estas trabajando con listas ligadas sencillas y el contexto esta dentro de C.

Xcution

No entiendo como traducirlo... como llevaría esto a un equivalente en C <<>> :S

vangodp

#3
que cout<< se usa para imprimir
ejemplo
int variabl = 32;
cout << "loque va dentro de colmillas es lo que ves" << variable << endl;
verias asi:

lo  que va dentro de colmillas es lo que ves 32

endl es lo mismo que \n

y cin >> variable;

el comando cin mete en la variable lo que recibo del teclado.

debes cambiar las 2 instrucciones.

cout por la que usas en c que es printf.
cin por la que usas en c que es scanf.

te doy un ejemplopara cada.

hola mundo en c++ es asi
cout << "hola mundo" << endl;
Y en c asi:
printf("holamundo");

hay mas diferencias pero en el código tuyo básicamente debes convertir eso lo que se refiere a entrada y salida.

En entrada tendríamos algo así:
supongamos que creamos una variable llamada numero1 que es del tipo int, queremos meter el numero 30 mediante teclado.

/*En c seria algo así:*/
int numero1 = 0;
scanf("%d",&numero1);


Código (cpp) [Seleccionar]
//En c++ es así:
int numero1 = 0;
cin>> numero1;


No es difícil de entender creo.

Ademas es mas que recomendable aprender usar cin y cout aun que estudies c por que hay muchos códigos buenos en c++ que como este al convertir te sirven de ejemplo para estudio.
No te digo que dejes c solo que aprendas algo mas como lo básico solo por si tienes problemas como este.
cout:
http://minidosis.org/C++/Primeros%20Programas/Salida%201/
cin
http://minidosis.org/C++/Primeros%20Programas/Entrada%201/

2 videos de mas o menos de 10 minutos para que aprendas como va entrada y salida en c++.
Si los comprendes mas fácil te va hacer.  :-*

Xcution

Eso ya lo sé, gracias.. pero además me refiero a lo que sale en el código como using namespace std; hice lo que me dijiste para llevarlo a C, y en los void me dan errores que no entiendo me dice que p no está declarado :S, necesito su ayuda urgente.. me disculpan si le monto presión.. Gracias

vangodp

mira lo de using namespace std es por el siguiente.
si tienes muchas lineas tipo cout es mas facil escribir así cout que así std::cout no?
Bien para que te quede mas claro a ver si puedo explicar algo mas.
si pongo using namespace std; debajo de los include luego al principio del código.

todas las lineas en todas las funciones que lleve cout no hace falta poner el std:: delante del cout.

si ves using namespace std como si fuera una global eso quiere decir que todos los cout, cin, endl y no que que mas son "estándar".
Ahora si acaso no ves using namespace std;
entonces lo tendrías que poner delante de los cout, cin y endl el std::
De manera que quedara así
std::cout << "hola mundo" << std::endl;
std::cin >> variable;
Eso es facil si haces 3 lineas pero si escribes 500 lineas en un autentico coña... XD
Por eso el using name blablabla ese, es para ahorar los std:: delante.
Eso es parte de código c++, y lo debes eliminar junto con los cout cin y endl de tu programa c.
El #include <iostream> lo sustituye por la stdio.h.
El using namespace este también hace parte de la librería iostrem de c++ de ahí el error.
Mira, pon aquí lo que tengas echo y en menos de 5 minutos te contesta la peña, lo que no van a hacerte el trabajo por que son normas del foro o yo que se.
Ademas no seriamos justo contigo si te lo hiciéramos el trabajo no cres?
Pega el código aquí y lo tendrás solucionado en seguida, por lo demás no se que decirte.  :rolleyes: