Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Elias Flores en 12 Septiembre 2018, 23:27 pm



Título: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Elias Flores en 12 Septiembre 2018, 23:27 pm
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <conio.h>
  4. #include <string>
  5. #include <ctime>
  6. using namespace std;
  7. void cargar (int arreglo[],int num2,int n);
  8. void mostrar (int arreglo[],int num2,int n);
  9. void invertir (int arreglo[],int a,int b);
  10. void mostrarinversa (int arreglo[],int num2,int n);
  11. int main (){
  12. int n;
  13. cout<<"ingrese la longitud del vector: ";cin>>n;
  14. int arreglo[n];
  15. cargar (arreglo,0,n);
  16. cout<<endl<<endl;
  17. mostrar (arreglo,0,n);
  18. cout<<endl<<endl;
  19. invertir (arreglo,0,n);
  20. cout<<endl<<endl;
  21. mostrarinversa (arreglo,n-n+1,n);
  22. getch();
  23. return 0;
  24. }
  25. void invertir(int arreglo[],int a ,int b){
  26.   int n=b-a+1;
  27.   int aux;
  28.   if (n>1)
  29.      {
  30.      invertir(arreglo,a+1,b-1);
  31.      aux=arreglo[a];
  32.      arreglo[a]=arreglo[b ] ;
  33.      arreglo[ b]=aux ;
  34.       }
  35. }
  36. void mostrarinversa (int arreglo[],int num2,int n){
  37. if (n>0){
  38. mostrarinversa(arreglo,num2+1,n-1);
  39. cout<<arreglo[num2]<<" ";}  
  40. }
  41. void cargar (int arreglo[],int num2,int n){//en el siguiente metodo le pasado el vector y el indice que comienza en cero = num2
  42. if (n>0){   //num2 debe ir aumentando de 1 en 1
  43. srand(time(0));   //el srand sirve para sincronizar el rand con el reloj del pc
  44. cargar(arreglo,num2+1,n-1);   //llamamos a la misma funcion cargar pero menos el ultimo dato n-1
  45. arreglo[num2]=1+rand()% 10;}
  46. }
  47. void mostrar (int arreglo[],int num2,int n){
  48. if (n>0){
  49. mostrar(arreglo,num2+1,n-1);
  50. cout<<arreglo[num2]<<" ";}
  51. }

hola necesito ayuda en esto tengo que llevarlo a una matriz pero todo tiene que ser recurisvo desde cargar la matriz hasta mostrar la matriz solo se puede usar "If" HELP aun son muy nuevo en esto de la recursion



Mod: Es obligatorio el uso de etiquetas GeSHi para poner código.


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Mr.Moonlight en 13 Septiembre 2018, 00:10 am
En la funcion invertir habia algunas asignaciones raras :silbar:

Código:

void invertir(int arreglo[],int a ,int b){
   int n=b-a+1;
   int aux;
   if (n>1)
       {
      invertir(arreglo,a+1,b-1);
      aux=arreglo[a];
      arreglo[a]=arreglo[b];
      arreglo[b]=aux;
       }
}


arreglo es un array , no puedes asignar un array entero a una posición del mismo  :xD
de esta misma manera no puedes asignar un dato de una posición a todo el array.. no se si me explico


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Elias Flores en 13 Septiembre 2018, 00:33 am
estoy en un elemento dentro del vector y lo estoy intercambiando a=inicio b= fin luego del intercambio b=inico a=fin


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Mr.Moonlight en 13 Septiembre 2018, 00:40 am
eso es lo que hace el codigo que te puse ahi , ese si funciona ,el que tu pusiste no compilaba


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Elias Flores en 13 Septiembre 2018, 00:44 am
O_O gracias camarada seguro debi pegarlo mal recien me di cuenta  gracias por el aporte :D


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Mr.Moonlight en 13 Septiembre 2018, 17:48 pm
El problemas es que debeis utilizar las etiquetas para insertar codigo , puesto que sino, puede dar lugar a malentendidos como este..

fijandome más detenidamente en tu primer mensaje puedo ver que
Código:
arreglo[a]= arreglo[b] 

al no usar las etiquetas ha interpretado [ b ] como si lo estuvieras remarcando en negrita .. por tanto te pido que modifiques el primer mensaje y utilices dichas etiquetas por favor. :(

A la hora de trasladar esto a una matriz..¿supongo que conoceras la forma de invertir una matriz, no?
Una matriz inversa es completamente distinto a invertir un vector no se si me explico


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Elias Flores en 14 Septiembre 2018, 03:33 am
pues en matriz recursiva estoy cero...... por eso pido ayuda al foro si alguien podria hacer algun ejemplo o modificar mi codigo para tener una matriz caracol recursiva, solo quiero saber el metodo para llenar una matriz recursiva de hay me guio en la logica para llenarla al estilo caracol! HELP FORO


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Beginner Web en 14 Septiembre 2018, 05:19 am
Código
  1. int suma(arreglo a, int i, int j)
  2. {
  3. if(i==0 && j==0)
  4. return a[i][j];
  5. else
  6. if(i>-1)
  7. if(j>=-1)
  8. return a[i][j]+suma(a,i,j-1);
  9. else
  10. return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
  11. }



Código
  1. void mostrar(arreglo a, int n)
  2. {
  3. if(n>=0)
  4. cout << a[n] << " ";
  5. mostrar(a,n-1);
  6. }


Código
  1. void como_la_realidad(short vida)
  2. {
  3. if(vida<=1){
  4. cout << "Entrando en el sueño";
  5. }
  6. else{
  7. como_la_realidad(vida-1);
  8. cout << " del sueño";
  9. }
  10. }


Mod: No hacer triple post. Usa el botón "Modificar".


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Elias Flores en 15 Septiembre 2018, 22:19 pm
Código
  1.    int suma(arreglo a, int i, int j)
  2.    {
  3.     if(i==0 && j==0)
  4.     return a[i][j];
  5.     else
  6.     if(i>-1)
  7.     if(j>=-1)
  8.     return a[i][j]+suma(a,i,j-1);
  9.     else
  10.     return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
  11.    }
la variable "COLUMNAS" cuando lo declaras y cual es su valor ? O_O


Mod: Obligatorio el uso de etiquetas GeSHi para códigos.


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: MAFUS en 15 Septiembre 2018, 23:36 pm
Pon todo el código dentro de las etiquetas que se generan cuándo le das al desplegable 'Código GeSHi'.


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Mr.Moonlight en 15 Septiembre 2018, 23:45 pm
Si , porque sino esto es un caos  :xD


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Beginner Web en 16 Septiembre 2018, 00:56 am
COLUMNAS es solo representativo
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int FILAS=3, COLUMNAS=4;
  6. typedef int arreglo[FILAS][COLUMNAS];
  7.  
  8. int suma(arreglo a, int i, int j);
  9.  
  10. int main()
  11. {
  12. arreglo miarreglo={{1,1,1,1},{2,2,2,2},{3,3,3,3}};
  13. cout << "SUMA: " << suma(miarreglo,FILAS-1,COLUMNAS-1) << endl;
  14. system("pause");
  15. }
  16.  
  17. int suma(arreglo a, int i, int j)
  18. {
  19. if(i==0 && j==0)
  20. return a[i][j];
  21. else
  22. if(i>-1)
  23. if(j>=-1)
  24. return a[i][j]+suma(a,i,j-1);
  25. else
  26. return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
  27. }
;-)


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Elias Flores en 16 Septiembre 2018, 02:54 am
 :o :huh: Nica estoy cero........... no se si notaron los codigos que subo al foro en la funcion main nunca coloco una operacion matematica para nada solo lo utilizo para llamar a otras funciones y las funciones predeterminadas son siempre de tipo void solo la funcion que muestra el vector es de tipo "int"........ bueno aqui nace un problema ya que en matrices tengo que crear un metodo que carge la matriz y en dev c++ cuando envio una matriz simpre debo limitar el numero de columnas SIEMPRE y es hay donde me pierdo completamente OJO los ejercicios los hago asi para tener mas orden y para que sean mas entendibles!. Posdata aqui dejo mi logica de cargar una matriz en modo modular en otras palabras de manera muy simple y vaga si lo puedo llamar asi XD

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <conio.h>
  4. #include <string>
  5. #include <ctime>
  6. using namespace std;
  7. int main(){
  8. int numE;
  9. int f,c;
  10. cout<<"Ingrese el tamaño de la fila: ";cin>>f;
  11. cout<<"Ingrese el tamaño de la columna: ";cin>>c;
  12. int matriz [f][c];
  13. srand(time(0));
  14. for (int i=0;i<f;i++){
  15. for (int j=0;j<c;j++){
  16.     numE=1+rand()% 9;
  17. matriz[i][j]=numE;
  18. }
  19. }
  20. for (int i=0;i<f;i++){
  21. for (int j=0;j<c;j++){
  22.     cout<<matriz[i][j]<<" ";
  23. }cout<<endl;
  24. }
  25. getch();
  26. return 0;
  27. }

Ahora solo hay que llevarlo a metodo recursivo un metodo dentro del main que llame a un metodo externo de tipo void que carge la matriz y un metodo de tipo "int" que muestre la matriz este de tipo entero porque tiene que devolver un valor real no como el void que no devuelve nada soy nuevo en Dev c++ esto ya lo tengo en c++ builder usando sus librerias de StringGrid pero yo quiero hacerlo libre  :¬¬.......  :¬¬ :-\  ¿Alguien que quiera participar O_0?


Título: Re: RECURSION en su estado mas puro para invertir un vector!
Publicado por: Beginner Web en 16 Septiembre 2018, 04:32 am
Código
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. using namespace std;
  5.  
  6. const int FILAS=3, COLUMNAS=4;
  7. typedef int arreglo[FILAS][COLUMNAS];
  8.  
  9. void cargar(arreglo &a, int i, int j);
  10. void mostrar(arreglo a, int i, int j);
  11. int suma(arreglo a, int i, int j);
  12.  
  13. int main()
  14. {
  15. arreglo miarreglo;
  16. srand(time(0));
  17. cargar(miarreglo,0,0);
  18. mostrar(miarreglo,0,0);
  19. cout << "SUMA: " << suma(miarreglo,FILAS-1,COLUMNAS-1) << endl;
  20. system("pause");
  21. }
  22.  
  23. void cargar(arreglo &a, int i, int j)
  24. {
  25.    a[i][j]=1+rand()% 10;
  26.    if(i<FILAS){
  27.     if(j<COLUMNAS){
  28.     cargar(a,i,j+1);
  29. }
  30. else{
  31. cargar(a,i+1,0);
  32. }
  33. }
  34. }
  35.  
  36. void mostrar(arreglo a, int i, int j)
  37. {
  38.    if(i<FILAS){
  39.     if(j<COLUMNAS){
  40.     cout << a[i][j] << " ";
  41.     mostrar(a,i,j+1);
  42. }
  43. else{
  44. cout << endl;
  45. mostrar(a,i+1,0);
  46. }
  47. }
  48. }
  49.  
  50. int suma(arreglo a, int i, int j)
  51. {
  52. if(i==0 && j==0)
  53. return a[i][j];
  54. else
  55. if(i>-1)
  56. if(j>=-1)
  57. return a[i][j]+suma(a,i,j-1);
  58. else
  59. return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
  60. }
;-)