• Sábado 20 de Abril de 2024, 10:52

Autor Tema:  Una de punteros y otra de recursividad  (Leído 3037 veces)

o.ficu

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Una de punteros y otra de recursividad
« en: Martes 20 de Octubre de 2009, 03:01 »
0
Hola, aca tengo dos pequeños problemas que intento solucionarlo de la manera exactamente en como me piden.
1.- Por ejemplo el siguiente problema con punteros me dicen que si ingreso por ejemplo uuddgge me debe imprimir: 2u2d2g1e  lo cual es facil, pero no se como hacerlo cuando me dicen que la funcion encripta=z mejor dicho z=encripta, supongo que la funcion encripta me debe retornar el 2u2d2g1e y eso es el valor de z, en el programa les explico mejor para no confundirlos:  
Código: C
  1.  
  2. #include<iostream>
  3. #include<stdlib.h>
  4.  
  5. using namespace std;
  6. char *encripta(char *p)
  7. {    int i,c;
  8.      for(i=0;i<strlen(p);i++)
  9.      {     c=1;
  10.            while(*(p+i)==*(p+i+1))
  11.            {   c++;
  12.                i++;
  13.            }
  14.            cout<<c<<p[i];
  15.      }
  16.  
  17. }
  18. int main()
  19. {    char x[500],*z;
  20.      cout<<"Ingrese una cadena: ";
  21.      gets(x);
  22.      z=encripta(x);   //Cuando llamo solo a la funcion imprime lo que quiero
  23.      cout<<"La cadena enriptada es: "<<z<<endl;  //El problema es aca que no se como hacer para el z tenga los valores de mi funcion encripta
  24.      system("PAUSE");
  25.      return 0;
  26. }
  27.  


2.- Es un problema de recursividad, la cual indica que ingreso un numero por ejemplo 184763 y tiene que impirmir 8476 es decir elimina el primer y ultimo digito; esto pude hacerlo pero como siempre viene el problema de que en la funcion solo tenga un parametro intente hacerlo de miles de maneras pero de hechi que hay muchas cosas teoricas que no se o no se como aplicarlas, les explico en el mismo programa:
Código: C
  1.  
  2. #include<iostream>
  3. #include<stdlib.h>
  4. #include<math.h>
  5. using namespace std;
  6. int EliminaDigito(int n,int&i,int&s,int num[57]);   //En el problema me dicen que solo tenga como parametro int EliminaDigito(int n)
  7. int EliminaDigito(int n,int &i,int &s,int num[57])
  8. {    int k;
  9.      if(n>0){  s++;         //cuento el numero de digitos
  10.                
  11.                SeparaDigito(n/10,i,s,num);
  12.                num[i]=n%10;
  13.    
  14.                if(i==s)//cuando el num de digitos e i sean iguales hago las sgtes operaciones para eliminar el primer y ultimo numero
  15.                {
  16.                  n=(n-(num[1]*pow(10,s-1)));
  17.                  k=n/10;}
  18.                i++;
  19.                }//FIN DE IF
  20.  
  21.                return k;
  22. }
  23.  
  24. int main()
  25. {    int n,m,j,i=1,num[57],s=0;
  26.      cout<<"Cual es el numero: ";  cin>>n;
  27.      cout<<"nEl numero actual es: "<<n<<endl<<endl;
  28.      if(n>0&&n<=99){cout<<"0"<<endl;}
  29.      else
  30.      m=SeparaDigito(n,i,s,num);  //Solo me piden que la funcion sea EliminaDigito(int n)
  31.      cout<<"El nuevo numero es: "<<m<<endl<<endl;
  32.  
  33.      system("PAUSE");
  34.      return 0;
  35. }
  36.  


Graciaspor su ayuda nuevamente

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: Una de punteros y otra de recursividad
« Respuesta #1 en: Martes 20 de Octubre de 2009, 08:46 »
0
hola,

estas haciendo una mescla de C y C++ que no es muy bueno...
por ejemplo, el primero problema, en C++, se tiene que escribir asi:
Código: C++
  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. string encripta( const string & p )
  7. {    
  8.     stringstream strRet;
  9.     string::const_iterator it1 = p.begin();
  10.     string::const_iterator it2 = ++it1;
  11.     int count = 1;
  12.     do
  13.     {
  14.         if ( *it1 == *it2 )
  15.             count++;
  16.         else
  17.         {
  18.             strRet << count << *it1;
  19.             it1 = it2;
  20.             count = 1;
  21.         }
  22.         ++it2;
  23.     }
  24.     while ( it2 != p.end() ) ;
  25.  
  26.     strRet << count << *it1;
  27.     return strRet.str();
  28. }
  29.  
  30. int main()
  31. {    
  32.     string strIn;
  33.     cout << "Ingrese una cadena: ";
  34.     cin >> strIn;
  35.     string strOut = encripta( strIn );
  36.     cout << "La cadena enriptada es: "<< strOut << endl;
  37.     cin.get(); cin.get();
  38.     return 0;
  39. }
  40.  

o.ficu

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Una de punteros y otra de recursividad
« Respuesta #2 en: Miércoles 21 de Octubre de 2009, 07:40 »
0
Gracias!!!! pero no entiendo muy bien, soy novato en esto de programacion y veo que lo que me mandas es en C, y yo estoy usando c++ (Dev c++) te agradeceria si pudieras hacerlo en c++ o en tdo caso indicarme que significa los :: por que no entiendo muy bien, pero igual muchas gracias por ayudarme
Oliver

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Una de punteros y otra de recursividad
« Respuesta #3 en: Miércoles 21 de Octubre de 2009, 10:22 »
0
C++ es una extensión de C, así que C funciona perfectamente con compiladores de C++.

Los :: indican el espacio o la clase a la que no estamos refiriendo. Consulta un manual de C++  :P

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: Una de punteros y otra de recursividad
« Respuesta #4 en: Miércoles 21 de Octubre de 2009, 12:31 »
0
Cita de: "m0skit0"
C++ es una extensión de C, así que C funciona perfectamente con compiladores de C++.
Es verdad que soy un poco extremista en ese tema, pero:
1. al principio, efectivamente, era una extension, pero han seguidos dos caminos muy distintos y ahora son dos idiomas totalmente diferentes
2. hay muchas cosas que compilan en C pero no en C++ (void*, goto, etc...), y viceversa
3. los paradigmos son diferentes en C y en C++, así que la fase de concepcion (diseño) no hay nada que ver.
4. el C y el C++ no van a ser utilizados para resolver los mismos problemas.

Queda una parte comùn, pero esta parte comun es cada vez mas pequeña. Y por todas estas razones, es claro que hay que entender - el mas temprano posible en el proceso de aprendizaje - que son dos lenguajes distintos. Porque desde que tengo pragramadores a cargo, esta confusión me lleva muchos problemas. Pero muchos.

Y ademas, si alguine no tiene claro estas diferencias, como va podrà entender bien conceptos como templates, NVI, RAII, LSP, herencia intrusiva, const correctness, ..., conceptos fundamentales para programar bien en C++, pero que no tienen sentido en C.

En serio, el C es mucho mas parecido al PHP que al C++. Son realmente dos lenguajes distintos (con una parte comun, pero cada vez mas pequeña).

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Una de punteros y otra de recursividad
« Respuesta #5 en: Miércoles 21 de Octubre de 2009, 12:33 »
0
El punto 4 no se como lo podes justificar. Y PHP es un lenguaje interpretado ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: Una de punteros y otra de recursividad
« Respuesta #6 en: Miércoles 21 de Octubre de 2009, 12:35 »
0
Cita de: "o.ficu"
veo que lo que me mandas es en C
El codigo que te he dado es C++ ( parametros de funccion por referencia, uso de iteradores, uso de flujos...), y no compilarà con un compilador C.

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: Una de punteros y otra de recursividad
« Respuesta #7 en: Miércoles 21 de Octubre de 2009, 12:40 »
0
Cita de: "Eternal Idol"
El punto 4 no se como lo podes justificar.
Por ejemplo, si tengo que hacer un pequeño progama que verifica, cada x secundos, si hay un fichero en una carpeta dada, y si hay un fichero, hace un par de copias de este fichero en otras carpetas, lo voy a hacer en C. Un main() de 20 lineas y basta.
Para hacer un videojuego de tipo word of warcraft, es impensable hacerlo en C.

Cita de: "Eternal Idol"
Y PHP es un lenguaje interpretado ...
Si vale, pero digo en la manera de programar. De vez en cuando, tengo que hacer un poco de php, y me da igual que sea interpretado o compilado. Lo que veo es que el codigo resultante es muy parecido al C. Es en este sentido que hablaba.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Una de punteros y otra de recursividad
« Respuesta #8 en: Miércoles 21 de Octubre de 2009, 12:49 »
0
Cita de: "r0d"
Por ejemplo, si tengo que hacer un pequeño progama que verifica, cada x secundos, si hay un fichero en una carpeta dada, y si hay un fichero, hace un par de copias de este fichero en otras carpetas, lo voy a hacer en C. Un main() de 20 lineas y basta.
Para hacer un videojuego de tipo word of warcraft, es impensable hacerlo en C.

Se puede resolver el mismo problema con C perfectamente y en la practica muchas veces lo son (otra cosa es que sea preferible, yo me quedo con C++). Los videojuegos suelen usar internamente scripts, esto lo hacian ya en los Monkey Island de principio de los 90s con engines escritos en assembly para 16 bits. Sin ir mas lejos la amplisima mayoria de los Kernels, de los S.O. modernos, como Windows o Linux, y sus drivers estan escritos en C, son de una gran complejidad y pueden ser escritos en C++ tambien.

Cita de: "r0d"
Si vale, pero digo en la manera de programar. De vez en cuando, tengo que hacer un poco de php, y me da igual que sea interpretado o compilado. Lo que veo es que el codigo resultante es muy parecido al C. Es en este sentido que hablaba.

Son otros paradigmas si ...

PD. goto y void* se usan en C++, lo que no podes hacer son castings implicitos como los tipicos de malloc.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: Una de punteros y otra de recursividad
« Respuesta #9 en: Miércoles 21 de Octubre de 2009, 12:59 »
0
Cita de: "Eternal Idol"
Sin ir mas lejos la amplisima mayoria de los Kernels, de los S.O. modernos, como Windows o Linux, y sus drivers estan escritos en C, son de una gran complejidad y pueden ser escritos en C++ tambien.
No sé... creo que no estaria un buena idea de hacer un kernel de un s.o. en c++. O habra que hacer tantas partes en C o assemblador que al final no quedara mucho c++. El c++ tiene una capa mas que el c, y para cosas que tienen que ser muy muy rapidas, y dependiente de la architectura (procesador, hw en general) el c es mejor.
Mira, cuando hablaba de videojuegos, hay partes que son hechos en C (o en scripts como dices), las partes mas "criticas" digamos, pero en forma de libreria independientes.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Una de punteros y otra de recursividad
« Respuesta #10 en: Miércoles 21 de Octubre de 2009, 13:46 »
0
Cita de: "r0d"
No sé... creo que no estaria un buena idea de hacer un kernel de un s.o. en c++. O habra que hacer tantas partes en C o assemblador que al final no quedara mucho c++.

Windows no tiene practicamente, por no decir ninguna aunque estoy casi seguro, ni una linea de assembly en el Kernel (hay algunas en el HAL eso si, fue diseñado de tal manera que el Kernel fuera portable). Muchas cosas se podrian expresar mejor en C++, se ahorrarian bastante codigo ... al menos esa es mi experiencia despues de escribir modulos de modo Kernel (drivers) para Windows en C y C++.

Cita de: "r0d"
El c++ tiene una capa mas que el c, y para cosas que tienen que ser muy muy rapidas, y dependiente de la architectura (procesador, hw en general) el c es mejor.
Mira, cuando hablaba de videojuegos, hay partes que son hechos en C (o en scripts como dices), las partes mas "criticas" digamos, pero en forma de libreria independientes.

No, C no es mas rapido que C++ de por si, todo depende las caracteristicas que uno use de C++ y del compilador, no te olvides que llevan años mejorando la optimizacion y no existe ninguna razon por la cual C++ tenga que ser mas lento que C, especialmente cuando podes escribir codigo que en realidad sea C.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

r0d

  • Miembro activo
  • **
  • Mensajes: 37
  • Nacionalidad: fr
    • Ver Perfil
    • http://r0d.developpez.com/index-es.php
Re: Una de punteros y otra de recursividad
« Respuesta #11 en: Miércoles 21 de Octubre de 2009, 14:05 »
0
Gracias :)
No sabia todo esto. Siempre he pensado que, en general (no siempre), el c++ esta mas lento que el c.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Una de punteros y otra de recursividad
« Respuesta #12 en: Miércoles 21 de Octubre de 2009, 14:57 »
0
De nadas  :beer:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Una de punteros y otra de recursividad
« Respuesta #13 en: Miércoles 21 de Octubre de 2009, 16:06 »
0
buenas:

solo era para comentar que empiricamente, eternal idol tiene razón, yo trabajo programando en c++ en entornos embebidos y siempre he tenido que demostrar que el c++ es igual de rapido (o eficiente) que C. Sabiendo un poco lo que se hace, usando bien  las clases y todo eso se puede hacer que el esamblador sea igual que en C solo que con toda la eficacia(a la hora de desarrollar) de un proyecto en c++.
 ^_^