Programacion en C++
Programacion en C++
Programacion en C++
con C++
Nivel 1
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
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.
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.
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.
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.
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
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)
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 “ ; “)
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).
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
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.
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.
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.
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: (* *) /* */ ‘ # / <!-- -->
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.
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.
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;
FinAlgoritmo Principal;
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.
FinAlgoritmo 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.
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;
FinAlgoritmo Principal;
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
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)
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.
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)
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.
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.
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;
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).
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;
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.
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.
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.
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.
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++
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#).
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.
// 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;
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.
// 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;
// Programa Principal
int main()
{
// Zona de Declaración de Variables del Programa principal
// Zona de instrucciones
system("Pause"); // Hace una pausa cuando el programa es ejecutado, permitiendo ver los resultados
return 0; // Valor de retorno
}
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.
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.
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.
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";
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.
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
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.
* Producto Producto 11 * 10
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.
Incremetación Decrementación
++n --n
Equivalente a: Equivalente a:
n +=1 n -=1
n =n + 1 n =n - 1
!= No igual a 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).
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.
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";
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.
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.
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:
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.
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.
n3 = n1 + n2 + a;
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.
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:
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.
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.
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.
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:.
cout<< (int(nota)>=10 ? "\nAprobaste, felicitaciones!" : "\n Reprobaste, tienes que esforzarte mas\n");
system("Pause");
return 0;
}
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
}
int main(){
int op;
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.
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)
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;
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.
int main()
{
int i, n, temp, suma=0;
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:
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<<"\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;
}
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;
system("Pause");
return 0;
}
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:
int main(){
int op;
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?
int main(){
int x;
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.
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.
main() { main() {
int a=7, b=10; float resultado; cuadrados(); // invocación
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.
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.
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.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] ;
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”;
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.
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.
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.
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.
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:
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;
}
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 [ ] );
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.
//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.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:
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.
}
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.
system("Pause");
return 0;
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++.
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.
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:
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++
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.
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;
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.
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
}
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
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
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.
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
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.
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
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
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.
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.
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.
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:
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)
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;
}
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
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.
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.
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.
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.
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
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
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 luego de copiar la cadena original es \" " <<cad <<" \" " <<endl;
cout <<"\n La cadena invertida es \" " <<cadres <<" \" " <<endl;
}
cout <<endl <<endl; system("Pause");
return 0;
}
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;
Material elaborado por CENEAC Producciones, C.A. Prohibida su reproducción total o parcial sin autorización del Autor. 77