Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
2
#include<string.h>
#include<iostream>
4
5
6
7
8
9
int main(void)
{
char cadena[50], cadenaf[50]={0}, *parte;
int c, len, pal=0;
cout<<"Introduce un palndromo: ";
cin.getline(cadena, 50, '\n');
1
0
1
1
1
2
parte=strtok(cadena," ");
strcat(cadenaf,parte);
while((parte=strtok(NULL," ")) != NULL) strcat(cadenaf,
parte);
1
3
len=strlen(cadenaf);
1
4
1
5
1
6
1
7
1
8
1
9
if(pal==len)
2
0
2
1
2
2
cin.get();
{
if(cadenaf[len-1-c] == cadenaf[c]) pal++;
}
cout<<"S es palndromo!";
return 0;
}
1. #include<string.h>
sta lnea incluye (include) en el programa el contenido de la biblioteca string.h
2. #include<iostream>
sta lnea incluye en el programa el contenido de la biblioteca iostream
iostream es un componente de la biblioteca estndar (STL) del lenguaje de programacin C+
+ que es utilizado para operaciones de entrada/salida. Su nombre es un acrnimo de
Input/Output Stream (corriente o flujo de entrada/salida). El flujo de entrada y salida de
datos en C++ (y su predecesor C) no se encuentra definida dentro de la sintaxis bsica y se
provee por medio de libreras de funciones especializadas como iostream.
iostream define los siguientes objetos:
cin>>
cout<<
cerr
clog
Flujo de entrada.
Flujo de salida.
Todos los objetos derivados de iostream hacen parte del espacio de nombres std (estndar).
En ste programa, sin sta lnea de cdigo, no trabajaran las funciones cout y cin.get().
4. int main(void)
El main es la funcin principal. Es por donde el compilador del lenguaje C o C++ (TurboC,
VisualC, DevC++: etc) va a empezar a ejecutar el cdigo. La palabra int al inicio indica que la
funcin va a retornar un valor entero; ms adelante con la lnea return 0 le decimos al
programa que ese valor entero de retorno es cero. La palabra void dentro del parntesis le
dice al programa que al inicio de la ejecucin no se necesitan variables de entrada, es decir, el
programa se inicia sin necesidad de tener algn valor inicial o parmetro dado externamente.
5. {
Los parntesis son como las cercas (lmites, linderos) de las funciones, es decir, todo lo que
esta encerrado entre parntesis, le pertenece a la funcin que acompaa al parntesis abierto.
Para que se sepa cual es la pareja de parntesis asociados, se usa la indentacin (Bloque
tabulado), pues dentro del programa estaremos constantemente abriendo y cerrando
parntesis, y sin la indentacin, nos podemos confundir a la hora de revisar la lgica del
programa.
En ste ejemplo, la lnea 5 es el parntesis que le corresponde a la funcin int main(void),
la pareja de ste parntesis abierto, es el parntesis cerrado de la lnea 22. Todo lo que esta
entre la lnea 5 y la lnea 20, le corresponde entonces a la funcin int main (void).
9. cin.getline(cadena, 50,'\n');
La orden cin.getline (Nombre, Longitud, carcter_de_fin) pide un string o cadena de
texto (que el usuario introduce por medio del teclado). Esta funcin necesita tres datos o
parmetros:
Nombre: El nombre de la variable que va a contener el string.
Longitud: La cantidad de caracteres que queremos que se puedan introducir (nunca mayor
que la longitud del vector).
Caracter_de_fin. El caracter que el usuario va ha usar como final de la cadena. Por lo general
es el ENTER que se representa como \n (diagonal n).
En el ejemplo tenemos un vector de tipo char y 50 posiciones llamado cadena (nuestro
string) el cual terminar con ENTER; ser llenado por teclado gracias a la funcin
cin.getline().
10.
parte=strtok(cadena," ");
El puntero llamado parte, que no es ms que otro vector del cual sabemos su direccin en
memoria, recibe el contenido que el usuario ha guardado en el vector cadena.
La funcin strtok() rompe la cadena asignada dentro del parntesis en segmentos o
tkens. sta funcin tiene como tarea asegurarse que slo pase al puntero de nombre parte
la cadena de caracteres que termine con un espacio .
11.
strcat(cadenaf, parte);
En nuestro programa, sta lnea enva al vector cadenaf, el contenido del puntero parte,
que en general dicho contenido es la palabra que digito el usuario, en caso de que el usuario
hubiese digitado ms de una palabra, el sistema slo toma la primera, pues la lnea anterior (la
10) rompe la cadena apenas encuentra un espacio y solo le enva a el vector parte una
palabra.
12.
while((parte=strtok(NULL," ")) != NULL) strcat(cadenaf,
parte);
sta es a lnea ms compleja del ejemplo, pues ella sola realiza varias acciones. El while es
un ciclo repetitivo que se ejecuta todas las veces que se cumpla la condicin que esta dentro
del parntesis. En ste caso la condicin dice que mientras el puntero parte sea diferente
de un strtok(NULL; ) y ste a su vez sea diferente de NULL se repetir el ciclo. Un NULL
es un final de una cadena de texto. Dicho de otra forma, el while comprobara en cada ciclo
que la cadena de texto que se est recorriendo en el puntero parte no ha llegado a NULL,
pues esto significara que ya se ha terminado de leer toda la cadena.
Adicionalmente en cada ciclo de while, se realiza una tarea, y en este ejemplo la tarea es ir
pasando el contenido del puntero parte, al vector cadenaf, cuando el while termine, el
vector cadenaf tendr el mismo contenido del puntero parte.
13.
len=strlen(cadenaf);
14.
sta lnea es otro funcin de ciclos repetitivos (bucles). El for tiene tres condiciones dentro del
parntesis, La condicin inicial en ste caso es que la variable entera c comienza con el
valor cero; luego el for revisa si la condicin final se cumple, en ste caso es mirar si la
variable c es menor o igual a la variable entera len disminuida en 1; si la condicin final se
cumple el ciclo for realiza la condicin de paso que en ste caso es aumentar el valor de la
variable c en uno (c++).
El ciclo for se diferencia del ciclo while, en que desde el principio el ciclo for tiene la
informacin de cuantos bucles debe hacer. En ste ejemplo el ciclo for se repetir las veces
que sea necesario hasta que la variable c sea igual a la variable len menos 1.
La tarea que el ciclo for debe hacer en cada bucle, se describe en las lneas 15,16 y 17.
15.
ste segundo parntesis que se abre pertenece a la funcin o ciclo for. La pareja de ste
parntesis abierto, es el parntesis cerrado de la lnea 17. Todo lo que esta entre las lnea 15 al
17, le corresponde a la funcin for.
16.
izquierda a derecha por decirlo de algn modo, y la otra posicin de derecha a izquierda. Bajo
estas comparaciones es que se va a decidir si la palabra es PALNDROMA o no.
17.
18.
if(pal==len)
cout<<"S es palndromo!";
EL condicional if compara en ste caso el contenido de 2 variables enteras pal (que tiene
almacenado el numero de veces en donde las comparaciones de derecha a izquierda y de
izquierda a derecha fueron iguales), y len (que tiene almacenado el largo de la cadena de
texto digitada por el usuario). Si pal es igual a len significa que la palabra es palndroma,
de lo contrario no lo es. Como el if slo funciona si la condicin se cumple, en ste caso, la
tarea a realizar es escribir en pantalla "S es palndromo!", tarea que hace la orden
cout<<.
19.
20.
cin.get();
sta lnea cin.get(); esta esperando capturar una letra de teclado para dejar continuar el
flujo del programa. Se usa con la intencin de que la consola de D.O.S. no se cierre a toda
velocidad, pues en un programa tan pequeo como el del ejemplo, el sistema lo hace en
decimas de segundo y no podramos ver el resultado.
21.
return 0;
Recordemos que la funcin main() se declar entera (int) y por tanto tiene que retornar un
valor entero, como nuestro programa no tiene nada que retornar, entonces retornamos el valor
cero return 0.
22.