#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <string>
#include <ctime>
using namespace std;
void cargar (int arreglo[],int num2,int n);
void mostrar (int arreglo[],int num2,int n);
void invertir (int arreglo[],int a,int b);
void mostrarinversa (int arreglo[],int num2,int n);
int main (){
int n;
cout<<"ingrese la longitud del vector: ";cin>>n;
int arreglo[n];
cargar (arreglo,0,n);
cout<<endl<<endl;
mostrar (arreglo,0,n);
cout<<endl<<endl;
invertir (arreglo,0,n);
cout<<endl<<endl;
mostrarinversa (arreglo,n-n+1,n);
getch();
return 0;
}
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 ;
}
}
void mostrarinversa (int arreglo[],int num2,int n){
if (n>0){
mostrarinversa(arreglo,num2+1,n-1);
cout<<arreglo[num2]<<" ";}
}
void cargar (int arreglo[],int num2,int n){//en el siguiente metodo le pasado el vector y el indice que comienza en cero = num2
if (n>0){ //num2 debe ir aumentando de 1 en 1
srand(time(0)); //el srand sirve para sincronizar el rand con el reloj del pc
cargar(arreglo,num2+1,n-1); //llamamos a la misma funcion cargar pero menos el ultimo dato n-1
arreglo[num2]=1+rand()% 10;}
}
void mostrar (int arreglo[],int num2,int n){
if (n>0){
mostrar(arreglo,num2+1,n-1);
cout<<arreglo[num2]<<" ";}
}
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.
En la funcion invertir habia algunas asignaciones raras :silbar:
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
estoy en un elemento dentro del vector y lo estoy intercambiando a=inicio b= fin luego del intercambio b=inico a=fin
eso es lo que hace el codigo que te puse ahi , ese si funciona ,el que tu pusiste no compilaba
O_O gracias camarada seguro debi pegarlo mal recien me di cuenta gracias por el aporte :D
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
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
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
int suma(arreglo a, int i, int j)
{
if(i==0 && j==0)
return a[i][j];
else
if(i>-1)
if(j>=-1)
return a[i][j]+suma(a,i,j-1);
else
return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
}
void mostrar(arreglo a, int n)
{
if(n>=0)
cout << a[n] << " ";
mostrar(a,n-1);
}
void como_la_realidad(short vida)
{
if(vida<=1){
cout << "Entrando en el sueño";
}
else{
como_la_realidad(vida-1);
cout << " del sueño";
}
}
Mod: No hacer triple post. Usa el botón "Modificar".
int suma(arreglo a, int i, int j)
{
if(i==0 && j==0)
return a[i][j];
else
if(i>-1)
if(j>=-1)
return a[i][j]+suma(a,i,j-1);
else
return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
}
la variable "COLUMNAS" cuando lo declaras y cual es su valor ? O_O
Mod: Obligatorio el uso de etiquetas GeSHi para códigos.
Pon todo el código dentro de las etiquetas que se generan cuándo le das al desplegable 'Código GeSHi'.
Si , porque sino esto es un caos :xD
COLUMNAS es solo representativo
#include <iostream>
using namespace std;
const int FILAS=3, COLUMNAS=4;
typedef int arreglo[FILAS][COLUMNAS];
int suma(arreglo a, int i, int j);
int main()
{
arreglo miarreglo={{1,1,1,1},{2,2,2,2},{3,3,3,3}};
cout << "SUMA: " << suma(miarreglo,FILAS-1,COLUMNAS-1) << endl;
system("pause");
}
int suma(arreglo a, int i, int j)
{
if(i==0 && j==0)
return a[i][j];
else
if(i>-1)
if(j>=-1)
return a[i][j]+suma(a,i,j-1);
else
return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
}
;-)
: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
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <string>
#include <ctime>
using namespace std;
int main(){
int numE;
int f,c;
cout<<"Ingrese el tamaño de la fila: ";cin>>f;
cout<<"Ingrese el tamaño de la columna: ";cin>>c;
int matriz [f][c];
srand(time(0));
for (int i=0;i<f;i++){
for (int j=0;j<c;j++){
numE=1+rand()% 9;
matriz[i][j]=numE;
}
}
for (int i=0;i<f;i++){
for (int j=0;j<c;j++){
cout<<matriz[i][j]<<" ";
}cout<<endl;
}
getch();
return 0;
}
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?
#include <iostream>
#include <ctime>
using namespace std;
const int FILAS=3, COLUMNAS=4;
typedef int arreglo[FILAS][COLUMNAS];
void cargar(arreglo &a, int i, int j);
void mostrar(arreglo a, int i, int j);
int suma(arreglo a, int i, int j);
int main()
{
arreglo miarreglo;
srand(time(0));
cargar(miarreglo,0,0);
mostrar(miarreglo,0,0);
cout << "SUMA: " << suma(miarreglo,FILAS-1,COLUMNAS-1) << endl;
system("pause");
}
void cargar(arreglo &a, int i, int j)
{
a[i][j]=1+rand()% 10;
if(i<FILAS){
if(j<COLUMNAS){
cargar(a,i,j+1);
}
else{
cargar(a,i+1,0);
}
}
}
void mostrar(arreglo a, int i, int j)
{
if(i<FILAS){
if(j<COLUMNAS){
cout << a[i][j] << " ";
mostrar(a,i,j+1);
}
else{
cout << endl;
mostrar(a,i+1,0);
}
}
}
int suma(arreglo a, int i, int j)
{
if(i==0 && j==0)
return a[i][j];
else
if(i>-1)
if(j>=-1)
return a[i][j]+suma(a,i,j-1);
else
return a[i][j]+suma(a,i-1,j+COLUMNAS-1);
}
;-)