Nothing Special   »   [go: up one dir, main page]

Programacion en C++

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 80

Programación

con C++
Nivel 1

Material elaborado por CENEAC Producciones, C.A.


Prohibida su reproducción total o parcial, por medios
impresos o digitales, sin autorización del Autor.
CENEAC Producciones, C.A.

Universidad Central de Venezuela, Facultad de Ciencias, Edif. III, Av. Los Ilustres, Los Chaguaramos, Caracas, Venezuela
Tlf. (58 212) 605-13-14 693-47-38 (telfax) correo ceneac@ciens.ucv.ve www.ceneac.com.ve
CENEAC - Programación con C++ Nivel 1.

ÍNDICE

1. Creación de Algoritmos en Pseudocódigo


1.1. Conceptos básicos y características … 1
1.2. Definición de los elementos presentes en un algoritmo … 3
 Datos, Tipos de datos, Variables … 3
 Secuenciamiento de Acciones … 7
 Acciones Básicas (Asignación, Lectura y Escritura) … 9
 Estructuras de Control Condicional (Si y Selección ) … 10
 Estructuras de Control Iterativas (Ciclos: Para, Repetir y Mientras) … 12
 Procedimientos (Acciones, Funciones y Pase de parámetros) … 17

2. Creación de Programas en C++


2.1. Introducción al lenguaje, origen y principales características … 24
2.2. Elementos de un programa … 26
2.3. Identificadores y Palabras reservadas … 28
2.4. Tipos de datos básicos … 28
2.5. Variables, Constantes, Operadores básicas, Expresiones y Prioridad de Operadores… 30
2.6. Operaciones básicas Entrada (Lectura) y Salida (Escritura) … 35
2.7. Conversión de Tipos y Modificadores de formato … 36
2.8. Estructuras de Control Condicional:
 if (Si) … 39
 switch (En caso de) … 41
2.9. Estructuras e Control Iterativo (Ciclos):
 for (Para) … 43
 while (Mientras) … 44
 do-while (Hacer … mientras o Repetir) … 45
2.10. Funciones, Procedimientos, Prototipos y Macros … 47

3. Estructuras de Datos en C++


3.1. Arreglos Unidimensionales … 52
3.2. Arreglos Multidimensionales … 56
3.3. Registros … 58

4. Instalación de un Editor y Compilador de C++ … 64

5. Anexo 1: Principales Instrucciones y su traducción de Pseudocódigo a C++


Principales funciones predefinidas
Biblioteca Estándar de C++ y Principales Librerías … 65

6. Ejercicios de creación de Algoritmos y Programación con C++ … 72

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor.
CENEAC - Programación con C++ Nivel 1.

T E MA 1 .
CREACIÓN DE ALGORITMOS EN PSEUDOCÓDIGO
1.1 Conceptos Básicos
A partir de los años 80, la masificación en el uso de los computadores se ha convertido en una realidad, de tal forma que
hoy en día son una herramienta indispensable en casi todas las actividades del quehacer humano.
A pesar de las diversas áreas en las que el computador juega un papel preponderante y del desarrollo tecnológico, que ha
llevado de los grandes computadores (main frames) a los microcomputadores actuales, las componentes básicas de un
computador siguen siendo: el hardware y el software.
El hardware de un computador es el conjunto de componentes físicas que lo forman, siendo las tres componentes
principales del hardware:
La memoria principal o memoria RAM (Random Access Memory) • La Unidad Central de Proceso o CPU
Los Dispositivos Periféricos.
La memoria principal o memoria RAM es la componente encargada del almacenamiento tanto de los programas como de
los datos a ser procesados. El rendimiento de una memoria se mide en términos de su capacidad (tamaño medido en MB o
GB) y de la velocidad con que los datos son almacenados y recuperados.
La Unidad Central de Proceso o CPU es la componente encargada de realizar los cálculos y transformaciones sobre los
datos, para obtener los resultados; así como también de “gobernar” las diferentes componentes del computador. El CPU
está formado por dos componentes principales:
Unidad de Control, parte encargada de “gobernar” a las distintas componentes del computador.
Unidad Aritmético-Lógica o ULA, componente encargada de realizar los cálculos y transformaciones sobre los datos.
El rendimiento del CPU se mide en términos de su velocidad (medida en MHz o GHz) para efectuar los cálculos.
Los Dispositivos Periféricos tienen como función principal permitir la comunicación entre el usuario y el computador, ya
sea para la captura de datos o presentación de resultados.
Estos dispositivos pueden clasificarse, de acuerdo a su utilización, en tres categorías:
Dispositivos de Entrada:
Son aquellos dispositivos que sólo permiten la comunicación Usuario  Computador. Por ejemplo: el teclado, el ratón, el
micrófono, los controles para juegos (joystick), el escáner, las pantalla táctiles, etc.
Dispositivos de Salida:
Son aquellos dispositivos que sólo permiten la comunicación Computador  Usuario. Por ejemplo: la impresora (salida
permanente), el monitor (salida no permanente), las cornetas, etc.
Dispositivos de Entrada/Salida:
También llamados memorias auxiliares o secundarias, son aquellos dispositivos que permiten la comunicación Usuario 
Computador; además, estos dispositivos le proporcionan al computador un medio de almacenamiento de información
adicional, desde el cual es posible leer o escribir información. Ejemplos de estos dispositivos son: la unidad de disquete, la
unidad de CD, DVD, disco duro (fijos y USB), pendrive, tarjetas flash, etc.
El software de un computador es el conjunto de programas (sistemas) que permiten la utilización de los recursos del
computador y comprende:
Programas para el control del computador (Sistemas Operativos, Interpretadores, Compiladores,...)
Programas de aplicación para la resolución de una amplia gama de problemas mediante el computador (Sistemas
Administrativos, Bases de Datos, Editores de Texto, Editores Gráficos, Editores de Páginas Web,...)

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 1
CENEAC - Programación con C++ Nivel 1.

La disciplina dentro de la computación dedicada a la resolución de problemas mediante el computador es la Programación,


cuyo producto final son los Programas, los cuales tienen como finalidad dar órdenes a una máquina (computador), a fin de
obtener resultados.
Para la elaboración de un programa, el programador debe atacar dos aspectos fundamentales:
Organizar los datos en la memoria del computador (Estructuración de los Datos).
Definir el proceso de tratamiento de esos datos (Estructuración de los Programas).
Abstracción
Mecanismo intelectual principal en la actividad de la programación, el cual durante la etapa de análisis del problema permite
la separación de los aspectos relevantes de los irrelevantes en el contexto estudiado.
Análisis Descendente
Método de análisis que consiste en la aplicación sucesiva de la capacidad de abstracción sobre un problema determinado,
lo cual permite la descomposición del problema en subproblemas, tales que, la composición de sus soluciones constituyen
una solución al problema original. A su vez, para la obtención de la solución de cada subproblema se puede aplicar
nuevamente este método. De esta forma, la solución del problema se presenta por etapas, conocidas como Niveles de
Abstracción.
Estado
Es el conjunto de valores que poseen los objetos de un algoritmo en un momento dado.
Instrucciones o Acciones
Es un suceso que dura un tiempo finito y produce un resultado o efecto perfectamente definido y previsto. Toda acción
opera sobre algún objeto y es posible reconocer el efecto de tal acción por los cambios de estado presentados por el objeto.
Por lo tanto, una acción está perfectamente determinada por sus estado inicial (antes de realizar la acción) y final (después
de realizar la acción).
Algoritmo
Es una secuencia finita de pasos (instrucciones), expresados en un lenguaje natural o pseudo-formal, que resuelven un
problema dado.
Programa
Es un algoritmo expresado o traducido a un Lenguaje de Programación con el objetivo de dar órdenes a un dispositivo o
máquina.
Máquina o Dispositivo
Es un mecanismo capaz de realizar acciones según un patrón determinado (programa) el cual es descrito mediante un
repertorio finito de acciones elementales propio de cada máquina.
Resolución de problemas de programación
Así, la principal razón para que las personas aprendan lenguajes y técnicas de programación es utilizar al computador como
una herramienta para resolver problemas a través de la creación y ejecución de programas.
La resolución de un problema exige al menos la realización de las siguientes actividades:
1. Análisis del problema
2. Diseño del algoritmo
3. Traducción del algoritmo para obtener el programa
4. Ejecución y validación del programa.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 2
CENEAC - Programación con C++ Nivel 1.

1.2 Definición de los Elementos presentes en un Algoritmo


Para expresar la solución de un problema a través de un algoritmo, es necesario definir primero el lenguaje con el cual se
escribirá el algoritmo. El uso de lenguaje natural (por ejemplo, castellano) para estos fines presenta una serie de
inconvenientes, tales como ambigüedad (diferentes interpretaciones a una misma oración) e imprecisión (dificultad para
expresar ideas). Estos inconvenientes conducen a la necesidad de definir los elementos presentes en un algoritmo a través
de la definición de una Notación Algorítmica (o Lenguaje Pseudo-formal) en la cual dichos inconvenientes se minimicen o
eventualmente eliminen. Además, la Notación Algorítmica a definir y utilizar debe:
 Ser fácil de leer y entender
 Reflejar de una manera directa el análisis que produjo la solución del problema
 Ser poderosa, esto es, que con pocos elementos se puedan expresar muchas cosas.
A continuación, serán presentados los diferentes elementos que conforman un algoritmo a través de la definición de la
Notación Algorítmica que utilizaremos para escribir los algoritmos. La presentación de estos elementos se hará a través de
ejemplos tipo.
Generalmente, los problemas están especificados en términos de un conjunto de informaciones iniciales (datos) y del
cálculo que se desea efectuar para obtener los resultados (requerimientos). Por lo tanto, para la definición de una Notación
Algorítmica, para expresar la solución de dichos problemas, es necesario especificar los diferentes Tipos de Datos
(conjuntos de valores que pueden tomar la información y las operaciones que pueden aplicarse sobre ellos). Así como
también, las diferentes maneras en que se pueden expresar dichos valores (constantes, variables y expresiones).

1.2.1. Tipos de Datos


Un tipo de dato es el conjunto de valores que puede tomar la información y las operaciones que se pueden realizar sobre
esos valores. Los tipos de datos se clasifican en:
 Tipos de datos no estructurados: son aquellos cuyos valores no pueden dividirse en componentes.
 Tipos de datos estructurados (Estructuras de Datos): son aquellos cuyos valores están formados por componentes
y por lo tanto pueden descomponerse en términos de los valores que los constituyen.
En principio sólo consideraremos los Tipos de Datos no estructurados, dejando para la parte final la manipulación de los
Tipos de Datos Estructurados.

Tipos de Datos no Estructurados


Los distintos tipos de datos se representan en diferentes formas en el computador, siendo esta representación un conjunto o
secuencia de bits (dígitos 0 o 1). Los lenguajes de programación de alto nivel permiten al programador hacer abstracción de
la manera como los datos son representados. Los tipos de datos no estructurados con los que se trabajará se pueden
clasificar en:  Numéricos (entero, real)  Lógicos o Booleanos  Caracteres (carácter, string o cadena)

Tipo de dato Entero


El tipo entero es un subconjunto finito de los números enteros (números que no tienen parte decimal), pudiendo ser
positivos o negativos.
Los siguientes son ejemplos de valores de tipo entero: 5 -15 1340 -325 0 12000

Tipo de dato Real


El tipo real es un subconjunto finito de los números reales. Los números reales están formados por una parte entera y una
parte decimal, pudiendo ser positivos o negativos.
Los siguientes son ejemplos de valores de tipo real: 5.0 -15.25 1340.3 -325.1245 0.007

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 3
CENEAC - Programación con C++ Nivel 1.

Tipo de dato Lógico


El tipo lógico, también denominado booleano, es aquel conformado por dos valores: verdadero y falso.
Este tipo de dato se utiliza para representar las alternativas (si/no) a determinadas condiciones.

Tipo de dato Carácter


El tipo carácter, esta conformado por el conjunto finito y ordenado de caracteres que el computador reconoce, pudiendo ser
diferentes de un computador a otro. Los siguientes son ejemplos de valores del tipo carácter:
 Caracteres alfabéticos (A, B, C, ....., Y, Z) (a, b, c, ......, y, z).
 Caracteres numéricos (1, 2, 3, ....., 9, 0).
 Caracteres especiales (+ , - , * , / , ; , . , < , > , = , $ , @ , % , ....... )

Tipo de dato String (cadena)


El tipo string, es una sucesión de caracteres delimitados por comillas. La longitud de la cadena de caracteres es el número
de ellos comprendidos entre las comillas. Los siguientes son ejemplos de valores del tipo string:
"Luis Rivas" "A, B, C" ""
" " "8 de octubre de 2.015" "Sr. Pastor"

1.2.2. Constantes, Variables y Expresiones


Existen tres maneras de denotar a los valores de los distintos tipos de datos, estas son:
 Constantes: denotación de un valor particular del conjunto.
 Variables: denotación de un valor genérico del conjunto.
 Expresiones denotación de valores a partir operaciones entre constantes y variables.

Constantes
Son valores que no cambian durante la ejecución del algoritmo (programa).
Ejemplos de constantes según su tipo de dato:
Tipo
Ejemplos
Entero 0 345 -124 200 32456 -9799
Real 0.1 12.25 -3.25 350.0 -123.3 1234.5643
Lógico verdadero falso
Carácter "A" "X" "1" "$" "7"
String "Casa" "18 de julio" "US$ 300.7"

Variables
Una variable es un objeto cuyo valor puede cambiar durante el desarrollo del algoritmo o la ejecución del programa. Cada
variable tendrá entonces asociado un tipo de dato, pudiendo sólo tomar valores de ese tipo.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 4
CENEAC - Programación con C++ Nivel 1.

Los nombres de las variables, a veces conocidos como identificadores, pueden constar de varios caracteres alfanuméricos
(letras y números) de los cuales el primero debe ser una letra. Ejemplos de nombres válidos de variables: A3, Nombre,
Contador, Total.
Los nombres elegidos para las variables del algoritmo (programa) deben ser significativos y tener relación con el objeto que
representan, para así facilitar la lectura del mismo.

Expresiones
Las expresiones son combinaciones de constantes, variables, operadores y paréntesis. Cada expresión al ser evaluada
toma un valor que se determina aplicando los operadores a los valores de las constantes y variables implicadas en la
expresión. Dependiendo del valor resultante de evaluar la expresión se tiene el tipo de la expresión. Así, encontramos
expresiones aritméticas (resultado entero o real), expresiones lógicas (resultado lógico) y expresiones de tipo carácter
(resultado carácter o string).

Expresiones Aritméticas
A continuación se presentan los diferentes operadores aritméticos que se pueden utilizar para la construcción de
expresiones aritméticas, indicando el tipo de operando que admiten y el tipo del resultado de la expresión.

Operador Significado Tipo de Operandos Tipo de Resultado


** Exponenciación Entero o real Entero o real
div División entera Entero Entero
mod Resto de la división entera Entero Entero
/ División real Entero o Real Real
* Multiplicación Entero o real Entero o real
- Resta Entero o real Entero o real
+ Suma Entero o real Entero o real
Los siguientes ejemplos muestran resultados de expresiones aritméticas, compruébelos:

Expresión Resultado Expresión Resultado


10.5 / 3.0 3.5 10 div 3 3
1/4 0.25 18 div 2 9
2.0 / 4.0 0.5 30 div 30 1
6/1 6.0 6 div 8 0

Reglas de Prioridad
Cuando las expresiones tienen dos o más operandos, se requieren reglas que permitan evitar ambigüedades al momento
de realizar la evaluación de la expresión. Estas se denominan Reglas de prioridad o de precedencia y son:
Las operaciones que están encerradas entre paréntesis se evalúan primero. Si existen diferentes paréntesis anidados (unos
dentro de otros), las expresiones más internas se evalúan primero.
Las operaciones aritméticas se realizan de acuerdo al siguiente orden de prioridad.
 Exponencial ( ** )

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 5
CENEAC - Programación con C++ Nivel 1.

 División real ( / ), División entera ( div ), Resto de la división entera ( mod ) y Multiplicación ( * )
 Suma ( + ) y Resta ( - )
En caso de coincidir varios operadores de igual prioridad en una expresión o subexpresión encerrada entre paréntesis, el
orden de prioridad será de izquierda a derecha.

Expresiones Lógicas
Una expresión lógica es aquella que al ser evaluada puede tomar sólo uno de estos dos valores: verdadero o falso. Las
expresiones lógicas se forman combinando constantes lógicas, variables lógicas y otras expresiones lógicas, utilizando los
operadores lógicos no, y, o, y los operadores relacionales (de relación o comparación) =, <, >, <=, >=, <>.

Operadores Lógicos
Operador Significado Ejemplo de Expresión
no Negación no P
y Conjunción PyQ
o Disyunción PoQ

Operadores Relacionales
Operador Significado Ejemplo de Expresión
< Menor que A<3
> Mayor que P>Q
= Igual P=1
<= Menor o igual A <= P
>= Mayor o igual P >= Q
<> Diferente P <> Q

Los siguientes ejemplos muestran resultados de expresiones lógicas, compruébelos.


Expresión Resultado Expresión Resultado
(1 > 0) y (3 = 3) verdadero (0 < 5) o (0 > 5) verdadero
5 >= 7 falso P o (no P) verdadero
(A > 0) y (A < 0) falso P y (no P) falso
5<0 falso 5=0 falso

Prioridad de los operadores (Aritméticos y Lógicos)


Operador Prioridad
**, no Más alta (primera operación ejecutada)
/, *, div, mod, y 
+, -, o
<, >, =, <=, >=, <> Más baja (última operación ejecutada)

Al igual que en las expresiones aritméticas, los paréntesis se pueden utilizar y tendrán prioridad sobre cualquier operación.
Además, en caso de coincidir varios operadores de igual prioridad en una expresión o subexpresión encerrada entre
paréntesis, el orden de prioridad será de izquierda a derecha.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 6
CENEAC - Programación con C++ Nivel 1.

Expresiones String
Una expresión de tipo string es aquella que al ser evaluada produce un valor de tipo string. Las expresiones string se
forman combinando constantes, variables y otras expresiones de tipo string lógicas, utilizando los operadores del tipo string:
concatenar y subcadena. En el caso de concatenar se utilizan diversos operadores, los comunes: || + &

Operadores String
Operador Significado Ejemplo de Expresión
|| + & Concatenación "Pedro y " || "Pablo"
substr(string,inicio,tamaño) Subcadena substr("Pedro",1,2)

Los siguientes ejemplos muestran resultados de expresiones String


Expresión Resultado
"Pedro y " + " Pablo" "Pedro y Pablo"
substr("Pedro",1,2) "Pe"
substr("Casa roja",6,4) "roja"

1.2.3. Secuenciamiento de Acciones


Las formas de composición de acciones son los mecanismos mediante los cuales se construirán nuevas acciones a partir
de acciones ya creadas. A continuación se presentan las formas de composición de acciones más usuales, así como
también ejemplos de sus usos.
Las siguientes convenciones serán usadas en la presentación:
 Las letras mayúsculas A, B, C, … representarán acciones cualesquiera.
 Las letras griegas , , , … representaran expresiones lógicas (predicados).

Secuenciamiento
La forma de composición de acciones más natural es el secuenciamiento, el cual simplemente consiste en la presentación
de un conjunto de acciones en un cierto orden. Permite indicar el orden en que se desea se ejecuten una serie de acciones.
Notación
Sean A, B, C acciones cualesquiera. El secuenciamiento de ellas en el orden A, B, C se expresa de la siguiente forma:
A
B (orden textual)
C
o bien A ; C ; B; (orden dado mediante el operador de secuenciamiento “ ; “)

EJEMPLO 1: Intercambio de dos valores


Enunciado
Dadas dos variables n1 y n2 que identifican a dos valores enteros cualesquiera, intercambiar su valor.
Análisis
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 7
CENEAC - Programación con C++ Nivel 1.

Para la solución del problema es necesario evitar la pérdida del valor de una de las dos variables, pérdida que se deriva de
una utilización directa de la asignación, por eso se utilizará una tercera variable aux. De las versiones que se presentan, la
primera resuelve el problema con la ayuda de una variable auxiliar (solución por memorización) y la segunda lo resuelve
mediante acumulaciones basadas en las propiedades de los operadores + y – (solución por cálculo).

Solución de la Primera Versión Solución de la Segunda Versión


Escribir(“Suministre los 2 números de entrada.”); Escribir(“Suministre los 2 números de entrada.”);
Leer(n1); Leer(n2); Leer(n1); Leer(n2);
EI = { n1 = x, n2 = y, x, y  ENTEROS } EI = { n1 = x, n2 = y, x, y  ENTEROS }
aux = n1; //se guarda en aux para no perder n1 n1 = n1 + n2;
n1 = n2; n2 = n1 – n2;
n2 = aux; n1 = n1 – n2;
EF = { n1= y, n2 = x, x, y  ENTEROS } EF = { n1 = y, n2 = x, x, y  ENTEROS }
Escribir(“Resultado luego del intercambio: ”); Escribir(“Resultado luego del intercambio: ”);
Escribir(n1); Escribir(n2); Escribir(n1); Escribir(B);

Léxico Léxico
Entero n1, n2: Nominan a los valores a intercambiar Entero n1, n2: Nominan a los valores a intercambiar
Entero aux: Variable auxiliar para el proceso

Ejemplo 2: Equivalencia de una cantidad en segundos a días, horas, minutos y segundos


Enunciado
Dadas un valor entero y positivo S, que representa una cantidad en segundos, se quiere hallar su equivalente en días,
horas, minutos y segundos sobrantes.
Análisis
La solución consiste hacer divisiones sucesivas sobre el número de segundos inicial para hallar las equivalencias.
Solución
Escribir(“Suministre la cantidad inicial de segundos.”); Leer(S);
MIN = S div 60 ; SEG = S mod 60; // div y mod son operadores y palabras reservadas
HOR = MIN div 60 ; MIN = MIN mod 60;
DIA = HOR div 24 ; HOR = HOR mod 24;
Escribir(“El equivalente de segundos en días, horas, minutos y segundos es: ”);
Escribir(DIA + “ ” + MIN + “ ” + SEG);

Léxico
Entero S: Variable que nomina al valor en segundos dado.
Entero SEG, MIN, HOR, DIA: Variables para almacenar la cantidad de segundos, minutos, horas y días respectivamente
calculadas a partir del valor dado.

1.2.4. Acciones Básicas


Se definirán tres acciones básicas: asignación, entrada simple (lectura) y salida simple (escritura), a partir de las
cuales, mediante las formas de composición de acciones, se crearan acciones más complejas que permitirán expresar la
solución de cualquier tipo de problema.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 8
CENEAC - Programación con C++ Nivel 1.

Asignación ( = )
Esta acción es la base para la construcción de las soluciones de los problemas; ya que permite modificar el estado de los
objetos que conforman el algoritmo y de esta forma obtener los resultados requeridos.
Ejemplos. Sean A y P variables de tipo entero, PI variable de tipo real, C variable de tipo lógico y S variable de tipo string.
A = -3 (a la variable A se le asigna u otorga el valor -3)
PI = 3,1415
P = -9 * A
C = (PI = 8,1)
P = P+1
S = "Perro Nro. " + P

El operador = se conoce como operador de asignación (también se utiliza “”) y tiene como efecto el cambio de estado
(cambio de valor), de la variable que aparece a la izquierda de él. Cabe estacar que el operador = también puede ser
utilizado para realizar comparaciones entre expresiones y verificar sin sus valores son iguales.

Para los ejemplos anteriores, el efecto de cada acción de asignación es:


Acción Efecto de la asignación
A = -3 A toma el valor 3 (o el valor 3 se le asigna a la variable A)
PI = 3,1415 PI toma el valor 3,1415 (a PI se le asigna el valor 3,1415)
P = -9 * A P se le asigna el resultado de -9 por el valor de A (-3), es decir, se la asigna 27
C = (PI = 8,1) C se le asigna el resultado de comparar si el valor de PI es igual a 8,1 pero
como son distintos, a C se le asigna Falso
P = P+1 P toma su valor más 1, es decir, a P se le asigna 28
S = "Perro Nro. " + P S se le asigna la concatenación o de la cadena "Perro Nro." con el valor de P, S
toma entonces como valor la cadena “Perro Nro. 28”

Entrada Simple ( Leer )


La entrada simple o lectura permite nominar información que se encuentra almacenada en un dispositivo de entrada.
Ejemplos: Sean A y B dos variables de tipo entero
Leer(A) Leer(B)

La operación Leer indica que de algún dispositivo de entrada externo, del cual se hace abstracción, se está copiando un
valor sobre la variable que aparece entre paréntesis. Esta acción tiene como efecto el cambio de valor (o cambio de estado)
de la variable entre paréntesis.

Nota: ¿Por qué subrayar algunas palabras?


Es común observar en los algoritmos que algunas de las instrucciones se destacan, bien sea con negritas o subrayándolas.
Esto se hace con el objetivo de destacarlas como palabras reservadas o instrucciones que tienen un significado especial
en el pseudocódigo. Se destacan porque tienen un uso especial, y por lo tanto, esas palabras no se pueden usar como
nombres o identificadores de constantes, variables o procedimientos.

Salida Simple ( Escribir )


Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 9
CENEAC - Programación con C++ Nivel 1.

La salida simple o escritura es la acción que se utiliza para mostrar los valores almacenados en las variables, se utiliza
frecuentemente para mostrar los resultados obtenidos por el algoritmo o programa.
Ejemplos: Sea A variable de tipo entero
A = 5 * 20 Escribir(A) Escribir(A + 1)

La operación Escribir indica que a través de algún dispositivo de salida externo, del cual se hace abstracción, se está
escribiendo o mostrando el valor que aparece entre paréntesis.

Intradocumentación o comentarios ( // )
Esta acción permite agregar al algoritmo comentarios sobre la utilidad de sus instrucciones. La intradocumentación del
código es una buena práctica algorítmica y de programación ya que ayuda al mejor entendimiento de la lógica utilizada en la
solución que el algoritmo plantea a un problema dado. Uno de los operadores utilizados para agregar comentarios en
pseudocógigo es //, mientras que otros lenguajes se usan: (* *) /* */ ‘ # / <!-- -->

1.3. Estructuras de Control Condicional (Si y Selección)


Las estructuras condicionales son formas de composición de acciones que se utiliza en problemas donde las acciones a
realizar dependen del resultado de evaluar ciertas condiciones.

1.3.1. Condicional simple


Se utiliza cuando solo se necesita considerar el caso en que la condición evaluada es verdadera, y no es relevante el caso
en que esta condición no se cumpla, es decir, al evaluarse se tenga un valor falso para ella.
Notación
Sea  un predicado (expresión lógica) que condiciona la ejecución de una acción A cualquiera, el condicionamiento de la
acción A al predicado  se expresa:
Si  entonces
A;
FinSi; En este análisis, la acción A sólo se ejecutará si el predicado  al ser evaluado es verdadero.

Ejemplo 3: Ordenamiento de dos valores


Enunciado
Dadas dos variables a y b que identifican a dos valores enteros respectivamente, se quiere modificar eventualmente esas
identificaciones de tal manera que a nomine al valor más grande y b al más pequeño.
Análisis
Debemos intercambiar los valores de las variables, lo cual nos lleva a un problema cuya solución es conocida: intercambio
de dos valores. El centro de la solución está en la respuesta a la pregunta ¿Cuándo debemos intercambiar?
Solución
Escribir(“Suministre los valores de los dos números a comparar.”); Leer(a, b); //solicitud y lectura de
valores
Si a < b entonces // a es menor que b, por lo tanto hay que intercambiar sus valores
c = a ; a = b ; b = c; // reutilizamos las instrucciones para intercambiar valores
Finsi;
Escribir(“El valor máximo es: ” + A + “ y el mínimo es; ” + B );

Léxico

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 10
CENEAC - Programación con C++ Nivel 1.

entero a, b: variables para los valores a ordenar como máximo y mínimo.


entero c: variable auxiliar para no perder uno de los dos valores de entrada.

1.3.2. Condicional doble


El condicional doble es una forma de composición de acciones que se utiliza en problemas donde las acciones a realizar
dependen de si el resultado de evaluar ciertas condiciones es verdadero o falso.
Notación
Sean A y B acciones cualesquiera y sea  un predicado (expresión lógica) que condiciona la ejecución de las acciones A y
B en forma excluyente; esto es si  es verdadero se ejecutará la acción A y si  es falso se ejecutará la acción B. Este tipo
de condicionamiento se expresa de la siguiente forma:
Si  entonces
A;
sino
B;
Finsi;
En este análisis, sólo se ejecutará una de las dos acciones, dependiendo del resultado de evaluar 

Ejemplo 4: Máximo de dos valores


Enunciado
Dadas dos variables a y b que identifican a dos valores enteros e1 y e2 respectivamente, se quiere determinar cual de los
dos valores es el mayor.
Análisis
La solución se basa en la determinación de una partición del dominio de los datos, que refleje los casos posibles asociados
al problema.
Solución
Escribir(“Suministre los valores de los dos números a comparar.”); Leer(a, b);
Si a > b entonces
Escribir(“El mayor valor es: ” + a); // el mayor valor lo tiene la variable a
Sino
Si a < b entonces
Escribir(“El mayor valor es: ” + b); // el mayor valor lo tiene la variable b
Sino
Escribir(“Ambos valores son iguales”)
FinSi;
FinSi;

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 11
CENEAC - Programación con C++ Nivel 1.

1.4. Estructuras de Control Iterativas (Ciclos: Para, Repetir y Mientras)


Para aquellos problemas en los cuales es necesario repetir un conjunto de acciones un número (conocido o no) de veces,
se definen las formas iterativas de composición de acciones, también llamadas estructuras de control iterativas.
Existen varias estructuras de control iterativas, siendo las tres más comunes: el para (for), el repetir (repeat) y el mientras
(while).

1.4.1. Ciclo Para (For)


Esta estructura de control iterativa, se utiliza en aquellos problemas donde se conoce el número de veces que se desea
ejecutar un conjunto de acciones.
Notación
Sea N un número entero y positivo que indica cuantas veces se desea ejecutar las acciones A, B y C, siendo A, B, C
acciones cualesquiera. La repetición de las acciones A, B, C utilizando la estructura de control iterativa Para se expresa:

Para I = 1 hasta N inc 1 hacer ó Para I = N hasta 1 dec 1 hacer


A; A;
B; B;
C; C;
FinPara; FinPara;

Donde:
I se denomina variable de control y es incrementada (inc) o decrementada (dec) automáticamente en el valor indicado.
N es el número de veces que se desea repetir las acciones.
Notas:
 A las acciones comprendidas entre los delimitadores Para y FinPara se les denomina cuerpo de la iteración o
instrucciones del ciclo.
 En el ciclo Para la variable de control no debe ser modificada en el cuerpo de la iteración.
 Cuando el incremento es en 1, se puede omitir la instrucción “inc 1” en el encabezado del Para.

Ejemplo 8: Cálculo de la nota promedio, nota máxima y nota mínima de una serie de N notas
Enunciado
Dada una serie de N notas se desea calcular el promedio de las mismas, así como también la máxima y la mínima nota.
Análisis
La solución se basa en el tratamiento secuencial de cada una de las N notas; esto es, en la definición de las acciones a
realizar sobre una nota (acumularla, compararla para determinar máximo y mínimo) y la aplicación de estas mismas
acciones sobre el resto las notas.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 12
CENEAC - Programación con C++ Nivel 1.

Solución
Algoritmo Principal
// Calcula el promedio, máximo y mínimo de un conjunto de N notas suministradas. Se asume que N > 0
Real Nota, Max, Min, Suma, Prom; // declaración de las variables del algoritmo
Entero i, N; // i es la variable índice del ciclo Para y N la cantidad de notas a procesar
Escribir(“Suministre la cantidad de notas a procesar.”);
Leer(N);

Max = 0 ; Min = 20; // inicializamos las variables con sus mayores valores opuestos
Suma = 0; // se inicializa la variable acumuladora en 0
Para i = 1 hasta N en 1 hacer
Escribir(“Suministre la nota ” + i ); Leer(Nota);
Suma = Suma + Nota;
Si Nota < Min entonces
Min = Nota;
FinSi;
si Nota > Max entonces
Max = Nota;
FinSi;
FinPara;
PROM = SUMA / N;

Escribir(“La nota promedio es: ” + Prom);


Escribir(“La nota máxima es: ” + Max);
Escribir(“La nota mínima es: ” + Min);

FinAlgoritmo Principal;

Léxico del Algoritmo Principal


entero N: Nomina al número de notas a procesar.
real Nota: Nomina a cada una de las notas.
real Suma: Almacena la suma de las notas a procesar.
real Prom: Nomina a la nota promedio
real Max: Nomina a la nota máxima.
real Min: Nomina a la nota mínima.

Observación
En el estado inicial se asume que el valor de N es mayor que cero y en términos de esa suposición se trabaja. ¿Qué
resultados daría el algoritmo si, por error, al introducir el valor de N se introduce un valor negativo o cero?

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 13
CENEAC - Programación con C++ Nivel 1.

1.4.2. Ciclo Repetir (Repeat)


Esta estructura de control iterativa, se utiliza en aquellos problemas donde no se conoce el número de veces que se desea
ejecutar un conjunto de acciones, pero las mismas se ejecutan 1 o más veces.
Notación
Sea  un predicado que caracteriza la terminación de un proceso iterativo y sean A y B acciones cualesquiera. La repetición
de las acciones A y B utilizando la estructura de control iterativa Repetir se expresa:
Repetir
A;
B;
hasta ;

Esta composición es equivalente al siguiente secuenciamiento de acciones:


A ; B  ; (A ; B  ; (A ; B  ; (A ; B  ; .............. )))
   
test test test test
donde el test de terminación se efectúa después de cada ejecución de las acciones A y B. Así, con el repetir las acciones
del cuerpo de la iteración se ejecutan una o más veces.

Ejemplo 9: Cálculo de interés sobre un capital.


Enunciado
Dado un valor real C, que representa una cantidad en Bolívares y un valor R que representa un porcentaje de interés anual,
se desea calcular al cabo de cuantos años se duplicará el capital.
Análisis
La solución se basa en el cálculo y acumulación de los intereses generados por el capital inicial año por año, hasta alcanzar
la meta propuesta.
Solución:
Algoritmo Principal
// Calcula la cantidad de años necesarios para duplicar un capital inicial C
Real CI, I, C; Entero Años; // declaración de variables
Escribir(“Introduzca el capital inicial”); Leer(CI); //solicitud y lectura de los valores de entrada
Escribir(“Introduzca el % de Interés”); Leer(I);

C = CI ; Años = 0; // inicializamos convenientemente las variables C y Años


Repetir
C = C + C * I / 100; Años  Años + 1;
hasta C >= 2 * CI;

Escribir(“Para duplicar el capital se necesitan: ” + Años);

FinAlgoritmo Principal;

Léxico del Algoritmo Principal

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 14
CENEAC - Programación con C++ Nivel 1.

real CI: Nomina al capital inicial.


real I: Nomina a la tasa de interés anual.
real C: Almacena el capital acumulado a lo largo de los años.
entero Años: Nomina al número de años necesarios para duplicar el capital
Observación
En el estado inicial se asume que el valor del Capital Inicial (CI) y el valor de la tasa de interés (I) son mayores que cero y
en términos de esa suposición se trabaja. ¿Cómo generalizaría Ud. el algoritmo para que funcione independientemente de
los valores de entrada dados?

1.4.3. Ciclo Mientras (While)


Esta estructura de control iterativa, se utiliza en aquellos problemas donde no se conoce el número de veces que se desea
ejecutar un conjunto de acciones, pero las mismas se ejecutan 0 o más veces.
Notación
Sea  un predicado que caracteriza el comienzo o continuación (negación de la condición de terminación) de un proceso
iterativo y sean A y B acciones cualesquiera. La repetición de las acciones A y B utilizando la estructura de control iterativa
Mientras se expresa:
Mientras  hacer
A;
B;
Fmientras;

Esta composición es equivalente al siguiente secuenciamiento de acciones:


 (A ; B  ; (A ; B  ; (A ; B ................. )))
  
test test test
donde el test de comienzo o continuación se efectúa antes de cada ejecución de las acciones A y B. Así, con el mientras las
acciones del cuerpo de la iteración se ejecutan cero o más veces.

Ejemplo 10: Cálculo del salario de una serie de trabajadores por hora.
Enunciado
Se desea calcular lo que devengarán una serie de trabajadores por el trabajo realizado en una obra, para esto se definió la
siguiente tarifa horaria: las horas trabajadas en horario normal se pagan a razón de Bs. 20 y las horas extras a razón de Bs.
25, mientras no excedan de 10 horas. Si las horas extras exceden de 10 horas, el exceso se paga a razón de Bs. 23,5 la
hora. Además, se conoce que los datos de cada trabajador, que se introducirán, son: nombre del trabajador, horas normales
trabajadas y horas extras trabajadas.
La introducción de los datos terminará cuando se introduzca "*" como nombre del trabajador.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 15
CENEAC - Programación con C++ Nivel 1.

Análisis
La solución se basa en el procesamiento y cálculo del salario devengado por cada trabajador de acuerdo a las tarifas
definidas, la solución se obtiene al aplicar los cálculos de un trabajador a todos los trabajadores a través de la estructura
iterativa mientras.
Solución:
Algoritmo Principal;
// Calcula el salario de un trabajador en función de las horas normales y horas extras trabajadas
String Nombre; // declaración de variables
Real HN, HE, S, PagoHN, PagoHE, pagoHE2;

//inicializamos estas variables con el monto pagado al trabajador


PagoHN = 20; PagoHE = 25; pagoHE2 = 23,5;

Escribir(“Introduzca nombre del trabajador o * para terminar”); Leer(Nombre);

Mientras NOMBRE <> "*" hacer


Escribir(“Introduzca número de horas trabajadas en horario normal”); Leer(HN);
Escribir(“Introduzca número de horas extras trabajadas”); Leer(HE);
S = HN * PagoHN;
Si HE > 10 entonces
S = S + 10 * PagoHE + (HE - 10) * PagoHE2;
sino
S = S + HE * PagoHE;
Fsi;
// se muestra el salario del trabajador actual
Escribir(“El trabajador ”+ Nombre + “ devengará un salario de Bs. ” + S);

// se solicita el nombre del siguiente trabajador


Escribir(“Introduzca nombre del siguiente trabajador o * para terminar”); Leer(Nombre);
FinMientras;

FinAlgoritmo Principal;

Léxico del Algoritmo Principal


string Nombre: Nomina al nombre de cada trabajador.
real HN,HE: Nomina a las horas normales y extras trabajadas por cada trabajador.
real S: Almacena la cantidad de Bolívares devengada por cada trabajador.

Observación
El fin del proceso iterativo, en este caso viene dado por una marca especial “*” en la secuencia de datos de entrada. Esta
marca o valor de parada la define el trabajador según las características del problema.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 16
CENEAC - Programación con C++ Nivel 1.

1.5. Procedimientos

1.5.1. Procedimientos Nominados (Acciones y Funciones)


La nominación de acciones es un mecanismo que permite asociarle un nombre a un conjunto de acciones, para luego
referirse al conjunto mediante ese nombre. Dependiendo de ciertas características propias de la Acción Nominada, esta
puede ser un Procedimiento o una Función.
Este mecanismo de asociarle un nombre a un conjunto de acciones, puede utilizarse como:
 Simplificación en la escritura del algoritmo, al "factorizar" un conjunto de acciones que se repiten.
 Una forma de abstracción, al dar un nombre a una acción que se especifica y posteriormente se desarrolla (análisis
descendente).
La especificación de una Acción Nominada (procedimiento o función) es una caracterización del efecto de la acción
independientemente de su desarrollo. Por lo tanto toda Acción Nominada tiene un sola especificación (¿Qué hace la
acción?) y una o más realizaciones (¿Cómo lo hace?)

Notación de Procedimientos
Definición de Procedimientos
La definición de un procedimiento consta de dos partes:
1. El encabezado del procedimiento (primera línea)
2. El cuerpo del procedimiento (líneas restantes)

Ejemplo de definición de procedimientos


Con A, B, C y D acciones cualesquiera y  un predicado (expresión lógica)
Procedimiento NOMBRE ( lista de parámetros formales )
// comentario con el objetivo o especificación de la función
A;
C;
B;
FinProcedimiento NOMBRE;

Uso de procedimientos
Para ejecutar el Procedimiento antes definido, basta colocar su nombre seguido de una lista de parámetros actuales
sobre los que se aplicará el conjunto de acciones agrupadas en el procedimiento.

Ejemplo de uso de procedimientos


B;
C;
Si  entonces
D;
sino
NOMBRE (lista de parámetros actuales);
Finsi;
A;

Notación de Funciones
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 17
CENEAC - Programación con C++ Nivel 1.

Definición de Funciones
La definición de una función también consta de dos partes:
1. El encabezado de la función (1era. línea)
2. El cuerpo de l función (líneas restantes)

Ejemplo de definición de funciones


Con A, B, C y D acciones cualesquiera
Función NOMBRE ( lista de parámetros formales ) : tipodedatodelretorno
// comentario con el objetivo o especificación de la función
A;
C;
Retornar(valor_resultado_que_retorna);
FinFunción NOMBRE;

Uso de funciones
Para ejecutar una función, basta colocar su nombre seguido de una lista de parámetros actuales sobre los que se
aplicará la función a la derecha de un operador de asignación. Las funciones retornan un solo valor.

Ejemplo de uso de funciones


B;
D;
Variable = NOMBRE (lista de parámetros actuales);
A;

Tanto para el caso de los procedimientos como en el de las funciones, se tiene que:
 Lista de parámetros formales es una serie de 0 ó más variables que se utilizaran dentro del cuerpo de la Acción
Nominada (procedimiento o función).
 Lista de parámetros actuales es una serie de 0 ó más constantes, variables y/o expresiones sobre las cuales se
desea aplicar la Acción Nominada (procedimiento o función). Estos deben especificarse en cada llamada a la
Acción Nominada y contienen los valores que sustituirán a los parámetros formales, es decir, los valores sobre los
cuales se desea aplicar la Acción Nominada; pudiendo cambiar de una llamada a otra.
 Debe existir una correspondencia uno a uno tanto en el tipo como en el número de parámetros actuales y formales,
la cual en general se establece de acuerdo al orden de colocación de los mismos.
 Dependiendo del tipo de sustitución deseada, se definen diversas maneras de realizar el Paso de Parámetros,
siendo las dos más utilizadas las denominadas: Paso de parámetros por valor y Paso de parámetros por
referencia.

1.5.2. Paso de Parámetros por Valor


Bajo este esquema, el parámetro actual se evalúa y el valor resultante de la evaluación sustituye al correspondiente
parámetro formal; de tal forma que, independientemente de los cambios que sufra el parámetro formal, durante la ejecución
de la Acción Nominada, el valor del parámetro actual correspondiente no se modificará.

1.5.3. Paso de Parámetros por Referencia

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 18
CENEAC - Programación con C++ Nivel 1.

Bajo este esquema, el parámetro actual se evalúa y el valor resultante de la evaluación sustituye al correspondiente
parámetro formal; de tal forma que, cualquier cambio que sufra el parámetro formal, durante la ejecución de la Acción
Nominada, afectará el valor del parámetro actual correspondiente. Así, el parámetro actual puede cambiar su valor una vez
ejecutada la Acción Nominada.
Para distinguir las dos clases de Paso de Parámetros, se postulan las siguientes reglas:
1. El Paso de Parámetros por Valor es la forma más frecuente de sustitución y por ende se tomará por defecto.
2. El Paso de Parámetros por Referencia se indica colocando var antes de parámetro formal correspondiente.

Para ilustrar los conceptos relacionados con los tipos de Paso de Parámetros, se presenta el siguiente ejemplo.
Ejemplo 5: Diferencia entre el Paso de Parámetros por Valor y por Referencia
Sea el siguiente procedimiento:
Procedimiento EJEMPLO (var Entero X , Entero Y)
// Ejemplo para mostrar el efecto de los dos tipos de paso de parámetros
X = X + 5;
Y = Y + 5;
FinProcedimiento EJEMPLO;

y sea el siguiente fragmento de algoritmo que llamo o utiliza al procedimiento Ejemplo:


Entero A, B; // declaración de las variables y del tipo de dato de sus valores
A = 10; B = 10;
EJEMPLO( A , B )
// al regresar del procedimiento EJEMPLO A = 15 y B = 10
Escribir(“los valores de A y B luego de llama a EJEMPLO son: ” + A + “ - ” + B);

Una vez realizada la llamada al procedimiento EJEMPLO, los valores que se imprimen son 15 y 10 respectivamente, los
cuales corresponden a los valores que almacenan los parámetros actuales A y B. Note que el valor del parámetro A cambió
(por haber sido pasado por referencia) mientras que el valor del parámetro B no cambió (por haber sido pasado por valor).

Ejemplo 6: Cálculo de las raíces de una ecuación de 2do. grado


Enunciado
Dados tres valores reales a, b y c correspondientes a los coeficientes de la ecuación de 2do. grado ax 2 + bx + c, se quiere
calcular las raíces de dicha ecuación, ya sean reales o imaginarias.
Análisis
La solución del problema consiste en primero verificar que los valores dados efectivamente representen los coeficientes de
una ecuación de 2do. grado, esto es el valor a debe ser diferente de cero. Una vez realizada esta verificación se debe
determinar las condiciones bajo las cuales se tienen soluciones reales o imaginarias y en un primer nivel de abstracción, se
especificaran dos procedimientos llamados: SolucionesReales y SolucionesImaginarias, que calculan las soluciones reales
o imaginarias respectivamente.
El segundo nivel de abstracción consiste en el desarrollo de los procedimientos antes descritos.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 19
CENEAC - Programación con C++ Nivel 1.

Solución:
Algoritmo Principal
// algoritmo que llama a los procedimientos SolucionesReales y SolucionesImaginarias para calcular las
raíces de // una ecuación de segundo grado
Real a, b, c, d, r1, r2, i1, i2; // declaración de las variables del algoritmo
Escribir(“Suministre los valores de los coeficientes a, b y c de la ecuación.”); Leer(a, b, c);
Si a=0 entonces
Escribir(“Datos de Entrada Inválidos”);
sino
d = B ** 2 – 4 * A * C;
si d >= 0 entonces
SolucionesReales( a , b , d , r1 , r2 );
Escribir(“Las raíces reales de la ecuación son r1= ” + r1 + ” y r2= ” + r2);
sino
SolucionesReales( a , b , d , r1 , i1 , r2 , i2 );
Escribir(“Las raíces reales de la ecuación son r1= ” + r1 + ” , r2= ” + r2 +
“ y raíces imaginarias son i1= ” + i1 + ” , i2= ” + i2);
FinSi;
FinSi;

Léxico del Algoritmo Principal


real a, b, c: Variables que nominan a los valores de entrada.
real d : Variable para almacenar el valor del discriminante de la ecuación.
real r1, r2, i1, i2: Variables que nominan a las raíces de la ecuación.
procedimiento SolucionesReales(a,b,d,r1,r2): Calcula las raíces reales de una ecuación de 2º
procedimiento solucionesImaginarias(a,b,d,r1,i1,r2,i2): Calcula la raíces reales y las imaginarias de una ecuación de 2º

Observe que en el algoritmo anterior se utilizan dos procedimientos sin haberlos desarrollado, sólo los invocamos o
llamamos en el cuerpo de instrucciones del algoritmo, esto permite solucionar el problema en un primer nivel de abstracción.
La solución definitiva y completa se obtendrá cuando se desarrollen los siguientes procedimientos.

Definición del Procedimiento SolucionesReales(a,b,d,r1,r2)


Procedimiento SolucionesReales (Real A, B, D, Var Real X1, X2)
// Calcula las raíces reales de una ecuación de 2do. grado
Real R, P; // declaramos variables propias o locales del procedimiento SolucionesReales
R = D ** (1/2) / (2 * A);
P = -B / (2 * A);
X1 = P + R; X2 = P – R;
FinProcedimiento SolucionesReales;

Léxico del Procedimiento SolucionesReales


real A, B, D: Parámetros formales pasados por valor, contienen a los valores de entrada al procedimiento

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 20
CENEAC - Programación con C++ Nivel 1.

real X1, X2: Parámetros formales pasados por referencia, contienen a los valores de las raíces reales de la ecuación de
2do. grado.
real P, R: Variables auxiliares para el cálculo.

Definición del Procedimiento SolucionesImaginarias(a, b, d, r1, i1, r2, i2)


Procedimiento SolucionesImaginarias (Real a, b, d, Var Real r1, i1, r2, i2)
// Calcula las raíces reales y las imaginarias de una ecuación de 2do. grado
R = -D ** (1/2) / (2 * A);
P = -B / (2 * A);
R1 = P ; I1  R;
R2 = P ; I2  -R;
FinProcedimiento SolucionesImaginarias;

Léxico del Procedimiento SOLUCIONES_ IMAGINARIAS


real A,B,D: Parámetros formales pasados por valor, contienen a los valores de entrada al procedimiento
real R1, I1, R2, I2:Parámetros formales pasados por referencia, contienen a los valores de las raíces imaginarias de la
ecuación de 2do. grado.
real P,R: Variables auxiliares para el cálculo.

Ejemplo 7: Cálculo de una función matemática


Enunciado
Dados dos valores reales a y b, se quiere construir un algoritmo para evaluar la siguiente función matemática:
y = 8x3 + 3x si x > 1
y = -3x + 1 si x  1
sobre cada uno de los valores de entrada, así como también sobre la suma de ambos.
Análisis
La solución se basa en la definición de una función que implemente la función matemática dada y que se aplique a cada
uno de los valores de entrada así como también a la suma de ambos. La función se debe realizar de tal forma que permita
calcular el valor resultante de la evaluación de la función matemática dada. Este valor será retornado al algoritmo en el
nombre de la función.
Solución:
Algoritmo Principal
// invoca o llama a una función matemática
Real A, B, FA, FB, FAB; // declaración de las variables del algoritmo
Escribir(“Suministre los valores de entrada A y B a evaluar.”); Leer(A, B);
FA = FUNCMAT(A);
FB = FUNCMAT(B);
FAB = FUNCMAT(A+B);
Escribir(“El valor de la función para A es: ” + FA);
Escribir(“El valor de la función para B es: ” + FB);
Escribir(“El valor de la función para A + B es: ” + FAB);

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 21
CENEAC - Programación con C++ Nivel 1.

Léxico del Algoritmo Principal


real A, B: Variables que nominan a los valores de entrada.
real FA, FB, FAB: Variables que nominan los resultados de evaluar la función en los valores indicados.
función FUNCMAT (X): Evalúa la función matemática dada.

Definición de la Función FUNCMAT(X)


Función FUNCMAT (Real X): Real
// Evalúa la función matemática según el valor de X
Real Y; // variable local de FUNCMAT utilizada para guardar el resultado de la evaluación de cada función
Si X > 1 entonces
Y = 8 * X ** 3 + 3 * X;
sino
Y = -(3 * X) + 1;
Fsi;
Retornar(Y);
FinFunción FUNCMAT;

Léxico de la Función FUNCMAT


real X: Parámetro formal pasado por valor, contiene el valor sobre el cual se desea evaluar la función matemática dada
real Y: Variable auxiliar para el cálculo.

1.5.4. Alcance: Variables Locales y Variables Globales


Las variables utilizadas en el algoritmo principal y en los procedimientos se clasifican en variables locales y variables
globales.
Una variables local es aquella que está declarada y definida dentro de un procedimiento o función (subprograma), así esta
variable será considerada como diferente de otras variables con el mismo nombre declaradas en el algoritmo principal o en
otros procedimientos y funciones. La variable tendrá validez en el subprograma en que está definida. Cuando otro
subprograma utiliza el mismo nombre se refiere a una posición de memoria diferente y por ende a otra variable.
Una variable global es aquella que está declarada en el algoritmo principal, del que dependen todos los subprogramas.
El uso de variables locales tiene muchas ventajas, siendo una de las más importantes la de que los subprogramas se hacen
independientes, estableciéndose la comunicación entre el algoritmo principal y los subprogramas a través de los parámetros
únicamente. Esto conlleva a que para utilizar un subprograma (procedimiento o función) sólo se necesita saber lo que hace
y no como lo hace.
Esta característica hace posible dividir grandes proyectos en partes independientes más pequeñas y de esta forma varios
programadores podrán contribuir a encontrar la solución trabajando independientemente.
En un algoritmo simple con un subprograma, cada variable es o bien local al procedimiento o global al algoritmo completo.
Sin embargo, si el algoritmo incluye subprogramas que a su vez contiene a otros subprogramas -subprogramas anidados-
entonces la noción de global y local cambia a una forma más general.
El alcance de un identificador (constante, variables o subprograma) es la parte de algoritmo donde se conoce el
identificador, esto es: si están definidas localmente a un subprograma su alcance se confina a cualquier subprograma que
esté dentro del subprograma donde están definidas, a menos que la variable sea redefinida. En la siguiente figura, se ilustra
el concepto de alcance.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 22
CENEAC - Programación con C++ Nivel 1.

A Identificadores (*) Son accesibles


B definidos en: desde:
C A A,B,C,D,E,F,G
B B,C
C C
D D,E,F,G

D E E,F,G
F F
E G G
F
Excepto que sean redefinidos dentro del
procedimiento
G
(*) Identificadores: variables, constantes, acciones y
funciones.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 23
CENEAC - Programación con C++ Nivel 1.

TEMA 2.
CREACIÓN DE PROGRAMAS EN C++

2.1. Introducción al Lenguaje, origen y principales características


La historia del lenguaje de programación C++ comienza a principios de los años 70, con un programador de nombre Dennis
Ritchie que trabajaba en los laboratorios de AT&T Bell.
Trabajando con un lenguaje llamado BCPL inventado por Martin Richards (que luego influyó para crear el B de Ken
Thompson), Ritchie deseaba un lenguaje que le permitiese manejar el hardware de la misma manera que el ensamblador
pero con algo de programación estructurada como los lenguajes de alto nivel. Fue entonces que creó el C que
primeramente corría en computadoras PDP-7 y PDP-11 con el sistema operativo UNIX. Pero los verdaderos alcances de lo
que sería éste, se verían poco tiempo después cuando Ritchie volvió a escribir el compilador C de UNIX en el mismo C, y
luego Ken Thompson (diseñador del sistema) escribió UNIX completamente en C y ya no en ensamblador.
Al momento de que AT&T cedió (a un precio bastante bajo) el sistema operativo a varias universidades, el auge de C
comenzaba. Cuando fueron comerciales las computadoras personales, empezaron a diseñarse varias versiones de
compiladores C, éste se convirtió en el lenguaje favorito para crear aplicaciones.
En 1983, el Instituto Americano de Normalización (ANSI) se dio a la tarea de estandarizar el lenguaje C, aunque esta tarea
tardó 6 años en completarse, y además con la ayuda de la Organización Internacional de Normalización (ISO), en el año de
1989 definió el C Estándar.
A partir de éste, se dio pie para evolucionar el lenguaje de programación C. Fue en los mismos laboratorios de AT&T Bell,
que Bjarnes Stroutstrup diseñó y desarrolló C++ buscando un lenguaje con las opciones de programación orientada a
objetos. Bjarne Stroustrup crea una versión experimental denominada "C with Classes" hacia 1979, con la intención de
proporcionar una herramienta de desarrollo para el kernel Unix en ambientes distribuidos. En particular, Stroustrup
consideraba que ciertas características del lenguaje Simula (notablemente su orientación a objetos) eran útiles en
desarrollos de software complejos. Es así como decide extender el lenguaje C.
El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un
laboratorio científico. Antes se había usado el nombre "C con clases". La expresión "C++" significa "incremento de C" y se
refiere a que C++ es una extensión de C. En 1985 Stroustrup publica la primera edición del libro "The C++ Programming
Language" que sirvió de estándar informal y texto de referencia. Posteriormente el lenguaje fue estandarizado (ISO C++) y
paralelamente son publicadas la segunda y tercera ediciones de "The C++ Programming Language" de modo tal que
reflejan estos cambios. Desde sus inicios, C++ intentó ser un lenguaje que incluye completamente al lenguaje C (quizá el
99% del código escrito en C es válido en C++) pero al mismo tiempo incorpora muchas características sofisticadas no
incluidas en aquél, tales como: Programación Orientada a Objetos, manejo de excepciones, sobrecarga de operadores,
plantillas. La base del lenguaje fue creada por programadores y para programadores, a diferencia de otros lenguajes como
Basic o Cobol que fueron creados para que los usuarios resolvieran pequeños problemas de sus computadores y el
segundo para que los no programadores pudiesen entender partes del programa.
Es un lenguaje de nivel medio porque combina la programación estructurada de los lenguajes de alto nivel con la flexibilidad
del ensamblador. A continuación se clasifican según su nivel algunos de los lenguajes de programación más conocidos:1
 Alto nivel: Ada, Modula-2, Pascal, Cobol, Fortran, Basic
 Nivel medio: Java, C++, C, Forth, Macroensamblador
 Nivel bajo: Ensamblador
Muchos compiladores de C++ están orientados hacia el desarrollo para entornos gráficos como Windows y Linux. El sistema
operativo Windows en sus versiones 98 y XP, por ejemplo, está escrito casi completamente en C, incluso cuando la
compañía Microsoft creó el compilador Visual C++.

1 Fuente: Herbert Schildt. C Manual de Referencia.


Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 24
CENEAC - Programación con C++ Nivel 1.

C++ es un superconjunto de C, cualquier compilador de C++ debe ser capaz de compilar un programa en C. De hecho la
mayoría admite tanto código en C como en C++ en un archivo. Cuando se compila código C en un compilador C++ este
debe cumplir con los estándares definidos en 1989, cualquier palabra definida en el estándar de 1999 no funcionará.
La evolución de C++ continúa. Es un lenguaje influenciado por C y Simula y a su vez ha influido en los lenguajes Ada, C#,
Java, PHP, D, Perl. Entre las implementaciones más usadas de este lenguaje destacan GNU Compiler Collection, Microsoft
Visual C++, Borland C++ Builder, Dev-C ++, C++ Free. Ha sido estandarizado y actualizado a través de las versiones ISO
C++, ANSI C++ 1998 y ANSI C++ 2003.
Entre los lenguajes asociados a C destacan:
 C++ Builder: Creado por la empresa Inprise, reconocida por la calidad de sus herramientas de desarrollo. Por
ejemplo, llevan la firma Borland, quien ha desarrollado Borland C++, Intrabuilder, JBuilder, Delphi, C++ Builder.
C++ Builder surgió de la fusión de dos tecnologías: Borland C++ que soporta el lenguaje C++ estándar con todas
sus novedades, y el entorno RAD de Delphi.
 Visual C++: En el año de 1992, la compañía Microsoft introduce C/C++ 7.0 y la biblioteca de clases MFC, los
cuales tenían la finalidad de que el desarrollo de aplicaciones para Windows, escritas en C, fuera más fácil. Sin
embargo, no resultó como esperaban, así que un año más tarde fue creado Visual C++ 1.0, que parecía más
amigable a los desarrolladores, porque tenía una versión mejorada de las clases MFC. Con Visual C++ se introdujo
una tecnología de desarrollo a base de asistentes. En general es un entorno de desarrollo diseñado para crear
aplicaciones gráficas orientadas a objetos.
 C#: Este lenguaje es una evolución de C y C++. Creado por Microsoft y presentado como Visual C# en el conjunto
de Visual Studio .NET. Está diseñado para crear una amplia gama de aplicaciones empresariales. La biblioteca
para programar en este lenguaje es .NET Framework. El lenguaje es simple, moderno, y está orientado a objetos.
El código de C# se compila como código administrado, lo que significa que se beneficia de los servicios de
Common Language Runtime. Estos servicios incluyen la interoperabilidad entre lenguajes, la recolección de
elementos no utilizados, mayor seguridad y mejor compatibilidad entre las versiones.
 Java: El lenguaje de programación Java fue creado a partir de C++, como una plataforma para desarrollo de
sistemas de información para Internet y para aparatos electrodomésticos. Poco tiempo después de su liberación
(en 1995), se empiezan a ver las capacidades de este lenguaje. Pronto deja de ser un lenguaje que sólo se usaba
en Internet, y empiezan a crearse programas completos con él. El lenguaje es orientado a objetos y
multiplataforma, esto quiere decir que el código se puede transportar a diferentes sistemas operativos y ejecutarse
en ellos por medio de la maquina virtual de Java. Al igual que con C++ existen varios compiladores para este
lenguaje como lo son JBuilder y Visual J++ (ahora evolucionado a J#).

Entre las principales ventajas de C++ destacan:


 Lenguaje de programación orientado a objetos.
 Lenguaje muy didáctico, facilita el aprendizaje posterior de C#, Java, Visual Basic, Javascript, PHP, entre otros.
 Muy potente en lo que se refiere a creación de sistemas complejos, un lenguaje muy robusto, permite elaborar
desde aplicaciones sencillas hasta sistemas operativos.
 Actualmente, puede compilar y ejecutar código de C, ya que incluye librerías para realizar esta labor.
 Existe un amplio grupo de apoyo para programadores y desarrolladores, ya que es un lenguaje muy empleado, hay
mucho contenido didáctico en tutoriales en línea y libros, existe una gran fuente de códigos ya desarrollados en
C++ que pueden ser reutilizados.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 25
CENEAC - Programación con C++ Nivel 1.

2.2. Elementos de un programa


A continuación mostramos un ejemplo de la estructura básica de un programa en C++:

Ejemplo 1. Estructura básica de un programa


#include <iostream> declaración de librerías
using namespace std; espacio de nombres estándar de C++
int main () { inicio del bloque de código de la función principal
// mostramos un mensaje por salida estándar comentario
cout << "primer programa en C++"; secuencia de instrucciones
return 0;
valor de retorno de la función
}
llaves de cierre del bloque de código

Análisis de la estructura del programa:

using namespace std; El espacio de nombres estándar (namespace std) evita


que los programadores utilicen los mismos nombres de
funciones y acciones ya incluídas en C++
#include <iostream> Se refiere a la biblioteca de funciones que vamos a utilizar
en el programa. Para llamar a una biblioteca en particular
se utiliza #include <librería_solicitada>
iostream es la biblioteca que permite el uso de las
instrucciones de lectura y escritura estándar cout y cin.
#include <iostream.h> es el equivalente a la unión de
las instrucciones using namespace std; y #include
<iostream> pero está aceptado en el estándar actual de
programación en C++.
int main () { Todo programa en C++ comienza con una función main()
y sólo puede haber una. En C++ el main() siempre
regresa un entero, es por eso se antepone int a la
palabra main. Los paréntesis que le siguen pueden
contener los parámetros de la función o estar vacíos. La
llave que se abre significa que se iniciará un bloque de
instrucciones.

// texto del comentario // se utiliza para escribir comentarios de una sóla línea
/* */ se utiliza para comentarios de varias líneas

cout << "primer programa en C++\n"; cout es una instrucción de la biblioteca iostream, se
utiliza para mostrar un mensaje por la salida estándar que
suele ser la pantalla o la línea de comandos.
\n indica salto de línea, es equivalente a endl;

return 0; Valor de retorno de la función y llave de cierre del bloque


} de código.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 26
CENEAC - Programación con C++ Nivel 1.

En forma más completa, la estructura general de un programa en C++ incluye:

// Documentación del programa: identificación de su autor, fecha, versión y una breve descripción
/*--------------------------------------------------------- */
| Autor: |
| Fecha: Versión: 1.0 |
|--------------------------------------------------------- |
| Descripción del Programa: |
| |
| ---------------------------------------------------------- */

// Declaración de librerías de C++ incluídas, declaración del uso del espacio de nombres
#include <iostream>
using namespace std;

// Zona de Declaración de Constantes

// Zona de Declaración de Tipos

// Zona de Cabeceras de Procedimientos y Funciones

// Programa Principal
int main()
{
// Zona de Declaración de Variables del Programa principal

// Zona de instrucciones

// Zona de impresión de resultados ( cout << "resultados del programa: \n"; )

system("Pause"); // Hace una pausa cuando el programa es ejecutado, permitiendo ver los resultados
return 0; // Valor de retorno
}

// Implementación de Procedimientos y Funciones

…. // declaración e instrucciones de los Procedimientos y Funciones

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 27
CENEAC - Programación con C++ Nivel 1.

2.3. Identificadores y Palabras reservadas en C++


C++ es sensible al uso de mayúsculas y minúsculas, por lo tanto si el nombre de un programa, variable o constante
empieza con una letra en mayúsculas/minúsculas, debemos de asegurarnos que durante el resto del código nos refiramos a
ella exactamente como la escribimos la primera vez. Los nombres de las variables no pueden usar signos de puntuación,
sólo caracteres “A-Z”, “a-z”, “_“, “0-9”, aunque no deben comenzar con un número (0-9). No se deben de repetir nombres de
variables en el mismo contexto.
También hay restricciones respecto a las palabras reservadas, la cuales no pueden utilizarse como nombres de variables,
funciones u otros elementos definidos por el programador. Las principales palabras reservadas se muestran a continuación.

Tabla 1. Palabras Reservadas en C++

and and_eq asm auto bitand


bitor bool break case match char
class compl. const const_cast continue
default delete do double dynamic_cast
else enum explicit export extern
false float for friend goto
if inline int long mutable
namespace new not not_eq operator
or or_eq private protected public
register reinterpret_cast return short signed
sizeof static static_cast struct switch
template this throw true try
typedef typeid typename union unsigned
using virtual void volatile wchar_t
while xor xor_eq

2.4. Tipos de datos básicos en C++


Los tipos de datos básicos o atómicos son los tipos de datos más sencillos, a partir de los cuales se pueden construir otros
más complejos. La tabla ilustra estos tipos con sus intervalos de valores posibles y el número de bytes que ocupan.

Tabla 2. Tipos de datos básicos en C++

Tipo Tamaño en bytes Intervalo


short 2 -32768 a 32767
unsigned short 2 0 a 65535
long 4 -2147483648 a 2147483647
unsigned long 4 0 a 4294967295
int dependiendo del -32768 a 32767
compilador utilizado
podría ser 2 o 4
continua …

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 28
CENEAC - Programación con C++ Nivel 1.

Tipo Tamaño en bytes Intervalo


unsigned int 2o4 0 a 65535
float 4 1.17549535e-38 a 3.402823466e+38 con 8 cifras
decimales
double 8 2.2250738585072014e-308 a
1.7976931348623158e+308 con 16 cifras decimales
long double 10
char 1 -128 a 127
unsigned char 1 0 a 255
bool 1 Valor lógico o booleano que puede ser true
(verdadero) o false (falso)
Nota: en algunas implementaciones de C++ no se
dispone del tipo bool, en su lugar se usan variables
tipo int, usando 0 para indicar falso y 1 para indicar
verdadero.

La biblioteca <limits> indica las constantes definidas para los intervalos que pueden almacenar algunos tipos de datos. El
siguiente ejemplo es un programa que nos muestra los límites de los principales tipos.

Ejemplo 2. Límites de los tipos de datos básicos usando la librería limits


#include <limits>
#include <iostream>
using namespace std;

int main( ){
// intervalos o límites de algunos tipos de datos

cout << "Muestra los valores minimos y maximos de alguno de los tipos de datos \n";
cout << "\n int minimo: " << INT_MIN << " int maximo: " << INT_MAX;

cout << "\n char minimo: " << CHAR_MIN << " char maximo: " << CHAR_MAX;
cout << "\n tamaño en bits: " << CHAR_BIT;

cout << "\n long minimo: " << LONG_MIN << " long maximo: " << LONG_MAX;

cout<<"\n short minimo: " << SHRT_MIN << " short maximo: " << SHRT_MAX << "\n\n";

system("Pause"); // Pausa que permite ver los resultados


return 0;
}

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 29
CENEAC - Programación con C++ Nivel 1.

2.5. Variables, Constantes, Operaciones básicas, Expresiones y Prioridad de


Operadores
VARIABLES Y CONSTANTES
Una variable es una posición de memoria con nombre, que se usa para mantener un valor que puede ser modificado por el
programa. Una constante es una variable cuyo valor no puede ser modificado. Las variables son declaradas, usadas y
liberadas. Una declaración se encuentra ligada a un tipo de dato, a un nombre y a un valor.
La sintaxis general de la declaración de una variable es: tipo nombre [=valor];

La sintaxis general de la declaración de una constante es: const tipo nombre = valor;

Ejemplos: int miNum = 5; declara una variable de tipo entero llamada “miNum” a la cual se le asigna el valor 5
const float pi=3.141592; declara una constante de tipo real llamada “pi” a la cual se le asigna 3.141592
const char inicial=’A’; declara una constante de tipo carácter llamada “inicial” a la cual se le asigna A

Los corchetes significan que la inicialización es opcional.


Existe un tipo de constante, llamado constante declarada o simbólica, la cual se definen asociando un nombre a un valor a
través de la sintáxis #define nombre_constante valor, por ejemplo, #define PI 3.141592
Las variables se pueden declarar en tres sitios básicos: dentro de las funciones (ya sea la función main u otras creadas por
el programador), las cuales son llamadas variables locales; en la definición de parámetros de una función, como se verá
más adelante; y fuera de todas las funciones, la cuales son llamadas variables globales. En C++ una variable puede ser
declarada e inicializada en cualquier lugar del programa, sin embargo, se recomienda y es una buena práctica declararlas al
inicio del programa. Siempre deben ser declaradas antes de usarlas.

Ejemplo 3. Declaración y uso de variables Ejemplo 4. Declaración y uso de constantes


#include <iostream> #include <iostream>
using namespace std; using namespace std;

int variable_global=10; int main()


int main() { // calcula el área de un círculo
{ // declaración y uso de variables
int variable_local=20; // declaraciones
cout << "El valor de la variable global es: "\ const float pi=3.141592;
<< variable_global << " \n"; int radio=5;
cout << "El valor de la variable local es: "\ float area;
<< variable_local << " \n";
// calculos
variable_local = variable_global; area=pi*radio*radio;
cout << "Ahora el valor de la variable local es: "\
<< variable_local; // resultados
cout << "el area del circulo de radio "\
cout << "\n \n"; system("Pause"); <<radio << " es: " <<area;
return 0;
} cout << "\n \n"; system("Pause");
return 0;
}

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 30
CENEAC - Programación con C++ Nivel 1.

Una variable global puede ser modificada en cualquier parte del programa, mientras que una variable local sólo puede ser
modificada y utilizada dentro de la función en la que se ha declarado. Por supuesto, antes de utilizar una variable y hacer
operaciones con ella, hay que declararla.
Por lo general, siempre se trata de utilizar lo menos posible la declaración de variables globales. El siguiente ejemplo
muestra que se pueden declarar variables en cualquier parte del programa, siempre y cuando se declaren antes de usarlas.
Una vez que tenemos la variable declarada, podemos asignarla valores e introducirla en expresiones o como parámetro de
funciones.

OPERACIONES BÁSICAS Y EXPRESIONES


Los programas de computación se apoyan principalmente en el uso de expresiones que combinan el uso de distintas
variables y operadores a fin de resolver cálculos matemáticos o comparaciones. En C++ los operadores más usados son los
de asignación, arirméticos, lógicos, relacionales, condicionales.
A continuación se muestran tablas resumen de estos operadores y ejemplos de su uso.

Tabla 3. Operadores Abreviados de Asignación en C++

Operador Uso Descripción


= a=b Asigna el valor de b a la variable a
*= a *= b Multiplica a por b y asigna el resultado a la variable a
/= a /= b Divide a entre b y asigna el resultado a la variable a
%= a %= b Divide a entre b y el resto de la división se lo asigna a la
variable a
+= a += b Suma a con b y asigna el resultado a la variable a
-= a -= b Resta b de a y asigna el resultado a la variable a

Tabla 4. Equivalencia de operadores Abreviados de Asignación

Operador Sentencia Sentencia


abreviada no abreviada
*= a *= b a=a*b
/= a /= b a =a / b
%= a %= b a=a%b
+= a += b a=a+b
-= a -= b a=a-b

Tabla 5. Operadores Aritméticos

Operador Tipos enteros Tipos reales Ejemplo


+ Suma Suma 9+3

- Resta Resta 7-3

* Producto Producto 11 * 10

/ División entera: cociente (div) División en coma flotante 8/3

% División entera: resto (mod) División en coma flotante 12 % 4

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 31
CENEAC - Programación con C++ Nivel 1.

Tabla 6. Operadores de incrementación (++) y decrementación (--)

Incremetación Decrementación
++n --n

Equivalente a: Equivalente a:
n +=1 n -=1
n =n + 1 n =n - 1

Tabla 7. Operadores Relacionales en C++

Operador Significado Ejemplo


== Igual a a=b

!= No igual a a != b

> Mayor que a>b

< Menor que a<b

>= Mayor o igual que a >= b

<= Menor o igual que a <= b

En C++ los operadores aritméticos y relacionales no son de uso exclusivo de los tipos de datos numéricos. Un dato tipo
char también es modificable mediante operadores arirméticos y puede ser comparado con otro carácter usando operadores
relacionales. Esto se debe a que en C++, cuando se guarda un dato en una variable de tipo char, realmente lo que se está
guardando es el código numérico ASCII correspondiente al carácter. Por ejemplo, para la declaración char letra = ‘A’
realmente se está almacenando el valor 65 en la variable letra, para ‘a’ se estaría almacenando el valor 97 en la variable.
Los operadores relacionales sirven para comprobar una condición y se usan normalmente en sentencia de selección (if) y
de iteración (for, while). Los operadores relacionales de la tabla 7 se pueden usar con variables de los tipos básicos: char,
int, float, double, entre otras.

Además de los operadores aritméticos y relacionales, se tienen los operadores lógicos o booleanos. Se utilizan en las
expresiones para devolver un valor verdadero (cualquier entero distinto de 0, generalmente 1) o un valor falso (0, cero).
Los operadores lógicos en C++ son not (!), and (&&) y or (||).
El operador lógico de negación ! (not, no) produce falso si su operando es verdadero y viceversa. El operador lógico &&
(and, y) produce verdadero sólo si ambos operandos son verdaderos (distintos de 0); si cualquiera de los operadores es
falso, produce falso. El operador lógico || (or, o) produce verdadero si cualquiera de lo operandos es verdadero (distinto de
0) y produce falso sólo si ambos son falsos (igual a cero).

Tabla 8. Operadores Lógicos en C++

Operador Operación lógica Ejemplo


! (negación) No lógico !(a >= b)

&& (y) oper1 && oper2 a < b && b < 10

|| (o) oper1 || oper2 a = b || b != c

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 32
CENEAC - Programación con C++ Nivel 1.

Los paréntesis se usan para indicar explícitamente el orden y prioridad en que debe ser evaluada una expresión. Al igual
que en las operaciones tradicionales, los paréntesis sirven para agrupar o asociar expresiones e indicar en una prioridad
especial para ser evaluadas. Si los paréntesis están anidados se evalúan en primer lugar los más internos.
C++ también dispone del operador condicional, (? : ;) el cual es un operador ternario que devuelve un resultado cuyo
valor depende de la condición probada. Al ser un operador ternario requiere tres operandos:
expresión_condicional ? expresión_verdadera : expresión_falsa;

Se utiliza para reemplazar y abreviar el uso del condicional si - sino (if - else). Se evalúa la expresión_condicional, si su
resultado es verdadedo (distinto de cero) se ejecuta la expresión verdadera, si el resultado de la evaluación es falso (cero),
se ejecuta la expresión falsa.

Tabla 9. Operador Condicional


(precio > 150) ? descuento = 0.05 : descuento = 0.10
Si precio es mayor que 150 Si precio no es mayor que 150
descuento = 5% descuento = 10%

Ejemplo 5. Uso de operadores aritméticos Ejemplo 6. Uso de operadores relacionales


#include <iostream> #include <iostream>
using namespace std; using namespace std;

int main( ){ int main () {


// muestra el uso de operadores aritméticos /* uso de operadores relacionales y lógicos */
int a = 2, b = 5, c = 4;
int a=5, b=10, c=20, r=2; char letra1 = 'e', letra2 = 'f';

cout << "antes de las operaciones: \n"; cout << "Operadores sobre variables numericas \n";
cout << " a=" <<a << " b=" << b \ cout << "Valores, a: " << a << " b: " << b \
<< " c=" <<c << " r=" << r << "\n\n"; << " y c: " << c << "\n \n";

r = a + b; cout << "comparando por desigualdad a y b, "\


a = c % r; // se calcula c mod r, resto de 20/15 "resultado: " << (a == b) << " (0 es falso) \n\n";
c += b; a += 2;
a = a * 2;
cout << "Operadores sobre variables caracter \n";
cout << "despues de las operaciones: \n"; cout << "Valores, letra1: " << letra1 \
cout << " a=" <<a << " b=" << b \ << " y letra2: " << letra2 << "\n \n";
<< " c=" <<c << " r=" << r;
letra1++; // incrementando el valor de letra1
cout << "\n \n"; system("Pause"); cout << "comparando ambas letras " \
return 0; "resultado: " << (letra1 == letra2) << " (1 es
} verdadero) \n\n";

cout << "\n \n"; system("Pause");


return 0;
}

PRIORIDAD DE LOS OPERADORES

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 33
CENEAC - Programación con C++ Nivel 1.

La prioridad o precedencia de operadores determina el orden en el que se aplican los operadores a un valor. C++ agrupa a
los operadores en 16 grupos. Los operadores del grupo 1 tienen mayor prioridad que los del grupo 2, y así sucesivamente.
Al aplicar la prioridad se debe considerar:
 Si dos operadores se aplican al mismo operando, el operador con mayor prioridad se aplica primero.
 Todos los operadores del mismo grupo tienen igual prioridad y asociatividad.
 La asociatividad izquierda-derecha (I-D) significa aplicar el operador más a la izquierda primero.
 La asociatividad derecha-izquierda (D-I) significa aplicar el operador más a la derecha primero.
 Los paréntesis tiene la máxima prioridad.

Tabla 10. Grupos de Prioridad de Operadores en C++


Tabla 1. Principales Operadores (continuación)
Grupo Operadores Asociat.
1 :: x -> [] () I-D Símbolo Significado
2 ++ -- ~ ! - + & * D-I - cambio de signo (operador unario)
sizeof + identidad (operador unario)
3 .* ->* I-D & dirección
4 * / % I-D * seguir un puntero
5 + - I-D sizeof tamaño en bytes
6 << >> I-D new reserva de memoria
7 < <= > >= I-D delete liberación de memoria
8 == != I-D / división
9 & I-D % resto de la división entera
10 ^ I-D + suma
11 | I-D - resta
12 && I-D << desplazamiento de bits a la
13 || I-D izquierda
14 ?: (expresión condicional) D-I >> desplazamiento de bits a la
15 = *= /= %= += -= D-I derecha
<<= >>= &= ||= ^= < menor que
16 , (operador coma) I-D <= menor o igual
> mayor que
Tabla 11. Principales Operadores >= mayor o igual
Símbolo Significado == igual
:: Resolución de alcance != desigual
++ incremento sufijo & conjunción (Y) de bits
-- decremento sufijo ^ O exclusivo de bits
() llamada a función | O inclusivo de bits
[] elemento de tabla && conjunción (Y) lógica
-> acceso a miembro desde un || disyunción (O) lógica
puntero = asignación simple
. acceso a miembro *= /= %= asignaciones compuestas
+= -=
++ incremento prefijo <<= >>=
-- decremento prefijo &= ^= |=
! negación lógica ?: expresión condicional
~ complemento a uno trhow lanzamiento de excepción
continúa  , separador de expresiones

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 34
CENEAC - Programación con C++ Nivel 1.

2.6. Operaciones Básicas de Entrada (Lectura) y Salida (Escritura)


En C++ las operaciones básicas para los flujos de entrada (cin>>) y salida (cout<<) forman parte de la librería
<iostream.h>, razón por la cual, la mayoría de los programas incluyen una llamada a esta librería en su encabezado.

Estas dos instrucciones de E/S nos permiten leer valores suministrados por el usuario (cin>>) y mandar mensajes a la
pantalla (cout<<).
Cuando usamos la instrucción: cout<<”Mensaje a la pantalla”<<endl;
Estamos enviando una cadena de caracteres (“Mensaje a la pantalla”) al dispositivo de salida estándar (la pantalla). Luego,
el manipulador de flujo endl da el efecto de la secuencia de escape o salto de línea ‘\n’.
La instrucción cout<< puede imprimir tanto números enteros como flotantes sin necesidad de decirle específicamente el
tipo de datos del que se trata. Las cadenas de caracteres a imprimir deben de estar entre comillas dobles.
A continuación tenemos un ejemplo con el uso de las operaciones estándar de entrada y salida:

Ejemplo 7. Lectura y Escritura de datos con cin>> y cout<<


#include <iostream>
using namespace std;

int main(){ // lectura y escritura estándar


int n1; float n2;
cout<< "Por favor, suministre un valor entero" <<endl;
cin>> n1;

cout<< "suministre ahora un valor real (recuerde usar . para la parte decimal)" <<endl;
cin>> n2;

cout<< "2 + " <<n1 <<"= " <<2 + n1 <<endl; //imprime un entero
cout<< n2 <<" / 2 = " <<n2/2 <<endl; //imprime un flotante (real)
cout<< "luego de convertir a entero el resultado, ";
cout<< "PI + "<<n1 <<"= " <<(int)(3.141592 + n1) <<endl <<endl; //imprime un entero

system("Pause");
return 0;
}

En resumen, cin es el flujo de entrada asociado al teclado, cout es el flujo de salida estándar asociado a la pantalla. En el
caso de que se presenten errores, se utiliza cerr, que es el flujo de error estándar asociado a la pantalla. Los operadores
<< y >> son operadores de inserción y extracción de flujo respectivamente. Estos operadores son muy eficaces porque no
es necesario especificar formatos para presentación o lectura, ellos los presentan en función al tipo de datos de la variable.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 35
CENEAC - Programación con C++ Nivel 1.

2.7. Conversion de tipos y Modificadores de formato


Conversión Implícita.
En C++, y otros lenguajes, las variables de los tipos de datos básicos pueden ser mezclados libremente en asignaciones y
expresiones. Las conversiones de un tipo de dato a otro se ejecutan automáticamente, proceso llamado conversión
implícita de datos. Los operandos de tipo más bajo se convierten a los de tipo más alto, por ejemplo, en la suma de un
entero (int) y un real (float), el entero es transformado automáticamente a real.
Las reglas que se aplican para realizar la conversión implícita de datos son: (promoción integral de tipos)
 Cualquier operando de tipo char, short o enumerado se convierte al tipo int.
 Si los operandos tienen diferentes tipos, la siguiente lista determina a que tipo se convertirá el resultado:
int → unsigned int → long → unsigned long → float → double → long double

El tipo que viene primero en la lista se convierte al que viene segundo y así sucesivamente.
También se aplica conversión de tipos en las asignaciones, cuando la variable receptora es de distinto tipo que el resultado
de la expresión de la derecha. En el caso de las asignaciones, cuando la conversión no implica pérdida de precisión porque
se pasa de un tipo menor a uno mayor se hala de promoción de tipos. Cuando hay pérdida de precisión, las conversiones
se conocen como democión de tipos. El compilador normalmente emite un aviso o warning, cuando se hace una democión
implícita, es decir cuando hay una democión automática.

Conversión Explícita.
En este lenguaje se fuerza la conversión de tipos mediante el proceso de casting (o “moldeo”). El casting admite en C++
dos formatos:
(<nombre de tipo>)<valor o expresión> // estilo C, por ejemplo, total = (int)10 + (int)5.78;
<nombre de tipo>(<valor o expresión>) // estilo C++, por ejemplo, total = int(10) + int (5.78);

El operador de conversión explícita o cast tiene la misma prioridad que los operadores unitarios (- + !), es decir,
pertenecen al grupo de la segunda prioridad más alta.

Ejemplo 8. Ejemplo de conversión implícita y explícita de datos


#include <iostream>
using namespace std;

int main(){ // uso de la conversión de datos


char a='Z'; int n1; float n2, n3;
cout<< "Por favor, suministre un valor entero" <<endl; cin>>n1;
cout<< "suministre un valor real" <<endl; cin>>n2;

n3 = n1 + n2 + a;

cout<< "convertido a int n3 = n1+n2+a es igual a: " <<int(n3) <<endl;

system("Pause");
return 0;
}

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 36
CENEAC - Programación con C++ Nivel 1.

Modificadores o Manipuladores de Formatos.


Otra de las herramientas para la especificación de formatos son los manipuladores de flujos, así como el manipulador de
flujo “endl” da una secuencia de escape, los manipuladores o convertidores de base dec, oct y hex, hacen que la
variable a la que le anteceden sea presentada en formato decimal, octal o hexadecimal respectivamente.
Estos manipuladores de flujo no son exclusivos de la salida, también funcionan con la entrada de datos, por defecto, la
entrada desde el teclado se lee en decimal y también la presentación de datos se hace en decimal, así que si se sabe que
el usuario dará a la máquina un dato en hexadecimal, sería buena idea anticiparlo y poner el formato en que será leído.

Ejemplo 9. Ejemplo de conversión de bases numéricas


#include <iostream>
using namespace std;

int main(){ // uso de la conversión de base decimal, hexadecimal y octal


int numero;

cout<<"suministre un numero: "; cin>> numero;

cout<<"numero suministrado transformado a base octal es: "<<oct<<numero<<endl;


cout<<"en hexadecimal: "<<hex<<numero<<endl;
cout<<"en su formato original en base decimal: "<<dec<<numero <<endl <<endl;

cout<<"indique otro numero, el cual sera leido en hexadecimal"<<endl;


cin>> hex >>numero;
cout<<"el leido vale: "<<hex <<numero <<endl;
cout<<"transformado a base decimal: " <<dec <<numero <<endl;
cout<<"transformado a base octal: " <<oct <<numero <<endl;

system("Pause");
return 0;
}

En cuanto a la precisión, al imprimir en pantalla un número de tipo flotante, no importa cuantas cifras significativas tenga
(mientras esté dentro de los límites de almacenamiento de flotantes), sólo aparecerán 6 números después del punto, y la
ultima cifra será redondeada en caso de pasar los 6 dígitos. Es decir, que si queremos mandar a la pantalla el número
1.23456789, en su lugar aparecerá 1.234568. Cuando se quieren resultados más exactos, nos es muy útil la librería
<iomanip> que contiene el manipulador setprecision() con el que podemos determinar la precisión con la que queremos
que aparezcan esos datos en la pantalla. Existe también la función miembro precision(), que puede resultar un poco más
cómoda en algunos casos porque el efecto de precisión funciona para todas las instrucciones cout que le sigan. A ambas
se le pasa como parámetro el número de cifras significativas deseadas.
Para cambiar la presentación de los datos en la pantalla, por ejemplo, dejar algunos espacios de margen en la pantalla y
para indicar la alineación del mensaje de dalida se utilizan las siguientes funciones:
 setw que se encarga de hacer aparecer el texto alineado determinados espacios a la derecha, si el numero de
espacios solicitados para su alineación es menor que el numero de caracteres que se imprimirán, no tendrá un
efecto.
 se ocupa del carácter de relleno, el carácter por defecto es el espacio en blanco, pero nosotros podemos
setfill
especificar el que queramos.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 37
CENEAC - Programación con C++ Nivel 1.

A continuación se muestra un ejemplo de modificación de precisión y formato de relleno de la salida por pantalla:

Ejemplo 10. Ejemplo de cambio de precisión y formato de relleno


#include <iostream>
#include <iomanip>
using namespace std;

int main(){ // modificacion de precision y formato de relleno


float num = 1.23456789;
cout<<num<<endl;
cout.precision(4);
cout<< num <<endl;
cout<<setprecision(5) <<num <<endl;
cout.precision(7);
cout<< num <<endl;
cout<<setprecision(9) <<num <<endl;

num = 11;
cout<<setw(5) <<setfill('%') <<num <<endl;
cout<<setw(6) <<99;
cout<<setw(40) <<setfill('*') <<"se relleno con * a la izquierda"<<endl;

system("Pause");
return 0;
}

La instrucción setw muestra el texto alineado 5 espacios y en esos espacios se rellenan con el carácter ‘%’. Es necesario el
manipulador setw para cada operación de salida en pantalla, mientras que setfill funciona para todas las que se incluyan.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 38
CENEAC - Programación con C++ Nivel 1.

2.8. Estructuras de Control Condicional (If, Switch)


Hasta el momento hemos creado programas que se ejecutan de modo secuencia, es decir, una instrucción después de la
otra, en el mismo orden en que están escritas en el programa y ejecutándose una sola vez cada instrucción. Esta forma de
programar es conveniente para programas sencillos, sin embargo, no nos permite trabajar con problemas donde hay que
verificar varias condiciones posibles o donde hay que repetir un grupo de instrucciones varias veces.
Las estructuras de control si permiten hacer estos procedimientos, ya que controlan el flujo o secuencia de ejecución del
programa. Se dividen en tres grandes grupos: secuencia (secueciamiento), selección (condicional) y repetición (ciclos).
A continuación se describen las dos estructuras de control condicional más usadas: If y Switch.

If (Si)
Se trata de una estructura de selección, que verifica una condición y si se cumple (es verdadero) ejecuta varias
instrucciones más.

Ejemplo 11. Uso de la estructura de control If (si)


#include <iostream>
using namespace std;

int main(){ // verifica si se presenta error de división por cero


float divid, divis, res;

cout<<"Suministre el dividendo"<<endl; cin >> divid;


cout<<"Suministre el divisor"<<endl; cin >> divis; <<endl;
if (divis == 0)
cout <<endl <<"\n Error, el divisor suministrado 0, no puede realizarse la division" <<endl;
else
{
res = divid / divis;
cout<<"El resultado de la division es: " <<res <<endl;
}

system("Pause");
return 0;
}

Igualmente el bloque de instrucciones a ejecutar se estructura dentro de llaves, aunque tampoco es necesario cuando se
trata de una sola instrucción.
En ocasiones se necesita construir bloques de instrucciones if y else más complejos, es decir anidamientos para verificar si
se cumplen varias condiciones, por ejemplos, descartar primero se una persona es mayor o no de edad, y luego para cada
caso ejecutar unas instrucciones para las mujeres mayores de edad, las mujeres menores de edad, los hombres mayores
de edad y otras para los hombres menores de edad. Este tipo de verificaciones se pueden realizar utilizando If anidado.
A continuación mostramos un ejemplo de programa para esta verificación:

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 39
CENEAC - Programación con C++ Nivel 1.

Ejemplo 12. Uso de la estructura de control If anidado


#include <iostream>
#include <ctype.h>
using namespace std;

int main(){ // uso del if anidado


char sexo; int edad;

cout <<"Indique la edad de la persona" <<endl;


cin >>edad;
cout <<"Indique el sexo de la persona (F o M)" <<endl; cin >>sexo;
sexo = toupper(sexo);

if (edad>=18)
if (sexo=='F')
cout <<"Mujer mayor de edad" <<endl; // una sola instrucción, no requiere { }
else cout <<"Hombre mayor de edad" <<endl;
else
if (sexo=='F') cout <<"Mujer menor de edad" <<endl;
else cout <<"Hombre menor de edad" <<endl;

cout <<"\nLos valores suministrados son edad: " <<edad <<" y sexo: " <<sexo <<endl;
system("Pause");
return 0;
}

A continuación recordamos el uso del operador condicional, el cual simplifica la estructura del if:.

Ejemplo 13. Uso de la operador condicional ( ? : ) para instrucciones condicionales cortas


#include <iostream>
using namespace std;

int main(){ // uso del operador condicional


float nota;
cout <<"Indica la calificacion de la materia (incluyendo decimales)" <<endl; cin >>nota;
cout<< "\nTu definitiva es:" <<nota <<endl;
nota = (float(int(nota+0.5))); // redondeamos la nota
cout<< "\nTu definitiva redondeada es: " <<nota <<endl;

cout<< (int(nota)>=10 ? "\nAprobaste, felicitaciones!" : "\n Reprobaste, tienes que esforzarte mas\n");

system("Pause");
return 0;
}

Switch (En caso de)

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 40
CENEAC - Programación con C++ Nivel 1.

Muchas veces nos metemos en aprietos cuando necesitamos tener el control sobre muchas opciones que pudiese tomar el
usuario, porque resulta muy complicado pensar en varios if/else anidados, para esos casos tenemos otra herramienta muy
cómoda, la estructura de selección múltiple switch.
La forma general es:
switch (parámetro a evaluar o comparar){
case a : //cuando el parámetro tiene un valor a
acciones a ejecutar;
case b: //cuando el parámetro tiene un valor b
acciones a ejecutar
default:
acciones a ejecutar en el caso por defecto
}

Ejemplo 14. Uso de la estructura switch (En caso de)


#include <iostream>
using namespace std;

int main(){
int op;

// se muestran las opciones al usuario


cout<<" Elija una opcion de la lista"<<endl;
cout<<" 1: sumar notas" <<endl;
cout<<" 2: multiplicar valores" <<endl;
cout<<" 3: promediar precios" <<endl;

// el usuario indica la opcion de su preferecia


cin >>op;

// se determina que opcion selecciono el usuario


switch(op){
case 1:
cout<<"se selecciono sumar (1)"<<endl;
break;
case 2:
cout<<" se selecciono multiplicar (2) "<<endl;
break;
case 3:
cout<<" se selecciono promediar (3) "<<endl;
break;
default:
cout<<"no se indico una opcion valida"<<endl;
break;
}
// continua …
cout <<endl;
cout <<"\n\nHemos salido del switch con la opcion " <<op <<endl;

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 41
CENEAC - Programación con C++ Nivel 1.

system("Pause");
return 0;
}

Notemos que “op” es una variable de tipo entero, asi que case 1, se refiere a que la variable “op” tiene un valor de 1. Si se
tratase de una variable de tipo carácter, entonces debería de escribirse case ‘1’.

Encontramos una nueva instrucción, break. Esta se encarga de alterar el flujo de control. Cuando se encuentra un break,
inmediatamente se salta el resto de la estructura. No es exclusiva de la estructura switch, también se puede colocar en
bloques de los ciclos iterativos if, for, while o do … while.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 42
CENEAC - Programación con C++ Nivel 1.

2.9. Estructuras de Control Iterativo (Ciclos)


Estas estructuras de control o sentencias repetitivas controlan el número de veces que una instrucción o grupo de
instrucciones se ejecutan. C++ soporta tres tipos de estructuras de control: for, while y do …while.

For (Para)
El ciclo for es al que más se recurre cuando se requiere realizar operaciones secuenciales, en donde se conoce el número
de iteraciones o la condición a comprobar.
La forma general de esta sentencia es:
for (asignación inicial ; condición ; instrucción ) {
bloque de instrucciones del ciclo;
}

Si se trata de una sóla instrucción a ejecutar no es necesario encerrarla entre llaves, incluso puede colocarse esta
instrucción dentro del paréntesis del for, separado por una coma.
for (asignación inicial ; condicion ; instrucción1)

Si se trata de instrucciones muy cortas se puede utilizar:


for (asignación inicial ; condicion ; instrucción1 , instrucción 2)

A continuación mostramos ejemplos del uso del ciclo for para instrucciones cortas:

Ejemplo 15. Uso de la estructura de control Para (for) con instrucciones cortas
#include <iostream>
using namespace std;

int main()
{
int i, fin=10, s=0;

for (i=0; i<fin; i++) s += i*2;


cout<<"\nel resultado del primer for es: " <<s <<endl;

for (int i=fin; i>0; i--) s += i;


cout<<"\nel resultado del segundo for es: " <<s <<endl;

system("Pause");
return 0;
}

Ejemplo del uso del ciclo for para el cálculo de una sumatoria de valores enteros:

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 43
CENEAC - Programación con C++ Nivel 1.

Ejemplo 16. Uso de la estructura de control Para (for)


#include <iostream>
using namespace std;

int main()
{
int i, n, temp, suma=0;

cout <<"Indique cuantos numeros quiere sumar: ";


cin >>n;

for (i=0; i<n; i++){


cout <<"\nsuministre el numero " <<(i+1) <<": ";
cin >>temp;
suma += temp;
}

cout <<"\nLa suma de los " <<n <<" valores suministrados es: " <<suma <<endl <<endl;

system("Pause");
return 0;
}

While (Mientras)
La sentencia de control while se encarga de repetir un bloque de código mientras se cumpla una condición. El bloque de
código se debe de encontrar entre llaves, excepto si es una sola línea. La forma general de esta instrucción es la siguiente:
while (condición a cumplir) {
acciones a ejecutar;
}

Un ejemplo de éste lo podemos ver en el cálculo del promedio de varios números, sean notas, precios, temperaturas,
distancias, medidas, edades, entre otros valores.
No siempre se conoce cuantos valores se van a totalizar, por lo tanto, en algunos programas tendremos que permitir al
usuario decidir cuantos valores va a introducir. En estos casos se utiliza un valor de parada o bandera, por ejemplo, que el
usuario suministre el valor “-1” para indicar que ha terminado de suministrar los datos a procesar. El ciclo deberá entonces
comprombar si el usuario a suministrado o no el valor “-1” a fin de detener las iteraciones.
A continuación un ejemplo del cálculo del promedio de precios:

Ejemplo 17. Uso de la estructura de control while (Mientras)


#include <iostream>
using namespace std;

int main(){ // ejemplo del uso del while para totalizar varios precios
int precio=0, total=0, ite=0;
float promPrecios=0;
while(precio != -1){
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 44
CENEAC - Programación con C++ Nivel 1.

cout<<"\nIndique el precio " <<ite <<" o -1 para finalizar" <<endl;


cin>>precio;
total += precio;
++ite;
} // termina el while

cout<<"\nAl salir del while ite es: " <<ite ", es decir, se cuenta un precio de mas." <<endl;

promPrecios = float(total/(ite-1));
cout<<"\n\nel promedio de los precios es: " <<promPrecios <<endl;

system("Pause");
return 0;
}

Ejemplo 18. Estructura del while con una sola instrucción


#include <iostream>
using namespace std;

int main(){ // ejemplos del uso de while con una sola instruccion
int x=0, y=0;

cout <<"inicialmente x es: " <<x <<", y es: " <<y <<endl;

while (x < 10) x = x + 2;


cout <<"al terminar el while, el valor de x es: " <<x <<endl;

while (y++ < 5)


cout <<"dentro del while, el valor de y es: " <<y <<endl;

cout <<"\n\nal terminar el while, el valor de y es: " <<y <<endl;

system("Pause");
return 0;
}

Do … while (Hacer … Mientras o Repetir)


Cuando necesitamos que un ciclo se ejecute por lo menos una vez, es necesaria esta sentencia.
La forma general es:
do{
acciones a ejecutar en el ciclo;
}
while (condicion a cumplir);

Pongamos como ejemplo el mismo de la estructura switch, el menú de opciones.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 45
CENEAC - Programación con C++ Nivel 1.

Necesitamos que por lo menos una vez lea la opción que elige, y en caso de que elija una no disponible, en lugar de
aparecer el mensaje “es una opción no válida” y termine el programa, espere a que el usuario escoja una de la lista.
El programa de ejemplo:

Ejemplo 19. Uso de la estructura de control do … while (Hacer … Mientras o Repetir)


#include <iostream>
using namespace std;

int main(){
int op;

do{ //comienza el ciclo repetir

cout<<"elije una opcion de la lista"<<endl;


cout<<" \n 1: sumar notas" <<endl;
cout<<" \n 2: multiplicar valores" <<endl;
cout<<" \n 3: promediar precios" <<endl;
cout <<"\n opcion: "; cin >> op;
cout << (op<1 || op>3 ? "\n\n opcion invalida, suministrela de nuevo\n\n" : "\n" );
}
while (op<1 || op>3);

cout<<"\n Tenemos una opcion valida, opcion es: " <<op <<endl <<endl;

system("Pause");
return 0;
}

Nota: ¿Qué ocurre con este ejercicio si al suministrar la opción indicas una letra o símbolo no numérico?
¿Cómo podemos solucionar este error?

Ejemplo 20. Estructura del do … while con una sola instrucción


#include <iostream>
using namespace std;

int main(){
int x;

do {x = x + 1; cout <<x <<" - ";} while (x < 12);

cout <<"\n\n"; system("Pause");


return 0;
}

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 46
CENEAC - Programación con C++ Nivel 1.

2.10. Funciones, Procedimientos, Prototipos y Macros


Cuando tratamos de resolver un problema, resulta muy útil utilizar la filosofía de “divide y vencerás”. Esta estrategia consiste
en dividir el problema en partes más sencillas de solucionar. Cuando realizamos un programa, por ejemplo, en el que se
repetirán varias instrucciones pero con distintos valores que definan los resultados, podemos construir el programa a base
de funciones. Una función es un bloque de instrucciones a las que se les asigna un nombre. Así, cada que se necesita
ejecutar esa serie de instrucciones, se invoca la función en lugar se reescribir todas sus instrucciones.

FUNCIONES
Una función es una parte de un programa (subrutina) con un nombre, que puede ser invocada (llamada a ejecución) desde
otras partes el programa tantas veces como se desee. Es un bloque de código que puede ser ejecutado como una unidad
funcional y que retorna como resultado de su ejecución un valor.
Su sintaxis general en C++ es:
especificador_de_tipo nombre_de_función( [lista_de_parámetros] ) {
declaración de variables locales;
instrucciones de la función;

return valor_a_retornar;
}

Donde:
El especificador_de_tipo indica el tipo del valor que la función devolverá mediante el uso de return. El valor puede ser de
cualquier tipo válido. Si no se específica un valor, se asume que la función devolverá un resultado entero. No se tienen
siempre que incluir parámetros en una función, es decir, la lista de parámetros puede estar vacia u opcional.
Las funciones terminan y regresan automáticamente al procedimiento que las llamó cuando se encuentra la última llave }, o
bien, se puede forzar el regreso antes de terminar el código de la función usando la sentencia return(esto no es una buena
práctica de programación). La instrucción return se usa para devolver un valor.

PROCEDIMIENTOS
Las funciones void simulan lo que en otros lenguajes se conocen como procedimientos. Se usan cuando no se requiere
regresar un valor. Se muestra un ejemplo que imprime los cuadrados de ciertos números.
Su sintaxis general en C++ es:
void nombre_de_función( [lista_de_parámetros] )
{
declaración de variables locales;
instrucciones del procedimiento;
}

PROTOTIPOS
El prototipo de una función se refiere a la información contenida en la declaración de una función. Una función debe de estar
definida o al menos declarada antes de hacer uso de ella.
Cuando se declara una función debe de especificarse el tipo de dato que va a devolver, el nombre de la función, y los
parámetros. La siguiente declaración: int suma(int a, int b); especifica una función que devuelve un tipo de dato entero,
tiene por nombre suma, y al invocarla, recibe dos parámetros de tipo entero. Esta declaración debe de escribirse antes de la
función main, y su definición puede escribirse después de ésta.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 47
CENEAC - Programación con C++ Nivel 1.

A continuación se muestran ejemplos de funciones y acciones:

Ejemplo 21. Funciones Ejemplo 22. Procedimientos


#include <iostream> #include <iostream>
using namespace std; using namespace std;

float encontprom(int num1, int num2) { void cuadrados() {


float promedio; //variables locales int contador; // variables locales

promedio = (num1 + num2) / 2.0; for( contador=1; contador<10; contador++)


return(promedio); cout << (contador*contador);
} }

main() { main() {
int a=7, b=10; float resultado; cuadrados(); // invocación

resultado = encontprom(a, b); // invocacion cout << "\n \n"; system("Pause");


cout <<"Promedio=" <<resultado; return 0;
}
cout << "\n \n"; system("Pause");
return 0;
}

A continuación se muestra un ejemplo de uso de prototipos:

Ejemplo 23. Definición de funciones usando Prototipos y pase de parámetros


#include <iostream>
using namespace std;

//prototipo o declaración de la función suma


int suma(int x, int y);

int main(){ // funcion principal


int num1, num2;
cout <<"Por favor indique los 2 numeros a sumar " <<endl; cin >>num1 >>num2;
cout <<"\n\n\nen el main el resultado para la suma es: " <<suma(num1, num2) <<endl;

cout <<"\n\n"; system("Pause");


return 0;
}

// definición del código de la función suma


int suma(int a, int b){ //suma 2 valores enteros
cout <<"\n\n\hemos entrado a la función suma" <<endl;
return (a+b); // a diferencia del main, suma retorna el resultado de la operación, no un cero
}

Observamos que primeramente declaramos la función suma para usarla en el bloque main, y al final del código la
definimos. Tambien se puede escribir la función completa antes del main.
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 48
CENEAC - Programación con C++ Nivel 1.

La función main también tiene un prototipo, y por lo tanto también puede recibir datos aunque no es común usarlo, por
ejemplo, int main ( int argc, char *argv[], char *envp[] )
El parámetro argc es un entero que contiene el número de argumentos pasados a la función desde la línea de comandos.
Es decir, almacena el número de argumentos en la tabla argv.
El parámetro argv es una tabla de cadenas de caracteres (se verá más adelante), cada cadena de caracteres contiene un
argumento pasado en la linea de comandos, la primera cadena contiene el nombre con el que fue invocado y las siguientes
son los demás argumentos.
El parámetro envp es una tabla de cadenas, que pasa información sobre una variable de entorno del sistema operativo.

PASO DE PARÁMETROS
Cuando hablamos de argumentos, nos referimos a los valores que aparecen en la llamada a la función. En el ejemplo
anterior los argumentos fueron “dato1” y “dato2”. Y los parámetros son “a” y “b”, los que reciben los datos.
El prototipo de la función puede tener los nombres de los parámetros distintos a los de la definición, lo cual no afecta el
comportamiento del programa. Lo que no puede cambiar es el tipo de datos que va a recibir, ni el orden de los parámetros.

VALORES DE RETORNO
Una función puede regresar cualquier tipo de valor excepto tablas u otras funciones. Esta limitación podría resolverse
utilizando estructuras o punteros, pero se verá más adelante.

MACROS
Una macro es una parte del código que puede parecer y actuar como una función, se define después de las librerías
mediante un #define.
Se denominan instrucciones de preproceso, porque se ejecutan al comienzo de la compilación. Aunque de utilidad, no se de
abusar de definir muchas de ellas, porque podrían entorpecer el código y hacer lento el programa.

Ejemplo 24. Definición de funciones usando Macros y pase de parámetros


#include <iostream>
using namespace std;

// definición de una macro que determina el mayor de dos valores


#define mayor(a,b) (a>b)? a: b

int main(){ // funcion principal


int n1, n2;
cout<<"Suministre 2 numeros distintos"<<endl; cin>> n1; cin>> n2;
cout<<"\n el mayor de esos numeros es: " <<(mayor(n1,n2)) <<endl; // llamada a la macro

cout <<"\n\n"; system("Pause");


return 0;
}
Tabla 12. Funciones y Procedimientos en C++

Pseudocódigo C / C++

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 49
CENEAC - Programación con C++ Nivel 1.

Funciones Función IdFunc (<par_formales>) : <TipoFunc> IdFunc (<par_formales>) {


<TipoDatodelRetorno> <sentencias>;
{ return (valor);
<sentencias>; }
Retornar(valor);
}

Procedimientos Acción IdProc (<par_formales>) { void IdProc (<par_formales>) {


<sentencias>; <sentencias>;
} }

Parámetros Valor: (...,<TipoDato> id_param, ...) Valor: (..., const <Tipo> id_param, ...)
Referencia: (..., Var <TipoDato> id_param, ...) Referencia: (..., <Tipo> &id_param, ..)

Reglas de 1) Regla de ámbito: es la parte del algoritmo Las mismas que para el pseudolenguaje, pero
ámbito donde se puede utilizar el identificador y va desde el sin la posibilidad de anidar subalgoritmos en
punto donde se declara hasta el final del cuerpo del C++, donde no está permitido.
algoritmo en que se declara, incluyendo los
subalgoritmos anidados.
En C/C++, todos los subprogramas son
2) Regla de ocultación: La visibilidad de un
externos, no se permiten anidamientos y el
identificador coincide con su ámbito, exceptuando los
principal (main()) es otro subprograma.
ámbitos de los identificadores con el mismo nombre
declarados en subalgoritmos anidados.
Cuando en un algoritmo anidado se vuelve a declarar
un identificador con el mismo nombre (redeclaración),
el identificador inicial ya no tiene alcance dentro del
algoritmo anidado.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 50
CENEAC - Programación con C++ Nivel 1.

TEMA 3.
ESTRUCTURAS DE DATOS EN C++
(ARREGLOS, CADENAS Y REGISTROS)

3.1. ARREGLOS UNIDIMENSIONALES

3.1.1. Declaración
La forma de declarar un arreglo de cualquier tipo de datos es la siguiente:
tipo nombre [tamaño] ;
Por ejemplo, podemos declarar un arreglo de enteros con 12 elementos.
int MiArreglo [12] ;

El compilador se encargará de asignar la memoria requerida para almacenar determinados valores.


Cuando se declara un arreglo de caracteres se trata entonces de una cadena.
char nombre[20] ;

3.1.2. Asignación de Valores


Al momento de declarar un arreglo de cualquier tipo, podemos inicializarlo con los valores que queramos. Para inicializar un
arreglo de enteros:
int MiArreglo[5] ={2,34,78,1,9};

Así, estos valores estarán almacenados en cada elemento del arreglo. Es muy importante hacer notar que el primer
elemento de un arreglo es el elemento 0, entonces, MiArreglo[0] contendrá el número 2, el segundo ( MiArreglo[1] )
contendrá el número 34 y así sucesivamente hasta MiArreglo[4] que es el último elemento del arreglo. Si un arreglo cuenta
con menos inicalizadores que elementos entonces el resto se inicializará a 0.
Y en caso de que se trate de una cadena de caracteres podemos hacerlo de 2 formas:
char MiCadena[13]= “hola a todos”;

o bien, declarar cada elemento


char MiArreglo[5]={'h','o','l','a','\0'};

Cuando se inicializa una cadena por el primer método, automáticamente se coloca un carácter de terminación de cadena (el
carácter \0), en cambio, de la segunda forma debemos de ponerlo nosotros. También se puede excluir el tamaño del
arreglo, el compilador lo determinará en la compilación.
Para acceder a cada elemento del arreglo debemos especificar su posición (la primera es la posición 0). En tiempo de
ejecución podemos asignar valores a cada elemento cuidando siempre de no sobrepasar el tamaño del arreglo, si
sobrepasamos ese tamaño se escribirán datos en un área de la memoria que no está asignada para ese arreglo, puede
escribir datos en un área en donde se almacenaba otra variable del programa o un componente del sistema, esto
ocasionaría resultados no deseados.
A continuación se muestra un ejemplo del uso de arreglos.

Ejemplo 25. Uso de arreglos unidimensionales o vectores


#include <iostream.h>
#include <iomanip.h> // para presentación con formato
#include <stdlib.h>
#include <time.h>

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 51
CENEAC - Programación con C++ Nivel 1.

int main(){
const int tam_max=20;
int aleatorios[tam_max];
int i, suma=0;
float promedio;
srand((unsigned)time(NULL));
for(i=0;i<tam_max;i++){
aleatorios[i]=rand()%128; //asigna el numero
cout<<"aleatorio generado: " //presenta el numero
<<setw(5)<<aleatorios[i]<<endl;
}

for(i=0;i<tam_max;)
suma+=aleatorios[i++]; //suma los elementos

promedio=(float)suma/tam_max;
cout<<endl<<"el promedio es: "<<promedio<<endl;

cin.get();

system("Pause");
return 0;
}

Ya anteriormente habíamos hecho un ejercicio que calculaba el promedio de una serie de números introducidos por el
usuario, en este caso el programa guarda los números generados por la máquina en un arreglo para luego calcular el
promedio.
Para asignar cada valor aleatorio generado, se utiliza un ciclo para (for) con un contador “i” que va de 0 hasta el tamaño
máximo que pudiera tener el arreglo. El tamaño del arreglo fue declarado como una constante al principio de la función
principal, esto ayudará en caso de que se quiera aumentar el tamaño del arreglo, así no tendremos que modificar cada
parte de nuestro código en la que se refiera al tamaño, bastará con cambiar el valor de la constante.
Dentro del ciclo se genera un número aleatorio con la función rand(), usamos el operador para obtener el resto de la
división entera, así nos dará un número menor de 128. Previamente se utilizó la función srand() para establecer una semilla
para generar los números aleatorios, esa semilla la tomamos llamando al reloj del sistema con la función time(). Al mismo
tiempo imprimimos el número que fue generado.
Posteriormente, se hace de nuevo un ciclo para acceder a los valores almacenados y sumarlos en una variable, aunque
esto se pudo haber hecho dentro del ciclo anterior servirá para mostrar las formas de asignación y consulta de valores.
Además del uso del incremento después de la asignación. Finalmente se calcula el promedio.
En el caso de las cadenas de caracteres también podemos acceder sus elementos de la misma manera, para la asignar
valores es mejor usar las funciones para la lectura de caracteres, tales como getline(), porque nos permite tener un control
de los caracteres que se introducirán y también introduce el carácter de terminación de cadena, cosa que no es posible con
cin>> directamente y además de que puede escribir en sectores de memoria no adecuados.
El siguiente programa es una muestra del uso de arreglos de caracteres.

Ejemplo 26. Uso de arreglos de caracteres

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 52
CENEAC - Programación con C++ Nivel 1.

#include <iostream.h>
int main(){
const int tam_cad=20;
char cadena[tam_cad];
cin.getline(cadena,tam_cad,'\n');
for(int i=0;(i<tam_cad)&&(cadena[i]!='\0');i++)
cadena[i]+=5;
cout<<cadena<<endl;
cin.get();

system("Pause");
return 0;
}

Este programa almacena una cadena introducida por el usuario, para luego modificar cada carácter por medio de un ciclo
hasta que encuentre el carácter de terminación (\0) o llegue al límite de caracteres.
A continuación se muestra una segunda versión suponiendo que la cadena que introduce el usuario es un mensaje que
debe ser secreto, en lugar de sumar 5 a cada carácter podemos sumarle el número que quiera el usuario, un valor clave.
El programa anterior adaptado queda de la siguiente forma.

Ejemplo 27. Uso de arreglos de caracteres para guardar un mensaje en clave


#include <iostream.h>
int main(){
const int tam_cad=20;
char cadena[tam_cad];
int clave;
cout<<"introduce el texto a cifrar"<<endl;
cin.getline(cadena,tam_cad,'\n');
cout<<"ahora dame tu clave (no mas de 3 digitos)"<<endl;
cin>>clave;
for(int i=0;(i<tam_cad)&&(cadena[i]!='\0');i++)
cadena[i]+=clave;
cout<<"el texto cifrado es: "<<endl;
cout<<cadena<<endl;
cin.ignore();
cin.get();

system("Pause");
return 0;
}

La manipulación de cadenas es uno de los temas más extensos en cuestiones de programación y de los más importantes.
Desde las acciones más básicas como la concatenación de cadenas, la ordenación y búsqueda en arreglos, hasta los
complicados algoritmos de criptografía o la búsqueda a velocidades increíbles.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 53
CENEAC - Programación con C++ Nivel 1.

3.1.3. Arreglos pasados como parámetros


Así como en ejemplos anteriores pasamos una variable a una función, también se puede pasar como argumento un arreglo.
Para pasarlo es necesario hacer una llamada como la siguiente:
MiFuncion (arreglo);

Y el prototipo de la función debe de ser de la siguiente forma:


tipoRetorno MiFuncion (tipoArreglo nombre [ ] );

No se requiere incluir el tamaño del arreglo dentro de los corchetes, si se escribiera el compilador lo ignora.
Cuando pasamos como argumento a una función una variable de tipo int, float, char, etc., estamos pasando el valor de
esta variable a otra variable (podría decirse una copia) que se define en la función, esta forma de pasar argumentos se
denomina “por valor”. Cualquier modificación de valor a esta variable no tendrá efecto en la variable “original” que pasó su
valor a la función. Esta última variable, al ser local, será destruida cuando termine de ejecutarse la función que la contiene.
En el caso del paso de arreglos, este no se hace por valor, sino que se hace un paso por referencia simulado. Cuando se
declara un arreglo, el nombre de éste es una variable que apunta al primer elemento del arreglo, es decir que contiene su
dirección en memoria.
Cuando pasamos esta dirección a una función, cualquier modificación que se haga dentro de esa función de nuestro arreglo
tendrá efectos en la variable original.
El siguiente programa da un ejemplo:

Ejemplo 28. Pase por parámetros de arreglos


#include <iostream.h>
void modifica(int arreglo[], int tamano); //prototipos de las acciones o funciones

int main(){
const int tam_arr=5;
int MiArreglo[tam_arr]={5,10,15,20,25}; int i;
modifica(MiArreglo, tam_arr);
for(i=0;i<tam_arr;++i){
cout<<"elemento "<<i<<"es "
<<MiArreglo[i]<<endl;
}
cout<<"presiona enter para terminar"<<endl; cin.get();

system("Pause");
return 0;
}

void modifica(int arreglo[], int tam_arr){


for(int i=0;i<tam_arr;++i)
arreglo[i]*=2;
}

Se ha declarado e inicializado un arreglo de enteros de 5 elementos. Posteriormente se llama a la función modifica, la cual
multiplica cada elemento del arreglo por dos, estos cambios de valor en los elementos del arreglo tienen efecto en
“MiArreglo” aunque el nombre del parámetro de la función modifica sea diferente.
También se puede pasar a una función el valor de un elemento del arreglo, sólo se pasará el valor del elemento, no se
puede modificar el elemento original.
FuncionInvocada ( array [elemento] );
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 54
CENEAC - Programación con C++ Nivel 1.

En ocasiones puede resultar poco conveniente que alguna de las funciones que reciben un arreglo tenga derecho a
modificarlo, a veces puede que cambie sus valores sin que nosotros nos percatemos inmediatamente. Para eso podemos
incluir el calificador const dentro del prototipo y definición de la función, de esta manera no podrá modificarse nada de este
arreglo.
tipoRetorno nombreFuncion (const tipoArreglo nombre [ ] );

3.2. Arreglos Multidimensionales


Como sabemos, se pueden crear arreglos de cualquier tipo de datos, ahora veremos que también se pueden crear arreglos
de arreglos. La forma de declararlos es con múltiples subíndices, cuantos se quieran tener, nosotros trabajaremos a lo más
con dobles subíndices.
tipoArreglo nombre [subíndice1] [subíndice2] ;

La forma en que queda estructurado un arreglo de dos dimensiones es más o menos como se muestra en la figura.
Arreglo
Arreglo[0] Arreglo[0][0] Arreglo[0][1] Arreglo[0][2]
Arreglo[1] Arreglo[1][0] Arreglo[1][1] Arreglo[1][2]
Arreglo[2] Arreglo[2][0] Arreglo[2][1] Arreglo[2][2]
Arreglo[3] Arreglo[3][0] Arreglo[3][1] Arreglo[3][2]

El nombre del arreglo tiene la dirección del primer elemento (Arreglo[0]), y éste a su vez tiene la dirección del otro arreglo
(Arreglo[0][0]), así para cada elemento de arreglo( 0, 1, 2, 3). Cuando se inicializa un arreglo multidimensional se inicializa
entre llaves cada arreglo o bien, por medio de elemento seguidos:
Arreglo1 [2] [3] = {1, 2, 3, 4, 5, 6};
Arreglo2 [2] [3] = {{2, 4, 6}, {8, 10, 12}};

Al mandar un arreglo de dos dimensiones, debemos de especificar en el prototipo y definición de la función el subíndice2 de
nuestro arreglo. El siguiente ejemplo mostrará varios aspectos de ellos.

Ejemplo 29. Uso de arreglos multidimensionales, en especial, matrices


#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <time.h>
const int vendedores=5, meses=4;
void inicializa(int ventas[][meses]); //prototipos de las acciones o funciones
void calculaTotal(const int ventas[][meses]);
int main(){
int ventas[vendedores][meses]; int i;
//Las siguientes instrucciones solo presentan un
// encabezado para la tabla
cout<<"ventas:"<<setw(23);
for(i=1;i<=meses;++i)
cout<<" mes"<<i <<endl;
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 55
CENEAC - Programación con C++ Nivel 1.

//fin de encabezado
inicializa(ventas);
calculaTotal(ventas);
cout<<endl<<endl<<"presiona enter para terminar"<<endl; cin.get();

system("Pause");
return 0;

}
void inicializa(int ventas[][meses]){
int i,j; //contadores
srand((unsigned)time(NULL));
for(i=0;i<vendedores;++i){
cout<<"ventas del vendedor "<<i+1<<": ";
for(j=0;j<meses;++j){
ventas[i][j]=rand()%50; cout<<setw(7)<<ventas[i][j];
}
cout<<endl;
}
}
void calculaTotal(const int ventas[][meses]){
int suma=0,total=0, i, j;
cout<<endl<<endl;
for(i=0;i<vendedores;++i){
suma=0;
for(j=0;j<meses;++j)
{ suma+=ventas[i][j]; }
cout<<"el vendedor "<<i+1<<" vendio " <<suma<<" productos"<<endl;
total+=suma;
}
cout <<"Se vendieron: " <<total <<" productos en " <<meses <<" meses"<<endl;
}

Notemos primero cómo el prototipo de las funciones “inicializa” y “calculaTotal” debe incluir el segundo subíndice del
arreglo. La función “calculaTotal” muestra un ejemplo del uso del calificador const para evitar que en esta función se
modifique algún valor del arreglo.
La función “inicializa” llena el arreglo con valores aleatorios menores a 50, se utilizan dos contadores para dos ciclos for, “i”
para el primer subíndice, “j” para el segundo. El ciclo recorre la primera “fila” (viendo el arreglo como una tabla de valores)
usando el contador i y a cada celda, con ayuda de “j”, asigna valores, así cuando “j” llega al límite de celdas (meses) se
aumenta una unidad el contador “i” para continuar con la otra fila y recorrerla de nuevo.
La función “calculaTotal” tiene una forma muy similar, pero en ésta no se modificarán valores, sino que se hará la suma de
los elementos de cada fila para presentarlos en pantalla. Una variable “total” se encarga de ir sumando los productos
vendidos cada que se cambia de fila en la tabla, para después, al término de los ciclos presentar el total de artículos
vendidos en esos meses.
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 56
CENEAC - Programación con C++ Nivel 1.

Puede aumentarse el número de filas y columnas de la tabla modificando los valores de las constantes “vendedores” y
“meses” respectivamente, definidas al comienzo del programa.

3.3. ESTRUCTURAS TIPO REGISTRO: Unión, Enumeración y Estructura


En muchos lenguajes, se le permite al programador definir sus propios tipos de datos a partir de los tipos atómicos. En C y
C++ pasa lo mismo, y además existen de antemano los tipos union, enumeración y estructura. Estos tipos definidos forman
parte del estandar de C, y por consiguientede C++, en éste último existe también el tipo class.
Para los objetivos de este trabajo excluiremos el tipo class (clase), pero a lo largo de capítulo mencionaremos en varias
ocasiones este concepto para tener una idea de lo que se trata.

3.3.1. Enumeraciones
En ocasiones habremos de declarar constantes enteras una tras otra con valores consecutivos, por ejemplo:
const int a=0,b=1,c=2,d=3;

para evitar este tipo de declaraciones una tras otra, existe el tipo enumerativo. La declaración anterior se puede hacer de
una mejor forma:
enum {a,b,c,d};

Una enumeración puede ser global o local. Además de que puede tener un nombre que los identifique, podemos indicar
desde donde empieza la numeración.
enum meses { enero=1, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre,
noviembre, diciembre};

Los valores que se le asignarán empiezan por 1 a enero, 2 a febrero y así sucesivamente. Si se le asignase un 5 a marzo,
entonces abril tendría un 6 y así continuaría la numeración.
Después de hacer esta enumeración, se puede hacer una nueva variable a partir del enumerado llamado meses.
El siguiente ejemplo mostrará el uso del tipo Enumerado:

Ejemplo 30. Uso del tipo de dato estructurado Enumerado


#include<iostream.h>
enum colores{rojo,amarillo,verde};
int main(){
int i=0,contador=0; //unos contadores
colores semaforo;
cout<<"este programa mostrara el tipo enumerativo,"
<<" por medio de un semaforo de crucero"
<<" simulado"<<endl;
while(contador<3){

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 57
CENEAC - Programación con C++ Nivel 1.

semaforo=verde;
cout<<"semaforo en verde, el peaton no pasa"<<endl;
cout<<"el peaton pide el paso con un boton"
<<"(presione enter)"<<endl;
cin.get();
semaforo=amarillo;
cout<<"semaforo en amarillo, precaucion"<<endl;
for(i=0;i<500000000;i++);
semaforo=rojo;
cout<<"semaforo en rojo, ALTO, pasa el peaton"<<endl;
for(i=0;i<500000000;i++);
contador++;
}
system("Pause");
return 0;

}
Debemos tomar en cuenta que al declarar un tipo de variable en base a una enumeración, en este caso una variable
semaforo de tipo colores, sólo se podrá asignar valores declarados dentro de esta, para el ejemplo anterior sólo puede
tomar valores rojo amarillo o verde.

3.3.2. Uniones
El tipo de datos union puede contener datos de tipos y tamaños diferentes, esta variable almacenará cualquier tipo de dato
en una única localidad en memoria. Por ejemplo:
union edificio{
int habitaciones;
int despachos;
char empresa[10];
};

declara un nuevo tipo de dato llamado “edificio”, para usar una variable de tipo edificio bastará con hacer una declaración
como:
edificio casa;

la variable casa tendrá el suficiente espacio en memoria para almacenar una cadena (el tipo de dato de mayor longitud
dentro de la union). Es responsabilidad del programador extraer adecuadamente el tipo de dato deseado.
La forma en que está estructurada en la memoria nuestra variable es como la que sigue:
Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 Byte8 Byte9 Byte10

Cuando se almacena un entero y posteriormente una cadena, ésta última se escribe sobre el espacio de memoria asignado
al entero, y por lo tanto, el contenido se pierde.
Practique con el siguiente programa.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 58
CENEAC - Programación con C++ Nivel 1.

Ejemplo 31. Uso del tipo de dato estructurado Unión


#include<iostream.h>
#include<iomanip.h>
union edificio{
int habitaciones;
int despachos;
char empresa[10];
};
int main(){
edificio casa, agencia, gobierno;
cout<<"cuantas habitaciones tiene tu casa?"<<endl;
cin>>casa.habitaciones;
cout<<"escribe el nombre de la agencia en la que trabajas"<<endl;
cin.ignore();
cin.getline(agencia.empresa,10);
cout<<"cuantos despachos tiene la oficina de gobierno de tu localidad?"<<endl;
cin>>gobierno.despachos;
cout<<"cuantos despachos tiene el edificio de la agencia <<agencia.empresa<<"?"<<endl;
cin>>agencia.despachos;
cout<<"edificio"<<setw(25)<<"habitaciones/despachos" <<endl;
cout<<"casa"<<setw(18)<<casa.habitaciones<<endl;
cout<<"agencia"<<setw(15)<<agencia.despachos<<endl;
cout<<"gobierno"<<setw(14)<<gobierno.despachos<<endl;
cin.ignore();
cin.get();
system("Pause");
return 0;

}
Para accesar a los miembros de una variable de tipo union es necesario utilizar el operador punto (.), seguido de la
variable a extraer. En este ejemplo hemos extraído un entero de la variable “casa” por medio de casa.habitaciones, si se
hace una extracción como casa.empresa no sabemos exactamente que es lo que aparecerá porque pueden existir otros
datos en esa área de la memoria asignada a esta cadena; y si se hiciese lo contrario, asignar una cadena y luego extraer un
entero, seguramente no obtendremos lo que deseamos. Como con cualquier otro tipo de datos, podemos realizar
operaciones con el contenido de los miembros de la union, operaciones básicas, envío como argumentos, conversiones,
etc.
El uso de las variables de tipo union no es muy común, alguien seguramente habrá querido extraer un tipo entero, luego
asignar una cadena y posteriormente utilizar de nuevo ese entero. Que útil seria que dentro de una sola variable podamos
tener oportunidad de extraer tanto un tipo como otro sin perder los datos, ¿se imagina poder regresar mediante la
instrucción return más de un dato?

3.3.3. Estructuras

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 59
CENEAC - Programación con C++ Nivel 1.

Las estructuras son colecciones de elementos, los cuales pueden ser de diferente tipo, y a diferencia de las uniones, en
éstas no se comparte la misma área de memoria para los elementos.
La forma de declarar una estructura es más o menos como sigue:
struct nombre_estructura{
tipo nombre_elemento1;
tipo nombre_elemento2;
};

Es entonces cuando podemos declarar una variable del tipo de la estructura, funcionando el nombre de la estructura como
un nuevo tipo de datos, de esta manera, la nueva variable tendrá cada uno de los elementos declarados en ella.
nombre_estructura nueva_variable;
Para acceder a cada uno de sus elementos usamos el operador punto (.), seguido del nombre del nombre del elemento, de
la misma forma que con las uniones.
Una estructura puede ser declarada de forma global o local, pero es más común hacerlo fuera de toda función.
Debemos hacer notar que las estructuras no se pueden inicializar en su declaración. Aunque las estructuras son una buena
manera de mandar bloques de datos a una función, y es posible regresar estructuras (por la instrucción return), el coste es
alto, el programa se hace lento, gasta CPU y memoria. Para ello, y gracias a que se trata como un nuevo tipo de variable,
es posible hacer un paso por referencia, así evitaríamos que se hiciese una copia de toda la estructura, y sólo se pasara la
dirección.
La forma de hacer un paso por referencia es igual que con cualquier otro tipo de variables, sin embargo, al accesar a sus
miembros debemos de hacerlo por medio del operador flecha (->).
A continuación se muestra un ejemplo del uso de estructuras.
Ejemplo 32. Uso de Estructuras
#include<iostream.h>
#include<math.h>
struct proyectil{
float VelocidadInicial, angulo;
float PosX, PosY;
};
float calculaCaida(proyectil p); // prototipo de llamada a la función

int main(){
proyectil misil;
misil.PosX=misil.PosY=0;
float distancia;
cout<<"Este programa calculará la distancia, en línea recta, en la que
caerá un proyectil"<<endl;
cout<<"escribe la velocidad inicial para lanzarlo: ";
cin>>misil.VelocidadInicial;
cout<<"escribe ahora el angulo de lanzamiento: ";
cin>>misil.angulo;
distancia=calculaCaida(misil);

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 60
CENEAC - Programación con C++ Nivel 1.

cout<<"la distancia a la que caerá el proyectil es: "


<<distancia<<" metros aproximadamente"<<endl;
cin.ignore();
cin.get();

system("Pause");
return 0;

float calculaCaida(proyectil p){


int t=1; //tiempo
const float grav=9.81; //gravedad
p.angulo/=57.2957; //transformamos a radianes
do{
p.PosX=(p.VelocidadInicial*cos(p.angulo)*t);
p.PosY=(p.VelocidadInicial*sin(p.angulo)*t)/(0.5*grav*t*t);
++t;
}while(p.PosY>0);
return(p.PosX);
}

En C++ se puede simplemente incluir un carácter más en nuestro código para utilizarlo como referencia, en nuestra función
(y la declaración por supuesto) incluimos un '&':
float calculaCaida(proyectil& p){

Lo cual bastará para que se trate como una referencia sin necesidad de usar el operador flecha.
Las estructuras también pueden tener por miembros a funciones, en cuyo caso se invoca de la misma forma en la que se
accesa a una variable. Le sugiero animarse a usarlas, intente hacer ejercicios con ellas. Sin embargo, para esos casos es
mejor y más útil utilizar otro tipo de datos definido en C++, se trata de las clases (class), para los fines de este trabajo las
clases quedan fuera, debido a que se requiere describir y practicar bastante con la programación orientada a objetos. El
lector debe de tener en cuenta su existencia, para que en un futuro, si se está interesado, se adentre más en el mundo de la
programación, en una de mejor nivel, con mejores técnicas, y por ende con más capacidades.
Aquí muestro un programa en donde se observa la utilización de funciones como miembros de una estructura, y también un
ejemplo de las referencias C++.

Ejemplo 33. Uso de funciones como miembros de una Estructura


#include<iostream.h>
#include<iomanip.h>
const int NumMaterias=11;
struct alumno {
int boleta, semestre;
int calificaciones[NumMaterias];

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 61
CENEAC - Programación con C++ Nivel 1.

void constancia(alumno & a){


cout<<"constancia impresa"<<endl;
cout<<"alumno con boleta: "<<a.boleta;
cout<<setw(50)<<"del semestre numero: " <<a.semestre<<endl;
cout<<endl<<"CALIFICACIONES DEL SEMESTRE: " <<endl;
for(int i=0;i<NumMaterias;++i)
cout<<"asignatura "<<i+1<<" : " <<a.calificaciones[i]<<endl;
}

void inicia(alumno & a){


for(int i=0;i<NumMaterias;++i)
a.calificaciones[i]=0; a.boleta=0; a.semestre=0;
}
}

int main(){
alumno a1;
a1.inicia(a1);
cout<<"Creando el alumno Alan"<<endl;
a1.boleta=2005630170; a1.semestre=5; a1.constancia(a1);

system("Pause");
return 0;
}

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 62
CENEAC - Programación con C++ Nivel 1.

INSTALACIÓN DE UN
EDITOR Y COMPILADOR
DE C++

Para obtener mayor información sobre un editor de código y compilador de C++ sugerimos visitar:

Descargar un compilador de C++


 http://www.bloodshed.net/dev/devcpp.html
 http://www.entrebits.com/software/borland-cplus-plus-compiler

Instalación y Configuración de Dev C++


 https://www.unirioja.es/cu/jjolarte/temp/Fund/InstalacionDev-C++.pdf
 http://www.bloodshed.net/dev/doc/index.html

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 63
CENEAC - Programación con C++ Nivel 1.

ANEXO 1:
PRINCIPALES INSTRUCCIONES
Y SU TRADUCCIÓN
DE PSEUDOCÓDIGO A C++

PRINCIPALES FUNCIONES
PREDEFINIDAS EN C++

BIBLIOTECA ESTÁNDAR DE C++ Y


PRINCIPALES LIBRERÍAS

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 64
CENEAC - Programación con C++ Nivel 1.

Tabla 13. Declaración de Variables

Tipo Declaración C++ Limite Inferior Limite Superior


Entero Int A; -32768 32767
Entero Corto Short Int A; -128 127
Entero Largo Long Int A; 2E -6 2E 6
Entero sin Signo Unsigned Int A; 0 65535
Entero con Signo Signed Int A; -65000 65000
Real Float A; -3.4E37 3.4E 38
Real Doble Double A; -1.7E -304 1.7E 308
Real Largo Long DoubleA; 3.4E -4932 1.1E 4932
Caracter Char A; -128 127
Caracter sin signo Unsigned Char A;
Caracter con signo Signed Char A;
Palabra Char[ ] A;
0 0
Valor Nulo Void
Arreglo Int A[N]
Texto Text A;
ante A;
Apuntador *A

Tabla 14. Estructuras Condicionales y de Iteración

Pseudocódigo C++
Si Condicion = 1 Entonces If(Condicion = = 1)
{
Sentencia;
}
Sino
Else
{
FinSi; Sentencia;
}

Selección Switch(Opcion)
Opcion = 1: Sentencia1; {
Opcion = 2: Sentencia2; 1: Sentencia1; break;
… 2: Sentencia2; break;
Sino: Sentencia3; Default: Sentencia3; break;
}
FinSelección;

Para Contador=1 hasta Contador<=N for(Contador = 1;Contador <= N;Contador++)


en Incremento Hacer {
… Sentencia;
}
FinPara;

Mientras Condicion = 1 hacer While(Condicion= =1)


… {
Sentencia;
FinMientras;
}

Repetir Do{
… Sentencia;
}(Condicion = = 1);
Hasta Condicion = 1;

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 65
CENEAC - Programación con C++ Nivel 1.

Tabla 15. Procedimientos y Funciones

Procedimientos Funciones
Void Nombre(VariableInt) { Float Nombre (Variable Int) {
Sentencia; VarReal = Variable;
} Sentencia;
return (VarReal);
}
void main(void) {
Nombre(Variable); //invocación
} void main(void) {
A = Nombre (X); //invocación
}

Tabla 16. Funciones de VALOR NUMÉRICO

Función Descripción
int abs(int x); Obtiene el absoluto valor de un entero
double fabs(double x); Calcula el absoluto valor de un real
long double fabsl(long double @E(x)); Calcula el absoluto valor de un real
long int labs(long int x); Calcula el absoluto valor de un long
double ceil(double x); Redondear hacia arriba
double floor(double x); Redondear hacia abajo
long double ceill(long double (x)); Redondear hacia arriba
long double floorl(long double (x)); Redondear hacia abajo
int _rotl(unsigned val, int count); Rota un entero valor a la izquierda
int _rotr(unsigned val, int count); Rota un entero valor a la derecha
long _lrotr(unsigned long val, int count); Rota un long valor a la derecha
long _lrotl(unsigned long val, int count); Rota un long valor a la izquierda
max Devuelve el alto de dos valores
min Devuelve el bajo de dos valores TLOSS

Tabla 17. Funciones de POTENCIA

Función Descripción
double pow(double x, double y); Función Potenciación, x a la y (x**y)
double pow10(int p); Función Potenciación, 10 a el p(10**p)
long double pow(long double (x), long double (y)); Función Potenciación, x a la y (x**y)
long double pow10l(int (p)); Función Potenciación, 10 a el p (10**p)
double exp(double x); Calcula Potenciación e a la x
long double exp(long double (x)); Calcula Potenciación e a la x
double sqrt(double x); Calcula raíz cuadrada
long double sqrtl(long double @E(x)); Calcula raíz cuadrada

Tabla 18. Funciones de LOGARITMOS

Función Descripción
double log(double x); Función logaritmo natural
double log10(double x); Función logaritmo comun
long double logl(long double (x)); Función logaritmo natural
long double log10l(long double (x)); Función logaritmo comun
double hypot(double x,double y); Calcula hipotenusa de derecha triangulo
long double hypotl(long double (x),long double (y)); Calcula hipotenusa de derecha triangulo

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 66
CENEAC - Programación con C++ Nivel 1.

Tabla 19. Funciones TRIGONOMÉTRICAS

Función Descripción
double cos(double x); Función Coseno
double sin(double x); Función Seno
double tan(double x); Función Tangente
long double sinl(long double x); Función Seno
long double tanl(long double x); Función Tangente
long double coshl(long double (x)); Función Coseno hiperbolico
double cosh(double x); Función Coseno hiperbolico
double sinh(double x); Función Seno hiperbolico
double tanh(double x); Función Tangente hiperbolico
long double cosl(long double x); Función Coseno
long double sinhl(long double (x)); Función Seno hiperbolico
long double tanhl(long double (x)); Función Tangente hiperbolico
double acos(double x); Función inversa de Coseno
double asin(double x); Función inversa de Seno
double atan(double x); Función inversa de Tangente
double atan2(double y, double x); Función inversa de Tangente2
long double acosl(long double (x)); Función inversa de Coseno
long double asinl(long double (x)); Función inversa de Seno
long double atanl(long double (x)); Función inversa de Tangente

Tabla 20. Funciones NÚMEROS COMPLEJOS

Función Descripción
complex cos(complex z); Función Coseno
complex sin(complex z); Función Seno
complex tan(complex x); Función Tangente
complex cosh(complex z); Función Coseno hiperbolico
complex sinh(complex z); Función Seno hiperbolico
complex tanh(complex x); Función Tangente hiperbolico
complex acos(complex z); Función Inversa de Coseno
complex asin(complex z); Función Inversa de Seno
complex atan(complex x); Función Inversa de Tangente
double abs(complex x); Obtiene el valor absoluto de un entero
double cabs(struct complex z); Calcula el valor absoluto de un numero complex
long double cabsl(struct _complexl (z)); Calcula el valor absoluto de un numero complex
complex pow(complex x, complex y); Función Potenciación, x to the y (x**y)
complex pow(complex x, double y); Función Potenciación, x to the y (x**y)
complex pow(double x, double y); Función Potenciación, x to the y (x**y)
complex log(complex x); Función logaritmo natural
complex log10(complex x); Función logaritmo comun
complex exp(complex z); Calcula e a la zth potenciación (z is a núm. complex)
double imag(complex x); Devuelve la imaginaria parte de un número complex
complex sqrt(complex x); Calcula raíz cuadrada
double conj(complex z); Conjuga de un numero complex
double arg(complex z); Obtiene el ángulo de un número en el plano complex
double real(complex x); Devuelve parte real de número complex
complex complex(double real,double imag); Crea numeros complex
complex polar(double mag, double angulo); Calcula numero complex
double poly(double x, int degree, double coeffs[]); Calcula numero complex
struct complex {double x, y;}; Crea numeros complex

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 67
CENEAC - Programación con C++ Nivel 1.

Principales Librerías de C++


más información en: http://www.c.conclase.com/curso/index.php?cap=902f#inicio

 iostream: Biblioteca de flujo de entrada y salida

En esta biblioteca se definen algunas de las funciones aplicables a los "streams" o flujos de datos.
Principales funciones:
 cin, canal de entrada estándar

 cout, canal de salida estándar

 stdio.h: Biblioteca C de entrada y salida estándar

Contiene las funciones de entrada y salida, por la pantalla, por teclado y por archivos (ficheros). "stdio" puede y
suele leerse como estándar Input/Output. De hecho la pantalla y el teclado son considerados como archivos,
aunque de un tipo algo peculiar. La pantalla es un archivo sólo de escritura llamado stdout, o salida estándar y el
teclado sólo de lectura llamado stdin, o entrada estándar.
Se trata de una biblioteca ANSI C, por lo que está heredada de C, y ha perdido la mayor parte de su utilidad al ser
desplazada por "iostream". Pero aún puede ser muy útil, es usada por muchos programadores y se encuentre
incluída en muchos de los programas disponibles en C y C++.
Principales funciones:
 getchar(), lee un carácter desde stdin

 putchar(), envía un carácter a la salida stdout

 gets(),lee una cadena de caracteres terminada con un retorno de línea desde la entrada estándar y la
almacena en s
 puts(), envía la cadena s terminada con nulo a la salida estándar stdout y le añade el carácter de retorno
de línea.
 printf(), escribe una cadena con formato a la salida estándar.

 stdlib.h: Biblioteca de rutinas de conversión estándar


En esta biblioteca se incluyen rutinas de conversión entre tipos. Sus funciones permiten convertir cadenas de
caracteres a números, números a cadenas de caracteres, números con decimales a números enteros, etc.
Principales funciones:
 atoi(), convierte una cadena de caracteres a un entero. Puede leerse como conversión "ASCII to Integer".

 system(), ejecuta un comando del sistema o un programa externo almacenado en disco.

Esta función es muy útil para detener el programa antes de que termine su ejecución y poder observar los
resultados del programa. Es usual añadir una llamada a la función system para ejecutar el comando del
sistema "pause", que detiene la ejecución hasta que se pulse una tecla ( system("pause"); )
 abs(), devuelve el valor absoluto de un entero.

 rand(), generador de números aleatorios.


 srand(), inicializa el generador de números aleatorios.

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 68
CENEAC - Programación con C++ Nivel 1.

 ctype.h: Biblioteca de tratamiento de caracteres


En esta biblioteca contiene funciones y macros de tratamiento y clasificación de caracteres.
Principales funciones:
 toupper(), convierte un carácter a mayúscula.

 tolower(), convierte un carácter a minúscula.

 Macros is<conjunto>(), sirven para verificar si un carácter concreto pertenece a un conjunto definido.
Estos conjuntos son: alfanumérico, alfabético, ascii, control, dígito, gráfico, minúsculas, imprimible,
puntuación, espacio, mayúsculas y dígitos hexadecimales. Cada una de las macros devolverá un valor
distinto de cero si el argumento c pertenece al conjunto. Todas las macros responden a la misma sintaxis:

Tabla 21. Funciones para VERIFICACION DE TIPOS DE DATOS

Función Valores
isalnum (A - Z o a - z) o (0 - 9)
isalpha (A - Z o a - z)
isascii 0 - 127 (0x00-0x7F)
iscntrl (0x7F o 0x00-0x1F)
isdigit (0 - 9)
isgraph Imprimibles menos ' '
islower (a - z)
isprint Imprimibles incluido ' '
ispunct Signos de puntuación
isspace espacio, tab, retorno de línea, cambio de línea, tab
vertical, salto de página (0x09 a 0x0D, 0x20).
isupper (A-Z)
isxdigit (0 to 9, A to F, a to f)

 string.h: Biblioteca de manipulación de cadenas

En esta biblioteca se incluyen rutinas de manipulación de cadenas de caracteres y de memoria.


Principales funciones:
 strlen(), calcula la longitud de una cadena.
 strcpy(), copia una cadena en otra.
 strcmp(), compara dos cadenas.

 strcat(), añade o concatena una cadena a otra.


 strncpy(), copia un determinado número de caracteres de una cadena en otra.
 strncmp(), compara dos porciones de cadenas.
 strncat(), añade o concatena una porción de una cadena a otra.
 strtok(), busca dentro de una cadena conjuntos de caracteres o símbolos (tokens) separados por
delimitadores.
Uso de la Biblioteca Estándar de C++
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 69
CENEAC - Programación con C++ Nivel 1.

Seguramente en el compilador que ha estado utilizando, sea Visual C++, Dev C++ o cualquier otro que no sea muy viejo, es
decir anterior al año de 1998, le ha estado marcando algunos “Warnings” a la hora de compilar su código fuente, trate de
corregirlos. Uno de ellos que quizá no sepa a que se refiere es:
…#warning This file includes at least one deprecated or antiquated header... To disable this warning use -
Wno-deprecated.

Este warning está presente en el compilador GCC, y aparece debido a los archivos de cabecera que hemos empleado hasta
este momento. En el estándar de C++ las bibliotecas dejan de utilizar el “.h”, es decir que en lugar de utilizar
<iostream.h>, ahora tendrá que escribirse <iostream>, en vez de <iomanip.h> será <iomanip>.

A pesar que esto tiene varias ventajas, que tal vez no vea en este momento, se tendría que colocar “std” antes de cada
llamada a una función de la biblioteca, debido a que toda la biblioteca estándar de C++ está definida en el espacio de
nombres llamado std. Con esto, tendríamos que hacer una llamada a escribir en pantalla con la instrucción std::cout.
Para evitar esto, y por consiguiente hacer menos extenso el código a escribir, podemos emplear la directriz using, indicando
al compilador el espacio de nombres donde está referenciado.
Por ejemplo, el siguiente programa es la nueva versión de uno de nuestros primeros programas escritos.
#include <iostream>
using namespace std;
int main(){
cout<< “adios a todos” <<endl;
return 0;
}

A continuación se presentan las principales librerías de la biblioteca estándar de C, clasificadas de acuerdo a su


funcionalidad. La c al inicio del nombre de la librería, por ejemplo <cstdio>, indica su compatibilidad con lenguaje C. En
C++ pueden ser usadas agregar esta c inicial.

ENTRADA/SALIDA
 <cstdio> E/S de la biblioteca de C
 <cstdlib> Funciones de clasificación de caracteres
 <cwchar> E/S de caracteres extendidos
 <fstream> Flujos para trabajo con ficheros en disco
 <iomanip> Manipuladores
 <ios> Tipos y funciones básicos de E/S
 <iosfwd> Declaraciones adelantadas de utilidades de E/S
 <iostream> Objetos y operaciones sobre flujos estándar de E/S
 <istream> Objetos y operaciones sobre flujos de entrada
 <ostream> Objetos y operaciones sobre flujos de salida
 <sstream> Flujos para trabajar con cadenas de caracteres
 <streambuf> Búferes de flujos

CADENAS
 <cctype> Examinar y convertir caracteres
 <cstdlib> Funciones de cadena estilo C
 <cstring> Funciones de cadena estilo C
 <cwchar> Funciones de cadena de caracteres extendidos estilo C
 <cwctype> Clasificación de caracteres extendidos
 <string> Clases para manipular cadenas de caracteres
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 70
CENEAC - Programación con C++ Nivel 1.

CONTENEDORES
 <bitset> Matriz de bits
 <deque> Cola de dos extremos de elementos de tipo T
 <list> Lista doblemente enlazada de elementos de tipo T
 <map> Matriz asociativa de elementos de tipo T
 <queue> Cola de elementos de tipo T
 <set> Conjunto de elementos de tipo T (contenedor asociativo)
 <stack> Pila de elementos de tipo T
 <vector> Matriz de elementos de tipo T

ITERADORES
 <iterator> Soporte para iteradores

ALGORITMOS
 <algorithm> Algoritmos generales (buscar, ordenar, contar, etc.)
 <cstdlib> bsearch y qsort

NÚMEROS
 <cmath> Funciones matemáticas
 <complex> Operaciones con números complejos
 <cstdlib> Números aleatorios estilo C
 <numeric> Algoritmos numéricos generalizados
 <valarray> Operaciones con matrices numéricas

SOPORTE DEL LENGUAJE


 <cfloat> Limites numéricos en coma flotante de estilo C
 <climits> Limites numéricos estilo C
 <csetjmp> Salvar y restaurar el estado de la pila
 <csignal> Establecimiento de manejadores para condiciones excepcionales (también conocidos como señales)
 <cstdarg> Lista de parámetros de función de longitud variable
 <cstddef> Soporte de la biblioteca al lenguaje C
 <cstdlib> Definición de funciones, variables y tipos comunes
 <ctime> Manipulación de la hora y fecha
 <exception> Tratamiento de excepciones
 <limits> Limites numéricos
 <new> Gestión de memoria dinámica>
 <typeinfo> Identificadores de tipos durante la ejecución

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 71
CENEAC - Programación con C++ Nivel 1.

EJERCICIOS DE
CREACIÓN DE ALGORITMOS Y
PROGRAMACIÓN CON C++

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 72
CENEAC - Programación con C++ Nivel 1.

Ejercicios de Algoritmos y Programas


Construya algoritmos en pseudocódigo que resuelvan cada uno de los problemas planteados a continuación y prográmelos
luego en C++ para verificar su correcto funcionamiento.

Instrucciones básicas
1. Intercambiar los valores de dos variales reales.
2. Solicitar tres valores enteros e indicar cual es el mayor.
3. Indicar si un número entero dado por el usuario es par o impar, utilizando el operador condicional ( ? : )
4. Calcular el área de un rectángulo, para una base (b) y una altura (h) suministrada por el usuario (área = b*h).
5. Calcular el precio de un producto luego de aplicarle un descuento del 5% y un IVA del 12%.
6. Dado un valor entero y positivo S, que representa una cantidad en segundos, se quiere hallar su equivalente en días,
horas, minutos y segundos restantes.
7. Solicitar tres caracteres y mostrarlos en orden ascendente.
8. Calcular el resultado de cada una de las siguientes fórmulas:

R1 R2 R3

Condicionales
9. Dados dos números enteros n1 y n2, indicar si n1 es múltiplo de n2. (usar Si simple)
10. Calcular las posibles raíces reales para una ecuación de segundo grado: ax2 + bx + c = 0, para coeficientes a, b y c
suministrados por el usuario. (usar Si anidado)
11. Dados dos valores reales a y b, construir un algoritmo que evalúe la siguiente función matemática:
res = 8x3 + 3x, si x > 1 res = -3x + 1, si x  1 (usar Si doble)
12. Dados 5 caracteres suministrados por el usuario, indicar cual es el mayor de ellos. (usar Si simple)
13. Solicitar un carácter al usuario y verificar si se corresponde con una vocal y cual de ellas. (usar Selección)

Ciclos
14. Calcular el valor de n! (factorial) para un valor n suministrado por el usuario. (usar ciclo Para)
15. Calcular la suma de los dígitos pares y de los dígitos impares de un número entero N. (usar ciclo Mientras)
16. Leer un número, verificar que sea de 3 dígitos y sumar sus dígitos. (usar ciclo Hacer mientras)
17. Invierta los caracteres de una cadena o string suministrado por el usuario (usar ciclo Para)
18. Calcular el resultado de multiplicar dos números enteros mediante sumas sucesivas. (usar ciclo Hacer mientras)
19. Calcular el promedio de notas de un grupo de alumnos, cuántos aprobaron y cuántos reprobaron. Considere que las
notas son válidas si están entre 0 y 20 puntos. Se sabe que la materia tiene al menos 1 alumno, pero no se sabe
cuántos alumnos en total hay, por esta razón se debe preguntar al usuario en cada repetición del ciclo si ya terminó de
suministrar las notas. (usar ciclo Hacer mientras)
20. Recorrer una cadena y contar la cantidad de vocales y consonantes que tiene, indicar luego la frecuencia de las vocales y
de las consonantes sobre el total de caracteres de la cadena. (usar ciclo Mientras)
21. Solicitar N temperaturas en grados Farenheit, transfórmarlas a grados Celsius e indicar su promedio.
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 73
CENEAC - Programación con C++ Nivel 1.

(usar ciclo Hacer mientras)

22. Traducir la siguiente expresión matemática y calcular su resultado para valores n, k y n


x suministrados por el usuario. Debe realizar las validaciones necesarias sobre los
valores de n y x. (usar ciclo Para) n / x  *  ik  nx 2
ik
Procedimientos (Acciones, Funciones y Pase de parámetros)
23. Escribir una función que solicite las notas de N evaluciones de un alumno, calcule su Promedio e informe este
resultado a una función principal, en donde será usado para indicar si M estudiantes aprobaron o no la materia y con
que nota promedio.
24. Escribir un procedimiento llamado intercambiar, que intercambie los valores de dos variables reales num1 y num2.
Luego utilícela en una función principal que solicita los datos de entrada al usuario e informa los resultados.
25. Escribir una función que calcule el área de una circunferencia (areaCircunferencia), otra que calcule el área de un
rectángulo (areaRectangulo) y luego úsela ambas en una función principal para verificar si el área de una
circunferencia puede ser contenida en el área de un rectángulo. Los valores correspondientes al radio (circunferencia),
la base y la altura (rectángulo) serán suministrados por el usuario.
26. Escribir un procedimiento llamado calcularSueldo, que determine si a un empleado le toca cobrar a través de
depósito bancario o de cheque. Al empleado le depositan su sueldo mensual si gana semanalmente más de 500,00 Bs,
en caso contrario le emiten un cheque semanal por 150,00 Bs. El procedimiento deberá indicar el tipo de pago y el
monto mensual cobrado. Desde la acción principal se solicitaran los datos de identificación del empleado, el sueldo
diario y los días trabajados en el mes, a fin de llamar al procedimiento que calcula el sueldo mensual.
27. Escribir una función contarApariciones que indique cuantas veces aparece un carácter dado en una cadena. Utilícela
en una función principal que solicita al usuario la cadena de entrada y el carácter a buscar, llama a la función
contarApariciones e informa el resultado.
28. Escribir un procedimiento llamado verificarCumpleaños, el cual debe comparar la fecha de nacimiento de una
persona con la fecha actual e indicar si ya cumplió años, los va a cumplir o los está cumpliendo ese día. Este
procedimiento también debe indicar la edad de la persona.
Al procedimiento se le pasa por parámetros desde la función principal tres valores enteros, correspondientes al día,
mes y año de nacimiento de la persona.

Ejercicios de Algoritmos y Programas sobre Estructuras de Datos


Ejercicios de Arreglos (Vectores y Matrices)
1. Inicializar un arreglo con los montos en BsF de las ventas mensuales para 2012 de 5 productos. Calcular
e informar luego el promedio de ventas por mes, por producto, máximo y mínimo monto.

2. Dada una matriz de M x N elementos enteros, se quiere:


2.1. Calcular la suma de los cuadrados de sus elementos.
2.2. Obtener la posición (fila y columna) de todo elemento de la matriz que sea múltiplo de un entero H.
2.3. Dados I y J, intercambiar la fila I con la fila J.
2.4. Dado un arreglo A con P elementos, indicar la posición de los elementos de A que aparecen en la
matriz (sólo la primera aparición), debe indicar también la posición en la matriz.

3. Dada una matriz cuadrada de M filas con valores reales, elabora un algoritmo que compare la suma de
los valores de la diagonal principal y secundaria, indicando cual es la menor.

4. Dado un arreglo con 1000 números enteros con valores entre -100 y 100, crea un algoritmo que indique
cuál es el número (o los números) que más se repite(n). Utilice un su solución un arreglo auxiliar de
contadores. Por ejemplo, si el arreglo contiene: -2, 4, 1, -2, 3, 1, la salida sería: -2 1.

5. Adaptar el algoritmo de Búsqueda Secuencial para indicar cuántas veces se encuentra una nota X dada
por el usuario, dentro de un arreglo unidimensional llamado Notas con 48 valores de tipo real.
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 74
CENEAC - Programación con C++ Nivel 1.

6. Dado un arreglo que almacena información de N productos (código, descripción y precio), adapte el
algoritmo de Búsqueda Binaria para indicar el precio de un producto con un código C dado. Asuma que
no hay productos repetidos en el arreglo.

Utilizar Acentos y Caracteres especiales en C++


Letras con acento en C/C++
Hay dos maneras de mostrar letras con acentos en C/C++. Tenemos por ejemplo la palabra árbol, que podemos mostrarla
de las dos siguientes formas: printf(”%crbol”,160); printf(”\xA0rbol”);
Ambas formas de mostrar letras con acentos se dan a continuación:
Para mostrar letras con acentos en C / C++ usamos lo siguiente:
á –> printf(”%c”,160); é –> printf(”%c”,130); í –> printf(”%c”,161); ó –> printf(”%c”,162);
ú –> printf(”%c”,163);

Cada uno de los números que aparecen a la derecha del printf es el código ASCII de cada letra acentuada
También podemos imprimir las letras con acentos sin usar printf con parámetros:
á –> printf(”\xA0″); é –> printf(”\x82″); í –> printf(”\xA1″); ó –> printf(”\xA2″); ú –> printf(”\xA3″);

Los números y letras que aparecen después de \x es el código ASCII de las letras en hexadecimal

Letras ñ y Ñ en C/C++
Hay dos maneras de mostrar letras ñ y Ñ en C/C++. Tenemos por ejemplo la palabra España, que podemos mostrarla de
las dos siguientes formas: printf(”Espa%ca”,164); printf(”Espa\xA4a”);
Para mostrar las letras ñ y Ñ en C / C++ usamos lo siguiente:
ñ –> printf(”%c”,164); Ñ –> printf(”%c”,165);

Cada uno de los números que aparecen a la derecha del printf es el código ASCII de cada letra acentuada
También podemos imprimir las letras ñ y Ñ sin usar parámetros en el printf:
ñ –> printf(”\xA4″); Ñ –> printf(”\xA5″);

Los números y letras que aparecen después de \x es el código ASCII de las letras ñ y Ñ en hexadecimal.

Signo de interrogación y exclamación en C/C++


Primero prueba que estas dos formas de mostrar los símbolos funcionan:
printf(”\n%cEsto funciona? %cSi!”,168,173); printf(”\n\xA8 Esto funciona ? \xAD Si !”);

Para mostrar los signos ¿ y ¡ en C / C++ (los símbolos ? y ! no dan problema alguno) usamos lo siguiente:
¿ –> printf(”%c”,168); ¡ –> printf(”%c”,173);

Cada uno de los números que aparecen a la derecha del printf es el código ASCII de cada símbolo
También podemos imprimir los símbolos sin usar parámetros en el printf:
¿ –> printf(”\xA8″); ¡ –> printf(”\xAD”);

Los números y letras que aparecen después de \x es el código ASCII de los signos ¿ y ¡ en hexadecimal

Fuente: http://www.isfesl.es/juan/PLE/Castellano%20en%20C.pdf

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 75
CENEAC - Programación con C++ Nivel 1.

Ejemplos Adicionales

Ejemplo 1. Comparación de caracteres


#include <iostream>
using namespace std;

int main() { // indica si un caracter dado por el usuario es una vocal o no


char c;

//solicitamos datos de entrada


cout <<"Suministre el caracter a verificar "; cin >>c;

// mejorar para que valide may y min correctamente


// valide que la cadena tiene un solo caracter strlen

// se determina si es una vocal


if ( (c == 'a') || (c == 'e') ||(c == 'i') ||(c == 'o') ||(c == 'u') )
cout <<"\nEl caracter es la vocal " <<c <<endl;
else
cout <<"\nEl caracter no es una vocal, es " <<c <<endl;

cout <<endl <<endl;


system("Pause");
return 0;
}

Ejercicio 17. Copiar una cadena sin usar funciones especiales


#include <string.h>
using namespace std;

int main() { // solicita una cadena, muestra sus caracteres y la invierte


char cad[]="", cadres[]="";
int i, tam;

cout <<"Suministre la cadena a procesar "; cin >>cad;


tam = strlen(cad); // verificamos si la cadena es vacía

if (tam == 0)
cout <<"La cadena suministrada es vacía ";
else
{ cout <<"El tamaño de la cadena es " <<tam <<endl;
// mostrar cada elemento de la cadena

for (i=0; i<tam; i++)

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 76
CENEAC - Programación con C++ Nivel 1.

cout <<"\n El caracter " <<i <<" es: " <<cad[i];


// invertir la cadena
cout <<"\nLa cadena original es " <<cad <<endl;
strcpy(cadres, cad);
strrev(cadres);

cout <<"\n luego de copiar la cadena original es \" " <<cad <<" \" " <<endl;
cout <<"\n La cadena invertida es \" " <<cadres <<" \" " <<endl;
}
cout <<endl <<endl; system("Pause");
return 0;
}

Ejercicio 20. Recorrer cadena y calcular frecuencia de vocals y consonantes


#include <iostream>
#include <string.h>
using namespace std;

int main() { // recorre una cadena y determina la frecuencia de vocales y consonantes


char cad[]=""; char c;
int tam, i=0, cantv=0, cantc=0; //cantidad de vocales y de consonantes

cout <<"Suministre la cadena a verificar "; cin >>cad;


tam = strlen(cad); //determinamos cuantos caracteres tiene la cadena, su tamano

while (i<tam) {
c = cad[i];
if ( (c == 'a') || (c == 'e') || (c == 'i') || (c =='o') || (c == 'u') )
cantv++;
else
cantc++;
i++;
}
// resultados
cout <<"\nLa cadena \" " <<cad <<" \" tiene " <<tam << " caracteres." <<endl;
cout <<"\nTiene " <<cantv << " vocales y " <<cantc << " consonantes." <<endl;
cout <<"\nLa frecuencia de las vocales es " <<(cantv/float(tam)) <<endl;
cout <<"\nLa frecuencia de las consonantes es " <<(cantc/float(tam)) <<endl;

cout <<endl <<endl; system("Pause");


return 0;
}

Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 77

También podría gustarte