Professional Documents
Culture Documents
Manual de Progamacion en C++
Manual de Progamacion en C++
TEXTO: PROGRAMACIÓN
ESTRUCTURADA EN C++
HUANCAYO – PERÚ
2011
UNIDAD I
CONCEPTOS BÁSICOS
A continuación se desarrolla algunos conceptos básicos e importantes,
para una buena comprensión de las técnicas de programación que se
pretende con ello realizar un seguimiento y dominar.
Por otro lado es importante saber algo sobre datos e información. Aunque
en un diccionario común y corriente los términos “datos” e “información” son
sinónimos; en el campo de la informática es necesario diferenciarlos, pues,
“datos” se refiere a la representación de algún concepto (números enteros,
números reales, cadenas, etc.), mientras que “información” significa “datos”
procesados y organizados (por ejemplo números ordenados).
2
1.2 DEFINICIÓN DE ALGORITMO.
Algunos ejemplos :
* Diseñe un algoritmo para cambiar una llanta a un coche.
1. Inicio.
2. Traer la gata.
3. Levantar el coche con la gata.
4. Aflojar tornillos de las llantas.
5. Sacar los tornillos de las llantas.
6. Quitar la llanta.
7. Poner la llanta de repuesto.
8. Poner los tornillos.
9. Ajustar los tornillos.
10. Bajar la gata.
11. Fin
3
5. Compara MAYOR con NUM3 y seleccionar el mayor; si los dos enteros
son iguales, seleccionar el MAYOR. Denominar a este número
MAYOR.
6. Presentar el valor MAYOR (salida).
4
o código máquina. El código máquina es el conocido código
binario.
Son más fáciles de utilizar que los lenguajes máquina, pero al igual
que ellos, dependen de la máquina en particular. El lenguaje de bajo
nivel por excelencia es el ensamblador. Las instrucciones en
lenguaje ensamblador son instrucciones conocidas como
nemotécnicos. Por ejemplo, nemotécnicos típicos de operaciones
aritméticas son: en inglés ADD, SUB, DIV, etc.; en español SUM,
RES, DIV, etc.
5
sólo las técnicas de programación, sino también el conocimiento del
interior de la máquina.
Estos lenguajes son los más utilizados por los programadores. Están
diseñados para que las personas escriban y entiendan los programas
de un modo mucho más fácil que los lenguajes máquina y
ensambladores. Un programa escrito en lenguaje de alto nivel es
independiente de la máquina (las instrucciones no dependen del
diseño del hardware o de una computadora en particular), por lo que
estos programas son portables o transportables. Los programas
escritos en lenguaje de alto nivel pueden ser ejecutados con poca o
ninguna modificación en diferentes tipos de computadoras. A este
nivel se encuentran los lenguajes de programación como Pascal, Ada,
Turbo C++, Visual Basic, Visual C++, etc..
6
UNIDAD II
METODOLOGÍA PARA LA SOLUCIÓN DE
PROBLEMAS POR MEDIO DE COMPUTADORAS
Para resolver un problema utilizando sistemas de cómputo, debe seguirse
una serie de pasos que permiten avanzar por etapas bien definidas hacia la
solución del problema. Estas etapas son las siguientes:
- Identificación y definición del problema.
- Análisis de los datos.
- Diseño de la solución (diseño del algoritmo).
- Codificación.
- Prueba y depuración.
- Documentación.
- Mantenimiento.
7
Ejemplo:
8
Un diagrama de flujo es un diagrama que utiliza símbolos estándar
mostrados en la Figura 2.1 y los pasos del algoritmo se unen con líneas de
flujo, que indican la secuencia que se deben ejecutar.
Símbolo de conector, el
Sirve para simbolizar cual sirve para enlazar
una decisión múltiple dos partes cualesquiera
de un diagrama de flujo a
través de un conector en
la salida y entrada.
Líneas conectoras y
líneas indicadoras de Llamadas a
dirección o línea de flujo subprogramas (funciones
de acuerdo al sentido y procedimientos)
de la flecha
2.4 CODIFICACIÓN.
Se refiere a la obtención de un programa definitivo que pueda ser
comprensible para la máquina. Incluye una etapa que se reconoce como
compilación.
Programa Fuente
9
Programa Ejecutable
2.6 DOCUMENTACIÓN.
2.7 MANTENIMIENTO.
10
UNIDAD III
INTRODUCCIÓN A LA PROGRAMACIÓN
ESTRUCTURADA APLICADA A C++
3.1 ELEMENTOS BÁSICOS DE UN PROGRAMA.
11
conocidas se encuentra conio.h, stdio.h, iostream.h; math.h, etc.;
cada uno de los cuales debe ir precedido de #include; por ejemplo:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
float a,b,mayor;
int d,e;
12
g) Inicio del cuerpo del programa principal.
Los datos son los elementos de información con los que trabaja un
programa. Es necesario tener en cuenta los tipos de datos de las
variables que se declaran para las operaciones que se realicen
dentro del programa. La clasificación de los tipos de datos en C++
se desarrollan a continuación:
RANGO TAMAÑO
TIPO
desde … hasta (byte)
Int -2 147 483 648 a 2 147 483 647 4
unsigned int 0 a 4 294 967 295 4
short int -32 768 a 32 767 2
unsigned short int 0 a 65 535 2
13
const short int nota_max=20; // Declaración de una constante.
short int a,b; // Declaración de las variables a y b tipo entero.
unsigned short int mayor, suma;
RANGO TAMAÑO
TIPO
desde … hasta (byte)
38 38
Float -3,40282 x 10 a 3,40282 x 10 4
308 308
Double -1,797 x 10 a 1,797 x 10 8
bool a,c;
14
Pero se debe aclarar que cuando se desea asignar un valor a una
variable en el diseño de un algoritmo muchos autores utilizan el
símbolo flecha hacia atrás (←), por ejemplo:
15
El siguiente listado es un programa en C++, en el cual se observa el
uso correcto de los operadores aritméticos, y en algunos casos los
cuidados que hay que tener cuando se trabaja con dichos
operadores y los tipos de datos.
z1=x*y;
cout<<"la multiplicación es: "<<z1<<endl; //imprime 176
z1=x/y;
z2=x/y;
z3=x/6.0;
cout<<"la división es: "<<z1<<endl; //imprime 2
cout<<"la división es: "<<z2<<endl; //imprime 2
cout<<"la división es: "<<z3<<endl; //imprime 2.75
z1=x%y;
cout<<"el residuo es: "<<z1<<endl; //imprime 6
}
16
3.1.5 Operaciones de Entrada y Salida de Datos.
17
b) Se deben poner comentarios que describen el propósito de un
programa o segmentos de programa. Los comentarios en C++ se
realiza utilizando dos barras continuas (// comentario).
cout<<”Ingrese el valor de a: “;
cin>>a;
cout<<”Ingrese el valor de b: “;
cin>>b;
− b ± b 2 − 4ac
x=
2a
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
Se debe entender que una estructura secuencial puede tener una sola
instrucción o puede tener un grupo de instrucciones delimitados por un inicio
y un fin. A continuación se pueden observar el pseudocódigo, el diagrama
de flujo y el diagrama N-S (Nassi-Schneiderman) de una estructura
secuencial.
18
PSEUDOCÓDIGO DIAGRAMA DE FLUJO DIAGRAMA N-S
Inicio Incio
Inicio
Intrucción 1. Instrucción 1
Intrucción 2.
Intrucción 3. Instrucción 1 Instrucción 2
.
. Instrucción 3
. Instrucción 2
Intrucción N :
Fin .
Instrucción 3
Instrucción N
Fin
Instrucción N
Fin
a) Operadores de relación.
Estos operadores se utilizan para expresar condiciones y describen una
relación entre dos valores. A través de los operadores de relación se
construyen condiciones que serán evaluados como VERDADERO (true) o
FALSO (false); en un programa se puede hacer comparaciones tanto con
datos numéricos (enteros y reales), con datos del tipo carácter o del tipo
19
cadena. En la siguiente tabla se observa los operadores de relación que
se usan en C++.
b) Operadores lógicos.
Los operadores lógicos sirven para hacer condiciones complejas, esto se
logra combinando con los operadores de relación; al igual que el caso
anterior el resultado será VERDADERO (true) o FALSO (false). En la
siguiente tabla se puede observar los operadores lógicos que existen en
C++.
Operador
Significado
Lógico en C++
&& Y (conjunción)
|| O (disyunción)
! No (Negación)
Si (condición) Entonces
Inicio
Instrucción 1. F Condición
Instrucción 2. Condición
Instrucción 3. Acción V V F
:
. V Instrucción 1.
Instrucción N. Instrucción 2.
Fin Acción V :
.
Instrucción N.
20
En este caso el grupo de instrucciones (acciónV) sólo se ejecutan si la
condición es verdadera mientras que si la condición es falsa no se ejecuta
nada simplemente salta a la siguiente instrucción de la estructura
condicional.
if (condición) sentencia1;
if (condición)
{
instrucción1;
instrucción2;
instrucción3; AcciónV
M
instrucciónN;
}
Si (condición) Entonces
Inicio
Instrucción 1. V F
Instrucción 2. Condición Condición
Instrucción 3. V F
AcciónV
: Acción V Acción F Instrucción 1. Instrucción 1.
. Instrucción 2. Instrucción 2.
Instrucción N. : :
Fin . .
sino Instrucción N. Instrucción N
Inicio
Instrucción 1.
Instrucción 2.
Instrucción 3.
AcciónF
:
Instrucción N.
Fin
21
Otra forma de representar esta estructura en C++ es:
if (condición)
{
instrucción1;
instrucción2;
instrucción3; Acción V
M
instrucciónN;
}
else
{
instrucción1;
instrucción2;
instrucción3; Acción F
M
instrucciónN;
};
Valor 1 Valor N V
Expresión Expresión=V1 Acción1
Valor 2 Valor 3 F
V
Acción 1 Acción 2 Acción 3 ... Acción N Expresión=V2 Acción2
V
Expresión=V3 Acción3
Acción Otro
22
- Diagrama N-S.
Expresión
Expresión
V1 V2 V3 V4 ... VN Otro
V1 V2 V3 V4 ... VN Otro
A1 A2 A3 A4 ... AN AO
A1 A2 A3 A4 ... AN AO
- Pseudocódigo.
switch (variable)
{ case valor1:
instrucción1;
instrucción2;
instrucción3; Grupo1
M
instrucciónN;
break;
case valor2:
instrucción1;
instrucción2;
instrucción3; Grupo2
M
instrucciónN;
break;
M
default:
instrucción1;
instrucción2;
instrucción3; GrupoD
M
instrucciónN;
};
23
Ejemplos aplicativos:
1) Programa en el cual al ingresar un número del
1 al 5 presente la vocal correspondiente.
#include<iostream.h>
#include<conio.h>
main()
{
int numero;
cout<<"ingrese numero del 1 al 5: ";cin>>numero;
switch(numero)
{
case 1:cout<<"a";break;
case 2:cout<<"e";break;
case 3:cout<<"i";break;
case 4:cout<<"o";break;
case 5:cout<<"u";break;
defaul:cout<<"Solo del 1 al 5";
}
getch();
}
a) Contador.
Operador en
Operación Ejemplo Resultado
C++
++ Incremento x++ x=21
-- Decremento x-- x=19
b) Acumulador.
24
común utilizar para totalizar por ejemplo en sumas, promedios, etc.. Los
siguientes son ejemplos de acumuladores en C++.
suma=10;
suma=suma+20;
suma=suma+50;
Mientras (condición)
Inicio
Instrucción 1. F Mientras (Condición)
Instrucción 2. Condición
Instrucción 3. Acción V
: Instrucción 1
. V
Instrucción N. Instrucción 2.
Fin Acción V .
:
Instrucción N.
25
el cuerpo del bucle se repite hasta que la condición sea falsa; es decir
esta estructura es similar al anterior con la única diferencia que la
condición se evalúa al final del bucle. En el siguiente cuadro se pueden
observar el pseudocódigo, el diagrama de flujo y su diagrama N-S; de
este tipo de estructura repetitiva.
Repetir
Instrucción 1.
Instrucción 2. Repetir Instrucción 1
Instrucción 3. Acción V Acción V
: Instrucción 2
.
Instrucción N. :
Hasta (condición) V
Condición Instrucción N
F Hasta (condición)
do
{ instrucción1;
instrucción2;
instrucción3;
M
instrucciónN;
} while (condición);
Esta estructura se inicia con un “contador” que tiene un valor inicial (Vi) y
un valor final (Vf) y que en cada iteración se incremente generalmente de
uno en uno; aunque dependiendo del lenguaje de programación se puede
incrementar de dos en dos o de tres en tres, etc.; entonces la cantidad de
veces que es ejecuta el bucle será mientras que el valor actual del
“contador” sea menor o igual al valor final (Vf). En esta estructura el
incremento en cada iteración es automática. En el siguiente cuadro se
pueden observar el pseudocódigo, el diagrama de flujo y su diagrama
N-S; de este tipo de estructura repetitiva.
26
PSEUDOCÓDIGO DIAGRAMA DE FLUJO DIAGRAMA N-S
Instrucción N
for
(variable=Vi;variable<=Vf;variable=variable+N);
{ instrucción1;
instrucción2;
instrucción3;
M
instrucciónN;
};
unsigned short int n,i; unsigned short int n,i; unsigned short int n,i;
int suma,dato; int suma,dato; int suma,dato;
27
UNIDAD IV
SUBPROGRAMAS
FUNCIONES Y PROCEDIMIENTOS
Una estrategia realmente útil para la solución de problemas complicados es
dividirlos en subproblemas más simples y estos a su vez en subproblemas más
simples aún; hasta conseguir que la solución total del problema sea la unión de
todas las soluciones de los problemas pequeños; estos subproblemas se
conocen como módulos. Esta forma de programación se le conoce como
diseño descendente y la estrategia de programación que se utiliza se llama
“divide y vencerás”. En los lenguajes de programación (cualquiera que fuera)
los módulos se conocen como subprogramas (funciones y procedimientos).
28
// funcion valor absoluto
#include <iostream.h>
#include <math.h>
#include<conio.h>
int a,b;
float c,d;
main()
{
cout<<"Ingrese un numero entero negativo: ";
cin>>a;
cout<<"Ingrese un numero real negativo: ";
cin>>c;
b=abs(a);
cout<<"El valor absoluto de "<<a<<" es "<<b<<endl;
d=fabs(c);
cout<<"El valor absoluto de "<<c<<" es "<<d<<endl;
getch();
}
float a,b;
main()
{
cout<<"Ingrese un numero real entre -1 y +1: ";
cin>>a;
b=asin(a);
cout<<"El arco seno de "<<a<<" es "<<b<<" radianes"<<endl;
b=acos(a);
cout<<"El arco coseno de "<<a<<" es "<<b<<" radianes"<<endl;
}
float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=atan(a);
cout<<"El arco tangente de "<<a<<" es "<<b<<" radianes"<<endl;
}
29
//uso de función ceil
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=ceil(a);
cout<<"El mayor entero de "<<a<<" es "<<b<<endl;
}
float a,b;
main()
{
cout<<"Ingrese un numero en radianes: ";
cin>>a;
b=sin(a);
cout<<"El seno de "<<a<<" es "<<b<<endl;
b=cos(a);
cout<<"El coseno de "<<a<<" es "<<b<<endl;
}
float a,b;
30
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=exp(a);
cout<<"El resultado es "<<b<<endl;
}
float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=log(a);
cout<<"El logaritmo natural de "<<a<<" es "<<b<<endl;
b=log10(a);
cout<<"El logaritmo en base 10 de "<<a<<" es "<<b<<endl;
}
float a,b,c;
main()
{
cout<<"Ingrese dos numeros reales: ";
cin>>a>>b;
c=pow(a,b);
cout<<a<<" elevado a la "<<b<<" es "<<c<<endl;
}
31
j) Función tan. Esta función devuelve el valor de la tangente de un
número expresado en radianes; el argumento tiene que ser del tipo
real y devuelve del tipo real. Un ejemplo se muestra a continuación.
//uso de función tan
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero en radianes: ";
cin>>a;
b=tan(a);
cout<<"La tangente de "<<a<<" es "<<b<<endl;
}
4.2.1 Funciones.
32
dos números reales que se ingresan desde el teclado. Para ello se
debe definir y desarrollar la función “maximo”.
Datos de Salida:
- mayor: Representa al mayor de los dos números ingresados (tipo
real).
PROGRAMA PRINCIPAL
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S
Inicio
Incio
Inicio
Leer a,b.
Leer: a,b
mayor=maximo(a,b) *Uso de la
función Leer: a,b
mayor=maximo(a,b)
maximo.
Escribir: mayor
Escribir: mayor
Fin
mayor=maximo(a,b)
Fin
Escribir:
mayor
Fin
FUNCIÓN maximo
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S
Retornar: max
33
También es importante saber que la forma de declarar y desarrollar
una función depende del lenguaje de programación que se está
utilizando para la programación, por ejemplo en C++ la forma de
declarar y desarrollar la función maximo se muestra en el siguiente
ejemplo.
// listado del ejemplo que se utiliza la función maximo
#include <iostream.h>
float maximo(float x,float y); // declaración de la función “maximo”.
main()
{
float a,b,mayor;
cout<<"Ingrese dos numeros: ";
cin>>a>>b;
mayor=maximo(a,b); // forma de usar la función “maximo”.
cout<<"El mayor es: "<<mayor<<endl;
}
float maximo(float x,float y) // desarrollo de la función “maximo”
{
float max; // max es un variable local.
if(x>y)
max=x;
else
max=y;
return max;
}
4.2.2 Procedimientos.
Datos de Salida:
- mayor: Representa al mayor de los dos números ingresados (tipo
real).
34
PROGRAMA PRINCIPAL
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S
Inicio
Incio
Inicio
Leer a,b.
Leer: a,b
maximop(a,b,mayor) *Uso del
proced. Leer: a,b
maximop(a,b,mayor)
maximop.
Escribir: mayor
Escribir: mayor
Fin
maximop(a,b,mayor)
Fin
Escribir:
mayor
Fin
PROCEDIMIENTO maximop
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S
Retornar
main()
{
float a,b,mayor;
35
cout<<"Ingrese dos numeros: ";
cin>>a>>b;
maximop(a,b,mayor); // forma de llamar al procedimiento "máximop".
cout<<"El mayor es: "<<mayor<<endl;
}
void maximop(float x,float y,float &max) // desarrollo del proced. "maximop".
{
if(x>y) max=x;else max=y;
}
Por otro lado una variable local es aquella que se declara dentro del
programa principal o dentro del subprograma y sólo se puede usar en
la parte donde ha sido declarada y que se borra de memoria en el
momento que termina el programa o subprograma.
36
4.2.4 Paso de parámetros a funciones y procedimientos
a) Por valor.
a=maximo(m,n)
a=maximo(2,n)
a=maximo(m,4.5)
a=maximo(2,4.5)
b) Por referencia.
37
UNIDAD V
ARREGLOS EN C++
Hasta el momento sólo se han tratado programas con tipos de datos simples
predefinidos en C++ (enteros y reales), sin embargo C++ proporciona al
programador la posibilidad de crear unos tipos de datos estructurados. Un tipo
de dato estructurado es aquel que se compone de más de un dato simple como
es el caso de los arreglos, los registros y archivos; estos dos últimos lo
trataremos más adelante; por ahora nos concentraremos en el estudio de los
arreglos.
38
//ejemplo de arreglos unidimensionales
#include <iostream.h>
void main()
{
int a[100]; //se declara un arreglo unidimensional de 100 elementos
int n,sum,i;
cout<<"ingrese el número de datos: ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"dato "<<i<<" : ";
cin>>a[i];
};
sum=0;
for(i=1;i<=n;i++)
sum=sum+a[i];
cout<<"suma="<<sum<<endl;
}
main()
{
int a[50],n,s;
cout<<"ingrese el número de datos: ";
cin>>n;
leer(a,n);
s=suma(a,n);
cout<<"suma="<<s<<endl;
}
39
5.2. ARREGLOS BIDIMENSIONALES.
void main()
{
int A[100][100],B[100][100],C[100][100];
int m,n,i,j;
cout<<"Ingrese número de filas: ";
cin>>m;
cout<<"Ingrese número de columnas: ";
cin>>n;
cout<<endl<<"Ingrese datos de la matriz A:"<<endl;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
cout<<"Ingrese elemento ("<<i<<";"<<j<<"): ";
cin>>A[i][j];
};
cout<<endl<<"Ingrese datos de la matriz B:"<<endl;
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
40
cout<<"Ingrese elemento ("<<i<<";"<<j<<"): ";
cin>>B[i][j];
};
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
C[i][j]=A[i][j]+B[i][j]; //Realiza de la suma elemento por elemento
3 − 2 − 4
A=
1 0 2
2 1 − 2
B=
2 − 2 0
La suma resultante debe salir:
5 − 1 − 6
C=
3 − 2 2
Pero el programa anterior sería mejor si elaboramos un procedimiento
“leer_matriz” y un procedimiento “suma_matriz” y otro procedimiento
“imprimir_matriz”; entonces la codificación en C++ sería de la siguiente
manera:
// Suma de dos matrices
#include <iostream.h>
#include <conio.h>
void leer_matriz(int x[100][100],int y,int z);
void suma_matriz(int x[100][100],int y[100][100],int z[100][100],int f,int c);
void imprimir_matriz(int x[100][100],int y,int z);
void main()
{
int A[100][100],B[100][100],C[100][100];
int m,n,i,j;
cout<<"Ingrese número de filas: ";
cin>>m;
cout<<"Ingrese número de columnas: ";
cin>>n;
cout<<endl<<"Ingrese datos de la matriz A:"<<endl;
leer_matriz(A,m,n);
cout<<endl<<"Ingrese datos de la matriz B:"<<endl;
leer_matriz(B,m,n);
41
suma_matriz(A,B,C,m,n);
cout<<endl<<"La matriz A es: "<<endl;
imprimir_matriz(A,m,n);
cout<<endl<<"La matriz B es: "<<endl;
imprimir_matriz(B,m,n);
cout<<endl<<"La matriz suma es: "<<endl;
imprimir_matriz(C,m,n);
getch();
}
void leer_matriz(int x[100][100],int y,int z)
{
int i,j;
for (i=1;i<=y;i++)
for (j=1;j<=z;j++)
{
cout<<"Ingrese elemento ("<<i<<";"<<j<<"): ";
cin>>x[i][j];
};
}
void suma_matriz(int x[100][100],int y[100][100],int z[100][100],int f,int c)
{
int i,j;
for (i=1;i<=f;i++)
for (j=1;j<=c;j++)
z[i][j]=x[i][j]+y[i][j]; //Realiza de la suma elemento por elemento
}
void imprimir_matriz(int x[100][100],int y,int z)
{
int i,j;
for (i=1;i<=y;i++)
{
for (j=1;j<=z;j++)
cout<<x[i][j]<<" ";
cout<<endl;
};
}
42
UNIDAD VI
MANEJO DE CADENAS EN C++
Una cadena de caracteres (string) en C++ es una secuencia de caracteres que
termina con el caracter nulo (‘\0’), este carácter nulo indica el fin de una cadena
y ocurre cuando se presiona la tecla ENTER, además se debe tener en cuenta
que dicho caracter nulo también ocupa un espacio por lo que siempre se debe
añadir una unidad en la longitud de la cadena normal
char A[21],NOMBRE[31],DIN[9];
43
cin.getline(DIREC,41);
cout<<"Ingrese su edad: ";
cin>>EDAD;
cout<<"Ingrese su peso: ";
cin>>PESO;
cout<<endl<<endl;
cout<<NOMB<<" "<<DIREC<<" "<<EDAD<<" "<<PESO<<endl;
}
Si nos ponemos a analizar un poco podríamos decir que una cadena es una
estructura del tipo array de caracteres
Por ejemplo si se tiene la siguiente cadena A=“Leo Curi” la posición de cada
carácter se muestra en la siguiente tabla.
Caracteres L e o C u r i \0
Posición 0 1 2 3 4 5 6 7 8
Cada posición se indica con un subíndice, empezando del cero; por ejemplo
el caracter “u” se representaría por A[5]; en el siguiente ejemplo se muestra
una aplicación de este caso, en el cual se ingresa un cadena cualquiera de
10 caracteres (incluyendo el caracter nulo sería 11) y se imprime en orden
inverso.
for (i=0;i<10;i++)
cout<<CAD[i]<<" ";
cout<<endl;
for (i=9;i>=0;i--)
cout<<CAD[i]<<" ";
cout<<endl;
}
Para realizar operaciones con cadenas hay que usar funciones del tipo
cadena, estas se encuentran dentro del archivo de cabecera string.h (como
strcpy, strcat y strlen) y algunos dentro de stdlib.h como es el caso de la
función atof por lo que para usar dichas funciones y/o procedimientos es
necesario declararlo en la cabecera del programa con include. A
continuación se desarrollará las principales funciones y procedimientos del
tratamiento de cadenas en C++.
44
a) Procedimiento strcpy. Este procedimiento se encuentra dentro de
string.h y sirve para almacenar una cadena directamente a una variable
desde el mimo programa. Un ejemplo se muestra a continuación
//Ejemplo de aplicación usando el procedimiento strcpy
#include <string.h>
#include <iostream.h>
void main()
{
char nombre[30],direccion[40];
strcpy(nombre,"Rubén Galeas Arana"); // equivale a nombre = ”Rubén Galeas A"
strcpy(direccion,"Calle Real 356 Huancayo");
cout<<nombre<<endl;
cout<<direccion<<endl<<endl;
}
#include <string.h>
#include <iostream.h>
void main()
{
char nombre[30];
strcpy(nombre,"Rubén "); // equivale a nombre = “Rubén”
strcat(nombre," Galeas "); // equivale a nombre=nombre+” Galeas”
strcat(nombre," Arana"); // equivale a nombre=nombre+” Arana”
cout<<nombre<<endl<<endl; // imprime Rubén Galeas Arana
}
#include <string.h>
#include <iostream.h>
void main()
{
char cad[31];
strcpy(cad,"Tecnofuturo la mejor");
int L;
L=strlen(cad);
cout<<cad<<" tiene "<<L<<" caracteres"<<endl;
}
#include <string.h>
#include <iostream.h>
#include <stdlib.h>
void main()
{
char cad[31],C[15];
int A;
45
float B;
double D;
strcpy(cad,"12.45e152");
strcpy(C,"-244.545adfe45");
A=atof(cad);
cout<<A<<endl; //imprime A=0
A=atof(C);
cout<<A<<endl; //imprime A=-244
B=atof(cad);
cout<<B<<endl; //imprime B=1.#INF porque B es float
B=atof(C);
cout<<B<<endl; //imprime B=-244.545
D=atof(cad);
cout<<D<<endl; //imprime D=1.245e+153 porque B es double
D=atof(C);
cout<<D<<endl; //imprime D=-244.545
}
#include <iostream.h>
#include <string.h>
void main()
{
char NOMB[31];
char A;
int i,L,N;
cout<<"Ingrese su nombre completo: ";
cin.getline(NOMB,31);
cout<<"Ingrese letra a buscar: ";
cin>>A;
N=0;
L=strlen(NOMB);
for (i=0;i<L;i++)
if (NOMB[i]==A)
N=N+1;
cout<<"La letra "<<A<<" se repite "<<N<<" veces"<<endl;
}
#include <iostream.h>
#include <string.h>
int cadena_veces(char X[100],char Y);
void main()
{
char NOMB[31];
char A;
46
int N;
#include <iostream.h>
#include <string.h>
void izquierda(char X[100],int Y);
void main()
{
char NOMB[31];
cout<<"Ingrese su nombre completo: ";
cin.getline(NOMB,31);
izquierda(NOMB,5);
cout<<"La cadena cortada es "<<NOMB<<endl;
}
#include <iostream.h>
void main()
{
char NOMB[10][31]; //10 cadenas de 31 caracteres cada uno
int i;
for (i=1;i<=3;i++)
47
{
cout<<"Nombre"<<i<<": ";
cin.getline(NOMB[i],31);
};
for (i=1;i<=3;i++)
cout<<NOMB[i]<<endl;
}
48