Buenas!!
Alguien podria ayudarme a compreder este codigo se trata de un programa que imprime una
palabra ingresada al reves
#include<stdio.h>
#include<ctype.h>
int g( int n )
{
int c, d = !EOF;
while( d != EOF && (c = getchar()) != '\n' && c != EOF )
{
if(!isspace( c ) )
{
d = g( n+1 );
putchar( c );
}
else d = c;
if( n > 0 )
return d;
if(isspace( d ) ) putchar( d );
}
return EOF;
}
int main( void )
{
g( 0 );
putchar('\n');
return 0;
}
Gracias :)
a "comprender"? XD pero todo está ahí... si no sobes que hacen las funciones, la ventaja de las etiquetas queshi es que si haces click en una funcion que posteaste, te abren un link a su definicion :P
por cierto EOF = End Of File
explica puntualmente que no comprendes...
Especificamnete en esta linea como funciona eso
d = g( n+1 );
Saludos
esa pregunta es mucho mejor :P
es una función autorecursiva... es decir, se llama a si misma y su código se corre como si hubiera llamado cualquier otra función y luego le ingresa el valor a d... por eso se maneja con EOF... para controlar el flujo de llamarse a si misma y que no sea infinito... te recomiendo usar el debugger del sistema que uses para compilar para que veas paso a paso como se mueve... eso creo que te explicaría más dudas que yo :P
Lo he seguido con gdb, lo que logre entender es que los caracteres se van almacenando en la
pila verdad y luego los recupero pero esta vez al reves, aun me que una duda con los return
Para que sirve este exactamente
return d;
Y el otro
return EOF;
Saludos :rolleyes:
return es la palabra reservada para que una funcion retorne un valor, al llegar a esta palabra la funcion se detiene sin importar si termino o no...
como g es de tiempo int, debe retornar un entero (como EOF o d)
ejemplo
#include <iostream>
#include <Windows.h>
using namespace std;
int main(){
int a = 1;
if(a==2){
return 0;
}
cout << "a es diferente de 2, y vale: "<< a << endl;
system("pause");
return 0;
}
mira ese codigo... si a es diferente de 2, llegará hasta el final... si a es 2 el return obligará al programa a salir de la funcion "main" y como es unica, el programa finalizará..
Yo te dejo una pequeña versión que escribí hace tiempo en C++, por si te interesa o a alguien le sirve de algo ;D
#include <iostream>
#include <vector>
using namespace std;
void escribe(vector<char>& a){
for (int i = 0; i < a.size(); i++){
cout << a[i];
}
cout << endl;
}
int main(){
string palabra;
vector<char> espejo;
cin >> palabra;
int tam = palabra.size();
string::reverse_iterator it = palabra.rbegin();
for (; it != palabra.rend(); it++){
espejo.push_back(*it);
}
escribe(espejo);
}
Un saludo