Beruflich Dokumente
Kultur Dokumente
Programa.
Es el conjunto de instrucciones escritas de algún lenguaje de programación y que ejecutadas secuencialmente resuelven
un problema especifico.
Lenguaje de Programación.
Es cualquier lenguaje artificial que puede utilizarse para definir una secuencia de instrucciones para su procesamiento
por un ordenador o computadora. Existen muchos lenguajes de programación entre ellos tenemos a Fortran, Algol,
BCPL, B, C, C++, C#, Java, Pascal, Cobol, Ada, Limbo, Visual Basic, Visual FoxPro, HTML, XML, Python, Ruby, entre
otros. Los lenguajes de programación pueden ser de 3 tipos:
Lenguaje Máquina: Es un lenguaje que puede ser interpretado directamente por los circuitos internos de la computadora
porque está basado en instrucciones compuestas por secuencias de ceros (0) y unos (1).
Lenguaje de Bajo Nivel (Ensamblador): Es un lenguaje que usa el programador para codificar sentencias simbólicas
que un compilador (programa traductor) puede convertir una a una en instrucciones de lenguaje máquina. Hace uso e
mnemotécnicos o abreviaturas, para representar las instrucciones de máquina.
Lenguaje de Alto Nivel: En un lenguaje de programación orientado al problema, objetos o procedimientos, es cercano al
idioma humano.
Compilar.
Es traducir un programa escrito en lenguaje de bajo o alto nivel a un programa en lenguaje máquina, que es la forma en
que la computadora puede ejecutar directamente las acciones o instrucciones. Típicamente una instrucción de bajo o alto
nivel se compila o traduce en muchas instrucciones máquina. En algunos casos el proceso de compilar se descompone
en dos pasos.
• Compilar las instrucciones de alto nivel para producir lo que se denomina el código objeto.
• Enlazar (link) que es tomar el código objeto generado y cualquier otro código objeto (librerías), que haya sido
previamente generado y colocarlos juntos, produciendo así el programa ejecutable o código ejecutable, mediante
un linkador.
Dato.
El dato es cualquier objeto o elemento de información que se usa a lo largo de diversas operaciones dentro de un
programa o fragmentos de este. Los datos son elementos sobre los que se opera cuando se efectúa una operación en el
computador, es decir, cuando se ejecuta una instrucción en un programa.
Tipos de Datos.
El tipo de dato es una definición que agrupa los valores válidos para un conjunto de datos y las operaciones que sobre
ellos se pueden realizar. Normalmente, se puede establecer una relación de orden sobre los datos de naturaleza escalar
o con valores determinísticos.
Cada tipo de dato tiene una representación determinada en el computador. Esto tiene que ver con el tamaño o la
cantidad de memoria que el computador reserva para almacenar los datos de un tipo especifico cualquiera.
Los tipos de datos pueden ser:
Tipo de dato primitivo: Tipos básicos o simples predefinidos en el sistema.
Tipo de dato definido por el usuario: Agregados por el programador.
Los tipos de datos primitivos más importantes son: numéricos, lógicos, y carácter.
Numéricos: Pueden ser a su vez:
- Entero: Subconjunto finito del conjunto matemático de los números enteros. No tienen parte decimal.
- Real: Subconjunto finito del conjunto matemático de los números reales, llevan signo y parte decimal.
Lógicos o booleanos: Es aquel que sólo puede tomar uno de los valores, verdadero o falso (0 ó 1). Este es el tipo de
dato que retorna todas las operaciones lógicas.
Carácter: Abarca al conjunto finito y ordenador de caracteres que reconoce la computadora: letras, dígitos, caracteres
especiales, ASCII, UNICODE. Se representan dentro de un par de comillas simples, aunque también se puede
suministrar su código numérico o posición dentro del conjunto de caracteres válidos que se esté usando.
Cadena -String-: Conjunto de caracteres, que se presentan entre los símbolos de comillas dobles (“”).
Constantes.
Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.
Ejemplo: pi = 3.1416
Las constantes pueden llevar asociados un nombre o no, si no lo llevan, se llaman literales (5, 7, ‘a’, “Hola”). Su valor hay
que darlo al definir la constante y ya no puede cambiar a lo largo de la ejecución, y en cuanto al tipo, dependiendo de los
lenguajes en algunos hay que ponerlo, y en otros no hace falta ponerlo porque toma el tipo del dato que se le asigna.
Variables.
Es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecución de
un proceso, su contenido puede cambiar durante la ejecución del programa.
Para poder reconocer una variable en la memoria de la computadora, es necesario darle un nombre con el cual podamos
identificarla dentro de un algoritmo.
Ejemplo: area = pi * radio ^ 2
Las variables son: el radio, el area y la constate es pi
Antes de usar una variable hay que definirla o declararla, al hacerlo hay que dar su nombre y su tipo, por ejemplo: entero
var
Donde “entero” es el tipo de dato asociado a la variable y “var” es el identificador o nombre de la variable.
El nombre que le damos tiene que ser un nombre significativo, va a ser un conjunto de caracteres que dependiendo del
lenguaje hay restricciones. Tiene que empezar por una letra, y el tamaño depende del lenguaje.
El valor de la variable si al declararla no se la inicializa, en algunos lenguajes toma una por defecto. En cualquier caso el
valor de la variable podemos darle uno inicial o podemos ir variándolo a lo largo de la ejecución.
Variables Acumuladoras.
Variable que suma o acumula valores. Permite determinar el total de los valores leídos o trabajados. Se incrementa en
cualquier valor.
Ejemplos:
c = c + 20
suma = suma + Valor
total = total + (N*E)
Variables Contadoras.
Variable que controla o determina la cantidad de veces que se repite un proceso o dato. Siempre se incrementa en uno.
Formato: variable=variable+1
Ejemplo: c = c + 1
Expresiones.
Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones
especiales, con un sentido unívoco y definido. De la evaluación de una expresión resulta un único valor o resultado.
Por ejemplo: a + (b + 3) / c
Cada expresión toma un valor que se determina tomando los valores de las variables y constantes implicadas y la
ejecución de las operaciones indicadas.
Una expresión consta de operadores y operandos. Una expresión tiene un tipo de dato que corresponde con el tipo de
valor que retorna cuando se evalúa la expresión, por lo que habrá tantos tipos de expresiones como tipos de datos. En tal
sentido, se tienen expresiones numéricas y lógicas.
Los operadores anteriores se denominan operadores binarios porque utilizan dos operando. Existen también otros tipos
de operadores que solo necesitan de un operando y se denominan operadores unarios. Algunos operadores unarios son:
- El Signo Negativo: Operador unario que devuelve el valor actual del operando multiplicado por menos uno (-1).
Ejemplo: x = 7;
-x;
x = -7;
El lenguaje C++ tiene otros operadores unarios, usados para ayudar a incrementar o decrementar una variable en un
programa estos operadores son, ++ y --.
- Operador de Incremento: El operador ++ devuelve el valor actual del operador incrementado en una unidad. Ejemplo:
x = 7;
x++; -> equivale a: x=x+1
x = 8;
- Operador de Decremento: El operador -- devuelve el valor actual del operador decrementado en una unidad. Ejemplo:
x = 7;
x--; -> equivale a: x=x-1
x = 6;
Existen cuatro maneras diferentes en las cuales los dos operadores de incremento y decremento (++ y --) se pueden
usar estas son:
• x++;
• x--;
• ++x;
• --x;
Las primeras dos, x++ y x-- incrementa y decrementa x respectivamente en uno (1) después que el identificador se usa.
Por esta razón se les denomina operadores de post incremento y post decremento, respectivamente. Sin embargo
cuando el operador se usa de la forma ++x ó --x, las operaciones de incremento y decremento respectivamente, se
realizan antes, de que se use el identificador. Por esta razón se les llama operadores de pre incremento y pre
decremento.
Nota: En lenguaje C++, se trabaja con los valores booleanos que retornan las expresiones relacionales y
lógicas con uno (1) para verdadero (true) y con cero (0) para falso (false).
Reglas de Precedencia.
El orden en que se evalúan los operadores aritméticos, relacionales y lógicos en una expresión influye directamente en el
resultado que retorna dicha expresión.
Ejemplo:
Sea la siguiente expresión aritmética: 7 + 3 * 2 + 5
Si se evalúa en orden de aparición se tiene: (((7 + 3) * 2) + 5) = 25
Si se evalúa primero la suma (+) y luego la multiplicación (*) se tiene: (7 + 3) * (2 + 5) = 70
Si se evalúa primero la multiplicación (*) y luego la suma (+) se tiene: (7 + (3 * 2)) + 5 = 18
Para resolver esta situación tan problemática, la solución es aplicar precedencia entre los operadores, de modo que ante
la posibilidad de usar varios operadores aritméticos aplicaremos primero el de mayor prioridad. Cada lenguaje puede
establecer sus propias reglas de prioridad o precedencia de operadores.
Siempre podemos usar paréntesis ( ) para definir y cambiar el orden en que se evalúa una expresión.
Categoría Operadores Asociatividad
Paréntesis () Izquierda a derecha
Unarios ++ -- Derecha a izquierda
Aritmética (potencia) ^ Izquierda a derecha
Aritmética (multiplicación, división, resto). */% Izquierda a derecha
Aritmética (suma, resta) +- Izquierda a derecha
Relacional < > <= >= Izquierda a derecha
Igualdad == != Izquierda a derecha
Y (and) lógico && Izquierda a derecha
O (or) lógico || Izquierda a derecha
NO (not) lógico ! Izquierda a derecha
Jerarquía de Operadores en C++.
En la tabla anterior se puede observar la jerarquía que poseen cada uno de los operadores.
Entre dos operaciones que tienen la misma precedencia para resolver la ambigüedad, hay que usar la regla de la
asociatividad. La más normal es la de la asociatividad por la izquierda (primero lo de la izquierda).
Operación de Asignación.
Consiste en atribuir un valor a una variable. El valor asignado será una expresión, una constante, u otra variable.
Ejemplo:
var = 5 + 7;
En el ejemplo anterior, var representa la variable a la que se le asigna el valor dado en la expresión a la derecha del
operador de asignación (=).
Funciones.
Desde el punto de vista algorítmico, una función es un subprograma que toma uno o varios parámetros como entrada y
devuelve un único resultado.
Funciones Incorporadas.
Las funciones incorporadas son funciones adicionales a las operaciones básicas que se incorporan al lenguaje de
programación. Se consideran estándar la mayoría de los lenguajes de programación. Son dependientes del lenguaje y
normalmente se encuentran en librerías externas que se pueden incluir en un programa. La sintaxis exacta y el nombre
de las funciones pueden variar de un lenguaje a otro, pero la funcionalidad suele mantenerse entre diversas herramientas
de programación.
Las más comunes son las librerías de soporte matemático y las de entrada / salida.
Instrucciones o Sentencias.
Para que una instrucción se ejecute tiene que ser llevada a memoria. En cuanto al orden de ejecución de las
instrucciones, el programa puede ser de dos tipos:
- Programas Lineales: Se va ejecutando una instrucción más otra y el orden de ejecución es igual al orden de escritura.
- Programas no Lineales: Las instrucciones no se ejecutan en el mismo orden en el que aparecen escritas, sino que se
realizan saltos que nos mandan de unas instrucciones a otras.
Tipos de instrucciones:
1. Inicio y fin.
2. Asignación: Dar un valor a una variable.
3. Lectura / escritura: Introducir o sacar información por dispositivos E/S.
4. Instrucciones de bifurcación: Alternan el orden de ejecución del programa. Salto a otra instrucción que no es la
siguiente.
Ejemplo: INICIO
Sentencia 1;
Sentencia 2;
…
Sentencia N;
FIN
Nota: Todas las sentencias en lenguaje C++ terminan en el delimitador de sentencia punto y coma (;).
Algoritmos.
El concepto de algoritmos fue desarrollado por el matemático persa Abu Jafar Mohammed Ibn Al Khwarizmi. Se puede
decir que un algoritmo es una fórmula para resolver un problema. Es un conjunto de acciones o secuencia de
operaciones que ejecutadas en un determinado orden, resuelven el problema planteado.
Un algoritmo debe tener las siguientes características:
• Estar bien definido.
• Ser preciso.
• Ser finito.
Básicamente un algoritmo es un proceso metodológico que define una serie finita de pasos sencillos y sin ambigüedades
para la solución de un problema. El algoritmo es independiente de la implementación de en algún lenguaje de
programación.
Sin embargo, hay una serie de pasos que permiten resolver un problema de la forma más conveniente, estos son:
• Análisis del problema.
El primer paso es identificar el problema. Se debe revisar cuidadosamente el problema para determinar qué tipo de
información se necesita producir como salida. Luego se identifica toda la información que se necesita para encontrar la
solución. En otras palabras, es importante considerar lo que se está pidiendo en el problema, con qué elementos se
cuenta y cuales se deben solicitar para establecer el camino a seguir para la solución del problema. Luego de obtener
todos estos datos se inicia la fase de Diseño del algoritmo.
• Diseño del algoritmo.
En esta fase la solución del problema puede requerir varios pasos, así que es necesario buscar la manera más fácil
para simplificar la propuesta. Una forma de hacerlo es identificar los procesos más importantes y colocarlos en orden
ascendente según su importancia y precedencia., esto sirve como un algoritmo inicial.
Este algoritmo inicial podrá ser refinado en sucesivas operaciones, hasta obtener una solución más detallada y más fácil
de traducir a un lenguaje de programación.
• Verificación del algoritmo.
Cuando el algoritmo está listo, es necesario comprobar que cumple con los procesos ideados y produce el resultado
esperado. Una manera de hacerlo, es por medio de la ejecución manual, que consiste en realizar una prueba del
algoritmo con datos significativos comprobar que al ejecutar todos los procesos se obtienen los resultados esperados
para la salida.
Diseño Estructurado.
El diseño estructurado es una metodología para el desarrollo de programas que puede ser definida a través de las
siguientes características:
- El sistema desarrollado siguiendo el diseño estructurado tendrá una entrada y una salida, con variaciones ocasionales.
- El diseño estructurado divide el problema a resolver en partes o módulos.
En ejercicio anterior se observaron mensaje como “Ingresar” y “Leer”, estos son fundamentales para la interacción del
usuario con el sistema, ya que un programa debe ser capaz de tomar datos ingresados por el usuario del sistema.
También se deben enviar mensajes de alerta o avisos al usuario, para esto se usará la expresión “Mostrar”. El siguiente
ejercicio ilustrará mejor esto.
Se envían mensajes al usuario indicando que debe ingresar un valor (horas, tarifa), esto es útil para que la persona que
está usando el sistema sepa que datos debe ingresar en un momento específico. Finalmente se realiza el cálculo del
salario el cual está dado por “horas*tarifa” y se muestra el salario actual del trabajador.
UNIDAD III. FUNDAMENTOS DE C++.
C++.
C++ es una mejoría sobre muchas de las características de su predecesor el lenguaje C, y proporciona capacidades de
Programación Orientada a Objetos (OOP, por Object Oriented Programming), además de soportar la programación
Estructurada, esto lo convierte en un lenguaje híbrido.
C++ fue desarrollado por Bjarne Stroustrup, en los Laboratorios Bell, y originalmente fue llamado “C con clases”. El
nombre C++ incluye el operador de incremento (++) de C, para indicar que C++ es una versión mejorada de C.
Cualquier aplicación hecha en lenguaje C++, debe constar de una función principal denominada main, que será la
primera en ser llamada (desde este punto iniciaran todos los programas). En la estructura anterior el main comprende
desde la línea 4 hasta la 7.
Identificadores.
Los identificadores representan los datos de un programa (constantes, variables, tipos de datos). Un identificador es una
secuencia de caracteres que sirve para identificar una posición en la memoria de la computadora, que permite acceder a
su contenido.
La sintaxis de programación C++ impone algunas reglas en la construcción de identificadores:
- Los nombres de identificadores deben empezar siempre con una letra, esto incluye a los caracteres “_” y “$”. Sin
embargo es una buena práctica de programación tener nombres de variables que empiecen con minúsculas (a - z).
- Los nombres de identificadores pueden estar formados por una secuencia de letras del alfabeto y/o dígitos del 0 al 9 y/o
el carácter “_” ó “$”.
- No se permiten espacios, comas, puntos, vocales acentuadas ni la letra “ñ” en el nombre de un identificador.
- La longitud de identificadores puede ser de varios caracteres. Pero es recomendable una longitud promedio de 8
caracteres.
- No se permiten usar palabras reservadas por el lenguaje.
- Los únicos caracteres especiales permitidos son “_” y “$”.
Cada uno de estos datos básicos se almacena en forma diferente en la memoria de la computadora. C++ provee del
operador sizeof que permite determinar el tamaño de cada tipo de dato que es soportado por el hardware subyacente.
Sin embargo el número de bytes realmente asignados para los tipos específicos puede variar de un modelo de
computadora a otro.
Requerimiento típico en
Tipo de Dato Descripción
memoria
int Entero 4 byte.
float Número de Punto Flotante 4 byte.
Número de Punto Flotante
double 8 byte.
de doble precisión.
char Carácter simple 1 byte.
bool Valor Booleano. 1 byte.
Tipo de Dato y Espacio Requerido en Memoria.
Tratar de asignar un no entero, por ejemplo 3.1452 o el carácter A, se asignará 3 (parte entera de 3.1452) ó 65 (código
ASCII para el carácter A) a la variable. A parte de las variables enteras se puede definir otros tipos de datos, como una
variable de número real o una variable de punto flotante:
float altura, pi;
Esta declaración crea dos variables de punto flotante que pueden almacenar números reales de la forma 3.454f o
-0.458f. Los datos son truncados cuando a una variable entera se le asigna una real, pero si ocurre lo siguiente:
float peso=75;
La constante literal entera 45, será convertida a forma flotante 75.0 y asignada a la variable peso.
El tipo de datos char permite almacenar caracteres como letras del alfabeto a-z, A-Z, dígitos 0-9, y algunos caracteres
especiales como @, &, $, #, etc. Las siguientes son asignaciones válidas a una variable de tipo char.
char letra = ‘a’, vocal;
vocal=’G’;
letra=vocal;
Es válido asignar el valor de una variable o constante a otra variable, sin embargo se sebe tener en cuenta que los tipos
de datos debe ser del mismo tipo para evitar errores o conversiones no deseadas.
Constantes en C++.
Las constantes son únicamente espacios de memoria (igual a las variables), que no pueden cambiar su valor inicial.
Cuando se crea una constante y se le asigna su valor inicial, este no puede ser cambiado durante la ejecución de la
aplicación, sin embargo pueden ser asignados como valor a una variables, formar parte de una expresión, etc. La
manera de declarar una constante en C++ es la siguiente:
#define MAX 100
Para empezar se emplea el carácter especial numeral (#), seguido por la palabra define. Luego se define el nombre
(identificador) de la constante y finalmente el valor (observe que no cierra con comillas).
Si el valor es numérico simplemente se coloca luego del nombre de la constante. Si es una variable de tipo carácter el
valor (carácter) se coloca entre comillas simples (‘’). Si es una valor de tipo cadena de caracteres se coloca la cadena
entre comillas dobles (“”). Si es un valor booleano se coloca el valor (true o false) luego del nombre de la variable.
1. #include <iostream.h>
2. #define ENTERO 20
3. #define REAL 5.6f
4. #define DOBLE 15.2301
5. #define VOCAL 'T'
6. #define CADENA "MENSAJE"
7. #define PREGUNTA true
8. void main(){
9. int datoEntero=ENTERO;
10. cout<<"Valor entero: " <<ENTERO <<"\n";
11. cout<<"Valor cadena: " <<CADENA <<"\n";
12. cout<<"Valor booleano: " <<PREGUNTA <<"\n";
13. cout<<"Valor REAL: " <<REAL <<"\n";
14. }
De la línea 2 a la línea 7, se declararon todas las constantes, observe que no se define ningún tipo de dato, esto es
porque cuando se le asigna el valor automáticamente se reserva ese espacio de memoria con ese valor. En la línea 9, se
le asigna el valor de la constante “ENTERO” a la variable “datoEntero”. Las líneas 10, 11, 12 y 13, imprimen los valores
asignados a las constantes. Observe que el valor de la constante “PREGUNTA” de tipo booleano se imprime como uno
(1), esto ocurre porque C++, trabaja indistintamente con cero (0) ó uno (1), para valores booleanos falso (false) o
verdadero (true), respectivamente.
Flujos.
Toda entrada y salida de información se maneja mediante flujos – secuencias de caracteres organizadas en líneas. Cada
línea está formada por cero o más caracteres y está terminada por el carácter de nueva línea. El estándar indica que las
aplicaciones de ANSI C deben soportar líneas de por lo menos 254 caracteres, incluyendo un carácter de nueva línea de
terminación.
Cuando empieza la ejecución del programa, de forma automática se conectan tres (3) flujos al programa. Por lo regular,
el flujo estándar de entrada se conecta al teclado y el flujo estándar de salida se conecta al monitor. Es posible conectar
estos flujos a otros dispositivos. El tercer flujo, el error estándar, se conecta a la pantalla.
La primera sentencia utiliza el flujo estándar de salida cout y el operador << (operador de inserción de flujo que se
pronuncia “colocar en”). La sentencia se lee:
La cadena “Ingrese el dato” es colocada en el flujo de salida cout.
La segunda sentencia utiliza flujo estándar de entrada cin y el operador >> (operador de extracción de flujo que se
pronuncia “obtener de”). La sentencia se lee:
Obtener un valor para dato del flujo de entrada cin.
Para utilizar entradas/salidas de flujo, los programas C++, deben incluir el archivo de cabecera iostream.h.
Nota: C++ al ser un C mejorado permite el uso de todas las funciones existentes en lenguaje C, incluyendo
las de manejo de flujos scanf y printf.
Secuencias de Escape.
La mayor parte de los caracteres literales, a imprimirse en una sentencia cout, pueden ser incluidos en la cadena de
control de formato. Sin embargo existen varios caracteres “problema”, tal como los caracteres comilla (“), que delimitan la
cadena de control de la misma. Varios caracteres de control como son la nueva línea y el tabulador, deben ser
representados por secuencias de escape. Una secuencia de escape es representada por una diagonal invertida (\)
seguida por un carácter de escape en particular. En la siguiente tabla se listan todas las secuencias de escape y las
acciones que causan.
Secuencia de Escape Descripción
\a Genera una alerta visual o audible (timbre).
\b Mueve el cursor hacia atrás una posición en la línea actual
\r Mueve el cursor al principio de la línea actual.
\n Mueve el cursor al inicio de la línea siguiente.
\t Mueve el cursor a la siguiente posición del tabulador
horizontal.
\v Mueve el cursor a la siguiente posición del tabulador
vertical.
\\ Salida del carácter de diagonal invertida (\).
\? Salida del signo de interrogación (?).
\’ Salida del carácter de una sola comilla (’).
\” Salida del carácter de dobles comillas (”).
Nota: Se puede incluir más de una secuencia de escape dentro de una cadena de control de formato.
Código ASCII (American Standard Code for Information Interchange).
Es un código de caracteres basado en el alfabeto latino creado en 1963, actualmente es ampliamente usado para
representar texto en casi todos los sistemas informáticos.
2.- Un instructor prepara 3 modelos de exámenes para tres salones. El instructor sabe que tarda 3 min en el modelo del
salón A, 6 min en el modelo del salón B y 7 min en el modelo del salón C. dadas las cantidades de estudiantes de cada
salón, ¿Cuántas horas y minutos tardará el instructor en revisar los exámenes de todos los salones?
#include <iostream.h>
#define SalonA 3
#define SalonB 6
#define SalonC 7
void main(){
int exam_A, exam_B, exam_C, tiempoA, tiempoB, tiempoC, tiempoT, horasT, minutosT;
cout << “Ingrese la cantidad de examenes del salon A: ”;
cin >> exam_A;
cout << “Ingrese la cantidad de examenes del salon B: ”;
cin >> exam_B;
cout << “Ingrese la cantidad de examenes del salon C: ”;
cin >> exam_C;
tiempoA = exam_A * SalonA;
tiempoB = exam_B * SalonB;
tiempoC = exam_C * SalonC;
tiempoT = tiempoA + tiempoB + tiempoC;
horasT = tiempoT / 60;
minutosT = tiempoT % 60;
cout << “El instructor tardara: ”<< horasT <<“ horas con ” << minutosT <<“ minutos\n”;
}
La salida del programa anterior será la siguiente:
El programa anterior podría modificarse para recibir desde el teclado el número de minutos que tarda el instructor por
cada modelo de prueba, e inclusive enviar un reporte más detallado al usuario.
Ejercicios Propuestos.
1.- Obtener la edad de una persona en meses, si se ingresa su edad en años y meses. Por ejemplo si se ingresan 25
años y 2 meses se debe mostrar 302 meses.
2.- Hacer un programa que permita ingresar dos números y calcule las cuatro operaciones básicas (suma, resta,
multiplicación y división) con ellos. Además calcular la potencia.
3.- Realice un programa que extraiga los dígitos individuales de un entero de dos dígitos.
4.- Calcule el interés generado (interes) por un capital depositado (capdep), durante cierta cantidad de meses (cm) a una
tasa de interés determinada (tasa) expresada en porcentaje. Use las fórmulas:
a. monto = (capdep) * (1 + tasa / 100) * cp
b. interes = monto – capdep
UNIDAD IV. PROGRAMACIÓN ESTRUCTURADA I.
La Programación Estructurada (PE) posee tres (3) tipos de estructuras básicas: Estructuras Secuenciales, Estructuras
Selectivas y las Estructuras Repetitivas ó de Ciclo.
Estructuras Secuenciales.
En las estructuras secuenciales una instrucción sigue a otra en secuencia, es decir, la salida de una instrucción es la
entrada de la siguiente. Todas las estructuras secuenciales se ejecutarán automáticamente uno después de otro
iniciando desde la función principal main. Todos los programas anteriores siguen este tipo de estructuras.
Estructuras Selectivas.
En este tipo de estructuras se evalúa una condición booleana y en función del resultado lógico (verdadero o falso) u otro
resultado, se ejecuta un conjunto de instrucciones. Permiten al programador especificar que la sentencia siguiente a
ejecutar puede ser otro diferente del que sigue en secuencia. Son también denominadas estructuras de control de flujo,
estructuras condicionales o de toma de decisiones. Hay tres tipos de estructuras selectivas: simples, compuestas o
múltiples.
En esta estructura condicional se evalúa la condición, si el resultado es verdadero se ejecuta el conjunto de acciones
asociadas, si el resultado es falso no se ejecuta acción alguna. La traducción a C++ es la siguiente:
if (condición)
sentencia;
La palabra reservada if se traduce como “si”. Si la “condición” (que debe estar encerrada entre paréntesis) se evalúa y
retorna un valor de verdadero entonces se ejecuta la sentencia que se encuentra luego de la condición. Esta “condición”
usualmente es una expresión booleana, aunque también podría ser una expresión numérica, en cuyo caso el resultado
cero (0) se interpretaría como falso y cualquier otro valor numérico se interpretaría como un valor verdadero.
El programa anterior es muy limitado, ya que no permite enviar una respuesta si el cliente fue aceptado. Este problema
podría solucionarse agregando otra estructura if debajo de la sentencia asociada a la primera estructura decisiva o
empleando las estructuras de selección múltiple, que se estudiarán a continuación.
Si <condición> entonces
<acción>
Sino
<acción>
Fin si
#include <iostream.h>
void main(){
int edad;
cout << “Ingrese la edad del cliente:\n”;
cin >> edad;
if (edad < 18)
cout << “Lo siento, no se atiende a personas menores de edad...\a\n”;
else
cout << “Bienvenido, que desea comprar?\n”;
}
Cuando este código se ejecuta se obtienen dos salidas diferentes dependiendo de la edad introducida por el usuario.
Nota: Jamás se coloca punto y coma (;) luego de la condición de un if. El else tampoco termina en punto y
coma (;).
Los programas anteriores únicamente ejecutarán una sentencia asociada al if o else. Si se intenta ejecutar dos o más
sentencias exclusivamente cuando se cumpla alguna condición, únicamente la primera se ejecutará o no de acuerdo a la
condición, las otras se ejecutarán de manera independiente.
Observe el siguiente ejemplo.
1. #include <iostream.h>
2. #define MIN 58
3. void main(){
4. int nota;
5. cout << “Ingrese la nota (1-100):\n”;
6. cin >> nota;
7. if (nota >= MIN)
8. cout << “Aprobado. Felicitaciones\n”;
9. else
10. cout << “Reprobado\n”;
11. cout << “Debe volver a cursar la materia\n”;
12. }
1. #include <iostream.h>
2. #define MIN 58
3. void main(){
4. int nota;
5. cout << “Ingrese la nota (1-100):\n”;
6. cin >> nota;
7. if (nota >= MIN)
8. cout << “Aprobado. Felicitaciones\n”;
9. else {
10. cout << “Reprobado\n”;
11. cout << “Debe volver a cursar la materia\n”;
12. }
13. }
Con el uso de llaves se obtuvo el resultado deseado. Se resolverá otro ejercicio para reforzar mejor lo aprendido.
Enunciado del Problema:
Convertir una letra Mayúscula en Minúscula y viceversa.
El programa a realizar debe recibir como entrada una letra que puede ser minúscula o mayúscula. Cada letra posee una
representación ASCII, lo que permite manipular la entrada y saber con exactitud cual letra ha sido introducida por el
usuario. Los pasos para resolver el planteamiento se muestran a continuación:
Paso 1: Se lee una letra cualquiera.
Paso 2: Según el código ASCII se calcula la diferencia entre la representación minúscula y mayúscula de cualquier letra,
eso para obtener el valor numérico que permitirá hacer la conversión. Para todos los casos es 32.
Paso 3: Siendo a=97, b=98 …, z=122 y A=65, B=66 …, Z=90, se establecen las condiciones que nos permiten saber si
la letra introducida es mayúscula o minúscula. Si es minúscula al valor ASCII que la representa se le resta la diferencia
calculada en el paso 2. Si es mayúscula al valor ASCII que la representa se le suma la diferencia mencionada. El
resultado obtenido para cualquiera de los casos representa el código ASCII de la conversión de la letra original.
Paso 4: Se muestra en pantalla la representación de la letra seleccionada.
#include <iostream.h>
void main(){
char letra, ch;
int dif;
cout << “Ingrese una letra.\n”;
cin >> letra;
dif = ‘a’ – ‘A’;
if ((letra >= 97) && (letra <= 122)) {
ch = letra - dif;
}
if ((letra >= 65) && (letra <= 90)) {
ch = letra + dif;
}
cout << “La correlativa de la letra ” << letra << “ es: ”<<ch<< “\n”;
}
En C++, esta estructura es llamada switch… case. La representación de esta estructura en C++ es como sigue:
switch (expresión){
case valor1: sentencias;
break;
case valor2: sentencias;
break;
default: sentencias;
break;
}
Un ejemplo de la estructura switch… case, será, escribir un programa que reciba como entrada un valor entre el 1 y 7,
e imprima el día de la semana que corresponde al número que se ingresó. 1 denota el día lunes, 2 el día martes y así
sucesivamente. Si la entrada no es válida se debe mostrar un mensaje.
#include <iostream.h>
void main(){
int dia;
cout << “Ingrese numero en el rango 1-7\n”;
cin >> dia;
switch (dia){
case 1: cout << “El 1 es lunes\n”;
break;
case 2: cout << “El 2 es martes\n”;
break;
case 3: cout << “El 3 es miercoles\n”;
break;
case 4: cout << “El 4 es jueves\n”;
break;
case 5: cout << “El 5 es viernes\n”;
break;
case 6: cout << “El 6 es sabado\n”;
break;
case 7: cout << “El 7 es domingo\n”;
break;
default: cout << “El dato no es correcto\n”;
break;
}
}
La salida del programa anterior será:
La etiqueta default, se usa para ejecutar una sentencia cuando ninguno de los casos (case), anteriores fue satisfecho.
Si la sentencia break no está presente, la ejecución fluye lógicamente a las sentencias siguientes al próximo case, lo
cual comúnmente no se desea.
La construcción switch… case, puede usarse únicamente para condiciones de igualdad. No puede usarse para una
condición como if (dia <= 8). La variable en la construcción switch… case, puede ser de cualquier tipo de dato
que puede se enumerado (datos alfanuméricos, booleanos), esto significa que los tipos de datos float y double no son
tipos de datos válidos para esta estructura.
Estructuras Anidadas.
Las estructuras selectivas y los bucles, se pueden escribir unas dentro de otras. Esto se conoce como estructuras
anidadas.
En otras palabras una estructura condicional if puede tener dentro de sus sentencias otro if, o cualquier otra
estructura, condicional o repetitiva (estas serán estudiadas en la siguiente unidad).
Anidación de Condicionales.
En muchas situaciones, se requiere evaluar un conjunto de condiciones en forma secuencial y separada. En estos casos
se recomienda utilizar una anidación de sentencias condicionales. Una manera de hacer esto es como sigue:
if (condición){
sentencia;
}else if (condición){
sentencia;
}else if (condición){
sentencia;
}
}
}
La forma común de realizar el anidamiento es colocar la condición en la parte ‘no’ (else) de la sentencia.
La sentencia switch… case, siempre equivale a una anidación de condicionales, pero lo contrario no es cierto. Para
entender mejor esto realizaremos un ejemplo.
Enunciado del Problema:
Contar los días de un mes.
El usuario ingresa un número entero entre el uno (1) y el doce (12), que significa el mes. Aquí 1 representa Enero, 2
representa Febrero y así sucesivamente hasta llegar a Diciembre. El problema consiste en escribir un programa que
tome esta entrada y muestre el número de días de este mes en particular. Asuma que el mes de Febrero solo tiene 28
días.
#include <iostream.h>
main(){
int mes, dias;
cout << "Ingrese el mes que se encuentre entre el 1 -12\n";
cin >> mes;
if ((mes >= 1) && (mes <= 12)){
if ((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11))
dias = 30;
else if (mes == 2)
dias = 28;
else
dias = 31;
cout << "El numero de dias del mes " << mes << " es: "<<dias<< "\n";
} else
cout << "Ingrese un dato valido\n";
}
1. if (condición)
Ejecuta una sola sentencia;
2. if (condición)
Ejecuta una sola sentencia;
else
Ejecuta una sola sentencia;
3. if (condición) {
Ejecuta una o más sentencias;
}
else {
Ejecuta una o más sentencias;
}
4. if (condición)
Ejecuta una sola sentencia;
else {
if (condición)
Ejecuta una sola sentencia;
else {
Ejecuta una o más sentencias;
}
}
5. if (condición) {
if (condición)
Ejecuta una sola sentencia;
else {
Ejecuta una ó más sentencia;
else {
Ejecuta una o más sentencias;
}
}
else
Ejecuta una sola sentencia;
Operador Ternario.
El operador ternario en C++ es una construcción if de una línea la cual tiene tres términos. Los símbolos de
interrogación ( ? ) y dos puntos ( : ) se usan como operadores ternarios. Si la condición evalúa a verdadero entonces la
sentencia después del signo de interrogación ( ? ) se ejecuta, sí no la sentencia después de los dos puntos ( : ) se
ejecuta.
Condición ? Condición_Valor_Verdadero : Condición_Valor_Falso;
#include <iostream.h>
void main(){
int x , y; //se declaran las variables
cout << “Ingrese dos numeros separador por un espacio\n”;
cin >> x >> y;
/*Se muestran los valores de “x” y “y” al usuario*/
cout << “El numero x es: ”<< x << “El numero y es: ”<< y << “\n”;
(x > y) ? cout << “x es mayor...\n” : cout << “y es mayor...\n”;
}
En el programa anterior se emplearon algunos comentarios, a continuación veremos como se emplean y para que sirven.
Comentarios.
Los programadores insertan comentarios para documentar los programas y mejorar la legibilidad de los mismos. Al
ejecutarse el programa, los comentarios no hacen que la computadora realice ninguna acción. Los comentarios serán
ignorados por el compilador de C++ y no harán que se genere ningún código objeto en lenguaje máquina.
Se pueden escribir comentarios en C++ de dos maneras. La primera consiste en agregar dos barras de división (//) antes
de la línea o sentencia que será comentada. Comentará únicamente dicha línea o sentencia.
La segunda forma consiste en utilizar /* */, todas las líneas o sentencias que se encuentren entre /* */, serán
ignoradas por el procesador. Se comentarán todas las líneas que se encuentren
Errores en Programación.
Existen dos tipos de errores básicos en la programación, los errores de sintaxis y los lógicos. Los errores de sintaxis se
producen cuando el código está mal escrito, por ejemplo, le falta un punto y coma, una variable no se declaró, etc. Los
errores lógicos ocurren cuando se ha planteado de manera incorrecta la solución a un problema, generalmente esto
ocurre cuando elaboramos el algoritmo.
Un error de sintaxis será detectado por el compilador. Un error lógico hará su efecto durante la ejecución. Un error lógico
fatal hará que el programa falle y se termine en forma prematura. Un error lógico no fatal permitirá que continúe el
programa, pero produciendo resultados incorrectos o no deseados.
A continuación se presentará una lista con algunos de los errores más comunes en la programación:
• Olvidar terminar un comentario con */
• Iniciar un comentario con los caracteres */ o terminar un comentario con los caracteres /*
• Escribir en un programa el nombre de la función de salida cout como count.
• Usar una letra mayúscula donde debería haberse usado una minúscula (por ejemplo Main, en vez de main).
• Finalizar la declaración de una constante con punto y coma (;).
• El cálculo en un enunciado de asignación debe aparecer en el lado derecho del operador =. Es un error de
sintaxis colocar un cálculo del lado izquierdo.
• Olvidar una o ambas de las comillas dobles que rodean la cadena de control de formato en un cout.
• Colocar una secuencia de escape como \n fuera de una cadena de control de formato en un cout.
• Colocar una variable que debería imprimirse dentro de una cadena de control de formato en un cout.
• Olvidar separar una cadena de control formato de una variable empleando de operador de inserción de flujo <<
en un cout.
• Colocar dos variables seguidas que deberían ser obtenidas por teclado (cin>> var1 var2;), cuando se deben
estar separadas por el operador de extracción de flujo >> en un cin.
• Confundir los operadores de extracción de flujo (>>), por los operadores de inserción de flujo (<<) en una función
cin o cout.
• Un intento de dividir entre cero (0), por lo regular, resulta no definido en sistemas de cómputo, y en general da
un resultado fatal, es decir, un error que hace que un programa se termine de inmediato sin haber ejecutado de
forma exitosa su tarea.
• Ocurrirá un error de sintaxis si los dos símbolos en cualquiera de los operadores, ==, !=, >=, <=, están separados
por espacios.
• Ocurrirá un error de sintaxis si los dos símbolos en cualquiera de los operadores, !=, >=, <=, están invertidos, por
ejemplo =>, =<, =!
• Confundir el operador de igualdad ==, con el de asignación =
• Olvidar colocar un punto y coma (;) al final de una sentencia.
• Colocar un punto y coma (;) de inmediato a la derecha del paréntesis derecho, después de la condición if.
Ejercicios Propuestos.
1.- Leer tres números enteros y, si el primero de ellos es negativo, calcular el producto de los tres, en caso contrario
calcular la suma de ellos.
2.- Escribir un programa que pida un año y diga si es bisiesto o no. Un año es bisiesto si es múltiplo de 4 salvo el caso en
que sea múltiplo de 100, que no es bisiesto, y no sea múltiplo de 400. Por ejemplo, el año 1900 no fue bisiesto, el 2000 sí
y el 2100 no lo es.
3.- Escribir un programa que permita efectuar el cálculo del área de un cuadrado, un círculo o un triángulo equilátero
según la opción seleccionada por el usuario a través de un menú.
• Crear una primera versión con la estructura de control if ... else
• Y una segunda versión con la estructura de control switch... case...
4.- Escribir un programa que pida dos caracteres por pantalla, los ordene alfabéticamente, y los imprima ordenados.
5.- La empresa “LA ABEJA”, es productora de dos tipos de mallas: mayas planas y mayas en rollo. La alta gerencia
requiere controlar las ventas por día según las siguientes políticas: si el comprador tiene más de 5 años adquiriendo
malla en rollo tendrá un descuento del 8% en está malla. Si es comprador de malla plana por más de 6 años tendrá un
descuento del 6% en esa malla. El costo de la malla plana es de 400 Bs.F, por metro y la malla de rollo es de 290 Bs.F.
por metro. Elabore un programa que capture los metros a comprar por tipo de malla, además del tiempo en años que
como comprador ha adquirido los tipos de malla existente. La salida del programa será la cantidad total de descuento
obtenido por cliente.