Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN
Autores
© ESCOBEDO BAILÓN, Frank Edmundo
© RUIZ CARRASCO, Kathy Giannina
© VEGA HUERTA, Hugo Froilán
© CHÁVEZ HERRERA, Carlos Ernesto
© BENITO PACHECO, Oscar
Editado por:
ESCOBEDO BAILÓN, Frank Edmundo
Dirección: Carlos Alayza Roel 2392 Dpto. 104
Urb. Fundo Lobatón
Lima – Lima – Lince
Perú
CAPÍTULO I. ................................................................................. 8
CAPÍTULO II............................................................................... 33
2. ARREGLOS ............................................................................ 33
CAPÍTULO V ............................................................................... 91
5. ESTRUCTURAS ...................................................................... 91
CAPÍTULO VI .............................................................................. 98
6. UNIONES .............................................................................. 98
7
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO I.
1. ESTRUCTURAS LÓGICAS
Definición:
La estructura secuencial está formada por una secuencia de instrucciones
que se ejecutan en orden una a continuación de la otra. Cada una de las
instrucciones están separadas por el carácter punto y coma. No obstante,
en algunos casos nos interesará agrupar en un bloque una serie de
instrucciones, como veremos al explicar las estructuras de selección y de
iteración. (TUTORIOZ, 2020)
El bloque de sentencias se define por el carácter llave de apertura ( { ) para
marcar el inicio del mismo, y el carácter llave de cierre ( } ) para marcar el
final.(TUTORIOZ, 2020)
8
FUNDAMENTOS DE PROGRAMACIÓN
int main()
float a,b, resta;
cout<<" Digite el valor de a: "; cin>>a;
cout<<" Digite el valor de b: "; cin>>b;
resta = a - b;
cout<<"\nLa resta es: "<<resta<<endl;
return 0;
}
9
FUNDAMENTOS DE PROGRAMACIÓN
10
FUNDAMENTOS DE PROGRAMACIÓN
Definición:
Joyanes y Zahonero (2007) dice que “Las sentencias condicionales son las
que nos permitirán ejecutar un bloque de código o no, o ejecutar un bloque
de código u otro” (p. 142)
Sentencias If - Else
Para Joyanes y Zahonero (2007) la sentencia condicional if (o “si”) nos
permite ejecutar un bloque de código sólo si se cumple una condición. Caso
contrario se ejecuta el bloque de código contenido luego de la condición
else. La sintaxis es:
if (condicion){
bloque_de_codigo_1;
}else{
bloque_de_codigo_2;
}
11
FUNDAMENTOS DE PROGRAMACIÓN
}
return 0;
}
12
FUNDAMENTOS DE PROGRAMACIÓN
13
FUNDAMENTOS DE PROGRAMACIÓN
Sentencias Switch
Joyanes y Zahonero (2007) afirma que “la sentencia switch nos permite,
según el valor de una variable, ejecutar un código, u otro, u otro por
defecto, de una manera muy clara” (p. 146). Su sintaxis es:
switch (variable){
case valor_1: bloque de codigo 1
break;
case valor_2: bloque de codigo 2
break;
...
case valor_n: bloque de codigo n
break;
}
14
FUNDAMENTOS DE PROGRAMACIÓN
15
FUNDAMENTOS DE PROGRAMACIÓN
return 0;
}
16
FUNDAMENTOS DE PROGRAMACIÓN
}
case 6:{
cout << "El mes es junio" << endl;
break;
}
case 7:{
cout << "El mes es julio" << endl;
break;
}
case 8:{
cout << "El mes es agosto" << endl;
break;
}
case 9:{
cout << "El mes es septiembre" << endl;
break;
}
case 10:{
cout << "El mes es octubre" << endl;
break;
}
case 11:{
cout << "El mes es noviembre" << endl;
break;
}
case 12:{
cout << "El mes es diciembre" << endl;
break;
}
default:{
cout << "La opcion ingresada no existe" << endl;
17
FUNDAMENTOS DE PROGRAMACIÓN
break;
}
}
return 0;
}
18
FUNDAMENTOS DE PROGRAMACIÓN
}
case 5:{
cout << "Ingenieria Ambiental” << endl;
break;
default:{
cout << "La opcion ingresada no existe" << endl;
break;
}
}
return 0;
}
19
FUNDAMENTOS DE PROGRAMACIÓN
break;
}
case 4:{
cout << "Jueves" << endl;
break;
}
case 5:{
cout << "Viernes" << endl;
break;
}
case 6:{
cout << "Sabado" << endl;
break;
}
case 7:{
cout << "Domingo" << endl;
break;
}
default:{
cout << "La opcion ingresada no existe" << endl;
break;
}
}
return 0;
}
20
FUNDAMENTOS DE PROGRAMACIÓN
int numero;
cout << "Ingrese el codigo del alimento: ";
cin >> numero;
switch (numero){
case 1:{
cout << "Desayuno" << endl;
break;
}
case 2:{
cout << "Almuerzo" << endl;
break;
}
case 3:{
cout << "Cena" << endl;
break;
}
default:{
cout << "La opcion ingresada no existe" << endl;
break;
}
}
return 0;
}
Definición:
Las estructuras repetitivas o iterativas son aquellas en las que las acciones
se ejecutan un número determinado de veces y dependen de un valor
predefinido o el cumplimiento de una determinada acción.
Se llaman problemas repetitivos o cíclicos a aquellos en cuya solución es
necesario utilizar un mismo conjunto de acciones que puedan ejecutar una
21
FUNDAMENTOS DE PROGRAMACIÓN
cantidad específica de veces. Esa cantidad puede ser fija o puede ser
variable.
En general hay 3 formas diferentes de instrucciones de repetición, todas
las cuales son proporcionadas en C++:
1. While
2. For
3. do while
22
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 1
Haremos un programa de un bucle que funcionará hasta que la palabra
cuenta sea menor o igual a 10.
Si nosotros no le asignamos un valor a cuenta este bucle será infinito, sin
embargo, si cuenta inicia con un valor mayor a 10 el bucle nunca sucederá
por eso en el código asignamos el valor de 1.
Y para que el ciclo no lea de nuevo el valor de cuenta que es 1 este debe ir
en aumento sino el bucle sería infinito. En este caso aumentaremos el valor
de cuenta en uno en código sería cuenta=cuenta+1 o cuenta++.
#include <iostream>
using namespace std;
int main()
{
int cuenta;
cuenta=1; //inicializa cuenta
while (cuenta<=10)
{
cout<<cuenta<<" ";
23
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 2
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int maxnums=4;
int cuenta;
double num;
cout<< "\nEste programa le pedirá que introduzca "
<<maxnums<<"numeros.\n";
cuenta=1;
while(cuenta<=maxnums){
cout<<"\n Introduzca un número:";
cin>>num;
cout<<"El numero intriducido es "<<num;
cuenta++;
}
24
FUNDAMENTOS DE PROGRAMACIÓN
cout<<endl;
return 0;
}
Resultado
Esta instrucción realiza las mismas funciones que la instrucción while, pero
usa una forma diferente. En muchas situaciones, en especial aquellas que
usan una condición de cuenta fija, el formato de la instrucción for es más
fácil de usar que su instrucción while equivalente.
La sintaxis de la instrucción for es
25
FUNDAMENTOS DE PROGRAMACIÓN
26
FUNDAMENTOS DE PROGRAMACIÓN
27
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 6. En el siguiente caso todas las expresiones están dentro del for
#include <iostream>
using namespace std;
int main()
{
int cuenta;
for(cuenta=1;cuenta<=10;cout<<cuenta<<" ",cuenta++){
}
return 0;
}
Ciclos Anidados
Se llama ciclo anidado a situaciones donde un ciclo está dentro de otro ciclo
28
FUNDAMENTOS DE PROGRAMACIÓN
El for de j significa que este terminará hasta que llegue a su límite que sería
4 una vez termine el ciclo de j se termina el ciclo de i y vuelve a comenzar
el siguiente ciclo de i.
Los ciclos do-while son una estructura de control cíclica, nos permiten
ejecutar una o varias líneas de forma repetitiva sin necesidad de tener un
29
FUNDAMENTOS DE PROGRAMACIÓN
Verificaciones de validez
30
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 8
#include <iostream>
using namespace std;
int main()
{
int num_id;
cout<<"Introduzca un numero entre el 1000 y el 2999"<<endl;
do {
cout<< "\nIntroduzca un numero de identificacion: ";
cin>>num_id;
}
while (num_id < 1000 || num_id > 2999);
return 0;
}
31
FUNDAMENTOS DE PROGRAMACIÓN
32
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO II.
2. ARREGLOS
Definición:
Un arreglo unidimensional es un tipo de datos estructurado que está
formado por una colección finita y ordenada de datos del mismo tipo. Es la
estructura natural para modelar listas de elementos iguales. Los datos que
se guarden en los arreglos todos deben ser del mismo tipo.
El tipo de acceso a los arreglos unidimensionales es el acceso directo, es
decir, podemos acceder a cualquier elemento del arreglo sin tener que
consultar a elementos anteriores o posteriores, esto mediante el uso de un
índice para cada elemento del arreglo que nos da su posición relativa.
Para implementar arreglos unidimensionales se debe reservar espacio en
memoria.
Los arreglos nos permiten hacer un conjunto de operaciones para manipular
los datos guardados en ellos, estas operaciones son: ordenar, buscar,
insertar, eliminar, modificar entre otras.
Representación de memoria
Los arreglos guardan en memoria la cantidad de espacios que se le indican
en la declaración.
33
FUNDAMENTOS DE PROGRAMACIÓN
X [1]
34
x[2]
22
X [3]
39
X [4]
63
X [5]
72
Ejemplo 2.
salarios= array [1…x] of real;
nombre_trabajador=array[1..x] of string;
Nota: El tipo de dato del arreglo puede ser: integer, real, boolean, string
etc.
Variables tipo array
Var
sueldo:salarios;
nombre:nombre_trabajador;
34
FUNDAMENTOS DE PROGRAMACIÓN
Se han hecho programas que suman una cantidad de números usando dos
variables, una para leer cada número y otra para acumular la suma. Este
enfoque tiene la desventaja de que se pierden los valores de los sumandos.
El uso de arreglos permite calcular la suma de los números con una
cantidad mínima de código y a la vez conservar cada valor, como muestra
el siguiente programa completo: (LP: Pascal)
Program SumaN;
Uses
35
FUNDAMENTOS DE PROGRAMACIÓN
Crt;
Cons
n = 5;
Var
nums: Array[1..n] Of Integer;
s, i: Integer;
Begin
For i:=1 To n Do
Begin
Write('Escriba el número: ');
ReadLn(nums[i]);
s := s + nums[i];
End;
WriteLn('La suma es: ', s);
Nótese el uso de una constante para marcar el tamaño del arreglo; dicha
constante, también sirve para controlar el For. De este modo, sólo se hace
necesario cambiar un número para adecuar el programa a la escala
apropiada.
PROGRAM calificaciones;
USES CRT;
type
listacalificaciones = array[1..n]of real;
VAR
notas:listacalificaciones;
media,suma:real;
num,i:integer;
36
FUNDAMENTOS DE PROGRAMACIÓN
BEGIN
WRITELN ('INTRODUZCA la cantidad de notas a procesar');
READLN (NUM);
Suma: =0;
37
FUNDAMENTOS DE PROGRAMACIÓN
BEGIN
for i:=1 to 11 do
begin
WRITELN('Introduzca el numero ' , i, ' a dividir');
readln(num[i]);
numero:=num[i]/3;
write('los número resultantes de la división son:' ,numero:2:2);
readln;
end;
38
FUNDAMENTOS DE PROGRAMACIÓN
return 0;
}
39
FUNDAMENTOS DE PROGRAMACIÓN
40
FUNDAMENTOS DE PROGRAMACIÓN
Definición:
Una cadena en C++ es un conjunto de caracteres (valores de tipo “char”)
terminados con el carácter nulo. Se almacenan internamente en posiciones
consecutivas de memoria.
Estas estructuras reciben un tratamiento especial. Esto debido a su gran
utilidad y su uso continuo. Una cadena se define de la siguiente forma:
Función Strlen
En esta operación participa la función Strlen, la cual devuelve en un valor
entero, la longitud de una cadena de caracteres.
41
FUNDAMENTOS DE PROGRAMACIÓN
42
FUNDAMENTOS DE PROGRAMACIÓN
cin.getline(caracter,50,'\n');
//Calcula la longitud de la cadena y si es mayor a 15
if(strlen(caracter)>15){
cout<<caracter;
}
//En caso la cadena no supere los 15 caracteres
else{
cout<<"La cadena no supera los 15 caracteres";
}
getch();
return 0;
}
43
FUNDAMENTOS DE PROGRAMACIÓN
}
getch();
return 0;
}
44
FUNDAMENTOS DE PROGRAMACIÓN
45
FUNDAMENTOS DE PROGRAMACIÓN
cout<<longitud<<","<<longitud1<<endl;
cout<<"Estas cadenas tienen igual longitud"<<endl;
//Se mostrara a la cadena carácter por caracter
for(int i=0;i<longitud;i++){
cout<<caracter[i];
}
cout<<" ";
//Se mostrará a la otra cadena carácter por carácter
for(int j=0;j<longitud1;j++){
cout<<caracter1[j];
}
}
//En caso de que las cadenas presenten longitudes diferentes
else {
cout<<longitud<<","<<longitud1<<endl;
cout<<"las cadenas tienen longitudes diferentes";
}
getch();
return 0;
}
Función strcmp
Está dada por la función strcmp(),la cual recibe dos parámetros que serán
dos string, y si son iguales nos devolverá un 0, y si no son iguales devolverá
cualquier otro número.
46
FUNDAMENTOS DE PROGRAMACIÓN
int main(){
//Se declaran las cadenas
char palabra1[]= "algoritmo";
char palabra2[]= "algoritmo";
//Se compara y analiza si las cadenas son iguales
if(strcmp(palabra1,palabra2)==0){
cout<<"Ambas cadenas son iguales";
}
getch();
return 0;
}
Ejemplo 2.
También se puede calcular la ubicación alfabética de una cadena.
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int main(){
//Se declaran las cadenas
char palabra1[]= "algoritmo";
char palabra2[]= "programacion";
//Se analiza si la primera cadena es mayor o menor
//alfabeticamente
if(strcmp(palabra1,palabra2)<0){
cout<<palabra1<<" esta alfabeticamente antes de
"<<palabra2;
}
getch();
return 0;
}
47
FUNDAMENTOS DE PROGRAMACIÓN
48
FUNDAMENTOS DE PROGRAMACIÓN
#include<string.h>
using namespace std;
int main(){
//string de 20 caracteres
char cadena1[20],cadena2[20];
//variables enteras
int longitud1, longitud2;
cout<<"Ingrese una cadena: ";
cin.getline(cadena1,20,'\n');
cout<<"Ingrese otra cadena: ";
cin.getline(cadena2,20,'\n');
//Se da la longitud a una variable entera
longitud1= strlen(cadena1);
longitud2= strlen(cadena2);
//Compara si las cadenas son iguales
if(strcmp(cadena1,cadena2)==0){
cout<<"Ambas cadenas son iguales alfabeticamente y en
longitud"; }
//Compara si la cadena1 es mayor a cadena2
else if(strcmp(cadena1,cadena2)>0){
cout<<cadena1<<" es mayor alfabeticamente y su longitud
es "<<longitud1;
}
//Se compara si cadena2 es mayor a cadena1
else{
cout<<cadena2<<" es mayor alfabeticamente y su longitud
es "<<longitud2;
}
getch();
return 0;
}
49
FUNDAMENTOS DE PROGRAMACIÓN
50
FUNDAMENTOS DE PROGRAMACIÓN
Función strcat
Otra de las funciones más utilizadas, esta función se utiliza para concatenar
cadenas; es decir, juntar las cadenas.
51
FUNDAMENTOS DE PROGRAMACIÓN
//Ingresar un nombre
cout<<"Ingrese un nombre: ";
cin.getline(cad2,20,'\n');
//funcion strcat añadire el nombre al final de la primera cadena
strcat(cad1,cad2);
//Se mostrar la frase completa
cout<<"Frase: "<<cad1<<endl;
//Mostraria: Hola que tal (Nombre que elegiste)
getch();
return 0;
}
Ejemplo 2.
Se tiene los nombres y apellidos de una persona. Se deberán juntar tal que
se muestre sus apellidos y nombres, empezando por los apellidos.
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int main(){
//Se declara los apellidos y nombres:
char Apellidos[] = "Perez Ortega ";
char Nombres[]= "Jose Carlos";
//uso de la funcion strcat, la cual colocara
//los nombres despues de los apellidos
strcat(Apellidos, Nombres);
//Resultado final
cout<<"Nombres y Apellidos: "<<Apellidos<<endl;
//Nombres y Apellidos: Perez Ortega Jose Carlos
getch();
return 0;
52
FUNDAMENTOS DE PROGRAMACIÓN
53
FUNDAMENTOS DE PROGRAMACIÓN
getch();
return 0;
}
54
FUNDAMENTOS DE PROGRAMACIÓN
}
//resultado final: Algoritmos Programacion
// Comprobado, ejecuto bien la funcion strcat
getch();
return 0;
}
55
FUNDAMENTOS DE PROGRAMACIÓN
cout<<"IMPOSIBLE";
}
//Resultado final
//Programacion Algoritmos
//Comprobado
getch();
return 0;
}
56
FUNDAMENTOS DE PROGRAMACIÓN
57
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO III.
3. PROGRAMACIÓN MODULAR
3.1. Definición.
La programación modular está basada en la técnica de diseño descendente,
que como se sabe, consiste en dividir el problema original en diversos
subproblemas que se pueden resolver por separado, para después
recomponer los resultados y obtener la solución al problema. Denominado
también la técnica “Divide y vencerás”.
Ejemplo:
58
FUNDAMENTOS DE PROGRAMACIÓN
Definición de subprogramas(funciones):
En un subprograma hay que distinguir dos aspectos fundamentales:
La definición del subprograma: Es la especificación de los parámetros de
entrada y salida y las sentencias del subprograma.
La llamada al subprograma: Es una sentencia que pasa el control del
programa al subprograma. Cuando el subprograma acaba su ejecución, el
control vuelve a la sentencia siguiente a la llamada.
Un subprograma puede pedir o devolver datos. A estos datos se les
denomina parámetros. Los parámetros pueden ser de entrada o de salida.
59
FUNDAMENTOS DE PROGRAMACIÓN
3.4. Funciones
Definición
Es indispensable y gracias a ellas es posible realizar la programación
modular. Básicamente, una función es un subprograma que siempre tiene
un parámetro de salida.
int main(){
60
FUNDAMENTOS DE PROGRAMACIÓN
int a,b,c;
cin>>a; cin>>b;
c=potencia(a,b);
cout<<c;
return 0;
}
int main(){
float a,b;
cin>>a;
b=quinta(a);
cout<<b;
return 0;
}
61
FUNDAMENTOS DE PROGRAMACIÓN
c=(a+b)*(a-b);
return c;
}
int main(){
float a,b,c;
cin>>a; cin>>b;
c=dif_cuadrados(a,b);
cout<<c;
return 0;
}
62
FUNDAMENTOS DE PROGRAMACIÓN
#include<iostream>
#include<math.h>
using namespace std;
float hipotenusa(float a, float b){
float c;
c=sqrt(a*a+b*b);
return c;
}
int main(){
float a,b,c;
cin>>a; cin>>b;
c=hipotenusa(a,b);
cout<<c;
return 0;
}
Una función, al igual que cualquier otro identificador, sólo se puede utilizar
a partir del momento en que lo declaramos. Para poder utilizar las funciones
en cualquier punto del programa, lo que se hace es declararlas al principio
del programa. La declaración de una función únicamente necesita la
cabecera y se denomina prototipo.
63
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo:
#include<iostream>
using namespace std;
void disminuir(float x){
x-=10;
return;
}
int main(){
float a;
cin>>a;
disminuir(a); //Solo se realiza la subrutina, mas no se producen
cambios en "a"
cout<<a;
return 0;
}
64
FUNDAMENTOS DE PROGRAMACIÓN
cin>>a;
disminuir(a);
cout<<a;
return 0;
}
3.6. Recursividad.
Ejemplo 1. Realice una función recursiva que pida al usuario que pulse una
tecla numérica. Si esta es un número se sale de la función, pero si no lo es
vuelve a pedir que se pulse una tecla.
#include<iostream>
using namespace std;
void comprobar(char r){
int n=int(r);
if (n>=48 && n<=57){
65
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 2. Realice una función recursiva que repita una frase un cierto
número de veces.
#include<iostream>
using namespace std;
void escribir(string frase, int n){
cout<<n<<" : "<<frase<<endl;
n--;
if (n>0) escribir(frase,n);
}
int main(){
string f;
int n=5;
cout << "Escribe una frase. Se repetira 5 veces." << endl;
getline(cin, f);
cout << endl;
66
FUNDAMENTOS DE PROGRAMACIÓN
escribir(f,n);
return 0;
}
67
FUNDAMENTOS DE PROGRAMACIÓN
La memoria que utilizan las funciones se gestiona similar a una pila. Cuando
llamamos a un procedimiento, se reserva espacio para las variables locales,
“apilando” estas. Cuando se acaba el procedimiento, las variables son
“desapiladas” y por tanto dejan de existir. En un lenguaje que sólo tenga
gestión de memoria estática, realmente no existen subprogramas ni
variables locales, únicamente subrutinas y variables globales.
68
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo
int n,s;
void calculo(int x, int &z);
void subcalculo(int xx);
int main(){
n=5; s=3;
calculo(n,s);
}
void calculo(int x, int &z){
int cc;
cc=6;
subcalculo(cc);
return;
}
void subcalculo(int xx){
int dd;
...
return;
}
69
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo
//Var globales
Int a, b;
void P(int & c);
int main(){
1) a = 1;
70
FUNDAMENTOS DE PROGRAMACIÓN
2) b = 3;
3) P(a);
4) cout << a << b << endl;
return 0;
}
void P(int & c){
int b;
5) b = 2;
6) c = a + b + 2;
return;
}
Traza a b
1) 1 ? c/a b
2) 1 3 1 ?
3) 1 3 1 2
5) 1 3 5 2
6) 5 3
4) 5 3
71
FUNDAMENTOS DE PROGRAMACIÓN
#include "Fichero.h"
72
FUNDAMENTOS DE PROGRAMACIÓN
Cada vez que se modifique algo del programa y haya que compilar, sólo se
procesarán los módulos que hayan sido modificados.
combinatorio.cpp:
73
FUNDAMENTOS DE PROGRAMACIÓN
comb=fact(m)/(fact(n)*fact(m-n));
cout<<"El resultado es:"<<comb;
return 0;
}
74
FUNDAMENTOS DE PROGRAMACIÓN
75
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO IV.
4.1. Definición.
76
FUNDAMENTOS DE PROGRAMACIÓN
“Los atributos almacenan los valores del estado interno de cada objeto,
considerando que cada objeto tiene un estado interno asociado,
independiente de los otros objetos (V. Benjumea y M. Roldan, 2017, pg.
167). En pocas palabras los atributos son el conjunto de características
sustanciales de cada objeto, podemos tener atributos públicos o privados,
generalmente son privados.
77
FUNDAMENTOS DE PROGRAMACIÓN
78
FUNDAMENTOS DE PROGRAMACIÓN
private:
string marca;
string modelo:
string color;
int numero_placa;
public:
void Arrancar(void);
void Acelerar(void);
void Frenar(void);
void Girar(void);
};
En la definición anterior tenemos las palabras reservadas private y public,
están nos sirven para representar mejor el encapsulamiento, tomando la
clase Auto nosotros hacemos con la palabra private reservar los atributos,
quiero decir no haciendo que el acceso sea restringido en cambio la palabra
public nos permite que estos métodos puedan en la relación con otros
objetos interactuar. Hay un momento en donde el objeto comienza su
existencia en el programa y uno en el que deja de existir, estos dos actos
se dan mediante el constructor y el destructor.
79
FUNDAMENTOS DE PROGRAMACIÓN
string marca;
string modelo:
string color;
int numero_placa;
public:
Auto(string pm, string pmo, string pc, int pnp);//
Constructor
~Auto();// Destructor
void Arrancar(void);
void Acelerar(void);
void Frenar(void);
void Girar(void);
};
Auto::Auto(string pm, string pmo, string pc, int
pnp){//constructor
marca = pm;
modelo = pmo;
color = pc;
numero_placa = pnp;
}
80
FUNDAMENTOS DE PROGRAMACIÓN
La herencia nos permite que una clase sea heredada de otra, para
ejemplificar mejor es como tener una clase Perro, pero este se deriva de la
clase Animal, entonces entiendo este concepto tenemos en cuenta que una
característica de la herencia es poder jerarquizar mejor las clases según la
problemática a resolver.
81
FUNDAMENTOS DE PROGRAMACIÓN
82
FUNDAMENTOS DE PROGRAMACIÓN
Solución:
class persona{ // Creando Clase Persona
private:
char nombre[40];
public:
void dormir();
void hablar();
void contar();
void adquirirNombre();
void decirNombre();
};
// Declaración de funciones de la clase
void persona::dormir(){//
cout << "zzzzzzzzz" << endl;
}
void persona::hablar(){
cout << "bla bla bla bla" << endl;
}
void persona::contar(){
cout << "1, 2, 3, 4, 5..." << endl;
}
83
FUNDAMENTOS DE PROGRAMACIÓN
void persona::adquirirNombre(){
cout << "Soy una persona. Ingrese mi nombre: ";
cin >> nombre;
}
void persona::decirNombre(){
cout << "Mi nombre es: " << nombre << endl;
}
Solución:
class Rectangulo{
private: //Atributos
float largo, ancho;
public: //Metodos
Rectangulo(float,float); //Constructor
~Rectangulo(); //Destructor
void perimetro();
void area();
};
Rectangulo::Rectangulo(float _largo,float _ancho){
largo = _largo;
ancho = _ancho;
84
FUNDAMENTOS DE PROGRAMACIÓN
}
void Rectangulo::perimetro(){
float _perimetro;
_perimetro = (2*largo) + (2*ancho);
cout<<"El perimetro es: "<<_perimetro<<endl;
}
void Rectangulo::area(){
float _area;
_area = largo * ancho;
cout<<"El area es: "<<_area<<endl;
}
Solución:
class Com_Polar{
private:
float modulo;
float argumento;
public:
Com_Polar(float real, float img);
void Imprimir_Datos(){
85
FUNDAMENTOS DE PROGRAMACIÓN
cout << "Notacion CIS -> " << modulo << "cis(" << arg <<
")\n";
}
};
Com_Polar::Com_Polar(float real, float img){
modulo = sqrt(pow(real, 2) + pow(img, 2));
arg = 180 * atan(img/real) * M_PI;
}
void Com_Polar::Imprimir_Datos(){
cout << "Notacion CIS -> " << modulo << "cis(" << arg << ")\n";
}
Solución:
class persona {
private:
int Identidad;
public:
persona();
void capturarPersona();
void establecerPersona(int);
int obtenerIdentidad();
void imprimirPersona();
};
class estudiante : public persona {
86
FUNDAMENTOS DE PROGRAMACIÓN
private:
int nroCuenta;
public:
estudiante();
void capturarEstudiante();
void establecerEstudiante(int);
int obtenerNroCuenta();
void imprimirEstudiante();
};
persona::persona() {
int p = 0;
establecerPersona(p);
}
void persona::establecerPersona(int p) {
Identidad = p;
}
int persona::obtenerIdentidad() {
return Identidad;
}
void persona::capturarPersona() {
int id = 0;
cout << "Ingrese Identidad: ";
cin >> id;
establecerPersona(id);
}
void persona::imprimirPersona() {
cout <<"\nIdentidad de Persona: " << Identidad;
}
// Funciones de la clase estudiante
estudiante::estudiante() {
int cuenta = 0;
87
FUNDAMENTOS DE PROGRAMACIÓN
establecerEstudiante(cuenta);
}
void estudiante::establecerEstudiante(int c) {
nroCuenta = c;
}
int estudiante::obtenerNroCuenta() {
return nroCuenta;
}
void estudiante::capturarEstudiante() {
int nroC = 0;
cout << "Ingrese número de cuenta: ";
cin >> nroC;
establecerEstudiante(nroC);
}
void estudiante::imprimirEstudiante() {
cout <<"\nNro Cuenta Estudiante: " << nroCuenta;
}
Solución:
class Temperatura {
88
FUNDAMENTOS DE PROGRAMACIÓN
89
FUNDAMENTOS DE PROGRAMACIÓN
90
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO V
5. ESTRUCTURAS
5.1. Definición.
Joyanes y Zahonero (2007) afirma que “las estructuras son un tipo de datos
definidos por el usuario para encapsular otros tipos de datos” (p. 97), la
sintaxis básica es:
struct nombre_estructura{
tipo1 variable1;
tipo2 variable2;
…
};
Una vez definida la estructura se define una variable del tipo de la
estructura:
91
FUNDAMENTOS DE PROGRAMACIÓN
nombre_estructura dato;
dato.variable1;
92
FUNDAMENTOS DE PROGRAMACIÓN
struct trabajador{
int DNI;
string nombre;
string apellido_paterno;
string apellido_materno;
string area_trabajo;
};
int main(){
trabajador colaborador;
cout << "Ingrese el DNI del trabajador: ";
cin >> colaborador.DNI;
cout << "Ingrese el nombre del trabajador: ";
cin >> colaborador.nombre;
cout << "Ingrese el apellido paterno del trabajador: ";
cin >> colaborador.apellido_paterno;
cout << "Ingrese el apellido materno del trabajador: ";
cin >> colaborador.apellido_materno;
cout << "Ingrese el area de trabajo: ";
cin >> colaborador.area_trabajo;
return 0;
}
93
FUNDAMENTOS DE PROGRAMACIÓN
string apellido_paterno;
string apellido_materno;
};
int main(){
estudiante alumno[5];
for (int i=0; i<5; i++){
cout << "Ingrese el codigo " << i+1 << " : ";
cin >> alumno[i].codigo_alumno;
cout << "Ingrese el nombre " << i+1 << " : ";
cin >> alumno[i].nombre;
cout << "Ingrese el apellido paterno " << i+1 << " : ";
cin >> alumno[i].apellido_paterno;
cout << "Ingrese el apellido materno " << i+1 << " : ";
cin >> alumno[i].apellido_materno;
}
return 0;
}
94
FUNDAMENTOS DE PROGRAMACIÓN
cout << "Ingrese el codigo " << i+1 << " : ";
cin >> alumno[i].codigo_alumno;
cout << "Ingrese el nombre " << i+1 << " : ";
cin >> alumno[i].nombre;
cout << "Ingrese el apellido paterno " << i+1 << " : ";
cin >> alumno[i].apellido_paterno;
cout << "Ingrese el apellido materno " << i+1 << " : ";
cin >> alumno[i].apellido_materno;
}
system("cls");
for (int j=0; j<5; j++){
cout << "Datos del alumno " << j+1 << " : " << endl;
cout << alumno[j].codigo_alumno << endl;
cout << alumno[j].nombre << endl;
cout << alumno[j].apellido_paterno << endl;
cout << alumno[j].apellido_materno << endl;
system("pause");
system("cls");
}
return 0;
}
Ejemplo 5. Cree una estructura Persona con los siguientes datos: DNI,
nombre, apellido paterno y apellido materno. Luego cree una estructura
Estudiante que contenga a la estructura Persona y agregue los datos código
alumno y promedio de notas. Por último, cree una variable alumno de tipo
Estudiante y solicite la entrada de datos vía teclado.
#include <iostream>
using namespace std;
struct Persona{
int DNI;
95
FUNDAMENTOS DE PROGRAMACIÓN
string nombre;
string apellido_paterno;
string apellido_materno;
};
struct Estudiante{
Persona dato;
int codigo_alumno;
float promedio_notas;
};
int main(){
Estudiante alumno;
cout << "Ingrese DNI del alumno: ";
cin >> alumno.dato.DNI;
cout << "Ingrese el nombre del alumno: ";
cin >> alumno.dato.nombre;
cout << "Ingrese el apellido paterno del alumno: ";
cin >> alumno.dato.apellido_paterno;
cout << "Ingrese el apellido materno del alumno: ";
cin >> alumno.dato.apellido_materno;
cout << "Ingrese el codigo del alumno: ";
cin >> alumno.codigo_alumno;
cout << "Ingrese el promedio de notas del alumno: ";
cin >> alumno.promedio_notas;
return 0;
}
96
FUNDAMENTOS DE PROGRAMACIÓN
97
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO VI
6. UNIONES
Definición:
La definición de "unión" es similar a la de "estructura", La diferencia entre
las dos es que en una estructura, los miembros ocupan diferentes áreas de
la memoria, pero en una unión, los miembros ocupan la misma área de
memoria. Entonces como ejemplo:
union {
int i;
double d;
} u;
98
FUNDAMENTOS DE PROGRAMACIÓN
char ayudas[50];
char lineas[50];
} palabra;
/*Inicializamos*/
strcpy(Sistema.mensajes, "Primer Mensaje");
strcpy(Sistema.ayudas, "Una Ayuda");
99
FUNDAMENTOS DE PROGRAMACIÓN
/*Imprimimos*/
return 0;
}
Ejemplo 1. Crear una estructura union que contenga un dato entero y otro
flotante, e imprimir las direcciones de ambas variables.
#include <stdio.h>
#include <string.h>
/*Creamos la union*/
union Ejercicio01
{
int tipo1;
float tipo2;
100
FUNDAMENTOS DE PROGRAMACIÓN
} variables;
/*Iniciamos el main*/
101
FUNDAMENTOS DE PROGRAMACIÓN
102
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO VII.
7. ENUMERACIONES
Ejemplo 1.
#include <iostream>
using namespace std;
main(){
enum TipoEleccion {Piedra=3, ladrillo = 5, cemento=2};
TipoEleccion Eleccion; //Definimos Figura de tipo enumerado TipoEleccion
//Revisamos el valor predeterminado que asigna el compilador a los
enumeradores
cout << "Valor de Piedra: " << Piedra << endl;
cout << "Valor de ladrillo: " << ladrillo << endl;
cout << "Valor de cemento: " << cemento << endl;
system("pause"); system("cls");
}
103
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 2.
#include <iostream>
using namespace std;
main(){
enum Tipofigura {cuadrado, triangulo, circulo,pentagono};
Tipofigura figura;
switch (figura){
case cuadrado: cout << " cuadrados "; break;
case triangulo: cout << " triangulo "; break;
case circulo: cout << " circulo "; break;
case pentagono: cout << " pentagono "; break;
}
//Revisamos el valor predeterminado que asigna el compilador a los
enumeradores
cout << "Valor del cuadrado: " << cuadrado << endl;
cout << "Valor del triangulo: " << triangulo << endl;
cout << "Valor del circulo: " << circulo << endl;
cout << "Valor del pentagono: " << pentagono << endl;
system("pause"); system("cls");
}
Ejemplo 3.
#include <iostream>
using namespace std;
main(){
enum TipoSemana {lunes=1, martes = 2, miercoles=3, jueves=4,
viernes=5, sabado=6, domingo=7};
TipoSemana Semana;
104
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 4.
#include <iostream>
using namespace std;
main () {
enum TipoAnio {enero=1, febrero=2, marzo=3, abril=4, mayo=5,
junio=6, julio=7, agosto=8, septiembre=9, octubre=10, noviembre=11,
diciembre=12};
TipoAnio Anio; //Definimos Figura de tipo enumerado TipoEleccion
//Revisamos el valor predeterminado que asigna el compilador a los
enumeradores
cout << "Valor de enero: " << enero << endl;
cout << "Valor de febrero: " << febrero << endl;
cout << "Valor de marzo: " << marzo << endl;
cout << "Valor de abril: " << abril << endl;
cout << "Valor de mayo: " << mayo << endl;
cout << "Valor de junio: " << junio << endl;
cout << "Valor de julio: " << julio << endl;
cout << "Valor de agosto: " << agosto << endl;
105
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 5.
#include <iostream>
using namespace std;
main () {
enum Tipomascota {perro=1, gato=2, conejo=3, raton=4};
Tipomascota mascota;
//Revisamos el valor predeterminado que asigna el compilador a los
enumeradores
cout << "Valor de perro: " << perro << endl;
cout << "Valor de gato: " << gato << endl;
cout << "Valor de conejo: " << conejo << endl;
cout << "Valor de raton: " << raton << endl;
system("pause");
system("cls");
}
106
FUNDAMENTOS DE PROGRAMACIÓN
107
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO VIII
8. PUNTEROS
8.1. Definición.
108
FUNDAMENTOS DE PROGRAMACIÓN
109
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 1.
#include <iostream>
#include <stdio.h>
using namespace std;
int funcion(int valor)
{
110
FUNDAMENTOS DE PROGRAMACIÓN
111
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 2.
#include <stdio.h>
int main(void) {
ndif /* == */
#endif /* __STDC_VERSION__ */
#ifdef __cplusplus
printf("Aparentemente compilado con un compilador de C++\n");
# if __cplusplus >= 201103L
printf("Este codigo fue compilado bajo un estandar mayor o igual a
C++11.\n");
# else
printf("Este codigo fue compilado bajo un estandar menor a
C++11.");
# endif /* >= */
#endif /* __cplusplus */
#ifdef __STDC_VERSION__
printf("Aparentemente compatible con __STDC_VERSION__\n");
# if __STDC_VERSION__ == 199901L
printf("Este código fue compilando con el estandar C99.\n");
# elif __STDC_VERSION__ == 201112L
printf("Este codigo fue compilado con el estandar C11.\n");
# else
printf("Este codigo fue compilado con el estandar C94.\n");
# e
#ifdef __STDC__
112
FUNDAMENTOS DE PROGRAMACIÓN
Si nos aparece que es compatible pero que este codigo fue compilado bajo
un estandar menor a C++ 11. entonces tendremos que actualizar nuestro
compilador. Para este caso tendremos que entrar Aquí:
https://github.com/jmeubank/tdm-gcc/releases/download/v9.2.0-tdm64-
1/tdm64-gcc-9.2.0.exe
Una vez instalado nuestro nuevo compilador ya podremos continuar con los
ejemplos, dejare link de instalación:
https://www.youtube.com/watch?v=1BudFAPpQ1E
Bueno sin más problemas seguiremos con la explicación.
Ejemplo 1.
#include "iostream"
#include "stdio.h"
#include "string"
using namespace std;
int main()
{
113
FUNDAMENTOS DE PROGRAMACIÓN
114
FUNDAMENTOS DE PROGRAMACIÓN
delete [] libros;
system("pause");
return 0;
}
Así entonces tuvimos dos punteros, uno para todos los autores y otro para
todos los títulos. Haciendo uso de ellos pudimos definir la cantidad de libros
a ingresar por medio del usuario, es decir lo hicimos de manera dinámica,
en tiempo de ejecución.
Para esto se tomará el mismo ejemplo de los libros, pero usando una
matriz, en vez de dos vectores. Tal y como se solucionó en la sección de
matrices veamos:
Ejemplo 1.
#include "iostream"
#include "stdio.h"
#include "string"
using namespace std;
int main()
{
int cols = 2; //El número de columnas es fijo (sólo título y autor)
string** libros; //Si inicializa la matriz (punteros de punteros)
cout << "Cuantos libros desea ingresar?";
115
FUNDAMENTOS DE PROGRAMACIÓN
string entrada;
getline(cin, entrada); //Se asigna el valor ingresado
tamanio = stoi(entrada); //Se transforma la entrada en número
libros = new string*[tamanio];//Se asigna el número de filas según el
usuario
cout << "Por favor ingrese la siguiente información de los Libros: \n";
string titulo ,autor;
for(int i = 0; i < tamanio; i++)
{
libros[i] = new string[cols]; //Cada fila contendrá dos columnas
//Notar que cols pudo haber sido ingresada por el usuario también
cout << "\n******* Libro " << i + 1 << "********:\n";
cout << "Titulo: ";
getline(cin,titulo);
cout << "Autor: ";
getline(cin,autor);
libros[i][0] = titulo;
libros[i][1] = autor;
}
//Para liberar la memoria debemos recorrer fila por fila primero.
for (int i = 0; i < tamanio; ++i)
{
delete [] libros[i]; //Cada fila de libros es otro array de punteros
//Por eso son punteros a punteros
}
//Luego de limpiar las columnas, quitamos la fila única que quedó
delete [] libros;
system("pause");
return 0;
}
116
FUNDAMENTOS DE PROGRAMACIÓN
117
FUNDAMENTOS DE PROGRAMACIÓN
return 0;
}
118
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 2.
#include<iostream>
using namespace std;
/* Estructura con miembros de distintos tipos de datos */
struct Clase
{
char mem1 = 'D';
double mem2 = 12345678987654321.88888888888889;
unsigned short mem3 = 4554;
float mem4 = 3.14159;
long long int mem5 = 5444333222;
char mem6 = 'X';
int mem7 = 434776;
double mem8 = 2.35656778457911;
};
int main()
{
struct Clase local_struct; // Estructura local de tipo struct Clase
struct Clase *ptr_str = &local_struct; // Puntero a variables (objetos)
del tipo de la estructura struct Clase
119
FUNDAMENTOS DE PROGRAMACIÓN
cout<<*((char*)ptr_str)<<endl;
cout<<*((double*)ptr_str+1)<<endl;
cout<<*((short*)ptr_str+8)<<endl;
cout<<*((float*)ptr_str+5)<<endl;
cout<<*((long long int*)ptr_str+3)<<endl;
cout<<*((char*)ptr_str+32)<<endl;
cout<<*((int*)ptr_str+9)<<endl;
cout<<*((double*)ptr_str+5)<<endl;
return 0;
}
120
FUNDAMENTOS DE PROGRAMACIÓN
121
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO IX
9. ARCHIVOS
9.1. Definición.
Gary. J Broson nos dice que un archivo o fichero es una colección de datos
almacenados juntos bajo un nombre común, por lo general en un disco,
cinta magnética o CD-ROM. Un archivo se almacena en forma física en un
medio externo como un disco. Cada archivo tiene un nombre de archivo
único conocido como el nombre externo del archivo.
Entrada:
Se declaran mediante el tipo ifstream.
Salida:
Se declaran mediante el tipo ofstream.
122
FUNDAMENTOS DE PROGRAMACIÓN
else {
cout << "NO SE PUEDE ABRIR EL ARCHIVO";
}
return 0;
}
123
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 4:
#include <iostream>
#include <fstream.h>
using namespace std;
int main (int argc, char*argv[])
{
char cadena [128];
ifstream dfe ("ejemplo4.cpp");
while(!fe.eof())
{
fe>>cadena;
cout<<cadena<<endl;
}
fe.close();
system("PAUSE");
return EXIT_SUCCESS;
}
124
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 1:
Realice un programa que pida al usuario el nombre de un fichero
de texto y, a continuación, permita almacenar al usuario tantas frases
como el usuario desee.
#include<iostream>
#include<stdlib.h>
#include<fstream>
using namespace std;
void escribirFrases();
int main(){
escribirFrases();
system("pause");
return 0;
}
void escribirFrases(){
ofstream archivo;
string nombreArchivo,frase;
char rpt;
cout<<"Digite el nombre del archivo: ";
getline(cin,nombreArchivo);
archivo.open(nombreArchivo.c_str(),ios::out); //Creamos el archivo
if(archivo.fail()){ //Si a ocurrido algun error
cout<<"No se pudo abrir el archivo";
exit(1);
}
do{
fflush(stdin);
cout<<"Digite una frase: ";
getline(cin,frase);
archivo<<frase<<endl;
125
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 2:
Realice un programa que pida al usuario el nombre o ubicación de un fichero
de texto y a continuación de lectura a todo el fichero.
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<fstream>
using namespace std;
void lectura();
int main(){
lectura();
system("pause");
return 0;
}
void lectura(){
ifstream archivo;
string nombreArchivo,texto;
cout<<"Digite el nombre o la ubicacion del archivo o fichero: ";
getline(cin,nombreArchivo);
archivo.open(nombreArchivo.c_str(),ios::in); //Abrimos el archivo
en modo lectura
if(archivo.fail()){
cout<<"No se pudo abrir el archivo";
exit(1);
}
126
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 3:
Realice un programa que pida al usuario el nombre o ubicación de un fichero
de texto y, a continuación añada texto en él hasta que el usuario lo decide.
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<fstream>
using namespace std;
void aniadir();
int main(){
aniadir();
system("pause");
return 0;
}
void aniadir(){
ofstream archivo;
string nombreArchivo,texto;
char rpt;
cout<<"Digite el nombre o ubicacion del archivo: ";
getline(cin,nombreArchivo);
archivo.open(nombreArchivo.c_str(),ios::app); //Abrimos el archivo
en modo añadir
if(archivo.fail()){
cout<<"No se pudo abrir el archivo";
127
FUNDAMENTOS DE PROGRAMACIÓN
exit(1);
}
do{
fflush(stdin);
cout<<"Digite una frase: ";
getline(cin,texto);
archivo<<texto<<endl;
cout<<"Desea agregar otra frase? (s/n): ";
cin>>rpt;
}while((rpt == 'S') || (rpt == 's'));
archivo.close();
}
Ejemplo 1:
Lectura de archivo binario:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
streampos size;
char * memblock;
ifstream file ("EJEMPLO BINARIO", ios::in|ios::binary|ios::ate);
if (file.is_open()){
size = file.tellg();
memblock = new char [size];
128
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 2:
En este ejemplo vamos a escribir un archivo binario.
#include <fstream>
#include <iostream>
using namespace std;
int main(){
ifstream origen("foto.jpg", ios::binary);
ofstream destino("CopiaFoto.jpg", ios::binary);
// QUITE ios::binary y vea el resultado
char byte;
while( !origen.eof() && !origen.fail() ){
origen.read((char *) & byte, sizeof(char));
if(origen.good()){
destino.write((char *) & byte, sizeof(char));
}
}
destino.close();
origen.close();
return 0;
129
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 3:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string.h>
using namespace std;
struct tipoRegistro{
char nombre[32];
int edad ;
float altura ;
};
int main (int argc, char *argv[]){
tipoRegistro reg1;
tipoRegistro reg2;
ofstream fsalida("prueba.dat",ios::out | ios::binary );
strcpy(reg1.nombre, "Robert Jaime");
reg1.edad=31;
reg1.altura = 1.68;
fsalida.write((char *)®1,sizeof(tipoRegistro));
fsalida.close();
ifstream fentrada("prueba.dat", ios::in | ios::binary);
fentrada.read((char*)®2,sizeof(tipoRegistro));
cout<<reg2.nombre<<endl;
cout<<reg2.edad<<endl;
cout<<reg2.altura<<endl;
fentrada.close();
system("PAUSE");
}
130
FUNDAMENTOS DE PROGRAMACIÓN
131
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO X
10.1. Definición.
132
FUNDAMENTOS DE PROGRAMACIÓN
Este algoritmo solo necesita una variable adicional para realizar los
intercambios. El ciclo externo se ejecuta “n” veces para una lista de “n”
elementos, en el algoritmo cada búsqueda requiere comparar todos los
elementos no clasificados.
Ejemplo:
#include<iostream>
#include<conio.h>
using namespace std;
int main(){
int numeros[]={6,8,14,9,20};
int i,j,aux,min;
for(i=0;i<5;i++){
min=i;
for(j=i+1;j<5;j++){
if(numeros[j]<numeros[min]){
min=j;
}
}
aux=numeros[i];
numeros[i]=numeros[min];
numeros[min]=aux;
}
cout<<”ordenamiento de forma ascendente”;
for(i=0;i<5;i++){
cout<<numeros[i]<<” “;
}
return 0;
}
133
FUNDAMENTOS DE PROGRAMACIÓN
134
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo:
#include<iostream>
#include<conio.h>
using namespace std;
int main(){
int numeros[]={15,35,55,10,25};
int i,j,aux;
for(i=0; i<5; i++){
for(j=0; j<5; j++){
if(numeros[j]>numeros[j+1]){
aux=numeros[j];
numeros[j]=numeros[j+1];
numeros[j+1]=aux;
}
}
}
//imprimir
cout<<”Ordenado ascendentemente”;
for(i=0; i<5; i++){
135
FUNDAMENTOS DE PROGRAMACIÓN
cout<<numeros[i]<<” “;
}
return 0;
}
Características:
Funcionamiento sencillo
Estabilidad
No intercambia registros con claves iguales.
Una variable adicional puede realizar los intercambios.
El número de intercambios puede reducirse en aproximadamente un
25% para los datos aleatorios, esto hace que tenga mejor
rendimiento.
136
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 1:
#include<iostream>
#include<conio.h>
using namespace std;
int main(){
int numeros[]={19,30,65,11,35};
int i,p,aux;
for(i=0; i<5; i++){
p=i;
aux=numeros[i];
while((p>0)&&(numeros[p-1]>aux)){
numeros[p]=numeros[p-1];
p--;
}
numeros[p]=aux;
}
cout<<”Ordenado ascendentemente”;
for(i=0; i<5; i++){
cout<<numeros[i]<<” ”;
}
return 0;
}
Ejemplo 2:
// ordenamiento por inserción binaria
#include <iostream>
using namespace std;
int p, n=5, i;
137
FUNDAMENTOS DE PROGRAMACIÓN
138
FUNDAMENTOS DE PROGRAMACIÓN
139
FUNDAMENTOS DE PROGRAMACIÓN
140
FUNDAMENTOS DE PROGRAMACIÓN
Funcionamiento:
Este algoritmo consiste en almacenar todos los elementos en un montículo
y luego extraer el nodo que queda como raíz en iteraciones sucesivas
obteniendo el conjunto ordenado. Para esto el método realiza los siguientes
pasos:
1. Se construye el Heap/montículo a partir del arreglo original
2. La raíz se coloca en el arreglo.
3. El último elemento del montículo se vuelve la raíz.
4. La nueva raíz se intercambia con el elemento de mayor valor de
cada nivel.
5. Tras el paso anterior la raíz vuelve a ser el mayor del montículo
6. Se repite el paso 2 hasta que quede el arreglo ordenado.
Ejemplo:
#include <iostream>
#define max 100
using namespace std;
main(){
int B[max],j,pos,aux,i,P,n;
cout<<"Cantidad de elementos: ";
cin>>n;
for(i=1;i<=n;i++){
cin >> B[i];
}
for(P=n;P>0;P--){
for(i=1;i<=P;i++){
pos=B[i];
j=i/2;
while(j>0 && B[j]<pos){
B[i]=B[j];
i=j;
141
FUNDAMENTOS DE PROGRAMACIÓN
j=j/2;
}
B[i]=pos;
}
aux=B[1];
B[1]=B[P];
B[P]=aux;
}
cout<<"El orden ascendentemente es:"<<endl;
for(i=1;i<=n;i++){
cout<<B[i] << " ";
}
}
142
FUNDAMENTOS DE PROGRAMACIÓN
143
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO XI.
MÉTODO DE SELECCIÓN.
11.1. Definición.
Ejemplo:
El siguiente programa ordenará los números 3,4,5,2,1 en forma
ascendente y descendente.
#include<iostream>
#include<conio.h>
144
FUNDAMENTOS DE PROGRAMACIÓN
}
aux = numeros[i];
numeros[i] = numeros[min];
numeros[min] = aux;
}
cout<<"Orden Ascendente: ";
for(i=0;i<5;i++){
cout<<numeros[i]<<" ";
}
cout<<"\nOrden Descendente: ";
for(i=4;i>=0;i--){
cout<<numeros[i]<<" ";
}
getch();
return 0;
}
Clasificación:
El algoritmo de ordenación de selección ordena una matriz mediante
la búsqueda repetida del elemento mínimo (considerando el orden
145
FUNDAMENTOS DE PROGRAMACIÓN
Ejercicio 2:
El siguiente arreglo ordena números , primero ingresando la cantidad
de números, en segundo paso ingresar los números a ordenar y como
resultado lo ordenará en orden ascendente.
146
FUNDAMENTOS DE PROGRAMACIÓN
#include<iostream>
using namespace std;
main(){
int n, pos, aux;
cout << " Ingrese el numero de elementos: "; cin >> n;
int numeros[n];
for( int i=0; i<n; i++){
cout << "Ingrese el numero "<< i+1 << ": "; cin >> numeros[i];
}
for( int j=0; j<n; j++ ){
pos=j;
aux = numeros[j];
while(( pos > 0 ) && (numeros[pos-1] > aux) ){
numeros[pos] = numeros[pos-1];
pos--;
}
numeros[pos] = aux;
}
cout << "orden ascendente: " << endl;;
for( int k=0; k<n; k++ ){
cout << "[" <<numeros[k] << "]" <<", ";
}
}
Ejercicio 3:
El siguiente arreglo ordena números, primero ingresando la cantidad
de números, en segundo paso ingresar los números a ordenar y como
resultado lo ordenará en orden ascendente (otra forma).
#include <iostream>
using namespace std;
int k, n=10, i;
147
FUNDAMENTOS DE PROGRAMACIÓN
148
FUNDAMENTOS DE PROGRAMACIÓN
149
FUNDAMENTOS DE PROGRAMACIÓN
CAPÍTULO XII
12. MÉTODO DE BÚSQUEDA
12.1. Definición.
150
FUNDAMENTOS DE PROGRAMACIÓN
//---------------------------------------
main(){
int array[9]={111,25,7,9,23,4,87,45,2},
n=9, menor=0, mayor=0;
//------------------------
menor = Fnc_Menor(array,n);
cout<<"Menor elemento del arreglo: "<<menor<<endl;
}
151
FUNDAMENTOS DE PROGRAMACIÓN
152
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 4:
Crear un programa que reciba un arreglo de X cantidades y un elemento,
determinar si el elemento está en el arreglo y en qué posición.
#include <iostream>
using namespace std;
//-----------------------------------------------------
int Fnc_Posicion (int a[],int tamano, int elemento_buscado){
int posicion=-1;
for (int i=0; i<tamano; i++){
if ( a[i]==elemento_buscado ){
posicion=i;
}
}
return posicion;
}
//----------------------------------------------------
main(){
int n, valor;
int posicion;
//-----------------------------------------
cout<<"cantidad de valores en el arreglo: ";
cin>> n;
int array[n];
for(int i=0; i<n; i++){
cout<<"\n\t"<<i+1<<"º valor: ";
cin>> array[i];
}
cout<<"Cual es el valor que desea encontrar: ";
cin>> valor;
//-----------------------------------------
153
FUNDAMENTOS DE PROGRAMACIÓN
Ejemplo 5:
Realice un programa que permita encontrar un elemento en un arreglo
bidimensional y determine cuáles son el mínimo y máximo valor de ese
arreglo (Búsqueda indexada).
#include <iostream>
using namespace std;
int main() {
int max,min, fila, columna;
cout<<"numero de filas: ";
cin>> fila;
cout<<"numero de columnas: ";
cin>>columna;
int a[fila][columna];
for(int i=0; i<fila; i++){
for(int j=0; j<columna; j++){
cout<<"\tFila "<<i
<<" y columna "<<j<<": ";
cin>>a[i][j];
}
}
max=-1000;
154
FUNDAMENTOS DE PROGRAMACIÓN
min= 1000;
for(int i=0;i<fila;i++){
for(int j=0;j<columna;j++) {
if (a[i][j]>max){
max = a[i][j];
}
if (a[i][j]<min){
min = a[i][j];
}
}
}
cout<<"\nEl maximo valor del arreglo es: "<<max
<<"\nEl minimo valor del arreglo es: "<<min<<endl;
}
155
FUNDAMENTOS DE PROGRAMACIÓN
156
FUNDAMENTOS DE PROGRAMACIÓN
else if(dato<vector[medio]) {
izq = medio +1;
}
else {
der=medio-1;
}
}
while (izq<=der);
return -1;
}
//------------------------------------------
main(){
//se puede ingresar cualquier arreglo, este es de ejemplo
int array[10]={1,3,4,6,8,9,11,13,15,16};
int n=10;
if(encontrado==-1){
cout<<"el valor "<<valor<<" NO esta en el arreglo\n";
}
else{
cout<<"el valor "<<valor<<" SI esta en el arreglo\n";
}
}
Este tipo de algoritmo es más veloz y eficaz si el elemento a
encontrar se encuentra en la parte media del arreglo.
157
FUNDAMENTOS DE PROGRAMACIÓN
EJERCICIOS PROPUESTOS
158
FUNDAMENTOS DE PROGRAMACIÓN
11. Algoritmo que pida caracteres e imprima ‘VOCAL’ si son vocales y ‘NO
VOCAL’ en caso contrario, el programa termina cuando se introduce
un espacio.
Arreglos Unidimensionales
159
FUNDAMENTOS DE PROGRAMACIÓN
Sistemas
7. Calcular cuál de las siguientes palabras es mayor alfabéticamente:
Aprehender
Aprender
8. Se tienen 2 amigos:
Amigo 1:
Nombres: Juan Jesús
Apellidos: López Díaz
Amigo 2:
Nombres: Cristofer David
Apellidos: Mayta Rojas
¿Cuál de los dos tiene más caracteres en su nombre completo?
9. ¿Mayor alfabéticamente y Mayor longitud es lo mismo? Comprobarlo
en un programa.
10. Mostrar un programa en el cual se ingresarán datos como: Nombre,
Apellidos, Edad y Domicilio de 2 personas. Se deberá mostrar así:
Nombres y Apellidos:
Edad:
Domicilio con más caracteres:
Domicilio con menos caracteres:
Programación Modular
160
FUNDAMENTOS DE PROGRAMACIÓN
161
FUNDAMENTOS DE PROGRAMACIÓN
1. Cree una estructura llamada personas, con los siguientes datos: DNI,
edad, nombre, apellido paterno y apellido materno.
2. En base al ejercicio anterior solicite la entrada de datos por teclado.
3. Cree una estructura llamada trabajadores, con los siguientes datos:
fecha de ingreso, área, nombres, apellido paterno y materno. Solicite
la entrada a través de un bucle para 40 trabajadores.
162
FUNDAMENTOS DE PROGRAMACIÓN
Punteros
163
FUNDAMENTOS DE PROGRAMACIÓN
Archivos
164
FUNDAMENTOS DE PROGRAMACIÓN
165
FUNDAMENTOS DE PROGRAMACIÓN
1. Cree un programa que ordene una lista que contiene las edades de
una familia formada por X personas usando el método de
ordenamiento por selección. Mostrar el arreglo de manera ascendente
2. Realizar un programa que le permita ingresar al usuario una cierta
cantidad de números; el programa tendrá que comparar los números
y como resultado ejecutar el ordenamiento ascendente, usando
ordenamiento por burbuja.
3. Crear un programa que ordene los números de menor a mayor
{20,50,100,2,63,5,42,9,41,5,6} utilizando el algoritmo de inserción
binaria
4. Crear un programa donde se ordene en orden descendente una
sucesión de números primos.
5. Realizar un programa donde se ordene de forma ascendente y
descendente las edades de las personas que se ingresen en una lista.
6. Realizar un programa que ordene de manera ascendente una sucesión
Fibonacci.
7. Realizar un programa que permita ingresar una lista de alumnos y
reciba y busque un apellido y nombre cualquiera, el programa debe
determinar si estos datos se encuentran registrados en la lista.
8. Se registra la lista de orden de llegada de una carrera de atletismo,
imprimir la posición en la que llegó Juan.
Orden[10] = {Mario, Ángel, Jhon, Juan, Uriel, Diego, Franco,
Leonardo, Beto, Mauricio}
9. Crear un programa que determine la posición del elemento mayor y
menor de una serie de X números a ingresar. Los datos a ingresar
son a criterio del usuario.
10. Mediante búsqueda binaria, crea un programa que permita ingresar
un nuevo número a una lista ya ordenada. Arreglo de ejemplo:
Array[10]={1,3,4,6,7,9,10,14,15,17}. Dato a ingresar: 13.
166
FUNDAMENTOS DE PROGRAMACIÓN
BIBLIOGRAFÍA
167
FUNDAMENTOS DE PROGRAMACIÓN
https://www.ecured.cu/Cadenas_de_Caracteres_en_C%2B%2B#:~
:text=Acciones%20de%20p%C3%A1gina&text=Cadenas%20de%2
0Caracteres.,en%20posiciones%20consecutivas%20de%20memori
a.
Funciones II: Parámetros por valor y por referencia. (s. f.).
c.conclase.net. Recuperado 10 de agosto de 2020, de
http://c.conclase.net/curso/?cap=015
Gutierrez, L. (s.f.).Estructura repetitiva. Slideshare. SlideShare.
Recuperado de : https://es.slideshare.net/laryenso/estructura-
repetitivas
Joyanes,L. & Sánchez, L.(2006).Programación en c++:un enfoque
práctico.Madrid,España:McGraw-Hill.
Juárez, P. (s. f.). Programación modular en C. Scribd. Recuperado 10 de
agosto de 2020, de
https://es.scribd.com/doc/14611784/Programacion-modular-en-C
Knuth,Donald. (1968). The Art of Computer Programming. EE.UU:
Addison-Wesley
Métodos de Ordenamiento: Heapsort. (2015). Heapsort. Recuperado de:
http://ordenamientoheapsort.blogspot.com/2015/09/metodos-de-
ordenamiento-los-metodos-de.html
Pathak, Deepika. (2019). Selection Sort. GeeksforGeeks. Recuperado de :
https://www.geeksforgeeks.org/selection-sort/
Sitio de Análisis de Algoritmos.Estamos trabajando para
ustedes.Recuperado de
https://danielandres25.wordpress.com/unidad-1/algoritmos-de-
busqueda-y-ordenamiento/metodo-de-ordenamiento-shell-sort/
Subprogramas. programación modular. (s. f.). Informatica.uv.es.
Recuperado 10 de agosto de 2020, de
http://informatica.uv.es/iiguia/AED/oldwww/2004_05/AED.Tema.05
.pdf
168
FUNDAMENTOS DE PROGRAMACIÓN
169
FUNDAMENTOS DE PROGRAMACIÓN
170