programación orientada a objetos

191
1 PROGRAMACION ORIENTADA A OBJETOS 2015 FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS UNIVERSIDAD NACIONAL DE INGENIERÍA FACULTAD DE INGENIERÍA MECÁNICA 1

Upload: huauya-mamani-roger

Post on 08-Jul-2016

13 views

Category:

Documents


0 download

DESCRIPTION

Hecho por el Ing. Castañeda de la RosaUniversidad Nacional de Ingeniería.Explicacion clara de la teoría y con códigos ya hechos

TRANSCRIPT

Page 1: Programación Orientada a Objetos

1FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

UNIVERSIDAD NACIONAL DE INGENIERÍA

FACULTAD DE INGENIERÍA MECÁNICA

1

2015PROGRAMACION ORIENTADA A OBJETOS

Page 2: Programación Orientada a Objetos

CAPITULO I

CAPITULO I

2

2015PROGRAMACION ORIENTADA A OBJETOS

Page 3: Programación Orientada a Objetos

3FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

LENGUAJE “C” CONCEPTOS BASICOS1 Conceptos De La Programación Orientada a Objetos.-La programación orientada a objetos existe

desde la creación de los primeros lenguajes de programación. Los conceptos que se manejan de

abstracción de datos, herencia y Polimorfismo se manejaban en estos lenguajes, pero con el desarrollo

del lenguaje “C” y la programación visual se utiliza este tipo de programación con mayor profusión.

Programación estructurada, la programación estructurada se basa en la creación de una función

principal y una serie de rutinas(funciones) llamadas desde la función principal, que hacen que el

desarrollo sea horizontal contrastando con la programación lineal cuyo desarrollo es vertical. También

podemos indicar que la informática en su parte de programación era:

Programa = Algoritmo + Estructura de datos. La ventaja de este modelo era importante pero

todavía se seguía manejando por separado el estado del sistema que descansa en la estructura de

datos y los procedimientos que actúan sobre el sistema, tampoco hay una consistencia de datos, esto

queda librado al criterio del programador, estas desventajas y otras más se van a superar con la

programación orientada a objetos.

1.1 Programación orientada a objetos.- La programación orientada a objetos es la ultima

modificación, donde ya se incorporan algunos aspectos tomando como modelo la vida real.

Tipos de Datos Abstractos Algunos autores describen la programación orientada a objetos

como programación de tipos de datos abstractos y sus relaciones. Vamos a tratar de estudiar este

aspecto de modelo de la vida real con mas detalles en el concepto de “Tipos de Datos

Abstractos”

Creando modelos.- La informática y la automatización en general trata de resolver o facilitar la

vida real creando programas y aplicaciones para esto. Sin embargo, los problemas de la vida real

no están claramente definidos por qué primeramente hay que crear un modelo de las entidades

que actúan en la vida real, entonces lo primero que se tiene que hacer es tratar de obtener tu

propia perspectiva abstracta, o modelo, del problema. Este proceso de modelado se llama

abstracción y se ilustra en la Figura 1.1.

PROBLEMA

ABSTRACCION

MODELO

Figura 1.1

3

2015PROGRAMACION ORIENTADA A OBJETOS

Page 4: Programación Orientada a Objetos

El modelo define una perspectiva abstracta del problema. Esto implica que el modelo se enfoca

solamente en aspectos relacionados con el problema y que tú tratas de definir propiedades del

problema. Estas propiedades incluyen

Los datos que son afectados

Las operaciones que son identificadas por el problema.

Vamos a plantear un caso, deseamos manejar los alumnos de un instituto. Que información es

necesaria, que funciones necesitamos que trabajen: Algunas propiedades serian

DNI,

Nombre

Fecha de nacimiento,

Talla

Domicilio,

Color de ojos

Color de pelo,

Teléfono

pero nosotros nos abstraeremos y tomaremos solo las propiedades necesarias para resolver el

problema. Este modelo solo implica propiedades que son necesarias para cumplir con los

requerimientos de la aplicación, por ejemplo el nombre, fecha de nacimiento y el DNI. A estas

propiedades se les llama los datos del modelo (de alumno). Ahora ya se tienen descritas a los

alumnos reales por medio de un alumno abstracto.

Definiremos algunas operaciones para manejar los alumnos:

Matricula de un alumno nuevo.

Evaluación del alumno en un curso.

Para resumir, la abstracción es la estructuración de un problema en entidades bien definidas por

medio de la definición de sus datos y operaciones. Consecuentemente, estas entidades combinan

datos y operaciones. No están desacoplados unos de otras.

El modelo quedara:

4

2015PROGRAMACION ORIENTADA A OBJETOS

Nombre

Fecha de Nacimiento

DNI

Matricula_Ingresantes

Evaluacion

Page 5: Programación Orientada a Objetos

5FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

1.2. Organización de un Programa C++:Se compone de los bloques:

1.2.1. Directivas del Preprocesador:Permite que se realicen ciertas tareas antes que la

compilación se efectúe. Las directivas son normalmente #include y #define.

Ejemplo:

# include<math.h> // incluye el archivo fuente en C++ de las librerías matemáticas

# include<conio.h> // incluye el archivo fuente de manejo de pantalla

# define PI 3.1416 // indica que PI es equivalente a 3.1416

También:

# include<nombre_archivo> // Busca en directorio por defecto

# include “nombre_archivo”// Busca en directorio actual y luego en directorio por defecto

1.2.2. Declaraciones Globales: Indica que variables y funciones definidas por el usuario comunes

(accesibles) a todas las funciones del archivo fuente.

Ejemplo:#include <iostream.h>

int A,B; float C, D;

int media(int p1, int p2); // Prototipo

1.2.3. La función main(). Es el punto de inicio de la ejecución de un programaEn programas simples

todo el código se coloca en el programa.

Ejemplo :

5

void main( ){………. ........... ………… }

Datos y Funciones Globales

Datos y funciones externas

Directivas del PreProcesador Include Macros

2015PROGRAMACION ORIENTADA A OBJETOS

Page 6: Programación Orientada a Objetos

En programas más complejos el código va en las funciones void main ( ) { leer ( );procesar_planilla( ); imprimir_planilla( ); }

Lo visualizamos así:

1.3. Estructura General de un programa en Borland C++. - 1.3.1. Introducción .- Un programa en C++ se compone de una o más funciones. Por lo menos

debe existir la función main(), una función es un grupo de instrucciones que realizan una tarea

6

#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;

void _tmain(int argc, _TCHAR* argv[]){int a,b,c;cout<< "ingrese a: ";cin>>a;cout<< "ingrese b: ";cin>>b; c=a+b; cout<<"La suma es:"<<c<<endl;getch();//return 0;}

void main(){

}

void leer( ){}

void procesar_planillar( ){

}

void inprimir_planillar( ){

}

2015PROGRAMACION ORIENTADA A OBJETOS

Page 7: Programación Orientada a Objetos

7FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS(o tareas). Un programa nos permite incluir una serie de archivos de cabecera, que también

contiene definiciones y otras funciones.

Ejemplo : Programa que realiza una suma utilizando funciones y variables globales.

1.3.2. Creación de un Programa.- Para crear y ejecutar un programa hay que realizar las siguientes

etapas:

Utilizando un editor de texto escribimos el programa y lo grabamos, este programa grabado será el

archivo fuente del programa.

Genera nombre.cppTraducción del programa a lenguaje de maquina o un código entendible por el computador, llamado

también compilación, se genera el código objeto.

Genera nombre.exe1.3.3. Compilación, enlace y ejecución.- El editor, el compilador y la ejecución están disponibles

en el entorno integrado del Visual C++.

El editor y el compilador en el eid.

La ejecución en el menú debug (depuración).

1.4. Elementos de un programa en C++.- Se compone de elementos llamados tokens, que pueden

ser identificadores, palabras reservadas, comentarios, signos de puntuación, separadores y

archivos de cabecera.

7

#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;/* Variables globales */int operando1, operando2;int resultado;/* funciones globales, declaración de prototipos */void leer( );void sumar( );void escribir( );int _tmain(int argc, _TCHAR* argv[]){leer ( );sumar ( );escribir ( );

return 0;}/* desarrollo de las funciones */void leer ( ){ //clrscr();cout<< " Operando1= "; cin >> operando1;cout<< " Operando2= "; cin >> operando2;}

void sumar ( ){ resultado = operando1 + operando2;}

void escribir ( ){ //clrscr();cout<< " Suma = " << resultado ;getch(); }

2015PROGRAMACION ORIENTADA A OBJETOS

Page 8: Programación Orientada a Objetos

Identificadores.- Cadenas de caracteres sirven para identificar cualquier elemento de un

programa como constantes, variables, funciones etc. Ejemplo: línea, leer_datos, valor, suelo, PI.

Todo identificador está compuesto por letras, dígitos y el carácter subrayado, el primer carácter

debe de ser una letra.

Palabras reservadas.- Son identificadores que son utilizados por el sistema y no pueden ser

utilizados para otros fines. Ejemplo: char, return, break, if etc.

Comentarios.- Nos entregan información sobre el programa pero no son procesables. Existen

dos tipos en C

/* ........*/ Comentario se puede hacer por varias líneas

/* Realizado por: AAAAAAAAAA

Fecha: 99/99/99

Calcula aaaaa */

// Comentario para el final de la línea

contador = contador + 1; // Incremento unitario del contador

Signos de puntuación: Los puntos y comas terminan una sentencia, las llaves agrupan

instrucciones, las comas separan elementos iguales etc.

{ leer(a1,a2,a3); procesar(a1, a2, a3);

escribir(a3);} Separadores.- Espacios en blanco, tabulaciones, retornos de carro y avances de línea.

Archivos de cabecera.- Nos permiten incluir archivos al momento de compilación.

1.5. Tipos de Variables estándar en C++.- Datos estándar quiere decir aceptados por todos, en C++

tenemos como en la mayoría de lenguajes enteros, reales y carácter. Entero

Real

char

1.6. Constantes.- Se clasifican en: Constantes literales. ( Escritas directamente en el programa)

Enteras. 125, 100, 0x372

Reales. 1.25E-4, 75.25

Carácter. ‘A’, ‘n’

8

int 9 digitos 4 bytes long 9 digitos 4 bytes

float 3.4 x 10-38 a 3.4 x 1038 4 bytesdouble 1.7 x 10-308 a 1.7 x 10308 8 byteslong double 3.4 x 10-4932 a 3.4 x 103932 10bytes

Char -128...... 127 1 byteUnsigned char 0..255 1 byte

2015PROGRAMACION ORIENTADA A OBJETOS

Page 9: Programación Orientada a Objetos

9FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSCadena. “jose ruiz”, “------------“

Constantes definidas(Simbólicas). Definidas mediante #define

#define linea “---------------“#define maximo 1000#define raiz2 1.4142

Constantes enumeradas. Se utilizan para clarificar un programa, un ejemplo seria: enum frutas { naranja, papaya, fresa, limón}, inmediatamente el compilador asocia un numero de

orden a cada elemento, el primero será 0 (naranja)

Constantes declaradas. Se declara con el formato

const tipo nombre = valor;

ejemplo: const int dias_mes = 30; const char[ ] titulo = “ MENU PRINCIPAL”

1.7. Variables.- Se le asigna una posición de memoria cuyo contenido si puede ser modificado, al

contrario de las constantes que no pueden ser modificadas. La variable tiene un identificador, un

tipo de valor que almacena y una dirección. Su forma general es:

Ejemplo: int contador = 0, suma = 0; float raiz = 1.0; long factorial=1;

1.8. Entrada y salida simple en C++.- La entrada y salida básica en C++ se realiza utilizando los flujos

cin y cout. El flujo cin(entrada) conecta el dispositivo por defecto de enatrada(teclado) con el

sistema. El flujo cout(salida) conecta el programa con el dispositivo asignado por defecto a la

salida(Pantalla). Para colocar información en cout se utiliza el operador sobrecargado “<<” y para

tomar información en cin se utiliza el operador sobrecargado “>>”.

Veamos el ejemplo 1.-PROGRAMA

EJECUCION

9

2015PROGRAMACION ORIENTADA A OBJETOS

Tipo nombre [= valor];

// prog31.cpp: define el punto de entrada de la aplicación de consola./*OBJETIVO: Mostrar la salida en pantalla utilizando el operador << y el flujo cout, considera constantes y variables. */#include "stdafx.h"#include <iostream>#include <conio.h>using namespace std;#define linea1 "|---------------------------------------------------|"#define linea2 "|---------------------------------------------------|"void main( ){ int i;//clrscr();cout<<linea1<<endl;;cout<<'|';for (i=1;i<=20;i++)cout<<i<<" ";cout<<'|'<<endl;cout<<linea2;getch(); }

Page 10: Programación Orientada a Objetos

En la lectura se asignara valores a las variables sea una por una o varias a la vez, como en el ejemplo 2.-PROGRAMA

EJECUCION

1.9. Secuencias de escape.- Las secuencias de caracteres en las que el primero es la barra invertida,

se denominaron secuencias de escape y nos permiten enviar ciertos caracteres a la pantalla. Por

ejemplo, \n se utiliza para representar el carácter nueva línea (decimal 10) y \t será tabulación

horizontal. La tabla es:.

Secuencia     Valor           Símbolo         Que hace                                                        \a               0x07         BEL          Sonido audible (bell)

 \b               0x08          BS           Retroceso (backspace)

 \f               0x0C          FF            Salto de formato (formfeed)

 \n               0x0A         LF             Saltar una línea (linefeed)

 \r               0x0D         CR             Retorno de carro (carriage return)

 \t               0x09          HT             Tabulación horizontal (H Tab)

 \v               0x0B         VT             Tabulación vertical (V Tab)

Veamos el ejemplo 3.-PROGRAMA

10

2015PROGRAMACION ORIENTADA A OBJETOS

// prog41.cpp: define el punto de entrada de la aplicación de consola./* CODIGO: FECHA: 19 de Enero de 2015 OBJETIVO: Mostrar las diferentes formas de leer valores y almacenarlos en las variables */#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;void main( ){ int voltaje,corriente;system("cls");cout<<"Ingrese voltaje ==> ";cin>>voltaje;cout<<"Ingrese corriente=> ";cin>>corriente;cout<<"Voltaje = "<<voltaje<<endl;cout<<"Corriente = "<<corriente<<endl;cout<<"Potencia ==> "<<voltaje*corriente<<endl;cout<<"Ingrese voltaje y corriente separados por blancos ==> "; cin>>voltaje>>corriente;cout<<"Potencia ==> "<<voltaje*corriente<<endl;_getch();}

// prog51.cpp: define el punto de entrada de la aplicación de consola./* CODIGO: cppcap01ejem03 FECHA: 19 de Enero de 2015 OBJETIVO: MANEJO DE SECUENCIAS DE ESCAPE */#include "stdafx.h"#include<iostream>

Page 11: Programación Orientada a Objetos

11FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

EJECUCION

EJECUCION

Manipulación y formato de datos de salida.- El precisar con cuantos decimales debe mostrarse

nuestros datos de salida y que ancho y otras características se llama dar formato a la salida. Cuando

deseamos manejar este formato lo podemos realizar de la siguiente manera:

1. Mediante el uso de funciones miembro de un objeto de flujo. Su sintaxis es la siguiente:

nombreObjetoInvocador.nombreFuncionMiembro(listaArgumentos );cout.width( 5 );cout.fill( '*' );cout.precision( 3 );2. Mediante el uso de funciones especiales llamadas manipuladores, con o sin

argumentos.

cout << flush;cout << endl;cout << setw( 6 ) << 12 << endl;

11

2015PROGRAMACION ORIENTADA A OBJETOS

// prog51.cpp: define el punto de entrada de la aplicación de consola./* CODIGO: cppcap01ejem03 FECHA: 19 de Enero de 2015 OBJETIVO: MANEJO DE SECUENCIAS DE ESCAPE */#include "stdafx.h"#include<iostream>

Page 12: Programación Orientada a Objetos

cout << seprecision( 2 ) << 12.325 << endl;3. Mediante el uso de banderas (indicadores) como argumentos de la función miembro setf( ) del objeto

de flujo:

cout.setf( ios::fixed );cout.setf( ios::showpoint );Veamos la tabla de manipuladores de flujo de salida:

MANIPULADOR FUNCION QUE REALIZA

dec Establece la base decimal.

hex Establece la base hexadecimal

oct Establece la base octal.

endl Inserta nueva línea y cambia de flujo

ends Inserta un cero nulo al final de la cadena.

flush Vacía el flujo

setbase(int n) Establece la conversión de base.

resetiosflags(long f) Limpia el formato especificado por f.

setiosflag( long f) Establece formato especificado por f.

setfill(int c) Rellena con el carácter c.

setprecision(int n) Establece precisión de punto flotante a n.

setw(int n) Establece el ancho de campo a w.

Ejemplo 4.- Veamos un ejemplo de dec,oct y hex.

PROGRAMA

Tabla de indicadores de formato:

12

2015PROGRAMACION ORIENTADA A OBJETOS

// prog61.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Utilizacion de manipuladores de flujo de salida

#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;void main( ){ // Lee un valor y lo muestra en formato decimal, octal y hexadecimalint numero;system ("cls");cout<<"Ingrese un numero : ";cin>>numero;cout<<"Numero decimal......"<<numero<<endl;//base decimalcout<<"Numero octal........"<<oct<<numero<<endl;//base octalcout<<"Numero hexadecimal.."<<hex<<numero<<endl;//base hexadecimalgetch();}

Page 13: Programación Orientada a Objetos

13FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSINDICADOR LO QUE REALIZA

ios::left Justifica a la izquierda dentro de setw.

ios::rigth Justifica a la derecha dentro de setw.

ios::scientific Muestra números en notación científica.

ios::fixed Muestra en formato de punto fijo.

ios::dec Formatea a base 10.

ios::hex Formatea a base 16.

ios::oct Formatea a base 8.

ios::uppercase Formatea la parte literal a mayúscula.

ios::showbase Imprime el prefijo de base.

Ios::showpos Imprime signo

Ios::showpoint Completa con ceros.

Ejemplo 5.- Veamos un ejemplo que maneje la precisión de salida de un valor real.

PROGRAMA

PROBLEMAS13

2015PROGRAMACION ORIENTADA A OBJETOS

// prog71.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Muestra el uso del manipulador setprecision( )//para indicar el número de dígitos decimales del valor flotante.#include "stdafx.h"#include <iostream> //Para cout#include <iomanip> //Para setprecision( )#include <conio.h> //Para getch()using namespace std;void main( void ){float valor = 3.1416;cout<< setiosflags( ios::fixed );cout<< setprecision( 0 ) << valor << endl;cout<< setprecision( 1 ) << valor << endl;cout<< setprecision( 2 ) << valor << endl;cout<< setprecision( 3 ) << valor << endl;cout<< setprecision( 4 ) << valor << endl;cout<< setprecision( 5 ) << valor << endl;cout<< setprecision( 6 ) << valor << endl;getch(); }

Page 14: Programación Orientada a Objetos

1. Dado un numero “n” se pide calcular la cantidad de cifras impares y de cifra pares que tiene “n”.

Utilizar variables globales.PROGRAMA

Nota: Observe algunos detalles, las variables son globales, por lo tanto los contadores se inicializan

automáticamente desde cero. Además num es una variable entera solo debe permitir valores de 5 cifras

pero se sobrepasa, quiere decir que el tipo entero ocupa más de dos bytes (4 bytes).

2.- Escriba un programa que utilice la definición del tipo enumerado color, e imprima el color escogido.. PROGRAMA

EJECUCION

14

// prog81.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Lee un numero y halla cuantos cifras impares y cifras pares componen el numero. #include "stdafx.h"int num,cifra;int contp, conti; // contador de cifras pares y contador de cifras impares#include<iostream># include<conio.h> using namespace std;void main( ){ system("cls"); cout<<"Ingrese un numero: ";cin>>num;;while( num!=0) { cifra = num%10; if (cifra%2==0) contp++; else conti++; num=num/10; }cout<<"Cifras pares : "<<contp<<endl;;cout<<"Cifras impares: "<<conti;getch(); }

// prog10.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Maneja tipo enumerado #include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ enum color {rojo,verde,amarillo,azul,negro};color c1=rojo,c2 = amarillo, c3 = negro;switch(c1){ case 0:cout<<"ROJO"<<endl;break;case 1:cout<<"VERDE"<<endl;break;case 2:cout<<"AMARILLO"<<endl;break;case 3:cout<<"AZUL"<<endl;break;case 4:cout<<"NEGRO"<<endl;break; }switch(c2){ case 0:cout<<"ROJO"<<endl;break;case 1:cout<<"VERDE"<<endl;break;case 2:cout<<"AMARILLO"<<endl;break;case 3:cout<<"AZUL"<<endl;break;case 4:cout<<"NEGRO"<<endl;break; }switch(c3){ case 0:cout<<"ROJO"<<endl;break;case 1:cout<<"VERDE"<<endl;break;case 2:cout<<"AMARILLO"<<endl;break;case 3:cout<<"AZUL"<<endl;break;case 4:cout<<"NEGRO"<<endl;break; }getch();}

2015PROGRAMACION ORIENTADA A OBJETOS

Page 15: Programación Orientada a Objetos

15FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

3.- Elaborar un programa que simule la acción de una calculadora de bolsillo: lee una secuencia de valores

numéricos separados por operadores aritméticos (+, -, *, /), y calcula el valor de la expresión definida por

esta secuencia. El resultado del cálculo se produce cuando se lee el operador ‘=’.PROGRAMA

/* prog02.cpp: define el punto de entrada de la aplicación de consola.OBJETIVO: Simula la acción de una calculadora de bolsillo o sea lee un operando, luego el operador ,a continuación el operando realiza la operación y lee un nuevo operando y así hasta que el operador sea el signo igual y muestre el resultado */#include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ float operando,resultado; char operador; system("cls"); cout<<" Ingrese operando ==> "; cin>>resultado; do {cout<< "Ingrese operador ==> "; cin>>operador; switch(operador) { case '+': cout<<" Ingrese operando ==> "; cin>>operando; resultado=resultado+operando;break; case '-': cout<<" Ingrese operando ==> "; cin>>operando; resultado=resultado-operando;break; case '*': cout<<" Ingrese operando ==> "; cin>>operando; resultado=resultado*operando;break; case '/': cout<<" Ingrese operando ==> "; cin>>operando; resultado=resultado/operando;break; } } while(operador!='='); cout<<" Resultado = "<<resultado;

_getch();}

EJECUCION

15

2015PROGRAMACION ORIENTADA A OBJETOS

Page 16: Programación Orientada a Objetos

CAPITULO II

16

2015PROGRAMACION ORIENTADA A OBJETOS

Page 17: Programación Orientada a Objetos

17FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO IIINSTRUCCIONES DE CONTROL EN “C”

2. INTRODUCCION2.2. EXPRESIONES Y OPERADORES

2.2.1. Expresiones.- Una expresión es una secuencia de operadores y operandos, aunque

también podemos tener algunas expresiones que salen de este formato. Ejemplo : a = *c;

p1 = &c; numero ++.

2.2.2. Operadores aritméticos.- Nos permiten realizar las operaciones aritméticas básicas sean

del tipo real (float) o entero, considerando que en lenguaje “C” se define el tipo de operación

por los operandos, si al menos un operando es del tipo float la operación se realizara en el

modo real.

Ejemplo : 4%3 será 1 y 3%4 será 3 ; 10/4 será 2 y 10/4.0 será 2.5

En el primer caso la división es 1 y el resto 1.

En el segundo caso la división es 0 y el resto 3

En el tercer caso la división es 2 y en el cuarto caso la división es 2.5 (Modo real)

Operadores de incremento y decremento.- Los operadores ++ y - - suman o restan 1 a su

argumento. Por ejemplo a++ y ++a producen el mismo efecto. Sobre el argumento pero :

int numero, valor ;

valor = 6;

numero = valor++; //Asigna a numero 6 a numero y luego incrementa valor a 7

numero = ++valor; // Incrementa valor a 7 y luego asigna 7 a numero

Lo mismo sucede con cont - - y - - cont

Operadores de asignación, relación, lógicos y desplazamiento.- Operadores de asignación.- Consideramos el símbolo = operador de asignación. Por ejemplo

podemos colocar cont1 = cont2 = cont3 = 0; Le asignamos el valor cero a los tres contadores

pero esta operación se realiza de izquierda a derecha. También podemos abreviar c+=5 ; que es

equivalente a c = c +5, tenemos lasiguiente tabla

17

Operador Entero Real . + Unitario mas Unitario mas - Unitario menos Unitario menos + Suma Suma - Resta Resta * Producto Producto / Cociente de división entera Cociente real % Resto de división entera ++ Incremento -- Decremento

Operador Abreviatura Sentencia += a+=b a=a+b -= a-=b a=a-b *= a*=b a=a*b /= a/=b a=a/b %= a%=b a=a%b

2015PROGRAMACION ORIENTADA A OBJETOS

Page 18: Programación Orientada a Objetos

Operadores relacionales.- Relacionan operandos enteros o reales pero su resultado es

booleano, estos son:

a == b uno si es verdadero y cero si a no es igual a b

a != b uno si es verdadero y cero si a es igual a b

a < b uno si es verdadero y cero si a es mayor o igual a b

a > b uno si es verdadero y cero si a es menor o igual a b

a <= b uno si es verdadero y cero si a es mayor que b

a >= b uno si es verdadero y cero si a es menor que b

Pero también podemos tener a = b > c en cuyo caso a valdrá 1 si b es mayor que c y cero en

caso contrario.

Operadores lógicos.- Son el not el and y el or, Relacionan operandos booleanos y su resultado

es booleano, estos son:

Negación ! el not lógico

And && el and para que sea verdadero sus dos operandos deben ser verdaderos.

Or || el or para que sea verdadero basta que un operando sea verdadero.

Ejemplo 1 : Escriba un programa que lea un numero y lo muestre invertido

Si lee 2345 debe escribir 5432.PROGRAMA

OperadoresEspeciales.- Existen otros operadores que pasaremos a revisar

Operadores de Dirección.- Tenemos los siguientes

* accede el campo apuntado.

& Devuelve la dirección del operando

18

2015PROGRAMACION ORIENTADA A OBJETOS

// prog12.cpp: define el punto de entrada de la aplicación de consola./* FECHA: 02 de Setiembre de 2015 OBJETIVO: Lee un numero y lo invierte */#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;void main( ){ int numero, num_inv, digito ; system("cls"); num_inv = 0; cout<< " Ingrese un numero => "; cin >> numero; while ( numero >0) { digito = numero % 10; num_inv = num_inv*10 + digito; numero = numero / 10; cout<<num_inv<<endl; } cout<< " El numero invertido sera = " << num_inv; _getch(); }

Page 19: Programación Orientada a Objetos

19FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Ejemplo2:Escriba un programa que maneje punteros de forma básica.PROGRAMA

EJECUCION

“.”Accede a un miembro de un objeto o variable estructurada

“ “Accede a un miembro de un objeto apuntado por el operando de la izquierda.

Operador Condicional.- Su forma es

Operador Coma, Operador( ),Operador[ ], Operador :: .- Coma combina expresiones a> b , c > 10 // a mayor que b , c mayor que 10

( ) Llama a funciones y también altera prioridad

[ ] Acompaña a los arrays

:: Indica ámbito void empleado :: planilla ( ) // indica la función planilla perteneciente a

empleado.

Ejemplo 3.- Escriba un programa que simule un juego de dados. Las reglas son:

a) En la primera jugada si obtiene una suma de los dados de2,3 o 12 pierde el juego ; 7 u 11 gana el juego ; Otra suma vuelve a jugar

19

expresion_c ? expresion_v : expresion_f

v1 >v2 ? v1 : v2devuelve el mayor valor de v1 , v2

// prog22.cpp: define el punto de entrada de la aplicación de consola./* FECHA: 02 Setiembre de 2015 OBJETIVO: Observar manejo de punteros en forma basica */#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;void main( ){ int *p1 ; // Declaramos una variable tipo puntero int a, b ; //Declaramos las variables a y b del tipo entero system("cls"); a = 17; b = 18; p1 = &a; // p1 apunta hacia a cout<< "Valor apuntado por p1 ==> "<<*p1<<endl; // Se imprime el valor apuntado por p1 cout<< "Direccion de a almacenada en p1 ==> "<<hex << p1<< endl; // Imprime la dirección de a contenida en p1 cout<< dec; // vuelve al formato decimal p1 = &b; // p1 toma la dirección de b cout<< "Nuevo valor apuntado por p1==> "<<*p1<<endl; // muestra valor almacenado en el campo apuntado por p1(b) cout<< "Direccion de b almacenada en p1 ==> "<<hex << p1<< endl; // Imprime la dirección de a contenida en p1 _getch(); }

2015PROGRAMACION ORIENTADA A OBJETOS

Page 20: Programación Orientada a Objetos

b) A partir de la segunda jugada el jugador sigue las reglas

Si repite la primera suma gana ; Obtiene 7 pierdePROGRAMA

20

// prog32.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Escribir un programa que simula un juego de dados */#include "stdafx.h"#include<iostream>#include<conio.h>#include<stdlib.h>#include<time.h>using namespace std;void main( ){ int juego1, juego, dado1,dado2;

system("cls");srand(time(NULL));dado1 = rand()%6 + 1; dado2 = rand()%6 + 1; juego1 = dado1 + dado2;cout<< juego1<<endl;if ( (juego1 == 7 ) || ( juego1 == 11 ) )

cout<< " Gano juego" ; else if ( (juego1 == 2) || (juego1 == 3 ) || ( juego1== 12))

cout<< " Perdio juego"; else

{ do { dado1 = rand()%6 + 1; dado2 = rand()%6 + 1;juego = dado1 + dado2;cout<<juego<<endl;

} while ( ( juego != juego1) && ( juego != 7));if ( juego == juego1)cout<< "Gano juego";elsecout<< "Perdio juego"; }_getch(); }

2015PROGRAMACION ORIENTADA A OBJETOS

Page 21: Programación Orientada a Objetos

21FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS2.3. ESTRUCTURAS DE CONTROL EN LENGUAJE “C” Son las siguientes:

Sentencia if – else Sentencia switch Sentencia while Sentencia do – while Sentencia for.

ESTRUCTURAS DE DESICION2.3.1. Sentencia if .- Nos permite derivar el control hacia uno de dos puntos del programa.

Forma General if ( condición)

{......(1)............. ;

.....................; }

[else

{ .........(2)..........;

...................; }]

ss

Funcionamiento:Se evalúa la condición, si esta se cumple se ejecuta el bloque 1, caso contrario se ejecuta el bloque 2, si

existe. Finalmente pasa el control de ejecución a la siguiente sentencia(ss).

Ejemplos:

If(nota > 10)

cout<< “Curso Aprobado”;

If((numero%2)==0)

cout<< “ El numero es par”;

else

cout<<”El numero es impar”;

Sentencia if anidada.- Se dice que una sentencia esta anidada dentro de otra cuando una de ellas (la

externa) contiene completamente las sentencias de la otra(la interna o anidada). Veamos esto:

if (condicion1)

{ ………………….;

…………………..;

if(condicion2)

{……………………..;

…………………….;

}

………………………….;

}

else

21

2015PROGRAMACION ORIENTADA A OBJETOS

Page 22: Programación Orientada a Objetos

{ ………………………..;

………………………..;

………………………….;

}

Podemos observar que el if con condicion2 esta anidado en el if con condicion1.

Ejemplo 4.- Programa que lee un número y me muestra si es múltiplo de 3, 4 o 5.

22

2015PROGRAMACION ORIENTADA A OBJETOS

// prog42.cpp: define el punto de entrada de la aplicación de consola./* FECHA: 02 Setiembre del 2015 OBJETIVO: Ejemplo de if anidado, programa determina si un numero es de 2, 3 o 4 cifras y si es multiplo de 3 o no */#include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ int numero; system("cls"); cout<< " ingrese un numero ==> "; cin>>numero; if ((numero> 9) && (numero<10000)) { if (numero>999) if(numero%3==0) cout<<" Numero de cuatro cifras y multiplo de 3"; else cout<<" Numero de cuatro cifras y no es multiplo de 3"; else if (numero >99) if(numero %3==0) cout<<" Numero de tres cifras y multiplo de 3"; else cout<<" Numero de tres cifras y no es multiplo de 3"; else if(numero%3==0) cout<<" Numero de dos cifras y multiplo de 3"; else cout<<" Numero de dos cifras y no es multiplo de 3"; }else cout<<"Numero fuera del rango"; getch(); }

Page 23: Programación Orientada a Objetos

23FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Ejemplo 5.- Programa que lee tres notas y halla el promedio eliminando la menor y duplicando la mayor.

PROGRAMA

Ejemplo 6.- Escriba un programa que lea 20 edades y me indique cuantos son :

Bebes (0-5años)

Niños (5-12 años)

Adolescentes (12-16 años)

Jóvenes (16-25)

Adultos (25-50)

Mayores (50 a mas)

23

2015PROGRAMACION ORIENTADA A OBJETOS

// prog52.cpp: define el punto de entrada de la aplicación de consola./* FECHA: 02 Setiembre de 2015 OBJETIVO: Ejemplo de if que lee tres notas y calcula mayor, menor y halla promedio, duplica la mayor y elimina la menor */#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;void main( ){ int nota1,nota2,nota3,menor,mayor,may1,men1;float promedio;system("cls");cout<< " ingrese nota1 : "; cin>>nota1;cout<< " ingrese nota2 : "; cin>>nota2;cout<< " ingrese nota3 : "; cin>>nota3;if (nota1<nota2)

men1 = nota1;else

men1=nota2;if (men1<nota3)

menor = men1;else

menor=nota3;if (nota1>nota2)

may1 = nota1;else

may1=nota2;if (may1>nota3)

mayor = may1;else

mayor=nota3;//Calculando promediopromedio= (nota1+nota2+nota3+mayor-menor)/3.0;cout<<"El promedio es : "<<promedio;_getch(); }

Page 24: Programación Orientada a Objetos

PROGRAMA

2.3.2. Sentencia switch.- Deriva el control hacia uno de varios puntos del programa, permite realizar

una selección múltiple.

Forma General

switch ( expression)

{ case const1 : ................... ;

....................;

break;

case const2 : ................... ;

....................;

break;

24

2015PROGRAMACION ORIENTADA A OBJETOS

// proy62.cpp: define el punto de entrada de la aplicación de consola./* OBJETIVO: Ejemplo que lee 20 edades y me indique cuantos son :

Bebes (0-5años),Niños (5-12 años), Adolescentes (12-16 años), Jóvenes (16-25) , Adultos (25-50), Mayores (50 a mas) */#include "stdafx.h"# include<iostream># include<conio.h>

using namespace std;void main( ){ int edad,i;

int contb=0;//contador de bebes int contn=0;//contador de niñosint conta=0;//contador de adolescentesint contj=0;//contador de jovenesint contd=0;//contador de adultosint contm=0;//contador de mayoressystem("cls");for(i=1;i<=20;i++) {cout<< " ingrese edad "<<i<< " : ";cin>>edad;

if ( edad>=0)if (edad<=5)

contb=contb+1;else if (edad<=12)

contn=contn+1;else if(edad<=16)

conta=conta+1;else if (edad <=25)

contj=contj+1;else if (edad<=50)

contd=contd+1;else

contm=contm+1; }cout<<contb<< " bebes"<<endl;cout<<contn<< " niños"<<endl;cout<<conta<< " adolescentes"<<endl;cout<<contj<< " jovenes"<<endl;cout<<contd<< " adultos"<<endl;cout<<contm<< " mayores"<<endl;getch();

}

Page 25: Programación Orientada a Objetos

25FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS case const3 : ................... ;

....................;

break;

case const4 : ................... ;

....................;

break;

[ default : .....................;

.....................;]

}

Funcionamiento:La expresión de control o selector se evalúa y se compara con cada una de las etiquetas de case.

La expresión selector debe ser un tipo ordinal (por ejemplo, int, char, pero no float o string). Cada

etiqueta es un valor único, constante y cada etiqueta debe tener un valor diferente de los otros. Si el

valor de la expresión selector es igual a una de las etiquetas case –por ejemplo, etiquetai- entonces la

ejecución comenzará con la primera sentencia de la secuencia sentenciai y continuará hasta que se

encuentra el final de la sentencia control switch, o hasta encontrar la sentencia break. Lo normal es que

la sentencia break termine el bloque y después que siga la ejecución en la siguiente sentencia switch( ).

Ejemplo 7:Escriba un programa que lea un dia de semana del 1 al 7 y lo imprima en letras . Si lee 1 debe

escribir LUNES.PROGRAMA

// prog72.cpp: define el punto de entrada de la aplicación de consola.//lee un dia de la semana y lo convierte a letras*/#include "stdafx.h"#include <iostream>#include <conio.h>using namespace std;void main(){ int dia; system("cls");cout<<"Introduce el dia: ";cin>>dia;switch(dia){case 1: cout<<"Lunes"; break;case 2: cout<<"Martes"; break;case 3: cout<<"Miercoles"; break;case 4: cout<<"Jueves"; break;case 5: cout<<"Viernes"; break;case 6: cout<<"Sabado"; break;case 7: cout<<"Domingo"; break;default:cout<<"No es un dia de semana";}_getch();}EJECUCION

25

2015PROGRAMACION ORIENTADA A OBJETOS

Page 26: Programación Orientada a Objetos

Note que el default no tiene break y es que la salida en este caso es por término de la instrucción switch.

ESTRUCTURAS DE REPETICION2.3.3. Sentencia while.-Nos permite ejecutar repetidamente un grupo de sentencias hasta que el

valor de la expresión se hace cero (condición falsa)

Forma General while ( expresión)

{................... ;

.....................;

.....................;

}

Funcionamiento:La expresión booleana o condición se evalúa y el bucle se repite mientras la condición es verdadera. El

bucle while nunca puede iterar si la condición comprobada es inicialmente falsa.

Ejemplo8:PROGRAMA

Comentario: Como suma es un acumulador se inicializa en cero, en cambio en este caso cont va

contando por adelantado y su valor final será 101. Con cont igual a 101 ya no se cumple la condición y

por lo tanto se sale del bucle while, a esta variable denominada cont se le conoce tambiéncomo variable

de control del bucle while, esta variable necesariamente debe ser modificada dentro del rango del while

pues de no suceder esto estaríamos en un lazo infinito.

2.3.4. Sentencia do-- while.- Las sentencias se ejecutan repetidamente hasta que el valor de la

expresión se hace cero (falso)

Forma General do

{................... ;

.....................;

.....................;

26

2015PROGRAMACION ORIENTADA A OBJETOS

// prog82.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"#include<iostream>#include<conio.h>#include<stdlib.h>#include<time.h>using namespace std;void main( ){ int numero, suma = 0;int cont = 1;system("cls");srand(time(NULL));while ( cont <= 1000 ){numero=rand()%20;cout<<"\t"<<numero<<endl;suma = suma+ numero;cont++; }cout<< "La media es = " << suma / 1000.0;getch(); }

Page 27: Programación Orientada a Objetos

27FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS } while ( expresión);

Funcionamiento:Se ejecutan las sentencias y a continuación se evalúa la expresión, y si es verdadero (distinto de cero), el

control se pasa de nuevo al principio de la sentencia do y el proceso se repite, hasta que la condición

(expresión) sea falsa(cero) y el control pasa a la sentencia siguiente.

Ejemplo 9:El siguiente ejemplo visualiza los números, cuadrados y cubos de los 20 primeros números:

PROGRAMA

2.3.5. Sentencia for.- Las sentencias se ejecutan hasta que el valor de la expresion2 sea cero o

sea falso. Forma Generalfor ( exp1 ; exp2 ; exp3)

{................... ;

.....................;

}

Funcionamiento:

27

2015PROGRAMACION ORIENTADA A OBJETOS

// prog92.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* FECHA: 02 Setiembrede 2015 OBJETIVO: Presenta cuadrados y cubos de los 20 primeros numeros.Usando el do while */# include<iostream># include<conio.h># include<math.h>using namespace std;void main( ){ float numero=1; cout << " "<<"X"<< "\t" <<"X^2"<<"\t"<<"X^3"<< endl ; cout << " "<<"=="<< "\t" <<"===="<<"\t"<<"===="<< endl ;do{cout <<" "<< numero << "\t" <<pow(numero,2)<<"\t"<<pow(numero,3) << endl ;numero=numero +1.0; }while (numero < 21);getch(); }

Page 28: Programación Orientada a Objetos

Una sentencia for ejecuta la iteración de un bucle un número determinado de veces. El lazo for tiene tres componentes: exp1, inicializa las variables de control del bucle; exp2, es la condición que

determina si el bucle realiza otra iteración; la última parte del encabezado del for(exp3 ) es la

cláusula que incrementa o decrementa las variables de control del bucle.

Exp1se utiliza para inicializar la variable de control de bucle; a continuación exp2 se evalúa, si es

verdadera (distinta de cero), se ejecuta la sentencia y se ejecuta exp3 y el control pasa de nuevo al

principio del bucle. La iteración continúa hasta que exp2 es falsa (cero), en cuyo momento el control

pasa a la sentencia siguiente al bucle.

Ejemplo 10:Imprimir todos los primos de dos dígitos.

Sentencias break y continueEl flujo de control ordinario de un bucle se puede romper o interrumpir mediante las sentencias

break y continue.

La sentencia break produce una salida inmediata del bucle flor en que se encuentra situada:

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

{cin » x;

if (x < 0.0)

{cout <<”salir del bucle” <<endl;

break;}

cout<< sqrt(x)<< endl;}

La sentencia break también se utiliza para salir de la sentencia switch.

La sentencia continue termina la iteración que se está realizando y comenzará de nuevo la siguiente

iteración:

Advertencia:• Una sentencia break puede ocurrir únicamente en el cuerpo de una sentencia for, while, do o switch.

• Una sentencia continue sólo puede ocurrir dentro del cuerpo de una sentencia for, while o do.

28

2015PROGRAMACION ORIENTADA A OBJETOS

// prog102.cpp: define el punto de entrada de la aplicación de consola./* FECHA: 08 Setiembre del 2015 OBJETIVO: Imprime los primos menores que 100 o sea dos digitos. Usando el lazo repetitivo for */#include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ int i,j , primo; for(i=10; i<100; i++) {primo = 1;// asume que es primo for ( j=2;j<i ;j++) if ( i%j==0) {primo = 0; break; } if(primo == 1) cout<<i<<endl;}_getch(); }

Page 29: Programación Orientada a Objetos

29FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

PROBLEMASESTRUCTURAS DE CONTROL1. Se tienen 6 datos que son los nombres y edades de tres personas, escriba un programa que lea los

tres nombres y edades e imprima los nombres considerando las edades en forma creciente.

SOLUCION:

A) PROGRAMA:// cap3prob1.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: LEE TRES NOMBRES Y EDADES E IMPRIME LOS NOMBRES EN FORMA CRECIENTEPOR EDAD */# include<iostream># include<conio.h>using namespace std;void main( ) { int edad1, edad2, edad3;

char nombre1[40], nombre2[40], nombre3[40];system("cls");cout<< " Ingrese nombre 1 ==> "; cin>> nombre1;cout<< " Ingrese edad 1 ==> "; cin>> edad1;cout<< " Ingrese nombre 2 ==> "; cin>> nombre2;cout<< " Ingrese edad 2 ==> "; cin>> edad2;cout<< " Ingrese nombre 3 ==> "; cin>> nombre3;cout<< " Ingrese edad 3 ==> "; cin>> edad3;cout<<endl<<endl<<endl;cout<< "LOS NOMBRES POR EDADES SERA:"<<endl<<endl;if ( edad1 < edad2)

if( edad2 < edad3)cout<< nombre1<< " "<<nombre2<< " "<<nombre3<<endl;

elseif (edad1<edad3)

cout<< nombre1<< " "<<nombre3<< " "<<nombre2<<endl;else

cout<< nombre3<< " "<<nombre1<< " "<<nombre2<<endl;else

if (edad1 <edad3)cout<< nombre2<< " "<<nombre1<< " "<<nombre3<<endl;

elseif(edad2<edad3)

cout<< nombre2<< " "<<nombre3<< " "<<nombre1<<endl;else

cout<< nombre3<< " "<<nombre2<< " "<<nombre1<<endl;

_getch( ); }

B) RESULTADOS:

29

2015PROGRAMACION ORIENTADA A OBJETOS

Page 30: Programación Orientada a Objetos

2. Escriba un programa que imprima todos los números de tres cifras que sean capicúas y cuya suma de

sus dígitos sea par.

Solucion:// cap3prob2.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/*FECHA: 10 de agosto de 2012 OBJETIVO: MUESTRA TODOS LOS NUMEROS DE TRES DIGITOS CAPICUAS Y CUYASUMA DE ESTOS ES PAR */# include<iostream># include<conio.h>using namespace std;void main( ) { int i , num,numinv, sumadigitos, digito;

system("cls");cout<< " Lista de numeros capicúas y suma dígitos par"<<endl<<endl;for (i=100; i<=999;i++) { num = i;

sumadigitos=0;numinv=0;while(num>=10)

{ digito= num%10;numinv = numinv*10+digito;

sumadigitos=sumadigitos + digito;num = num/10; }

numinv = numinv*10+num;sumadigitos=sumadigitos + num;if( (i== numinv)&& ( (sumadigitos%2)==0))

cout<<"\t\t"<< i << endl; } // FIN DEL FOR

_getch( ); }

3. En la UNI se rinde examen de admisión y de un grupo de 20 postulantes para cuatro facultades cuyos

codigos son:

Codigo Facultad ‘S’ Ing. De Sistemas

‘M’ Ing. Mecánica

‘Q’ Ing. Química

‘A’ Ing. Ambiental

La Universidad aplica tres tipos de exámenes a sus postulantes. Los postulantes que obtengan por lo

menos dos exámenes aprobados (mayor o igual a 11) son admitidos caso contrario son rechazados.

En base a esto se pide diseñar un algoritmo que permita:

a) Mostrar por cada postulante el mensaje admitido o rechazado.

b) Presentar el número de ingresantes pro facultad.

Solución:// cap2prob3.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"// OBJETIVO: LISTA INGRESANTES POR FACULTAD DE UN EXAMEN DE ADMISION */# include<iostream># include<conio.h># include<ctype.h>

30

2015PROGRAMACION ORIENTADA A OBJETOS

Page 31: Programación Orientada a Objetos

31FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS# include<stdlib.h># include<time.h>using namespace std;void main( ){ int i, conts=0,contm=0,contq=0,conta =0; int exa1, exa2, exa3, numfac; char facultad; system("cls"); srand(time(NULL)); for (i=1; i<=20;i++) { numfac = rand()%4+1; switch(numfac) { case 1 : facultad = 'S';break; case 2 : facultad = 'M';break; case 3 : facultad = 'Q';break; case 4 : facultad = 'A';break; } exa1=rand()%20+1; exa2=rand()%20+1; exa3=rand()%20+1; if(((exa1>=11)&&(exa2>=11))|| ((exa1>=11)&&(exa3>=11))||((exa2>=11)&&(exa3>=11))) { cout<<"Postulante Admitido"<<endl; switch(facultad) { case 'S' : conts=conts+1;break; case 'M' : contm=contm+1;break; case 'Q' : contq=contq+1;break; case 'A' : conta =conta+1;break; } } elsecout<<"Postulante rechazado"<<endl; } cout<< " Ingresaron a Ing. Sistemas = "<<conts<<endl;;

cout<< " Ingresaron a Ing. Mecánica = "<<contm<<endl; cout<< " Ingresaron a Ing. Química = "<<contq<<endl; cout<< " Ingresaron a Ing. Ambiental= "<<conta<<endl;

getch( );}

31

2015PROGRAMACION ORIENTADA A OBJETOS

Page 32: Programación Orientada a Objetos

4. Se desea leer un conjunto de numeros enteros de tres cifras hasta encontrar un número negativo.

Luego mostrar la cantidad de veces que aparece el digito 3 en todos los números positivos leídos.

Solucion:PROGRAMA// cap2prob4.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: Muestra cuantas veces se aparece el digito 3 en todos los números Leídos antes de encontrar un negativo.*/# include<iostream># include<conio.h># include<stdlib.h># include<time.h>using namespace std;void main( ){ int numero,d1,d2,d3,contdigitos=0;

system("cls"); while ( 1 ) {cout<<"Ingrese un numero : "; cin>>numero;

if(numero < 0 ) break; d1= numero%10;

numero=numero/10; d2=numero%10; numero=numero/10; d3 = numero; if( d3==3) contdigitos = contdigitos+1; if( d2==3) contdigitos = contdigitos+1; if( d1==3) contdigitos = contdigitos+1; } cout<< "Numero de veces que aparece el digito 3 es = "<<contdigitos<<endl; getch( ); }

EJECUCION

5. De un experimento de física se tienen que leer “N” temperaturas( entre positivas y negativas) luego

averiguar el numero de apariciones de la menor temperatura negativa.

Solucion:

32

2015PROGRAMACION ORIENTADA A OBJETOS

Page 33: Programación Orientada a Objetos

33FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSPROGRAMA/* CODIGO: cppcap2prob05 FECHA: 10 de agosto de 2012 OBJETIVO: Muestra la mayor de las temperaturas negativas y cuantas veces se presenta.*/# include<iostream.h>

# include<conio.h>

# include<ctype.h>

# include<stdlib.h>

# include<time.h>

void main( )

{

int temperatura, tempmayorneg=-20,conttemp=1;

int i,n;

clrscr( );

cout<<"Ingrese el valor n= ";

cin >>n;

randomize();

for (i=1;i<=n;i++)

{ temperatura= random(41)-20;

cout<< temperatura<<endl;

if( temperatura < 0)

{

if (temperatura == tempmayorneg)

conttemp= conttemp+1;

if(temperatura > tempmayorneg)

{tempmayorneg =temperatura;

conttemp= 1; }

}

}

cout<<endl<<endl;

cout<<"La temperatura es = " << tempmayorneg<<endl;

cout<<" Se presento: "<< conttemp << " Veces";

getch( );

}

6. Escriba un programa que genere enteros entre 1 y 13, y nos indique si los 4 valores son iguales o tres

son iguales o 2 y 2 son o solamente dos iguales y finalmente si los 4 son diferentes.(4 iguales elimina

3 iguales y los otros casos y así).

En este caso siempre se considera la jugada de mayor peso. Por ejemplo: Si obtenemos 3 3 4 3 se

considera tres 3 y ya no dos 3.

SOLUCIÓN: PROGRAMA /* CODIGO: cppcap2prob06 FECHA: 10 de agosto de 2012 OBJETIVO: Genera valores e indica si los cuatro son iguales o si tres soniguales o si dos a dos o si dos*/

33

2015PROGRAMACION ORIENTADA A OBJETOS

Page 34: Programación Orientada a Objetos

# include<iostream.h>

# include<conio.h>

# include<ctype.h>

# include<stdlib.h>

# include<time.h>

void main ()

{ int v1,v2, v3, v4;

int c0,c1,c2,c3,c4,c5,c6;

randomize();

v1 = random(13)+1;

v2 = random(13)+1;

v3 = random(13)+1;

v4 = random(13)+1;

cout<<v1<< " "<<v2<<" "<<v3<<" "<<v4<<endl;

c0 = ((v1==v3)&&(v3==v4));

c1 = ((v1==v2)&&(v2==v3));

c2 = ((v1==v2)&&(v2==v4));

c3 = ((v2==v3)&&(v3==v4));

c4 = ((v1==v2)&&(v3==v4));

c5 = ((v1==v3)&&(v2==v4));

c6 = ((v1==v4)&&(v2==v3));

if ( (v1== v2)&&(v2==v3)&&(v3==v4))

cout<<"Las cuatro son iguales"<<endl;

else

if(c0||c1||c2||c3)

cout<<"Tres son iguales"<<endl;

else

if(c4||c5||c6)

cout<<" Hay dos pares"<<endl;

else

if((v1==v2)||(v1==v3)||(v1==v4)||(v2==v3)||(v2==v4)||(v3==v4))

cout<<" Hay un solo par"<<endl;

else

cout<<"Todas son distintas"<<endl;

getch(); }

34

2015PROGRAMACION ORIENTADA A OBJETOS

Page 35: Programación Orientada a Objetos

35FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

7.- Escribir un programa que visualice el manejo de punteros utilizándolos primero con variables simple y

después con vectores numéricos y char.(cadenas)

SOLUCIÓN: PROGRAMA/* CODIGO: cppcap02prob08 FECHA: 10 de agosto de 2012 OBJETIVO: PROGRAMA QUE MANEJA PUNTEROS CON VARIABLES SIMPLES Y VECTORES*/#include<iostream.h>

#include<conio.h>

void main()

{ int a,b,c,i; int x[4];

int *p1,*p2;

char cadena1[10],cadena2[10];

char *ptc1,*ptc2;

a=10;b=9;c=19;

cout<<"USO DE PUNTEROS CON VALORES ENTEROS "<<endl;

cout<<"Valor 1: "<<a<<endl;

cout<<"Valor 2: "<<b<<endl;

cout<<"Valor 3: "<<c<<endl;

cout<<" "<<endl;

p1=&a;

cout<<" Direccion de p1 : "<<&p1<<endl;

cout<<" Direccion almacenada por p1: "<<p1<<endl;

cout<<" Hacia donde apunta p1 (a) : "<<*p1<<endl;

cout<<endl<<" HAGO EL CAMBIO DE P++"<<endl;

p1++;

cout<<" Direccion de p1 : "<<&p1<<endl;

cout<<" Direccion almacenada por p1++: "<<p1<<endl;

cout<<" Hacia donde apunta p1++ : "<<*p1<<endl<<endl;

cout<<" USO DE PUNTEROS CON VECTORES "<<endl;

for(i=1;i<=3;i++)

x[i]=i;

cout<<" Valores almacenados en el vector"<<endl;

for(i=1;i<=3;i++)

cout<<" x["<<i<<"]= "<<x[i]<<endl;

cout<<endl;

p2=x;

cout<<" Direccion de p2 : "<<&p2<<endl;

cout<<" Direccion almacenada por p2: "<<p2<<endl;

35

2015PROGRAMACION ORIENTADA A OBJETOS

Page 36: Programación Orientada a Objetos

cout<<" Direccion del vector x : "<<x<<endl;

cout<<" Contenido del campo apuntado por p2: "<<*p2<<endl;

cout<<" Hacia donde apunta p2 (x[1]): "<<p2[1]<<endl;

cout<<" Hacia donde apunta p2 (x[2]): "<<p2[2]<<endl;

p2=p2+1; cout<<endl;

cout<<" CAMBIO p2=p2++"<<endl;

cout<<" Direccion de p2 : "<<&p2<<endl;

cout<<" Direccion almacenada por p2 : "<<p2<<endl;

cout<<" Hacia donde apunta p2 : "<<*p2<<endl;

cout<<" Hacia donde apunta p2 (x[1]): "<<p2[1]<<endl;

cout<<" Hacia donde apunta p2 (x[2]): "<<p2[2]<<endl;

strcpy(cadena1,"abcdefghi");

strcpy(cadena2,"123456789");

ptc1=cadena1;

ptc2=cadena2;

cout<<" Contenido del campo apuntado por ptc1: "<<*ptc1<<endl;

cout<<" Contenido del campo apuntado por ptc2: "<<*ptc2<<endl;

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

{ cout<<(*ptc1)<<endl;

ptc1= ptc1+1; }

getch(); }

EJERCICIOS PROPUESTOS1. Escriba un programa que simule un juego de dados como en el ejemplo de este capítulo pero en cada caso debe ganar o

perder una suma, si inicialmente usted fija un pozo o sea una cantidad, el juego terminara cuando pierda todo el pozo inicial o

lo duplique.

2. Escriba un programa que genere 5 valores al azar entre 1 y 13 (cinco cartas de una baraja de casinos) y me indique si

tenemos un par, 2 pares , un trío , un full (3 iguales y dos iguales) o póker ( cuatro iguales)

3. Escriba un programa que me permita descubrir una clave de cuatro dígitos realizando todas las combinaciones posibles hasta

dar con la clave.

4. Escriba un programa que lea 5 practicas de 10 alumnos halle el promedio de cada uno de ellos y me indique cual es el mejor

promedio.

#include "stdafx.h"#include<iostream>#include<conio.h>#include<stdlib.h>#include<time.h>using namespace std;void main( ){ int nota, suma ; float promedio,mayor_prom; int i,j; system("cls"); srand(time(NULL)); for (i=1;i<=10;i++)//Controla alumnos { suma=0; for(j=1;j<=5;j++)//Controla notas(5) por alumno

{ nota=rand()%20+1; suma =suma +nota; } promedio =suma/5.0; cout<<"\t"<<"Alumno " <<i<< " Promedio = "<<promedio<<endl;

36

2015PROGRAMACION ORIENTADA A OBJETOS

Page 37: Programación Orientada a Objetos

37FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS if(i==1)

mayor_prom = promedio; else

if(promedio>mayor_prom) mayor_prom=promedio;

} cout<<"El mayor promedio sera==> "<<mayor_prom;

_getch(); }

5. Escriba un programa que me permita hallar el maximo común divisor y el mínimocomúnmúltiplo de dos valores enteros.

6. Se realizan elecciones entre tres partidos politicos,escribaun programa que me permita indicar el ganador y si además supera

el 50% será el ganador oficial en primera vuelta.

CAPITULO III

37

2015PROGRAMACION ORIENTADA A OBJETOS

Page 38: Programación Orientada a Objetos

CAPITULO IIIFUNCIONES EN LENGUAJE “C + +”

3 Definición.- Es un conjunto de instrucciones agrupadas que tienen un nombre común y que realizan

un cálculo (o proceso) especifico. Todo programa en lenguaje “C” se desarrolla basándose en

funciones, estas posteriormente pueden formar una librería particular.

3.1 Funciones Predefinidas (De biblioteca)Aquí tenemos una serie de funciones, debemos considerar

que al invocarlas debemos seguir las siguientes reglas:

Consideremos la Función sqrt

La función sqrt está incluida en la librería math.h

La invocación debe ser con el nombre o sea sqrt y el parámetro indicado o sea un valor ,

variable o expresión de tipo double. O sea sqrt(num), siendo habido sido declarado num como

doble precision.

El valor devuelto será el indicado en el prototipo o sea double precision por ejemplo un caso

sería:

double r, x ;

x= 5.0;

38

2015PROGRAMACION ORIENTADA A OBJETOS

Syntax

#include <math.h>

double sqrt(double x);

Page 39: Programación Orientada a Objetos

39FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSr=sqrt(x);

En este caso tanto la variable que servirá como argumento, como la variable que recibirá el

resultado son del tipo indicado.

A) Funciones de la librería math.h

Función abs

Retorna el valor absoluto de una variable entera, y cuando se incluye la librería stdlib.h

tambien considera valores bcd. La función fabs(double x) considera valores reales.

Ejemplo 1.- escriba un programa que lee tres valores y me imprime el mayor valor absoluto.

PROGRAMA/* CODIGO: cppcap03ejem01 FECHA: 15 de agosto 2007 OBJETIVO: ejemplo DE LA FUNCION ABS() Y FABS()*/#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <math.h>

void main()

{ int valor1;

float valor2;

double valor3,x,y z,mayor;

clrscr();

cout<<"Ingrese valor 1 ==> "; cin >>valor1;

cout<<"Ingrese valor 2 ==> "; cin >>valor2;

cout<<"Ingrese valor 3 ==> "; cin >>valor3;

x = abs(valor1);

y = abs(valor2);

z = abs(valor3);

if (x>y)

mayor= x;

else

mayor=y;

if (z>mayor)

mayor= z;

cout<<"El mayor será: "<<mayor;

getch(); }

EJECUCION

39

2015PROGRAMACION ORIENTADA A OBJETOS

#include <math.h>

#include <stdlib.h>

int abs(int x);

Page 40: Programación Orientada a Objetos

Funciones ceil y floor

Ceil retorna el entero no menor que x, o sea redondea hacia arriba y floor redondea hacia abajo.

Ejemplo 2.- Escriba un programa que calcule un promedio de 5 edades y me indique entre que

edades consecutivas se encuentra.

PROGRAMA// prog13.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: Ejemplo de las funciones ceil() y floor().*/#include <iostream>#include <conio.h>#include <stdlib.h>#include <math.h>#define n 5using namespace std; void main() { int edad,i; float promedio=0,edadprom1,edadprom2; system("cls"); for (i=1;i<=n;i++) {cout<<"Ingrese edad "<<i<<" : "; cin >>edad; promedio=promedio + edad; } promedio=promedio/n; edadprom1=floor(promedio); edadprom2=ceil(promedio); cout<<"La edad promedio se encuentra entre "<<edadprom1<< " y "<<edadprom2; _getch(); }

EJECUCION

40

2015PROGRAMACION ORIENTADA A OBJETOS

#include <math.h>

double ceil(double x);long double ceill(long double x);

double floor(double x);long double floorl(long double x);

Page 41: Programación Orientada a Objetos

41FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS Funciones sin() y cos()

Retornan el seno y coseno de un argumento que debe estar dado en radianes, argumento y retorno

son double.

Ejemplo 3.- Escriba un programa que calcule un el seno y coseno de un triangulo

rectángulonotable y compruebe que seno y coseno de los ángulos complementarios de un triangulo

rectángulo son iguales.

PROGRAMA// prog23.cpp: define el punto de entrada de la aplicación de consola./*OBJETIVO: Ejemplo de las funciones SIN() y COS().*/#include"stdafx.h"#include<iostream>#include<conio.h>#include<math.h>using namespace std; void main() { double anga,angb,senoa,cosenob; system("cls"); anga=37*3.1416/180; senoa=sin(anga); angb=53*3.1416/180; cosenob=cos(angb); cout<<"El seno de a= "<<senoa<<endl; cout<<"El coseno de b= "<<cosenob; _getch(); } EJECUCION

Función exp()

Exp() calcula el valor “e” elevado a la x.

Ejemplo 4.- Escribir un programa con exp(x)

PROGRAMA

// prog33.cpp: define el punto de entrada de la aplicación de consola./* OBJETIVO: Ejemplo de las funciones exp()*/#include "stdafx.h"#include <iostream>#include <conio.h>

41

2015PROGRAMACION ORIENTADA A OBJETOS

#include <math.h>

double cos(double x);long double cosl(long double x);

double sin(double x);long double sinl(long double x);

#include <math.h>

double exp(double x);long double expl(long double x);

Page 42: Programación Orientada a Objetos

#include <stdio.h>#include <math.h>using namespace std; void main() { double expx; double x ; system("cls"); cout<<"Ingrese x ==> "; cin>>x; expx = exp(x); printf("'e' elevado a la potencia \de %8.3f (e ^ %8.3f) = %8.3f\n", x, x, expx); _getch(); }

EJECUCION

Función log()

Retorna el logaritmo natural de x

Función log10()

Retorna el logaritmo en base 10 de x

Función pow()

Retorna x elevado a la y.

Ejemplo 5.- Escribir un programa y calcule una raiz cuadrada usando pow() y

usando sqrt(), compárelas.

PROGRAMA// prog33.cpp: define el punto de entrada de la aplicación de consola./* OBJETIVO: Utiliza pow() y sqrt() para calcular raiz cuadrada*/#include "stdafx.h"#include <iostream>#include <conio.h>

42

2015PROGRAMACION ORIENTADA A OBJETOS

Syntax

#include <math.h>

double log(double x);long double logl(long double x);

Syntax

#include <math.h>

double log10(double x);long double log10l(long double x);

Syntax

#include <math.h>

double pow(double x, double y);long double powl(long double x, long double y);

Page 43: Programación Orientada a Objetos

43FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS#include <math.h>using namespace std; void main() { double x,raiz1,raiz2 ; system("cls"); cout<<"Ingrese x ==> "; cin>>x; raiz1 = pow(x,0.5); raiz2= sqrt(x); cout<<" Utilizando pow el resultado sera = "<<raiz1<<endl; cout<<" Utilizando sqrt el resultado sera= "<<raiz2; _getch(); }

EJECUCION

B) Funciones de la librería stdio.h

Función gets()

Captura una cadena que puede contener espacio en blanco del flujo estándar.

Función printf()

Ejemplo 6.- Escribe una salida formateada en el flujo estándar de salida.

PROGRAMA

// prog53.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h" /*OBJETIVO: Utilizar la funcio gets() y la función printf().*/#include <iostream>#include <conio.h>#include <stdio.h>#include <math.h>using namespace std;void main() { char nombre[30];

43

2015PROGRAMACION ORIENTADA A OBJETOS

Syntax

#include <stdio.h>

char *gets(char *s);

Syntax

#include <stdio.h>

int printf(const char *format[, argument, ...]);

Page 44: Programación Orientada a Objetos

float nota; system("cls"); cout<<"Ingrese nombre ==> "; gets(nombre); cout<<"Ingrese nota ==> "; cin>>nota; printf("El alumno %s tiene %5.1f de nota \n",nombre,nota); //printf("Tiene %6.2f de nota",nota); _getch(); }EJECUCION

Función clock()

Ejemplo 7.- Escribe un programa que nos permita trabajar con la función clock.

PROGRAMA

/* CODIGO: cppcap03ejem07 FECHA: 15 de julio del 2012OBJETIVO: Maneja la función clock*/#include <iostream.h>

#include <conio.h>

#include <time.h>

#include <stdio.h>

#include <dos.h>

main(void)

{ int i,a=0;

clock_t inicio, fin;

inicio = clock();

for(i=1;i<=100000;i++)

{ if(i>1)

a=i;

cout<<a<<" "; }

clrscr();

fin = clock();

printf("El tiempo de inicio fue : %f\n", inicio / CLK_TCK);

printf("El tiempo de fin fue : %f\n", fin / CLK_TCK);

printf("El tiempo transcurrido fue: %f\n", (fin -inicio ) / CLK_TCK);

getch();

}

44

2015PROGRAMACION ORIENTADA A OBJETOS

Syntax

#include <time.h>

clock_t clock(void);

Page 45: Programación Orientada a Objetos

45FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSEJECUCION

Funcióntime()

Ejemplo 8.- Escribe un programa que nos permita trabajar con la función time.

Explicar.

PROGRAMA

/* CODIGO: cppcap03ejem08FECHA: 15 de julio del 2012OBJETIVO: Maneja la función time*/#include <time.h>

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#include <iostream.h>

void main(void)

{

time_t t;

t = time(NULL);

cout<<"El numero de segundos transcurridos desde el Enero 1, 1970 es "<<t;

getch();}

EJECUCION

La función cuenta los segundos transcurridos desde 1 enero 70 hasta el día actual.

Funciones que generan números aleatorios

Son las funciones randomize(), rand() y random (num).. Veamos su sintaxis de cada una de ellas.

Función rand()

45

2015PROGRAMACION ORIENTADA A OBJETOS

Syntax

#include <time.h>

time_t time(time_t *timer);

Page 46: Programación Orientada a Objetos

Genera números aleatorios entre 0 y RAND_MAX, constante definida en stdlib.h

Función randomize()

Inicializa el generador de números.

Función random(n)

Retorna valores entre 0 y num – 1.

Ejemplo 9.- Generar números aleatorios entre un cota mínima y una cotamáxima.

PROGRAMA

/* CODIGO: cppcap03ejem09 FECHA: 16 de julio del 2012OBJETIVO: Genera valores aleatorios entre dos valores dados */#include <stdlib.h>

#include <iostream.h>

#include <time.h>

#include <conio.h>

int main(void)

{

int cota_minima,cota_maxima, i ,nro_terminos;

clrscr();

cout<<"Ingrese cota mínima: ";cin>>cota_minima;

cout<<"Ingrese cota máxima: ";cin>>cota_maxima;

cout<<"Ingrese Nro. Términos: ";cin>>nro_terminos;

randomize();

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

cout<<(cota_minima+random(cota_maxima+1-cota_minima))<<endl;

getch();

return 0;

}

C) Funciones de la librería stdlib.h

Función atof()

46

2015PROGRAMACION ORIENTADA A OBJETOS

Syntax

#include <stdlib.h>

int rand(void);

Syntax

#include <stdlib.h>

#include <time.h>

void randomize(void);

Syntax

#include <stdlib.h>

int random(int num);

Page 47: Programación Orientada a Objetos

47FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Convierte de cadena a número de punto flotante.

Función atoi()

Convierte de cadena a númeroentero.

Función atol()

Convierte de cadena a numero long (entero largo).

Función itoa()

Convierte un entero a cadena.

Función ecvt()

Convierte una cadena a punto flotante..

3.2 Funciones Definidas por el Usuario.- También podemos crear nuestras propias funciones y como

mencionamos al inicio de este capítulo posteriormente podemos formar nuestra librería partícula. La

estructura de una función definida por el usuario es :

Forma General

Tipo nombrefuncion ( lista de parámetros)

{................... ;

.....................;

.....................;

[return(.....);]

.....................;

}

47

2015PROGRAMACION ORIENTADA A OBJETOS

Syntax

#include <math.h>

double atof(const char *s);long double _atold(const char *s);

Syntax

#include <stdlib.h>

int atoi(const char *s);

Syntax

#include <stdlib.h>

long atol(const char *s);

Syntax

#include <stdlib.h>

char *itoa(int value, char *string, int radix);

Syntax

#include <stdlib.h>

char *ecvt(double value, int ndig, int *dec, int *sign);

Page 48: Programación Orientada a Objetos

Donde:

Tipo .............. Tipo de valor que devuelve la función en algunos

casos no devuelven ningún valor y el tipo será

void (vacio).

nombrefuncion ......Identificador de la función

Lista de parámetros...Establecen la comunicación entre la función que

realiza la llamada y nuestra función

return( ) .....Permite retornar un valor a la función que realizo la

llamada, si la función es de tipo void no retorna valor.

Ejemplo:int primo( int p1)

{ int i, sw=1; //asumo que es primo

for( i=2; i <= (p1/2) ; i++)

if ( (p1 % i) == 0)

{ sw = 0;// si es divisible no es primo

break; }

return(sw);

}

La llamada será If ( primo(a))// a necesariamente es entero

cout<< a << “ Es primo”<< endl;

Ejemplo:void leer ( long *código, char nombre[40], char dirección[50])

{ // programa de lectura

clrscr();

cout << “ingrese código: “; cin>>*codigo;

cout << “ Ingrese nombre: “;gets(nombre); //Función de lectura

cout << “Ingrese dirección: “; gets(direccion);

}

La llamada será leer( &code, name, dire);

Si las declaraciones han sido:

long code;

char name[40];

char dire[50];

3.2.1 Ubicacion del prototipo, la llamada y la function en Lenguaje C++/* CODIGO: cppcap03ejem10 FECHA: 16 de julio del 2015*/ #include <iostream.h> #include <conio.h>// PROTOTIPO DE LA FUNCION (ES EL ENCABEZADO)

int suma(int operando1, int operando2); // LA LLAMADA SE REALIZA DE LA FUNCION MAIN

void main( )

48

2015PROGRAMACION ORIENTADA A OBJETOS

Page 49: Programación Orientada a Objetos

49FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS{ int valor1, valor2;

……………………;

……………………….;

S = suma( valor1, valor2); …………………………;

…………………………..;

…………………………..;

}// LA FUNCION SUMA DESARROLLADA

int suma ( int operando1, int operando2)

{int resultado;resultado = operando1+operando2;return (resultado) ;

}

3.2.2 Comunicación entre funciones.- La comunicación se puede realizar de dos maneras:

Vía variables Globales Vía argumentos parámetros

a)Vía variables globales.- Se realiza cuando declaranmás variables en unárea de acceso público o

sea que todas las funciones pueden acceder estas variables. Un esquema de esto seria/* CODIGO: cppcap03ejem11 FECHA: 16 de julio del 2012#include <iostream.h>

#include <conio.h>

// VARIABLES GLOBALES

int a,b,c;

49

// PROTOTIPO DE LAS FUNCIONES

void leer(void);

void multiplicar(void);

void escribir(void);

void main( )

{ // La function main no utiliza variables

leer ( );

multiplicar( );

escribir( );}

// LAS FUNCIONES QUE TRABAJAN CON VARIABLES GLOBALES

void leer( )

{cout<< “ Ingrese a: ”;

cin>> a;

cout<< “ Ingrese b: ”;

cin>> b;}

void multiplicar( )

{ c = a*b ;}

void escribir( )

2015PROGRAMACION ORIENTADA A OBJETOS

Page 50: Programación Orientada a Objetos

La comunicación es a través de las variables a, b y c. El problema es que las funciones son

dependientes de las variables. Y para cada grupo de variables hay que desarrollar funciones, para

independizar las funciones de las variables se utiliza comunicación argumentos – parámetros, que

independiza las variables de los procedimientos.

b) Vía argumentos y parámetros. Esto se establece como explicamos a continuación:

Llamada por valor y llamada por referencia.- Cuando una función es llamada se le debe enviar una

lista de argumentos que son los que establecen la comunicación entre los dos módulos. La pregunta

es, ¿Que argumentos enviar? Los argumentos enviados pueden ser valores o direcciones

dependiendo del parámetro:Si el encabezado es void f1(int p1, int p2, float *p3)Supongamos que los

argumentos son a1, a2 y a3; entonces a1 y a2 deben necesariamente generar valores simples de tipo

entero y a3 será obligatoriamente variable simple de tipo float, pero el primer parámetro y el segundo

al ser variables solamente piden valores enteros pero el tercer parámetro al ser tipo puntero pide una

dirección de una variable simple de tipo float. Entonces la llamada será:

f1 ( a1, a2, &a3);

O sea se envía el contenido de a1 y de a2 pero la dirección de a3, entonces

a1 y a2 ha sido llamadas por valor

a3 ha sido llamada por referencia

Funcionamiento de un subprograma tipo función.- Cuando aparecen el nombre de una función

seguido de una lista de argumentos f2(a1, a2, &a3, &a4) los siguientes eventos tienen lugar:

Se realiza una transferencia de valores y direcciones hacia sus respectivos parámetros. Como

lo visualizamos en el siguiente gráfico(Suponiendo que la llamada se realizo desde main):

50

main() f2()_

a1 p1

a2 p2

35

40

// LAS FUNCIONES QUE TRABAJAN CON VARIABLES GLOBALES

void leer( )

{cout<< “ Ingrese a: ”;

cin>> a;

cout<< “ Ingrese b: ”;

cin>> b;}

void multiplicar( )

{ c = a*b ;}

void escribir( )

2015PROGRAMACION ORIENTADA A OBJETOS

Page 51: Programación Orientada a Objetos

51FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Se ejecuta la función hasta que la primera sentencia return es alcanzada o termina la función.

Cuando termina la ejecución de la función sucede lo siguiente:

El control retorna al punto siguiente desde donde se realizo la llamada

Sigue la ejecución de main (En este caso).

EJEMPLO// prog13.cpp: define el punto de entrada de la aplicación de consola.//ejemplo basico de funciones

#include "stdafx.h"#include "iostream"#include "conio.h"using namespace std;float promedio(int p1,int p2,int p3,int p4,int *menor,int *mayor);int _tmain(int argc, _TCHAR* argv[]){ int a1, a2,a3,a4; float prom; int min,max; cout <<"Ingrese primer valor => ";cin>>a1; cout <<"Ingrese segundo valor => ";cin>>a2; cout <<"Ingrese tercer valor => ";cin>>a3; cout <<"Ingrese cuarto valor => ";cin>>a4; prom = promedio(a1,a2,a3,a4,&min,&max); cout<<"Promedio = "<<prom<<endl; cout<<"menor = "<<min<<endl; cout<<"mayor = "<<max<<endl; _getch();

return 0;}float promedio(int p1,int p2,int p3,int p4,int *menor,int *mayor){ int m1,m2; if(p1<p2) m1=p1; else m1=p2; if(p3<p4) m2=p3; else m2=p4; if(m1<m2) *menor=m1; else *menor=m2;

51

main() f2()_

a1 p1

a2 p2

2015PROGRAMACION ORIENTADA A OBJETOS

Page 52: Programación Orientada a Objetos

if(p1>p2) m1=p1; else m1=p2; if(p3>p4) m2=p3; else m2=p4; if(m1>m2) *mayor=m1; else *mayor=m2; return((p1+p2+p3+p4)/4.0); }

3.3 Funciones Inline.-Este tipo de funciones que se insertan directamente le dan mayor velocidad a la

ejecución, la forma de indicar una function de este tipo es colocando el especificador inline antes de

la definición de la función. Veamos el formato:

inline tipo_devuelto nombre_funcion (parámetros)

{………….;

………….;

Instrucciones;

}

La llamada será normal como a las otras funciones, pero en el cuerpo de la función no podrá haber:

Variables de tipo static

Sentencias de bucle.

Sentencia switch

Go to

Ejemplo 12.-veamos un ejemplo de uso de una función inline

PROGRAMA/ prog63.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: UTILIZA FUNCIONES INLINE. #include "stdafx.h"#include <iostream>#include <conio.h>#include <math.h>using namespace std;inline float fi (float x) {float ff; ff= pow(x,2)-x-2; return (ff);}void main(void){ float xmin,xmax,deltax,fx,x; system("cls"); cout<<"Ingrese x mínimo: ";cin>>xmin; cout<<"Ingrese x máximo: ";cin>>xmax; cout<<"Ingrese variación de x: ";cin>>deltax; x=xmin;while( x<=xmax)

52

2015PROGRAMACION ORIENTADA A OBJETOS

Page 53: Programación Orientada a Objetos

53FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS{fx=fi(x); cout<<"x= "<<x<<" f(x)= "<<fx<<endl; x=x+deltax;} _getch(); }

Fíjense que es una función con un cálculo simple pues retorna el valor de la función para un argumento

3.4 Funciones Recursivas.- Una función recursiva es una función que se llama así misma para resolver

un cálculo o proceso.

Las características de la recursividad son : En cada llamada recursiva el grado de dificultad del cálculo o proceso disminuye.

Cada llamada tendrá su propio espacio de memoria.

Habrá una llamada no recursiva en algún instante a partir del cual se solucionara el problema

a resolver.

Si tenemos el cálculo de factorial:

!N = N*!(N-1)…….. calcular el factorial de (N-1) es más sencillo que calcular el factorial de N.

Además ! 1 = 1 y ! 0 = 1 que son llamadas no recursivas y que nos permite calcular el factorial a

partir de esto.

Ejemplo 13.- Escriba un programa que halle el factorial de un numero positivo en forma recursiva.PROGRAMA// prog73.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/*OBJETIVO: Halla factorial en forma recursiva */# include<iostream># include<conio.h>using namespace std;int facto (int num);void main( ){ int n; system("cls"); cout<< " NUMERO = "; cin>> n; cout<< " FACTORIAL = "<<facto(n);getch();}/* Funcion recursiva */int facto ( int num){ cout<<" Llamada"<<endl; if (num <= 1) return(1); else return(num * facto(num-1)); } // prog73.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Halla serie de fibbonacci

#include "stdafx.h"# include<iostream># include<conio.h>using namespace std;int cont=0;int fib (int num);void main( ){ int n;//clrscr(); cout<< " NUMERO = "; cin>> n;cout<< " FIBBONACCI = "<<fib(n);getch();}

53

2015PROGRAMACION ORIENTADA A OBJETOS

Page 54: Programación Orientada a Objetos

/* Funcion recursiva */int fib ( int num){ cont++; cout<<num<<endl;

if (num <= 2) return(1); else return(fib(num-1)+fib(num-2)); }

3.5 Punteros a funciones.- También podemos devolver la dirección de una función, veamos int (*fpun) (int )será la declaración de un puntero a función que recibe un int y devuelve un int; en cambio int *fp(int ) será el prototipo de una función que recibe un int y devuelve puntero a int.

Ejemplo 14.- Escriba un programa usando el concepto de puntero a función.

PROGRAMA/* CODIGO: cppcap03ejem14 FECHA: 16 de agosto de 2012 OBJETIVO: Ejemplo de puntero a función. */# include<iostream.h>

# include<conio.h>

int* funcion1 ( int num)

{ cout <<num<<endl;

return(&num); }

int funcion2 (int num)

{ cout<<num<<endl;

return(num*2); }

void main( ){ int i,j ;

clrscr();

i=4;

j = funcion2(i); // Imprime 4

funcion2(funcion2(j));// Primera llamada imprime 8 y en la segunda imprime 16

int (*pf1)(int)=&funcion2;

pf1(i); //Imp rime 4

int* (*pf2)(int)=&funcion1;

pf2(j); //Imp rime 8

getch(); }

EJECUCION

PROBLEMASProblema 1.- EJEMPLO DE FUNCIONES QUE SE COMUNICAN MEDIANTE VARIABLES GLOBALES.

54

2015PROGRAMACION ORIENTADA A OBJETOS

Page 55: Programación Orientada a Objetos

55FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS1.- Suponga que tiene un numero “num” y una aproximación a su raíz cuadrada. Para obtener una

aproximación más exacta a la raíz cuadrada real se puede utilizar la formula: aproximaciónnueva = (n/

aproximaciónanterior)+aproximaciónanterior)/2. Utilizando esta información, escriba un programa que

solicite al usuario un número y una suposición inicial de su raíz cuadrada. Con los datos el programa

calculara una aproximación de la raíz cuadrada que sea exacta hasta 0.00001.

PROGRAMA// prog63.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Halla raíz cuadrada por aproximación*/

#include "stdafx.h"#include<iostream>#include<conio.h>#include<math.h>using namespace std;#define ERROR 0.00001float num,raiz,aprox;//VARIABLES GLOBALESvoid leer();void procesar();void mostrar();void main(){ leer();procesar();mostrar(); }void leer( ) { //clrscr(); cout<<"Ingrese el numero cuya raiz cuadrada desea "; cin>>num; cout<<"Ingrese un valor aproximado de la raíz "; cin>>aprox; }void procesar( ) { do{ raiz=aprox;//almacenar la aproximación aprox=(num/raiz + raiz)/2.0;//calcular nueva aproximación cout<<"Nueva Aproximacion "<<aprox<<endl; }while(fabs(aprox-raiz)>ERROR); _getch(); }void mostrar(){ cout<<endl<<endl; cout<<"La Raiz cuadrada es "<<aprox<<endl; _getch(); }

2.- Escriba un programa que utilizando comunicación vía argumentos y parámetros, pueda calcular la nota

final, considerando que el promedio de prácticas se halla eliminando la menor nota de las cuatro

prácticas, la nota final se hallara

Promedio de prácticas = (practica 1+practica 2 + practica 3 + practica 4 – menor)/3.0

Nota Final = (promedio practicas+ examen parcial + 2*examen parcial)/4.0

SOLUCION: PROGRAMA// PROG73.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Halla nota final con el sistema F

#include "stdafx.h"#include<iostream>

55

2015PROGRAMACION ORIENTADA A OBJETOS

Page 56: Programación Orientada a Objetos

#include<conio.h>#include<math.h>using namespace std;void leer(float &n1,float &n2,float &n3, float &n4);float menor(float n1,float n2,float n3, float n4 );void main(){float EXP, EXF, PFIN,EXS;

float a,b,c,d,PP,MEN;leer(a,b,c,d);cout<<"\n La menor practica es = "<<menor(a,b,c,d);MEN=menor(a,b,c,d);PP=((a+b+c+d)-MEN)/3.0;cout<<"\n Ingrese la nota del parcial :";cin>>EXP;cout<<"\n Ingrese la nota del FINAL :";cin>>EXF;cout<<"\n El promedio de prácticas es :"<<PP; PFIN=(PP+EXP+2*EXF)/4.0;cout<<"\n El Promedio Final es :"<<PFIN<<endl;//redondea por exceso

if(PFIN>=10)cout<<"Su promedio final es: "<<PFIN<<endl;elseif(PP>6.0) {cout<<"Ingrese el Examen Sustitutorio: ";cin>>EXS;if(EXP) PFIN=(PP+EXS+2*EXF)/4.0;if(EXF) PFIN=(PP+EXP+2*EXS)/4.0;cout<<"Su promedio final es: "<<PFIN<<endl;}getch();}

void leer(float &n1,float &n2,float &n3, float &n4){cout<<"\nIngrese las practicas dejando espacio :"; cin>>n1>>n2>>n3>>n4; }

float menor(float n1,float n2,float n3, float n4 ){ float men;men=n1;if(n2<men)men=n2;if(n3<men)men=n3;if(n4<men)men=n4;return ( men); }

3.- Este programa halla una raíz positiva de la ecuación cubica x3−x2−x−1=0

, en el intervalo [0,5]

con un error menor que 0.001.

PROGRAMA// prog83.cpp: define el punto de entrada de la aplicación de consola.//metodo de biseccion

#include "stdafx.h"# include<iostream># include<math.h># include<conio.h>using namespace std;#define error 0.0001//# define x0 0.0

56

2015PROGRAMACION ORIENTADA A OBJETOS

Page 57: Programación Orientada a Objetos

57FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS//# define x1 5.0float fcub(float x);float bisecar(float a, float b);/*Programa principal*/void main( ){ float x0,x1;//clrscr();cout<<"Ingrese intervalo donde se encuentra la raiz"<<endl;cout<<"Ingrese xmin : ";cin>>x0;cout<<"Ingrese xmax : ";cin>>x1;cout<< " RAIZ = "<< bisecar( x0,x1);getch(); }/* Funciones*/float fcub(float x){ return( pow(x,3) - pow(x,2) - x -1);}float bisecar(float a, float b) {float r ,medio ;while ( fabs(a-b)>= error) {cout<<fabs(a-b)<<endl; medio = (a+b)/2.0; if ((fcub(a) * fcub(medio))<= 0) b= medio; else a= medio; } r = a;return( r ); }

4.- Escriba un programa que calcule la planilla para un trabajador, los datos que tienen que considerarse

son:

Nombre : Nombre del empleado es una cadena de 40 caracteres.

Código : Código del empleado es una cadena de 11 caracteres.

Sueldo bruto : Sueldo mensual que percibe el empleado.

Faltas : Se le descontara 1/30 del sueldo bruto por cada falta.

Horas extras : Se le pagara (1/(30*8))*1.5 por cada hora extra.

Seguro : Por afp (1) será 13 % de descuento del total a percibir

Por ssp(2) será 11% de descuento del total a percibir.

Por ninguna(0)será 7% de descuento del total a percibir.

57

2015PROGRAMACION ORIENTADA A OBJETOS

Page 58: Programación Orientada a Objetos

Bonificaciones: Tiempo de servicio (0=no,1=si), 5% del bruto.

PROGRAMA// prog93.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: CALCULO DE PLANILLA PARA UN TRABAJADOR.

#include "stdafx.h"# include<iostream># include<stdio.h># include<conio.h>using namespace std;void leer( char nombre[40], char código[11],float *sueldob,int *faltas,int *horase,int *seguro,int *bonif);float calcular_neto(float sueldob,int faltas,int horase,int seguro,int bonif,float *descuento);void imprimir_boleta(char n[40],char c[11],float descuento,float sueldon);void main( ){ char name[40],code[11];float sb,de,sn;int fa,he,seg,bon;//clrscr();leer(name,code,&sb, &fa,&he,&seg,&bon);sn= calcular_neto(sb,fa,he,seg,bon,&de); imprimir_boleta(name,code,de,sn);_getch(); }/* Funciones*/void leer( char nombre[40], char codigo[11],float *sueldob,int *faltas,int *horase,int *seguro,int *bonif){ //clrscr;cout<<"Ingrese nombre ==> ";gets(nombre);cout<<"Ingrese codigo ==> ";gets(codigo);cout<<"Ingrese sueldo bruto ==> ";cin>> (*sueldob);cout<<"Ingrese faltas ==> ";cin>> (*faltas);cout<<"Ingrese horas extras ==> ";cin>> (*horase);cout<<"Ingrese seguro (0=ninguno,1=afp,2=ssp) ==> ";cin>> (*seguro);cout<<"Ingrese bonificaciones(0=No,1=Si)==> ";cin>> (*bonif); }float calcular_neto(float sueldob,int faltas,int horase,int seguro,int bonif,float *descuento) { float neto,sumabonif,des; //calculo de bonificacionessumabonif=0;sumabonif=sumabonif+horase*(sueldob/240)*1.5;if(bonif==1)sumabonif=sumabonif+sueldob*0.05;//calculo de descuentosdes=0;des = des + (sueldob/30)* faltas;if (seguro==1) (*descuento)= (sueldob+sumabonif-des)*0.13;elseif(seguro==2) (*descuento)= (sueldob+sumabonif-des)*0.11;else (*descuento)= (sueldob+sumabonif-des)*0.07; (*descuento)=(*descuento)+des;neto = sueldob - (*descuento)+ sumabonif;return (neto); }void imprimir_boleta(char n[40],char c[11],float descuento,float sueldon) { //clrscr();cout<<" Nombre : "<<n<<endl;cout<<" Codigo : "<<c<<endl;cout<<" Descuento: "<<descuento<<endl;cout<<" Neto a >Recibir : "<<sueldon<<endl; }

58

2015PROGRAMACION ORIENTADA A OBJETOS

Page 59: Programación Orientada a Objetos

59FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

EJECUCION

5- Escriba un programa que halle los factores primos de un número en forma recursiva.

PROGRAMA

/* CODIGO: CPPCAP03PROB06

FECHA: 16 DE AGOSTO DE 2012

OBJETIVO: Halla factores primos en forma recursiva */

# include<iostream.h>

# include<math.h>

# include<conio.h>

void fprimo(int num);

void main( ){ int n;

clrscr();

do{

cout<< " NUMERO = ";

cin>> n;

}while(n<1);

fprimo(n);

getch();

}

void fprimo( int num){

int nr, k =1;

59

2015PROGRAMACION ORIENTADA A OBJETOS

Page 60: Programación Orientada a Objetos

if (num > 1)

{do {

k = k +1;

} while( (num % k) != 0);

cout<< " "<< k <<" ";

nr = num / k;

fprimo( nr);

}

}

EJERCICIOS PROPUESTOS1. Escriba un programa que utilizando funciones pueda realizar operaciones con números complejos:

Suma, Resta, Multiplicación y División. Cada operación debe realizarse con funciones además de la

lectura y escritura. Debe trabajar con un menú.

2. Escriba un programa que calcule áreas, debe calcular áreas para cuadrados, rectángulos, triángulos y

círculos; cada calculo debe realizarse con una función.

3. Escriba un programa que resuelva el mismo problema de planilla (problema 4)pero considere que hay

tres tipos de bonificaciones.

Tiempo de servicio (5%)

Carga familiar (5%)

Remuneración por dirección (10%)

4. Escriba un programa que utilizando el concepto de puntero a funciones evalúe una función para un

argumento variando en un rango de valores determinado.

5. Escriba un programa que me permita hallar la nota final de un alumno que rindió 4 practicas y 2

exámenesconsidere, que el sistema de evaluación puede ser:

Sistema A : promedio de prácticas es el promedio de las cuatro practicas y el promedio final es la

suma de los dos exámenes mas el promedio de prácticas divididos entre tres.

Sistema B : promedio de prácticas es el promedio de tres practicas eliminando la menor y el

promedio final es la suma del primer examen más el segundo examen duplicado el promedio de

prácticas divididos entre cuatro.

6. Escriba un programa que resuelva el problema de las torres de Hanói para n discos utilizando una

función recursiva. En las torres de Hanói se trata de pasar “n discos” de un eje “Origen” a un eje

“Destino” utilizando un eje auxiliar. Las reglas son :

Solo se puede mover un disco a la vez.

Nunca un disco de mayor diámetro puede estar sobre un disco de menor diámetro.

60

2015PROGRAMACION ORIENTADA A OBJETOS

Page 61: Programación Orientada a Objetos

61FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO IV

61

2015PROGRAMACION ORIENTADA A OBJETOS

Page 62: Programación Orientada a Objetos

CAPITULO IV

ARREGLOS EN LENGUAJE “C”4.1 Definición.- Un arreglo es una colección de elementos del mismo tipo; por lo tanto es una estructura

homogénea. Su declaración se realiza indicando al compilador sus características que son tipo,

nombre y tamaño. Ejemplo:

int datos[10];la información que se entrega al compilador será:

Nombre del arreglo: datos Tipo de componente: variable simple entera

Tamaño 10 elementos

Nombre de las componentes:

datos[0]

datos[1]

datos[2]

datos[3]

datos[4]

datos[5]

datos[6]

datos[7]

datos[8]

datos[9]

4.2 Acceso a elementos.- Los elementos de un arreglo se designan con un subíndice que comienza en

cero: int a[4] : a[0], a[1], a[2], a[3].

Un arreglo se puede inicializar así : int a[4] = { 20, 25, 35, 40}

a[0]

a[1]

a[2]

62

25

40

35

2015PROGRAMACION ORIENTADA A OBJETOS

20

Page 63: Programación Orientada a Objetos

63FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS a[3]

4.3 Operaciones con Arrays unidimensionales (vectores).- Las operaciones iníciales son las de lectura

y escritura, las cuales vamos a ver en el siguiente programa ejemplo:

4.4 Ejemplo 1.- Lee e imprime un vector de “n” elementos.

PROGRAMA// prog14.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Entrada y salida de un vector #include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ int a[50],n,i; system("cls"); //Lectura cout << " Ingrese n => "; cin >> n; for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> a[i]; } system("cls"); //Escritura cout<<" SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) { cout<< a[i]<< endl;} _getch(); }

// prog14a.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Entrada y salida de un vector #include "stdafx.h"#include<iostream>#include<conio.h>#include<stdlib.h>#include<time.h>using namespace std;void main( ){ int nota[50],n,i; system("cls"); //Lectura srand(time(NULL)); cout << " Ingrese n => "; cin >> n; for (i=1;i<=n;i++) { nota[i] =rand()%20+1; } system("cls"); //Escritura cout<<" SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) { cout<<"\t"<< nota[i]<< endl;} _getch(); }

Operaciones con arreglos: Las demás operaciones las analizaremos algorítmicamente y después los

presentaremos en un menú en los problemas desarrollados.

Las operaciones más importantes con arreglos unidimensionales son :

Adición

Eliminación

63

2015PROGRAMACION ORIENTADA A OBJETOS

Page 64: Programación Orientada a Objetos

Búsqueda

Ordenamiento

ADICION: La operación de adición nos permite ingresar un elemento al vector de “n” componentes que

están siendo utilizadas.

Inicialmente tenemos: Vector A

N = 6

A [1] A [2] A [3] A [4] A [5] A[6] A[7]

3 5 12 20 15 25

J= 4

X

Vamos a insertar el valor x = 14 en la posición j=4

Tener en cuenta que al insertar un nuevo valor el vector crecerá en un elemento.

Al finalizar los valores deberían estar en las siguientes posiciones:

A[1] = 3, A[2] = 5, A[3] = 12, A[4] = 14, A[5] = 20, A[6] = 15, A[7] = 25.

Para realizar esta operación necesitamos tres pasos:

a) Realizar un corrimiento de una posición hacia la derecha de todos los valores desde la posición “N”

(N=6) hasta la posición “J” (J=4), el resultado sería:

N = 6

A [1] A [2] A [3] A [4] A [5] A[6] A[7]

3 5 12 20 20 15 25

El algoritmo es:

Para i = N,J,-1

A[i+1] A[i]

Fin Para

b) Adicionar el elemento X en la posición J

A[J] X

El resultado seria

N = 6

A [1] A [2] A [3] A [4] A [5] A[6] A[7]

3 5 12 14 20 15 25

c) Actualizar “N”

N = N +1

N = 7

64

14

2015PROGRAMACION ORIENTADA A OBJETOS

Page 65: Programación Orientada a Objetos

65FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS A [1] A [2] A [3] A [4] A [5] A[6] A[7]

3 5 12 14 20 15 25

Las instrucciones en Visual C++ serán:

PROGRAMA// prog24.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: adicion por inserción a un vector #include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;void main( ){ int a[50],n,i; int x,j; system("cls"); //Lectura cout << " Ingrese n => "; cin >> n; for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> a[i]; } system("cls"); //Escritura cout<<" SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) { cout<<" "<< a[i]<< endl;} //insercion del valor x en posicion j cout<<"Ingrese posicion de insercion: ";cin>> j; cout<<"Ingrese valor a insertar : "; cin>> x; for( i=n; i>=j; i--)

a[i+1] = a[i]; a[j] = x; n = n +1; //Escritura cout<<" SALIDA CON INSERCION"<<endl<<endl; for ( i=1; i<=n;i++) { cout<<" "<< a[i]<< endl;} _getch(); }

EJECUCION

65

cout<<"Ingrese posición de inserción: ";

cin>> j;

cout<<"Ingrese valor a insertar : ";

cin>> x;

for( i=n; i>=j; i--)

v[i+1] = v[i];

v[j] = x;

n = n +1;

2015PROGRAMACION ORIENTADA A OBJETOS

Page 66: Programación Orientada a Objetos

ELIMINACION: La operación de eliminación nos permite sacar un elemento del vector de “n”

componentes que están siendo utilizadas.

Inicialmente tenemos: Vector A

N = 6

A [1] A [2] A [3] A [4] A [5] A[6]

3 5 12 20 15 25

J= 3

Vamos a eliminar el tercer elemento del vector.

Finalmente deberíamos tener A[1] = 3, A[2] = 5, A[3] = 20, A[4] = 15, A[5] = 25.

Y “N” decrecería y seria 5.

Para realizar esta operación necesitamos dos pasos:

a) Realizar un corrimiento de una posición hacia la izquierda todos los valores desde la

posición “J+1” (J=3) hasta la posición “N” (N=6).:

N = 6

A [1] A [2] A [3] A [4] A [5] A[6]

3 5 20 15 25 25

El algoritmo es:

Para i = J+1,N

A[i-1] A[i]

Fin Para

b) Actualizar “N”.

NN-1

El resultado seria

N = 5

A [1] A [2] A [3] A [4] A [5]

3 5 20 15 25

Las instrucciones en Visual C++ serán:

66

cout<<"Ingrese posición de valor a eliminar : ";cin>> j;

for( i=j+1 ; i<=n;i++)v[i-1] = v[i];

n = n - 1;

2015PROGRAMACION ORIENTADA A OBJETOS

Page 67: Programación Orientada a Objetos

67FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

// prog34.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Eliminacion #include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;void main( ){ int a[50],n,i; int j; system("cls"); //Lectura cout << " Ingrese n => "; cin >> n; for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> a[i]; } system("cls"); //Escritura cout<<" SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) { cout<<"\t"<< a[i]<< endl;} //Eliminacion del valor en posicion "j" cout<<"Ingrese posicion del valor a eliminar: ";cin>> j; for( i=j+1; i<=n; i++)

a[i-1] = a[i]; n = n -1; //Escritura cout<<" SALIDA ELIMINACION"<<endl<<endl; for ( i=1; i<=n;i++) { cout<<"\t"<< a[i]<< endl;} _getch(); }

BUSQUEDA: La operación de búsqueda es una de las más importantes. En todo proceso real siempre se

buscara un elemento dentro de un conjunto, o sea buscaremos información dentro de la data, labor

fundamental en informática.

La operación buscara un elemento X en un vector A de N elementos.

N = 6

A [1] A [2] A [3] A [4] A [5] A[6] A[7]

3 5 12 20 15 25

¿X=A[1]? ¿X=A[2]? …… ¿X=A[i]?

X

Tenemos que tener en cuenta que la búsqueda terminara cuando encontremos el elemento buscado o

cuando llegamos al final de la estructura.

Algorítmicamente seria:

67

19

2015PROGRAMACION ORIENTADA A OBJETOS

Page 68: Programación Orientada a Objetos

1.- Leer (x)

2.- Para i= 1,n

2.1 Si (A[i]==x)

Entonces

2.1.1 pos i

2.1. 2 break;

Fin si

Fin Para

3.- Si ( x == A[i])

Entonces

3.1Escribir( “Valor hallado en posición “, pos)

Sino

3.2 Escribir( “Valor no hallado”)

Fin si

Las instrucciones en Visual C++ serán:

PROGRAMA// prog44.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Operacion de bUSQUEDA #include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ int a[50],n,i; int x,pos; system("cls"); //Lectura cout << " Ingrese n => "; cin >> n; for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> a[i]; } system("cls"); //Escritura cout<<" SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) { cout<<"\t"<< a[i]<< endl;} //Busqueda de un valor "x" cout<<"Ingrese valor a buscar : "; cin>> x;

68

cout<<"Ingrese valor a buscar : ";

cin>> x;

for( i=1;i<=n;i++)

if ( v[i]== x)

{ pos = i;

break ; }

if ( v [i ]== x)

cout<< " Valor hallado en posición: "<<pos;

else

cout<< " Valor no hallado ";

2015PROGRAMACION ORIENTADA A OBJETOS

Page 69: Programación Orientada a Objetos

69FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS for( i=1;i<=n;i++)

if ( a[i]== x) { pos = i; break ; }

if ( a[i ]== x) cout<< " Valor hallado en posicion: "<<pos<<endl;

else cout<< " Valor no hallado "<<endl;

_getch(); }

EJECUCION

ORDENAMIENTO: La operación de ordenamiento se realiza por etapas, en nuestro algoritmo por

comparación trataremos de poner el menor valor en la posición superior, pero en cada etapa ya no

participa el menor ya encontrado en la etapa anterior.

El método busca colocar el primer menor en la posición 1 en la etapa 1.

Colocar el segundo menor en la posición 2 en la etapa 2.

colocar el tercer menor en la posición 3 en la etapa 3.

En general se trata de colocar el i’esimo menor en la posición “i” en la etapa “i”.

Veamos

ETAPA 1OBJETIVO. Llevar el menor 1(menor total) a la primera posición.

¿A[1] > A [2]? Si la respuesta es sí, se intercambian posiciones entre A[1] y A[2], como en este caso

A [1] A [2] A [3] A [4] A [5] A[6] A[7]

9 3 2 7 6 4 5

Después del intercambio tenemos

A [1] A [2] A [3] A [4] A [5] A[6] A[7]

3 9 2 7 6 4 5

¿A[1] > A [3]?. Si entonces.

A [1] A [2] A [3] A [4] A [5] A[6] A[7]

2 9 3 7 6 4 5

¿A[1] > A [4]?. No

¿A[1] > A [5]?. No

69

2015PROGRAMACION ORIENTADA A OBJETOS

Page 70: Programación Orientada a Objetos

¿A[1] > A [6]?. No

¿A[1] > A [7]?. No

ETAPA 2OBJETIVO. Llevar el menor 2(segundo menor ) a la segunda posición

Verificar que en la segunda etapa ya no participa el primer menor , pues ya encontró su posición final.

A [2] A [3] A [4] A [5] A[6] A[7]

9 3 7 6 4 5

¿A[2] > A [3]?. Si

A [2] A [3] A [4] A [5] A[6] A[7]

3 9 7 6 4 5

¿A[2] > A [4]?. No

¿A[2] > A [5]?. No

¿A[2] > A [6]?. No

¿A[2] > A [7]?. NoETAPA 3

OBJETIVO. Llevar el menor 3(tercer menor ) a la tercera posición

Verificar que en la tercera etapa ya no participa el primer menor y el segundo menor, pues ya alcanzaron

su posición final.

A [3] A [4] A [5] A[6] A[7]

9 7 6 4 5

¿A[3] > A [4]?. Si. Intercambiar entre A[3] y A[4]

A [3] A [4] A [5] A[6] A[7]

7 9 6 4 5

¿A[3] > A [5]?. Si. Intercambiar entre A[3] y A[5]

A [3] A [4] A [5] A[6] A[7]

6 9 7 4 5

¿A[3] > A [6]?. Si. Intercambiar entre A[3] y A[6]

A [3] A [4] A [5] A[6] A[7]

4 9 7 6 5

¿A[3] > A [7]?. No.

ETAPA 4OBJETIVO. Llevar el menor 4 (Cuarto menor ) a la cuarta posición

70

2015PROGRAMACION ORIENTADA A OBJETOS

Page 71: Programación Orientada a Objetos

71FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSA [4] A [5] A[6] A[7]

9 7 6 5

¿A[4] > A [5]?. Si

A [4] A [5] A[6] A[7]

7 9 6 5

¿A[4] > A [6]?. Si

A [4] A [5] A[6] A[7]

6 9 7 5

¿A[4] > A [6]?. Si

A [4] A [5] A[6] A[7]

5 9 7 6

ETAPA 5OBJETIVO. Llevar el menor 5 (Quinto menor ) a la quinta posición

A [5] A[6] A[7]

9 7 6

¿A[5] > A [6]?. Si

A [5] A[6] A[7]

7 9 6

¿A[5] > A [7]?. Si

A [5] A[6] A[7]

6 9 7

ETAPA 6 Se ordenan n (7) valores en n-1 etapas (6)OBJETIVO. Llevar el menor 6 (Sexto menor ) a la sexta posición

A[6] A[7]

9 7

¿A[5] > A [6]?. Si

A[6] A[7]

7 9

Volvemos a verificar el vector y tendremos

A [1] A [2] A [3] A [4] A [5] A[6] A[7]

2 3 4 5 6 7 9

Planteando la i’esima etapa dentro de las n-1 etapas, en forma algorítmica tenemos.1.- Para i= 1, n-1 // Numero de etapas

1.1.- Para j= i+1, n

71

2015PROGRAMACION ORIENTADA A OBJETOS

Page 72: Programación Orientada a Objetos

1.1.1 Si ( A[i] > A[j])

Entonces

Temp A[i]

A[i] A(j)

A[j] temp

Fin si

Fin para

Fin Para

Programando en Visual C++:

PROGRAMA

// prog54.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Operacion de ORDENAMIENTO #include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ int a[50],n; int i,j,temp; system("cls"); //Lectura cout << " Ingrese n => "; cin >> n; for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> a[i]; } system("cls"); //Escritura cout<<" SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) { cout<<" "<< a[i]<< endl;} //ORDENAMIENTO DEL VECTOR a for ( i=1; i<n ;i++) //Maneja etapas

for (j=i+1;j<=n;j++) //Maneja comparaciones en cada etapaif( a[i]> a[j]) { temp = a[i];

a[i] = a[j]; a[j] = temp ;}

//Escritura cout<<" SALIDA VECTOR ORDENADO "<<endl<<endl; for ( i=1; i<=n;i++) { cout<<" "<< a[i]<< endl;} _getch(); }

72

2015PROGRAMACION ORIENTADA A OBJETOS

int i,j,temp;

for ( i=1; i<n ;i++)

for (j=i+1;j<=n;j++)

if( v[i]> v[j])

{ temp = v[i];

v[i] = v[j];

v[j] = temp ;}

Page 73: Programación Orientada a Objetos

73FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSEJECUCION

PROGRAMAS BASICOS CON ARREGLOS UNIDIMENSIONALESEjemplo 2.- Realizar una adición al final del vector

PROGRAMAEjemplo 3.- Realizar una eliminación en cualquier lugar del vector// prog24.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: ADICIONAR UN ELEMENTO AL FINALIZAR EL VECTOR #include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ int vector[50],n,i,x,j; system("cls"); //Lectura cout << " Ingrese n => "; cin >> n; for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> vector[i];} system("cls"); //Escritura cout<<" SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) { cout<< vector[i]<< endl;} _getch(); system("cls"); cout<<" Ingrese el valor para adicionar==> ";cin>>x; cout<<" Ingrese la posicion de adicion ==> ";cin>>j; for ( i=n; i>=j;i--) vector[i+1]=vector[i]; vector[j]=x; n=n+1; cout<<" NUEVA SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) { cout<< vector[i]<< endl;} _getch();}

PROGRAMA// prog34.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Eliminar un elemento de un vector(En la posición j) */#include "stdafx.h"# include<iostream># include<conio.h>using namespace std;

73

2015PROGRAMACION ORIENTADA A OBJETOS

Page 74: Programación Orientada a Objetos

void main( ){ int vector[50],n,i,j; system("cls"); //Lectura cout << " Ingrese n => "; cin >> n;for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> vector[i]; } system("cls"); //Escrituracout<<" SALIDA "<<endl<<endl;for ( i=1; i<=n;i++) { cout<< vector[i]<< endl;}_getch();system("cls");cout<<" Ingrese posición del valor a eliminar ";cin>>j;for( i=j+1 ; i<=n;i++) vector[i-1] = vector[i];n=n-1;cout<<" NUEVA SALIDA "<<endl<<endl;for ( i=1; i<=n;i++) { cout<< vector[i]<< endl; }_getch(); }

Ejemplo 4.- Realizar una búsqueda binaria sobre un vector ordenado.

PROGRAMA// prog44.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Realizar una búsqueda binaria sobre un vector ordenado */#include "stdafx.h"# include<iostream># include<conio.h>using namespace std;void main( ){ int vector[50],n,i,x; int inicio,final,medio,encontrado=0; system("cls"); //Lectura cout << " Ingrese n (Para vector ordenado) => "; cin >> n; for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> vector[i];} int j,temp; for ( i=1; i<n ;i++)

for (j=i+1;j<=n;j++) if( vector[i]> vector[j]) { temp = vector[i];

vector[i] = vector[j]; vector[j] = temp ;}

system("cls"); //Escritura cout<<" SALIDA VECTOR ORDENADO "<<endl<<endl; for ( i=1; i<=n;i++) { cout<< vector[i]<< endl;} _getch(); system("cls"); inicio = 1; final = n; cout<<"Ingrese numero a buscar ==> ";cin>>x; while((inicio<=final)&&(!encontrado)) {medio = (inicio+final)/2; if(x==vector[medio]) encontrado = 1; else if(x>vector[medio]) inicio =medio;

74

2015PROGRAMACION ORIENTADA A OBJETOS

Page 75: Programación Orientada a Objetos

75FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS else final = medio; } cout<<endl; cout<<"MENSAJE "<<endl; if (encontrado) cout<<"El numero esta en posición: "<<medio<<endl; else cout<<"Valor no hallado ... "; _getch(); }

Ejemplo 5.- Realizar un ordenamiento usando la definición de vector

ordenado.x1<=x2<=x3<=x4…….<=xn.

PROGRAMA// prog54.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Ordenamiento x1<=x2<=x3.... */#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;void main( ){ int vector[50],n,i; int cambio,temp; system("cls"); //Lectura cout << " Ingrese n => "; cin >> n; for (i=1;i<=n;i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> vector[i];} system("cls"); //Escritura cout<<" SALIDA "<<endl<<endl; for ( i=1; i<=n;i++) {cout<< vector[i]<< endl; } _getch(); system("cls"); cambio=1; while (cambio) { cambio=0; for(i=1;i<n;i++) if (vector[i]>vector[i+1]) { temp=vector[i]; vector[i]=vector[i+1]; vector[i+1]= temp; cambio=1;

cout<<"cambio"<<endl;} } cout<<" SALIDA ORDENADA"<<endl<<endl; for ( i=1; i<=n;i++) { cout<< vector[i]<< endl;} _getch(); }

DE DOS DIMENSIONES( MATRICES)4.5 Definición.- Una matriz es un arreglo de 2 dimensiones donde el primer subíndice indica fila y el

segundo subíndice indica columna. Consideremos la siguiente declaración:

const float maxf=10;

const float maxc=20;

float matriz[maxf][maxc];

75

2015PROGRAMACION ORIENTADA A OBJETOS

Page 76: Programación Orientada a Objetos

Estamos declarando una matriz de 10 filas por 20 columnas. La primera fila será: matriz[0] [[0],

matriz[0][1], matriz[0][2],......................, matriz[0][19]

4.6 Operaciones con matrices: Ejemplo 6.- El procedimiento para leer una matriz será:

PROGRAMA// prog64.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Lectura y Escritura de una matriz #include "stdafx.h"#include<iostream>#include<conio.h>#include <stdlib.h>#include <time.h>using namespace std;void leer(int x[20][20],int *nf, int *nc);void mostrar(int x[20][20], int nf, int nc);void main( ){ int mat[20][20],nf,nc; leer(mat,&nf,&nc); mostrar(mat,nf,nc); } void leer(int x[20][20],int *nf, int *nc){ int i, j ; system("cls"); srand(time(NULL)); cout<<"Ingrese # filas de la matriz: "; cin>> *nf; cout<<"Ingrese # columnas de la matriz: "; cin>> *nc;//randomize(); for(i = 1; i<=(*nf); i++)

for(j =1;j<=(*nc); j++) { //cout<<"x["<<i<<"]["<<j<<"]= ";cin>>x[i][j];

x[i][j]= rand()%20+1;} } void mostrar(int x[20][20], int nf, int nc) {int i, j ; for(i=1; i<=nf; i++) {for(j=1; j<=nc; j++)

cout<<x[i][j] << " "; cout<<endl; } _getch( ); }

Ejemplo: Halla promedios por fila// prog84.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Lectura y Escritura de una matriz #include "stdafx.h"#include<iostream>#include<conio.h>#include <stdlib.h>#include <time.h>using namespace std;void leer(int x[20][20],int *nf, int *nc);void mostrar(int x[20][20], int nf, int nc);void main( ){ int mat[20][20],nf,nc; int i,j; float prom[20]; leer(mat,&nf,&nc); mostrar(mat,nf,nc); for(i = 1; i<=(nf); i++) {prom[i]=0;

for(j =1;j<=(nc); j++) { prom[i]=prom[i]+float(mat[i][j]);}

prom[i] = prom[i]/nc;} cout<<" "<< "PROMEDIO POR FILA"<<endl; for(i=1;i<=nf;i++)

cout<<"Fila "<<i<< "= "<<prom[i]<<endl;

76

2015PROGRAMACION ORIENTADA A OBJETOS

Page 77: Programación Orientada a Objetos

77FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS _getch();

} void leer(int x[20][20],int *nf, int *nc){ int i, j ; system("cls"); srand(time(NULL)); cout<<"Ingrese # filas de la matriz: "; cin>> *nf; cout<<"Ingrese # columnas de la matriz: "; cin>> *nc;//randomize(); for(i = 1; i<=(*nf); i++)

for(j =1;j<=(*nc); j++) {

x[i][j]= rand()%20+1;} } void mostrar(int x[20][20], int nf, int nc) {int i, j ; for(i=1; i<=nf; i++) {for(j=1; j<=nc; j++)

cout<<x[i][j] << " "; cout<<endl; } _getch( ); }

Ejemplo 7.-Procedimiento para multiplicar una matriz

PROGRAMA// prog74.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: MULTIPLICACION DE MATRICES */#include "stdafx.h"#include<iostream> #include<conio.h> #include<stdlib.h> #include<time.h>using namespace std; void leer(int x[20][20],int *n); void m_mat(int a[20][20],int n1,int b[20][20],int n2,int c[20][20], int *n3); void mostrar(int x[20][20],int n);void main() { int n1,n2,n3; int a[20][20],b[20][20],c[20][20]; leer(a,&n1); leer(b,&n2); m_mat(a,n1,b,n2,c,&n3); }void leer(int x[20][20],int *n){ int i,j; cout<<"Ingrese el orden de la matriz: ";cin>>*n; srand(time(NULL));

for(i=1;i<=(*n);i++)for(j=1;j<=(*n);j++){ x[i][j]= rand()%20+1;

} mostrar(x,*n); } void m_mat(int a[20][20],int n1,int b[20][20],int n2,int c[20][20], int *n3){ int i,j,k; cout<<"\nEl producto de las matrices es:"<<endl; if(n1==n2) { for(i=1;i<=n1;i++)

for(j=1;j<=n2;j++) { c[i][j]=0; for(k=1;k<=n1;k++)

c[i][j]=c[i][j]+a[i][k]*b[k][j];} } mostrar(c,n1); } void mostrar(int x[20][20], int n) {int i, j ; cout<<”Salida”<<endl; for(i=1; i<=n; i++) {for(j=1; j<=n; j++)

cout<<x[i][j] << " "; cout<<endl; } _getch( ); }

77

2015PROGRAMACION ORIENTADA A OBJETOS

Page 78: Programación Orientada a Objetos

PROBLEMAS1.- Dado un vector de números enteros escriba un programa que me permita hallar el número que más veces se repite (MODA).

EJECUCION

78

2015PROGRAMACION ORIENTADA A OBJETOS

// prog84.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: Halla la moda de un conjunto de números enteros #include "stdafx.h"# include <iostream># include <conio.h>using namespace std;void lectura (int a[50], int *n);void orden(int a[50], int n);int moda (int a[50], int n);void mostrar(int a[50], int n);void escritura(int mo);void main( ){ int a[50]; int n,mo; system("cls"); lectura (a, &n); mostrar(a,n); orden(a,n); mostrar(a,n); mo=moda (a,n); escritura(mo); }// Función que realiza la lecturavoid lectura(int a[50], int *n) { int i; system("cls"); cout << " Ingrese n => "; cin>>(*n); for ( i=1; i<=(*n);i++) { cout<< " Ingrese valor "<< i<<" : "; cin>>a[i]; }}// Funcion que ordena el vectorvoid orden(int a[50], int n) { int i,j,temp; for ( i=1; i<n ;i++) for (j=i+1;j<=n;j++) if( a[i]> a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp ;} }// Funcion que halla la modaint moda(int a[50], int n) { int b[50],rep[50],nsr,i,j,k; int nmoda,mayor; system("cls"); nsr=1; b[1]=a[1]; rep[1]=1; for( i=2;i<=n;i++) {if(a[i-1]==a[i]) rep[nsr]=rep[nsr]+1; else { nsr=nsr+1; b[nsr]=a[i]; rep[nsr]=1; } } mayor=rep[1]; k=1; for(j=2;j<=nsr;j++) if (rep[j] > mayor) {mayor = rep[j]; k=j ;} nmoda= b[k]; mostrar(b,nsr); mostrar(rep,nsr); return(nmoda); } void escritura(int mo) { system("cls"); cout<< " La moda es ="<< mo; _getch(); } void mostrar(int a[50], int n) {int i; cout<<endl; cout<<" Vector"<<endl; for(i=1; i<=n; i++) cout<<a[i] <<endl; _getch( ); }

Page 79: Programación Orientada a Objetos

79FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

2.- Escriba Un Programa Que Maneje Un Menu De Operaciones Con Arreglos

El programa debe tener el siguiente menú:

PROGRAMA

// prog94.cpp: define el punto de entrada de la aplicación de consola.//OBJETIVO: Programa que crea un menú para manejo de operaciones con arreglos */ #include "stdafx.h"#include<iostream>#include<conio.h>using namespace std; void lectura(int v[50], int *n); void adicion(int v[50], int *n); void eliminacion(int v[50], int *n); void busqueda(int v[50], int n); void sorteo(int v[50], int n); void escritura(int v[50], int n); void main( ) { int vector[50]; int n; char opcion; system("cls");;

79

2015PROGRAMACION ORIENTADA A OBJETOS

MENU ARREGLOS

1.- Lectura2.- Adición3.- Eliminación4.- Búsqueda5.- Ordenar6.- Escritura7.- Salir

Ingrese opción ==> __

Page 80: Programación Orientada a Objetos

do { system("cls"); cout<< "MENU ARREGLOS"<<endl; cout<< "1.- Lectura"<<endl; cout<< "2.- Adicion"<<endl; cout<< "3.- Eliminacion"<<endl; cout<< "4.- Busqueda"<<endl; cout<< "5.- Ordenar"<<endl; cout<<"6.- Escritura"<<endl; cout<< "7.- Salir"<<endl<<endl; cout<< "Ingrese opcion ==> "; cin>>opcion; switch(opcion) { case '1' : lectura(vector, &n);break; case '2' : adicion(vector, &n);break; case '3' : eliminacion(vector, &n);break; case '4' : busqueda(vector, n);break; case '5' : sorteo(vector, n);break; case '6' : escritura(vector, n);break; } }while(opcion != '7'); }void lectura(int v[50], int *n) { int i; system("cls"); cout << " Ingrese n => "; cin >> *n; for ( i=1; i<=(*n);i++) { cout<< " Ingrese valor "<< i<<" : "; cin>> v[i]; } } void adicion(int v[50], int *n) { int i,j,x; system("cls"); cout<<"Ingrese posición de inserción: "; cin>> j; cout<<"Ingrese valor a insertar : "; cin>> x; for( i=(*n);i>=j;i--) v[i+1] = v[i]; v[j] = x; (*n)=(*n) +1; } void eliminacion(int v[50], int *n){ int i,j; system("cls"); cout<<"Ingrese posición de valor a eliminar : ";cin>> j; for( i=j+1 ; i<=(*n);i++) v[i-1] = v[i]; (*n)=(*n) - 1; } void busqueda(int v[50], int n) { int i,x, pos; system("cls"); cout<<"Ingrese valor a buscar : "; cin>> x; for( i=1;i<=n;i++) if ( v[i]== x) { pos = i; break ; } if ( v [i ]== x) cout<< " Valor hallado en posición: "<<pos; else cout<< " Valor no hallado "; _getch(); } void sorteo(int v[50], int n) { int i,j,temp; for ( i=1; i<n ;i++) for (j=i+1;j<=n;j++) if( v[i]> v[j]) { temp = v[i]; v[i] = v[j]; v[j] = temp ; } }

80

2015PROGRAMACION ORIENTADA A OBJETOS

Page 81: Programación Orientada a Objetos

81FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS void escritura(int v[50], int n) {int i; system("cls"); for ( i=1; i<=n;i++) { cout<< v[i]<< endl; } _getch(); }

3.- Escriba un programa que lea un conjunto de ”n” nombres y “n” notas y me muestre en una pantalla los

nombres de los tres primeros alumnos por orden de mérito las tres mejores notas

SOLUCIÓNPROGRAMA// prog37.cpp: define el punto de entrada de la aplicación de consola.// OBJETIVO: HALLA LAS TRES MEJORES NOTAS DE UN GRUPO DE ALUMNOS Y LAS MUESTRA CON LOS NOMBRES#include "stdafx.h"#include<iostream>#include<conio.h>#include<stdio.h>#include<string.h>using namespace std;void lectura(int vectornot[50], char vectornom[50][40], int *n);void orden(int vectornot[50],char vectornom[50][40], int n);void escritura(int vectornot[50],char vectornom[50][40], int n);void main( ){ int vectornot[50]; char vectornom[50][40]; int n; system("cls"); lectura(vectornot,vectornom,&n); orden(vectornot,vectornom, n); escritura(vectornot, vectornom,n); }void lectura(int vectornot[50],char vectornom[50][40], int *n) { int i; system("cls"); cout << " Ingrese n => "; cin >> *n; for ( i=1; i<=(*n);i++) { cout<< " Ingrese nota "<< i<<" : "; cin>> vectornot[i]; cout<< " Ingrese nombre "<< i<<" : "; cin>>vectornom[i]; } } void orden(int vectornot[50],char vectornom[50][40], int n) { int i,j,temp1; char temp2[40]; for ( i=1; i<n ;i++) for (j=i+1;j<=n;j++) if( vectornot[i]< vectornot[j]) { temp1 = vectornot[i]; vectornot[i] = vectornot[j]; vectornot[j] = temp1 ; strcpy(temp2,vectornom[i]); strcpy(vectornom[i],vectornom[j]); strcpy(vectornom[j],temp2) ; } } void escritura(int vectornot[50],char vectornom[50][40],int n) {int i; system("cls"); cout<<"LISTA DE MERITO"<<endl<<endl; for ( i=1; i<=3;i++) { cout<< vectornot[i]<<" "<<vectornom[i]<<endl; } getch(); }

Nota: Este programa trabaja con el concepto de vectores paralelos o sea que la información de los

vectores está relacionada por el subíndice esto significa que la nota 5 pertenece al alumno que tiene el

nombre 5, por lo tanto la información se debe manejar en paralelo para que siga siendo consistente.

81

2015PROGRAMACION ORIENTADA A OBJETOS

Page 82: Programación Orientada a Objetos

EJERCICIOS PROPUESTOS1) Escribir un programa que inserte un elemento dentro de un vector ordenado, considere el programa utilizando para su

solución la estructura while.

2) Escribir un programa que realice una búsqueda dentro de un vector ordenado, este programa debe detenerse cuando el valor

es hallado, cuando se llegue al final o cuando el valor buscado es superado.

3) Escribir el código necesario para rotar un vector en sentido antihorario o sea al revés de lo hecho en el problema 9.

4) Se tiene una matriz de letras, escriba usted un programa para que realice la búsqueda de una cadena ingresada dentro de la

matriz(PUPILETRAS), la búsqueda debe ser de izquierda a derecha y de arriba hacia abajo en la matriz, los mensajes de

salida será “Hallado” y “No hallado”.

5) Escriba un programa que lea una matriz de “n” filas por “m” columnas y me imprima la transpuesta de dicha matriz.

6) Escriba un programa que me permita hallar la inversa de una matriz.

82

2015PROGRAMACION ORIENTADA A OBJETOS

Page 83: Programación Orientada a Objetos

83FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO V

CAPITULO VREGISTROS EN LENGUAJE “C”

83

2015PROGRAMACION ORIENTADA A OBJETOS

Page 84: Programación Orientada a Objetos

5 Definición.- Un registro o una estructura en lenguaje “C” es una colección de variables simples que

pueden contener diferentes tipos de datos. Es un tipo de dato definido por el usuario.

5.1 Modelamiento de un registro de acuerdo a las entidades del mundo real: Cuandose crea un

registro se utilizalas entidades(elementos relevantes del proceso) del mundo real para crear la

estructura del registro. Veamos un ejemplo. Supongamos que el proceso matricula se automatiza,

entonces cuales serian las entidades del mundo real que participan en este proceso, algunas de

ellas serian:

Alumno Profesor Curso Aulas Escuelas Etc,Tomemos la entidad alumno y la entidad curso y veamos como estas entidades dan origen a sus

respectivos registros.ENTIDAD REGISTRO

ALUMNO

CODIGO

NOMBRE

DIRECCION

ESCUELA

TELEFONO

REGALU

codalu entero largo

nomalu carácter de longitud 30

diralu carácter de longitud 40

escalu carácter de longitud 2

telalu entero largo

Vemos que cada característica de la entidad alumno se convierte en un campo del registro regalu.

Continuemos con la entidad curso:

ENTIDAD REGISTROCURSO

CODIGO

NOMBRE

NOTAFIN

REGCUR

codcur carácter de longitud 5

nomcur carácter de longitud 30

notcur real

Vemos claramente que los campos son las características que definen a la entidad y almacenaran

estos datos de una entidad particular.

Si nosotros visualizamos un registro, seria de la siguiente forma:

Estructura de REGALU codalu nomalu diralu escalu telalu

84

2015PROGRAMACION ORIENTADA A OBJETOS

Page 85: Programación Orientada a Objetos

85FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

Estructura de REGCUR codcur nomcur notcur

Un arreglo de estos registros se vería así

codalu nomalu diralu escalu telalu

7.2 Creación y manejo de registrosEl proceso de crear una estructura o registro tiene dos etapas.

Crear un modelo de estructura

Crear la variable estructurada

Ejemplo:

struct ciudadano

{ long dni; // dato miembro dni

char nombre[40];// dato miembro nombre

char dirección[50]; // dato miembro dirección}

Posteriormente las variables persona1 y persona2 se definen como cualquier otra variable, en este caso

del tipo de nombre de la estructura.

ciudadano persona1, persona2; // se declaran dos variables tipo registro.

7.3 Acceso a miembros del registro.- Se realiza utilizando el nombre del registro seguido del nombre

del campo con un punto intermedio.

85

2015PROGRAMACION ORIENTADA A OBJETOS

Page 86: Programación Orientada a Objetos

persona1.dni = 08234101;

persona2.dni = 91012345;

strcpy( persona1.nombre, “ Luis Rojas”);

strcpy( persona2.nombre, “ Jose Castañeda”);

strcpy( persona1.direccion, “ San Borja, Los alamos 257”);

strcpy( persona2.direccion, “ Surco, leoncio Prado 820”);

7.4 Inicialización de estructuras.- Los campos de un registro se pueden iniciar individualmente o

todos a la vez :

Ejemplo: struct caja

{ int largo;

int ancho;

int altura;};

Caja c1 = {4, 5,2}

caja c2, c3;

c2.largo = 3;

c3.ancho = 1;

7.5 Asignación de estructuras.- Podemos intercambiar información entre dos estructuras

directamente de registro a registro.

Ejemplo: De los casos anteriores es válido decir:

persona2 = persona1; c1 = c3;

Los contenidos de los correspondientes campos de persona1 se copiaran en persona2, los de

c3 en c1.

Estructuras anidadas.- Se pueden anidar estructuras dentro de otras estructuras.

Ejemplo:struct fecha

{ int dia;

int mes;

int año; }

struct empleado

{ fecha dia_ingreso;

char nombre[50]; }

EJEMPLO 1.-Vamos a desarrollar un programa que lea y escriba un arreglo de “n” registros, cuya

estructura es :

Dni cadena de 10 caracteres

Nombre cadena de 30 caracteres

Dirección cadena de 40 caracteres

PROGRAMA// prog15.cpp: define el punto de entrada de la aplicación de consola./* PROGRAMA QUE LEE Y ESCRIBE UN ARREGLO DE REGISTROS*/

86

2015PROGRAMACION ORIENTADA A OBJETOS

Page 87: Programación Orientada a Objetos

87FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

#include "stdafx.h"#include<iostream>#include<conio.h>#include<stdio.h>#include<iomanip>using namespace std;struct persona { char dniper[10]; // DNI DE LA PERSONA char nomper[30]; // NOMBRE DE LA PERSONA char dirper[40]; // DIRECCION DE LA PERSONA};

void main( ){ int i,n; persona p[50];//p[i].dniper,p[i].nomper,p[i].dirper system("cls"); cout<< " Cuantos registros va a procesar ==> ";cin >>n; for(i=1;i<=n;i++) {cout<< " REGISTRO "<<i<<" :"<<endl; cout<< " DNI = ";cin>>p[i].dniper; fflush( stdin ); cout<< " NOMBRE = ";gets(p[i].nomper);//gets…getstring(stdio.h) cout<< " DIRECCION= ";gets(p[i].dirper);cout<<endl; } cout<<setiosflags(ios::left); // Salida de resultados system("cls"); cout<< " LISTA DE REGISTROS "<<endl; cout<< "==================== "<<endl; cout<<setw(10)<<"DNI"; cout<<setw(20)<<"NOMBRE"; cout<<setw(30)<<"DIRECCION"<<endl; cout<< "====================================================== "<<endl; for(i=1;i<=n;i++) {cout<<setw(10)<<p[i].dniper; cout<<setw(20)<< p[i].nomper; cout<<setw(30)<<p[i].dirper<<endl;}

_getch(); }

EJECUCION

EJEMPLO 2.-Se tiene un arreglo de registros, cuya estructura es :

codigo cadena de 8 caracteres ‘Codigo de alumno

nombre cadena de 30 caracteres ‘Nombre del alumno

examen1 entero ‘Nota del examen parcial

examen2 entero ‘Nota del examen final

promediop real ‘Promedio de practicas

87

2015PROGRAMACION ORIENTADA A OBJETOS

Page 88: Programación Orientada a Objetos

notafinal real ‘Nota final

Primero debe ingresar los datos de cada alumno, lanota final será calculada,

Considerando examenn1 (peso 1), examen2 (peso2) y promediop(peso2).

El codigo no puede ser repetido, esta condición debe ser probada en cada ingreso. Finalmente presentar

resultados.

PROGRAMA

// prog29.cpp: define el punto de entrada de la aplicación de consola./*OBJETIVO: Ingresa registros sin codigo repetido */#include "stdafx.h"#include<iostream>#include<conio.h>#include<stdio.h>#include<iomanip>using namespace std;struct notas { char codalu[9]; // Codigo de alumno char nomalu[30]; // Nombre del alumno int examen1; int examen2; float promediop; float notafinal; };

void main( ){ int i,nr,m,j; notas n[50]; int swr; system("cls"); cout<< " Cuantos registros va a leer ==> "; cin >>nr; for(i=1;i<=nr;i++) { swr=1; while (swr) { swr=0; system("cls"); cout<<"INGRESO DE REGISTRO DE NOTAS"; cout<<" Ingrese codigo ==> ";

fflush(stdin);gets(n[i].codalu); m=i-1; for (j=1;j<=m;j++) if (strcmp(n[i].codalu,n[j].codalu)==0) {swr=1;

88

2015PROGRAMACION ORIENTADA A OBJETOS

Page 89: Programación Orientada a Objetos

89FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

break; } if(swr==1) {cout<<"Error codigo repetido.........."; _getch(); } else { cout<<"Por favor ingrese datos...." ; cout<<" Ingrese nombre ==> ";gets(n[i].nomalu); cout<<" Ingrese examen parcial ==> ";cin>>n[i].examen1; cout<<" Ingrese examen final ==> ";cin>>n[i].examen2; cout<<" Ingrese Promedio Prac. ==> ";cin>>n[i].promediop; n[i].notafinal=(n[i].examen1+2*n[i].examen2+2*n[i].promediop)/5.0;} } } cout<<setiosflags(ios::left); // Salida de resultados system("cls"); cout<< " LISTADO DE ALUMNOS "<<endl; cout<< "==================== "<<endl; cout<<setw(10)<<"CODIGO"; cout<<setw(20)<<"NOMBRE"; cout<<setw(11)<<"EX.PARCIAL"; cout<<setw(11)<<"EX.FINAL "; cout<<setw(11)<<"PROM.PRAC."; cout<<setw(11)<<"NOTA FINAL"<<endl; cout<< "========================================================================= "<<endl; for(i=1;i<=nr;i++) {cout<<setw(10)<<n[i].codalu; cout<<setw(20)<< n[i].nomalu; cout<<setw(11)<< n[i].examen1; cout<<setw(11)<< n[i].examen2; cout<<setw(11)<< n[i].promediop; cout<<setw(11)<< n[i].notafinal<<endl;} getch(); }

89

2015PROGRAMACION ORIENTADA A OBJETOS

Page 90: Programación Orientada a Objetos

EJECUCION

PROBLEMAS1. Desarrollar un programa que maneje todos los productos que una tienda de abarrotes vende, siendo

nuestro objetivo principal el automatizar el proceso de una tienda de abarrotes que nos permitirá

realizar las siguientes operaciones de manera eficiente:

Tener un listado actualizado del stock en todo momento

Eliminar los productos que ya no se venden.

Adicionar productos nuevos.

Consultar datos sobre un producto particular.

Realizar balances mensuales de la tienda de abarrotes para manejar la contabilidad eficientemente.

SOLUCION:PROGRAMA/* CODIGO: PROGCPP0501

FECHA: 27 DE FEBRERO DE 2012

OBJETIVO:Pograma que crea un menú para manejo de registros que procesan stock de una tienda de abarrotes */

#include<iostream.h>

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<ctype.h>

90

2015PROGRAMACION ORIENTADA A OBJETOS

Page 91: Programación Orientada a Objetos

91FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSstruct item

{ int codite; // código del producto

char desite[20]; // descripción del producto

char ubiite[4]; // ubicación del producto

float nunite; // número de unidades del producto

int tunite;// tipo de unidades kilo(1), litro(2), c/u(3)

float pruite; // precio por cada unidad del producto

};

void lectura(item prod[50], int *n);

void adicion(item prod[50], int *n);

void eliminacion(item prod[50], int *n);

void busqueda(item prod[50], int n);

void orden1(item prod[50], int n);

void escritura(item prod[50], int n);

void main( )

{ item vprod[50];

int num;

char opcion;

do {clrscr();

gotoxy(30,2); cout<< "MENU ARREGLOS";

gotoxy(30,5); cout<< "1.- Lectura";

gotoxy(30,6); cout<< "2.- Adicion";

gotoxy(30,7); cout<< "3.- Eliminacion";

gotoxy(30,8); cout<< "4.- Búsqueda";

gotoxy(30,9); cout<< "5.- Ordenamiento ";

gotoxy(30,10);cout<< "6.- Escritura";

gotoxy(30,11);cout<< "7.- Salir ";

gotoxy(30,16);cout<< "Ingrese Opcion ==> ";cin >> opcion;

switch(opcion)

{ case '1' : lectura(vprod, &num);break;

case '2' : adicion(vprod, &num);break;

case '3' : eliminacion(vprod, &num);break;

case '4' : busqueda(vprod, num);break;

case '5' : orden1(vprod, num);break;

case '6' : escritura(vprod, num);break;}

}while(opcion != '7');

}

void lectura(item prod[50], int *n)

{ int i;

clrscr();

cout << " Ingrese n => ";

cin >> (*n);

for ( i=1; i<=(*n);i++)

{cout<< " Ingrese codigo "<< i<<" : "; cin>> prod[i].codite;

cout<< " Ingrese descripcion "<< i<<" : "; gets(prod[i].desite);

91

2015PROGRAMACION ORIENTADA A OBJETOS

Page 92: Programación Orientada a Objetos

cout<< " Ingreseubicación "<< i<<" : "; cin>> prod[i].ubiite;

cout<< " Ingrese # de unidades"<< i<<" : "; cin>> prod[i].nunite;

cout<< " Tipo de unidad kilo(1),litro(2),c/u(3) "<< i<<" : ";

cin>> prod[i].tunite;

cout<< " Ingrese precio por unidad del producto"<< i<<" : ";

cin>> prod[i].pruite; }

}

void adicion(item prod[50], int *n)

{ int codx,i;

item reg1;

clrscr();

cout<<"Ingrese codigo : ";

cin>> codx;

for( i=1;i<=(*n);i++)

if(prod[i].codite == codx)

break;

if(prod[i].codite == codx)

{cout<< "error codigo ya existe "; getch();}

else

{ reg1.codite = codx;

cout<< " Ingrese descripcion : "; gets(reg1.desite);

cout<< " Ingrese ubicación : "; cin>> reg1.ubiite;

cout<< " Ingrese # de unidades : "; cin>> reg1.nunite;

cout<< " Tipo de unidad kilo(1),litro(2),c/u(3): ";

cin>> reg1.tunite;

cout<< " Ingrese precio por unidad del producto: ";

cin>> reg1.pruite;

prod[(*n)+1] = reg1;

(*n)=(*n) +1; cout<< " Registro adicionado..."; getch();}

}

void eliminacion(item prod[50], int *n)

{ int codx,i,j;char rpta;

clrscr();

cout<<"Ingrese codigo : ";

cin>> codx;

for( i=1;i<=(*n);i++)

if(prod[i].codite == codx)

{ j=i;

break; }

if(prod[i].codite != codx)

{cout<< " Registro no existe... "; getch();}

else

{cout<< " Descripción : "<<prod[i].desite<<endl;

cout<< " Ubicación : "<<prod[i].ubiite<<endl;

cout<< " # de unidades : "; prod[i].nunite<<endl;

cout<< " Tipo de unidad kilo(1),litro(2),c/u(3): "<<prod[i].tunite<<endl;

92

2015PROGRAMACION ORIENTADA A OBJETOS

Page 93: Programación Orientada a Objetos

93FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS cout<< " Ingrese precio por unidad del producto: "<<prod[i].pruite<<endl<<endl;

cout<<"Desea eliminar s/n"; cin>>rpta;

if (toupper(rpta)=='S')

{ for( i=j+1 ; i<=(*n);i++)

prod[i-1] = prod[i];

(*n)=(*n) - 1; }

getch();

} }

void busqueda(item prod[50], int n)

{ int codx,i;

clrscr();

cout<<"Ingrese codigo : ";

cin>> codx;

for( i=1;i<=n;i++)

if(prod[i].codite == codx)

break;

if(prod[i].codite != codx)

{cout<< " Registro no existe... "; getch();}

else

{cout<< " Descripción : "<<prod[i].desite<<endl;

cout<< " Ubicación : "<<prod[i].ubiite<<endl;

cout<< " # de unidades : "; prod[i].nunite<<endl;

cout<< " Tipo de unidad kilo(1),litro(2),c/u(3): "<<prod[i].tunite<<endl;

cout<< " Ingrese precio por unidad del producto: "<<prod[i].pruite<<endl;

getch(); } }

void orden1(item prod[50], int n)

{ int i, j;item temp;

for ( i=1; i<n ;i++)

for (j=i+1;j<=n;j++)

if( prod[i].codite> prod[j].codite)

{ temp = prod[i];

prod[i] = prod[j];

prod[j] = temp ; } }

void escritura(item prod[50], int n)

{ int i;

clrscr();

cout<<" CODIGO PRODUCTO UBICACION # UNIDADES TIPO PRECIO/U ";

cout<<endl

cout<<endl;

for ( i=1; i<=n;i++)

{ cout<< prod[i].codite<<" ";

cout<< prod[i].desite<<" ";

cout<< prod[i].ubiite<<" ";

cout<< prod[i].nunite<<" ";

cout<< prod[i].tunite<<" ";

93

2015PROGRAMACION ORIENTADA A OBJETOS

Page 94: Programación Orientada a Objetos

cout<< prod[i].pruite<<endl;

}

getch();

}

EJECUCION

94

2015PROGRAMACION ORIENTADA A OBJETOS

Page 95: Programación Orientada a Objetos

95FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

95

2015PROGRAMACION ORIENTADA A OBJETOS

Page 96: Programación Orientada a Objetos

2. Dada la siguiente estructura(registro)

codigo entero

nombre char 40

nivel char //solo existe A,B,C

sueldo real

a) Declarar la estructura.

b) Escribir el menú

Leer

Adicionar

Eliminar

Escribir

Salir

c) Escribir las funciones Leer, adicionar, eliminar y escribir.

96

2015PROGRAMACION ORIENTADA A OBJETOS

Page 97: Programación Orientada a Objetos

97FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSSOLUCIÓNPROGRAMA/* CODIGO: cppcap05prob02 FECHA: 20 de agosto de 2012 OBJETIVO: Programa que crea un menú con registros de empleados */#include<iostream.h>

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<iomanip.h>

struct empleado

{ int codemp; // código del empleado

char nomemp[40]; // nombre del empleado

char nivemp; // nivel remunerativo del empleado A,B,C

float sueemp; // sueldo del empleado

};

void leer(empleado p[50], int *n);

void adicionar (empleado p[50], int *n);

void eliminar (empleado p[50], int *n);

void escribir(empleado p[50], int n);

void main( ){ empleado v[50];

int num;

char opcion;

clrscr();

do { clrscr();

gotoxy(26,2); cout<< "MANTENIMIENTO EMPLEADOS";

gotoxy(30,5); cout<< "1.- Leer";

gotoxy(30,6); cout<< "2.- Adicionar";

gotoxy(30,7); cout<< "3.- Eliminar";

gotoxy(30,8); cout<< "4.- Escribir";

gotoxy(30,9); cout<< "5.- Salir ";

gotoxy(26,16); cout<< "Ingrese Opcion ==> "; cin >> opcion;

switch(opcion)

{ case '1' : leer(v, &num);break;

case '2' : adicionar(v, &num);break;

case '3' : eliminar(v, &num);break;

case '4' : escribir(v, num);break; }

}while(opcion != '5');

}

void leer(empleado p[50], int *n)

{ int i;

clrscr();

cout << " Ingrese n => ";

cin >> (*n);

clrscr();

97

2015PROGRAMACION ORIENTADA A OBJETOS

Page 98: Programación Orientada a Objetos

gotoxy(30,2); cout<< "LECTURA";

gotoxy(30,3); cout<< "=======";

cout<<endl<<endl;

for ( i=1; i<=(*n);i++)

{ cout<< " Ingrese Codigo del Empleado "<< i<<" : "; cin>> p[i].codemp;

cout<< " Ingrese Nombre y Apellido "<< i<<" : "; gets(p[i].nomemp);

cout<< " Ingrese Nivel Remunerativo "<< i<<" : "; cin>> p[i].nivemp;

cout<< " Ingrese Sueldo del Empleado "<< i<<" : "; cin>> p[i].sueemp;

}

}

void adicionar (empleado p[50], int *n)

{ int codx,i;

empleado aux;

clrscr();

gotoxy(30,2); cout<< "ADICION";

gotoxy(30,3); cout<< "=======";

cout<<endl<<endl;

cout<<"Ingrese codigo : "; cin>> codx;

for( i=1;i<=(*n);i++)

if(p[i].codemp == codx)

break;

if(i==((*n)+1)) i--;

if(p[i].codemp == codx)

{cout<< "Error Codigo ya existe "; getch();}

else

{ aux.codemp = codx;

cout<< " Ingrese nombre : "; gets(aux.nomemp);

cout<< " Ingrese nivel remunerativo: "; cin>> aux.nivemp;

cout<< " Ingrese sueldo : "; cin>> aux.sueemp;

(*n)=(*n) +1; cout<< " Registro adicionado...";

p[*n] = aux;

getch();

}

}

void eliminar(empleado p[50], int *n)

{ int i,j, codx;

char rpta;

clrscr();

gotoxy(30,2); cout<< "ELIMINACION";

gotoxy(30,3); cout<< "===========";

cout<<endl<<endl;

cout<<"Ingrese Codigo a Buscar : ";

cin>> codx;

for( i=1;i<=(*n);i++)

if ( p[i].codemp == codx)

{ j = i;

98

2015PROGRAMACION ORIENTADA A OBJETOS

Page 99: Programación Orientada a Objetos

99FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS break ;

}

if ( p[i].codemp == codx)

{cout<< " Registro Hallado "<<endl;

cout<< p[j].nomemp<<" ";

cout<< p[j].nivemp<<" ";

cout<< p[j].sueemp<<endl;

cout<<"Desea eliminar s/n => "; cin>> rpta;

if((rpta == 's') || (rpta == 'S'))

{ if ( j!=(*n))

for( i=j+1 ; i<=(*n);i++)

p[i-1] = p[i];

(*n)=(*n) - 1; }// Se elimina registro

}

else

{cout<< " Registro no Hallado ";

getch();

}

}

void escribir(empleado p[50], int n)

{int i;

clrscr();

cout<<setiosflags(ios::left);

cout<<setw(10)<<"|CODIGO |";

cout<<setw(20)<<"NOMBRE |";

cout<<setw(6)<<"NIVEL|";

cout<<setw(8)<<"SUELDO |";

cout<<endl;

cout<<"==========================================="<<endl;

for ( i=1; i<=n;i++)

{ cout<<setw(10)<<p[i].codemp;

cout<<setw(20)<<p[i].nomemp;

cout<<setw(5)<<p[i].nivemp;

cout<<setw(8)<<p[i].sueemp<<endl;

}

getch(); }

EJECUCION

99

2015PROGRAMACION ORIENTADA A OBJETOS

Page 100: Programación Orientada a Objetos

100

2015PROGRAMACION ORIENTADA A OBJETOS

Page 101: Programación Orientada a Objetos

10FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

3. Dada la siguiente estructura(registro)

item entero

nombre char 40

cantidad entero

precio real

a) Declarar la estructura.

b) Escribir el menú

Leer

Adicionar

Eliminar

Escribir

Salir

c) Escribir las funciones Leer, adicionar, eliminar y escribir.

101

2015PROGRAMACION ORIENTADA A OBJETOS

Page 102: Programación Orientada a Objetos

SOLUCION:

PROGRAMA

/* CODIGO: cppcap07prob03 PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA FECHA: 23 de agosto de 2007OBJETIVO:Programa que crea un menú con registros de almacén */#include<iostream.h>

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<iomanip.h>

struct almacén

{int itealm;// codigo del item

char nomalm[40];//nombre o descripción del item

int canalm; //cantidad del item

float prealm; //precio del item

};

void leer(almacen s[50] , int *n );

void adicionar(almacen s[50] , int *n );

void eliminar(almacen s[50] , int *n );

void escribir(almacen s[50] , int n ); //ya no se modifica n

void main(){ almacen stock[50];

int n;

char opc;

do{ clrscr();

gotoxy(30,5);cout<<"MENU DE ALMACEN ";

gotoxy(30,8);cout<<"1.-Leer";

gotoxy(30,9);cout<<"2.-Adicionar";

gotoxy(30,10);cout<<"3.-Eliminar";

gotoxy(30,11);cout<<"4.-Mostrar";

gotoxy(30,12);cout<<"5.-Salir";

gotoxy(35,16);cout<<"Opcion==>";

cin>>opc;

switch(opc)

{case '1': leer( stock , &n ); break;

case '2': adicionar ( stock , &n ); break;

case '3': eliminar ( stock , &n ); break;

case '4': escribir ( stock , n ); break;

}

}while(opc!='5');

}

void leer(almacen s[50] , int *n )

{ int n1;

clrscr();

gotoxy(30,5);cout<<"INGRESO DE DATOS AL ALMACEN";

gotoxy(30,8);cout<<"Ingrese el valor de n:";

102

2015PROGRAMACION ORIENTADA A OBJETOS

Page 103: Programación Orientada a Objetos

10FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOScin>>n1;

*n=n1;

for(int i=1;i<=n1;i++)

{clrscr();

gotoxy(30,5);cout<<"INGRESO DE DATOS AL ALMACEN";

gotoxy(30,6);cout<<"===========================";

gotoxy(30,9);cout<<"Item: ";cin>>s[i].itealm;

gotoxy(30,10);cout<<"Nombre: ";gets(s[i].nomalm);

gotoxy(30,11);cout<<"Cantidad: ";cin>>s[i].canalm;

gotoxy(30,12);cout<<"Precio: ";cin>>s[i].prealm;

}

}

void escribir(almacen s[50] , int n )

{ clrscr();

int i;

cout<<setiosflags(ios::fixed);

cout<<setiosflags(ios::showpoint);

cout<<setprecision(2);

cout<<setiosflags(ios::left);

gotoxy(30,5);cout<<"DATOS DE ALMACEN";

gotoxy(30,6);cout<<"================";

gotoxy(30,9);cout<<setw(6)<<"|Item";cout<<setw(20)<<"|Nombre ";

cout<<setw(9)<<"|Cantidad";cout<<setw(8)<<"|Precio|";

gotoxy(30,10);cout<<"===========================================";

for(i=1;i<=n;i++)

{gotoxy(30,10+i);

cout<<setiosflags(ios::left);

cout<<"|";cout<<setw(5)<<s[i].itealm;

cout<<"|";cout<<setw(19)<<s[i].nomalm;

cout<<setiosflags(ios::right);

cout<<"|";cout<<setw(8)<<s[i].canalm;

cout<<"|";cout<<setw(7) <<s[i].prealm;}

getch();}

void eliminar(almacen s[50] , int *n )

{ int j,i;

clrscr();

cout<<"Posicion a eliminar: ";

cin>>j;

for(i=j+1;i<=*n;i++)

s[i-1]=s[i];

*n=*n-1;

}

void adicionar(almacen s[50] , int *n )

{int i,j;almacen regx;

clrscr();

cout<<"Ingrese datos de registro a adicionar: "<<endl;

cout<<"Item: ";cin>>regx.itealm;

cout<<"Nombre: ";gets(regx.nomalm);

103

2015PROGRAMACION ORIENTADA A OBJETOS

Page 104: Programación Orientada a Objetos

cout<<"Cantidad: ";cin>>regx.canalm;

cout<<"Precio: ";cin>>regx.prealm;

cout<<"Ingrese posición de inserción " ;cin>>j;

for(i=*n;i>=j;i--)

s[i+1]=s[i];

s[j]=regx;

*n=*n+1;}

EJECUCION

104

2015PROGRAMACION ORIENTADA A OBJETOS

Page 105: Programación Orientada a Objetos

10FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

105

2015PROGRAMACION ORIENTADA A OBJETOS

Page 106: Programación Orientada a Objetos

EJERCICIOS PROPUESTOS1. Se desea realizar un mantenimiento de registros de los alumnos de COMPUTACION I, para esto

vamos a utilizar la siguiente estructura:

struct alumno{

int código;

char nombre [40];

int exampar; //Examen Parcial

int examfin; //Examen Final

float pp; // Promedio de Practicas

};

En el mantenimiento considere:

a) Adicionar Registros

b) Eliminar Registros.

c) Modificar Registros.

2. Se desea escribir un programa que procese el examen sustitutorio de “n” alumnos, considerar el

siguiente registro.

struct notas

{ char codalu [10]; // Código del alumno

char codcur [7]; // Código del curso

float pp ; // Promedio de practicas

int ep ; // Examen parcial

int ef ; // Examen final

int es ; // Examen sustitutorio

float pf ; // Promedio final

}

para hallar el promedio final (pf) debe considerarse lo siguiente:

a. Si no se ha rendido un examen (ep,ef) la nota que figura es 99(OJO).

106

2015PROGRAMACION ORIENTADA A OBJETOS

Page 107: Programación Orientada a Objetos

10FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSb. El promedio final se halla

pf= pp+ep+2∗ef4

c. El examen sustitutorio solo se considera si pp 6.0

d. Al considerar el examen sustitutorio este reemplazara al examen no rendido o al mas

desfavorable de haber rendido los dos.

e. Ordenar los promedios finales por merito y a quien corresponde.

3. Se desea escribir un programa que procese la planilla de “n” trabajadores, considerar el registro

dado.

struct empleado

{ int codemp; // Código del empleado

char nomemp [40]; // Nombre del empleado

float sb ; // Sueldo Bruto

int diasf; // Días faltos

int horase ; // Horas extras

float descuentos ; // Descuentos

float sn; // Sueldo Neto }

Para hallar los descuentos y el sueldo neto de cada trabajador debe

considerar lo siguiente:

13% de descuento del sueldo bruto por seguro social.

Descuento por cada día falto.

50% de bonificación por cada hora extra.

107

2015PROGRAMACION ORIENTADA A OBJETOS

Page 108: Programación Orientada a Objetos

CAPITULO VI

108

2015PROGRAMACION ORIENTADA A OBJETOS

Page 109: Programación Orientada a Objetos

10FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO VIPROGRAMACION ORIENTADA A OBJETOS

6 Introduccion.-La programación orientada a objetos existe desde la creación de los primeros lenguajes

de programación. Los conceptos que se manejan de abstracción de datos, herencia y Polimorfismo se

manejaban en estos lenguajes, pero con el desarrollo del lenguaje “C” y la programación visual se

utiliza este tipo de programación con mayor profusión.

6.1 Programación orientada a objetos.- La programación orientada a objetos es la ultima

modificación, donde ya se incorporan algunos aspectos tomando como modelo la vida real.

Tipos de Datos Abstractos Algunos autores describen la programación orientada a objetos como programación de tipos de

datos abstractos y sus relaciones. Vamos a tratar de estudiar este aspecto de modelo de la vida

real con mas detalles en el concepto de “Tipos de Datos Abstractos” Propiedades de los Tipos de

Datos Abstractos

El ejemplo de la sección anterior muestra que por medio de la abstracción tú creas una entidad

bien definida que puede ser adecuadamente manejada. Estas entidades definen la estructura de

datos de un conjunto de elementos. Por ejemplo para cada alumno del Instituto un nombre, fecha

de nacimiento y DNI.

La estructura de los datos puede ser accesada solamente por medio de operaciones definidas.

Este conjunto de operaciones es llamada interface y es exportada por la entidad. Una entidad con

las propiedades recién descritas se conoce como un tipo de datos abstracto (TDA).

Figura 6.1 Un tipo de datos abstracto (TDA)

109

2015PROGRAMACION ORIENTADA A OBJETOS

TIPO DE DATOS ABSTRACTO

ESTRUCTURA DE DATOS

OPERACIONES CON EL TDA

Page 110: Programación Orientada a Objetos

La Figura 6.1 muestra un TDA que consiste en una estructura de datos abstracta y operaciones.

Solamente las operaciones son visibles desde afuera y definen la interface.

Definición (Tipo de Datos Abstracto) Un tipo de datos abstracto (TDA) se caracteriza por que

tiene dos elementos diferenciados:

La interfaz de utilización.

La representación

La representación debe permanecer oculta y solo utilizaremos sus operaciones para trabajar con

los elementos.

Para construir un tipo abstracto debemos:

1. Exponer una definición de tipo.

2.Definir las operaciones (funciones) que permitan operar con instancias de ese tipo.

3.Ocultar la representación de los elementos del tipo de modo que solo se pueda actuar sobre

ellos con las operaciones proporcionadas..

4. Poder hacer instancias múltiples del tipo..

Tipos básicos de operaciones en un TDA.Las operaciones básicas que deberíamos tener pueden ser:

Constructores: Crean una nueva instancia del tipo.

Transformación: Cambian el valor de uno o más elementos de una instancia del tipo.

Observación:Accesamos sin modificarlos. Iteradores: Procesa componentes en forma secuencial.

Tipos Genéricos de Datos AbstractosLos TDAs se usan para definir un nuevo tipo a partir del cual se pueden crear instancias. Como se

mostró en el ejemplo de la lista, algunas veces estas instancias deberían operar del mismo modo

sobre otros tipos de datos. Por ejemplo, uno puede pensar en listas de manzanas, carros o aún

listas. La definición semántica de una lista siempre es la misma. Solamente el tipo de los

elementos de datos cambia de acuerdo al tipo sobre el cuál debía operar la lista..

Esta información adicional podría ser especificada por un parámetro genérico que es especificado

al momento de la creación de la instancia. Así, una instancia de un TDA genérico es en la práctica

una instancia de una variante particular del TDA. Una lista de manzanas puede ser por lo tanto

declarada como sigue :

List<Apple> listOfApples;

Los corchetes angulares encierran ahora el tipo de datos para el cuál una variante del TDA

genérico List sería creada. listOfApples ofrece la misma interface que cualquiera otra lista, pero

opera en instancias del tipo Apple.

Conceptos de Orientación a Objetos Las secciones anteriores introducen ya algunos conceptos "de orientación a objetos". Sin

embargo, éstos fueron aplicados de una manera teórica, ahora pasemos ya a visualizar las

características del C++ y les damos nombres tal y como se usan en los lenguajes de

programación orientada a objetos existentes.

110

2015PROGRAMACION ORIENTADA A OBJETOS

Page 111: Programación Orientada a Objetos

11FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSLas características de C++ como lenguaje orientado a objetos son:

o Abstracción

Variables de instancia

Métodos de instancia

Variables de clase

Métodos de clase

o Encapsulación

De variables: privada, pública y protegida.

De métodos: privada, pública y protegida

o Herencia

Sencilla y múltiple

Unidades genéricas

Polimorfismo

Teniendo en cuenta los conceptos de herencia y Polimorfismo tenemos todo el panorama de la

programación orientada a objetos. La comunicación entre objetos es por medios de mensajes que

viene a ser la forma de invocar a un objeto. Hemos dicho que un objeto tiene características

llamadas atributos y procedimientos llamados métodos. Los mensajes tienen un método

(procedimiento) que se ejecutara cuando es invocado.

Mensaje (Se Invoca Método)

Objeto Emisor Objeto Receptor

Resultado De La Ejecución Del Método

Figura 6.2

6.2 Clases.- Un programa utiliza un grupo de objetos y estos objetos se crean utilizando un tipo de

dato denominado clase. Podemos decir que la clase es un registro (struct) evolucionado que ha

encapsulado los datos y las funciones incorporándoles además niveles de visibilidad. En la clase

los datos son las propiedades de la entidad que este representa y las funciones son las tareas

representativas de la entidad. De esta manera las clases representan las entidades del mundo real

de una manera más precisas que los registros. Además las clases tienen dos características que la

hacen elementos muy eficientes en la programación, estas son:

Herencia Polimorfismo

111

2015PROGRAMACION ORIENTADA A OBJETOS

Page 112: Programación Orientada a Objetos

6.3 Objeto.- Son las instancias de una clase, pues esta es la plantilla que nos permite crear los objetos

de acuerdo a la declaración de clase.

Ejemplo: Dada la siguiente declaración de clase:class rectangulo

{ private:

{int largo;

int ancho;

public:void asignar( int l, int a)

{ largo = l;

ancho = a;

}

int calcular_área( )

{ int A;

A = largo * ancho;

return ( A);

}};

Representación Gráfica

Clase Rectángulo

Largo Ancho Datos

Métodos

Figura 6.3

Posteriormente nosotros podemos declarar un objeto de la clase rectángulo de la siguiente manera:

rectangulo R1;

Esto significa que R1 tendrá 4 componentes

R1.largo dato miembro de tipo entero.

R1.ancho dato miembro de tipo entero

R1.asignar(int l, int a) función miembro que nos permite asignar valores a los dos datos miembro.

R1.calcular_area( ) función miembro que calcula el área y devuelve el valor.

PROGRAMA

// prog39.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std;

112

Asignar()

Calcular _area()

2015PROGRAMACION ORIENTADA A OBJETOS

Page 113: Programación Orientada a Objetos

11FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

class rectangulo{//datos privados private: int largo; int ancho;//metodos de acceso publicospublic: void set_largo(int l) { largo = l;} void set_ancho(int a) { ancho= a;} int get_largo() {return largo;} int get_ancho() {return ancho;} int calcular_area( ) { return (largo*ancho); }};void main(){ int L,A; rectangulo r1; system("cls"); cout<<"Ingrese largo: ";cin>>L; cout<<"Ingrese ancho: ";cin>>A; r1.set_largo(L); r1.set_ancho(A); cout<<"Largo = "<<r1.get_largo()<<endl; cout<<"Ancho = "<<r1.get_ancho()<<endl; cout<<"El área es : "<<r1.calcular_area()<<endl;_getch(); }

EJECUCION

6.4 Herencia: Característica mediante la cual podemos reutilizar una declaración de una clase y crear

otra clase. Por ejemplo: Creamos la clase estudiante hereda a la clase estudiante_universitario hereda de la clase estudiante y adiciona. La clase estudiante_universitario_uni hereda de la

anterior y también adiciona.Ver ejemplo 4.

113

2015PROGRAMACION ORIENTADA A OBJETOS

Page 114: Programación Orientada a Objetos

6.5 Polimorfismo: Característica que nos permite crear funciones que utilizando un mismo nombre

responderán de forma diferente de acuerdo a la clase a la cual pertenecen.

6.6 Secciones .- Los miembros de una clase que son variables y métodos (datos y funciones) pueden

ser públicos (public), protegidos (protected) y privados(private). Las secciones privadas y protegidas

tienen como objetivo el ocultamiento de datos. A los miembros de la sección privada se puede

acceder solo por las funciones miembro de esa clase, o por otras funciones declaradas amigas

(friend) de la clase. A los miembros públicos de una clase se pueden acceder desde fuera de la

clase, pero no se puede acceder desde una clase derivada de la clase base. Los miembros

protegidos son accesibles dentro de la clase en que estén definidas y en cualquier clase derivada de

la clase original. De acuerdo a lo dicho la declaración de una clase en forma general sera:

EJEMPLO 2: class rectangulo

{ private:

int largo;

int ancho;

public: void asignar( int l, int a)

{ largo = l;

ancho = a; }

int área( )

{ int A;

A = largo * ancho;

return ( A); }

114

2015PROGRAMACION ORIENTADA A OBJETOS

class nombre_clase{

private:

datos miembroprivadosfunciones miembro privadas …………………..

protected:datos miembro protegidosfunciones miembro protegidos ……………………………………..

public:datos miembro publicosfunciones miembro publicos …………………………………

Page 115: Programación Orientada a Objetos

11FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS };

class cuadrado

{ private:

int largo;

public: void asignar( int l )

{ largo = l; }

int área( )

{ int A;

A = largo * largo;

return ( A);}

};

void main( )

{ rectangulo R1;

cuadrado C1;

R1.asignar( 5,4);

C1.asignar(4);

clrscr()

cout << R1.area( )<< endl;

cout << C1.area( )<< endl;

}

El primer cout imprimirá 20 y el segundo cout imprimirá 16.

PROGRAMA //prog35

/* OBJETIVO: Desarrollar un ejemplo básico de POO */

#include “stdafx.h”#include<iostream>#include<conio.h>using namespace std;class rectangulo { private: int largo; int ancho; public: void set_largo(int l) { largo=l;} void set_ancho(int a)

115

2015PROGRAMACION ORIENTADA A OBJETOS

Page 116: Programación Orientada a Objetos

{ ancho=a;} int get_largo( ) { return largo;} int get_ancho( ) { return ancho;} int area( ) { int A; A = largo * ancho; return ( A); } }; void main( ){ rectangulo r1; int L,A;cout<<”Ingrese largo: “; cin>>L;cout<<”Ingrese ancho: “; cin>>A;r1.set_largo(L);r1.set_ancho(A);cout<<”Largo= “<<r1.get_largo()<<endl;cout<<”Ancho= “<<r1.get_ancho()<<endl;cout<<”Area= “<<r1.area()<<endl;_getch();}EJECUCION

EJEMPLO 3:Escriba un ejemplo de una clase con datos públicos. Indicando el acceso directo a los

datos miembro.

PROGRAMA /* CODIGO: cppcap06ejem03

FECHA: 27 de agosto de 2012OBJETIVO: Desarrollar un ejemplo básico con datos públicos*/#include<iostream.h>

#include<conio.h>

class grupo

{public:

int v1;

int v2;

int v3;

public:

float promedio( )

116

2015PROGRAMACION ORIENTADA A OBJETOS

Page 117: Programación Orientada a Objetos

11FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS { return(v1+v2+v3)/3.0;}

int menor( )

{ int m,men;

if (v1<v2)

m=v1;

else

m=v2;

if(m<v3)

men=m;

else

men = v3;

return(men);}

int mayor( )

{ int m,may;

if (v1>v2)

m=v1;

else

m=v2;

if(m>v3)

may=m;

else

may = v3;

return(may);}

};

void main( )

{ grupo g1;

clrscr();

cout<<"Ingrese valor 1==> ";cin>>g1.v1;

cout<<"Ingrese valor 2==> ";cin>>g1.v2;

cout<<"Ingrese valor 3==> ";cin>>g1.v3;

cout <<" El promedio es = "<<g1.promedio()<<endl;

cout <<" El menor es = "<<g1.menor()<<endl;

cout <<" El mayor es = "<<g1.mayor();

getch();

}

EJECUCION

117

2015PROGRAMACION ORIENTADA A OBJETOS

Page 118: Programación Orientada a Objetos

EJEMPLO 4:Escriba un ejemplo simple de utlizacion de herencia, defina la clase alumno y derive de

esta clase, una nueva clase llamada nota, que almacenará la nota final de un alumno en un curso

determinado.

PROGRAMA/* CODIGO: cppcap06ejem04 FECHA: 7 de Agosto de 2012 OBJETIVO: Programa que define la clase alumno y despues deriva de esta la clase nota*/

#include <iostream.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

class alumno

{ protected:

char codigo[9];

char nombre[40];

public:

void asignar(char c[9],char n[40])

{ strcpy(codigo,c);

strcpy(nombre,n);}

void mostrar()

{ cout<<"Codigo= "<<codigo<<endl;

cout<<"Nombre= "<<nombre<<endl;

getch(); }

};

class nota : public alumno

{ private:

char curso [7];

float pf;

public:

void asignar(char c[9],char n[40], char cur[7],float prom)

{ strcpy(codigo,c);

strcpy(nombre,n);

strcpy(curso,cur);

pf= prom; }

void mostrar()

{ cout<<"Codigo= "<<codigo<<endl;

cout<<"Nombre= "<<nombre<<endl;

cout<<"Curso= "<<curso<<endl;

cout<<"Promedio Final= "<<nombre<<endl;

getch(); }

};

void main( )

{ alumno a1;

nota n1;

char code[9],name[40],curse[7];

118

2015PROGRAMACION ORIENTADA A OBJETOS

Page 119: Programación Orientada a Objetos

11FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS float promedio_fin;

clrscr();

//Procesando datos de clase base

cout<<"Ingrese codigo del alumno: ";cin>>code;

cout<<"Ingrese nombre del alumno: ";gets(name);

a1.asignar(code,name);

a1.mostrar();

//Procesando datos de clase derivada (Herencia)

cout<<"Ingrese codigo del alumno: ";cin>>code;

cout<<"Ingrese nombre del alumno: ";gets(name);

cout<<"Ingrese codigo del curso : ";cin>>curse;

cout<<"Ingrese promedio final : ";cin>>promedio_fin;

n1.asignar(code,name,curse,promedio_fin);

n1.mostrar();

}

EJECUCION

Ventajas de la programación orientada a objetos.- Son las siguientes:

Facilidad de Mantenimiento: Los programas son más fáciles de leer y de entender.

Facilidad de modificación: Se pueden modificar los objetos al modificar rápidamente la herencia.

Reusabilidad: Se pueden utilizar varias veces.

Fiabilidad: Se utilizan modelos ya comprobados.

PROBLEMAS1.- Desarrollar 3 programas de aplicación para ver la evolución desde la primera etapa deregistro (struct)

hasta el objeto. Los programas son:

A) Programa con registros lee 2 notas y calcula el promedio con una función externa al registro.

B) Programa con registros lee 2 notas y calcula el promedio con una componente función.

C) Programa con objetos lee 2 notas y calcula el promedio con una función miembro.

PROGRAMA(A)/* CODIGO: cppcap06prob01a FECHA: 28 de agosto de 2012 OBJETIVO: Primer programa ejemplo de una estructura clásica*/#include<iostream.h>

119

2015PROGRAMACION ORIENTADA A OBJETOS

Page 120: Programación Orientada a Objetos

#include<conio.h>

struct notas

{ float nota1;

float nota2; };

float calcula_prom (float p1, float p2);

void main ( )

{notas n;

clrscr( );

cout << "ingrese 1ra. Nota => "; cin >> n.nota1;

cout << "ingrese 2da. Nota => "; cin >> n.nota2;

cout << " El promedio es = " << calcula_prom ( n.nota1, n.nota2);

getch( ); }

float calcula_prom (float p1, float p2)

{ float prom ;

prom = (p1 + p2)/2.0;

return(prom); }

EJECUCION

PROGRAMA(B)

/* CODIGO: cppcap06prob01b

FECHA: 28 DE MARZO DE 2012

OBJETIVO: Segundo programa ejemplo tenemos la estructura pero ya tenemos

una componente función miembro de la estructura tiende a una clase*/

#include <iostream.h>

#include<conio.h>

struct notas

{ float nota1;

float nota2;

float calcula_prom (float p1, float p2)

{return( (p1 + p2) / 2.0);}

};

void main ( ){ notas n;

clrscr( );

cout << "ingrese 1ra. Nota => ";

cin >> n.nota1;

cout << "ingrese 2da. Nota => ";

120

2015PROGRAMACION ORIENTADA A OBJETOS

Page 121: Programación Orientada a Objetos

12FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS cin >> n.nota2;

cout << " El promedio es = " << n.calcula_prom ( n.nota1, n.nota2);

getch( );

}

EJECUCION

PROGRAMA(C)/* CODIGO: cppcap06prob01c FECHA: 28 de agosto de 2012 OBJETIVO: Tercer programa realiza lo mismo que los anteriores pero usando clases y objetos*/# include <iostream.h>

# include<conio.h>

class notas

{ private:

float nota1;

float nota2;

public:

void asignar (float n1, float n2)

{ nota1 = n1;

nota2 = n2;}

float calcula_prom ( )

{ return( (nota1 + nota2) / 2.0); }

};

void main ( )

{ float a1, a2;

notas n;

clrscr( );

cout << "ingrese 1ra. Nota => "; cin >> a1;

cout << "ingrese 2da. Nota => "; cin >> a2;

n.asignar( a1, a2);

cout << " El promedio es = " << n.calcula_prom ( );

getch( ); }

EJECUCION

2.- Escriba un programa que nos permita leer un conjunto de notas (dos notas por alumno ) de “n” alumnos y muestre el promedio

de cada alumno y el promedio total.

// pro19.cpp: define el punto de entrada de la aplicación de consola.

121

2015PROGRAMACION ORIENTADA A OBJETOS

Page 122: Programación Orientada a Objetos

#include "stdafx.h"/*OBJETIVO: Programa que trabaja con un vector de objetos*/#include <iostream>#include<conio.h>using namespace std;class notas { private: float nota1; float nota2; public: void set_nota1 (float n1) { nota1 = n1;}

void set_nota2 (float n2) { nota2 = n2;}

float get_nota1 ( ) { return nota1 ;}

float get_nota2 ( ) { return nota2;} float calcula_prom ( ) { return( (nota1 + nota2) / 2.0);} };void main ( ) { int i,m; float prac1, prac2,promedio_total; notas alu[50]; system("cls"); cout<<"Ingrese número de alumnos--> ";cin>>m; promedio_total=0; for(i=1; i<=m; i++) {cout<<" Alumno "<<i<<": "<<endl; cout << "ingrese 1ra. Nota => "; cin >> prac1; cout << "ingrese 2da. Nota => "; cin >> prac2; alu[i].set_nota1( prac1);

alu[i].set_nota2( prac2); promedio_total = promedio_total + alu[i].calcula_prom(); } // salida de resultados system("cls"); cout<< " PROMEDIOS DE N ALUMNOS Y PROMEDIO GENERAL"<<endl; cout<< " ==============================================="<<endl; for(i=1; i<=m; i++) { cout<<" Promedio ["<<i<<"]: "<<alu[i].calcula_prom()<<endl;} promedio_total= promedio_total/m; cout<<" PROMEDIO GENERAL: "<<promedio_total<<endl; _getch( ); }

EJECUCION

122

2015PROGRAMACION ORIENTADA A OBJETOS

Page 123: Programación Orientada a Objetos

12FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

3.- Escriba un programa que defina la clase cuadrado y cubo además debe calcular el área del cuadrado, el

área del cubo y el volumen.

SOLUCIÓNPROGRAMA/* CODIGO: cppcap06prob03 FECHA: 23 de agosto de 2012 OBJETIVO: Programa que define la clase cuadrado y cubo, calcula área del cuadrado, el área del cubo y el volumen. */ #include <iostream.h>

#include<conio.h>

class cuadrado

{ private:

int lado;

public:

void asignar( int l )

{ lado = l; }

int area( )

{ int A;

A = lado * lado;

return ( A); }

};

class cubo

{ private:

int lado;

public:

void asignar( int l )

{ lado = l; }

int area( )

{ int A;

A = 6*lado * lado;

return ( A); }

int volumen( )

{ int V;

V = lado*lado * lado;

return (V); }

};

void main( )

123

2015PROGRAMACION ORIENTADA A OBJETOS

Page 124: Programación Orientada a Objetos

{ cuadrado C1;

cubo C2;

int LADO;

clrscr();

cout<< "Ingrese Lado del cuadrado: ";

cin>> LADO;

C1.asignar(LADO);

cout<< "Ingrese Lado del Cubo: ";

cin>> LADO;

C2.asignar(LADO);

cout<<"Resultados del Cuadrado: "<<endl;

cout<<" Area = "<<C1.area()<<endl;

cout<<"Resultados del Cubo: "<<endl;

cout<<" Area = "<<C2.area()<<endl;

cout<<" Volumen = "<<C2.volumen()<<endl;

getch(); }

EJECUCION

EJERCICIOS PROPUESTOS1) Escribir un programa que me permita crear la clase persona, considerando, dni,nombre, fecha de

nacimiento , distrito donde vive y teléfono. El programa debe crear la clase y declarando objetos de

esta clase ingreasr datos y después mostrarlos.

2) Escribir un programa que considere la clase anterior y declare un vector de objetos de esa clase,

además debe poder consultar este vector de objetos y listar los dni y nombres que viven en un

determinado distrito.

3) Se tiene la clase empleado con código, sueldo, nombre y categoría, escribir las declaraciones de

datos miembros y crear las funciones miembro, de lectura, mostrar_datos y asignación de sueldos,

esta ultima debe realizarse de la siguiente manera:

Categoría A sueldo de 4500 mensual

Categoría B sueldo de 4000 mensual

Categoría C sueldo de 3000 mensual

Categoría D sueldo de 2000 mensual

4) Escriba un programa que trabaje con la clase anterior pero con vectores de objetos y que visualize

todos los empledaos por categoría..

5) Escriba un programa que me permita ingresar varios cursos creando la clase curso y finalmente me

entrege un listado. La clase curso debe considerar código, nombre, costo y duración en horas.

124

2015PROGRAMACION ORIENTADA A OBJETOS

Page 125: Programación Orientada a Objetos

12FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

CAPITULO VII

125

2015PROGRAMACION ORIENTADA A OBJETOS

Page 126: Programación Orientada a Objetos

CAPITULO VIICONSTRUCTORES Y DESTRUCTORES

7 CLASES Y CONSTRUCTORES.-

7.1 Funciones miembro.- Las funciones miembro con componentes de una clase y normalmente

se definen dentro de la clase como funciones de línea(inline). Pero también podemos definir el

cuerpo de la función fuera de la clase. El ámbito de una función se debe indicar por el operador

ámbito (:: ) con el nombre de la clase. Ej:

PROGRAMA

126

2015PROGRAMACION ORIENTADA A OBJETOS

// prog19.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: Programa de funciones que utilizan el operador de ambito */#include <iostream>#include <conio.h>using namespace std;class nota{ private:int practica1;int practica2;public:void asignar( int p1, int p2);float promedio( ); };

void nota :: asignar( int p1, int p2){ practica1 = p1; practica2 = p2;}float nota :: promedio(void){ float prom;prom = (practica1+practica2)/2.0;return( prom); }void main ( ) { int prac1, prac2; nota practicas; system("cls"); cout<< "Primera practica: "; cin >>prac1; cout<< "Segunda practica: "; cin >>prac2; practicas.asignar(prac1,prac2); cout<< " El promedio sera = "<< practicas.promedio( ); _getch();}

Page 127: Programación Orientada a Objetos

12FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

7.2 Constructores y Destructores.-Cuando se menciono a los punteros se dijo que se puede crear

variables apuntadas en forma dinámica(en ejecución), para crear estas se utiliza el operador new y para

liberarlas el operador delete, en la POO existen mecanismos similares. Cuando se crea un objeto es

llamado un método que se denomina constructor y al terminar(salir) se llama a otro método conocido

como destructor. Esto es lo que veremos a continuación.

7.2.1 Constructor.- Es un método especial que construye objetos. Un constructor es llamado

para crear una instancia de ese objeto asignando espacio a un objeto puede también asignar

valores a sus miembros datos. El constructor realiza una inicialización automática y no devuelve

ningún valor. Tiene el mismo nombre que la clase con la cual está asociada. Puede tener

parámetros como cualquier otra función y tener por lo tanto distintas formas. Si no se define para

una clase, el compilador generara un constructor por defecto.

Ejemplo:class circulo { private:

int c_x, c_y;

double radio;

public: // constructor

circulo( int x, int y, double r)

{ radio = r;

c_x = x;

c_y = y; }

};

Tipos de constructores: Los constructores pueden ser:

Constructores sin argumento

127

2015PROGRAMACION ORIENTADA A OBJETOS

// prog19.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: Programa de funciones que utilizan el operador de ambito */#include <iostream>#include <conio.h>using namespace std;class nota{ private:int practica1;int practica2;public:void asignar( int p1, int p2);float promedio( ); };

void nota :: asignar( int p1, int p2){ practica1 = p1; practica2 = p2;}float nota :: promedio(void){ float prom;prom = (practica1+practica2)/2.0;return( prom); }void main ( ) { int prac1, prac2; nota practicas; system("cls"); cout<< "Primera practica: "; cin >>prac1; cout<< "Segunda practica: "; cin >>prac2; practicas.asignar(prac1,prac2); cout<< " El promedio sera = "<< practicas.promedio( ); _getch();}

Page 128: Programación Orientada a Objetos

Constructores con argumento Constructores de copia

Esto lo veremos en el ejemplo:class nota { private : int dato;public: nota( ) { } nota(int d ) { dato = d; } nota( nota &y ) { dato = y.dato; } };

Ejemplo 2.- De un ejemplo de constructores con la estructura indicada

PROGRAMA// prog29.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: Programa que muestra los diferentes tipos de constructores*/#include <iostream>#include<conio.h>#include<stdio.h>#include<string.h>using namespace std;class nota{ private : int dato; public: nota( ) //CONSTRUCTOR SIN ARGUMENTOS { } nota(int d )//CONSTRUCTOR CON ARGUMENTOS { dato = d; } nota( nota &y )//CONSTRUCTOR DE COPIA { dato = y.dato; } void set_dato(const int val) {dato=val;} int get_dato() { return dato; } }; void main(){ nota d1; nota d2(8); nota d3(d2); d1.set_dato(7);

d3.set_dato(9); cout<<"dato1 = "<<d1.get_dato()<<endl; cout<<"dato2 = "<<d2.get_dato()<<endl; cout<<"dato3 = "<<d3.get_dato()<<endl; _getch(); }EJECUCION

Destructores: Un destructores lo opuesto a un constructor, así como el constructor separa memoria, el

destructor libera esa memoria que fue asignada al objeto por el constructor. El destructor es una función

128

2015PROGRAMACION ORIENTADA A OBJETOS

Page 129: Programación Orientada a Objetos

12FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSmiembro con el mismo nombre que la clase mas una tilde que se añade al principio. Una clase puede

poseer un destructor que no tiene argumentos y no devuelve valores. Ejemplo: class punto

{ private :

int x;

int y;

public:

punto( )

{ x= 0;

y = 0

}

~punto( )

{ }

};

Ejemplo 3.- De un ejemplo de constructores y de destructores, definiendo la clase complejo , que tiene

componente real y componente imaginaria.PROGRAMA// prog39.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: Programa que muestra los diferentes tipos de constructores y el destructor */#include <iostream>#include<conio.h>#include<stdio.h>#include<string.h>using namespace std;class complejo { private: int r, i; public: complejo()//constructor sin argumentos { r = i = 0; } complejo(const int re, const int im)//constructor con argumentos { r = re; i = im;} complejo(const complejo &comp)//constructor de copia { r = comp.r; i = comp.i;} ~complejo() { cout<<"El destructor ha sido llamado"<<endl;

_getch(); }//destructor void leer(const int val); void leei(const int val); int muestrar() { return r; } int muestrai() { return i; }};void main() {complejo c1(5,7); complejo c2; complejo c3(c1); cout<<"Parte real de c1= "<<c1.muestrar()<<endl; cout<<"Parte imaginaria de c1= "<<c1.muestrai()<<endl; cout<<"Parte real de c2= "<<c2.muestrar()<<endl; cout<<"Parte Imaginaria de c2= "<<c2.muestrai()<<endl; cout<<"Parte Real de c3= "<<c3.muestrar()<<endl; cout<<"Parte Imaginaria de c3= "<<c3.muestrai()<<endl; _getch(); }

129

2015PROGRAMACION ORIENTADA A OBJETOS

Page 130: Programación Orientada a Objetos

EJECUCION

Constructor new y destructor deleteEstos dos operadores tambiénconstruyen y destruyen, que es una

forma de decir también reservan y liberan memoria.

El operador new obtiene memoria del sistema operativo, y proporciona un puntero a su punto inicial. Su

sintaxis es: tipo *p ; p = new tipo;

El operador delete libera memoria reservada con new

Ejemplo 3:De un ejemplo de manejo de new y delete

PROGRAMA// prog49.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: Programa ejemplo de new y delete */#include <iostream>#include <conio.h>using namespace std;void main( ){int *p1, *p2; p1 = new int;//asigna la dirección de un campo entero a p1 que es puntero cout << " Ingrese valor = > "; cin >> (*p1);// almacena un valor en el campo apuntado por p1 p2=p1;//p2 toma la dirección de p1 p1 = new int; cout << " Ingrese valor = > ";cin >> (*p1);// almacena un valor en el campo apuntado por p1cout<<(*p1)<<endl; cout<<(*p2)<<endl;delete p1;//libera memoria de p1 delete p2;//libera memoria de p2 _getch ( ); }

EJECUCION

Analizando el ejemplo que hemos ejecutado:

Primero: podemos ver que el operador new busca un campo o estructura del tipo indicado, en nuestro

caso entero y cuando lo encuentra asigna la dirección al puntero respectivo y después bloquea el

acceso de otra variable a ese campo,

Segundo: el campo no tiene nombre propio sino que se le llama campo apuntado por, en nuestro

caso, p1 y esto se indica con *p1.

130

2015PROGRAMACION ORIENTADA A OBJETOS

Page 131: Programación Orientada a Objetos

13FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSTercero: El intercambio de información puede ser de puntero a puntero (p2=p1) o de campo apuntado

a campo apuntado (*p1) = (p2), sería un error lo siguiente: p1 = *p2.

Cuarto: La forma correcta de liberar a la memoria es delete p1 o delete p2.

131

2015PROGRAMACION ORIENTADA A OBJETOS

Page 132: Programación Orientada a Objetos

PROBLEMAS1.- Desarrollar un programa que maneje la clase empleado utilizando funciones fuera de la clase y que nos

permitan manejar el operador ámbito. La clase empleado tendrá los siguientes datos miembro y las

funciones indicadas.

class empleado

{ private:

int codemp;

char nomemp[40];

float hotemp;

float phoemp;

float pagemp;

public:

void ingreso_datos( int c, char[40], flota h, flota p);

float pago_neto( );

};

SOLUCION

PROGRAMA

/* CODIGO: PROGCPP07001

FECHA: 10 DE MARZO DE 2012

OBJETIVO: Programa que calcula pagos considerando funciones construidas

fuera de la clase pero que trabajan con el operador ámbito :: */

#include <iostream.h>

#include <conio.h>

#include <string.h>

#include <stdio.h>

class empleado

{ private:

int codemp;

char nomemp[40];

float hotemp;

float phoemp;

float pagemp;

public:

void ingreso_datos( int c, char n[40], float h, float p);

float pago_neto( );

};

void empleado:: ingreso_datos( int c, char n[40], float h, float p)

{ codemp=c;

strcpy(nomemp,n);

hotemp=h;

phoemp=p;

132

2015PROGRAMACION ORIENTADA A OBJETOS

Page 133: Programación Orientada a Objetos

13FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS }

float empleado:: pago_neto( )

{

float pg;

pg = hotemp*phoemp;

pg = pg*0.89;//considerando un 11% de descuento

return(pg);

}

void main()

{ int codigo;

char nombre[40];

float horas_trabajadas;

float pago_hora;

float sueldo_neto;

empleado emp1;

clrscr();

cout<<"Ingrese codigo del trabajador --> "; cin>>codigo;

cout<<"Ingrese nombre del trabajador --> "; gets(nombre);

cout<<"Ingrese Horas trabajadas --> "; cin>>horas_trabajadas;

cout<<"Ingrese Pago por Hora --> "; cin>>pago_hora;

emp1.ingreso_datos(codigo,nombre,horas_trabajadas,pago_hora);

sueldo_neto= emp1.pago_neto();

cout<<"Neto a pagar = "<<sueldo_neto;

getch();

}

EJECUCION

2.-Desarrollar un programa que maneje constructores y destructores de la clase caja que tiene las

características indicadas.

class caja

{ private:

int alto;

int ancho;

int largo;

…………………..

SOLUCIONPROGRAMA

133

2015PROGRAMACION ORIENTADA A OBJETOS

Page 134: Programación Orientada a Objetos

/* CODIGO: PROGCPP07002

FECHA: 10 DE MARZO DE 2012

OBJETIVO: Programa que maneja constructores de la clase caja. */

#include <iostream.h>

#include <conio.h>

class caja

{ private:

int alto;

int ancho;

int largo;

public:

// constructor

caja ( int al, int an, int l)

{ alto = al;

ancho = an;

largo = l; }

// destructor

~caja ( )

{ }

// función inline

int volumen ( )

{ return ( alto*ancho*largo);

}

};

void main ( )

{ caja caja1(2,3,4);

caja caja2(5,6,7);

clrscr( );

cout << "El volumen de la primera caja sera => " << caja1.volumen( )<<endl;

cout << "El volumen de la segunda caja sera => " << caja2.volumen( )<<endl;

getch( ); }

EJECUCION

3.-Desarrollar un programa que trabaje con aritmetica de punteros y maneje polinomiospudiendo desarrollar

operaciones simples con estos polinomios.

SOLUCIONPROGRAMA/* CODIGO: PROGCPP07003

PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA

134

2015PROGRAMACION ORIENTADA A OBJETOS

Page 135: Programación Orientada a Objetos

13FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS FECHA: 10 DE MARZO DE 2012

OBJETIVO: Programa que maneja la Aritmética de punteros*/

#include<iostream.h>

#include<conio.h>

#include<math.h>

void main( )

{ int a[10],b[10],n,i;

float pola,polb,x;

int *p1,*p2;

clrscr( );

cout<<"Ingrese valor n: ";cin>>n;

for(i=1;i<=n;i++)

{ cout<<"Ingrese valor de a["<<i<<"]= ";cin>>a[i];

cout<<"Ingrese valor de b["<<i<<"]= ";cin>>b[i]; }

cout<<"Ingrese x: ";cin>>x;

p1=&a[1];

p2=&b[1];

//hallando polinomios

pola=0;

polb=0;

for(i=1;i<=n;i++)

{ pola=pola+(*p1)*pow(x,n+1-i);

polb=polb+(*p2)*pow(x,n+1-i);

p1++; //en aritmética de punteros se asigna p1++ para

p2++; //suma 1 CAMPO!! al puntero no una unidad

}

cout<<pola<<endl;

cout<<polb<<endl;

cout<<pola+polb;

getch();

}

135

2015PROGRAMACION ORIENTADA A OBJETOS

Page 136: Programación Orientada a Objetos

CAPITULO VIII

CAPITULO VIIIHERENCIA Y CLASES DERIVADAS

8. CLASES DERIVADASa. Definición.-La forma sintáctica para indicar que una clase es derivada de otra clase existente

será:

class nombre_clase: [(public| private)] clase_base

{ declaraciones de miembros

136

2015PROGRAMACION ORIENTADA A OBJETOS

Page 137: Programación Orientada a Objetos

13FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS };

La palabra reservada class puede ser sustituida por la palabra reservada struct, con la

implicación de que los miembros son públicos por defecto.

Una de las dos palabras, public y private, en la clase derivada son opcionales, para especificar

como los miembros de la clase base tienen que ser accesibles a la clase derivada:

b. Clases derivadas: Mediante la propiedad de la herencia podemos derivar una clase de otra ya

existente. Podemos entonces indicar que las clases derivadas heredan los miembros de las

clases que les dan origen, a estas últimas se les llama clases bases

Ejemplo 1:

class persona // CLASE BASE { protected:

char nombre[30];

char dni[9];

public:

void asignar (char n[30], char d[9])

{ strcpy (nombre, n);

strcpy (dni, d); }

void mostrar ( )

{ clrscr();

gotoxy(30,3);

cout<<"DATOS DE LA PERSONA - CLASE BASE"; gotoxy(35,6);

cout <<"Nombre = "<<nombre;

gotoxy(35,8);

cout <<" DNI = "<<dni;

getch(); }

};

class empleado : public persona //CLASE DERIVADA{ private:

int codigo;

float sueldo;

public:

void asignar (char N[30], char D[9], int c, int s)

{ strcpy (nombre, N);

strcpy (dni, D);

codigo = c;

sueldo = s; }

void mostrar ( )

{ clrscr();

gotoxy(30,3);

cout<<"DATOS DEL EMPLEADO - CLASE DERIVADA";

gotoxy(35,6); cout << "Nombre = "<<nombre;

137

2015PROGRAMACION ORIENTADA A OBJETOS

Page 138: Programación Orientada a Objetos

gotoxy(35,8);

cout <<" DNI = "<<dni;

gotoxy(35,10);

cout <<"Codigo = "<<codigo;

gotoxy(35,12);

cout <<"Sueldo = "<<sueldo<<endl;

getch();

}

};

c. Herencia múltiple.- Este concepto nos indica que una clase puede derivarse de más de una clase, un ejemplo es el

siguiente:

class base1

{ protected:

int dato1;

public: void asignar (int d1)

{ dato1 = d1;

}

};

class base2

{ private:

int dato2;

public:

void asignar (int d2)

{ dato2 = d2;

}

int leer ( )

{ return(dato2);

}

};

class derivada12 : public base1, private base2

{ public: void imprimir ( )

{ cout << b1<<leer( );

}

};

d. Funciones amigas (friend)

Sabemos que a un dato privado se puede acceder desde la misma clase o desde una función amiga. El concepto de

función amiga se refiere a una función que no es miembro de esa clase, pero que necesita acceder a los miembros

privados de una clase. Estas se declaran colocando su prototipo en la clase que son amigas, indicando esto don la

palabra reservada friend.

class empleado

{ private:

int code;

char nombre[40];

138

2015PROGRAMACION ORIENTADA A OBJETOS

Page 139: Programación Orientada a Objetos

13FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS float sueldo;

public:

friend void planilla (empleado e1, int valor);

};

void planilla (empleado e1, int valor)

{

e1.code =.....;

e1.sueldo;

}

e. Funciones virtuales.- Esta característica permite a una función estar definida en una clase base y su clase derivada

bajo el mismo nombre. La declaración de virtual solo debe hacerse en la clase base, la función será llamada de

acuerdo al objeto al cual está asociada.

class cuadrado

{ protected:

int lado;

public: virtual int area ( )

{ return (lado * lado);

}

};

class cubo: public cuadrado

{ public:

int area ( )

{ return (6* lado * lado);

}

};

PROBLEMAS

1.- Construya un programa orientado a objetos que utilice la clase base persona, con su datos miembro nombre y DNI, además de

considerar las funciones miembro asignar y mostrar; derivada de esta clase se manejara la clase empleado que añade datos

miembro código y sueldo, y redefina las funciones de la clase base.

SOLUCION

PROGRAMA

// prog59.cpp: define el punto de entrada de la aplicación de consola.

139

2015PROGRAMACION ORIENTADA A OBJETOS

Page 140: Programación Orientada a Objetos

#include "stdafx.h"/* OBJETIVO: PROGRAMA QUE CREA LA CLASE EMPLEADO QUE ES DERIVADA DE LA CLASE BASE PERSONA*/#include<iostream>#include<conio.h>#include<string.h>#include<stdio.h>using namespace std;class persona { protected: char nombre[30]; char dni[9]; public: void asignar (char n[30], char d[9]) { strcpy (nombre, n); strcpy (dni, d); } void mostrar ( ) {system("cls"); cout<< "DATOS DE LA PERSONA - CLASE BASE"<<endl; cout <<"Nombre = "<<nombre<<endl; cout <<" DNI = "<<dni<<endl; _getch(); } }; class empleado : public persona { private: int codigo; float sueldo; public: void asignar (char N[30], char D[9], int c, int s) { strcpy (nombre, N); strcpy (dni, D); codigo = c;

sueldo = s; } void mostrar ( ) { system("cls"); cout<< "DATOS DEL EMPLEADO - CLASE DERIVADA"<<endl; cout << "Nombre = "<<nombre<<endl; cout <<" DNI = "<<dni<<endl; cout <<"Codigo = "<<codigo<<endl; cout <<"Sueldo = "<<sueldo<<endl; _getch(); } };void main ( ) { persona p1; empleado e1; char name[30]; char di[9]; int code; float sb; system("cls"); cout << " Ingrese Nombre => "; gets(name); cout << " Ingrese DNI => "; cin >> di;fflush(stdin); p1.asignar( name, di); cout << " Ingrese Nombre => "; gets(name); cout << " Ingrese DNI => "; cin >> di; cout << " Ingrese Codigo => "; cin >> code; cout << " Ingrese sueldo bruto => "; cin >> sb; e1.asignar( name, di, code, sb); p1.mostrar(); e1.mostrar(); _getch( ); }

140

2015PROGRAMACION ORIENTADA A OBJETOS

Page 141: Programación Orientada a Objetos

14FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSEJECUCION

2.- Escriba un programa que simule un procesamiento de notas con dos sistemas de evaluación diferentes, el sistema A :

promedio de prácticas = (p1+p2+p3)/3.0. Nota final = (exapar + exafin + propra)/3.0y el sistema B : promedio de prácticas =

(p1+p2+p3+p4)/4.0;Nota final = (exapar + 2*exafin +2* propra)/5.0.

Use clases derivadas para este fin.

SOLUCION:

PROGRAMA

/* CODIGO: PROGCPP09002

PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA

FECHA: 12 DE MARZO DE 2007

141

2015PROGRAMACION ORIENTADA A OBJETOS

Page 142: Programación Orientada a Objetos

OBJETIVO: PROGRAMA QUE TRABAJA CON DOS CLASES DERIVADAS SIMULANDO DOS SISTEMAS DE EVALUACION

DE NOTAS*/

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

#include<ctype.h>

class notas

{ protected:

char code[10];

char name[40];

int exapar;

int exafin ;

float propra;

float notafin;

public:

void asignar( char c[10], char n[40], int ep, int ef)

{ strcpy(code, c);

strcpy( name,n);

exapar = ep;

exafin = ef;

}

void mostrar( )

{ clrscr( );

gotoxy(30,2);

cout << "BOLETA DE NOTAS";

gotoxy(31,6);

cout << " Codigo : "<<code;

gotoxy(31,8);

cout << " Nombre : "<<name;

gotoxy(31,10);

cout << " Examen Parcial : "<<exapar;

gotoxy(31,12);

cout << " Examen Final : "<<exafin;

gotoxy(31,14);

cout << " Promedio Pract. : "<<propra;

gotoxy(31,16);

cout << " Nota Final : "<<notafin;

getch();

}

};

class sistemaA : public notas

{ public:

int p1, p2 , p3;

public :

142

2015PROGRAMACION ORIENTADA A OBJETOS

Page 143: Programación Orientada a Objetos

14FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSvoid calcula_nf ( )

{ propra = (p1+p2+p3)/3.0;

notafin = (exapar + exafin + propra)/3.0;

}

};

class sistemaB : public notas

{ public:

int p1, p2 , p3, p4;

public :

void calcula_nf ( )

{ propra = (p1+p2+p3+p4)/4.0;

notafin = (exapar + 2*exafin +2* propra)/5.0;

}

};

void main ( )

{ char a1[10]; // almacena código

char a2[40]; //almacena nombre

int a3; //almacena examen parcial

int a4; //almacena examen final

char sistema;

sistemaA al1;

sistemaB al2;

clrscr( );

gotoxy(30,3);cout<<"INGRESO DE DATOS";

gotoxy(31,6);

cout<< " CODIGO : "; cin >> a1;

gotoxy(31,8);

cout<< " NOMBRE : "; gets(a2);

gotoxy(31,10);

cout<< " Examen Parcial : "; cin >> a3 ;

gotoxy(31,12);

cout<< " Examen Final : "; cin >> a4;

gotoxy(31,14);

cout<< " Sistema de evaluación A/B: "; cin >> sistema;

sistema = toupper( sistema);

// calculo de promedio de prácticas y nota final

if ( sistema == 'A')

{ cout << " Practica 1 : "; cin>>al1.p1;

cout << " Practica 2 : "; cin>>al1.p2;

cout << " Practica 3 : "; cin>>al1.p3;

al1.asignar(a1,a2,a3,a4);

al1.calcula_nf( );

al1.mostrar( ); }

if ( sistema == 'B')

{ cout << " Practica 1 : "; cin>>al2.p1;

cout << " Practica 2 : "; cin>>al2.p2;

143

2015PROGRAMACION ORIENTADA A OBJETOS

Page 144: Programación Orientada a Objetos

cout << " Practica 3 : "; cin>>al2.p3;

cout << " Practica 4 : "; cin>>al2.p4;

al2.asignar(a1,a2,a3,a4);

al2.calcula_nf( );

al2.mostrar( );

}

}

EJECUCION

3.-Desarrolle un programa que nos muestre claramente el concepto de Herencia múltiple, esto debe hacerlo derivando una nueva

clase de dos clases bases.

SOLUCION:

PROGRAMA

/* CODIGO: PROGCPP09003

PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA

FECHA: 17 DE MARZO DE 2007

OBJETIVO: PROGRAMA QUE TRABAJA CON HERENCIA DE DOS CLASES BASES */

144

2015PROGRAMACION ORIENTADA A OBJETOS

Page 145: Programación Orientada a Objetos

14FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

class alumno

{ protected:

char codalu[10];

char nomalu[40];

};

class curso

{ protected:

char codcur[7];

char nomcur[30];

float notcur;

};

class matricula: public alumno, public curso

{ private:

float pagoma;

int ok;//1 matriculado 0 no matriculado

public:

void asignar( char ca[10], char na[40],char cc[7], char nc[30],float nt, float pm, int sm)

{strcpy(codalu,ca);

strcpy(nomalu,na);

strcpy(codcur,cc);

strcpy(nomcur,nc);

notcur =nt;

pagoma=pm;

ok=sm;

}

void mostrar()

{ clrscr();

gotoxy(30,2); cout<< "DATOS DE MATRICULA ";

gotoxy(31,6); cout<< "Codigo : "<<codalu;

gotoxy(31,8); cout<< "Nombre : "<<nomalu;

gotoxy(31,10); cout<< "Cod. Curso : "<<codcur;

gotoxy(31,12); cout<< "Curso : "<<nomcur;

gotoxy(31,14); cout<< "Nota : "<<notcur;

gotoxy(31,16); if (ok ==1)

cout<<"MATRICULADO";

else

cout<<"MATRICULA PENDIENTE";

getch();

}

};

145

2015PROGRAMACION ORIENTADA A OBJETOS

Page 146: Programación Orientada a Objetos

void main ( )

{ matricula alu1;

char codigo[10],nombre[40], ccurso[7],ncurso[30];

float nota,pago;

int sm;

clrscr();

//Ingreso de Datos

gotoxy(30,2); cout<<"INGRESO DE DATOS";

gotoxy(31,6); cout<<"COIDGO : ";gets(codigo);

gotoxy(31,8); cout<<"NOMBRE : ";gets(nombre);

gotoxy(31,10); cout<<"COD. CURSO : ";gets(ccurso);

gotoxy(31,12); cout<<"CURSO : ";gets(ncurso);

gotoxy(31,14); cout<<"NOTA : ";cin>>nota;

gotoxy(31,16); cout<<"PAGO : ";cin>> pago;

gotoxy(31,18); cout<<"MATRICULA SI=1 NO=0 : ";cin>>sm;

alu1.asignar(codigo,nombre,ccurso,ncurso,nota,pago,sm);

alu1.mostrar();

}

EJECUCION

146

2015PROGRAMACION ORIENTADA A OBJETOS

Page 147: Programación Orientada a Objetos

14FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS4.- Escribir un programa que maneje el concepto de funciones amigas:

PROGRAMA

// prog69.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"/* OBJETIVO: PROGRAMA QUE TRABAJA CON FUNCIONES AMIGAS */#include<iostream>#include<conio.h>#include<string.h>using namespace std;class empleado { private: char nombre[20]; int codigo; public : empleado( char *nomb, int cod) // constructor { strcpy (nombre,nomb); codigo = cod;} friend void imprime_dat_emp(empleado c); // declaración de función amiga} ;void imprime_dat_emp(empleado c){ cout << "Nombre del cliente : " << c.nombre<< endl; cout << "Codigo del cliente : " << c.codigo << endl;} void main ( ) {system("cls"); empleado J ("Pedro Juarez", 1282015); imprime_dat_emp(J); empleado R ("Jose Ruiz", 1232014); imprime_dat_emp(R); _getch( ); }

CAPITULO XI

147

2015PROGRAMACION ORIENTADA A OBJETOS

Page 148: Programación Orientada a Objetos

CAPITULO XISOBRECARGA

9. POLIMORFISMO.- Es la capacidad de los objetos de responder de manera diferente a las mismas ordenes, dependiendo de la clase a la cual pertenecen. El Polimorfismo se implementa de dos maneras: Vía funciones virtuales Por sobrecarga.

f. VIA FUNCIONES VIRTUALES El concepto de función virtual ya lo vimos anteriormente, veamos ahora un ejemplo

Ejemplo:

/ * Ejemplo de Polimorfismo con funciones virtuales * /

# include<iostream.h>

# include<conio.h>

class figura

{ protected:

float par1;

public:

void asignar ( float p1)

{

par1 = p1;

}

virtual float area( )

{ return (0);}

};

class circulo : public figura

148

2015PROGRAMACION ORIENTADA A OBJETOS

Page 149: Programación Orientada a Objetos

14FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS { public:

virtual float area( )

{ return (3.1416*par1*par1);}

};

class cuadrado : public figura

{ public:

virtual float area( )

{ return (par1*par1);}

};

g. SOBRECARGA DE OPERADORES Y FUNCIONES

i. Introducción.- La sobrecarga de operadores, nos permite definir un operador de diferente forma, es una forma de

realizar el Polimorfismo. La sobrecarga es la técnica de redefinir un existente para que trabaje con otro tipo de datos.

Como sabemos no podemos crear un operador nuevo pero aquellos que ya existen podemos sobrecargarlos.

ii. Sobrecarga de Operadores.- Un operador puede ser sobrecargado. Los operadores sobrecargados cumplen las

siguientes propiedades.

Sobrecargados, no cambiaran su número de operandos (unitarios o binarios).

Sobrecargados, no cambiaran su prioridad.

No se pueden inventar operadores que no existan en C++.

La palabra reservada operator.- Para hacer que un operador de C++ actúe como un operador definido por el usuario,

se debe utilizar la palabra reservada operator. El formato de sobrecarga es:

Tipo operator<op> ( lista de argumentos)

Los operadores que se pueden sobrecargar son:

Operadores Unarios.

Operadores Binarios.

149

2015PROGRAMACION ORIENTADA A OBJETOS

Operador * (Indireccion) Operador -> (Indireccion) Operador + Operador - Operador ++ Operador --

Operador + Operador - Operador * Operador / Operador % Operador << Operador >> Operador & Operador ^ Operador | Operador [] Operador ()

Page 150: Programación Orientada a Objetos

Operadores De Asignación

Además de los operadores: , (coma), new y delete

Ejemplo de sobrecarga.-

#include <iostream.h>

#include <conio.h>

class duplicado

{public:

int x;

duplicado operator++ ()

{ x = x + x;

return *this; }};

void main () { // (Comprobación)

duplicado e1 = {5}, e2;

e2 = ++e1; // M.2 uso de operador ++ sobrecargado

cout << "e1 == " << e1.x << endl;

cout << "e2 == " << e2.x << endl;

getch(); }

iii. Sobrecarga de funciones.- Cuando una función tiene más de una definición decimos que es una función sobrecargada.

Sabemos que dos o más funciones pueden tener el mismo nombre pero para estar sobrecargadas den diferir en el tipo de

sus argumentos o el número de sus argumentos.

Es muy importanteconsiderar que bastante común es sobrecargar las funciones constructoras.

Ejemplo de sobrecarga de funciones

150

2015PROGRAMACION ORIENTADA A OBJETOS

Operador = Operador += Operador -= Operador *= Operador /= Operador %= Operador <<= Operador >>= Operador &= Operador ^=| Operador |=

/ * Ejemplo de sobrecarga de funciones * /# include<iostream.h># include<conio.h>

class vector{ private:float xm, ym;public: vector ( float x = 0, float y = 0){ xm = x;ym = y; }void vervector ( );void leervector ( float &x, float &y){ x = xm;

Page 151: Programación Orientada a Objetos

15FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS

PROBLEMAS1.- Construya un programa orientado a objetos desarrolle el polimorfismo utilizando el concepto de función virtual.

SOLUCION

PROGRAMA

/* CODIGO: PROGCPP010001

PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA

FECHA: 20 DE MARZO DE 2007

/ prog310.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std; class figura { protected: float par1; public: void asignar ( float p1) { par1 = p1; } virtual float area( ) { return (0) ; } };

class circulo : public figura { public: virtual float area( ) { return (3.1416*par1*par1); } }; class cuadrado : public figura{ public:

151

2015PROGRAMACION ORIENTADA A OBJETOS

/ * Ejemplo de sobrecarga de funciones * /# include<iostream.h># include<conio.h>

class vector{ private:float xm, ym;public: vector ( float x = 0, float y = 0){ xm = x;ym = y; }void vervector ( );void leervector ( float &x, float &y){ x = xm;

Page 152: Programación Orientada a Objetos

virtual float area( ) { return (par1*par1);} }; void main ( ) { circulo cir1; cuadrado cua1; float a1; system("cls"); cout<<"Ingrese radio circulo=> "; cin>> a1; cir1.asignar(a1); cout<< " Área = "<< cir1. area()<< endl; cout<<"Ingrese lado cuadrado=> "; cin>> a1; cua1.asignar(a1); cout<< " Area = "<< cua1. area();

_getch(); } 2.- Construya un programa que sobrecargue un operador realizando una operación para un objeto.

SOLUCION

PROGRAMA/* CODIGO: PROGCPP010002

PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA

FECHA: 12 DE MARZO DE 2007

OBJETIVO: Sobrecarga de operadores es la facultad que tiene un operador defuncionar de forma diferente según el

tipo de dato con el que se utilice,

Es decir, hacer que el operador funcione con los datos que el usuario cree.

En el cuerpo de la funciónhabrá que poner las operaciones que queramos

Que realice el operador */

// prog410.cpp: define el punto de entrada de la aplicación de consola.#include "stdafx.h"#include<iostream>#include<conio.h>using namespace std; class clase { int x,y; public: clase(int x=0,int y=0); clase operator +(clase &); void visualizar( ); ~clase(){cout<<"\nDestruyendo el Objeto ";} }; clase ::clase(int m,int n) { x=m;y=n;} clase clase::operator +(clase &obj) //pasa un objeto de tipo clase { clase aux; aux.x=x+obj.x; //x del objeto más x que pasa aux.y=y+obj.y; return(aux); } void clase::visualizar() { cout<<"\nx= "<<x<<' '<<"y= "<<y; }

void main( ) { clase a(5,7); clase b(5,3); clase c; c=a+b; //x de a más x de b ; y de a más y de b c.visualizar( ); //c=operator +b; _getch(); }

152

2015PROGRAMACION ORIENTADA A OBJETOS

Page 153: Programación Orientada a Objetos

15FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOSEJECUCION

3.- Construya un programa que sobrecargue una función utilizando dos tipos de datos diferentes, la funcióndebe ser simple.

SOLUCION

PROGRAMA/* CODIGO: PROGCPP010003

PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA

FECHA: 20 DE MARZO DE 2007

OBJETIVO: Función fecha recargada */

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

void fecha(char *fecha);

void fecha(int anno,int mes, int dia);

void main()

{ clrscr();

fecha("20/3/2007");

fecha(07,3,21);

getch();

}

void fecha(char *fecha)

{cout <<"Fecha: "<<fecha<<endl;}

void fecha(int anno,int mes, int dia)

{cout<<"Fecha: "<<dia<<"/"<<mes<<"/"<<anno;}

EJECUCION

153

2015PROGRAMACION ORIENTADA A OBJETOS

Page 154: Programación Orientada a Objetos

4.- Construya un programa que sobrecargue un constructor y que nos permita inicializar un arreglo y otro constructor que no

inicialice

SOLUCION

PROGRAMA

/* CODIGO: PROGCPP01004

PROGRAMA CREADO POR RICARDO CASTAÑEDA DE LA ROSA

FECHA: 20 DE MARZO DE 2007

OBJETIVO: Vamos a trabajar sobrecargando un constructor para permitir que tanto los objetos como los arrays de objetos

aparezcan dentro de un programa, como se sabe es común inicializar variables que inicializar arrays, de modo que para admitir

arrays de objetos sin inicializar, junto con objetos inicializados debe incluirse un constructor que permita la inicialización y otro que

no. */

#include<iostream.h>

#include<conio.h>

class base

{ protected:

int j;

public:

base();//sin inicializador

base(int n);//con inicializador

int getx();

};

base::base()

{j=0;}

base::base(int n)

{j=n;}

base::getx()

{return j;}

main()

{ int i;

base v1[10];//declaracion del array sin inicialización

base v2[10]={1,2,3,4,5,6,7,8,9,10}; //declaracion del Array con Inicializaciones

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

{ cout<<"v1["<<i<<"]-> "<<v1[i].getx()<<' ';cout<<endl;

cout<<"\t v2["<<i<<"]-> "<<v2[i].getx()<<" ";}

getch();

154

2015PROGRAMACION ORIENTADA A OBJETOS

Page 155: Programación Orientada a Objetos

15FUNDAMENTOS DE LA PROGRAMACION ORIENTADA A OBJETOS }

EJECUCION

155

2015PROGRAMACION ORIENTADA A OBJETOS