Cuaderno de C++
Cuaderno de C++
Cuaderno de C++
programación en
C++
Estructuras secuenciales, selectivas,
repetitivas, punteros, funciones, vectores,
matrices, structs y minijuegos.
Lima, 2020
RESUMEN
http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
1 PROBLEMA
1.1 Enunciado
Se requiere que un programa de computadora nos ayude a calcular el área de un
rectángulo. Además, indique los pasos que representa la solucion.
o Las entradas
o Las salidas
2 TEORÍA
2.1 Contenido
• Algoritmo y sus características
• Matriz de variables MV y matriz de entrada, proceso y salida EPS de un
algoritmo
• Formas para representar algoritmos
• Diagrama de flujo de datos de una estructura secuencial
• Diagrama de flujo de datos de una estructura selectiva
• Diagrama de flujo de datos de una estructura repetitiva
• Fases para la resolución de problemas usando la computadora.
3𝑥 2 + 12𝑦
𝑓(𝑥, 𝑦) =
3−𝑥
Análisis algorítmico
Características de un algoritmo
• Diagrama de Flujo
• Diagramas N-S (Nassi-Schneirderman)
• Pseudocódigo
• Diagrama de Warnier
• Una estructura secuencial esta combinada entre acciones de: escritura, lectura
e impresión.
• En la construcción del diagrama de flujo del algoritmo se indican las acciones
secuencialmente, no hay condicionales y estructuras repetitivas en el camino.
Selectiva doble
Estructura selectiva doble Ejemplo
Repetitiva mientras
Hay acciones que se repiten muchas veces, pero la cantidad de repeticiones es
indeterminada, es decir que cada que se ejecuta el algoritmo no sabemos
exactamente cuantas repeticiociones se harán. Esta estrutura tiene una condición al
inicio y dentro del bucle, una instrucción que hace que la condición inicial sea falsa,
permitiéndonos salir del bucle cuando sea necesario. Tenemos la oportunidad de
repetir una acción(s) un número indeterminado de veces, por ejemplo, leer e imprimir
valores hasta que el usuario pulse una tecla o escriba un número especial.
Por ejemplo se puede usar while para: sumar los numeros naturales empezando
desde 10 hasta 19 de 1 en 1, imprimir 30 veces el término “Bienvenido”, sumar los
100 primeros números naturales, para ingresar numeros hasta que se escriba un 0 y
termine el programa.
2. Análisis de la problema
a) Datos entrada
b) Restricciones
c) Datos de salida
4. Codificación
6. Documentación
a) Interna
b) Externa
7. Mantenimiento
4 SOLUCIÓN AL PROBLEMA
4.1 Matriz de variables
Tipo Nombre Descripción
Real largo Largo del rectángulo
Real ancho Ancho del rectángulo
Real area1 Área del rectángulo
1 No es necesario respetar las reglas ortográficas, recuerde que área lleva tilde.
4.4 Código
#include<iostream>
using namespace std;
void main()
{
int largo;
int ancho;
int area;
largo = 90;
ancho = 60;
area = largo * ancho;
cout << area;
}
4.5 Resultado
5400
Diagrama de flujo
6 EJERCICIOS PROPUESTOS
Propuesto 1. Construya un diagrama de flujo y pseudocódigo que
representen el algoritmo para determinar cuánto dinero ahorra una persona
en un año si considera que cada semana ahorra 15% de su sueldo (considere
cuatro semanas por mes y que no cambia el sueldo).
Propuesto 2. Una empresa desea determinar el monto de un cheque que
debe proporcionar a uno de sus empleados que tendrá que ir por equis
número de días a la ciudad de Monterrey; los gastos que cubre la empresa
son: hotel, comida y 100.00 pesos diarios para otros gastos. El monto debe
estar desglosado para cada concepto. Realice un diagrama de flujo y
pseudocódigo que representen el algoritmo que determine el monto del
cheque.
7 INVESTIGACIÓN
¿Cómo se representan los algoritmos en pseudocódigo?
8 EVALUACIÓN
Esta práctica dirigida no será evaluada
9 ANEXOS
Ejercicios matemáticos que debería conocer:
Usuario : 30
Usuario : 20
a) Las entradas
c) Las salidas
2 TEORÍA
2.1 Contenido
• Diagrama N-S (Nassi-Schneirderman)
• Estructura de control secuencial
• Estructura de control de selección
• Estructura de control repetitiva
Acción 1
Acción 2
...
Acción n
Condición
Verdad Falso
Acción1 Acción2
variable
Acción
2.5.2 Mientras
Bucle mientras Ejemplo
Mientras condición
Acción
4 EJERCICIOS RESUELTOS
Resuelto 1. Se requiere determinarel tiempo que tarda una persona en llegar de
una ciudad a otra en bicicleta, se sabe que lleva una velocidad constante.
Realice un algoritmo para resolver el problema representado mediante un
diagrama N-S.
Diagrama N-S
5 EJERCICIOS PROPUESTOS
Propuesto 1. Realice un diagrama de flujo y pseudocódigo que representen el
algoritmo para determinar cuánto dinero ahorra una persona en un año si
considera que cada semana ahorra 15% de su sueldo (considere cuatro semanas
por mes y que no cambia el sueldo).
Propuesto 2. Una empresa desea determinar el monto de un cheque que
debe proporcionar a uno de sus empleados que tendrá que ir por equis número
de días a la ciudad de Monterrey; los gastos que cubre la empresa son: hotel,
comida y 100.00 pesos diarios para otros gastos. El monto debe estar desglosado
para cada concepto. Realice un diagrama de flujo y pseudocódigo que
representen el algoritmo que determine el monto del cheque.
Propuesto 3. Realice el diagrama de flujo y pseudocódigo que representen el
algoritmo para determinar el promedio que obtendrá un alumno considerando
que realiza tres exámenes, de los cuales el primero y el segundo tienen una
ponderación de 25%, mientras que el tercero de 50%.
Propuesto 4. Realice un algoritmo y represéntelo mediante un diagrama N-S
que permita mostrar el estado del alumno, según la nota final del curso. Para ello
debe tener en cuenta los siguientes criterios:
• Si la nota es menor de 12.50 está desaprobado.
• Si la nota es mayor de 12.50 y menor de 20 está aprobado.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
Idetifica:
2 TEORÍA
2.1 Contenido
• Representación de un algoritmo mediante pseudocódigo
• Pseudocódigo de las estructuras de control secuencial, de selección y
repetitiva
• Pseudocódigo de una función y un procedimiento
2.2 Pseudocódigo
Para crear y ejecutar un pseudocódigo podemos usar PseInt. Estos pseudocodigos
pueden convertirse automáticamente a un diagrama N-S o DFD.
Proceso ecuacionCuadratica
Definir a, b, c, discriminante, x1, x2 Como Real
Escribir "Ingrese los coeficiente a: "
Leer a
Escribir "Ingrese los coeficiente b: "
Leer b
Escribir "Ingrese los coeficiente c: "
Leer c;
discriminante = b^2-4 * a * c;
discriminante= rc(discriminante);
x1 = hallaValor(a, b, discriminante);
x2 = hallaValor(a, b, -discriminante);
Proceso ecuacionCuadratica
Definir a, b, c, discriminante, x1, x2 Como Real
Escribir "Ingrese los coeficiente a: "
Leer a
Escribir "Ingrese los coeficiente b: "
Leer b
3.3 Resultado
> 15
> 20
> 12
El area es: 270
El area es: 270
areaFiguraV2.psc
Proceso areaFigura
Definir ladoa, ladob, ladoc Como Real
Definir area1, area2, areaTotal Como Real
Escribir "Valor del lado A:"
Leer ladoa
Escribir "Valor lado B: "
Leer ladob
Escribir "Valor del lado C: "
Leer ladoc
area1=(ladob*(ladoa-ladoc))/2
area2=ladob*ladoc
areaTotal=area1+area2
Escribir 'El area es: ',areaTotal
FinProceso
Resultado
Matriz de variables
MEPS
Diagrama N-S
Diagrama N-S
Pseudocódigo
Algoritmo Ejercicio6
//Variables a usar en la resolución del caso
Definir cantidadDeUnidades Como entero
Definir descuento como entero
Definir precioUnitario como real
Definir importe, importeConDescuento, importePagar como real
//Entradas
//Procesos o cálculo
importe=cantidadDeUnidades*precioUnitario
importeConDescuento=(descuento/100)*importe
importePagar=importe-importeConDescuento
//Salidas
Escribir importe
Escribir importeConDescuento
Escribir importePagar
FinAlgoritmo
Resultado
Matriz de variables
5 EJERCICIOS PROPUESTOS
Propuesto 1. Una operadora necesita calcular el recibo de consumo, el
cual se obtiene de la siguiente manera:
• Si consume 4 GB o menos paga S/. 50 por mes.
• Si consume más de 4 GB, hasta de 8GB paga S/. 85 por mes y por cada
GB de consumo adicional pagará S/. 4.50
Realice un algoritmo para resolver el problema y represéntelo mediante un
pseudocódigo.
Propuesto 2. La universidad ofrece una beca de 30% para los estudiantes
que cumplan ciertos requisitos, luego de haber culminado el primer ciclo de
su carrera. Los requisitos son los siguientes
• Tener un promedio ponderado mayor o igual a 15.
• No tener ninguna falta.
Con esta información elabore un algoritmo y represéntelo mediante un
pseudocódigo que determine el otorgamiento de una beca. Los datos que
debe ingresar son la nota y la cantidad de faltas.
Propuesto 3. Elabore un algoritmo y represéntelo mediante un
pseudocódigo en donde se solicite ingresar un número entero de 3 cifras
únicamente y verificar si el número ingresado es correcto, si no es de tres
cifras mostrar un mensaje de error. Finalmente, mostrar el número ingresado
al revés.
Ejemplos:
6 INVESTIGACIÓN
Represente los algoritmos de los ejercicios propuestos en diagramas N-S y DFD
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 PROBLEMA
1.1 Enunciado
Michaela, Efraín y Even aportan cantidades de dinero para formar un
capital. Elabore un programa en C++ que permita determinar el capital total
formado y el porcentaje de dicho capital que aporta cada uno.
Identifique:
o Las entradas
o Los procesos y cálculos que se requieren para solucionar el
problema
o Las salidas
• ¿Cuál será la representación del conjunto de pasos o algoritmo que
resuelve el problema?
• ¿Cuáles serían las características del lenguaje C++ que me falta
conocer?
2 TEORÍA
2.1 Contenido
• Estructura general de un programa en C++
• Declarar variables
• Tipos de variables
• Definición de una constante en C++
• Constantes especiales – macros
• Funciones matemáticas del lenguaje C++
• Entrada y salida de datos
PARTES PROGRAMA
Declaramos las librerías #include<iostream>
Indicamos los espacios de using namespace std;
trabajo que corresponde a la
librería
Podemos escribir //Por ahora no usamos variables
comentarios
El cuerpo de la función void main()
principal main {
/*Aquí se declaran variables locales*/
cout << "Hola mundo" << endl;
system("pause");
}
2.3 Las variables
Una variable es un identificador
Una variable, constante o macro es un identificador. Las variables y las
constantes se usan para separar un espacion de memoria en el que se guardará
el valor de un dato.
Estructura
<Tipo de dato> <Nombre variable>;
Estructura
Por ejemplo:
const int ValorMaximo = 50;
const double IGV = 18.00;
const char PrimeraLetra = 'A';
Estructura
#define <Nombre MACRO> <valor>
Por ejemplo:
#define IGV 18.00
#define PrimerMes 3
#define PalabraClave “Universidad”
2.7 Funciones matemáticas del lenguaje C++
Función Formato
Redondear un decimal a entero round(x)
//Imprimiendo resultados
cout << "###RESULTADOS###" << endl;
cout << "Aporte de todos: " << total << endl;
cout << "Porcentaje de aporte de Michaela: "<< round(porcentajeMi * 100)<<
"%"<<endl;
cout << "Porcentaje de aporte de Efrain: "<< round(porcentajeEf *
100)<<"%"<<endl;
cout << "Porcentaje de aporte de Even: "<<round(porcentajeEv * 100)<<
"%"<<endl;
//Pausa la pantalla
system("pause");
}
Resultados
###RESULTADOS###
Aporte de todos: 1150
Porcentaje de aporte de Michaela: 22%
Porcentaje de aporte de Efrain: 59%
Porcentaje de aporte de Even: 19%
4 EJERCICIOS RESUELTOS
Resuelto 1. SEDAPAL requiere determinar el pago que debe realizar una persona por el
total de metros cúbicos que consume de agua al llenar una piscina móvil (ver figura).
Elabore un programa en C++ que permita determinar ese pago si se tiene como dato
adicional el precio por m3 de agua.
Programa
#include<iostream>
using namespace std;
int A, L, B;
float volumen, pmc;
void main()
{
//entradas
cout << "Dame valor de A: ";
cin >> A;
cout << "Dame valor de L: ";
cin >> L;
cout << "Dame valor de B: ";
cin >> B;
cout << "Precio del metro cúbico: ";
cin >> pmc;
//procesos
volumen = A * L*B;
//Salidas
cout << "El Pago total es: " << volumen * pmc << endl;
system("pause");
}
Resultado
Dame valor de A: 12
Dame valor de L: 15
Dame valor de B: 20
Precio del metro c·bico: 12.5
El Pago total es: 45000
Resuelto 2. Desarrollar un programa en C++ para una tienda que vende zapatos. Se
ingresa la cantidad de zapatos que el cliente desea comprar, el precio unitario. Hay un
descuento de 4% si la compra es mayor a 1000 y menor o igual a 2000 soles, un descuento
de 6% si la compra es mayor a 2000 y menor o igual a 3000, y un descuento de 11% si la
compra supera 3000 soles.
Programa
#include<conio.h>
#include<iostream>
using namespace std;
void main()
{
int cantidad;
double pu, total, descuento;
Resultados
Cantidad de zapatos a comprar: 200
Precio Unitario: 180
Total: 36000
Descuento: 3960
Total a pagar: 32040
Resuelto 3. Elabore un programa en C++ en donde se ingrese un número entero de 3
cifras únicamente y luego se debe determinar si el número ingresado es capicúa. Un
número capicúa se lee igual de izquierda a derecha que derecha a izquierda.
• Si el número que se ingresa es incorrecto, esto significa no tiene 3 cifras,
se debe mostrar una “E”, que indica error.
• Si el número que se ingresa es correcto, se debe mostrar un mensaje: “S”
si el número es capicúa o “N” si el número no es capicúa.
Matriz de variables
Programa V1
#include<iostream>
using namespace std;
int numero;
int n1, n2, n3;
void main() {
cout << "Ingrese un numero de tres cifras: ";
cin >> numero;
n1 = numero / 100;
n3 = numero % 10;
cout << n1 << " - " << n3 << endl;
(n1 == n3 && cout << "S") || (n1 != n3 && cout << "N");
Resultado
Ingrese un número de tres cifras: 354
3 - 4
N
Programa v2
#include<iostream>
using namespace std;
int numero;
int n1, n2, n3;
void main() {
cout << "Ingrese un numero: ";
cin >> numero;
n1 = numero / 100;
n3 = numero % 10;
cout << n1<<" - "<< n3<<endl;
((numero>=100 && numero<=999) && ((n1 == n3 && cout << "S") || (n1 != n3
&& cout << "N"))) ||
((numero < 100 || numero >999) && cout<<"E");
cout << endl;
system("pause");
}
5 EJERCICIOS PROPUESTOS
Elabore programas en C++:
6 INVESTIGACIÓN
Lógicamente los algoritmos son previos a la implementación de los programas.
Sin embargo, a manera de práctica, pase los programas de los ejercicios
propuestos a diagramas N-S, DFD y seudocódigo.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 PROBLEMA
1.1 Enunciado
Diseña la función inviertePalabra que invierta una palabra de cuatro letras que
se le pasa como parámetro. Por ejemplo si la función recibe la palabra “HOLA”
esta debe retornar “ALOH”.
2 TEORÍA
Para trabajar con cadenas se usa un vector de caracteres o un objeto de la
clase string. El trabajo con cadenas de caracteres se usa en C y requiere del
2.1 Contenido
• Cadenas con vector de caracteres
• Cadenas con objetos de la clase string
• Métodos de cin>>
¡Importante! es posible comparar caracteres con ==, >=, >,<=, < y ¡=.
Ejemplo es correcto escribir letra==’A’, también se puede asignar caracteres
con el operador de asignación =, por ejemplo letra=’S’.
Ejemplo ilustrativo
using namespace std;
void main() {
char letra1;
char letra2 = 'M';
letra1 = 'X';
(letra1 > 'C' && cout << letra1 << " es mayor que " << "C" << endl);
system("pause>NULL");
}
Resultado
X es mayor que C
2.2.2 Variables de tipo cadena de caracteres
Declaremos una variable de tipo cadena de caracteres:
char nombre[5];
void main() {
char *cadena1 = "HOLA";
char cadena2[] = "HOLA";
char cadena3[] = { 'H','O','L','A','\0' };
char cadena4[] = { 'H','O','L','A' };
char cadena5[1024] = "Una cadena en C";
char cadena6[] = "";
char cadena7[5] = "HOLA";//El tamaño es 5 porque se requiere un espacio para el ultimo caracter '\0'
cout << "El primer caractere se encuentra en la posición 0" << endl;
cout <<"*cadena1:"<<cadena1<<" Caracteres:"<<strlen(cadena1)<<" Caracter pos 3:"<<cadena1[3]<<endl;
cout << "cadena2[]:" << cadena2 << " Caracteres:" << strlen(cadena2) << " Caracter pos 3:" << cadena2[3] << endl;
cout << "cadena3[]:" << cadena3 << " Caracteres:" << strlen(cadena3) << " Caracter pos 3:" << cadena3[3] << endl;
cout << "cadena4[]:" << cadena4 << " Caracteres:" << strlen(cadena4) << " Caracter pos 3:" << cadena4[3] << endl;
Resultado
El primer caracter se encuentra en la posición 0
*cadena1:HOLA Caracteres:4 Caracter pos 3:A
cadena2[]:HOLA Caracteres:4 Caracter pos 3:A
cadena3[]:HOLA Caracteres:4 Caracter pos 3:A
cadena4[]:HOLA Caracteres:4 Caracter pos 3:A
cadena5[1024]:Una cadena en C Caracteres:15 Caracter pos 0:U
cadena6[]: Caracteres:0 Caracter pos 3:l
cadena7[5]:HOLA Caracteres:4 Caracter pos 3:A
Número = 145
------------------
Escribe una cadena: Lo que he leído es:
¿Por qué?
Con cin>> se lee 145 en la variable numérica num, pero deja de leer cuando se
encuentra el primer carácter no numérico ‘\n’. Cuando se pulsa enter se asigna
al buffer ‘\n’, entonces con el getline que sigue leemos en cadena lo que
encuentra en el buffer, es decir ‘\n’ y el programa salta a la línea que sigue.
La solución
La solución pasa por escribir cin.get() justo después de que se lee el número
para leer el caracter ‘\n’ que se generó cuando se pulsó la tecla enter.
int num;
char cadena[1000];
cout << "Número = "; cin >> num;
cin.get(); //lee '\n'
//cin.ignore(); //brinca o ignora un carácter es decir '\n'
cout << "Escribe una cadena: "; cin.getline(cadena, 1000);
2.3 Cadenas con objetos de la clase string
• Para trabajar con cadenas en C++ se usa un objeto de la clase string.
• En el paso de parámetros (valor / referencia), se parece a cualquier tipo
simple (int, float, char,...).
• Los valores de las variables son de tamaño variable (no hay máximo), y
puede crecer.
• La cadena no termina en ‘\0’.
2.3.1 Declaración de identificadores String
Constante:
const string cadena = "hola";
Variable:
string cadena;
Lo usamos para leer el primer caracter de una cadena ingresado por el teclado.
Para utilizarlo basta tener una variable de tipo char.
char letra = cin.get();
cin.ignore()
Ejemplo
char inicial1, inicial2;
cout << "Ingresa tu nombre seguido por primer apellido: ";//Manuel Lopez
inicial1 = cin.get();// Del total de la cadena en el buffer leemos el primer
carácter.
cin.ignore(5, ' ');// Salteamos 5 posiciones o hasta encontrar un espacio para leer
el siguiente caracter.
//En caso de que el nombre tenga más de más de 5 letras juntas
nos salteamos hasta el lugar 6.
//En caso de que el nombre tenga menos de 6 letras entonces
nos salteamos hasta el carácter vacío para leer el primer carácter del apellido,
es decir el primer carácter después del espacio.
inicial2 = cin.get(); // Obtenemos la segunda inicial
cout << "Tus iniciales son " << inicial1 << inicial2 << '\n';
Caso 1:
Caso 2:
Importate! El carácter vacío del ejemplo anterior puede ser otro carácter.
getline()
a) getline() se usa para leer frases. Usa como delimitador el salto de línea,
enter o ‘\n’.
b) getline (cin, variable, ‘carácter delimitador’) permite leer una cadena
hasta se ingrese el carácter delimitador y pulsemos enter.
Ejemplo:
#include <iostream>
#include<string>
using namespace std;
using namespace System;
void main() {
string cadena1, cadena2;
cout << "Introduzca dos palabras: ";
getline(cin, cadena1, 'a');//Lee la frase hasta la letra 'a'
cin.get(); //Espera que se escriba algo
Si se pulsa enter antes de un getline para una variablea de tipo string, ocurre lo
mismo que para una variable vector de caracteres. La solución pasa por escribir
cin.get() ó cin.ignore() antes del getline respectivo.
#include <iostream>
#include<string>
using namespace std;
using namespace System;
void main() {
int num;
string cadena;
cout << "Número : "; cin >> num; //cuando se pulsa enter se toma el numero
pero el caracter enter se queda en el buffer
cin.get(); //lee '\n'
//cin.ignore();//ignora la lectura del caracter enter ó '\n'
cout << "Escribe una cadena: "; getline(cin, cadena);
cout << "El texto que escribió: " << cadena<<" y numero: "<<num;
system("pause>null");
}
cadena.length()
• Las comparaciones se hacen con: ==, !=, >, <, >= y <=
• La asignación de una cadena a otra se hace con el operador =, como
con cualquier tipo simple.
• La concatenación de cadenas se hace con el operador +
string s1 = "Hola"; string s2 = "mundo";
string saluda = s1 + ", " + s2;
cout << saluda << endl; // muestra ’Hola, mundo’
string a entero
#include <iostream>
#include <sstream>
#include<string>
using namespace std;
void main()
{
string numero = "148A9";
int n = atoi(numero.c_str()); //regresa un numero compuesto por los primeros
dígitos de una cadena
cout << "La cadena 148A9 en número es: " << n << endl;
system("pause>NULL");
}
invierteCadena.cpp
#include <iostream>
#include<string>
using namespace std;
string invierteCadena(string *psi) { //psi palabra sin invertir
string *pinvertida = new string;
*pinvertida = (*psi).substr(3,1) + (*psi).substr(2, 1)+(*psi).substr(1,
1)+(*psi).substr(0, 1);
return *pinvertida;
}
int main()
{
string *palabra = new string;
cout << "Ingrese una palabra de cuatro letras : ";
cin >> *palabra;
cout <<"Palabra invertida: " <<invierteCadena(palabra) << endl;
system("pause>NULL");
}
invierteCadena.cpp
#include <iostream>
#include<string>
using namespace std;
char * invierteCadena(char *psi) { //psi palabra sin invertir
char *pinvertida = new char[5];
strcpy(pinvertida,"xxxx"); //formateamos la variable pinvertida
pinvertida[0] = psi[3];
pinvertida[1] = psi[2];
pinvertida[2] = psi[1];
pinvertida[3] = psi[0];
return pinvertida;
}
int main()
{
char *palabra = new char[5];
cout << "Ingrese una palabra de cuatro letras : ";
cin >> palabra;
cout <<"Palabra invertida: " <<invierteCadena(palabra) << endl;
system("pause>NULL");
}
Resultado:
Ingrese una palabra de cuatro letras: ARTE
------------------------------------------------
Palabra invertida: ETRA
4 EJERCICIOS RESUELTOS
Resuelto 1. Haga un resumen de las funciones principales de que se utilizan en el manejo
de cadenas mediante cadena de caracteres.
Solución
#include <iostream>
#include <string>
using namespace std;
void main() {
setlocale(LC_ALL, "spanish");
char direccion[50];
cout << "Ingrese dirección: ";
gets_s(direccion);
int longitud = strlen(direccion);
cout << "Tamaño o longitud: " << longitud << endl;
char destino[50];
strcpy(destino, direccion);
cout << "Imprimiendo la copia: " << destino << endl;
char cadena1[10] = "sistemas", cadena2[10] = "SISTEMAS";
Resultado
Salida
Ingresa tu edad: 32
Nombre y apellido: Juan Manuel
---------------------------
Hola: Juan Manuel
Tienes: 32 años
Ejemplo:
Día : 27
Mes :3
Año : 2019
-------------------------------
La fecha en letras es:
March 27, 2019
Matriz de variables
Programa
Solución sin funciones
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main()
{
char *mesLetras = new char[20];
int *dia = new int;
int *mes = new int;
int *anio = new int;
cout << "Dia :"; cin >> *dia;
cout << "Mes: "; cin >> *mes;
cout << "Anio : "; cin >> *anio;
((*mes == 1) && strcpy(mesLetras, "January")) ||
((*mes == 2) && strcpy(mesLetras, "February")) ||
((*mes == 3) && strcpy(mesLetras, "March")) ||
((*mes == 4) && strcpy(mesLetras, "April")) ||
((*mes == 5) && strcpy(mesLetras, "May")) ||
((*mes == 6) && strcpy(mesLetras, "June")) ||
((*mes == 7) && strcpy(mesLetras, "July")) ||
((*mes == 8) && strcpy(mesLetras, "August")) ||
((*mes == 9) && strcpy(mesLetras, "September")) ||
((*mes == 10) && strcpy(mesLetras, "October")) ||
((*mes == 11) && strcpy(mesLetras, "November")) ||
((*mes == 12) && strcpy(mesLetras, "December"));
cout << "La fecha en letras es: " << endl;
cout << mesLetras << ", " << *dia << " of " << *anio;
system("pause>NULL");
}
Resultados
Día: 15
Mes: 10
Año: 2018
-------------------------------
La fecha en letras es:
October, 15 of 2018
Resultados
Día: 10
Mes: 11
Año: 2019
--------------------------------
La fecha inglesa en letras es:
November, 10 of 2019
5 EJERCICIOS PROPUESTOS
Elabore programas en C++ que resuelvan los siguientes problemas:
6 INVESTIGACIÓN
¿Cómo se leen los datos de un archivo?
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 PROBLEMA
1.1 Enunciado
Una empresa empaquetadora de sobres requiere de un programa en C++ que
optimice el número de empaques de sobres que utilizará para empaquetar sus
productos. Se sabe que la empresa tiene empaques de 12, 30 y 50 sobres
respectivamente.
Ejemplo:
Orden Operador
Mayor jerarquía ()
*, /,%
Menor jerarquía +, -
Si en una expresion tenemos muchos operadores debemos aplicar primero el
operador de mayor jerarquía y luego el que le sigue en jeraquía. En caso que
estemos frente a operadores del mimo nivel como por ejemplo *, / y %, se opera
primero el que está más a la izquierda. Por ejemplo: 30*3/5=18 (primero se opera
30*3) y 30/3*5=50 (primero se opera 30/3).
15/2*(7+(68-15*33+(2025/16)/3/15))+19=?
#include<iostream>
using namespace std;
void main()
{
float resultado;
cout << "15 / 2.0 * (7 + (68 - 15 * 33 + (2025 / 16.0) / 3.0 / 15.0)) + 19
= " << 15 / 2.0 * (7 + (68 - 15 * 33 + (2025 / 16.0) / 3.0 / 15.0)) + 19 << endl;
resultado = 2025 / 16.0;
cout << "Resultado : " << resultado << endl;
resultado=resultado/3.0;
cout << "Resultado : " << resultado << endl;
resultado = resultado / 15.0;
cout << "Resultado : " << resultado << endl;
resultado = -15*33+resultado ;
cout << "Resultado : " << resultado << endl;
resultado = 68+resultado;
++ a++; a = a + 1;
++a;
-- a--; a = a - 1;
--a;
+= a += 10; a = a + 10;
-= a -= 10; a = a - 10;
*= a *= 10; a = a * 10;
/= a /= 10; a = a / 10;
int i;
for (i = 0; i < 10; i++)
{//
}
cout << "i Post incrementado : "<<i << endl;
int j;
for (j = 0; j < 10; ++j)
{//
}
cout << "i pre incrementado : "<<j << endl;
system("pause>null");
return 0;
}
3 SOLUCIÓN AL PROBLEMA PROPUESTO
system("pause>NULL");
}
4 EJERCICIOS RESUELTOS
Resuelto 1. Que teniendo como dato una hora expresada en segundos (t), nos calcule y
muestre la cantidad de horas, minutos y segundos contenidos en dicha hora
Matriz de variables
Diagrama Nassi
Resultados
Diagrama Nassi
Resultados
Hora inicial en H:M:S : 10 - 59 - 59
Nueva hora: 11
Nuevo minutos: 0
Nuevo segundos: 0
Matriz de variables
Diagrama Nassi
Programa
Resultados
Angulo en radianes: 7.2
Angulo en grados sexagecimal: 412.53
Grados sexagesimales: 412
Minutos sexagesimales: 31
Segundos sexagesimales: 46.4575
5 EJERCICIOS PROPUESTOS
Elabore el programas en C++ que resuelva cada uno de los siguientes
problemas:
system("pause");
}
6 INVESTIGACIÓN
Lógicamente los algoritmos son previos a la implementación de los programas.
Sin embargo, a manera de entrenamiento, elabore los diagramas N-S, DFD y
seudocódigo de cada uno de los ejercicios propuestos.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 PROBLEMA
1.1 Enunciado
Realice un programa en C++ y entorno consola que teniendo como datos de
entrada la distancia a recorrer y el número de días de estancia, calcule el costo
total de un Tour de Viaje. El precio por cada 100 KM de recorrido es de S/.150 y,
de cada día de estancia S/.520. Por último si el monto total a pagar sobrepasa
los S/.2500 existe un descuento del 35%.
Ejemplo 1
#include<iostream>
using namespace System;
using namespace std;
void main()
{
int cierto1, falso1;
cierto1 = (10 > 2);
falso1 = (10 == 2);
cout << "cierto1 = (10 > 2) : " << cierto1 << endl;
cout << "falso1 = (10 == 2) : " << falso1 << endl;
bool cierto2, falso2;
cierto2 = (10 > 2);
falso2 = (10 == 2);
cout << "cierto2 = (10 > 2) : " << cierto2 << endl;
cout << "falso2 = (10 == 2) : " << falso2 << endl;
cout << "bool(15) : " << bool(15) << endl;
cout << "bool(0) : " << bool(0) << endl;
system("pause>NULL");
}
Ejemplo 2
bool valor1, valor2, valor3, valor4;
valor1 = (bool)77;
valor2 = (bool)-33;
valor3 = (bool)1;
valor4 = (bool)0;
|| (alt+124) or (o)
! not (no)
A B A && B A|| B !A !B
V V V V F F
V F F V F V
F V F V V F
F F F F V V
2.5 Operadores de relación
10 > 20 F 0
> Mayor 30 > 20 V 1
20 > 20 F 0
10 < 20 V 1
< Menor 30 < 20 F 0
20 < 20 F 0
10 >= 20 F 0
>= Mayor o igual 30 >= 20 V 1
20 >= 20 V 1
10 <= 20 V 1
<= Menor o igual 30 <= 20 F 0
20 <= 20 V 1
10 == 10 V 1
== Igual
20 == 10 F 0
10 != 10 F 0
!= Diferente
20 != 10 V 1
(5 > 2) = V
(5 > 2) && (4 > 7) Falso (4 > 7) = F
(V) && (F) = F
(5 > 2) = V
(5 > 2) || (4 > 7) Verdadero (4 > 7) = F
(V) || (F) = V
(4 > 7) = F
! (4 > 7) Verdadero
!(F) = V
Instrucción;
}
La condición puede ser una expresión lógica compuesta. Si la instrucción es
una asignación va dentro de paréntesis
Tres ejemplos
Tres ejemplos
Forma 1 Forma2
(compra<=1000 && (descuento=0.2))|| descuento=(compra<=1000 )*0.2 +
((compra>1000 && compra <=5000) && (compra>1000 && compra <=5000)*0.25
(descuento=0.25))|| + (compra>5000) *1.08;
((compra>5000) && (descuento=0.18));
3 SOLUCIÓN AL PROBLEMA
3.1 Análisis del problema
Matriz de variables
Distancia recorrida:
250
Estancia en días:
5
Costo total del tour: 4016.25
4 EJERCICIOS RESUELTOS
Resuelto 1. Evalúe las siguientes expresiones lógicas (booleanas) y encuentre
el resultado de cada uno de ellos.
1 3> 5 || 8 <= 9 == 1
2 16*8/2+2<=16*8/(2+2) == falso 14/5*8 14*8/5
3 ! (4 * 3 > 12 && 15 < 2 * 3)
4 (2 >= 3 || 5 > 1+3) && ! (6 >= 5)
5 Suponga que A=5 y B=5, el resultado de (A^2) > (B*2) es:
6 Suponga que X=8 y B=7, el resultado de ( X * 5 + B^ 3 / 4 ) <= ( X ^ 3 \B )
es:
7 ( ( 1580 % 6 * 2 ^ 7 ) > ( 7 + 8 * 3 ^ 4 ) ) > ( ( 15 * 2 ) == ( 60 * 2 / 4 ) )
8 !( 15 >= 7 ^2 ) || (43 – 8 * 2 \4 <> 3 * 2 \2)
9 ( 15 >= 7 * 3 ** 2 && 8 > 3 && 15 > 6 ) && ! ( 7 * 3 < 5 + 12 * 2 \ 3 ^2 )
10 ! ( ( 7 * 3 \2 * 4 ) > ( 15 / 2 * 6 >= 15 * 2 / 17 == 15 ) )
Matriz de variables
Diagrama Nassi
Programa
#include <iostream>
using namespace std;
long long diasVencimiento, diasActual;
int main() {
int av, mv, dv;
int aa, ma, da;
cout << "Año de vencimiento: ";
cin >> av;
cout << "Mes de vencimiento: ";
cin >> mv;
cout << "Dia de vencimiento: ";
cin >> dv;
diasVencimiento = dv + mv * 30 + av * 365;
Resuelto 3. Permita leer tres valores distintos, determinar cuál de los tres valores
es el mayor y cuál es el menor y escribirlos
Matriz de variables
Programa
#include<conio.h>
#include<iostream>
using namespace System;
using namespace std;
void main()
{
int A=780,B=950,C=80;
int mayor = 0, menor = 0;
Resultados
Diagrama Nassi
Programa
#include<iostream>
using namespace std;
int hentrada, mentrada, entrada;
int hsalida, msalida, salida;
float estadia, pago;
void main() {
cout << "Hora de entrada: ";
cin >> hentrada;
cout << "Minutos de entrada : ";
cin >> mentrada;
entrada = hentrada * 3600 + mentrada * 60;
cout << "Hora de salida: ";
cin >> hsalida;
Resultado
Hora de entrada : 10
Minutos de entrada : 10
Hora de salida : 15
Minutos de salida : 25
EstadÝa : 5.25
Pago : 40
Resuelto 5. Dependiendo del costo de un producto se hacen los descuentos,
si este es menor de 1000 el descuento es 10%, si está entre 1000 y 5000 el
descuento es de 20% y si es mayor a 5000 el descuento es de 32%. Escriba el
programa en C++ que ayude a realizar compras.
Matriz de variables
Diagrama Nassi
void main()
{
double descuento;
double costo = 2600;
descuento = (costo < 1000)*0.1 + (costo >= 1000 && costo <= 5000)* 0.2 +
(costo > 5000)* 0.32;
Resultado
Costo : 2600
Descuento : 520
Costo con descuento : 2080
Programa v2
#include<iostream>
using namespace std;
void main()
{
double descuento;
double costo = 2600;
5 EJERCICIOS PROPUESTOS
Elabore el programas en C++ que resuelva cada uno de los siguientes
problemas:
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 PROBLEMA
1.1 Enunciado
Realizar un programa para calcular las raíces reales de una ecuación
cuadrática:
𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0
−𝑏 ± √𝑏 2 − 4𝑎𝑐
𝑥=
2𝑎
Construya una función en lenguaje C++ para calcular las raíces de la ecuación.
2 REPASO TEÓRICO
2.1 Contenido
• Sintaxis de una función
• Algunas funciones propias del lenguaje C++
• Funciones de programador: paso de variables por valor
• Funciones de programador: paso de variables por referencia
• Funciones de programador: llamando a una función
• Namespaces
A una función que no regresa un valor se le conoce como procedimiento y si
regresa un valor como función.
<tipo de dato retorno> int, float, double, long, char, bool, etc.
void
<nombre función> El nombre que se le desee dar a la función
respetando las reglas establecidas para nombrar
variables.
<parámetros> Cero o más parámetros. Cada parámetro debe
especificar el tipo de dato y el nombre. Los
parámetros se deben separar con comas.
return Devuelve el valor esperado. Si la función tiene
como tipo de dato retorno un int entonces el
valorDeRetorno deberá ser un int.
En el caso de que el tipo de dato retorno sea void
bastará con poner return o nada;
2.3 Algunas funciones del lenguaje C++
Función Ejemplo de uso Descripción
_getch char c = _getch(); Espera a que el usuario presione una tecla
y devuelve la tecla presionada. Para usarlo
correctamente la memoria del teclado
debe estar limpia fflush(stdin)
srand y srand(time(0)); Funciones para crear número aleatorios:
rand int n1 = rand() % 10 srand inicia el generador de números
+ 1; aleatorios y rand devuelve un número
aleatorio entre 0 y RAND_MAX, si tratamos
el resultado podemos obtener números
Función/Procedimiento Estructura
La función (procedimiento en void hallaSuma(int va, int vb)
este caso) hallaSuma NO regresa {
int suma = va + vb;
valor, recibe mediante el cout << “La sumas es : ” << suma;
parámetro “va” el valor de la va=500;
variable num1. NO se modifica el }
valor de la variable num1.
void combina(int a, int b)
{
El procedimiento combina llama al int num1 = 14;
procedimiento hallaSuma int suma = hallaSuma(num1, b);
pasándole el valor de la variable cout<<num1; //14
num1. }
Funciones …
namespace guiones
{
void ImprimeLinea()
{
cout << "------------------------\n";
}
}
namespace asteriscos
{
void ImprimeLinea()
{
cout << "***********************\n";
}
}
void main()
{
Proceso ecuacionCuadratica
Definir a, b, c, discriminante, x1, x2 Como Real
Escribir "Ingrese los coeficiente a: "
Leer a
Escribir "Ingrese los coeficiente b: "
Leer b
Escribir "Ingrese los coeficiente c: "
Leer c;
discriminante = b^2-4 * a * c;
discriminante= rc(discriminante);
x1 = hallaValor(a, b, discriminante);
x2 = hallaValor(a, b, -discriminante);
x1 = hallaValor(a, b, rd);
x2 = hallaValor(a, b, -rd);
Por ejemplo:
Si el consumo fuese 250 litros entonces el pago sería: 20 + 50*0 + 150*2 + 50*3.5
Solución
1. Matriz inicial de entradas y salidas
Entrada Procesos Salida
q pago
2. Matriz de variables
Tipo Variable Descripción
Entero q Cantidad de litros de agua
consumidos
Real pago Pago por la cantidad de litros
consumidos, teniendo en cuenta los
descuentos respectivos
3. MEPS: Matriz de entradas, proceso y salidas
Entrada Procesos Salida
q calculaPago(q) pago
4. Diagrama Nassi
Funciones Principal
5. Programa
#include <iostream>
using namespace std;
int calculaPago(int cantidad)
{
void main() {
int q = 100;
cout << "Tu pago es: " << calculaPago(q) << endl;
system("pause");
}
Resultados
Tu pago es: 495
Dónde:
Se le solicita que elabore un programa en C++ que reciba como dato el código
de barras de un producto y luego nos imprima los siguientes datos tal como se
muestra en el ejemplo.
Ejemplo:
Ingrese código de barras: 120820166712
Día de vencimiento : 12
Mes de vencimiento :8
El tipo de producto es :C
Diagrama Nassi
Funciones Principal
Programa
Día de vencimiento : 12
Mes de vencimiento : 8
Sobre la experiencia:
Años laborando en la Puntos
entidad
Menos de 5 años 5
5 años a más 10
Sobre la educación:
Estudios Puntos
Primarios 5
Secundarios 10
Ejemplo
Ingrese la cantidad de años que labora: 10
Puntaje Obtenido: 30
Matriz de variables
Diagrama Nassi
Funciones Principal
Resultados
Ingrese la cantidad de años que labora: 12
P: primaria; S: secundaria; U: universitario; G: posgrado: U
5 EJERCICIOS PROPUESTOS
Propuesto 1. Se tiene como datos el peso y la altura de una persona y se
desea calcular su índice de masa corporal (IMC = peso [kg] /altura2 [m]).
Debe indicar el estado en el que se encuentra esa persona en función del
valor de IMC:
Valor de IMC Diagnóstico
< 15 Criterio de ingreso en hospital
de 15 a 20 inclusive bajo peso
de 20 a 30 inclusive peso normal (saludable)
de 30 a 40 inclusive sobrepeso (obesidad de grado I)
>40 sobrepeso crónico (obesidad de grado II)
Propuesto 2. Si se ingresa un valor de 6 dígitos, como el siguiente formato:
abcdef. Entonces imprimir un valor con el siguiente formato: afbecd. Por
ejemplo:
Propuesto 3. El presidente de un club de fútbol requiere calcular el sueldo
de sus jugadores si se tiene como dato la edad y nacionalidad del jugador.
Además se sabe que el sueldo se calcula de la siguiente manera:
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
Ejemplo:
2 TEORÍA
Algunos problemas requieren el uso de estructuras de control selectivos, los mismos
que pueden ser: simple, doble, anidadas y múltiples. Se recomienda revisar el capítulo
que correspende a algortimos con diagramas de flujo de datos para ver el formato
de estas estructuras de control.
2.1 Contenido
• Estructura de control de selección simple
• Estructura de control de selección doble
• Estructura de control de selección con anidamiento
• Estructura de control de selección múltiple
• El operador ? :
Formato
if (condición)
{
bloque de instrucciones
}
Ejemplo
if (numero> 0)
cout << "El número es positivo";
Ejemplo ilustrativo
Ejemplo ilustrativo 1: El valor de descuento puede ser 10%, 20% o 50%, dependiendo
del costo de un producto.
#include<conio.h>
#include<iostream>
#include"Catalogo.h"
using namespace std;
void main()
{
double descuento;
double costo = 2600;
descuento = (costo < 1000 ? 0.1 : (costo >= 1000 && costo < 5000 ? 0.2 : 0.5));
void main()
{
string clasificacion;
double costo = 2600;
clasificacion = (costo < 1000 ? "Barato " : (costo >= 1000 && costo < 5000 ?
"Regular" : "Caro"));
system("pause");
}
#include<iostream>
using namespace std;
void main()
{
int saldo = 22;
double acumuladorTiempoD = 65;
Función principal
Proceso pulsaciones
Definir pSexo Como Caracter
Definir pEdad Como Entero
Escribir "Ingrese el sexo de la persona (F o M): "
Leer pSexo
Escribir "Ingrese la edad de la persona: "
Leer pEdad
Escribir "El número debe ser de ", hallaPulsaciones(pSexo, pEdad) ,
" pulsaciones por cada 10 segundos aproximadamente"
FinProceso
Resultado
Proceso pulsaciones
Definir pSexo Como Caracter
Definir pEdad Como Entero
Escribir "Ingrese el sexo de la persona (F o M): "
Leer pSexo
Escribir "Ingrese la edad de la persona: "
Leer pEdad
hallaPulsaciones(pSexo, pEdad)
FinProceso
Resultado
Resultados
Ingrese el sexo de la persona (F o M) : M
Ingrese la edad de la persona : 84
El n·mero debe ser de 12 pulsaciones por cada 10 segundos aproximadamente
3.5.2 pulsacionesV2.cpp
//Con procedimiento
#include<iostream>
using namespace std;
void hallaPulsaciones(char sexo, int edad)
{
int numeroPulsaciones;
if (sexo == 'F')
{
numeroPulsaciones = (220 - edad) / 10;
}
else
{
numeroPulsaciones = (210 - edad) / 10;
}
cout << "El número debe ser de " << numeroPulsaciones << " pulsaciones por cada
10 segundos aproximadamente" << endl;
}
void main()
{
char pSexo;
int pEdad;
cout << "Ingrese el sexo de la persona (F o M): ";
cin >> pSexo;
cout << "Ingrese la edad de la persona: ";
cin >>pEdad;
hallaPulsaciones(pSexo, pEdad);
system("pause");
}
Resultado
Ingrese el sexo de la persona (F o M) : M
Ingrese la edad de la persona : 52
El n·mero debe ser de 15 pulsaciones por cada 10 segundos aproximadamente
Ejemplo
Ingrese un número entero: 364
Es un número par
Matriz de variables
Diagrama Nassi
void main() {
int numero;
cout << "Numero: ";
cin >> numero;
cout << "EL número que leí es " << clasificaNumero(numero) << endl;
system("pause");
}
Resultados
Numero: 445
El número que leÝ es IMPAR
Ejemplo:
Ingrese el peso del dinosaurio: 120.50
Ingrese el peso del elefante: 255.50
El elefante pesa más que el dinosaurio
Matriz de variables
Función principal
Funciones y procedimientos
Programa
#include<iostream>
#include<string>
using namespace std;
string pesaAnimales(double _pd, double _pe) {
string resultado;
if (_pd > _pe)
{
resultado = "El dinosaurio pesa mas que el elefante";
}
else {
resultado = "El elefante pesa mas que el dinosaurio";
Resultado
Peso del dinosaurio : 1542
Peso del elefante : 6554
El elefante pesa más que el dinosaurio
Matriz de variables
Programa
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
double halla1(double V)
{
return 100 * V;
}
double halla2(double V)
{
return pow(100, V);
}
int main()
{
int opt; double numero;
cout << " Ingrese una opcion (1, 2, 3, 4) :";
cin >> opt;
cout << " Ingresa el numero :";
cin >> numero;
switch (opt)
{
case 1:
cout << " El valor es: " << halla1(numero) << endl;
break;
case 2:
cout << " El valor es: " << halla2(numero) << endl;
break;
case 3:
cout << " El valor es:" << halla3(numero) << endl;
break;
default:
cout << " El valor es: " << " 0 ";
}
_getch();
}
Resultados
Ingrese una opción (1, 2, 3, 4) : 3
Ingresa el valor : 150
El valor es : 0.666667
5 EJERCICIOS PROPUESTOS
Propuesto 1. Una discoteca requiere de un programa para leer la edad de un
asistente y mostrar un mensaje que indicando “ACCESO DENEGADO” si no es mayor
de edad. En la solución use el operador lógico de negación. Escriba una función
para verificar la edad cuyo resultado debe imprimirse en la función principal .
o Por los primeros 100(que es el consumo mínimo) se paga S/.0.35 por unidad.
o Por el exceso de 100 hasta 500 inclusive se paga S/.1.05 por unidad.
o Por los restantes se paga 1.36 por unidad.
6 INVESTIGACIÓN
Elabore los algoritmos en diagrama de flujo o N-S para cada uno de los ejercicios
propuestos. Resuelvalos usando procedimientos y funciones.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
Ejemplo:
32 63 96
1.8 Contenido
• Estructura de control de selección con anidamiento
1.9 De selección con anidamiento
Ocurre cuando usamos en el bloque de instrucciones correspondiente a la
sección del if o del else, otras sentencias if o if / else. Pudiendo escribirse de dos
formas.
Ejemplo ilustrativo
Con función
SubProceso resultado<-anioAcademico(c)
Definir resultado Como Caracter
Si c<32 Entonces
resultado= "PRIMER AÑO"
SiNo
Si c<=63 Entonces
resultado ="SEGUNDO AÑO"
SiNo
Si C<=95 Entonces
resultado ="TERCER AÑO"
SiNo
resultado ="CUARTO AÑO"
Fin Si
Fin Si
Fin Si
FinSubProceso
Proceso academico
Definir pCreditos Como Real
Escribir "Cantidad de créditos: ";
Leer pCreditos
Escribir anioAcademico(pCreditos)
FinProceso
Proceso academico
Definir pCreditos Como Real
Escribir "Cantidad de créditos: ";
Leer pCreditos
anioAcademico(pCreditos)
FinProceso
Resultado
3.5.2 estudianteV2.cpp
#include<iostream>
using namespace std;
void anioAcademico(int creditos)
{
double rMonto;
if (creditos<32)
{
cout << "El estudiante se encuentra en PRIMER AÑO" << endl;
}
else if (creditos<=63)
{
cout << "El estudiante se encuentra en SEGUNDO AÑO" << endl;
}
else if (creditos <= 95)
{
cout << "El estudiante se encuentra en TERCER AÑO" << endl;
}
else
{
cout << "El estudiante se encuentra en CUARTO AÑO" << endl;
}
}
void main()
{
int pCreditos;
cout << "Ingrese la cantidad de créditos acumulados : ";
cin >> pCreditos;
anioAcademico(pCreditos);
system("pause");
}
Resultado
• Reciba los valores de los coeficientes, el centro y reporte el tipo de gráfica que
representa la ecuación
• Reciba un punto P cualquiera y reporte si el punto pertenece o no a la gráfica
• Suponiendo que el centro de la grafica es el punto (0,0), indicar en qué
cuadrante se encuentra el punto P.
Programa
#include<iostream>
using namespace std;
float px, py, x, y;
void validaPunto(float A, float B, float C, float D, float E, float F)
{
float tmp = A * pow(px, 2) + B * px*py + C * pow(py, 2) + D * px + E * py + F;
if (tmp == 0) cout << "El punto P SI pertence a la gráfica" << endl;
else cout<< "El punto P NO pertence a la gráfica" << endl;
}
void validaGrafica(float A, float B, float C, float D, float E, float F)
{
float discriminante=pow(B,2)-4*A*C;
if (discriminante < 0)
{
if (A == C) cout << "CIRCCUNFERENCIA" << endl;
else cout << "ELIPSE" << endl;
}
else if (discriminante > 0)
{
cout << "HIPERBOLA" << endl;
}
else
{
if (A == C) cout << "RECTA" << endl;
else cout << "PARÁBOLA" << endl;
}
}
void main()
{
float A, B, C, D, E, F;
cout << "Valor de A: "; cin >> A;
cout << "Valor de B: "; cin >> B;
cout << "Valor de C: "; cin >> C;
cout << "Valor de D: "; cin >> D;
cout << "Valor de E: "; cin >> E;
Resultado
Valor de A: 2
Valor de B: 5
Valor de C: -7
Valor de D: 1
Valor de E: 5
Valor de F: 6
Centro X: 10
Centro Y: 10
Punto X: 5
Punto Y: 6
HIPERBOLA
El punto P NO pertence a la gráfica
Resuelto 2. Una línea de transporte interprovincial establece un plan de descuentos
(A, B y C) en el precio de sus boletos en función del perfil del pasajero:
• A: Los pasajeros menores de 4 años no pagan. Los pasajeros cuya edad está
entre 4 y 7 años pagan 52% del boleto. Los mayores de 68 años pagan el 55%
del boleto. Para los demás no hay descuentos.
• B: Los pasajeros que son estudiantes pagan el 50% del precio.
• C: A los miembros de familia de más de 5 personas se les descuenta 23% del
precio.
Escribir un programa que reciba como entrada el precio de un boleto y los datos
necesarios para averiguar cuál de los planes le conviene al pasajero, imprimir que
porcentaje de descuento que se aplica y el precio rebajado según el plan asignado.
Analsisis
4 7 68
pagoEstudiante = p;
if (toupper(e) == 'S') pagoEstudiante = 0.5*p;
pagoFamilia = p;
if (f>5) pagoFamilia = p - 0.23*p; //pagoFamilia=0.77*p
imprimePago(pagoEdad, pagoEstudiante, pagoFamilia, p);
}
void main()
{
char estudiante;
int familia, edad, precioUnitario;
cout << "Cual es su edad : "; cin >> edad;
cout << "Es usted estudiante S/N : "; cin >> estudiante;
cout << "Cuantas personas viven en su casa : "; cin >> familia;
cout << "Precio del boleto : "; cin >> precioUnitario;
cout << endl;
calculaPago(edad, estudiante, familia, precioUnitario);
system("pause>NULL");
}
Resultado
Cual es su edad : 5
Es usted estudiante S/N : S
Cuantas personas viven en su casa: 6
Precio del boleto : 200
Nota: Debe validar los datos de entrada para una correcta ejecución de su
programa.
Costo total = 3% del valor del automóvil+ Cargo por modelo + Cargo por la edad del
propietario + Cargo por accidentes previos.
Escriba un programa que lea el nombre y la edad del propietario, el valor del
automóvil, el modelo y el número de accidentes que ha tenido; e imprima el nombre
del propietario seguido del costo de la póliza. El cargo por accidentes previos es de
$15 por los primeros tres accidentes y $20 por cada accidente extra. La compañía no
asegura automóviles a personas con edad fuera de estos rangos.
• Por edad, los pasajeros menores de 4 años no pagan. Los pasajeros cuya edad
está entre 4 y 7 años tienen un descuento de 5.5% del boleto, los mayores de
68 de 8% del boleto y para los demás no hay descuentos.
• Por ser estudiantes, los pasajeros tiene descento de 4% del precio.
• Por ser miembro de familia de más de 5 miembros se les descuenta 3% del
precio.
Escribir un programa que reciba como entrada el precio de un boleto y los datos
necesarios para calcular el precio final del boleto, imprimir que porcentaje de
descuento que se aplica.
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos de diferente manera, algunos de los
ejercicios que se resuelven con funciones también se pueden resolver con
procedimientos.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
Nota: Debe validar los datos de entrada para una correcta ejecución de su programa.
1.3 Reflexionemos
• ¿Cuáles son las dificultades para resolver el problema?
• ¿Cuál es el análisis del problema?
Idetifica:
o Las entradas del programa
o Los procesos y cálculos que se requieren para solucionar el problema
o Las salidas del programa
• ¿Cuál será el algoritmo que respresenta la solución de al problema?
• ¿Cuáles serían las características del lenguaje C++ que falta conocer?
2 REPASO TEÓRICO
Recomendamos revisar los capítulos que correspeonde a algortimos con diagramas de
flujo de datos, ademas del capitulo de estructuras control selectivas simples, dobles y
anidadas para repasar el formato de estas estructuras de control.
2.1 Contenido
• Estructura de control de selección simple
• Estructura de control de selección doble
• Estructura de control de selección con anidamiento
Condicional simple
if (condición)
{
bloque de instrucciones
}
Ejemplo
if (numero> 0)
cout << "El número es positivo";
Ejemplo ilustrativo
Proceso principal
Definir pProducto, pTipo Como Caracter
Definir pCantidad Como Entero
Definir monto Como Real
Escribir "Ingrese producto (O)Oficina, (J)Juegos, (U)Utilitarios: "
Leer pProducto
Escribir "Ingrese tipo de Celular (I)Iphone, (A)Android : "
Leer pTipo
Escribir "Cantidad a comprar : "
Leer pCantidad;
monto = calculaMonto(Mayusculas(pProducto), Mayusculas(pTipo),
pCantidad)
Escribir "Monto a pagar es: ",monto
FinProceso
Resultado
Resultados
Ingrese producto O(Oficina), J(Juegos), U(Utilitarios) : O
Ingrese tipo de Celular I(phone), A(Android) : A
Cantidad a comprar : 15
Monto a pagar es : 304.5
4 EJERCICIOS RESUELTOS
Resuelto 1. Una distribuidora de electrodomésticos con el fin de llevar un mejor control
de sus productos ha decidido implantar un código de barras en cada uno de los
mismos. Este código, de 12 dígitos, contiene la siguiente información del producto:
fecha de caducidad, una letra que identifica al tipo de producto y un indicador si
se trata de un producto de gama alta o no.
Se le solicita que elabore un programa en C++ que reciba como dato el código de
barras de un producto y luego nos imprima los siguientes datos tal como se muestra en
el ejemplo.
Ejemplo:
Codigo
#include<iostream>
using namespace std;
void desencriptaCodigo(long long *n) {
//202412086712
int gama = *n % 100;
*n = *n / 100;
int letra=*n % 100;
*n = *n / 100;
int mes = *n % 100;
void main() {
long long *codigo = new long long;
cout << "Ingrese el código de barras: "; cin >> *codigo;
if(*codigo>100000000000 && *codigo<=999999999999) desencriptaCodigo(codigo);
else cout << "El código es equivocado";
system("pause>NULL");
}
Resultados
Procedenci Precio
a parcial
0 200
1 160
2 180
El precio final se consigue sumando el precio parcial obtenido por la cantidad de likes
con el precio parcial obtenido por la procedencia. Con el precio final obtenido, el
programa debe clasificar su producto en base a la siguiente información:
Cada criterio otorga un puntaje, para el puntaje total se suman los puntos obtenidos
por cada criterio. Para que a la persona se le pueda otorgar la beca, debe alcanzar
un puntaje total superior a 42.
Se le solicita que elabore un programa en C++ que reciba como datos de la persona
el sueldo mensual del padre, el tipo de vivienda donde vive, si es huérfano o no y si
tiene hermanos o no, y nos determine e imprima el puntaje obtenido y si se le otorga
o no la beca.
Ejemplo
Puntaje Obtenido: 34
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos de diferente manera, algunos de los
ejercicios que se resuelven con funciones también se pueden resolver con
procedimientos.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 PROBLEMA
1.1 Enunciado del problema
Una tienda de venta de productos agrícolas al por mayor le ha solicitado que
elabore un programa que permita generar la boleta de venta de los clientes
que en ella compran.
Se le solicita que elabore un programa en C++ que reciba como datos el tipo
de producto y la cantidad de sacos que el cliente comprará y nos determine e
imprima el monto que deberá pagar este.
Importante: Debe validar los datos de entrada para una correcta ejecución de
su programa.
Idetifica:
• ¿Cuáles serían las características del lenguaje C++ que falta conocer?
2 REPASO TEÓRICO
2.1 Contenido
calculaMonto(pProducto, pCantidad)
calculaMonto(producto, cantidad)
Proceso principal
Definir pProducto Como Caracter
Definir pCantidad Como Entero
Definir monto Como Real
Escribir "Ingrese producto (P, C, L, A, M): "
Leer pProducto
Escribir "Cantidad a comprar : "
Leer pCantidad;
monto = calculaMonto(Mayusculas(pProducto), pCantidad)
Escribir "Monto a pagar es: ",monto
FinProceso
Resultado
Ingrese producto (P, C, L, A, M):
> P
Cantidad a comprar :
> 15
Monto a pagar es: 307.5
3.5 Código en C++
3.5.1 agricola.cpp
#include<iostream>
using namespace std;
double calculaMonto(char producto, int cantidad)
{
double rMonto;
switch (producto)
{
case 'P': case 'p':
rMonto = cantidad * 20.5;
break;
case 'C':
rMonto = cantidad * 19.4;
break;
case 'L':
return rMonto;
}
void main()
{
char pProducto;
int pCantidad;
double monto;
cout << "Ingrese producto (P, C, L, M, A) : ";
cin >> pProducto;
Resultado
1. Cuadrado lado*lado
2. Círculo pi*radio*radio
3. Rectángulo base*altura
4. Trapecio (base1+base2)*altura/2
5. Triángulo (base*altura)/2
Resultado
1. Cuadrado lado*lado
2. Círculo pi*radio*radio
3. Rectángulo base*altura
4. Trapecio (base1 + base2)*altura / 2
5. Triángulo (base*altura) / 2
5 EJERCICIOS PROPUESTOS
Propuesto 1. Una empresa maderera vende sus bloques de madera en pies
cúbicos al por mayor le ha solicitado que elabore un programa que permita
generar la boleta de venta de los clientes que en ella compran.
Se le solicita que elabore un programa en C++ que reciba como datos el tipo
de producto y la cantidad de sacos que el cliente comprará y nos determine e
imprima el monto que deberá pagar este.
Debe validar los datos de entrada para una correcta ejecución de su programa.
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos, tenga en cuenta que algunos
de ellos que se resuelven usando funciones o procedimientos.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
Ejemplo:
N: 10
Números de la sucesión: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Importante: Debe validar los datos de entrada para una correcta ejecución del
programa.
2 REPASO TEÓRICO
Algunos problemas requieren el uso de estructuras de control repetitivas, (for)
y mientras (while).
o La razón es r,
o El primer término es p y el último U.
o La cantidad de términos de la sucesión es C=1+(U-p)/r.
Ejemplo: 10, 12, 14, 16, 18, 20, 22. Entonces: p=10, U=22, r=2, C=1 + (22-10)/2=7
Ejemplo ilustrativo
//Esto imprime 4 veces "UPC"
#include<iostream>
using namespace std;
void main() {
int i;
Ejemplo ilustrativo
#include<iostream>
using namespace std;
void main() {
int i, j;
for( i = 1; i <= 4; i++)
{
cout << "UPC : " << i << endl;
for (j = 1; j <= 6; j++)
{
cout << "INGENIERIA " << j << endl;
}
}
system("pause>NULL");
}
Ejemplo ilustrativo
#include<iostream>
using namespace std;
void main()
{
int i, j;
for (i = 1; i <= 6; i++)
{
for (j = 1; j <= 10; j++)
{
cout<<"*";
}
cout << endl;
}
system("pause>NULL");
}
Resultado
**********
**********
**********
**********
**********
**********
FinSubProceso
Proceso principal
Definir pN Como Entero
Escribir "Ingrese numero: "
Leer pN
imprimeNumeros(pN)
FinProceso
Resultado
Ingrese numero:
> 5
1
2
3
4
5
void main()
{
int pN;
cout << "Cantidad de números naturales: ";
cin >> pN;
imprimeNumeros(pN);
system("pause");
}
Resultado
4 EJERCICIOS RESUELTOS
Análisis
Programa
#include<iostream>
using namespace std;
void sumaNumeros(int a, int N)
{
double rSuma;
for (int contador = a; contador <= N-a+1; contador++)
{
rSuma = rSuma + contador;
}
cout << "La suma de los 10 primeros números positivos es
posteriores a "<<a<< rSuma << endl;
}
Programa
#include<iostream>
using namespace std;
void muestraPares(int cantidad)
{
int inc = 2;
int suma = 2;
for (int contador = 1; contador <= cantidad; contador++) //N números
{
cout << suma << " - ";
suma = suma + inc;
}
cout << endl;
}
void main()
{
int pN;
cout << "Cantidad de nuemros naturales pares: ";
cin >> pN;
muestraPares(pN);
system("pause>NULL");
}
Resultado
Código V1
#include<iostream>
using namespace std;
void sumaImpares(int N)
{
int inc = 2;
int numero = 1;
int rSuma = 0;
for (int contador = 1; contador <= N; contador++) //N numeros
{
if (contador % 2!=0)
{
rSuma = rSuma + contador; //acumula
}
}
cout << "La suma de los impares es " << rSuma << endl;
cout << endl;
}
void main()
{
int pN;
cout << "Ingrese el valor de N : ";
cin >> pN;
sumaImpares(pN);
system("pause");
}
Resultado
Ingrese el valor de N : 12
La suma de los impares es 36
Código V2
Ejemplo
Ingrese N: 10
La suma es 1 + 3 + 5 + 7 + 9 = 25
#include<iostream>
using namespace std;
void sumaImpares(int N)
{
double rSuma;
cout << "La suma es " << 1;
void main()
{
int pN;
cout << "Ingrese el número : ";
cin >> pN;
sumaImpares(pN);
system("pause");
}
Resultado
La suma es 1+3+5+7+9+11=36
Ejemplo:
//Suma de impares
sInicio = 1;
rSuma = 0;
for (int contador = 0; contador < M; contador++) //M números
void main()
{
int pN, pM;
cout << "Ingrese la cantidad de numeros pares a sumar: ";
cin >> pN;
cout << "Ingrese la cantidad de numeros impares a sumar: ";
cin >> pM;
anioAcademico(pN, pM);
system("pause");
}
Resultado
Ingrese la cantidad de numeros pares a sumar: 15
Ingrese la cantidad de numeros impares a sumar: 19
La suma de los 15 primeros n·meros pares es 240
La suma de los 15 primeros n·meros impares es 361
Análisis
Programa
#include<iostream>
using namespace std;
void sumaMultiplosDe5(int inferior, int superior)
{
int rSuma = 0;
for (int contador = inferior; contador <= superior; contador++) //N
números
{
if (contador % 5==0)
{
cout << contador<<" - ";
rSuma = rSuma + contador; //acumula
}
}
cout <<endl<< "La suma de los múltiplo de 5 es " << rSuma << endl;
}
void main()
{
int pInferior, pSuperior;
cout << "Ingrese el valor inferior del rango : ";
cin >> pInferior;
Análisis
Variables de repetición: i, N
Programa
#include<iostream>
using namespace std;
void sumaFracciones(int N)
{
int rn = 5, rd = -7, Nr=189, Dr=237;
float suma = 0;
cout << "La suma de: ";
for (int i = 0; i < N; i ++)
{
suma = suma + (float)pow(-1, i)*Nr/Dr;
Nr = Nr + rn; Dr = Dr + rd;
cout << Nr << "/" << Dr << " ";
}
cout << " es " << suma << endl;
}
void main()
{
int C;
cout << "Ingrese la cantidad de términos : ";
cin >> C;
sumaFracciones(C);
system("pause");
}
Resultado
La suma de: 194/230 199/223 204/216 209/209 214/202 219/195 224/188 229/181
es -0.225896
Programa
#include<iostream>
using namespace std;
double sumatorio(int *ct)
{
float *resultado = new float; *resultado = 0.0;
for (int i = 1; i <= *ct; i++)
{
if (i % 2==0) *resultado = *resultado + 1/(2.0*i);
else *resultado = *resultado + ((2.0*i-1)/i);
}
return *resultado;
}
void main() {
int *cantidad = new int; *cantidad = 0;
while (1) {
cout << "Cuantos términos? : "; cin >> *cantidad;
if (*cantidad >= 10 & *cantidad <= 20) break;
}
cout.precision(5);
cout << "\n------------------------------------------------" << endl;
cout << "La suma de los terminos es: " << sumatorio(cantidad) << endl;
system("pause>NULL");
}
Resultado
Cuantos tÚrminos? : 10
------------------------------------------------
La suma de los terminos es: 8.7835
5 EJERCICIOS PROPUESTOS
Ejemplo:
Cuantos términos? : 8
Cuantos términos? : 50
Cuantos términos? : 12
------------------------------------------------
La suma de los términos:
1/1 2/6 5/9 2/12 9/25 2/18 13/49 2/24 17/81 2/30 21/121 2/36
Es: 3.381
• ∑𝑛𝑖=1 √𝑥 3 − 3
2𝑖+1 −2𝑖
• ∑𝑛𝑖=1
𝑖+1
𝑖
• ∑𝑛𝑖=1(−1)𝑖+1
2𝑖
• ∏𝑛𝑖=1 𝑛(𝑛 + 1)
𝑏 𝑥
• ∫𝑎 𝑑𝑥
𝑥 2 +𝑥+5
𝑏 𝑑𝑥
• ∫𝑎1+𝑥 2
𝑏
• ∫𝑎 𝑠𝑒𝑛(𝑥)𝑑𝑥
𝑏
• ∫𝑎 𝑠𝑒𝑛(𝑥)cos (𝑥)𝑑𝑥
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos, use la repetitiva for.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
Ejemplo:
Entrada Resultado
Ingrese un número: 5 ###RESUMEN DE DATOS###
Ingrese un número: -8 Números Leídos = 5
Ingrese un número: 7 Número Mayor = 7
Ingrese un número: 1 Número Menor = -8
Ingrese un número: 2 Números Positivos = 4
Ingrese un número: 0 Números Negativos = 1
Promedio = 1.40
Importante: Debe validar los datos de entrada para una correcta ejecución del
programa.
2 REPASO TEÓRICO
Las estructuras de control repetitivas while y do-while son parecidas.
2.2 Contenido
• Estructura de control repetitiva while
• Estructura de control repetitiva do-while
int numero=1;
while (numero!=0)
{
cout << "Ingrese un número : ";
cin >> numero;
}
}
…
3.4 Pseudocodigo
SubProceso leeEnteros()
Definir contador Como Entero
Definir numero, mayor, menor Como Entero
Definir cuenta, cuentaPositivos, cuentaNegativos Como Entero
Definir rSuma Como Real
numero = 1
mayor=0
menor=99999
cuenta=0
cuentaPositivos=0
cuentaNegativos=0
rSuma = 0
Proceso principal
leeEnteros()
FinProceso
Resultado
Ingrese un número:
> 5
Ingrese un número:
> 8
Ingrese un número:
> -7
Ingrese un número:
> 62
Ingrese un número:
> 0
###RESUMEN DE DATOS###
Números Leídos = 4
Número Mayor = 62
Número Menor = -7
Números Positivos = 3
Números Negativos = 1
Promedio = 17
3.5 Código C++
#include<iostream>
using namespace std;
void leeEnteros()
{
int numero = 1, mayor=0, menor=99999;
int cuenta=0, cuentaPositivos=0, cuentaNegativos=0;
float rSuma = 0;
while (numero!=0)
{
cout << "Ingrese un número : ";
cin >> numero;
rSuma += numero;
if (mayor<=numero) mayor = numero;
if (menor>numero && numero !=0) menor = numero;
if (numero>0) cuentaPositivos++;
if (numero<0) cuentaNegativos++;
cuenta++;
void main()
{
leeEnteros();
system("pause>NULL");
}
Resultado
Ingrese un número: 10
Ingrese un número: 5
Ingrese un número: -8
Ingrese un número: 5
Ingrese un número: 26
Ingrese un número: 0
###RESUMEN DE DATOS###
Números leídos = 5
Número mayor = 26
Número menor = -8
Números positivos = 4
Números negativos = 1
Promedio = 7.6
4 EJERCICIOS RESUELTOS
Resuelto 1. Suma N primeros números naturales múltiplos de un número dado
d. Ejemplo, sea el número dado d=10, N=5, entonces los números a sumar
son: 12, 15, 18, 21 y 24.
Programa
#include<iostream>
using namespace std;
void sumaNumeros(int d, int N)
{
int rSuma=0;
while (d%3!=0)
{
d++;
}
int t = d; //primer término múltiplo de 3 porsterior a 10
for (int i = 0; i <N; i++)
{
rSuma = rSuma + d;
cout << d<<" ";
void main()
{
int d = 7, N = 5;
sumaNumeros(d, N);
system("pause>NULL");
}
Resultado
Rango Mensaje
1-3 ¡Fue pura suerte!!
4-6 ¡Eres bueno!
7 No está mal
8 Se puede mejorar
Más de 8 Que mal estás!!!!
Ejemplo: En el caso de que el número generado sea 25
Intento 1 – Ingrese N: 50
El número es menor
Intento 2 – Ingrese N: 15
El número es mayor
Intento 3 – Ingrese N: 25
¡Fue pura suerte!!
Análisis
void main()
{
jugar();
system("pause");
}
Programa
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
using namespace System;
Console::SetCursorPosition(x, y);
}
gotoXY(x, y);
cout << " ";
}
void pintaObjeto(int &x, int &y) {
gotoXY(x, y);
cout << "*";
}
int x = 10;
int y = 10;
pintaObjeto(x, y);
bool gameover = false;
while (!gameover) {
borraObjeto(x, y);
//mueve
if (_kbhit()) {
char tecla = getch();
5 EJERCICIOS PROPUESTOS
Propuesto 1 Hallar la suma de los términos de la sucesión hasta que el
numerador y el denominador sean iguales:
(−1)𝑖 (2𝑖 + 3)
𝑖
Dónde: i es el i-ésimo término (i=1 para el primer término).
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos, tenga en cuenta que algunos
de ellos que se resuelven usando estructuras repetitiva for se pueden programar
usando while o do-while.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
Idetifica:
Veamos un ejemplo: “sumar los C términos de la sucesión: 17, 21, 25, 29, …”.
r=4; S=17;
for(int i=0; i<C; i++)//variables de repeticion
{
S=S+r; //variables de la sucesión
}
Y con while:
Para la sucesión: 17, 21, 25, 29, … se requieren C=20 términos, se tiene.
FOR WHILE
int S=17; r=2; int i=0, S=17; r=2;
for(int i=0; i<C; i++) While(i<C)
{ {
S=S+r; S=S+r;
} i++;
}
2.1 Contenido
• Estructura de control repetitiva while
• Estructura de control repetitiva for
int sumaPares(int n)
{
int suma = 0;
int incremento = 2;
int numero = 0; // número de la serie
for (int i = 0; i < n; i++)
{
numero = numero + incremento; //numero incrementa su valor en 2
suma = suma + numero; //acumulamos valor de numero en suma
}
return suma;
void main()
{
int N;
cout << "Candidad de numeros a sumar : "; cin >> N;
cout << "La suma de los " <<N << " números es: " << sumaEnteros(N) <<
endl;
cout << "La suma de los " << N << " números pares es: " << sumaPares(N) <<
endl;
cout << "La suma de los " << N << " números impares es: " <<
sumaImpares(N) << endl;
cout << "La suma de los " << N << " números múltiplos de tres es: " <<
sumaMultiplosDeTres(N) << endl;
system("pause>NULL");
}
Resultado
Candidad de numeros a sumar : 20
La suma de los 20 n·meros es: 210
La suma de los 20 n·meros pares es: 420
La suma de los 20 n·meros impares es: 400
La suma de los 20 n·meros m·ltiplos de tres es: 630
3.3.2 Usando while
//Es importarte saber diferenciar entre el incremento de la serie y el incremento
del contador i
#include<iostream>
using namespace std;
int sumaEnteros(int n)
{
int suma = 0;
int numero = 1; //número de la serie
while (numero <= n)
{
suma = suma + numero;
int sumaPares(int n)
{
int suma = 0;
int incremento = 2;
int numero = 0; // número tomará los valores de la serie
int i = 0; //contador
while (i<n)
{
numero = numero + incremento; //numero cambia de valor en cada
repetición
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
i++; //contador
}
return suma;
}
int sumaImpares(int n)
{
int suma = 0;
int incremento = 2;
int numero = -1; // número tomará los valores de la serie
int i = 0; //contador
while (i<n)
{
numero = numero + incremento; //numero cambia de valor en cada
repetición
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
i++; //contador
}
return suma;
}
int sumaMultiplosDeTres(int n)
{
int suma = 0;
int incremento = 3;
int numero = 0; // número tomará los valores de la serie
int i = 0; //contador
while (i<n)
{
numero = numero + incremento; //numero cambia de valor en cada
repetición
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
i++; //contador
}
return suma;
}
void main()
{
int N;
cout << "Candidad de numeros a sumar : ";
cin >> cn;
Resultado
Análisis
Matriz de variables
int sumaPares(int n)
{
int suma = 0;
int sumaImpares(int n)
{
int suma = 0;
int numero = 1; // número tomará los valores de la serie
int incremento = 2;
while (numero < n)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
numero = numero + incremento; //numero incrementa su valor en 2 en
cada repetición
}
return suma;
}
int sumaMultiplosDeTres(int n)
{
int suma = 0;
int numero = 3; // número tomará los valores de la serie
int incremento = 3;
while (numero < n)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
numero = numero + incremento; //numero incrementa su valor en 3 en
cada repetición
}
return suma;
}
void main()
{
int N;
cout << "Sumar numeros menores a : ";
cin >> N;
cout << "La suma de los números enteros menores a " << N << " es: " <<
sumaEnteros(N) << endl;
cout << "La suma de los números pares menores a " << N << " es: " <<
sumaPares(N) << endl;
cout << "La suma de los números impares menores a " << N << " es: " <<
sumaImpares(N) << endl;
cout << "La suma de los números múltiplos de 3 menores a " << N << " tres
es: " << sumaMultiplosDeTres(N) << endl;
system("pause");
}
return suma;
}
int sumaPares(int n)
{
int suma = 0;
int incremento = 2;
for (int numero = 0; numero < n; numero = numero +incremento)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
}
return suma;
}
int sumaImpares(int n)
{
int suma = 0;
int incremento = 2;
for (int numero = 1; numero < n; numero = numero + incremento)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
}
return suma;
}
int sumaMultiplosDeTres(int n)
{
int suma = 0;
int incremento = 3;
for (int numero = 0; numero < n; numero = numero + incremento)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
}
return suma;
}
void main()
{
int N;
Resultado
int sumaPares(int n)
{
int suma = 0;
int numero = 0; // número tomará los valores de la serie
while (numero<n)
{
if (numero % 2 == 0)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
}
numero++; //numero incrementa su valor en 1 en cada repetición
}
return suma;
}
int sumaImpares(int n)
{
int suma = 0;
int numero = 0; // número tomará los valores de la serie
while (numero<n)
return suma;
}
int sumaMultiplosDeTres(int n)
{
int suma = 0;
int numero = 0; // número tomará los valores de la serie
while (numero<n)
{
if (numero % 3 == 0)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
}
numero++; //numero incrementa su valor en 1 en cada repetición
}
return suma;
}
void main()
{
int N;
cout << "Sumar numeros menores a : ";
cin >> N;
cout << "La suma de los números enteros menores a " << N << " es: " <<
sumaEnteros(N) << endl;
cout << "La suma de los números pares menores a " << N << " es: " <<
sumaPares(N) << endl;
cout << "La suma de los números impares menores a " << N << " es: " <<
sumaImpares(N) << endl;
cout << "La suma de los números múltiplos de 3 menores a " << N << " tres
es: " << sumaMultiplosDeTres(N) << endl;
system("pause");
}
Resultado
int sumaPares(int n)
{
int suma = 0;
for (int numero = 0; numero < n; numero++)
{
if (numero % 2 == 0)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
}
}
return suma;
}
int sumaImpares(int n)
{
int suma = 0;
for (int numero = 0; numero < n; numero++)
{
if (numero % 2 == 1)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
}
}
return suma;
}
int sumaMultiplosDeTres(int n)
{
int suma = 0;
int numero = 0; // número tomará los valores de la serie
for (int numero = 0; numero < n; numero++)
{
if (numero % 3 == 0)
{
suma = suma + numero; //acumulamos el valor de numero en la
variable suma
}
}
return suma;
}
void main()
{
int N;
cout << "Sumar numeros menores a : ";
cin >> N;
cout << "La suma de los números enteros menores a " << N << " es: " <<
sumaEnteros(N) << endl;
cout << "La suma de los números pares menores a " << N << " es: " <<
sumaPares(N) << endl;
cout << "La suma de los números impares menores a " << N << " es: " <<
sumaImpares(N) << endl;
cout << "La suma de los números múltiplos de 3 menores a " << N << " tres
es: " << sumaMultiplosDeTres(N) << endl;
system("pause");
Resultado
Sumar numeros menores a : 50
La suma de los n·meros enteros menores a 50 es: 1225
La suma de los n·meros pares menores a 50 es: 600
La suma de los n·meros impares menores a 50 es: 625
La suma de los n·meros m·ltiplos de 3 menores a 50 tres es: 408
5 EJERCICIOS PROPUESTOS
Propuesto 1. Resuelva el problema enunciado en este capítulo usando una
estructura repetitiva for modificando la variable N y los incrementos en el
propio contador.
Propuesto 2. Resuelva el problema enunciado en este capítulo usando una
estructura repetitiva while modificando la variable N y los incrementos en el
propio contador.
Propuesto 3. Una máquina expendedora de helados está ofertando helados.
Si la compra es realizada por un niño el cobro es de 0.60 céntimos, ancianos
pagan 0.80 y adultos 1.10. El sistema clasifica a los niños si su edad es menor
a 16 años, adultos si edad es mayor a 15 y menor a 65 años, ancianos cuando
su edad es superior a 65. El cobro es automático, para el cual: el usuario
indica su edad y la cantidad de helados a comprar, la máquina muestra el
detalle de su compra. Una opción adicional puede mostrar el resumen de
todas las compras del día para ello el usuario pulsa la tecla ‘S’ cuyo detalle
corresponde a:
• Lo recaudado por niños, adultos y ancianos, además del total,
• La cantidad de niños, adultos y ancianos que compraron en la máquina;
• Cuál de los tres tipos de comprador obtuvo más compras.
Ejemplo:
Pulse 'V' Ver reporte, 'C' Hacer compra: c
Edad: 63
Cantidad de chocolates: 10
Pague: 11
Pulse 'V' Ver reporte, 'C' Hacer compra: 64
Edad: Cantidad de chocolates: 4
Pague: 2.4
Pulse 'V' Ver reporte, 'C' Hacer compra: 61
Edad: Cantidad de chocolates: 10
Pague: 6
Pulse 'V' Ver reporte, 'C' Hacer compra: c
Edad: 10
Cantidad de chocolates: 4
Pague: 2.4
Pulse 'V' Ver reporte, 'C' Hacer compra: c
Edad: 13
Cantidad de chocolates: 7
Pague: 4.2
Pulse 'V' Ver reporte, 'C' Hacer compra: v
RECAUDACIÓN:
------------------------------
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos, modifique las variables de la
estructura así como las variables de la sucesión usando repetitiva for, while y do-
while.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 PROBLEMA
1.1 Enunciado del problema
La constante π (3.1416...) se puede aproximar por la siguiente sucesión de
términos:
2 4 4 6 6 8 8
4∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗…
3 3 5 5 7 7 9
Se le solicita a usted un programa en C++ y en entorno consola que calcule
el valor de π si se tiene como dato la cantidad de términos de la serie (n).
Recordar que n es un número entero positivo mayor que 1.
Ejemplo 1:
Ingrese el valor de N : -6
Ingrese el valor de N : 3
Resultado : 3.555556
Importante: Debe validar los datos de entrada para una correcta ejecución del
programa.
2 2 4 4 6 6 8 8
2 …
1 3 3 5 5 7 7 9
i 1 2 3 4 5 6 7 8 …
Se requiere n repeticiones, en cada repeticion evaluamos para i –ésima
repetición impar (i+1)/i, y para la i repetición par i/(i+1).
2 REPASO TEÓRICO
Es importante saber que algunos programas se pueden escribir usando for o
while y aveces se requieren saltar algunos pasos o salir del bucle.
2.1 Contenido
• Sentencia break
• Sentencia continue
• Sentencia exit
break;
• do…while
• while
•
for
•
switch
Es muy usada en cada una de las opciones de la estructura switch.
Ejemplo ilustrativo
Realizar una aplicación en C++ que imprima los 6 primeros número pares que
hay entre 1 y 40.
#include <iostream>
#include<conio.h>
using namespace std;
Resultado
2 4 6 8 10 12
continue;
• do…while
• while
• for
Ejemplo ilustrativo
Realizar una aplicación en C++ que sume los números pares comprendidos
entre 1 y 10 inclusive.
#include <iostream>
#include<conio.h>
using namespace std;
void main()
{
int i, suma;
suma = 0;
for (i = 1; i <= 10; i++)
{
if (i % 2 != 0) // salta los impares
{
continue;
}
cout << i << " ";
Resultado
2 4 6 8 10 La suma es: 30
exit (código)
Ejemplo ilustrativo
#include <iostream>
#include<conio.h>
using namespace std;
void main()
{
char caracter;
while (1)
{
cout << "Pulse el caracter S para salir ";
cin >> caracter;
if (caracter == 'S' || caracter == 's')
exit(0);
}
}
Ejemplo ilustrativo
Resultado
Cuando se pulsa 0, el programa se finaliza sin imprimir el valor del contador
3 SOLUCIÓN AL PROBLEMA
3.1 Análisis del problema
Matriz de variables
3.3 Código
#include <iostream>
#include<conio.h>
using namespace std;
void main()
{
int n;
double N;
double producto = 2.0;
while (true)
{
cout << "Ingrese el valor de N (mayor a 0) : ";
cin >> N;
if (N<=1)
{
3.4 Resultado
Ingrese el valor de N (mayor a 0) : 0
Ingrese el valor de N (mayor a 0) : 0
Ingrese el valor de N (mayor a 0) : 1
Ingrese el valor de N (mayor a 0) : 8
Resultado: 2.97215
4 EJERCICIOS RESUELTOS
Resuelto 1. Un número a genera una clave de firma digital en base a la
siguiente regla: a + a2 + a3 + a4 = 2mnp
̅̅̅̅̅̅62760, donde mnp
̅̅̅̅̅̅ es un número
natural. Hallar la clave de la firma digital mnp
̅̅̅̅̅̅.
Análsis
Programa
#include <stdio.h>
#include <iostream>
#include<string>
using namespace System;
using namespace std;
int main()
{
long long numero;
int a=10;
long long suma;
while (true)
{
suma = 0;
for (int i = 1; i <= 4; i++)
{
suma = suma + pow(a, i);
}
Resultado
Valor de a: 123
Numero: 230762760
Clave: 307
5 EJERCICIOS PROPUESTOS
Propuesto 1. La exponencial de un número real a se puede aproximar con la
serie:
∞
𝑎
𝑎𝑘 𝑎2 𝑎3 𝑎4 𝑎𝑘
𝑒 =∑ = 1+𝑎 + + + +⋯+ +⋯
𝑘! 2 3! 4! 𝑘!
𝑘=0
Ejemplo 1: Ejemplo 2:
Ingrese n: 71 Ingrese n: 10
Ingrese n: 15 Ingrese a: 2.1
Ingrese a: 1.2 El resultado de 𝑒 𝑎 será:
El resultado de 𝑒 𝑎 será: 8.1661
3.320117
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos, tenga en cuenta que algunos
de ellos que se resuelven usando estructuras repetitiva for se pueden programar
usando while o do-while.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
Programa Resultado
#include<iostream> Lado del cuadrado
: 8
using namespace std;
system("pause>NULL");
Programa Resultado
#include<iostream> Lado del
triángulo : 7
using namespace std;
void main() *
**
{ ***
int *N = new int; ****
*****
int *i = new int; int *j = new int; ******
while (true) *******
system("pause>NULL");
Programa Resultado
#include <iostream>
void main()
{
Ingrese un número: 8
system("pause>NULL");
Forma2
Programa Resultado
#include <iostream> Ingrese un n·mero: 8
Ingrese un caracter: k
using namespace std; kkkkkkkk
void main() kkkkkkk
kkkkkk
{ kkkkk
kkkk
int *N=new int; kkk
kk
int *i = new int; int *j = new int;
k
char caracter;
while (true)
system("pause>NULL");
Ejercicio 4. Realice una aplicación en C++ que solicite el ingreso de un número entero,
positivo y menor a 10 (N) y muestre, al centro de la pantalla, un cuadrado de lado N.
Programa: primero el cuadrado
Para pensar en una solución sencilla hagamos el grafico en una matriz de N*N,
en este caso N vale 5.
i\j 1 2 3 4 5
1 * * * * * N=5
2 * *
3 * * i=1 i=5
4 * * j=1 j=5
5 * * * * *
#include <iostream>
using namespace std;
void main()
{
int *N=new int;
int *i = new int; int *j = new int;
char *caracter = new char;
while (true)
{
cout << "Ingrese un número: ";cin >> *N;
if (*N > 0 && *N < 10) break;
}
cout << "Ingrese un caracter: "; cin >> *caracter;
Resultado
Ingrese un n·mero: 8
Ingrese un caracter: q
qqqqqqqq
q q
q q
q q
q q
q q
q q
qqqqqqqq
Resultado
Ingrese un número: 8
Valor de x: 5
Valor de y: 8
Ingrese un caracter: X
qqqqqqqq
q q
q q
q q
q q
q q
q q
qqqqqqqq
Programa
i\j 1 2 3 4 5 N=5 i j
1 * * * * * i=1 i=5 1 1
2 * * * j=1 j=5 2 2
3 * * * 3 3
4 * * * 4 4
5 * * * * * … …
i=j
Resultado
Ingrese un número: 8
* * * * * * * *
* * *
* * *
* * *
* * *
* * *
* * *
* * * * * * * *
Ejercicio 6. Realice una aplicación en C++ que solicite el ingreso de dos números
enteros, positivos y menores a 10 (N) y muestre, al centro de la pantalla, la siguiente
figura.
i\j 1 2 3 4 5 N=5 i j
1 * i=1 i=5 5 1
2 * * j=1 j=5 6 2
3 * * 7 3
4 * * 8 4
5 * * * * * 9 5
6 * *
7 * * Patrón i-j=4
8 * * Predicción i-j=n-1
9 *
Programa
#include <iostream>
using namespace std;
void main()
{
int *N = new int;
int *i = new int; int *j = new int;
int *x = new int; int *y = new int;
char *caracter = new char;
while (true)
{
cout << "Ingrese un número: "; cin >> *N;
if (*N > 0 && *N < 10) break;
}
cout << "Valor de x: "; cin >> *x;
cout << "Valor de y: "; cin >> *y;
cout << "Ingrese un caracter: "; cin >> *caracter;
//x espacios hacia abajo
for (*i = 1; *i < *x; *i += 1)
{
cout << endl;
}
for (*i = 1; *i <= 2**N-1; *i += 1)
{
//y espacios hacia la derecha
for (*j = 1; *j < *y; *j += 1)
{
cout << " ";
}
for (*j = 1; *j <= *N; *j += 1)
{
if ((*i == *N) || (*j == 1 && *i<*N) || (*j == *N && *i>*N)
|| (*i==*j) || (*i - *j == *N - 1))
{
cout << *caracter << " ";
}
else
{
cout << " ";
}
}
Resultado
Ingrese un n·mero: 8
Valor de x: 3
Valor de y: 5
Ingrese un caracter: o
o
o o
o o
o o
o o
o o
o o
o o o o o o o o
o o
o o
o o
o o
o o
o o
o
Ejercicio 7. Realice una aplicación en C++ que solicite el ingreso de un número entero
positivo y menor a 10 (N) y muestre, de izquierda a derecha N triángulos rectángulos.
Análisis
i\j 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
1 * * *
2 * * * * * *
3 * * * * * *
4 * * * * * *
5 * * * * * * * * * * * * * * *
Programa
#include <iostream>
using namespace std;
void main()
{
int *c = new int;
int *i = new int; int *j = new int;
while (true)
{
cout << "Cantidad de triangulos entre 1 y 7: "; cin >> *c;
if (*c > 0 && *c <=7) break;
}
for (*i = 1; *i <=5; *i += 1)
{
for (*j = 1; *j <= 5**c+(*c-1)*2; *j += 1)
{
if (*j%7==1 || *j%7==*i || (*i==5 && *j%7>=1 && *j % 7<=5))
//Verticales j%7==1, Diagonales *j%7==*i
{
cout <<"*";
}
else
{
cout << " ";
}
}
cout << endl;
}
system("pause>NULL");
}
Resultado
Cantidad de triángulos entre 1 y 7: 6
* * * * * *
** ** ** ** ** **
* * * * * * * * * * * *
* * * * * * * * * * * *
***** ***** ***** ***** ***** *****
Programa Resultado
#include<iostream> Ingrese un número: 8
using namespace std; 1
void main() 12
{ 123
int *N = new int;
int *i = new int; int *j = new int;
1234
while (true) 12345
{ 123456
cout << "Ingrese un número: "; 1234567
cin >> *N; 12345678
if (*N > 0 && *N < 10) break;
}
for (*i = 1; *i <= *N; *i += 1)
{
for (*j = 1; *j <= *i; *j += 1)
{
cout << *j;
}
cout << endl;
}
system("pause>NULL");
}
Ejercicio 10. Escriba un programa en C++ que permita ingresar un número entero
positivo (N), menor que 10, y luego nos permita imprimir un triángulo de N filas formado
por dígitos del 1 hasta N.
Ejemplo:
Ingrese un número: 5
1 2 3 4 5 6 7 8 9
1 1
2 1 2 1
3 1 2 3 2 1
4 1 2 3 4 3 2 1
5 1 2 3 4 5 4 3 2 1
• Hay N filas
• Por cada filas hay tres bucles: el primero para pintar blancos, el segundo
para pintar los números ascendentes y el tercero en donde los números
descienden
Programa Resultado
#include<iostream> Cantidad de filas
: 6
using namespace std;
void main() 1
121
{ 12321
1234321
int *N = new int;
123454321
int *i = new int; int *j = new int; 12345654321
while (true)
Programa
#include<iostream>
using namespace std;
void main()
{
int *N = new int;
int *i = new int; int *j = new int;
while (true)
{
cout << "Cantidad de filas : ";cin >> *N;
if (*N > 0 && *N < 10) break;
}
//Parte de superior
for (*i = 1; *i <= *N; *i += 1)
{
for (*j=1; *j<=*N-*i; *j+=1)
{
cout << " ";
}
for (*j = 1; *j <= *i; *j += 1) //Numeros ascendente
{
cout << *j;
}
for (*j = *j-2; *j >= 1; *j -= 1)
{
cout << *j;
}
cout << endl;
}
//Parte inferior
for (*i = 1; *i <= *N-1; *i += 1)
{
for (*j = 1; *j <= *i; *j += 1)
{
cout << " ";
}
for (*j = 1; *j <= *N-*i; *j += 1) //Numeros ascendente
{
cout << *j;
}
for (*j = *j - 2; *j >= 1; *j -= 1)
{
cout << *j;
}
cout << endl;
system("pause>NULL");
}
Resultado
Cantidad de filas: 9
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
123456787654321
1234567654321
12345654321
123454321
1234321
12321
121
1
Ejemplo:
Ingrese un número entre 1 y 5: 5
1
123
12345
1234567
123456789
1234567
12345
123
1
Análisis
while (true)
{
cout << "Ingrese un número entre 1 y 5: "; cin >> *N;
if (*N > 0 && *N <= 5) break;
}
Programa
#include <iostream>
using namespace std;
void main()
{
int *N = new int;
int *i = new int;
int *j = new int;
int *k = new int;
while (1)
{
cout << "Ingrese un número menor o igual a 5: "; cin >> *N;
if (*N <= 5) break;
}
Ejercicio 14. Realice una aplicación en C++ que solicite el ingreso de un número
entero, positivo y menor a 10 (N) y muestre, al centro de la pantalla, un cuadrado de lado
N.
Ejemplo:
Ingrese un n·mero menor o igual a 5: 20
Ingrese un n·mero menor o igual a 5: 5
123454321
2 2
3 3
4 4
5 5
6 6
7 7
6 6
5 5
123454321
Programa
#include <iostream>
using namespace std;
void main()
{
int *N = new int;
int *i = new int;
int *j = new int;
int *k = new int;
while (1)
{
cout << "Ingrese un número menor o igual a 5: "; cin >> *N;
if (*N <= 5) break;
}
Ejercicio 15. Elabora un programa en C++ que solicite un número entero positivo
menor a 10 y que luego nos imprima en la consola el rombo mostrado, tal como se aprecia
en el ejemplo adjunto.
Ejemplo:
Ingrese un n·mero entre 1 y 5: 20
Ingrese un n·mero entre 1 y 5: 5
A
ABC
ABCDE
ABCDEFG
ABCDEFGHI
ABCDEFG
ABCDE
ABC
A
while (true)
{
cout << "Ingrese un número entre 1 y 5: "; cin >> *N;
if (*N > 0 && *N <= 5) break;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
int N;
cout << "cantidad : "; cin >> N;
for (int i = 1; i < 2 * N; i++)
{
int t = N;
for (int j = 1; j < 2 * N; j++)
{
if (i + j >= N + 1 && j - i <= N - 1 && i - j <= N - 1 && i +
j <= 3 * N - 1) cout << char(t + 64);
else cout << " ";
if (j < N) t--;
else t++;
}
cout << endl;
}
}
}
cout << endl;
}
}
1 PROBLEMA
1.1 Enunciado del problema
Implementar una función en un programa que calcule el área y el perímetro
de una circunferencia, dado el radio. El programa realiza varios cálculos y
termina cuando el valor de radio ingresado es cero.
Importante: Debe validar los datos de entrada para una correcta ejecución del
programa.
2 REPASO TEÓRICO
Para guardar un dato en la memoria de la computadora, se usa un espacio de
memoria estática o dinámica, el espacio de memoria se asiga a una variable
Dirección Variable
&precio Precio
0010BD48 120
int *ptr;
int precio;
ptr = &precio; //apuntamiento
*ptr guarda el valor de una variable a la que apunta ptr (en este caso,
*ptr==precio). La variable ptr guarda la dirección de la variable precio (en este
caso, ptr==&precio).
Dirección Variable
&*ptr *ptr
0110AB52 0010BD48
Forma1 Forma2
int *precio; int * precio =new
precio =new int; int;
La memoria dinámica se manipula con punteros, sin embargo la memoria
estática se puede manipular con o sin punteros.
2.1 Contenido
int Y;
int * ptrEntero;
Donde:
ptrEntero=&Y;
Luego:
cout<<&Y;
int numero=*ptrEntero
Es decir, si Y=20, prtEntero=&Y, entonces *prtEntero es igual a 20.
Es decir:
int *numero;
• Separamos un espacio de memoria dinámica con el operador new.
numero=new int;
• También podemos separar un espacio en memoria dinámica y asignarlo al
puntero en una sola línea de código.
…
return algo;
void main()
{
int radio;
while (true)
{
cout << endl<<"Radio de la circunferencia: ";
cin >> radio;
if (radio <= 0)
{
continue;
}
else
{
areaYperimetro(radio);
cout << "-------- RESULTADOS ----------" << endl;
cout << "Radio : " << radio << endl;
Resultado
Radio de la circunferencia: 15
-------- RESULTADOS ----------
Radio : 15
Area : 706.86
Circunferencia : 94.248
Radio de la circunferencia: -8
Radio de la circunferencia: 40
-------- RESULTADOS ----------
Radio : 40
Area : 5026.56
Circunferencia : 251.328
3.3 Con parámetros por referencia
Declaramos la variable radio, area, circunferencia en la función principal, luego
en la función areaYperimetro(r, &A, &C) para recibir el valor del radio, la
direccion de la variable area y la direccion de circunferencia.
#include<iostream>
using namespace std;
void areaYperimetro(int r, float &A, float &C)
{
A = 3.1416*pow(r, 2);
C = 2 * 3.1416*r;
}
void main()
{
int radio;
float area, circunferencia;
while (true)
{
cout << endl << "Radio de la circunferencia: ";
cin >> radio;
if (radio <= 0)
{
continue;
}
else
{
areaYperimetro(radio, area, circunferencia);
cout << "-------- RESULTADOS ----------" << endl;
cout << "Radio : " << radio << endl;
cout << "Area : " << area << endl;
cout << "Circunferencia : " << circunferencia << endl;
}
}
system("pause");
}
Radio de la circunferencia: -9
Radio de la circunferencia: 35
-------- RESULTADOS ----------
Radio: 35
Area: 3848.46
Circunferencia: 219.912
void main()
{
int radio;
float area, circunferencia, *ptrArea, *ptrCircunferencia;
ptrArea = &area;
ptrCircunferencia = &circunferencia;
while (true)
{
cout << endl << "Radio de la circunferencia: ";
cin >> radio;
if (radio <= 0)
{
continue;
}
else
{
areaYperimetro(radio, ptrArea, ptrCircunferencia);
cout << "-------- RESULTADOS ----------" << endl;
cout << "Radio : " << radio << endl;
cout << "Area : " << area << endl;
cout << "Circunferencia : " << circunferencia << endl;
}
}
system("pause");
}
Radio de la circunferencia: -4
Radio de la circunferencia: 50
-------- RESULTADOS ----------
Radio : 50
Area : 7854
Circunferencia : 314.16
Programa
#include<iostream>
using namespace std;
void areaYperimetro(int r, float *A, float *C)
{
*A = 3.1416*pow(r, 2);
*C = 2 * 3.1416*r;
}
void main()
{
int radio;
float *area = new float;
float *circunferencia=new float;
while (true)
{
cout << endl << "Radio de la circunferencia: ";
cin >> radio;
if (radio <= 0)
{
continue;
}
else
{
areaYperimetro(radio, area, circunferencia);
cout << "-------- RESULTADOS ----------" << endl;
cout << "Radio : " << radio << endl;
cout << "Area : " << *area << endl;
cout << "Circunferencia : " << *circunferencia << endl;
}
}
system("pause");
}
Resultado
Radio de la circunferencia: 0
Radio de la circunferencia: -8
Radio de la circunferencia: 30
-------- RESULTADOS ----------
Radio: 30
Area: 2827.44
Circunferencia: 188.496
4 EJERCICIOS RESUELTOS
Resuelto 1. Un número combinatorio proporciona el número de
combinaciones posibles de N elementos tomados en grupos de K elementos,
aquí no importa el orden en el que se forman los grupos. El número de
combinaciones se calcula con la siguiente fórmula:
𝑵!
𝒄𝒐𝒎𝒃𝒊𝒏𝒂𝒄𝒊𝒐𝒏𝒆𝒔(𝑵, 𝑲) =
𝑲! (𝑵 − 𝑲)!
Por ejemplo:
Programa
void main()
{
int N, K, combinaciones;
int *ptrN, *ptrK;
ptrN = &N;
ptrK = &K;
while (true)
{
cout << "Valor de N: ";
cin >> N;
cout << "Valor de K: ";
cin >> K;
if (K>N)
{
continue;
}
else
{
int temporal = N - K;
int *ptrTemporal;
ptrTemporal = &temporal;
combinaciones = calculaFactorial(ptrN) /
(calculaFactorial(ptrK)*calculaFactorial(ptrTemporal));
cout << "El numero de combinaciones será : " <<
combinaciones<<endl;
Valor de N: 5
Valor de K: 9
Valor de N: 5
Valor de K: 3
El número de combinaciones será: 10
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos, tenga en cuenta que algunos
de ellos que se resuelven usando estructuras repetitiva for se pueden programar
usando while o do-while.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
PROBLEMA
1.1 Enunciado del problema
Una ecuación cuadrática es una ecuación de la forma a𝑥 2 + bx + c = 0,
donde a, b, y c son números reales.
Ejemplo
9𝑥 2 + 6x + 10 = 0 a = 9, b = 6, c = 10
3𝑥 2 − 9x = 0 a = 3, b = -9, c = 0
−6𝑥 2 + 10 = 0 a = -6, b = 0, c = 10
Un método para hallar los valores de x (son dos valores), en este tipo de
ecuación es usando la fórmula cuadrática:
−𝑏 ± √𝑏 2 − 4𝑎𝑐
𝑥=
2𝑎
Desarrollar un programa para solucionar este tipo de ecuaciones. Crear una
función para hallar los dos valores de x y y retornarlos al programa principal.
REPASO TEÓRICO
2.1 Contenido
• Tipos de memoria en la computadora
• Las zonas de una memoria física
• Asignación de la dirección de memoria estática a un puntero
• Asignación de la dirección de memoria dinámica a un puntero
• Liberación de memoria dinámica
• NULL
Zona dinámica
(Heap)
Límite de la
Pila
Pila
Puntero de la
Pila (Stack
pointer)
Figura 1. Zonas de la memoria física (adaptado del curso de Programación I, UPC 2018-II)
Sintaxis
Manera 1 Manera 2
int *variableA; int *variableA = new int;
variableA = new int;
Sintaxis Ejemplo
delete nombrePuntero; delete variableA;
2.7 NULL
NULL es una constante que se aplica, especialmente, a los punteros para indicar
que estos no apuntan a ningún lugar.
Sintaxis Manera 1 Manera 2
TipoDato *nombrePuntero; int *pA; int *pA = NULL;
nombrePuntero = NULL; pA = NULL;
No olvide de asignar un espacio de memoria (new o malloc) al puntero antes
de utilizarlo.
Situación similar se da con los punteros. Al declarar int *pA; el valor de pA puede
ser cualquier cosa, inclusive puede ser una dirección de memoria que no nos
corresponde, por lo que, si intentamos acceder a dicha memoria obtendremos
un error. Es por esta razón que es importante inicializar el valor del puntero y
colocamos inmediatamente el valor que nos otorga New o Malloc que puede
ser una dirección de memoria o NULL.
*A = 80;
cout << "Dirección del dato: " << A << endl;
cout << "Dirección del dato: " << *A << endl;
getch();
}
*A = 80;
cout << "Dirección del dato: " << A << endl;
cout << "Dirección del dato: " << *A << endl;
getch();
}
cout << "\nApuntando a otra dirección sin liberar la memoria" << endl;
A = new int; //reservando espacio
*A = 80;
cout << "Nueva dirección del dato: " << A << endl;
cout << "Nuevo valor del dato :: " << *A << endl;
getch();
}
delete A;
A = NULL;
cout << "\nApuntando a otra dirección después de liberar la memoria" <<
endl;
A = new int; //reservando espacio
*A = 80;
cout << "Nueva dirección del dato: " << A << endl;
cout << "Nuevo valor del dato : " << *A << endl;
getch();
}
if (puntero != NULL)
• Se imprimirá que aún tiene datos para dicha variable cuando esto ya no
es cierto.
#include<iostream>
#include<conio.h>
using namespace std;
void main()
{
int *A;
delete A;
cout << "\nInformacion después de liberar la memoria" << endl;
cout << "Nueva dirección del dato: " << A << endl;
cout << "Nuevo valor del dato : " << *A << endl;
getch();
}
delete A;
A = NULL;
cout << "\nInformacion después de liberar la memoria" << endl;
cout << "Nueva dirección del dato: " << A << endl;
//cout << "Nuevo valor del dato : " << *A << endl;
getch();
}
void main()
{
int A, B, C;
double *X1 = new double; //reservando espacio
double *X2 = new double; //reservando espacio
//Leyendo datos
cout << "Coeficiente A: ";
cin >> A;
cout << "Coeficiente B: ";
cin >> B;
cout << "Coeficiente C: ";
cin >> C;
Coeficiente A: 3
Coeficiente B: 2
Coeficiente C: -8
Primera raíz : -2
Primera raíz : 1.33333
Se halla:
𝑎2 −3𝑏 2𝑎3 −3𝑎𝑏+27𝑐 𝑅
𝑄= ,𝑅= , 𝜃 = 𝑎𝑟𝑐𝑐𝑜𝑠 ( )
9 54 √𝑄3
• En caso contrario, R2≥Q3 la ecuación tiene una raíz real y dos complejas:
Escribir un programa que calcule las raíces de la ecuación, en el caso que éstas
sean reales.
Análisis
Primero que todo hay que verificar que la ecuación tenga raíces reales para lo
cual hallamos el valro de R y Q. Luego, hallamos el ángulo 𝜃.
Código
#include<iostream>
using namespace std;
using namespace System;
system("pause>NULL");
}
Resultado
RAICES:
x1 = -1.68956
x2 = 4.11843
x3 = -0.428852
EJERCICIOS PROPUESTOS
Propuesto 1. Dada la ecuación cúbica de la forma x3+ax2+bx+c=0, sus tres
raíces se calculan mediante el Método de Cardano, de la siguiente manera:
Se halla:
𝑎2 −3𝑏 2𝑎3 −3𝑎𝑏+27𝑐 𝑅
𝑄= ,𝑅= , 𝜃 = 𝑎𝑟𝑐𝑐𝑜𝑠 ( )
9 54 √𝑄3
0, 𝐴 = 0
Entonces la raíz real y las dos complejas conjugadas son:
𝑎
𝑥1 = (𝐴 + 𝐵) −
3
1 𝑎 √3
𝑥2 = − (𝐴 + 𝐵) − + 𝑖 (𝐴 − 𝐵)
2 3 2
1 𝑎 √3
𝑥3 = − (𝐴 + 𝐵) − − 𝑖 (𝐴 − 𝐵)
2 3 2
INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos y elabore un mapa conceptual
de los aspectos más importantes del uso de la memoria dinámica.
EVALUACIÓN
Esta práctica dirigida no será evaluada
1 PROBLEMA PROPUESTO
1.1 Enunciado del problema
Se desea registrar el peso de varios estudiantes del primer grado de un colegio
para el control de su dieta alimenticia, para lo cual se desea calcular el:
• Promedio de peso
• Moda el peso
• El mayor peso
• El menor peso
• Desviación estándar DE
∑|𝑋 − µ|2
𝐷𝐸 = √
𝑁
2 REPASO TEÓRICO
2.1 Contenido
void main()
{
int t = 10;
int *lista = new int[t];
for (int i = 0; i < t; i++)
{
lista[i] = pow(i , 2);
}
for (int i = 0; i <t; i++)
{
cout << lista[i] << " ";
}
cout << "\nModificando el tamanio del vector :" << endl;
t = 20;
lista = new int[t];
for (int i = 0; i < t; i++)
{
lista[i] = pow(i, 3);
}
for (int i = 0; i < t; i++)
{
cout << lista[i] << " ";
}
system("pause>NULL");
}
2.4 Pasando un vector dinámico a una función V1
Recibido mediante una variable estática
Matriz de variables
Código
Resultados
Cantidad de estudiantes : 10
52 - 31 - 51 - 29 - 44 - 46 - 27 - 33 - 22 - 28 -
El promedio es: 36.3
Moda es 52 y se repite 1 veces
El mayor es: 52
El menor es: 22
Desviacion estándar: 3.26818
4 EJERCICIOS RESUELTOS
Resuelto 1 Hacer un programa que calcule la nota de un estudiante en una
prueba de 10 preguntas de opciones múltiples [A,B,C,D]. Cada pregunta se
evalúa con dos puntos. Debe inicializar un arreglo con las respuestas
correctas. El programa debe mostrar el nombre del estudiante, el arreglo de
respuestas correctas y el arreglo de respuestas del alumno y la nota del
alumno.
Análisis
Propuesto 2. Llenar dos vectores, el primero con los dni de los estudiantes
que reprobaron programacion I, el segundo con los dni de los estudiantes
que reprobaron Matemática basica. Se pide crear otro arreglo formado por
los dni de los estudiantes que reprobaron ambas materias. Mostrar el arreglo
resultante ordenado ascendentemente.
Ejemplo:
Cantidad de estudiantes: 20
749 - 502 - 971 - 759 - 570 - 535 - 629 - 908 - 797 - 792 - 917 - 613 - 940 - 708 - 843
- 942 - 573 - 764 - 539 - 514 -
Primer elemento: 749
Elemento del centro: 917
0: 749 - 3: 759 - 7: 908 - 8: 797 - 9: 792 - 10: 917 - 14: 843 - 17: 764
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 SITUACIÓN PROBLEMATICA
1.1 Enunciado del problema
Una empresa automotriz tiene cinco agencias y cuenta con la información
acerca de las ventas mensuales en soles de automóviles logradas el año
pasado por cada una de éstas. A partir de esta información la empresa
construyó la siguiente matriz ventas:
Mes\Agencia agencia 1 agencia 2 agencia 3 agencia 4 agencia 5
enero 20 40 21 21 19
febrero 12 12 16 12 12
marzo 12 28 12 17 12
… … … … … …
diciembre 13 45 27 45 45
Se le solicita a usted que elabore un programa en C++ que permita lo siguiente:
2 REPASO TEÓRICO
A una matriz también se les denomina array, formación, alineación o vector
bidimensional.
2.1 Contenido
do {
cout << "Ingrese el número de filas : ";
cin >> cf;
} while (cf > 12 || cf <0);
matriz = new double*[cf];
do {
cout << "Ingrese el numer de columnas : ";
cin >> cc;
} while (cc > 10 || cc < 0);
for (size_t i = 0; i < cf; i++)
{
matriz[i] = new double[cc];
}
//Registrar la información de las ventas por mes de cada una de
las agencias
registrarDatos(cf, cc, matriz);
4 EJERCICIOS RESUELTOS
Programa
#include<iostream>
#include<ctime>
using namespace std;
using namespace System;
//Crear los espacios de memoria dinámica
//el parámetro en la función es **&matriz
void creaMemoriaMatriz(int &cf, int &cc, double **&matriz)
{
while(true) {
cout << "Ingrese el cantidad de conductores : ";
cin >> cf;
if (cf > 10 && cf < 20) break;
}
matriz = new double*[cf];
while (true) {
cout << "Ingrese el cantidad de dias : ";
cin >> cc;
if (cc > 3 && cc <= 6) break;
}
void main()
{
double **matriz;
int cf, cc;
creaMemoriaMatriz(cf, cc, matriz);
5 EJERCICIOS PROPUESTOS
Propuesto 1. Escriba una función que muestre los elementos de la
diagonal secundaria de una Matriz.
1 2 8 2 6
6 9 8 5 4
6 2 9 6 5
1 8 8 4 7
5 2 4 2 8
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
3 0 0 0 0
0 3 0 0 0
0 0 3 0 0
0 0 0 3 0
0 0 0 0 3
Propuesto 1 Escriba una función que compruebe si una matriz es la
Transpuesta de otra.
A=
2 6 7
1 9 0
3 5 6
AT=
2 1 3
6 9 5
7 0 6
1 -1 3
-1 2 4
3 4 7
Propuesto 4 Escriba una función que compruebe si una matriz tiene una
triangular superior.
1 6 -2
0 4 3
0 0 5
1 0 0
3 2 0
-8 4 9
1 2 3
x x x x x
x x x
x x x x x x x x x x x
x x x
x x x x x
4 5
x x x x
x x
x x x x x x
x x
x x x x
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos y elabore un mapa conceptual
de los aspectos más importantes del uso arreglos unidimensionales.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 EJERCICIOS RESUELTOS
1.1 Enunciado
Escribir un programa para almacenar los datos de un estudiante usando un
vector.
- dni
- nombre
- sexo
- fecha de nacimiento
- edad
- peso
- dirección
Ejemplo:
Índice 0 1 2 3 4
notas 14 12 20 14 9
Índice 0 1 2 3 4
códigos A Y N R W
Índice 0 1 2 3 4
nombres Juan Luis Maria Brigitte Julia
Sin embargo, en caso que se requiera de un vector que almacene datos de una
persona, se observa que estos son de diferente tipo
Indice 0 1 2 3 4
Dato 16702558 Juan Manuel M 25 68.56
2 EJERCICIOS RESUELTOS
2.1 Contenido
• Declaración de un struct
• Acceso a los elementos de un struct
• Structs anidados
• typedef: alias de un tipo struct
Manera 1 Manera 2
struct { struct Tarjeta {
long long num_tarjeta; long long num_tarjeta;
char tipo_cuenta; char tipo_cuenta;
float saldo; float saldo;
} cliente1, cliente2; };
void registraCuenta()
{
Tarjeta cliente1, cliente2;
}
La estructura no tiene nombre. El nombre de la estructura es Tarjeta. Se
Directamente se han creado los crea dos registros cliente1 y cliente2
registros cliente1 y cliente2
} AliasLibro;
El nombre del struct es Libro El alias de int es AliasEntero
El alias de Libro es AliasLibro AliasEntero nota1, nota2;
AliasLibro libro1, libro2;
Libro libro3;
Variable con el nombre del struct Variable con el alias del struct
typedef struct Persona typedef struct Persona
{ {
int Dni; int Dni;
string nombre; string nombre;
char sexo; char sexo;
string fecha; string fecha;
int edad; int edad;
double peso; double peso;
string direccion; string direccion;
}; } aliasPersona;
//Nombre del struct es Persona //Nombre del struct es Persona
Persona estudiante; Persona estudiante;
estudiante.Dni = 12154548; estudiante.Dni = 12154548;
Ejemplo 2: con typedef se crea una variable del tipo nombre o del alias.
void main()
{
Persona estudiante; //con el NOMBRE de la estructura
//datosPersona estudiante; //con el ALIAS de la estructura
estudiante.Dni = 12154548;
estudiante.nombre = "Albertina";
estudiante.sexo = 'F';
estudiante.fecha = "10/10/2005";
estudiante.edad = 13;
estudiante.peso = 50.2;
estudiante.direccion = "Av. Universitaria 1455";
//Impresión de datos
cout << "Datos del registro : " << endl;
cout<<"DNI\t: "<<estudiante.Dni << endl;
cout<<"Nombre\t: "<<estudiante.nombre<<endl;
cout<<"Sexo\t: "<<estudiante.sexo <<endl;
cout<<"Fecha\t: "<<estudiante.fecha<<endl;
cout<<"Edad\t: "<<estudiante.edad<<endl;
cout<<"Peso\t: "<<estudiante.peso<<endl;
cout<<"Dirección\t: "<<estudiante.direccion<<endl;
system("pause");
}
Versión 2, con funciones, variable registro por defecto
#include<iostream>
#include<string>
#include<ctime>
using namespace std;
struct
{
int Dni;
string nombre;
void cargaDatos()
{
estudiante.Dni = 12154548;
estudiante.nombre = "Albertina";
estudiante.sexo = 'F';
estudiante.fecha = "10/10/2005";
estudiante.edad = 13;
estudiante.peso = 50.2;
estudiante.direccion = "Av. Universitaria 1455";
}
void mostrarDatos()
{
cout << "Datos del registro : " << endl;
cout << "DNI\t: " << estudiante.Dni << endl;
cout << "Nombre\t: " << estudiante.nombre << endl;
cout << "Sexo\t: " << estudiante.sexo << endl;
cout << "Fecha\t: " << estudiante.fecha << endl;
cout << "Edad\t: " << estudiante.edad << endl;
cout << "Peso\t: " << estudiante.peso << endl;
cout << "Dirección\t: " << estudiante.direccion << endl;
}
void main()
{
cargaDatos();
mostrarDatos();
system("pause");
}
estudiante.Dni = 12154548;
estudiante.nombre = "Albertina";
estudiante.sexo = 'F';
estudiante.fecha = "10/10/2005";
estudiante.edad = 13;
estudiante.peso = 50.2;
estudiante.direccion = "Av. Universitaria 1455";
}
void mostrarDatos()
{
void main()
{
cargaDatos();
mostrarDatos();
system("pause");
}
//Persona estudiante;
void mostrarDatos()
{
void main()
{
cargaDatos();
mostrarDatos();
system("pause");
}
4 EJERCICIOS RESUELTOS
Resuelto 1. Crear un vector de registros, a cada registro le corresponde: dni,
nombre, sexo, fecha de nacimiento, edad, peso y dirección.
Análisis
¿Cómo almacenar una fila de datos (en una sola variable, como si fuera
un solo dato) en una posición de un vector estático o dinámico?
código
#include<iostream>
#include<string>
#include<ctime>
using namespace std;
struct persona
{
int Dni;
string nombre;
char sexo;
string fecha;
int edad;
double peso;
string direccion;
};
int cantidad=4;
//persona estudiante[4]; //En memoria estática
persona *estudiante = new persona[cantidad]; //En memoria dinámica
void cargaDatos()
{
for (int i = 0; i < cantidad; i++)
{
6Un vector de estructuras es una tabla en donde cada fila es un elemento, cada fila es
una estructura
}
}
void mostrarDatos()
{ cout << "Datos del vector de la fila : " << endl;
cout << "DNI\t " << "Nombre\t " << "Sexo\t " << "Fecha\t " <<
"Edad\t " << "Peso\t " << "Dirección\t " <<endl;
for (int i = 0; i < cantidad; i++)
{
cout << estudiante[i].Dni <<"\t " << estudiante[i].nombre
<< "\t " << estudiante[i].sexo << "\t " << estudiante[i].fecha << "\t
" << estudiante[i].edad << "\t " << estudiante[i].peso << "\t " <<
estudiante[i].direccion << endl;
}
}
void main()
{
cargaDatos();
mostrarDatos();
system("pause>NULL");
}
Análisis
typedef struct {
int x;
int y;
int color;
int vy;
int vx;
int tipo;
} Alien;
void gotoXY(int x, int y) {
Console::SetCursorPosition(x, y);
}
void cargaAliens(Alien *vec, int tamanio)
{ //Cargamos el vector con todos los aliens necesarios
Random ra;
for (int i = 0; i < tamanio; i++)
{
vec[i].x = ra.Next(2, 80);
vec[i].y = ra.Next(2, 30);
vec[i].color = ra.Next(1, 15);
vec[i].tipo = ra.Next(0, 9);
vec[i].vx = ra.Next(1, 3);
vec[i].vy = ra.Next(1, 3);
}
}
void dibujaAlien(Alien oa) {
gotoXY(oa.x, oa.y);
Console::ForegroundColor = ConsoleColor(oa.color);
cout << oa.tipo;
}
Resultado
7 5
5 EJERCICIOS PROPUESTOS
Propuesto 1. Elabore el programas en C++ que permita gestionar los
datos de stock de una tienda de comestibles, la información a coleccionar
será: nombre del producto, precio, cantidad en stock. La tienda dispone de
10 productos distintos. El programa debe ser capaz de:
• Buscar un alumno.
• Modificar su nota.
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos y elabore un mapa conceptual
de los aspectos más importantes del uso arreglos unidimensionales.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
1 SITUACION PROBLEMATICA
1.1 Enunciado
Simular el rebote (caída y regreso) indefinido de un balón. Use un objeto o
registro que represente el balón, cuyos campos sean las posiciones en el eje X y
Y de la consola.
En una matriz, con X recorremos las las filas y Y las columnas matriz(X, Y). En la
consola con X recorremos las columnas y con Y las filas consola(X, Y). En la
solución de este ejercicio, implementamos la función posicion(X, Y) en el que
intercambiamos la posición X por Y y Y por X, esto nos ayuda a pensar que la
consola es una matriz a la que estamos acostumbrados. Dicho intercambio se
realiza en la Console::SetCursorPosition (Y,X).
0 1 2 3 4 5 6 0 1 2 3 4 5 6
0 0
1 1
2 ☺ 2 ☺
3 3
4 4
5 5
2 REPASO TEÓRICO
2.1 Contenido
❖ Structs de variables en memoria estática (con y sin punteros)
❖ Structs compuestos por espacios en memoria dinámica
❖ Variable, registro u objetos en memoria estática y dinámica
struct Par {
int A, B;
Par() { A = 10; B = 20; }
~Par() {
A = 0; B = 0; //delete A; delete B;
}
void main() {
cout <<"A por defecto: "<<par1.A << endl;
par1.setA(500);
cout << "A asignado: "<<par1.getA() << endl;
cout << "B por defecto: "<<par1.getB();
system("pause>NULL");
}
struct Par {
string A;
float B;
//COnstructor
Par() {
A = "";
B = 0;
}
//Destructor
~Par() {
delete &A;
delete &B;
}
string getA() { return A; } // Devuelve el valor de A
int getB() { return B; } // Devuelve el valor de B
void setA(string *n) { A = *n; } // Asigna un nuevo valor a A
void setB(float *n) { B = *n; } // Asigna un nuevo valor a B
} par1;
void main() {
string *nombre = new string;
float *peso = new float;
struct Par {
//Los campos en memoria estática
string *A;
float *B;
//Los campos en memoria dinámica
//string *A=new string;
//float *B=new float;
//Constructor
Par() {
A = NULL;
B = NULL;
}
//Destructor
~Par() {
delete A;
delete B;
}
string getA() { return *A; } // Devuelve el valor de A
int getB() { return *B; } // Devuelve el valor de B
void setA(string *n) { A = n; } // Asigna un nuevo valor a A
void setB(float *n) { B = n; } // Asigna un nuevo valor a B
} par1;
cout << "Registro a1 en memoria estática con puntero: " << endl;
Par o1; //un objeto del struct Par
Par *a1;
a1 = &o1;
a1->setA(nombre);
a1->setB(peso);
cout << "\nNombre : " << a1->getA() << endl;
cout << "Peso: " << a1->getB() << endl;
Nombre: Maria
Peso: 15
Registro a1 en memoria estßtica con puntero:
Nombre: Maria
Peso: 15
Registro a2 en memoria dinámica:
Nombre: Maria
Peso: 15
void pintaObjeto(Balon o)
{
posicion(o.getPx(), o.getPy());
cout << o.getLetra();
}
void borroObjeto(Balon o)
{
posicion(o.px, o.py);
cout << " ";
}
void main()
{
Random a;
int px = a.Next(10, 20);
int py = a.Next(5, 50);
int direccion = 1;
Balon balon1;
balon1.setPx(px);
balon1.setPy(py);
balon1.setLetra(char(3));
balon1.setVelocidad(3);
pintaObjeto(balon1);
while (true)
{ //borrar
borroObjeto(balon1);
//mover
if (balon1.px < 4 || balon1.px > 20) direccion = -1 * direccion;
balon1.px += balon1.velocidad*direccion;
//pintar
pintaObjeto(balon1);
_sleep(60);
}
system("pause>>NULL");
}
4 PROBLEMAS RESUELTOS
Resuelto 1. Escriba un progtam para gestionar un vector de registros de
tamaño t predefinido (agregar, imprimir y eliminar un registro), cada
registro u pbjeto representa una nave con posición en el eje X y Y. Use
las funciones que permitan gestionar cada campo del struct
correspondiente.
struct Nave {
int px = 20;
int py = 13;
};
void main()
{
int t = 5;
cout << "Cantidad de naves: "; cin >> t;
Nave *naves = new Nave[t];
//agrega objetos
agregaObjetoLista(naves, t);
cout << endl;
pintaListaObjeto(naves, t);
//quITA ELEMENTO
int pos; //la ultima posicion es t-1
cout << "\nPosicion del elemento a quitar, menor que " << t << " : "; cin
>> pos;
if (pos < t)
{
quitaObjetoLista(naves, pos, t);
}
cout << endl;
pintaListaObjeto(naves, t);
system("pause>>NULL");
}
10 15
15 16
10 18
10 15
15 16
Resuelto 2. Caída y regreso (rebote) de dos naves.
#include<iostream>
using namespace std;
using namespace System;
void pintaObjeto(Nave o)
{
posicion(o.px, o.py);
Console::ForegroundColor = ConsoleColor(o.color);
cout << o.letra;
}
void borroObjeto(Nave o)
{
posicion(o.px, o.py);
Console::ForegroundColor = ConsoleColor(o.color);
cout << " ";
}
void main()
{
Random a;
int px1 = a.Next(10, 20), px2 = a.Next(10, 20);
int py1 = a.Next(5, 50), py2 = a.Next(5, 50);
int color1 = a.Next(1, 15), color2 = a.Next(1, 15);
int direccion1 = 1, direccion2 = 1;
Nave nave1, nave2;
nave1.px = px1;
nave1.px = px2;
nave1.py = py2;
nave1.letra = char(2019);
nave1.velocidad = 1;
nave1.color = color2;
pintaObjeto(nave1);
pintaObjeto(nave2);
while (true)
{
borroObjeto(nave1);//borrar
borroObjeto(nave2);//borrar
//mover
if (nave1.px < 4 || nave1.px > 20) direccion1 = -1* direccion1;
nave1.px += nave1.velocidad*direccion1;
if (nave2.px < 4 || nave2.px > 20) direccion2 = -1* direccion2;
nave2.px += nave2.velocidad*direccion2;
//pintar
pintaObjeto(nave1);
pintaObjeto(nave2);
_sleep(20);
}
system("pause>>NULL");
}
void pintaObjeto(Nave o)
{
posicion(o.X, o.Y);
cout << o.letra;
}
void borroObjeto(Nave o)
void main()
{
int t = 0;
Nave *naves; naves = NULL;
//agrega objetos
while (true)
{
Nave on;
cout << "\nX: "; cin >> on.X;
if (on.X == 0) break;
cout << "Y: "; cin >> on.Y;
cout << "Letra: "; cin >> on.letra;
cout << "Velocidad: "; cin >> on.velocidad;
naves = agregaObjetoLista(naves, on, t);
}
pintaListaObjeto(naves, t);
//quita ELEMENTO
int pos; //la última posición es t-1
cout << "\nPosicion del elemento a quitar, menor que " << t << " : "; cin
>> pos;
if (pos < t)
system("pause>>NULL");
}
Resultado
X: 10
Y: 5
Letra: 2
Velocidad: 2
X: 15
Y: 16
Letra: 5
Velocidad: 2
X: 15
Y: 15
Letra: 6
Velocidad: 16
X: 0
Lista de objetos: 2 5 6
Posicion del elemento a quitar, menor que 3: 2
Lista de objetos: 2 5
5 EJERCICIOS PROPUESTOS
Propuesto 1. Caída y regreso (rebote) de n objetos o registros, donde n
mayor de 10 y menor de 30.
Propuesto 2. Generar n objetos dentro las 10 primeras filas en movimiento
horizontal de ida y vuelta, debajo de la linea 10 debe moverse una
nave.
Propuesto 3. Generar n objetos dentro de las 10 primeras filas en
movimiento horizontal de ida y vuelta, debajo de la línea 10 debe
moverse una nave y disparar cierta cantidad de balas. El programa
finaliza cuando se hayan disparado todas las balas.
Propuesto 4. Generar n objetos sobre las 10 primeras filas en movimiento
horizontal de ida y vuelta, debajo de la línea 10 debe moverse una
nave y disparar cierta cantidad de balas. El programa finaliza cuando
se hayan disparado todas las balas o todos los objetos hayan sido
alcanzados.
Propuesto 5. Generar n objetos que represenan alienígenas sobre las 10
primeras filas en movimiento horizontal de ida y vuelta, los
estraterrestres disparan a una nave. Debajo de la línea 10 debe
moverse la nave y disparar cierta cantidad de balas para repeler el
ataque. El programa finaliza cuando se hayan disparado todas las
6 INVESTIGACIÓN
Resuelva cada uno de los ejercicios propuestos y elabore un mapa conceptual
de los aspectos más importantes del uso de funciones dentro de los structs.
7 EVALUACIÓN
Esta práctica dirigida no será evaluada
void main()
{
Console::SetWindowSize(60, 30);
int x = 10; //inicio en x
int y = 17; //inicio en y
posicion(x, y);
cout << "*";
while (true)
{
x++;
posicion(x, y);
cout << "*";
_sleep(100);
}
system("pause>>NULL");
}
void main()
{
Console::SetWindowSize(60, 30);
int x = 10; //inicio en x
int y = 17; //inicio en y
posicion(x, y);
cout << "*";
while (true)
{ //borra
posicion(x, y);
cout << " ";
//mueve
x++;
posicion(x, y);
//pinta
cout << "*";
void main()
{
Console::SetWindowSize(60, 30);
int x = 10; //inicio en x
int y = 17; //inicio en y
pintaBala(x, y);
while (true)
{
borraBala(x, y);
x++;
pintaBala(x, y);
_sleep(100);
}
system("pause>>NULL");
}
Resuelto 4. Rebote de un objeto v1
#include <iostream>
#include <conio.h>
using namespace System;
using namespace std;
void posicion(int &x, int &y)
{
Console::SetCursorPosition(y, x);
}
void borraBala(int &x, int &y)
{
posicion(x, y);
cout << " ";
}
void main()
{
Console::SetWindowSize(60, 30);
int x = 10; //inicio en x
int y = 17; //inicio en y
pintaBala(x, y);
while (true)
{
borraBala(x, y);
x++;
if (x == 25) x = 0;
pintaBala(x, y);
_sleep(100);
}
system("pause>>NULL");
}
void main()
{
Console::SetWindowSize(60, 30);
int x = 10; //inicio en x
int y = 17; //inicio en y
int f = 1; //controla la dirección del objeto adelante atrás
pintaBala(x, y);
while (true)
{
borraBala(x, y);
if (x < 3 || x > 23) f = -1 * f;
x += f;
pintaBala(x, y);
_sleep(50);
}
system("pause>NULL");
#include<iostream>
using namespace std;
using namespace System;
void pintaObjeto(Nave o)
{
posicion(o.px, o.py);
cout << o.letra;
}
void borroObjeto(Nave o)
{
posicion(o.px, o.py);
cout << " ";
}
void main()
{
Random a;
int px = a.Next(10, 20);
int py = a.Next(5, 50);
int direccion = 1;
Nave nave1;
nave1.px = px;
nave1.py = py;
nave1.letra = char(3);
nave1.velocidad = 3;
pintaObjeto(nave1);
while (true)
{
borroObjeto(nave1);//borrar
//mover
if (nave1.px < 4 || nave1.px > 20) direccion = -1* direccion;
nave1.px += nave1.velocidad*direccion;
pintaObjeto(nave1); //pintar
_sleep(60);
}
system("pause>>NULL");
}
void pintaObjeto(Nave o)
{
posicion(o.px, o.py);
Console::ForegroundColor = ConsoleColor(o.color);
cout << o.letra;
}
void borroObjeto(Nave o)
{
posicion(o.px, o.py);
Console::ForegroundColor = ConsoleColor(o.color);
cout << " ";
}
void main()
{
Random a;
int px1 = a.Next(10, 20), px2 = a.Next(10, 20);
int py1 = a.Next(5, 50), py2 = a.Next(5, 50);
int color1 = a.Next(1, 15), color2 = a.Next(1, 15);
int direccion1 = 1, direccion2 = 1;
Nave nave1, nave2;
nave1.px = px1;
nave1.py = py1;
nave1.letra = char(3);
nave1.velocidad = 4;
nave1.velocidad = color1;
nave1.px = px2;
nave1.py = py2;
nave1.letra = char(2019);
nave1.velocidad = 1;
nave1.color = color2;
pintaObjeto(nave1);
pintaObjeto(nave2);
while (true)
{
borroObjeto(nave1);//borrar
borroObjeto(nave2);
//mover
if (nave1.px < 4 || nave1.px > 20) direccion1 = -1* direccion1;
nave1.px += nave1.velocidad*direccion1;
//pintar
pintaObjeto(nave1);
pintaObjeto(nave2);
_sleep(20);
}
system("pause>>NULL");
}
Ejemplo ilustrativo
Ubicación : B:\cmas\
Ejemplo ilustrativo
Nombre : suma.cpp
Ubicación : B:\cmas\
Ejemplo ilustrativo
Nombre : pryResta
Ubicación : B:\cmas\
Ejemplo ilustrativo
Nombre : resta.cpp
Ubicación : B:\cmas\
Operaciones en vectores
Las operaciones básicas en un arreglo unidimensional son: imprimir los datos, hallar el
menor o el mayor, hallar promedio, buscar un dato, ordenar los datos, entre otras
operaciones que las podemos implementar en un lenguaje usando funciones o
procedimientos.
En cada uno de los parámetros de las funciones tenemos Vector[ ] esto no varía si lo cambiamos por *Vector, en ambos
casos lo que se recibe es la dirección de un vector, este vector puede estar en memoria dinámica o estática.
#include<iostream>
#include<string>
#include<ctime>
using namespace std;
1.1 Llena vector con números aleatorios
void llenaVector(int &tam, double Vector[])
{
srand(time(NULL));
for (int i = 0; i < tam; i++)
{
Vector[i] = 10 + rand() % 11;
}
}
1.2 Imprime datos del vector
void imprimeDatos(int &tam, double Vector[])
{
//Imprimiendo datos
for (int i = 0; i < tam; i++)
{
cout << Vector[i] << " - ";
}
}
1.3 Halla el promedio en un vector
double calculaPromedio(int &tam, double Vector[])
{
double suma = 0.0;
for (int i = 0; i < tam; i++)
{
suma = suma + Vector[i];
}
return suma / tam;
}
1.4 Halla el menor de un vector
double hallaMenor(int &tam, double Vector[])
{
}
1.15 Uso de las funciones
//Función principal
void main()
{
setlocale(LC_ALL, "spanish");
int cf, cc;
do {
cout << "Ingrese cantidad de filas : ";
cin >> cf;
} while (cf > 10 || cf < 3);
int **matriz = new int*[cf]; //definimos la matriz
do {
cout << "Ingrese cantidad de columnas : ";
cin >> cc;
} while (cc > 10 || cc < 3);
}
}
2.8 Imprimimos los registros del vector
void muestraDatos()
{
cout << "Datos del vector de la fila : " << endl;
cout << "DNI\t " << "Nombre\t " << "Sexo\t " << "Fecha\t " <<
"Edad\t " << "Peso\t " << "Dirección\t " << endl;
for (int i = 0; i < cantidad; i++)
{
cout << estudiante[i].Dni << "\t " << estudiante[i].nombre
<< "\t " << estudiante[i].sexo << "\t " << estudiante[i].fecha << "\t "
<< estudiante[i].edad << "\t " << estudiante[i].peso << "\t " <<
estudiante[i].direccion << endl;
}
}
2.9 Imprimimos el promedio de peso
void muestraPromedioPeso()
{
cout << "Promedio de peso : " << endl;
int sumaPeso=0;
for (int i = 0; i < cantidad; i++)
{
sumaPeso += estudiante[i].peso;
}
cout << "Promedio: "<<(double)sumaPeso / cantidad<<endl;
}
Nos proponemos:
7 Si se envía el valor que está en un espacio de memoria, éste se recibe por valor
8Si se envía el valor que está en un espacio de memoria, éste se recibe por
dirección (referencia)
9 Si se envía la dirección de un espacio de memoria, éste se recibe por
indirección (puntero)
void recibeDatos(Persona p)
{
p.dni = 12451284;
p.nombre = "Juan";
p.peso = 60.78;
cout << p.dni<<endl;
cout << p.nombre<<endl;
cout << p.peso<<endl;
}
En la zona estática por referencia (dirección)
#include<iostream> void main()
#include<string> {
using namespace std; Persona persona;
typedef struct Persona { recibeDatos(persona);
int dni; cout << persona.dni<<endl;
string nombre; cout << persona.nombre<<endl;
double peso; cout << persona.peso<<endl;
}; system("pause");
void recibeDatos(Persona &p) }
{
p.dni = 12451284;
p.nombre = "Juan";
No se puede pasar un vector desde la zona estática por referencia (dirección), no compila
porque en C++ no puede existir un vector de referencias.
#include<iostream> void main()
using namespace std; {
void recibeDatos(int &vnum[]) int num[] = {10,20,30};
{ recibeDatos(num);
int suma; cout << num[2] << endl;
suma = vnum[2] + 50; cout << num<<endl;
cout << suma<<endl; system("pause");
vnum[2] = 200; }
}
Declarar variables
Definir n,u Como Entero
Dimension Prec[5], Cant[4,5]
Definir apellido Como Caracter
Secuencial
Proceso ejemploSecuencial
Definir amigo Como Caracter
Escribir "Escriba el nombre"
Leer amigo
Escribir "Hola apreciado ", amigo
FinProceso
Selección simpe
Proceso ejemploSeleccionSimple
Definir edad Como Entero
Escribir "Dame tu edad "
Leer edad
si edad<18 Entonces
Escribir "Usted es menor de edad "
FinSi
FinProceso
Selección doble
Proceso ejemploSeleccionDoble
Definir a, b Como Entero
Escribir "Dame el valor de a "
Leer a
Escribir "Dame el valor de b "
Leer b
si a>b Entonces
Escribir "El número mayor es ", a
SiNo
Escribir "El número mayor es ", b
FinSi
FinProceso
Selección múltiple
Proceso ejemploSeleccionMultiple
Definir numeroDia Como Entero
Escribir "Escriba un número entre 1 y 7";
Leer numeroDia
Segun numeroDia Hacer
1:
Escribir "Is Friday"
2:
Proceso ecuacionCuadratica
Definir a, b, c, discriminante, x1, x2 Como Real
Escribir "Ingrese los coeficiente a: "
Leer a
Escribir "Ingrese los coeficiente b: "
Leer b
Escribir "Ingrese los coeficiente c: "
Leer c;
discriminante = b^2-4 * a * c;
x1 = hallaValor(a, b, discriminante);
x2 = hallaValor(a, b, -discriminante);
Proceso ecuacionCuadratica
Definir a, b, c, discriminante, x1, x2 Como Real
Escribir "Ingrese los coeficiente a: "
Leer a
Escribir "Ingrese los coeficiente b: "
Leer b
Escribir "Ingrese los coeficiente c: "
Leer c;
discriminante = b^2-4 * a * c;
discriminante= rc(discriminante)
Escribir "La primera raiz es: "
hallaValor(a, b, discriminante);
Escribir "La segunda raiz es: "
hallaValor(a, b, -discriminante);
FinProceso
Expresiones coloquiales
EXPRESIÓN SIGNIFICADO
X es Y X=Y
x es igual a Y X=Y
X es distinto de Y X<>Y
X es CERO X=0
X es POSITIVO X>0
X es NEGATIVO X<0
X es PAR X MOD 2 = 0
X es IMPAR X MOD 2 = 1
X es MULTIPLO de Y X MOD Y = 0
X es DIVISIBLE por Y X MOD Y = 0
Operadores
Operador Significado Ejemplo
Relacionales
> Mayor que 3>2
< Menor que 'ABC'<'abc'
Código
#include<iostream>
#include<string>
#include<Windows.h>
#include<conio.h>
int dxNave = 3;
int dyNave = 3;
int dybala = 2; //salto de la bala
typedef struct {
int xbala;
int ybala;
int color;
int velocidad; //sleep para la bala
}Bala;
}
void mueveNaveI(int &x, int &y)
{
if (x > 5 ) x = x - dxNave;
}
void mueveNaveD(int &x, int &y)
{
if (x < 60) x = x + dxNave;
}
void mueveNaveT(int &x, int &y)
{
if (y> 5) y = y - dyNave;
}
void mueveNaveA(int &x, int &y)
{
if (y < 30) y = y + dyNave;
}
void pintaNave(int x, int y)
{
gotoXY(x, y);
Console::ForegroundColor = ConsoleColor((int)10);
cout << "N";
}
void main()
{
int tecla;
pintaMarco(){ pintaAliens(){
} }
generaAliens(){ borraNave(){
} }
pintaAlien(){ saltaNaveI(){
} x--;
} }
saltaNaveD(){ pintaNave(){
x++;
si(tecla==’I’) entonces
saltaNaveD();
}
si (tecla==’D’) entonces
trasladaNave()
saltaNaveD();
{
pintaNave();
borraNave();
}
principal(){
pintaMarco();
Mientras
trasladaNave();
Fin mientras
¿?
Código
#include<iostream>
#include <stdlib.h>
#include<conio.h>
#include<time.h>
void main() {
srand(time(NULL));
int x;
int y;
do {
cout << "digite la posicion x de la nave : ";
cin >> x;
} while (!(x > 3 && x < 27));
do {
cout << "digite la posicion y de la nave : ";
cin >> y;
} while (!(y > 15 && y < 27));
//matriz de fondo
int **matriz = new int *[FILAS];
for (int i = 0; i < FILAS; i++)
{
matriz[i] = new int[COLUMNAS];
}
Console::Clear();
int pif = 5;
cargaMatriz(matriz);
pintaMatriz(matriz);
pintaAlien(pif, 1);
pintaAlien(pif, 2);
pintaAlien(pif, 1);
pintaNave(x,y);
while (1) {
Console::CursorVisible = false;
borraNave(x,y);
if (_kbhit())
getch();
}
PROPUESTO
Propuesto 1. Simular disparos (algunos en forma vertical otros en
diagonal) desde una nave, las balas disparadas tienen diferentes colores (se
sugiere que los colores sean asignados a cada bala aleatoriamente). La
nave de moverse (trasladarse) de izquierda a derecha y viceversa, cuando
se pulse la tecla tab debe simular el disparo. La nave solo cuenta con cierta
cantidad de balas, es decir cuando se terminen las balas ya no podrá
disparar.