Está en la página 1de 7

PROGRAMA PALNDROMO.

1
2

#include<string.h>
#include<iostream>

using namespace std;

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

for(c=0; c<=len-1; c++)

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!";

Else cout<<"No es palndromo";

return 0;
}

1. #include<string.h>
sta lnea incluye (include) en el programa el contenido de la biblioteca string.h

string.h es un archivo de la Biblioteca Estndar del lenguaje de programacin C que


contiene la definicin de macros, constantes, funciones y tipos de utilidad para trabajar con
cadenas de caracteres y algunas operaciones de manipulacin de memoria. Las funciones
declaradas en string.h se han hecho muy populares, por lo que estn garantizadas para
cualquier plataforma que soporte C. Las funciones para cadenas de caracteres slo trabajan
con conjuntos de caracteres ASCII o extensiones ASCII compatibles.
En ste programa, sin sta lnea de cdigo, no trabajaran las funciones strtok(), strcat() y
strlen().

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.

Flujo de error no almacenado.

Flujo de error almacenado.

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().

3. using namespace std;


Las libreras estndar de C y C++, es decir las que se colocan con la palabra include definen
en conjunto cientos de funciones, estructuras, tipos, etc. y corremos el riesgo de que tengan el
mismo nombre de alguna de nuestras propias funciones o variables dentro del programa que
se est creando, eso puede provocar errores difciles de detectar y corregir, es el mismo
problema que se tiene que resolver en proyectos grandes en que hay varios programas, y que
tienen que prestarle atencin quienes quieren hacer sus propias libreras, era un problema que
se vena arrastrando desde C, pero C++ ha resuelto el problema de raz.
sta lnea evita que tengamos que escribir std:: antes de cada cin o cout. La lnea using
namespace std; traducira algo as como usando los nombres del mbito estndar.

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).

6. char cadena[50], cadenaf[50]={0}, *parte;


La palabra char se usa para decirle al sistema que se van a declara variables de tipo
carcter (character). En el ejemplo se declaran 3 variables. Un vector de 50 posiciones llamado
cadena, un vector de 50 posiciones llamado cadenaf el cual empieza con todas sus
posiciones almacenando el valor cero, y un apuntador de cadena llamado *parte. Un
apuntador es otra forma de representar un vector, en C se usan apuntadores cuando es
necesario determinar el punto exacto en la memoria del equipo en donde se va a gurdar una
informacin, el apuntador almacena la direccin de memoria. El apuntador se reconoce por el
asterisco antes del nombre.

7. int c, len, pal=0;


La palabra int nos indica que se van a declarar variables enteras, en el ejemplo estas
variables son len, c y pal, sta ltima variable inicia con el valor cero.

8. cout<<"Introduce un palndromo: ";


En esta lnea, la orden cout imprime en la pantalla el mensaje "Introduce un palndromo: "

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);

El lenguaje de programacin C ofrece una llamada en la biblioteca estndar de C denominada


strcat(). Esta funcin permite aadir un bloque de memoria a otro. Los dos bloques deben
terminar con un carcter nulo. Como en C las cadenas de caracteres no son tipos de datos en
s mismos, strcat aade una cadena a otra pasndole dos punteros a los bloques de memoria
reservados. El nombre strcat es una abreviacin de "string concatenate" (concatenacin de
cadena). Por ejemplo:
char str1[100] = " Hola,";
strcat (str1, " mundo !\n");
printf (str1);

/* 100: se reserva espacio extra */


/* muestra " Hola, mundo !" en la salida estndar */

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);

La funcin strlen() cuenta la cantidad de caracteres almacenados en el vector que se


escribe dentro del parntesis. En ste ejemplo, ese vector es cadenaf, el resultado del
largo de la cadena ser pasado a la variable entera len.

14.

for(c=0; c<=len-1; c++)

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.

if(cadenaf[len-1-c] == cadenaf[c]) pal++;

El condicional if realiza una tarea nica y exclusivamente si la condicin dentro del


parntesis se cumple. En ste caso la condicin dice que si el contenido del vector cadenaf
en la posicin len-1-c (es decir la ltima posicin menos uno y menos el valor de c) es igual
al contenido del mismo vector cadenaf en la posicin indicada por c, entonces se realizar la
tarea de ir aumentando la variable entera pal en uno (pal++).
Es decir, el condicional if est comparando dos posiciones diferentes del mismo vector, inicia
comparando la primera y la ltima posicin. Si el contenido es el mismo en las dos posiciones,
la variable entera pal que est sirviendo de contador llevara la suma de las veces en las que
las comparaciones son iguales. Como el if se encuentra dentro del for de la lnea 14, esto
quiere decir, que cada vez que se realice un ciclo for, aumentar el valor de la variable entera
c y por tanto en cada ciclo se comparan 2 posiciones diferentes del vector, una posicin de

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.

Cierra el ciclo for.

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.

Else cout<<"No es palndromo";

Cuando la condicin de un if no se cumple, el if no puede realizar tarea, pero el else que le


sigue s. Es decir, el else realiza una tarea en el caso de que el if anterior no se cumpla.
En ste ejemplo el else coloca en pantalla el mensaje "No es palndromo!" (Tarea que hace
la orden cout<<), si el if de la lnea 18 no se cumple.

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.

Fin del main(), y en ste caso fin del programa.

También podría gustarte