You are on page 1of 48

UNIVERSIDAD NACIONAL

DEL CENTRO DEL PERÚ


FACULTAD DE INGENIERÍA
ELÉCTRICA Y ELECTRÓNICA

TEXTO: PROGRAMACIÓN
ESTRUCTURADA EN C++

Mg. RUBÉN GALEAS ARANA


Ing. Carlos Mendoza Auris

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.

1.1 EL SISTEMA DE PROCESAMIENTO DE LA INFORMACIÓN.

Una computadora es un aparato electrónico que maneja mucha información


y a altas velocidades. Entonces es importante, para un estudiante de
ingeniería, saber la manera en que se organiza la información en una
computadora y saber cómo se puede manejar y utilizar dicha información.

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

Partiendo de lo anterior podemos afirmar que un sistema de


procesamiento de información es un sistema que transforma datos brutos
en información organizada, significativa y útil, el cual se resume en la
Figura 1.1.

Entrada Sistema de procesamiento Salida


DATOS de información INFORMACIÓN

Figura 1.1. Sistema del proceso de información

Dos conceptos importantes que se deben tener en cuenta para el


procesamiento de la información son el hardware y software. El hardware
es el conjunto de componentes físicos de una computadora (CPU, disco
duro, monitor, impresora, etc.) mientras que el software es el conjunto de
programas que controlan el funcionamiento de la computadora (Windows,
Word, Excel, AutoCAD, Pascal, Turbo C++, etc.).

2
1.2 DEFINICIÓN DE ALGORITMO.

Un algoritmo se define como un conjunto de instrucciones que se realiza


paso a paso para solucionar un problema que termina en un número finito
de pasos.

Las características fundamentales que debe cumplir todo algoritmo son:


- Debe ser preciso e indicar el orden de realización de cada paso.
- Debe ser definido, es decir, si se sigue un algoritmo dos veces, se debe
obtener el mismo resultado cada vez.
- Debe ser finito, es decir, si se sigue un algoritmo, se debe terminar en
algún momento.

La definición de un algoritmo debe describir tres partes: Entrada, Proceso


y Salida.

1.3 ALGORITMOS COTIDIANOS.

Se refiere a todos aquéllos algoritmos que ayudan a resolver problemas


cotidianos y que los hacemos casi sin darnos cuenta de que estamos
siguiendo una metodología para resolverlos.

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

* Determine el mayor de tres números enteros.


1. Comparar el primero y el segundo entero, deduciendo cuál es el mayor.
2. Comparar el mayor anterior con el tercero y deducir cuál es el mayor.
Este será el resultado.

Los pasos anteriores se pueden descomponer en otros pasos más


simples en los que se denomina refinamiento del algoritmo.

1. Obtener el primer número (entrada), denominado NUM1


2. Obtener el segundo número (entrada), denominado NUM2
3. Compara NUM1 con NUM2 y seleccionar el mayor; si los dos enteros
son iguales, seleccionar NUM1. Llamar a este número MAYOR.
4. Obtener el tercer número (entrada), y se denomina NUM3.

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

1.4 DEFINICIÓN DE LENGUAJES ALGORÍTMICOS.

Los algoritmos pueden describirse utilizando diversos lenguajes. Cada uno


de estos lenguajes permiten describir los pasos con mayor o menor detalle.

La clasificación de los lenguajes para algoritmos puede enunciarse de la


siguiente manera:

1.4.1 Lenguaje Natural

Es aquél que describe en español, para nuestro caso, los pasos a


seguir utilizando un vocabulario cotidiano. Se le conoce como
lenguaje jerga cuando se utilizan términos especializados de una
determinada ciencia, profesión o grupo.

1.4.2 Lenguaje de Diagrama de Flujo

Es aquél que se vale de diversos símbolos para representar las ideas


o acciones a desarrollar. Es útil para organizar las acciones o pasos
de un algoritmo pero requiere de etapas posteriores para
implementarse en un sistema de cómputo.

1.4.3 Lenguaje de Programación de Algoritmos

Es aquél que se utiliza para introducir en la computadora un algoritmo


específico. Se les conoce también como Lenguaje de
Programación.

1.5 LENGUAJE DE PROGRAMACIÓN.

Es un conjunto de palabras, símbolos y reglas sintácticas mediante los


cuales puede indicarse a la computadora los pasos a seguir para resolver
un problema.

Los lenguajes de programación pueden clasificarse por diversos criterios,


siendo el más común su nivel de semejanza con el lenguaje natural, y su
capacidad de manejo de niveles internos de la máquina.

1.5.1 Lenguaje Máquina

Son aquéllos que están escritos en lenguajes directamente inteligibles


por la máquina (computadora), ya que sus instrucciones son cadenas
binarias (cadenas o series de caracteres de dígitos 0 y 1) que
especifican una operación y las posiciones (dirección) de memoria
implicadas en la operación se denominan instrucciones de máquina

4
o código máquina. El código máquina es el conocido código
binario.

- Ventajas del lenguaje máquina


Posibilidad de cargar (transferir un programa a la memoria) sin
necesidad de traducción posterior, lo que supone una velocidad de
ejecución superior a cualquier otro lenguaje de programación.

- Desventajas del Lenguaje Máquina


Tiene dificultad y lentitud en la codificación, gran dificultad para
verificar y poner a punto los programas y los programas sólo son
ejecutables en el mismo procesador.

En la actualidad, las desventajas superan a las ventajas, lo que hace


prácticamente no recomendables.

1.5.2 Lenguajes de Bajo Nivel

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.

Una instrucción típica de suma sería:


ADD M, N, P

Esta instrucción significa "sumar el contenido en la posición de


memoria M al número almacenado en la posición de memoria N y
situar el resultado en la posición de memoria P". Evidentemente es
más sencillo recordar la instrucción anterior con un nemotécnico que
su equivalente en código máquina.

0110 1001 1010 1011

Ventajas del lenguaje ensamblador frente al lenguaje máquina


- Mayor facilidad de codificación y, por tanto, mayor su velocidad de
cálculo.

Desventajas del lenguaje ensamblador


- Dependencia total de la máquina lo que impide la transportabilidad
de los programas (posibilidad de ejecutar un programa en diferentes
máquinas). Por ejemplo el lenguaje ensamblador del PC es distinto
del lenguaje ensamblador del Apple Machintosh.

- La formación de los programadores es más compleja que la


correspondiente a los programadores de alto nivel, ya que exige no

5
sólo las técnicas de programación, sino también el conocimiento del
interior de la máquina.

Los lenguajes ensamblador tienen sus aplicaciones muy reducidas, se


centran básicamente en aplicaciones de tiempo real, control de
procesos y de dispositivos electrónicos.

1.5.3 Lenguajes de Alto Nivel

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

Ventajas de los lenguajes de alto nivel


- El tiempo de formación de los programadores es relativamente corto
comparado con otros lenguajes.
- La escritura de programas se basa en reglas sintácticas similares a
los lenguajes humanos. Nombres de las instrucciones tales como
READ, WRITE, PRINT, OPEN, etc.
- Las modificaciones y puestas a punto de los programas son más
fáciles.
- Reducción del costo de los programas.
- Transportabilidad.

Desventajas de los lenguajes de alto nivel


- Incremento del tiempo de puesta a punto, al necesitarse diferentes
traducciones del programa fuente para conseguir el programa
definitivo.
- No se aprovechan los recursos internos de la máquina que se
explotan mucho mejor en lenguajes máquina y ensambladores.
- Aumento de la ocupación de memoria.
- El tiempo de ejecución de los programas es mucho mayor.

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.

2.1 IDENTIFICACIÓN Y DEFINICIÓN DEL PROBLEMA.

Todo problema se inicia con la identificación y definición del problema, esta


parte consta en sí por el enunciado del problema, el cual debe ser claro y
completo. Es importante que conozcamos exactamente "que se desea
obtener al final del proceso"; mientras esto no se comprenda no puede
pasar a la siguiente etapa.

Para poder definir con precisión el problema se requiere que las


especificaciones de entrada y salida sean descritas con detalle ya que esto
es un requisito para lograr una solución eficaz.

2.2 ANÁLISIS DE LOS DATOS.

Una vez que el problema ha sido definido y comprendido, deben analizarse


los siguientes aspectos:
- Los resultados esperados.
- Los datos de entrada disponibles (analizar los datos de entrada)
- Herramientas a nuestro alcance para manipular los datos y alcanzar un
resultado (fórmulas, tablas, accesorios diversos).

7
Ejemplo:

Si el problema consiste en determinar el área de un círculo y la longitud de


la circunferencia; la definición del problema sería leer el radio del círculo y
calcular e imprimir la superficie y longitud de la circunferencia.

Análisis de los datos: Las entradas de datos en este problema se


concentran en el radio del círculo. Dado que el radio puede tomar cualquier
valor dentro del rango de los números reales, el tipo de dato radio debe ser
real. Las salidas serán dos variables: superficie y circunferencia que
también serán de tipo real. En conclusión sería:

Entradas: Radio del círculo (variable radio).


Salidas: Superficie del círculo (variable area).
Circunferencia del círculo (variable circunferencia).
Variables: radio, area, circunferencia tipo real.

2.3 DISEÑO DE LA SOLUCIÓN (Diseño del Algoritmo).

En primer lugar es necesario saber que una computadora por si sola no


tiene capacidad para solucionar problemas, entonces para que una
computadora pueda solucionar algún problema se le tiene que proporcionar
todos los pasos que se tienen que seguir para solucionar el problema; esos
pasos constituyen el algoritmo.

En el diseño del algoritmo es recomendable tener en cuenta que cuando se


trata de problemas aparentemente complejos, una forma eficaz de
resolverlos es dividirlos en subproblemas más simples y estos a su vez en
sub 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
diseñar un algoritmo se le conoce como diseño descendente y la
estrategia que se utilizó se llama divide y vencerás. Adicionalmente a lo
anterior en el diseño de algoritmos es necesario saber que en una primera
descripción de los pasos, algunos quedan muy ambiguos o incompletos lo
cual conlleva a revisar una segunda o tercera vez hasta que todos los pasos
sean lo más claro posible; a esto se le conoce como refinamiento de pasos.
En el Cuadro 2.1 se muestra el diseño de un algoritmo simple y un algoritmo
refinado, el cual se refiere al ejemplo anterior del área y longitud de la
circunferencia.

Algoritmo Simple Algoritmo Refinado


1) Leer radio. 1) Leer radio.
2) Calcular área. 2) area=3.141592*radio*radio
3) Calcular longitud. 3) longitud=2*3.141592*radio
4) Escribir resultados. 4) Imprimir area y longitud.
Cuadro 2.1

Por otro lado en el diseño de algoritmos se tiene dos herramientas


importantes que se utilizan: el pseudocódigo y los diagramas de flujo.

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 Descripción Símbolo Descripción


Representa al inicio y Representa entrada o
final de un programa salida de datos
Se utiliza para realizar Símbolo de decisión. Se
procesos de cálculo o utiliza con operaciones
cambio de valor de las SI lógicas y en comparación
variables de variables.
NO

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

Figura 2.1. Símbolos gráficos para elaborar los diagramas de flujo.

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.

Si la codificación original se realizó en papel, previo a la compilación deberá


existir un paso conocido como transcripción.

Figura 2.2. Proceso de codificación de un programa desde un algoritmo.

Programa Fuente

Este programa está escrito en un lenguaje de programación. (pascal,


C++,Visual Fox, Visual Basic, etc). Además que es entendible por el
programador.

9
Programa Ejecutable

Este programa está en lenguaje de máquina y que sólo es entendible por la


máquina.

2.5 PRUEBA Y DEPURACIÓN.


Una vez que se ha obtenido el programa ejecutable, éste es sometido a
prueba a fin de determinar si resuelve o no el problema planteado en forma
satisfactoria.

Las pruebas que se le aplican son de diversa índole y generalmente


dependen del tipo de problema que se está resolviendo. Comúnmente se
inicia la prueba de un programa introduciendo datos válidos, inválidos e
incongruentes y observando como reacciona en cada ocasión.

El proceso de depuración consiste en localizar los errores y corregirlos en


caso de que estos existan. Si no existen errores, puede entenderse la
depuración como una etapa de refinamiento en la que se ajustan detalles
para optimizar el desempeño del programa.

2.6 DOCUMENTACIÓN.

Debido a que el programa resultante en esta etapa se encuentra totalmente


depurado (sin errores), se procede a la utilización para resolver problemas
del tipo que dio origen a su diseño, pero en vista de que esta utilización no
podrá ser supervisada en todas las ocasiones por el programador, debe
crearse un manual o guía de operación que indique los pasos a seguir
para utilizar el programa.

2.7 MANTENIMIENTO.

Se refiere a las actualizaciones que deban aplicarse al programa cuando las


circunstancias así lo requieran. Este programa deberá ser susceptible de
ser modificado para adecuarlo a nuevas condiciones de operación.

Cualquier actualización o cambio en el programa deberá reflejarse en su


documentación.

10
UNIDAD III
INTRODUCCIÓN A LA PROGRAMACIÓN
ESTRUCTURADA APLICADA A C++
3.1 ELEMENTOS BÁSICOS DE UN PROGRAMA.

Cuando se estudia las técnicas de programación se debe tener en cuenta


que en programación es necesario diferenciar entre el diseño del algoritmo
y su implementación en un lenguaje de programación específico (por
ejemplo en Pascal o C++); el diseño del algoritmo, como se dijo
anteriormente, consiste en identificar paso a paso la secuencia para la
solución de un problema y dicha secuencia de pasos se puede
representarlo mediante un diagrama de flujo, un diagrama N-S
(Nassi - Schneiderman) o pseudocódigo; este último tiene la ventaja de usar
un lenguaje natural para identificar el desarrollo del algoritmo usando
palabras como: inicio, fin, leer, escribir, si-entonces-sino,
mientras-fin_mientras, repetir-hasta, etc.. El pseudocódigo otorga la ventaja
al programador de sólo concentrarse en la lógica y en las estructuras de
control y no preocuparse de las reglas ni sintaxis que todo lenguaje de
programación tiene. A continuación desarrollaremos los elementos básicos
de un programa aplicado al lenguaje de programación C++.

3.1.1 Estructura de un Programa en C++.


a) Sección de cabecera del programa.

En esta sección es recomendable poner a través de un comentario


y en forma resumida, qué es lo que el programa va ha realizar; para
realizar comentarios en C++ se utiliza dos slash juntos (//); por
ejemplo:

// Programa para determinar el costo total a pagar de una factura.

Otro ejemplo podría ser:

// Programa para determinar el promedio de notas.

b) Sección de inclusión de unidades.


En esta sección se incluye todas las unidades del C++ que depende
del tipo de programa que se está haciendo; entre las unidades más

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>

c) Sección de declaración de funciones y procedimientos.

En esta sección se debe hacer sólo la declaración de funciones y


procedimientos que se conocen como subprogramas que se verán
más adelante; pero como ejemplo podría declarar lo siguiente:
void maximo(float x,float y,float &max) // declaración del procedimiento “maximo”.
float minimo(float x,float y); // declaración de la función “minimo”.

d) Sección de declaración de constantes.

En esta sección se declara todas las constantes que se usarán en el


programa; una constante es un identificador que no cambia de valor
durante la ejecución del programa. En C++ una constantes se
puede declarar de dos forma distintas como se muestra en el
siguiente ejemplo:

#define isc 0.02 // Impuesto selectivo al consumo 2%


#define igv 0.19 // Impuesto general a las ventas 19%

O también se puede declarar de la siguiente manera:

const float isc=0.02; // Impuesto selectivo al consumo 2%


const float igv=0.19; // Impuesto general a las ventas 19%

e) sección de declaración de nuevos tipos de datos (estructuras


de datos).

En esta sección se declara las nuevas estructuras de datos que


define el programador tales como arrays, registros, etc.; que se
verán más adelante.

f) Sección de declaración de variables globales.

En esta sección se declara todas las variables globales que se


usarán en el programa, los cuales son de distintos tipos (enteros,
reales, cadena, etc.) y estos dependen del problema que se tiene
que solucionar. Sobre lo que son variables se desarrollará
ampliamente más adelante; por ejemplo para declarar las variables
a, b y mayor del tipo entero y d y e del tipo real sería:

float a,b,mayor;
int d,e;

12
g) Inicio del cuerpo del programa principal.

Esta parte del programa del C++ es el más importante, y se inicia


con la palabra reservada main() y debe estar encerrada entre llaves
({ }). También dentro de las llaves se puede declarar variables y
constantes locales como se verá más adelante.

h) Desarrollo de las funciones y procedimientos declarados en el


ítem c).

En esta sección se debe desarrollar la parte de los subprogramas


declarados en la sección del ítem c), el cual también debe estar
entre llaves ({ }); y también dentro de dichas llaves se puede
declarar variables y constantes locales que sólo funcionan dentro
del subprograma. Más adelante se desarrollará con más detalle
esta parte del C++.

3.1.2 Constantes y Variables.

Las constantes tienen valores que no se pueden cambiar durante la


ejecución de un programa, mientras que una variable puede cambiar
durante la ejecución del programa. Durante el diseño del algoritmo es
necesario identificar las constantes y variables (de entrada y salida).
En C++, una variable es un lugar para guardar información, es un
espacio en memoria que guarda datos por un periodo determinado de
tiempo. Existen diversos tipos de datos que se pueden usar como
constantes o variables.

a) Tipos de datos en C++.

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:

- Enteros. Son aquellos números naturales negativos, positivos y el


cero de acuerdo a un rango respectivo. En la siguiente tabla se
muestran los tipos de datos enteros que son válidos en C++.

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

En C++ las constantes y variables se declaran de la siguiente


manera:

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;

- Reales. Son aquellos números reales (que aceptan punto


decimal) negativos, positivos y el cero de acuerdo a un rango
respectivo. En la siguiente tabla se muestran los tipos de datos
reales que son válidos en C++.

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

En C++ las constantes y variables del tipo real se declaran de la


siguiente manera:

const float maximo=1.20e10; // Declaración de una constante.


double a,b; // Declaración de las variables a y b real.

- Tipo carácter. Son aquellos datos en los cuales sólo se puede


almacenar un carácter especificado entre comillas simples
(apóstrofe). Una carácter (‘A’, ‘m’, ‘4’, ‘*’, etc.) se almacena en
memoria como un byte. La forma de declarar este tipo de datos
es:
char opcion, codigo;

- Tipo cadena. Son aquellos datos en los cuales se pueden


almacenar una secuencia de caracteres (‘Juan’, ‘Instituto’, etc.). La
forma de declarar este tipo de datos es:
char cad1[10],cad2[5];

- Tipo lógico. Son aquellos datos en los cuales se pueden


almacenar sólo dos valores posibles: verdadero (true) o falso
(false), pero que en C++ se almacena como 0 (false) o 1 (true). La
forma de declarar este tipo de datos es:

bool a,c;

3.1.3 Sentencias de Asignación.

La sentencia de asignación se utiliza para almacenar un valor en una


variable, el valor que se almacena depende del tipo de dato declarado
en la sección de declaración de variables. En C++ para asignar un
valor a una variable se utiliza el símbolo ‘=’. Por ejemplo

b='z'; // b es una variable del tipo char.


c=5<10; // c es una variable del tipo bool
d=100; // d es una variable del tipo int.

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:

a ← 10 // esto significa que el valor de 10 se almacena en la variable a.


b ← 30.5
codigo ← “UNCP-FIEE”

Pero en nuestro caso utilizaremos simplemente el símbolo igual (=).

a=10 // esto significa que el valor de 10 se almacena en la variable a.


b=30.5
codigo=“UNCP-FIEE”

3.1.4 Expresiones y Operaciones Aritméticas.

Una expresión es un conjunto de datos o funciones unidos por


operadores aritméticos.

a) Operadores aritméticos en C++.

Son aquellos operadores que nos permiten realizar operaciones


matemáticas y se aplican sobre objetos con valores numéricos,
como se muestra en la siguiente tabla (x=20 y y=6).

Operador Operación Ejemplo Resultado


+ Adición z=x+y z=26
- Sustracción z=x-y z=14
* Multiplicación z=x*y z=120
/ División z=x/y z=3.33333
% Residuo de división z=x%y z=2

Principalmente en C++, con respecto a los operadores aritméticos


es necesario tener en cuenta los tipos de datos con los que se está
operando y en qué tipo de dato se está almacenando; en el
siguiente cuadro se resume los tipos de datos de los operandos y el
tipo de dato que se retorna.

Operador Tipo de dato correcto


Operandos
aritmético de almacenamiento
real y real real
entero y real real
+, -,*
real y entero real
entero y entero entero o real
real y real real
entero y real real
/
real y entero real
entero y entero real y entero
real y real no es válido
entero y real no es válido
%
real y entero no es válido
entero y entero entero o real

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.

// Programa ejemplo de operadores aritméticos en C++.


#include <iostream.h>
#include <conio.h>
short int x,y;
int z1;
float z2,z3;
main()
{
x=22;y=8;
z1=x+y;
cout<<"la suma es: "<<z1<<endl; //imprime 30
z1=x-y;
cout<<"la resta es: "<<z1<<endl; //imprime 14

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
}

b) Escritura de fórmulas matemáticas en C++.

En todo lenguaje de programación las fórmulas matemáticas se


tienen que escribir en una sola línea, para ello muchas veces se
hace uso de los paréntesis para una evaluación correcta de las
operaciones. En la siguiente tabla se muestra algunos ejemplos de
la forma correcta de escribir fórmulas matemáticas en C++.

Fórmula matemática En C++


3a + 2b − 6
x= x=(3*a+2*b-6)/c
c
2a a + b
x= + x=2*a/b+(a+b)/(3*c)
b 3c
3a
x = −5a +
2−b x= -5*a+3*a/(b+(2-b)/(2*b-c))
b+
2b − c
3a b
x= + − 2a
4b a x=3*a/(4*b)+b/(c+a/b)-2*a
c+
b

16
3.1.5 Operaciones de Entrada y Salida de Datos.

Todo lenguaje de programación, para que sea práctico debe tener


procedimientos para entrada y salida de datos. En este caso en C++
existen varios procedimientos para entrada y salida de datos, los
cuales desarrollaremos a continuación.

a) Entrada de datos en C++ (lectura de datos).

Los datos en todo lenguaje de programación se pueden almacenar


en memoria de tres formas distintas:

1°) Declarando constantes con const (ver ítem 3.1.2)


2°) Asignando valores a las variables desde el mism o programa.
3°) Leyendo datos desde el teclado con los procedim ientos scanf y
cin.

b) Salida de datos en C++.

Para la salida de datos se utilizan los procedimientos printf y cout.

En el siguiente listado de un programa se puede visualiza el uso de


los procedimientos de entrada y salida de datos.

// Programa ejemplo de entrada y salida de datos.


#include <iostream.h>
#include<conio.h>
const short int w=10; // ingreso de datos a través de una constante
short int x,y,z;
float s,m;
main()
{
z=15; //ingreso de datos a través del mismo programa
cout<<"ingrese el valor de x: ";
cin>>x; //lectura de datos a través del teclado
cout<<"ingrese el valor de y: ";
cin>>y;
s=x+y+z+w;
m=-5*x+3*x/(y+(2-z)/(2*w-z))+12;

cout<<"El valor de s es: "<<s<<endl; //salida de datos


cout<<"El valor de m es: "<<m<<endl; //salida de datos
getch();
}

3.1.6 Recomendaciones para una buena Programación.

a) Los programas deben ser legibles y comprensibles, utilizando la


indentación correcta para cada bloque de programa; en C++ un
bloque de programa se separa abriendo y cerrando el símbolo
llaves ({ }).

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

c) En la lectura y salida de datos es necesario poner comentarios para


que el usuario del programa pueda saber qué dato ingresar y qué
dato o valor está obteniendo. Recuerde que el programa que Ud.
haga lo puede utilizar cualquier otra persona que no
necesariamente tiene conocimientos de programación ni de
computación. Por ejemplo:

Para leer dos datos A y B, se pone simplemente:


cin>>a;
cin>>b;

sería mejor si se presenta

cout<<”Ingrese el valor de a: “;
cin>>a;
cout<<”Ingrese el valor de b: “;
cin>>b;

d) Los programas deben ser eficientes, evitando hacer cálculos


innecesarios. Por ejemplo para determinar las raíces de una
ecuación cuadrática de la forma Ax2+Bx+C=0 se sabe que se debe
utilizar la siguiente fórmula:

− b ± b 2 − 4ac
x=
2a

Entonces en el programa se podría poner de la siguiente manera:

x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);

Pero sería mejor de la siguiente manera:


d=b*b-4*a*c;
n=2*a;
x1=(-b+sqrt(d))/n;
x2=(-b-sqrt(d))/n;

3.2 ESTRUCTURAS SECUENCIALES.

Se llaman estructuras secuenciales debido a que una acción o instrucción


sigue a otra en forma secuencial uno tras otro hasta el final, no dependiendo
de alguna condición que haga variar su secuencia.

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

En C++ su estructura es:

main() // Línea de cabecera de la función principal.


{ // Inicio del bloque del programa.
Instrucción1;
Instrucción2;
Instrucción3; // Cuerpo del programa principal.
Instrucción4;
M
InstrucciónN;
}
//-Fin de bloque del programa.

3.3 ESTRUCTURAS CONDICIONALES.

En la mayor parte de los problemas (por no decir todos) que se presentan


en la vida cotidiana y que se pueden solucionar mediante un programa
computacional, siempre presentan algunas condiciones que harán cambiar
una estructura secuencial. Las estructuras condicionales se utilizan para
tomar decisiones lógicas; por eso muchas veces se les llaman estructuras
selectivas, porque se tiene que seleccionar una determina acción de
acuerdo al valor de la condición planteada.

Las condiciones se especifican usando los operadores de relación (menor,


mayor, igual, etc.) y los operadores lógicos (Y, O, Negación, etc.), además
se debe tener en cuenta que las condiciones pueden ser simples o
complejas, pero siempre tendrán un único valor puede ser verdadero (V) o
falso (F).

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

Operador de Significado Equivalente


relación en C++ matemático
> Mayor que >
< Menor que <
>= Mayor o igual que ≥
<= Menor o igual que ≤
== Igual que =
!= Diferente que (No igual ≠
que)

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)

En la siguiente tabla se muestra los valores que devuelve después de


trabajar con los operadores lógicos.

Valores de Variables Resultados de los Operadores Lógicos


A B (A)&&(B) (A)| |(B) !(A)
V V V V F
V F F V F
F V F V V
F F F F V

c) Estructura condicional simple.


En el diseño del algoritmo y del pseudocódigo se utiliza “Si (condición)
Entonces (acciónV)”, en el siguiente cuadro se pueden observar el
pseudocódigo, el diagrama de flujo y su diagrama N-S; de este tipo de
estructura.

PSEUDOCÓDIGO DIAGRAMA DE FLUJO DIAGRAMA N-S

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.

En C++ su estructura es:

if (condición) sentencia1;

Otra forma de representar esta estructura en C++ es:

if (condición)
{
instrucción1;
instrucción2;
instrucción3; AcciónV
M
instrucciónN;
}

d) Estructura condicional doble.

En este caso en el diseño del algoritmo y del pseudocódigo se utiliza “Si


(condición) Entonces (acciónV) sino (acciónF)”, en el siguiente cuadro
se pueden observar el pseudocódigo, el diagrama de flujo y su diagrama
N-S; de este tipo de estructura.

PSEUDOCÓDIGO DIAGRAMA DE FLUJO DIAGRAMA N-S

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

En este caso el grupo de instrucciones (acciónV) se ejecutan si la


condición es verdadera mientras que si la condición es falsa se ejecuta el
grupo de instrucciones (acciónF).

En C++ su estructura es:

if (condición) sentencia1;else sentencia2;

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

e) Estructura Condicional Múltiple.

Este es un caso especial, pero muy utilizado en la práctica, sobre todo


cuando se diseña sistemas de menús, en el cual es necesario seleccionar
más de dos condiciones posibles. La estructura de decisión múltiple
evaluará una expresión que podrá tomar N valores distintos (1; 2; 3,…,N).
Según se elija uno de estos valores en la condición, se realizará una de
las N acciones. A continuación se muestran el pseudocódigo, el
diagrama de flujo y diagrama N-S correspondiente.
Diagrama de Flujo.

Primera Forma Segunda Forma

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.

Primera Forma Segunda Forma

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.

Primera Forma (En castellano) Segunda Forma (En inglés)

Según sea (Expresión) Hacer Case (Expresión) of


Valor 1. Valor 1.
Acción 1 Acción 1
Valor 2. Valor 2.
Acción 2 Acción 2
Valor 3. Valor 3.
Acción 3 Acción 3
: :
. .
Valor N. Valor N.
Acción N Acción N
Otro valor Other wise (o Else)
Acción Otro. Acción Otro.
Fin End-Case

En C++ su estructura es:

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

3.4 ESTRUCTURAS DE CONTROL REPETITIVAS.

En todos los lenguajes de programación modernos, necesariamente tienen


que considerar las estructuras de control repetitivas o de iteraciones
también llamadas “bucles”. Los bucles son segmentos de programa cuyas
instrucciones se repiten varias veces mientras cumpla una condición.

a) Contador.

Los procesos repetitivos son la base del uso de computadoras. En estos


procesos se necesitan contar los sucesos o acciones internas del bucle.
Un contador es una variable cuyo valor se incrementa o decrementa de
uno en uno.

En C++ existen dos operadores que permiten incrementar la variable de


uno en uno o decrementar de uno en uno. Por ejemplo si el valor de x es
20 cuando se utiliza los operadores, su valor se muestra en la siguiente
tabla, en la columna “resultado”.

Operador en
Operación Ejemplo Resultado
C++
++ Incremento x++ x=21
-- Decremento x-- x=19

El operador ++ es equivalente a x=x+1; mientras que el -- es equivalente


a x=x-1. Estos dos operadores funcionan cuando las variables aumentan
o disminuyen de uno en uno.

b) Acumulador.

Un acumulador es una variable cuya misión es almacenar cantidades


variables de valores en la misma variables. Este tipo de variable es muy

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;

En el ejemplo anterior el valor de la variable SUMA acumulada es de 80.

c) Estructura Repetitiva “mientras”.

La estructura repetitiva “mientras” es aquella en la que el número de


iteraciones no se conoce por anticipado y es que el cuerpo del bucle se
repite mientras la condición sea verdadera. 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.

PSEUDOCÓDIGO DIAGRAMA DE FLUJO DIAGRAMA N-S

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.

En este caso mientras la condición sea verdadera siempre se irá


ejecutando el grupo de instrucciones (AcciónV). En este caso se deben
tener en cuenta los siguientes aspectos:
- Si a la primera evaluación la condición es falsa el grupo de instrucciones
(AcciónV) no se ejecutarán ni una sola vez, es decir saltará directamente
a la siguiente instrucción del bucle “mientras”.
- Si la condición en ningún momento se vuelve falso, el bucle se hace
infinito, es decir, cuando se utiliza el bucle “mientras” se debe tener
cuidado en que de alguna forma la condición se haga falso.
En C++ su estructura es:
while (condición)
{
instrucción1;
instrucción2;
instrucción3;
M
instrucción N;
};

d) Estructura Repetitiva “repetir”.

La estructura repetitiva “repetir” es aquella en la que el número de


iteraciones, al igual que el anterior, no se conoce por anticipado y es que

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.

PSEUDOCÓDIGO DIAGRAMA DE FLUJO DIAGRAMA N-S

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)

En este caso el grupo de instrucciones (AcciónV) se ejecutará hasta la


condición se haga falsa. En este caso se deben tener en cuenta los
siguientes aspectos:

- Como la condición se evalúa al final, el grupo de instrucciones (AcciónV)


se ejecuta por lo menos una vez.

- Si la condición en ningún momento se vuelve falso, el bucle se hace


infinito, es decir, cuando se utiliza el bucle “repetir” se debe tener
cuidado en que de alguna forma la condición se haga falso.

En C++ su estructura es:

do
{ instrucción1;
instrucción2;
instrucción3;
M
instrucciónN;
} while (condición);

e) Estructura Repetitiva “desde”.

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

Desde (variable=Vi hasta Vf, incremento)


Instrucción 1.
Instrucción 2. F Desde (var=Vi hasta Vf, inc)
Instrucción 3. Condición
: Instrucción 1
.
Instrucción N. V Instrucción 2
Fin de desde
AcciónV :

Instrucción N

En C++ su estructura es:

for
(variable=Vi;variable<=Vf;variable=variable+N);
{ instrucción1;
instrucción2;
instrucción3;
M
instrucciónN;
};

Como un ejemplo de aplicación, podríamos elaborar un programa para


determinar la suma de “N” números enteros que se ingresan desde el
teclado con las tres forma de estructuras repetitivas que existen en C++,
los cuales se muestran en el siguiente cuadro.

while do-while For


//Utilizando "while". //Utilizando "do-while". //Utilizando "for".

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

unsigned short int n,i; unsigned short int n,i; unsigned short int n,i;
int suma,dato; int suma,dato; int suma,dato;

main() main() main()


{ { {
cout<<"Ingrese N° de datos: "; cout<<"Ingrese N° de datos: "; cout<<"Ingrese N° de datos: ";
cin>>n; cin>>n; cin>>n;
i=1; i=1; i=1;
suma=0; suma=0; suma=0;
while(i<=n) do for(i=1;i<=n;i++)
{ { {
cout<<"ingrese dato: "; i++; cout<<"ingrese dato: ";
cin>>dato; cout<<"ingrese dato: "; cin>>dato;
suma=suma+dato; cin>>dato; suma=suma+dato;
i=i+1; suma=suma+dato; }
}; } while(i<=n); cout<<"la suma es: "<<suma;
cout<<"La suma es: "<<suma; cout<<"La suma es: "<<suma; }
} }

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

La diferencia básica entre una función y un procedimiento es que una función


siempre devuelve un valor mientras que un procedimiento no devuelve ningún
valor. En C++ existen diversas funciones y procedimientos predefinidos, sin
embargo las más importantes son las funciones matemáticas y de caracteres
que trataremos a continuación.

4.1 FUNCIONES Y PROCEDIMIENTOS PREDEFINIDOS EN C++.

4.1.1 Funciones matemáticas.

Las funciones matemáticas o también llamadas aritméticas, son


aquellas que se utilizan para realizar operaciones matemáticas (tales
como raíz cuadrada, logaritmo natural, coseno de un ángulo, etc.) y
devuelven un solo valor, en C++ las funciones matemáticas se
encuentran dentro del archivo de cabecera math.h por lo que es
necesario declararlo en la cabecera del programa con incluye. A
continuación se desarrollará las principales funciones matemáticas.

a) Funciones abs y fabs. Estas funciones devuelven el valor


absoluto de un número, el argumento para abs tiene que ser del tipo
entero y devuelve entero mientras que para el fabs tiene que ser del
tipo real y devuelve real. Un ejemplo se muestra a continuación.

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

b) Funciones asin y acos. Estas funciones devuelven el arco seno y


el arco coseno de un número cuyo valor debe estar entre -1 y +1; el
argumento tiene que ser del tipo real y devuelve del tipo real y en
radianes. Un ejemplo se muestra a continuación.
//uso de función asin y acos
#include <math.h>
#include <iostream.h>

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

c) Función atan. Esta función devuelve el arco tangente de un


número; el argumento tiene que ser del tipo real y devuelve del tipo
real y en radianes. Un ejemplo se muestra a continuación.
//uso de función atan
#include <math.h>
#include <iostream.h>

float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=atan(a);
cout<<"El arco tangente de "<<a<<" es "<<b<<" radianes"<<endl;
}

d) Función ceil. Esta función devuelve el mayor entero de un


número; el argumento tiene que ser del tipo real y devuelve del tipo
real. Un ejemplo se muestra a continuación.

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

e) Función floor. Esta función devuelve el menor entero de un


número; el argumento tiene que ser del tipo real y devuelve del tipo
real. Un ejemplo se muestra a continuación.
//uso de función floor
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=floor(a);
cout<<"El menor entero de "<<a<<" es "<<b<<endl;
}

f) Función sin y cos. Estas funciones devuelven el seno y el coseno


de un número cuyo valor debe estar 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 sin y cos
#include <math.h>
#include <iostream.h>

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

g) Función exp. Esta función devuelve el valor de ex, “e” es una


constante cuyo valor es e=2,718282… y representa a la base de los
logaritmos naturales; el argumento tiene que ser del tipo real y
devuelve del tipo real. Un ejemplo se muestra a continuación.
//uso de función exp
#include <math.h>
#include <iostream.h>

float a,b;

30
main()
{
cout<<"Ingrese un numero real: ";
cin>>a;
b=exp(a);
cout<<"El resultado es "<<b<<endl;
}

h) Función log y log10. Estas funciones devuelven el valor del


logaritmo natural de un número y el logaritmo en base 10 de un
número; el argumento tiene que ser del tipo real y devuelve del tipo
real. Un ejemplo se muestra a continuación.
//uso de función log y log10
#include <math.h>
#include <iostream.h>

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

i) Función pow. Esta función devuelve el valor de la potencia xy; los


argumentos tienen que ser del tipo real y devuelve del tipo real. Un
ejemplo se muestra a continuación.
//uso de función pow
#include <math.h>
#include <iostream.h>

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

j) Función sqrt. Esta función devuelve el valor de la raíz cuadrada de


un número; el argumento tiene que ser del tipo real positivo y
devuelve del tipo real. Un ejemplo se muestra a continuación.
//uso de función sqrt
#include <math.h>
#include <iostream.h>
float a,b;
main()
{
cout<<"Ingrese un numero real positivo: ";
cin>>a;
b=sqrt(a);
cout<<"La raiz cuadrada de "<<a<<" es "<<b<<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;
}

Pero así como existen funciones y procedimientos predefinidos en C++, en


todos los lenguajes de programación también existen; por lo que cuando
uno tiene un algoritmo donde se tiene que usar alguna de estas funciones y
se necesita programar en cualquier lenguaje de programación se tiene que
investigar su uso respectivo. Pero también existen algunas funciones y/o
procedimientos que no existen en ningún lenguaje de programación por lo
que el programador tiene que diseñar sus propias funciones y
procedimientos que le son de utilidad de acuerdo a su necesidad; los cuales
pasaremos a desarrollar a continuación.

4.2 FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL USUARIO EN


C++.

En la unidad III en el ítem 3.1.1 se ha tratado la estructura de un programa


en C++; en la cual se puede mostrar que existen dos secciones
importantes, la sección de declaraciones de funciones y procedimientos y la
sección de desarrollo de las funciones y procedimientos declararos;
entonces podemos decir que esa es la forma de que el usuario pueda
diseñar sus propias funciones y procedimientos.

4.2.1 Funciones.

Una función es una secuencia de instrucciones que se realizan con la


finalidad de retornar un valor (un solo valor), pero no necesariamente
numérico, pues, también puede ser de otro tipo de dato (carácter,
lógio o del tipo cadena); se puede diseñar una función por ejemplo
para calcular la suma total una lista de datos, calcular el promedio de
una lista de datos, etc. Las funciones se hacen referencia por su
nombre y se deben almacenar necesariamente en un variable.

Es importante saber que para usar una función, se debe declarar y


desarrollar dicha función. En el siguiente ejemplo se muestra la forma
de cómo utilizar una función a través de un algoritmo, diagrama de
flujo y diagrama N-S. El ejemplo consiste en determinar el mayor de

32
dos números reales que se ingresan desde el teclado. Para ello se
debe definir y desarrollar la función “maximo”.

* Análisis del problema principal.


Datos de Entrada:
- a y b: Representan los números que se ingresarán desde el
teclado (tipo real).

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

* Análisis de la función “maximo”.


Parámetros de Entrada:
- x e y: Representan los números que se ingresarán a la función (se
deben pasar por valor). Tipo real.
Dato de Retorno.
- max: Retorna con el mayor valor de los dos números ingresados.
Tipo real.

FUNCIÓN maximo
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S

maximo(x,y) maximo(x,y) maximo(x,y)


Si (x>y)
max=x
sino (x>y)
max=y V F V F
Retornar: max (x>y)
max=x max=y
max=x max=y Retornar: max

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.

Un procedimiento es una secuencia de instrucciones que se realizan


con la finalidad de ejecutar alguna acción pero no retorna ningún
valor; se puede diseñar un procedimiento por ejemplo para leer una
lista de datos desde el teclado, imprimir una lista de datos en pantalla,
ordenar una lista de datos, intercambiar valores de datos, etc.. Los
procedimientos se hacen referencia por su nombre y actúan como si
fuese cualquier sentencia.

Al igual que las funciones es importante saber que para usar un


procedimiento, se debe declarar y desarrollar dicho procedimiento. En
el siguiente ejemplo se muestra la forma de cómo utilizar un
procedimiento a través de un algoritmo, diagrama de flujo y diagrama
N-S. El ejemplo consiste en determinar el mayor de dos números
reales que se ingresan desde el teclado. Para ello se debe definir y
desarrollar el procedimiento “maximop”.

* Análisis del problema principal.


Datos de Entrada:
- a y b: Representan los números que se ingresarán desde el
teclado (tipo real).

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

* Análisis del procedimiento “maximop”.


Parámetros de Entrada:
- x, y y max representan los números que se ingresarán al
procedimiento (x e y se deben pasar por valor y max se debe
pasar por referencia). Todos del tipo real.

PROCEDIMIENTO maximop
ALGORITMO DIAGRAMA DE FLUJO DIAGRAMA N-S

maximop(x,y,max) maximop(x,y,max) maximop(x,y,max)


Si (x>y)
max=x
sino (x>y)
max=y V F V F
Retornar (x>y)
max=x max=y

max=x max=y Retornar

Retornar

También es importante saber que la forma de declarar y desarrollar un


procedimiento depende del lenguaje de programación que se está
utilizando para la programación, por ejemplo en C++ la forma de
declarar y desarrollar el procedimiento maximop se muestra en el
siguiente ejemplo.

// listado del ejemplo que se utiliza el procedimiento maximop


#include <iostream.h>
#include <conio.h>
void maximop(float x,float y,float &max); //declaración del proc "maximop".

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

Nota. Para declarar un procedimiento en C++ se emplea el tipo "void"


que es un tipo de dato que no tiene valor, entonces como un
procedimiento no retorna ningún valor su declaración es
necesario.

4.2.3 Variables globales y locales.

Todas las variables que se utilizan en los programas principales y


subprogramas se dividen en dos tipos: variables globales y locales.

Una variable global es aquella que se declara en la cabecera de los


programas y que se pueden utilizar en todo el programa tanto en el
programa principal como en los subprogramas.

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.

Dependiendo del lenguaje de programación que se está utilizando


para desarrollar el programa, la forma de declarar una variable local o
global varía. En el siguiente ejemplo se muestra la forma de cómo se
declaran dichas variables en C++.

// listado del ejemplo que se utiliza la función "factorial".


#include <iostream.h>
double factorial(unsigned short int x); // declaración función "factorial".
double a; //declaración de la variable global "a"
main()
{
int b; //declaración de la variable local "b"
cout<<"Ingrese un número entero: ";
cin>>a;
b=factorial(a); // forma de llamar a la función "factorial".
cout<<a<<"! = "<<b<<endl;
}

double factorial(unsigned short int x) // desarrollo función "factorial"


{
double f; //declaración de la variable local "f"
unsigned short int i; //declaración de la variable local "i"
f=1;
for (i=1;i<=x;i=i+1)
f=f*i;
return f;
}

36
4.2.4 Paso de parámetros a funciones y procedimientos

Cuando se utilizan subprogramas, en el momento en que se llama al


subprograma, se debe hacer invocando el nombre e indicando sus
parámetros; el paso de esos parámetros se realiza de dos maneras
distintas: paso por valor y por referencia. La forma de pasar los
parámetros a los subprogramas depende del diseño del subprograma
que el programador tiene que tener en cuenta.

a) Por valor.

Pasar un parámetro por valor significa que cuando se invoca al


subprograma sus parámetros pueden ser constantes o variables y el
subprograma funciona sin problemas. En el siguiente ejemplo se
muestra el paso de parámetros por valor en C++.

float maximo(float x, float y)

En este ejemplo se observa que las variables “x” e “y” se han


pasado por valor y suponiendo que las variables m=2 y n=4.5; se
puede invocar de las siguientes maneras:

a=maximo(m,n)
a=maximo(2,n)
a=maximo(m,4.5)
a=maximo(2,4.5)

El programa funcionaría sin ningún problema en cualquiera de los


cuatro casos mostrados y el valor de a será siempre 4.5.

b) Por referencia.

Pasar un parámetro por referencia significa que cuando se invoca al


subprograma sus parámetros pueden ser sólo variables y no
pueden ser constantes. En el siguiente ejemplo se muestra el paso
de un parámetro por referencia y el otro por valor en C++.

float maximo(float &x, float y)

En este ejemplo se observa que la variables “x” se ha pasado por


referencia y la variable “y” se han pasado por valor y suponiendo
que las variables m=2 y n=4.5; se puede invocar de las siguientes
maneras:
a=maximo(m,n) // Esta forma es válida.
a=maximo(2,n) // Esta forma no es válida.
a=maximo(m,4.5) // Esta forma es válida.
a=maximo(2,4.5) // Esta forma no es válida.

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.

Un arreglo es un conjunto de variables del mismo tipo que comparten un mismo


nombre, cada valor individual del arreglo se denomina elemento y cada uno de
ellos pueden almacenar valores diferentes, pues, son diferenciados por
subíndices. Los arreglos permiten trabajar con grandes cantidades de
información, con los cuales se puede por ejemplo ordenar los datos (de mayor
a menor o viceversa), realizar una búsqueda, añadir datos, borrar datos, etc..
Básicamente los arreglos se clasifican en dos tipos que son:

5.1 ARREGLOS UNIDIMENSIONALES.

Un ARREGLO UNIDIMENSIONAL (lista o vector), básicamente se


caracteriza por tener un solo subíndice. Por ejemplo si quisiéramos
almacenar las notas de los alumnos de un determinado salón, donde
existen 15 alumnos, se podría utilizar el vector llamado notas y cuyos
elementos serían: notas[0], notas[1], notas[2], notas[3], ... ,notas[14]; todos
ellos del tipo entero. En C++ el arreglo anterior se declara de la siguiente
manera:
int notas[14];

Otros ejemplos de declaraciones de arreglos en Turbo C/C++, serían:

int a[10]; // una lista a de 11 elementos del tipo entero.


float b[19];

A continuación se muestra el ejemplo en el cual se determina la suma de N


datos que se ingresan desde el teclado:

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

Pero el programa anterior sería mejor si elaboramos un procedimiento


“leer_array” y una función que calcule la suma denominado “suma_array”;
entonces la codificación en C++ sería de la siguiente manera:

// Ejemplo de arreglos con Func. y Procedimientos


#include <iostream.h>

void leer(int x[100],int y);


int suma(int x[100],int y);

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

void leer(int x[100],int y)


{
int i;
for(i=1;i<=y;i++)
{cout<<"dato "<<i<<" : ";
cin>>x[i];
};
}

int suma(int x[100],int y)


{
int i,sum;
sum=0;
for(i=1;i<=y;i++)
sum=sum+x[i];
return sum;
}

39
5.2. ARREGLOS BIDIMENSIONALES.

Un ARREGLO BIDIMENSIONAL (tabla o matriz), básicamente se


caracteriza por tener dos subíndices, el primer subíndice representa a las
filas y el segundo representa a las columnas. Por ejemplo la siguiente
matriz tiene 3 filas y 5 columnas.
 3 − 3 5 0 − 1
A =  5 2 1 5 0 
− 1 2 3 4 1 

Los elementos de la matriz A son los siguientes:

 A[1;1] = 3 A[1;2] = −3 A[1;3] = 5 A[1;4] = 0 A[1;5] = −1


A =  A[2;1] = 5 A[2;2] = 2 A[2;3] = 1 A[2;4] = 5 A[2;5] = 0 
A[3;1] = −1 A[3;2] = 2 A[3;3] = 3 A[3;4] = 4 A[3;5] = 1 

En C++ la matriz A se declara de la siguiente manera:


int A[3][5]; // todos los elementos tienen que ser del tipo entero.

Otros ejemplos de declaraciones de arreglos en Turbo C/C++, serían:


int C[10][10]; // una matriz C de 10 filas y 10 columnas (100 elementos).
float B[5][10]; // una matriz B de 5 filas y 10 columnas del tipo real.

A continuación se muestra el ejemplo en el cual se determina la suma de


dos matrices A y B de “m” filas y “n” columnas y cuyos datos se deben
ingresar desde el teclado:
Ejemplo:
// Suma de dos matrices
#include <iostream.h>

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

cout<<endl<<"La matriz suma es: "<<endl;


for (i=1;i<=m;i++)
{
for (j=1;j<=n;j++)
cout<<C[i][j]<<" ";
cout<<endl;
};
}

Si ingresamos m=2 y n=3 y luego ingresamos las siguientes matrices:

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

Una cadena en C++ se representa escribiendo una secuencia de caracteres


encerrada entre comillas, las siguientes frases representan un cadena.

"Esto es una cadena"


"Buenos tardes"

6.1 DECLARACIÓN DE UNA VARIABLE TIPO CADENA EN C++.

La forma de declarar una o más variables del tipo cadena en C++ es de la


siguiente manera:

char A[21],NOMBRE[31],DIN[9];

En la expresión anterior se ha declarado tres variables del tipo cadena, pero


todos tienen diferentes longitudes de almacenamiento, por ejemplo la
variable A tiene una longitud de almacenamiento de hasta 20 caracteres,
porque el caracter nulo ocupará la posición 21.

En el siguiente ejemplo se observa el uso de cadenas en forma completa:

// uso de variables del tipo cadena


#include <iostream.h>
void main()
{
char NOMB[31],DIREC[41];
int EDAD;
float PESO;
cout<<"Ingrese su nombre: ";
cin.getline(NOMB,31);
cout<<"Ingrese su dirección: ";

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.

// uso de array de caracteres


#include <iostream.h>
void main()
{
char CAD[11];
int i;
cout<<"Ingrese una cadena: ";
cin.getline(CAD,11);

for (i=0;i<10;i++)
cout<<CAD[i]<<" ";
cout<<endl;

for (i=9;i>=0;i--)
cout<<CAD[i]<<" ";
cout<<endl;
}

6.2 FUNCIONES Y PROCEDIMIENTOS PREDEFINIDOS DEL TIPO CADENA


EN C++.

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

b) Procedimiento strcat. Este procedimiento se encuentra dentro de


string.h y sirve para añadir una cadena a otro ya existente. Un ejemplo
se muestra a continuación.

#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
}

c) Función strlen. Esta función se encuentra dentro de string.h y devuelve


la longitud de una cadena pero sin incluir el caracter de fin de cadena. Un
ejemplo se muestra a continuación.

#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;
}

d) Función atof. Esta función se encuentra dentro de stdlib.h y devuelve


una cadena de dígitos convertido en un número. Un ejemplo se muestra
a continuación.

#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
}

6.3 FUNCIONES Y PROCEDIMIENTOS DEFINIDOS POR EL


PROGRAMADOR DEL TIPO CADENA EN C++.

En esta parte es necesario tener en cuenta que cuando se diseñan


funciones y procedimientos el tratamiento es similar que cuando se
utilizaban con números sólo que ahora los parámetros de entrada y salida
pueden ser del tipo cadena y/o numérico.
En el siguiente ejemplo se muestra un programa normal que sirve para
determinar la cantidad de veces que se repite una letra en una cadena:

#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;
}

El ejemplo anterior usando una función que devuelva la cantidad de veces


que se repite una letra sería:

#include <iostream.h>
#include <string.h>
int cadena_veces(char X[100],char Y);
void main()
{
char NOMB[31];
char A;

46
int N;

cout<<"Ingrese su nombre completo: ";


cin.getline(NOMB,31);
cout<<"Ingrese letra a buscar: ";
cin>>A;
N=cadena_veces(NOMB,A);
cout<<"La letra "<<A<<" se repite "<<N<<" veces"<<endl;
}

int cadena_veces(char X[100],char Y)


{
int L,C,i;
C=0;
L=strlen(X);
for (i=0;i<L;i++)
if (X[i]==Y)
C=C+1;
return C;
}

En el siguiente ejemplo se puede ver el diseño de un procedimiento que


retorna una cadena con cierto número de caracteres por la izquierda.

#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;
}

void izquierda(char X[100],int Y)


{
int i;
char Z[100];
for (i=0;i<Y;i++)
Z[i]=X[i];
Z[Y]='\0';
strcpy(X,Z);
}

6.4 ARREGLOS DEL TIPO CADENA EN C++.

Cuando se desea almacenar varias cadenas en una sola variable es


necesario utilizar un arreglo del tipo cadena y la forma de declara se
muestra en el siguiente ejemplo:

#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

You might also like