Está en la página 1de 184

Universidad Nacional de Ingenieria

Facultad de Mecanica

BORLAND C++ 5.0


NIVEL I
CON APENDICE EN MATLAB

Ingeniero Daniel Osorio Maldonado

Temas Paginas
UNI FIM
BORLAND C++

Indice 2
Introduccin 3
Algoritmos Pseudocodigo /Diagrama de Flujo 4
Identificadores ,variables, constantes 6
Procesos Secuenciales 8
Instrucciones de Control (Si Entonces) y anidadas 9
Instruccin de Control de Seleccin Multiple 14
Estructuras de Control Repetitivas 18
Elementos bsicos del Lenguaje C++/Borland C++ 24
Operadores en C++/Borland C++ 26
Tipos de Datos en C++/Borland C++ 29
Estructura de un Programa en C++/Borland C++ 31
Instrucciones de Control 34
Las estructuras de Control Repetitivas 37
Funciones Definidas , Funciones de Librera y Recursividad 41
Arreglos o Arrays 48
Arreglos Asignacin e Inicializacin de arreglos unidimensionales 49
Arreglos Bidimensionales 51
Tratamiento de Caracteres y Cadenas 54
Punteros 59
Asignacin Dinamica de Memoria 61
Estructuras y Anidamientos 64
Uniones 67
Programacin Orientada a Objetos Definiciones 69
LABORATORIOS 71
Apndice de Matlab 155
Introduccin 155
El EID de Matlab 156
Formatos de salida, operadores,comandos 158
Combinaciones, caracteres especiales, control de formatos 159
Tipos de matrices predefinidas 160
Formacion de Matrices a partir de Otras 161
Operador DOS Puntos 162
Aplicaciones con Matlab 163
Instrucciones de Control 166
Integracion Numerica con Matlab 174
Graficos con Matlab 176
Ejercicios sobre Ecuaciones no Lineales 178
Bibliografia 182

INTRODUCCION
Borland C++ es un lenguaje de programacin orientado a Objetos que utiliza como plataforma las
herramientas del lenguaje C estndar y del Lenguaje C++ .

DANIEL. OSORIO MALDONADO Pgina 2 de 184


UNI FIM
BORLAND C++
El curso esta orientado para aquellas personas que deseen conocer y aprender a programar con una
herramienta de un lenguaje de programacion que tiene dentro de sus caracteristicas el ser bastante flexible
y facil de manipular en cuanto a su sintaxis.
Debe tener en cuenta que esta herramienta ha servido para desarrollar otras aplicaciones que hoy en dia
vemos en el mercado.
El curso empieza con una breve descripcion del diseo a mano de los pasos a seguir en la solucion de un
problema este diseo es conocido como la etapa algoritmica que puede contener la parte
textual(pseudocodigo) y la parte grafica(Diagrama de Flujo).
A esta etapa se le debe dar la importancia necesaria, ya que es aqu donde se plantea el camino ha seguir.
El curso se va desarrollar integramente haciendo uso del editor, herramienta que permitir el manipuleo de
variables en linea de textos.
Se seguir luego la descripcin del Entorno Integrado de Desarrollo del Borland C++. El esqueleto o
estructura del Lenguaje Borland C++/C++ que , acompaar durante todo el curso. Se dar nfasis a la
tcnica de programacin en el uso correcto de la sintaxis, el buen uso del tipo de dato desde las principales
y luego sus derivadas,las Instrucciones de control simples o multiples y luego las instrucciones de control
repetitivas, se tratar el tema de los arreglos, recursividad, los punteros, las estructuras, asignacin
dinamica de memoria, para finalmente terminar con un enfoque preliminar de lo que se entiende por
programacin orientada a objetos, con ejemplos sencillos.
En el Apndice se desarrolla una primera parte de Matlab en su etapa inicial, sin llegar aprofundizar con la
idea que sirva de apoyo en la formacin del estudiante en los primeros ciclos.
En cuanto a la Progragramacion Orientada a Objetos, el uso de los proyectos y la programacion en
windows se ha reservado para un segundo Curso.

INTRODUCCIN A LA PROGRAMACIN
El Objetivo es Familiarizar al alumno con el entorno del Lenguaje de Programacin verstil y fcil de manipular
como es Borland C++; es mi deseo que Ud aproveche y aplique los conocimientos adquiridos, tanto en clase
de teoria como en el Laboratorio.
Algunos conceptos a tomarse en cuenta:
Dato(s)
Es una informacin que va a ser representada en un programa para su posterior modificacin.
Lenguaje maquina
Conjunto de instrucciones numricas en sistema binario (1 0 0 1 ) reconocido por el computador como
micro_operaciones.
Preprocesador
Permite la inclusin de archivos(#include), sustitucin de macros(#define) y compilacin condicional, las lneas
que comienzan con # contiene instrucciones para que el compilador realice ciertas tareas antes de que la
compilacion del programa se active es decir antes que el compilador traduzca el programa fuente en codigo
mquina. Su sintaxis es independiente del resto del lenguaje, siendo necesaria que estas lneas sean escritas
desde la primera columna del programa.
Compilador
Es un programa encargado de traducir las instrucciones de un programa a instrucciones de lenguaje de
maquina, verifica que no exista errores sintacticos del Lenguaje de programacin .
Sentencia
Describe el conjunto de acciones a seguir especificado en un lenguaje de programacin que ser ejecutado
por el computador.
Sintaxis
La sintaxis de un lengueje de programacion es el conjunto de reglas para formular instrucciones
gramaticalmente correctas para el lenguaje sea cual fuere. Ahora bien, en la practica significa esto que una
instruccin en Borland C++ con la sintaxis correcta tiene una forma apropiada especificada para su
compilador, de tal manera que ste aceptar la instruccin y no generar un mensaje de error.
TEMA: ALGORITMOS
PSEUDOCODIGO / DIAGRAMA DE FLUJO

DANIEL. OSORIO MALDONADO Pgina 3 de 184


UNI FIM
BORLAND C++

Los algoritmos pueden constituir por as decirlo en un listado de instrucciones que indican el camino a
seguir para dar solucin a un problema y que puede o no ser ser resuelto por una computadora ,
generalmente el algoritmo viene acompaado de un pseudocdigo y un diagrama de flujo.
Cuando el Algoritmo se ha desarrollado en forma correcta, el paso siguiente es llevar el pseudocodigo a la
codificacion del loenguaje de programacion.
Como ya se explic, la codificacion del algoritmo(pseudocodigo) en un determinado lenguaje debe
respetar su sintaxis para que el compilador pueda traducirlo en Lenguaje Maquina y hallar la solucion al
problema planteado.

ALGORITMO: Es un conjunto de pasos, procedimientos o acciones, que nos permite alcanzar un


resultado, resolviendo el problema planteado.
Etapas en la solucin de un Problema.
Un anlisis profundo del problema planteado.
Diseo y construccin del Algoritmo.
Verificacin del algoritmo.

Se entiende que por verificacin del algoritmo, el seguimiento del mismo con datos que se ajusten a las
caracterstica del problema que se va a resolver.

Caracterstica:
Los algoritmos en general deben ser:
Precisos :Los pasos a seguir en el algoritmo deben ser precisados claramente.
Definido: Debe dar siempre el mismo resultado para un conjunto de datos idnticos de entrada.
Finito : El algoritmo, independientemente de la complejidad del mismo, debe ser siempre de
longitud finita.

Metodologa:
Definicin de los Objetos_Datos de Entrada y Salida(Ingreso desde teclado y salida por pantalla)
Objetos_Datos de Entrada: Datos que se ingresan por teclado.
Objetos_Dato de salida: Datos u objetos de resultado.
Procesamiento de los Objetos_Datos (datos).
Visualizacion/Impresin de resultados.

Pseudocodigo
Es la parte textual del algoritmo,se podra decir que es como la receta para un paciente o tambin una
receta culinaria para cocinar un plato. Generalmente es la traduccin del Ingls de la sintaxis del
compilador al idioma con el que estamos trabajando.

DIAGRAMA DE FLUJO
Un diagrama de flujo es la representacin grfica de un algoritmo.
En cuanto a la simbologia utilizada para la representacin, se tomara la norma (ANSI ISO).

DIAGRAMA DEFINICION

DANIEL. OSORIO MALDONADO Pgina 4 de 184


UNI FIM
BORLAND C++

INICIO FIN

ENTRADA DE DATOS

PROCESOS/CONSTANTES

F V BIFURCACIN(V/F)

PROCESOS(Desde/Para)

LLAMADA A (PROCEDIMIENTOS/FUNCIONES)

ESCRITURA

PANTALLA

CONECTOR

CONECTOR A SIGUIENTE PAGINA

Direcciones del flujo del programa

DIAGRAMA NASSI_SCHNEIDERMAN(N-S)
Tambien conocido como diagrama de CHAPIN es como un diagrama de flujo en el que se omiten las
flechas y las cajas son contiguas. Las acciones sucesivas se escriben en cajas sucesivas y, como en los
diagramas de flujo se pueden escribir diferentes acciones en una caja y dependiendo de las acciones de
control estas cambian para su mejor interpretacin, tal como se vera en los ejercicios y aplicaciones.

Inicio
Accion 1
Accion 2

DANIEL. OSORIO MALDONADO Pgina 5 de 184


UNI FIM
BORLAND C++
Accion 3
Fin

Codificacin y Programacin
Es el Proceso mediante el cual se traduce un algoritmo a una codificacin en un lenguaje de programacin
especifico.

Programa
Conjunto de instrucciones que se ha desarrollado con la finalidad de que sea ejecutado por el computador.

Objetos_Datos
Son Objetos_Datos de un programa, todos aquellos datos manipulados por las Instrucciones.
Mediante ellos, en un programa podremos realizar el almacenamiento de los datos y de los resultados de
las distintas operaciones que intervienen en la solucin del problema.
Se les da este nombre solo para efectos de entrada y salida de datos en la solucion de un problema.

IDENTIFICADORES
Los identificadores son palabras creadas por el programador para dar nombre a los objetos y dems
elementos que necesita declarar en un programa: variables, constantes, tipos, estructuras de datos,
archivos, procedimientos.
Deben empezar siempre con una letra, no deben existir espacios en el nombre, no empezar con un
numero.

Z; labora_1; practica1; aulamb514dh

VARIABLES :
Una variable es un ente (objeto_dato) que almacena una posicin de memoria cuyo valor puede cambiar
durante el desarrollo del algoritmo o ejecucin del programa.
Una variable se identifica por los siguientes atributos:
a) nombre que le identifica.
b) tipo que describe el universo en donde se desenvuelve la variable.
Los nombres de las variables, a veces conocidos como Identificadores, suelen constar de varios
caracteres alfanumricos de los cuales el primero debe necesariamente ser una letra.

Ejemp: int par; float num_123 ; char opc1 ; char nombre[15] ; short pequenio1 ;
par=2. unsignet sin_signo;

CONSTANTES: Son identificadores que generalmente son declarados en el programa antes de las
variables, estos identificadores por lo general asumen un valor dado por el programador, ste valor no
cambia durante el proceso del programa.

Tipos de datos en general:


Se denomina tipo de datos a las caractersticas propias de un objeto_dato o entidad, por ejemplo la edad
o el domicilio de un registro, deben tener una caracterstica que la diferencie una de otra, la edad debe
ser entero y el domicilio cadena (tambin se conoce como alfanumrico), podemos decir entonces que
existen, en la mayora de los lenguaje de Programacin, los siguientes tipos de datos:
Numricos
Alfanumricos
Carcter
Lgicos (booleano) : cierto/falso

DANIEL. OSORIO MALDONADO Pgina 6 de 184


UNI FIM
BORLAND C++
Este tipo de Dato no existe en C++/Borland C++, lo que existe es la representacin 0 para falso y 1 para
verdadero.
En Borland C++ es bueno sealar que el tipo de dato bool permite que una variable cualquiera se le
inicialice con los terminos de true (verdadero=1) y false (falso=0), esto se aprecia cuando forzamos la
salida de las variables, se notar que true equivale a 1 y que false equivale a 0.
Esto se nota en el siguiente programa, rseuelto con Borland C++ y Visual C++ pero como proyecto Win
Console:
#include<iostream.h>
#include<conio.h>
main( ){
bool t,f;
t= "True";
cout<<"El Valor verdadero de t es "<<t;
cout<<"\nEl valor falso de t equivale a "<<!t<<endl;

getch();
} Dando como resultado:
el valor verdadero de t es 1
el valor falso de t quivale a 0

Otra manera es usando los Interruptores (switch=sw) que slo es usado cuando a la variable se le inicializa
a, 0 (falso) para luego cambiar a 1 (verdadero), con cualquiera de estos valores y dependiendo en la
ubicacion del programa se le cambia al valor opuesto
int sw=0; //se asume falso int i,sp=0,simp=0,sw=0; //asume falso
........do{ for(i=1;i<=100;i++)
if(a<b) if(i%2==0){
cout<<proceso1; sp=sp+i;
proceso2; sw=1; // asume verdadero }
sw=1 // asume verdadero else
else simp=simp+i;
cout<<proceso3 cout<<"La suma de los primeros 100 pares es
while(sw!=1);// mientras no sea verdadero "<<sp<<endl
................ <<"\nLa suma de los primeros 100 impares es
Ejemplo de aplicacin "<<simp;
/*Programa que suma los pares y los impares de getch();
100 numeros enteros positivos*/ }
#include<iostream.h> /*Salida
#include<conio.h> La suma de los primeros 100 pares es 2550
main(){ La suma de los primeros 100 impares es 2500 */

Operacin de Asignacin: La operacin de asignacin es el modo de


darle valores a una variable. La operacin de asignacin se representa con el smbolo .
Nombre de la variable<nom_var> dato o valor numerico.
Ejemp. A 45
No olvidarse que los datos son almacenados en la memoria de la computadora, especficamente en celdas
de memoria y una direccion, de all que se hace necesario tener un nombre que las identifique , ya sea
constante o variable. El siguiente grfico esquematiza lo dicho:

MEMORIA

DANIEL. OSORIO MALDONADO Pgina 7 de 184


UNI FIM
BORLAND C++

VAR1=66
SUM0 AUXVAR1*17

ACUVAR1+5 SUMSUM+AUX+ACU

SUM0+(66+17)+(66+5)

Como puede apreciar los valores son almacenados en bloque, claro que esta explicacin es muy
simplista,en realidad cada valor es almacenado en caldas de memoria y tienen una direccion que determina
que espacio de memoria va a utilizar.
El espacio de memoria la determina el tipo de datos que es utilizado por la variable o identificador. Esto
hace que un lenguaje de programacin difiera de un programa de aplicacin.
Espero que con estas lineas se comprenda la razon por la cual es necesario que una variable tenga un tipo
de datos.

TEMA: Los Procesos Secuenciales


Los procesos secuenciales, son todos aquellos procesos en los cuales la solucion de un problema se realiza
de manera directa y sin desviaciones o bifurcaciones.
P1: hallar el Area y la longitud de una circulo
Objeto_datos de Entrada:R (radio)
Objeto_datos de Salida :Area, Longitud

DIAGRAMA NASSI_SCHNEIDERMAN(N-S) DIAG FLUJO

Pseudocodigo Leer R
Inicio INICIO
Leer R Calculo del Area
Calculo del Area S=pi*R*R
S=pi*R*R R
Calculo de la longitud Calculo de la longitud
L=2*pi*R L=2*pi*R S=pi*R*R
Escribir S,L
Fin Escribir S,L
L=2*pi*R
Fin

S, L
INICIO

FIN

P2: Hallar la resultante de 02 Fuerzas que forman K=pi/180 um


ngulo
Objeto_dato de Entrada: F1,F1, theta
Objeto_dato de Salida : Resultante R F1,F2,
Pseudocodigo
Inicio
Leer F1,F2,theta
K=pi/180
Leer F1,F2,Theta R=
Calculo de la Resultante
K=pi/180

R=OSORIO
DANIEL. F 2 2 F1F 2 cos(theta * K )
2
F1 MALDONADO2 R Pgina 8 de 184

Escribir R
FIN
UNI FIM
BORLAND C++

R= F12 F 2 2 2 F1F 2 cos(thetaK )


Escribir R
Fin N-S

P4. Desarrolle un algoritmo que permita simular el retiro de dinero de un cajero automatico.
El cajero solo emite billetes de las siguientes denominaciones: 200,100,50,20 y 10 .
Objeto_dato de Entrada: Q //Cantidad
Objeto_dato de Salida : b200, b100, b50, b20, b10 //denominacin de billetes
Pseudocodigo
Inicio
Leer Q INICIO
b200 =entero(Q/200)
Q=resto(Q/200)
b100=entero(Q/100) Q
Q=resto(Q/100)
b50=entero(Q/50)
Q=resto(Q/50) b200 =entero(Q/200)
b20=entero(Q/20) Q=resto(Q/200)
Q=resto(Q/20) b100=entero(Q/100)
b10=entero(Q/10) Q=resto(Q/100)
Escribir b200,b100,b50,b20,b10 b50=entero(Q/50)
Fin Q=resto(Q/50)
N-S b20=entero(Q/20)
Leer Q Q=resto(Q/20)
b200=entero(Q/200) b10=entero(Q/10)
Q=resto(Q/200)
b100=entero(Q/100)
Q=resto(Q/100) b200,b100,b50
b50=entero(Q/50) ,b20,b10
Q=resto(Q/50)
b20=entero(Q/20)
Q=resto(Q/20)
b10=entero(Q/10) FIN
Escribir
b200,b100,b50,b20,b10
Fin
TEMA: INSTRUCCIONES DE CONTROL DE PROGRAMA
Las estructuras de seleccin permite al usuario tener un control del programa mediante el uso de
instrucciones de control,constituyendo mecanismos para dirigir el flujo de ejecucin, dentro de estas
a).Instruccin de Control Simle.
La estructura Si - Entonces
Indica a la computadora que efecte una serie de una o mas instrucciones basadas en el resultado de
una comparacin.
INICIO

DANIEL. OSORIO MALDONADO Pgina 9 de 184


UNI FIM
BORLAND C++
Pseudocodigo
SI condicion es cierta, entonces V
CONDICION
Proceso de Cierta
Fin de SI F
PROCESO
DIAGRAMA NASSI_SCHNEIDERMAN(N-S)

CONDICION

VERDAD (SI)
PROCESO 1
FIN
PROCESO 2
ESCRIBIR

FIN

b). Instruccin de Control de alternativa doble


Indica a la computadora que debera realizar la comparacin de 02 alternativas, si se cumple la alternativa
verdadera debera realizar el proceso para esta alternativa. En caso contrario debera realizar la alternativa
Falsa.
Pseudocodigo INICIO
Si (condicion )es Verdaddera entonces
Proceso_Verdadad
Sino DATOS
Proceso_Falso
Fin del Si
NASSI SCHNEIDERMAN(N S) F V
CONDICION
CONDICION
PROCESO_F PROCESO_V
FALSO VERDAD

PROCESO_F PROCESO_V

IMPRIMIR
ESCRIBIR

FIN
FIN

Ejemplos de alternativa simple


1.1 Ingresar desde teclado un numero y emitir un mensaje si el numero ingresado es par.
Solucion
Objetos deatos de entrada: A INICIO
Objeto dato de Salida: A es par
Pseudocodigo
Inicio A
Leer A
Si(residuo de A/2=0) entonces
Mensaje= El numero es par
Residuo(A/2)=
0

DANIEL. OSORIO MALDONADO Pgina 10 de 184

A>B
INICIO
A,
UNI FIM
BORLAND C++
Fin del Si
Escribir Mensaje
Fin Men= Par

Men

FIN

1.2 Ingresar 02 numeros y luego ordenarlos mediante un algoritmo de menor a mayor


Solucion
Objetos datos de entrada: A,B
Objeto dato de Salida: Ordenado
Pseudocodigo
Inicio
Leer A,B

auxA
AB
Baux

A,B

FIN

1.3 Ingrese una edad y decir si es mayor de edad e INICIO


imprimir la edad ingresada
Objeto_Dato de Entrada: Edad
Objeto_Dato de Salida :Men y edad
E
Pseudocodigo
Inicio
Leer E
Si (E>=18) entonces
E>=18
Men= Mayor de Edad
Fin del Si Mayor de Edad

DANIEL. OSORIO MALDONADO


Men, E Pgina 11 de 184

Fin
UNI FIM
BORLAND C++
Escribir inicio
Men, E
Leer E
Fin
Si(E>=18)

VERDAD (SI)
Men= Mayor de Edad

ESCRIBIR
Men,E
FIN

Ejemplos de alternativa doble


1.4 Se tienen 02 numeros ingresados desde teclado verificar si A es divisible por B
Solucion
Objetos Datos de Entrada: A,B INICIO
Objetos Datos de Salida : mensaje
Inicio
Leer A y B A,B
Si A=0 entonces
men= A debe ser diferente de cero F V
Sino A=0
Si B=0 entonces
Men= no es posible la divisin V Men= A debe ser
Si (A>B) entonces B=0 diferente de cero
Si (resto(A/B)=0) entonces F
Men= A es divisible por B Men= No es
Sino possible la division
Men = A no es divisible por B
Fin del Si F
Sino A>B V
Men=
A debe se mayor que B F
Fin del Si Residuo(A/B)=0
>B
Escribir Men
Fin V
Men= A no es Men= Aes
divisible por B divisible por B

Mensaje

1.5 Se tienen cuatro mensajes para las notas FIN


obtenidas en un curso de Actualizacion; cuando la nota
obtenida es igual o mayor a 17 debe decir Sobre Saliente; si la nota es igual o mayor a 15
Notable;igual o mayor a 13 Aprobado; Asistente para el resto.
Haga el Algoritmo
Objeto_Dato de entrada:Nota
INICIO
Objeto_Dato de Salida :Mensaje
Pseudocodigo
Inicio N
Leer Nota (N)
Si N>=17 entonces F
N>=17

DANIEL. OSORIO MALDONADO Pgina 12 de 184


UNI FIM
BORLAND C++
Men=Sobre Saliente
Si no V
Si N>=15 entonces SOBRE
Men= NOTABLE F SALIENTE
N>=15
Sino
Si N>=13 entonces V
Men= Aprobado Notable
Sino
Men= Asistente
Fin del Si V
N>=13
Fin del Si
Fin del Si F
Escribir Men
Fin Asistente Aprobado

Men

INICIO

N-S

INICIO

LEER NOTA N

SI N>=17
NO SI

N>=15
NO SI SOBRESALIENTE

NO N>=13 SI NOTABLE

ASISTE APROB

ESCRIBIR MEN

FIN

DANIEL. OSORIO MALDONADO Pgina 13 de 184


UNI FIM
BORLAND C++

Tema: Instruccin de Control de Seleccin Multiple (conocido


como do Case; Case of; switch() )
Permite tener un control de una Var_Selectora, como condicin para varias alternativas; dependiendo
del Lenguaje de Programacin la condicin se le conoce como:
Var_Selectora ->(Case...), cuando se trata de Pascal, Vsual Basic, Visual Fox, etc.
Var_Selectora ->Switch cuando se trata de Lenguaje C o Borland C++ /Turbo C++,Visual C++,
usado tambien por Matlab.
Case(Var_Select) of cuando se trata de Pascal

Consideraciones a tener en cuenta en el uso del control multiple

La Var_Selectora puede ser variable, expresin, funcin; empero, sin embargo, el valor representado
debe ser por decir lo menos, un valor escalar es decir un dato numrico entero o un carcter . No se acepta
una cadena o un dato real.
Se debe entender que cada alternativa tiene un nico valor y que va ha realizar una determinada accin o
proceso.

Modo en que Funciona

(a) El valor de la Var_Selectora o(condicin) se evala en las alternativas uno a uno.

(b) Si halla una coincidencia que contenga el valor de la Var_Selectora, entonces ejecutara el proceso
correspondiente dando por finalizado la estructura, para luego buscar otra coincidencia, y ejecutar.

(c) Existe un termino que se usa ocasionalmente y que representa la accin cuando ninguna de las
alternativas se cumple, es el caso del si no , el termino no es obligatorio, pero permita clarificar una
aplicacin.

DANIEL. OSORIO MALDONADO Pgina 14 de 184


UNI FIM
BORLAND C++

INICIO
Pseudocodigo
Condicion o var_Selectora
En Caso que (Var_Selctora) sea Leer
Dato
Caso 1 proceso_1
Caso 2 proceso_2
Caso 3 proceso_3
Condicion
.
Caso N proceso_N
Caso X proceso_Desconocido
Var_alterna1
Fin del Caso Proceso1

Var_alterna2 Proceso2

Var_alterna3 Proceso3

Var_alternaN ProcesoN

Var_alternaX Proceso_Desco

IMPRIMIR

FIN

DIAGRAMA N - S

1 CONDICIONANTE O
VAR_SELECTORA
2
3

Proceso_1 Proceso_2
Proceso_3 X
.... N
Proce_N Proc_Desc

DANIEL. OSORIO MALDONADO Pgina 15 de 184


UNI FIM
BORLAND C++

Aplicacin: Programar una operacin Aritmtica con 02 operandos: Operando1 y Operando2


(enteros O reales) y que de acuerdo al Operador elegido habra un resultado. Considere que ud. Ha
diseado una calculadora que le permita realizar operaciones matemticas elementales y que Los
operadores permitidos son:
+ : suma Mas =+
- : diferencia
Menos =-
* : producto
Por =*
? : divisin entera
: residuo Entre =?
~ : potencia Residuo =
Potencia = ~
solucion:
Definir objetos_datos
Objeto_dato de entrada:
operador,Ope1,Ope2.
Objeto_dato de salida : Resultado.
Pseudocodigo:
Definir los Operadores: Entonces
Inicio Resultado =Residuo(Ope1/Ope2)
Leer operador si no
Ingrese : Ope1, Ope2 Resultado =0
En CASO que Operador SEA Fin del SI
+ : Resultado = Ope1 + Ope2 ~ :Resultado=Ope1 elevado al Ope2
- : Resultado = Ope1 Ope2 Otro Caso :Rsultado : No existe Operacin
* : Resultado = Ope1 * Ope2 Fin del Caso
? : SI Ope2 es diferente de 0 Imprimir respuesta
entonces fin
Resultado = Ope1 ? Ope2
si no
Resultado =0
Fin del SI
: SI Ope2 es diferente de 0

N-S
INICIO
Establecer Operandos op1,op2
Mas +; Menos -; Por *; Entre ?; Residuo ; Potencia ~

op1+op2 -

*
op1-op2
op1*op2 ?
op2<>0

no si op2<>0
error op1/ no si ~
op2 completado.
Se deja como ejercicio para que sea error resto op1~op2 x
(op1/op2
desconocido

DANIEL. OSORIO MALDONADO Pgina 16 de 184


UNI FIM
BORLAND C++

INICIO 1

Inicializar constantes
Mas =+
Menos =- IMPRIMIR
Por =* RESULTADO
Entre =?
Residuo =
Potencia =~

FIN
DIGITAR EL OPERADOR A
USAR

INGRESE :
OPERANDO1
OPERANDO2

OPERADO
R

+ Resultado = Operando1 + Operando2

- Resultado = Operando1 - Operando2

* Resultado = Operando1 * Operando2

Operando2
No Si
Diferente de
RESULTADO = Resultado= Ope1 ? Ope2

RESULTADO=RESIDUO(OPER1/OPER2)

RESULTADO=(OPE1)~(OPE2)
~

TEMA: Instruccin de Control Repetitivas 1


Son aquellas Instrucciones que permiten que ciertas aplicaciones en las cuales una opercion o conjunto de
ellas deben repetirse muchas veces, por consiguiente se puede afirmar que un programa que lee una lista

DANIEL. OSORIO MALDONADO Pgina 17 de 184


UNI FIM
BORLAND C++
de numeros puede repetir la misma secuencia de mensajes al usuario e instrucciones de lectura, hasta que
todos los numeros del rango establecido sean leidas.
Para efectos del C++/Borland C++ se van a tomar en cuenta slo las tres mas usadas:
mientras ->(While )
Hacer proceso Mientras (Condicion)-> (Do while)
Desde/Para-> (For)
Para otros lenguajes de programacion son en alguno casos combinaciones de ellas o en su defecto usan
otra nomenclatura como por ejemplo para Pascal es comun usar la instruccin (repeat until) repetir
hasta que, mientras que en Visual Basic es comun usar (do until) hacer hasta que ,estas son las mas
representativas de estos lenguajes de programacion.

Instruccin de control Repetitivo Mientras

la estructura repetiriva mientras(en Ingles WHILE o DOWHILE:hacer mientras ) es auella en que el


cuerpo del bucle se repite mientras se cumple una determinada condicin.se pueden representar:
Pseudocodigo
mientras (condicin ) sea verdadera
proceso
fin del mientras

NO
CONDICION
Diagrama Nassi_Schneiderman
SI IMPRIMIR

ACCIONES MIENTRAS < CONDICION>


FIN
Accion1
Accion2
Accion3

1. Desarrollar la suma de los primeros M terminos de la siguiente suma :

1 1 1 1 1 FIN
D=
A A B A 2 B A 3B A N *B
A,B,N

solucion: SUMA=0 ; C=1


definir objetos_datos E/S
objeto_dato de entrada: A,B,N.
Objeto_dato de salida : SUMA DE N.
1
Pseudocodigo:
Inicio
Leer A,B,N.
Definir C=1 //contador

Suma=0.
1

DANIEL. OSORIO MALDONADO Pgina 18 de 184


UNI FIM
BORLAND C++
Mientras(C=N) hacer

AB=(A+c*B).
Inverso=1/AB.
Suma=Suma+Inverso.
C++. C<N
Fin del mientras
Escribir: Suma=Suma+1/A.
Fin SUMA=SUMA+1/A
AB=(A+C*B)
INVERSO=1/AB
SUMA=SUMA+INVERS IMPRIMIR
O SUMA

C++

FIN

2. En la siguiente serie se pide hallar la suma de los elementos que ocupan las posiciones pares,y la
suma total de elementos, sabiendo que el # de termninos es igual a 50.

4 6 8
Su 2 ...
3 5 7 INICIO
Solucion:
Objetos_Datos de Entrada: N
Objetos_Datos de Salida: N
suma de posiciones pares: sp
suma total de elementos: su
Pseudocodigo i=1,su=0,sp=0
Inicio
Leer N F
Establecer variables i<-N
i=1; par=0;Su=0;
mientras(i<=N) V sp,su
si(resto (i/2=0)entonces V
Resto(i/2)
sp=2*i/(2*i-1)
=0
fin del si F
su=2*i/(2*i-1) sp=2*i/(2*i-1)
i=i+1
fin del mientras
escribir su, sp FIN

sp=2*i/(2*i-1)

i=i+1

Instruccin de control Repetitivo hacer procesesos mientras(condcion)

DANIEL. OSORIO MALDONADO Pgina 19 de 184


UNI FIM
BORLAND C++
En este tipo de Instruccin de control repetitivo difiere un poco con respecto al mientras en el sentido que
las instrucciones se realizan al menos una vez antes de comprobar si la condicin se cumple, es muy
parecida al repeat until del Pascal.
Pseudocodigo
Hacer (procesos)
mientras (condicin ) sea verdadera PROCESO1
fin del hacer .

PROCESO2
DIAGRAMA (N-S)
PROCESO1
V F
PROCESO2
Condicion

MIENTRAS CONDICION ESCRIBIR

FIN

Problema de Aplicacin INICIO


Se ingresa un Numero de varias cifras,
y luego invertis sus cifras. LEER
Por ejemplo 1234 invertido 4321 N
Objetos_datos de entrada y Salida
Inverso=0
Objeto_Dato de Entrada: Numero
Objeto_Dato de Salida:Salida numero invertido.
Leer
Pseudocodigo numero
Inicio
Leer numero
Inicializar variable : inverso 0 Inverso 0
Hacer
Digito resto(M/10)
Inverso inverso*10+digito.
M=numero/10 M=numero
Mientras(numero>0)
Escribir inverso
Fin Digitoresto(M/10)

Inversoinverso*10
+digitoM=numero

M=numero/10

V F
Numero>
0
Inverso

FIN

DANIEL. OSORIO MALDONADO Pgina 20 de 184


UNI FIM
BORLAND C++
Esta instruccin hacer procesos mientras (condicion) sea verdadera, es utilizada para consistenciar y
controlar la repeticion de un propgrama sin necesidad de salir, dandole al usuario el control del mismo. Vea
el siguiente ejemplo:
Se desea hallar la suma de los primeros N terminos de la siguiente serie:

1 2 3 4
S ...
t 1 2t 3 3t 5 4t 7

DANIEL. OSORIO MALDONADO Pgina 21 de 184


UNI FIM
BORLAND C++

Instruccin de control Repetitivo for


Esta instruccin de control repetitivo considera: que el proceso debe iniciarse para un valor inicial que
vendra a ser el inicio del contaje, una segunda expresin que contiene el valor mximo o mnimo que
puede tener el contaje y determina cuando termina el ciclo, hasta aqu tal vez es el formato que usa la
mayoria de los lenguajes de programacin; sin embargo para el lenguaje C, C++ o Borland C++,
existe lo que se conoce como el incremento o decremento (se suma o se reta el contaje).
Para otros lenguajes es tal vez mas facil iniciar con el Valor Maximo para luego ir disminuyendo en unida
en unidad.
Diagrama de Flujo (for )
Pseudocodigo
INICIO
Desde/Para var_contador=val de ini HASTA Valor Fin o Max
ProcesoA
Proceso Para Vcont=
Valor_inic, Valor_fin
Fin del Desde/Para HACER
Diagrama N-S

PROCESO
desde/para de var_contador=Vi Hasta Vf

ProcesoA
ProcesoB IMPRIMIR
Fin desde/para

FIN

Aplicacin
Se va a Ingresar un Numero y la tarea consiste
en mostrar todos los divisores de ese numero ingresado.
Cuando el numero Ingresado tiene por divisores
a la unidad(1) o al mismo numero mostrara un
mensaje diciendo El Numero es Primo

SOLUCION
Objetos_Datos de ENTRADA Y SALIDA
Objejo_Datos de Entrada: el Numero entero(NumeEnte)
Objeto_Dato de Salida : numero de divisores(NumeDivi),

DANIEL. OSORIO MALDONADO Pgina 22 de 184


UNI FIM
BORLAND C++
mensaje

PSEUDOCODIGO
Inicio
Leer un Numero entero: NumeEnte
Definir la variable Contador de Divisores e Inicializarla 0
NumeDivi=0
Contabilizar los divisores y mostrarlos
PARA Divisor=1 HASTA NumeEnte, HACER
INICIO
SI Residuo de NumeEnte/Divisor=0, ENTONCES
Inicio
Escribir Divisor
ContDiv=ContDiv+1 LEER NumeEnte
fin del SI
Fin del PARA
Escribir mensaje ContDivi=0
SI ContDiv=2, ENTONCES
MENSAJE Numero Primo
SINO para Divisor=1,
MENSAJE No es Primo NumeEnte
Fin del Si

Fin Resto(Num si
eEnte/Divis
or=0
no
Escribir Divisor
1

ContDivi=ContDivi+1
No si
ContDivi=
2

No es Primo Numero Primo

MENSAJ 1
DIVISOR
E

FIN

DANIEL. OSORIO MALDONADO Pgina 23 de 184


UNI FIM
BORLAND C++

TEMA: ELEMENTOS BSICOS DEL BORLAND C++

Smbolos
Estn clasificados en:
letras : A..Z, a..z (no incluye la y )
dgitos : 0 1 2 3 4 5 6 7 8 9
smbolos especiales
se tienen los siguientes:
simples :

SIMPLES

+ - * / = < >

; ! : % & { } . ,

^ | sizeof

DOBLES
<= >= == !! |= &&

?: -> >> << != ( ) [ ] += -=

>>= <<=

// /* */

Identificadores

Es el nombre mediante el cual se define una variable, constante, tipo, funcin, estructura, unin, clase,
objeto, etc.
Los identificadores declarados en Boland C++ tienen las siguientes caractersticas.
Pueden estar conformados por 127 caracteres como mximo.
Ejemplos :
Suma = ( 4 caracteres )
Contador = ( 8 caracteres )

DANIEL. OSORIO MALDONADO Pgina 24 de 184


UNI FIM
BORLAND C++
Se hace distincin entre maysculas, minsculas.
Ejemplo :
SUMA =25, suma=25; en ambos el identificador para el compilador es diferente
Tienen que ser distintas de las palabras reservadas.
Ejemplos :
continue, incluye,if , while, bool, for , etc
El primer carcter debe ser letra subrayado
Ejemplo :
Suma = Correcto
1 Suma= Incorrecto el 1er carcter debe ser letra */
Suma1= Correcto
Suma 2m= no debe haber espacios entre el nombre//incorrecto
Suma_2m= correcto
Suma+si= incorrecto, no debe haber operacin entre su nombre
S9_suma= correcto
S9+suma=incorrecto

Palabras reservadas
Son identificadores que tienen un significado especial establecido por el lenguaje de programacin.
Siempre deben escribir en minsculas.
Se lista a continuacin las palabras reservadas definidas por el compilador Borland C++

asm auto break case continue


char class const default delete
Do double else enum extern
Far float for friend if
inline int interrup long near
new operator pascal private protected
public register signed sizeof static
struct union unsigned virtual void
volatile while time rand random()

Comentarios
Sirven para documentar un programa y siempre van entre /* */ //.
Ejemplo :
/* Este es un comentario que tiene
mas de una linea */
//Otro comentario pero solo de una linea

EXPRESIONES Y OPERACIONES DE BORLAND C++


Expresin
Es un conjunto de operaciones ( Datos y/o variables ) y operadores que actan realizan operaciones
sobre los operandos, y que mediante el uso racional de parntesis puede forzar las expresiones
matemticas convenientes.
Ejemplo : 13*A+(11+B/46)
( x +41) /37

El cierto y falso en Borland C++


Borland C++, como ya hemos visto tiene una manera de tratar el tipo de dato booleano es decir cierto,
falso sin embargo, es bueno hacer notar que en algunas aplicaciones es imprescindible la forma natural
que tiene el lenguaje, me refiero al 0 y 1, ya que para borland C++ el 0 significa falso, por el contrario el
1.

DANIEL. OSORIO MALDONADO Pgina 25 de 184


UNI FIM
BORLAND C++
Lo podran apreciar en las aplicaciones que estan en ste libro.

Tema: Los Operadores de Borland C++

[ ] ( ) . -> ++ -- &
* + - ! sizeof /
% << >> < > < = >
== != | && !! ? :
= * = / = % = + = - = << =
> > & = | = , # ##

Las siguientes operaciones son especficos de C++/Borland C++

Los operadores # y ## son usados nicamente por el preprocesador.


Al usar un operador depende de la forma de el contexto, para que el mismo operador & puede ser
interpretado como :
Un and a nivel de bits ( A & B )
Un operador de direccin ( &A )
En C++ un paso de parmetro por referencia a una funcin.
En el primer caso el & es un Operador Binario.
En el segundo caso el & es un Operador Unario.

Prioridad de Operadores

En Borland C++ la tabla de Prioridad de los Operadores esta dividida en 16 categoras.


La categora #1 tiene la ms alta Prioridad.
La categora #2 ( los Operadores Unarios ) toman la segunda Prioridad, hasta el Operador coma (,) que
tiene igual Prioridad

Para el caso de los operadores unarios ( la categora #2 ), condicional ( la categora #14 ) y la de


asignacin ( la categora #15)
La agrupacin de estos operadores se ejecutan de Derecha a Izquierda todo, otra asociacin de los
operadores de Izquierda a Derecha.
Teniendo presente la prioridad de los operadores podemos deducir que resultado se obtendr al momento
que le programa ejecute una determinada sentencia, compuesta por expresiones que enlazan mediante los
operadores a las variables y datos del programa, predeterminando de esta forma que operador se
desarrolla primero.

Categora #1 Operador Que realiza (o ejecuta)


1. Ms alta () llamada de una funcin
[] Subscripcin de un Arreglo
-> C++ selector de componente Indirecto

DANIEL. OSORIO MALDONADO Pgina 26 de 184


UNI FIM
BORLAND C++
:: C++ acceso o resolucin del alcance
. C++ selector de componente directo
2. Unaria ! Negociacin Lgica ( NO)
A nivel de bits ( complemento a I )
+ Unitario ms
- Unitario menos
++ Preincremento o postincremento
-- Predecremento o postdecremento
& Direccin de la variable
* Indireccin
sizeof Devuelve el tamao del operando en ocho bits
new (separacin de memoria dinmica en C++ )
delete (liberacin de memoria dinmica en C++ )

3. Miembros de acceso . * C++ Referencia a un campo


* C++ Referencia a un campo
4. Multiplicativos * Multiplica
/ Divide
% Resto ( mdulo o resto de la Divisin entera )
5. Aditivo + Binario ms
- Binario menos
6. Desplazo << Desplazamiento de bits a la izquierda
>> Desplazamiento de bits a la derecha
7. Relacional < Menor que
<= Menor que o igual que
> Mayor que
>= Mayor que o igual que

Categora #2 Operador Que realiza (o ejecuta )


8. Igualdad == Igual a (tambien identicamente igual a)
!= No es igual a
9. & A nivel de bits Y
10. ^ A nivel de bits XOR
11. | A nivel de bits 0
12. && Lgico y
13. || Lgico o
14. Operador Ternario ?: (a >b )? Indica if (a) then x, else y
Donde el operador > puede ser cualquier otro
operador, <, >=, <=, =.
15. Asignacin = Asignacin sencilla
*= Asigna el producto
/= Asigna el cociente
%= Asigna el resto ( residuo)
+= Asigna la suma
-= Asigna la diferencia
&= Asigna AND a nivel de bits
^= Asigna XOR a nivel de bits
|= Asigna Or a nivel de bits
<< = Asigna desplazamientos de bits a la izquierda

>> = Asigna desplazamientos de bits a la derecha

16. La coma , Evaluacin

DANIEL. OSORIO MALDONADO Pgina 27 de 184


UNI FIM
BORLAND C++

El Operador Ternario (a>b)? a:b


Este operador reemplaza en cierta medida a la instruccin if<condicion> es verdadero entonces
proceso_verdadero, si no (else) proceso_falso.
Para nuestro caso (a>b)? a:b significa que si la condicon es verdadera entonces resulta a sino
resulta b.
Ejemplo: se tienen 03 nmeros A =30, B=19 y C=27, se pide hallar el menor de ellos
#include<iostream.h>
#include<conio.h>
main(){
float A =30, B=19 y C=27;
M=((A<B)? A:B) //el menor se almacena en M
N=((M<C)? M:C)// el menor se almacena en N
Cout<< El menor valor se almacenara en N<<N;
getch();
}}

Los Numero PseudoAleatorios


El Lenguaje C/C++ permite generar nmeros pseudoaleatorio, que pueden simular ciertos eventos, para ello
necesita de las librerias #include<stdlib.h> y #include<time.h>; mientras que la primera tiene que ver con la
librera estndar la otra utiliza el reloj del sistema.
Herramientas a usar
a). ramdomize(); al inicio y antes de utilzar las funciones que genere los valores pseudoaleatorios, esta funcin
genera valores frescos cada vez que es invocado.
b). rand()%N; genera valores pseudoaleatorios desde 0 hasta( N-1)
c). random(Valor final Valor inicial -1)+1; genera valores pseudoaleatorios desde un valor inicial hasta un
valor final. En la practica se usa la forma reducida : random(val_num)+ val_inicial.
#include<iostream.h> Ejemplo
#include<conio.h> //Simule el lanzamiento de un dado y adivine el
#include<stdlib.h> // obligado ; <time.h> opcional valor de la cara en una tirada
main(){ #include<iostream.h>
randomize();int Vf=45;Vi=1; #include<conio.h>
int m; #include<stdlib.h>//librera para los nmeros
m=rand()%33 //genera valores desde 0 hasta 32 //pseudoaleatorios
w=random(Vf-Vi-1)+1; //genera valores desde 1 main(){ randomize();
hasta 45 int cara=random(6)+1;
.. cout<< "El Valor de una tirada es " <<cara;
} getch();
}
Salida
El Valor de una tirada es 5

Direccionando en la pantalla( gotoxy(col,fil))


Borland C++ permite direccionar en la pantalla, una ubicacin que permita al usuario una mejor vista de la
aplicacin.
El comando gotoxy(col,fil), indica, un desplazamiento vertical(x) y un desplazamiento horizontal(y).
En la pantalla, el desplazamiento vertical va desde 0 hasta 80 caracteres, mientras que el desplazamiento
horizontal va desde 0 hasta 25.
Puede apreciarse en el siguiente diagrama, una salida para A+4.
Para una entrada vale lo referido.

0 1 2 310152030506070 80
1
2 gotoxy(20,2); cin>>A;
3

15
gotoxy(30,15);cout<< A+4<<A+4;
18
DANIEL. OSORIO
MALDONADO Pgina 28 de 184
25
UNI FIM
BORLAND C++

//Programa que usa gotoxy(x,y) if(y>m)


//Se pide generar 03 valores aleatorios en m=y;
el rango [7,17] y halla el mayor if(z>m)
#include<iostream.h> m=z;
#include<conio.h> gotoxy(20,15);cout<< "El Mayor es
#include<stdlib.h> ="<<m;
main(){ getch();
float x,y,z;randomize(); }
x=random(17)+7; /*Salida
gotoxy(10,5);cout<< "x ="<<x; x =12
y=random(17)+7;
gotoxy(10,7);cout<< "y ="<<y; y =23
z=random(17)+7;
gotoxy(10,9);cout<< "z ="<<z; z =11
float m=x;
El Mayor es =23 */

Tema: Tipos de Datos en C++/Borland C++

Determina la naturaleza del dominio de valores que puede tomar una variable u Objeto_Dato, as como
tambin los operadores que pueden procesar dicha variable.
Existen 2 tipos de datos
Tipos Fundamentales.
Tipos Derivados.

Tipos Fundamentales

Tipos enteros Tipos reales Tipo cadena Tipo vacio

Tipos Derivados

Punteros Estructuras Uniones Arreglos Funciones Clases

Los tipos de Datos de acuerdo a la plataforma de bits de los


Fundamentales
Tipo de Dato para 16 bits
Tipo Ancho Rango

unsigned char 8 bits 0 to 255


Char 8 bits -128 to 127
Enum 16 bits -32,768 to 32,767

DANIEL. OSORIO MALDONADO Pgina 29 de 184


UNI FIM
BORLAND C++

unsigned int 16 bits 0 to 65,535


short int 16 bits -32,768 to 32,767
Int 16 bits -32,768 to 32,767
unsigned long 32 bits 0 to 4,294,967,295
Long 32 bits -2,147,483,648 to 2,147,483,647
float 32 bits 3.4 x 10-38 to 3.4 x 10+38
Double 64 bits 1.7 x 10-308 to 1.7 x 10+308
long double 80 bits 3.4 x 10-4932 to 1.1 x 10+4932
not
near (pointer) 16 bits applicable
not
far (pointer) 32 bits applicable

Tipo de Dato para (32-bits)

Tipo Ancho Rango

unsigned char 8 bits To 255


Char 8 bits -128 To 127
short int 16 bits -32,768 To 32,767
unsigned int 32 bits 0 To 4,294,967,295
Int 32 bits -2,147,483,648 To 2,147,483,647
unsigned long 32 bits 0 To 4,294,967,295
Enum 16 bits -2,147,483,648 To 2,147,483,647
Long 32 bits -2,147,483,648 To 2,147,483,647
Flota 32 bits 3.4 x 10-38 To 3.4 x 10+38
Double 64 bits 1.7 x 10-308 To 1.7 x 10+308
long double 80 bits 3.4 x 10-4932 To 1.1 x 10+4932
near (pointer) 32 bits not aplicable
far (pointer) 32 bits not aplicable

El uso de datos de tipo double y float es aplicado en las matemticas como punto flotante. (Nmeros
reales)
En Borland C++ realiza en forma automtica en las operaciones la asignacin del punto flotante cuando
ste no se especifique.

Tipos de dato void (tipo de dato vaco)

Este tipo de dato es utilizado cuando una funcin realiza una tarea y la funcin no retorna valor
alguno.
Ejemplo :
void error ( char *name)
{ cout <<Nombre Inicial << name :
}

Cuando una funcin no tiene parmetros

Ejemplo :

DANIEL. OSORIO MALDONADO Pgina 30 de 184


UNI FIM
BORLAND C++
int LeerN ( )
{
procesos;
return 1;
}

Puede tambin ser utilizado para declarar punteros como vaco. Con lo que se puede
operar con datos de distintos tipos. Esto es porque al compilar este no determinar el
tamao de la variable puntero vaco.

Ejemplo
#include<iostream.h>
#include<conio.h>
main(){
int x;float r;
void *p=&x; //*p apunta a x
cout<< "Ingrese un valor para x ";
cin>>x;
cout<< "La direccion de x es "<<p
<<sizeof(*p);
getch();
}
/*Ingrese un valor para x 200
La direccion de x es 0x0012ff88 */

TEMA : Estructura de un Programa en Borland C++

Un programa en Borland C++ est dividido en cuatro secciones bien definidas.

Instrucciones del Preprocesador : #include <librerias >


Macros y Constantes : #define macro
: const var1;
Variables Globales : unsigned int a,b;
Struct , unions, class .
Prototipo de Funciones
Funcion Principal main () {
Cuerpo del Programa Principal
Llamad a Funcion Principal
Implementacion de Funciones

1 Instrucciones del Preprocesador


El preprocesador posibilita incluir diversas instrucciones para el compilador en el cdigo fuente de
un programa en Borland C++. Lo cual expande al mbito del entorno de programacin, permitiendo
la correcta manipulacin de constantes y funciones en la codificacin de un programa.

DANIEL. OSORIO MALDONADO Pgina 31 de 184


UNI FIM
BORLAND C++

2 El preprocesador posibilita incluir diversas instrucciones para el compilador en el cdigo fuente


de un programa en Borland C++. Lo cual expande al mbito del entorno de programacin,
permitiendo la correcta manipulacin de constantes y funciones en la codificacin de un programa.
3 Variables Globales:Variables que seran reconocidas tanto a nivel de Programa Principal como
en las funciones.
4 struct, unio,class: se define en este lugar permiten definir un tipo de dato y definir un objeto.
5 Prototipo de Funciones: En esta seccin solo se especifica la cabecera de las funciones
definidas por el usuario.
6 Funcin Principal
Todo programa en Boland C++ por lo menor debe estar conformado por una funcin, la cual es llamada
funcin principal (funcin main())
Al ejecutarse un programa est funcin ser la nica que se encargar del control de todo el software
desarrollado.
Ejemplo :
main ( )
{ // Inicio de la funcin principal
int a, b; // Datos del programa
long prod // Resultado
a = 19; // Asigna al valor 19 a la variable a
b = 13; // Asigna al valor 13 a la variable b
prod = a*b; // Asigna el producto a*b en prod
cout<<prod:
getch();
} // fin

1. Cuerpo de la funcion
Es el centro de la codificacin en ella se resuelve todo el codigo del programa.
2. Llamada a Funcion
Se da cuando ha sido declarada una funcion y es aqu donde se le llama por su nombre
3. Implementacin de Funciones

Las funciones definidas por el usuario son codificadas en esta seccin ejemplo:

static double escribir(int x,int y);// prototipo de la funcion


main( ){
int a,b;
double r;
cout<<"\nIngrese el valor de a: ";cin>>a;
cout<<"\nIngrese el valor de b: ";cin>>b;
r=escribir(a,b);
cout<<"La suma de "<<a<<" y "<<b
<<" = "<<a+b<<" Elevado a la Potencia 3 es: "<< r<<"\n";
getch( );
}

static double escribir(int x=2,int y=3)


{
cout<<setw(15);
return(pow(x+y,3));
}

Sentencia de Asignacin
Es el proceso mediante el cual se asigna un valor dato a una variable previamente definida en dicha
funcin

DANIEL. OSORIO MALDONADO Pgina 32 de 184


UNI FIM
BORLAND C++
La asignacin se realiza mediante el operador =

Sintaxis
identificadores _ Variable = dato ;
En dato puede ser el resultado de una expresin en la cual se procesan variables y constantes definidas por
el usuario, esto quiere decir que la expresin de la derecha es evaluada y el resultado es asignado a la
variable especificada a la izquierda.
Su=1;
par=2
Su +=par;

Entrada y salida de datos.


Las operaciones de entrada no forman parte del conjunto de sentencias de Borland C++. Por lo que
debe incluirse un fichero que contenga dichas funciones de Entrada y Salida I/O.
Lo que da lugar a tener una de las siguientes lneas de programa.
#include <stdio.h> //En ANSI C
#include <iostream.h> // Para C++/Borland C++ con objetos

#include iostream.h
Las comillas dobles indican que el fichero ser buscado primero en el directorio actual de trabajo y si no es
encontrado continuar con la bsqueda en el los directorios standard especificados en el submen
Options del Ambiente Integrado (Editor Compilador) del Borland C++.
Si el fichero especificado se escribe de la siguiente forma:

#include<iostream.h>
El fichero solo ser buscado en el directorio standart.
El fichero iostream.h provee una serie de facilidades definidas en base a clases que se encargan de la
entrada y salida de datos y transformarlos al tipo de variable correspondiente.
Se tiene los siguientes Objetos
cout<<Pone caracteres en la salida estndar (pantalla)
cin>>Lee caracteres de la entrada estndar (teclado)

Salida
Permite la salida de datos por pantalla al tener una variable o expresin numrica como salida esta
es transformada a caracteres para ser mostrada en pantalla.
Ejemplo :
# include <iostream,h>
#include <math.h>
#include<conio.h>

main ( )
{
float a,b;
double poten;
cout<<Ingrese los Nmeros<<endl
<<Ingrese el valor de a: ;>>cin>>a;
cout<<Ingrese el valor de b: ;>>cin>>b;
poten=pow(a,b);
cout<<La Potencia de <<a<<Elevedo a
<<b<<Es <<poten<<endl;
getch( );
}
SECUENCIAS DE ESCAPE

Secuencia Normal
\n Nueva lnea

DANIEL. OSORIO MALDONADO Pgina 33 de 184


UNI FIM
BORLAND C++
\t Tab. horizontal
\b Retroceso
\a Bell (alerta. bip)

TEMA: INSTRUCCIONES DE CONTROL


Las estructuras de seleccin permite al usuario tener un control del programa mediante el uso de
instrucciones de control,constituyendo mecanismos para dirigir el flujo de ejecucin, dentro de estas
Instrucciones, el Lenguaje C define tres categoras bien definidas:

Instrucciones de Seleccin(if..else; if then; ifelse if else ; switch).


Instrucciones de Iteracin(bucle lazo).
Instrucciones de salto(break, continue,exit).
I. Selectivas
Simples : if...else proceso de Verdadero
Dobles : ifcondicion proceso_V else proceso_F
Anidados: ifcondicion proceso_V else if condicion proc_verd else if condic
II Multiples :
switch(){
case .procesos.;
}

III Repetitivas o de Iteracion : a) while() b)do . while() c)for (.)

INSTRUCCIONES SELECTIVAS O CONDICIONALES:

Falso Condicin Verdadero

Sentencia 2 Sentencia 1

Dado que las expresiones lgicas toman el valor de verdadero


o falso se necesita una instruccin de control que dirija al computador para ejecutar otras instrucciones, en
"C/C++" esta alternativa lo realiza con la instruccin o estructura de control

if (simple) if else (doble) if else if


if(<condicin>){ if(<condicion>){ if(<condicin>){
instruccin} instruccion1} instruccin a ;}
Ejemplo else{ else if(<condicin>){
#include<iostream.h> instruccion2} instruccin b;}
main( ){ else if(<condicin>);{
int a; instruccin c;}
cout<<Ingrese Valor Ejemplo: .
a:;cin>>a; #include<iostream.h> .
if(a>0) main(){ else{
cout<<a es Positivo; float a,b; instruccin n;}
getch( ); float div; Ejemplo:
} cout<<Ingrese a: ;cin>>a; resuelve una ecuacin de 1er grado con una
cout<<Ingrese b: ;cin>>b; incgnita:

DANIEL. OSORIO MALDONADO Pgina 34 de 184


UNI FIM
BORLAND C++
if(b) <<"ax + b =0"<<endl
{div=a/b; <<endl;
cout<<"El resultado es: cout<<"a =";cin>>a;
"<<div;} cout<<"b =";cin>>b;
else if (a==0) {cout<<" No tiene Solucion ";}
{cout<<"Division por cero else if(b==0){x=0; }
";} else {x=(-1)*(b/a);}
getch( ); cout<<"La Solucin a la Ecuacin :
} "<<a<<"x + "<<b<<"=0 ";
cout<<setiosflags(ios::fixed|ios::showpoint);
cout<<setprecision(3)<<endl<<"Es X
="<<x;
cout<<"\n Otro Calculo :?[S][N] ";
opc=toupper(getch());
if(opc=='N')break;}
}

El compilador evala las expresiones condicionales desde arriba descendiendo, y tan pronto como el compilador
encuentre una condicin verdadera, ejecuta la instruccin asociada y salta el resto de la escalera. Si no es as se
ejecutara el "else" final. Si no hay else al final y son falsas las otras condiciones no se efecta nada.

La Instruccin switch
Esta instruccin, realiza comprobaciones mltiples o condiciones mltiples.
Borland C++ comprueba una variable sucesivamente frente a una lista de constantes enteras o de carcter,
luego de encontrar una
coincidencia, la computadora ejecuta las instrucciones o bloque de instrucciones que se asocian a la constante.

Default
Si al evaluar <expresin> esta toma un valor que no se encuentra en ninguna <exp_constant> de los casos entonces se
proceder con la ejecucin de la <instruccin por defecto>.

INICIO

EXPRESIO
N

INSTRUCCIN 1
EXP_CONST 1

INSTRUCCIN 2
EXP_CONST 2

INSTRUCCIN 3
EXP_CONST 3

EXP_CONST N INSTRUCCIN N

OTRO CASO INSTRUCCIN X

MENSAJE

Sintaxis :
switch(<expression>) {
FIN

DANIEL. OSORIO MALDONADO Pgina 35 de 184


UNI FIM
BORLAND C++
case <exp_const1>:
instruccin(s);break;

case <exp_const2>:
instruccin(s);break;

case <exp_const3>:
instruccin(s);break;
.
.
default :
instruction(s);

NOTAS:
Exp_const debe ser una Variable una expresin, una funcin y el valor que representa necesariamente
debe ser un escalar, en pocas palabras debe ser numrico entero o sino carcter individual, nunca un float
ni una cadena. Debe tenerse en cuenta que que exp_const ser evaluada en cada alternativa hasta
encontrar el lugar que le corresponde.
Cada exp_const esta conformada por un nico valor
Cada Instruccin puede estar conformada por una o varias sentencias.
1. El valor de exp_const es evaluado en las alternativas una por una.
2. Una vez encontrada una alternativa que contenga el valor de la exp_const, ejecuta la instruccin
correspondiente y termina la estructura que le corresponde.
3. Si no existe una <exp_const> que corresponda el control para la instruccin que sigue al bloque
del switch, a menos que este contenga la etiqueta de "default", en este caso el control se
transfiere a la instruccin que sigue a "default"
4. Dos etiquetas "case en el mismo bloque no pueden tener <exp_const> con el mismo valor.
5. La Instruccin "break" se usa para terminar la secuencia que est asociada a la <exp_const>.Si
se omite la instruccin break, la ejecucin continua en la Instruccin del siguiente "case " hasta
que la computadora encuentre un break o el final del switch.

Aplicacin:
Programa que realiza una serie de operaciones matemticas:
#include<conio.h>
#include<iostream.h>
#include<ctype.h>
#include<math.h>
#include<iomanip.h>
#include<stdlib.h>
main( )
{
int opera;
unsigned int a,b;
char opc;
do{ clrscr();
//system(cls); llama al DOS para limpiar la pantalla, recomendable solo con Win98SE o
anteriores
cout<<"Ingrese 02 Numeros : ";
cout<<"Ingrese a: ";cin>>a;
cout<<"Ingrese b: ";cin>>b;
cout<<"MENU DE OPERACIONES :"<<endl;

cout<<"1 :Suma\n"
<<"2 :Resta\n"
<<"3 :Producto\n"
<<"4 :Division\n"

DANIEL. OSORIO MALDONADO Pgina 36 de 184


UNI FIM
BORLAND C++
<<"5 :Cociente Entero\n"
<<"6 :Resto\n"
<<"7 :Potencia\n"
<<"Elija su Opcion...:";cin>>opera;
switch(opera){
case 1:
cout<<setiosflags(ios::fixed|ios::showpoint);
cout<<"La Suma es :" <<(a+b);break;
case 2:
cout<<"La Resta es :" << (a-b);break;
case 3:
cout<<"El Producto es :" << a*b;break;
case 4:
if(b)
{cout<<"Elcociente es:" <<setprecision(2)<<(float)a/b;break;}
else
{cout<<"division por cero!";break;}
case 5:
if(b) {
cout<<"El COCIENTE ENTERO es :"<<setprecision(2)<<a/b;break;}
else
{cout<<"\n No es posible la division: ";break;
exit(0);}
case 6:
if(b)
{cout<<"El resto es :"<<a%b;break;}
else
{cout<<"\nNo es posible calcular el resto";break;
exit(0);}
case 7 :
cout<<"\nLa Potencia es :" <<setprecision(2)<<pow(a,b);break;
default:cout<<"No existe esa opcion Prueba Otra:"<<endl;
}
cout<<"\n Desea Otra Operacion [S][N]?" <<endl;
opc=toupper(getch());
}while(opc=='S');}

Tema: Instrucciones de Control Repetitivas

Sentencia_A
a) do While
Sentencia_B
Pseudocodigo: loop
Hacer Sentencia_A
Sentencia_B Expresin NO
Mientras(Expresin) sea Verdadera
Si
Imprimir
Sintaxis :
do{ <Sentencias>
sentencia_A
FIN
sentencia_B
}while (Expresion);

DANIEL. OSORIO MALDONADO Pgina 37 de 184


UNI FIM
BORLAND C++

Las <sentencias> son ejecutadas en forma repetida segn que el valor de la expresin < expresin> sea
verdadera.
La prueba control toma el lugar despus de cada ejecucin de la <sentencia> esto nos indica que la
comprobacin de continuar con la ejecucin de <sentencia> est a la salida del ciclo iterativo o bucle o
loop. Se dive que la instruccin do- while itera al menos una vez.
Ejemp lo :
#include<iostream.h>
#include<conio.h>
main()
{
long factorial;
int i= 1,n=1;
do {
n* =i;
i++;
}while (i <=factorial) ;
cout<< El Factorial de n es : <<n;
}
getch();
}

b) while
Aqu la Instruccin se repetir mientras la condicin sea verdadera y lo hace mediante un bucle o lazo.
Termina cuando la condicion es falsa.

Pseudocodigo
Mientras (condicion) sea verdadera
Sentencia_1 datos
Sentencia_2
Fin del mientras

Sintaxis : No
Condicio
n si
While (<condicin>) loop
{
<sentencia_1> Sentencia_1
<sentencia_2> Sentencia _2

Imprimir

<sentencias> es ejecutado en forma repetida FIN segn el valor de <expresin> sea


distinto de cero.

DANIEL. OSORIO MALDONADO Pgina 38 de 184


UNI FIM
BORLAND C++
La prueba toma el lugar antes de cada ejecucin de la <sentencia> lo que permite controlar la ejecucin
de dicha <sentencia> antes de ingresar a l.

Ejemplo :
/*Algoritmo de Euclides para encontrar el maximo comun divisor
de dos Numeros */
#include<Iostream.h>
#include<conio.h>
#include<ctype.h>
#define mensaje Otra Prueba [S][N] ?:
int a,b; // declaracion global
main()
{
for(;;){clrscr();
cout<<"Ingrese el Primer Numero: ";cin>>a;
cout<<"Ingrese el segundo Numeros: ";cin>>b;
while(a!=b)
if(a>b)
a-=b;
else
b-=a;
cout<<"El Maximo comun divisor es: "<<a<<endl
<<mensaje;
if(toupper(getchar())==N)
break;}
}

c) For
Esta instruccin ,es uno de las mas usadas dentro de las de flujo de control esta instruccin tiene su
equivalente en otros lenguejes de programacin tradicionales como el Basic/Pascal en Fortran.

for(inicializacion;condicion;incremento)
{
sentencias ;
}

dato
s
Para

Proceso1

imprim

DANIEL. OSORIO MALDONADO Pgina 39 de 184


UNI FIM
BORLAND C++

La primera expresin se refiere a la condicin inicial, si es una sola condicin si son varias (deben estar
separadas por ;);lo mismo ocurre con la tercera expresin que esta dedicada a la actualizacion. La
expresin central se refiere al test de terminacin ,muy parecido al while ,contina el bucle mientras se
cumpla la condicin.

// Ejemplos : calcula el cuadrado de un numero n


#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#define mensaje Otra Prueba [S][N]?:
main{
int i; long Su=0;
for(;;){clrscr();
for(i=1;i<=n; i++)
Su+=(2*i)-1;
cout<<El Cuadraco de :<<n<< Es <<Su<<endl
<<mensaje;
if(toupper(getch())==N)
break;}
}

La siguiente instruccin for() permite construir un lazo, y solo saldra de ese lazo mediante un instruccin,
en este caso la instruccin if(),en la cual se libera del lazo cuando la condicion conlleva a una alternativa
falsa.
Esta instruccin es usada frecuentemente cuando una aplicaciondeba o no abandonar el programa.
#include<iostream.h> randomize();
#include<conio.h> cout<<"Ingreso mi Numero ";cin>>my;
main(){ cout<<"Genero un numero entre 1 y 7 \n";
pc=random(7)+1;
for(;;){ cout<<"El numero de la pc es "<<pc;
cuerpo del programa //procesos if(my==pc)
cout<<"\nSuertudo Adiviniste! mi numero
if(condicion ) fue "<<my<<'y'<<"\nEl Numero de la pc
break; fue "
} <<pc;
else
//Proprama que usa for(;;) cout<<"\nSin Suerte!";
//Adivine un numero en el rango de 1 a 7 cout<<mensaje;
#include<iostream.h> if(toupper(getch())=='N')break;
#include<conio.h> }
#include<stdlib.h> }
#define mensaje "\nOtra Prueba [S][N]" Ingreso mi Numero 3
#include<ctype.h> //para la mayuscula del Genero un numero entre 1 y 7
Caracter El numero de la pc es 3
main() Suertudo Adiviniste! mi numero fue 3y
{ El Numero de la pc fue 3
int my,pc; Otra Prueba [S][N]
for(;;){clrscr();

DANIEL. OSORIO MALDONADO Pgina 40 de 184


UNI FIM
BORLAND C++

TEMA: FUNCIONES DEFINIDAS, FUNCIONES PROPIAS Y


RECURSIVIDAD
Una aplicacin escrita en Borland C++ esta compuesta de funciones y esta su vez de enunciados.
Se debe tener en claro que la mayor cantidad de aplicaciones son echas en base a funciones definidas por
el usuario.
La funcin main(), es la primera funcin que aparece dentro de un programa en Borland C++/C++ y
dentro de ella se presentan llamadas a otras funciones, con la finalidad de tener muchos pequeos
procesos.
Una funcin es un proceso que realiza una determinada tarea, tiene un nombre y es capaz de recibir
datos y devolver resultados. Una funcin es reconocida en un programa porque lleva entre
parntesis una lista de argumentos; los cuales son la clave entre la comunicacin de las funciones. Estos
argumentos o variables especiales toman el nombre de parmetros . Otra manera de comunicarse es con
su propio nombre.
Toda funcin, posee un cuerpo que esta encerrado entre llave apertura { y otra de cierre }cuando se
encuentra esta ultima llave, el control retorna a la funcin que hizo la llamada.

Declaracin :
#include<iostream.h>
#include<conio.h>
float media_tres (float numl,float num2,float num3);
main()
{
Llamada a la funccion Descripcin del cuerpo de la funcin.
getch();
}
//desarrollo de la funcin
float media_tres (float numl,float num2,float num3)
{
Desarrollo de la funcion
Return(valor);
}

Declaracin de funciones (prototipos)


La declaracin indica al compilador el tipo de valor que va a devolver la funcin y el nmero y tipo de sus
parmetros. Lo indicamos bsicamente para la comprobacin de tipos. El formato del prototipo es el
siguiente:

Tipo nombre_funcin (tipo parmetro1, tipo parmetro2,...)

EJEMPLO;
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#define mensaje "Otra Prueba[S][N] ?"
float media_tres (float numl,float num2,float num3);//prototipo
float media; //declaracion global
main(){
float num1,num2,num3;for(;;){clrscr();
cout<<"Primer numero ";cin>>num1;
cout<<"Segundo numero ";cin>>num2;
cout<<"Tercer numero ";cin>>num3;
cout<<"El promedio es "<<media_tres(num1, num2, num3)<<endl
<<mensaje; if(toupper(getch())=='N')
break;}

DANIEL. OSORIO MALDONADO Pgina 41 de 184


UNI FIM
BORLAND C++
}
float media_tres (float num1,float num2,float num3)
{float media =(num1+ num2+num3)/3.0;
return (media);// devuelve un valor
}

La funcin que no retorna valor


void nom_func() o void nom_func(tipo param1,tipo param2,tipo param3)
Si una funcin no retorna ningn valor puede ser declarada del tipo void (vacio); la funcin void puede o
no llevar parametros o argumentos
Este tipo de funcin solo devuelve de la memoria el operador de salida <<

//halla el mayor de 03 numeros


#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#define mensaje "Otra Prueba[S][N] ?"
void leerabc(float &a,float &b,float &c)
{
cout<<"a= ";cin>>a;
cout<<"b= ";cin>>b;
cout<<"c= ";cin>>c;
}

float mayorabc(float a,float b,float c)


{
float M1,M2;
M1=((a>b)? a:b) ;
M2=((M1>c)? M1:c);
return(M2);
}

float m,n,p;
main(){
for(;;){clrscr();
leerabc(m,n,p) ;
cout<<"El Mayor es "<<mayorabc(m,n,p) ;
cout<<endl<<mensaje<<endl
<<&m;
if(toupper(getch())=='N')
break;}
}
Resultado:
a= 12
b= 21
c= 17
El mayor valor es 21
Otra Prueba[S][N] ?
Para que resulte la aplicacin se hace uso del paso por referencia, en este caso usamos el
operador & que devuelve la direccion:
Void leerabc(float &a,float &b,float &c);

DANIEL. OSORIO MALDONADO Pgina 42 de 184


UNI FIM
BORLAND C++

Algunas notas relativas a las funciones

El prototipo de una funcin se debe corresponder en el nmero y tipo de parmetros


con la llamada y con la definicin de la funcin.

El tipo devuelto en la definicin de la funcin debe corresponderse con el indicado en el prototipo.

Si no concuerdan lo tipos, el compilador tratar de realizar conversiones y si no lo consigue se


genera un error.

Retorno de valores

Una funcin puede retornar cualquier tipo bsico de dato, punteros, referencias,
objetos, etc.
EJEMPLO:
#include<iostream.h>
#include<conio.h>
int sumar(int, int);//Prototipo

main( ){
int a,b;
gotoxy(10,10);
cout<<"Introduce primer nmero";
cin>>a;
gotoxy(10,11);
cout<<Introducir segundo numero ;
cin>>b;
int c;
gotoxy(10,12);
c=sumar(a,b);
cout<<El resultado es <<c;
}
int sumar(int, int ){
return(a+b)
}

Para forzar la devolucin de un valor se utiliza la instruccin cout<< indicando el dato a devolver a
continuacin. Vea por ejemplo
//Usando Funciones definidas por el usuario
#include<iostream.h>
#include<conio.h>
void Leerab(float &a,float &b)
{cout<<"a = ";cin>>a;
cout<<"b = ";cin>>b;}
float operacion(float &a,float &b)
{cout<<(a+b);
return(a-b);}

main(){
float m,n;
Leerab(m,n);
cout<<" La suma y la diferencia es "<<operacion(m,n);
getch();

DANIEL. OSORIO MALDONADO Pgina 43 de 184


UNI FIM
BORLAND C++
}

Paso de argumentos

Existen dos formas de realizar el paso de argumentos:

Por valor -> cuando se realice la llamada lo que se hace es una copia de los datos para
utilizarlos en la funcin. Con este sistema los valores originales no se pueden modificar
desde la funcin.

Por referencia > lo que se pasa es la direccin de memoria del dato utilizado como parmetro.
De esta forma ambas variables compartirn la misma zona de memoria. Si cambia el valor de una,
cambia el valor de la otra.

//Un ejemplo usando funciones con referencia


#include<iostream.h>
#include<conio.h>
void Leerab(int ,int);
void sumar(int, int); //por valor
void restar(int *, int *); //por por referencia
flota sumar(int &,flota&)//
main() {
int a,b;
gotoxy(10,10); cout<<"Introduce primer nmero"; cin>>a;
gotoxy(10,11); cout<<Introducir segundo numero ; cin>>b;
gotoxy(10,12); Sumar (a,b);
gotoxy(10,130;Restar(&a,&b); //Envio direccion
gotoxy(10,14);cout<<La suma es <<suma(a,b)
getch();
}

void sumar (int i,int d) {


int result =c+d;
cout<<"La suma es"<<result;}

void restar(int *c, int *d) {


int resul =*c - *d;
cout<<"La resta es"<<result;}

float sumar (int &i,int &d) {


int result =c+d;
cout<<"La suma es"<<result;}

Argumentos por Omisin (parmetros por omisin)

Al llamar a una funcin se pueden omitir argumentos o parmetros


inicializndolos a un valor por defecto o simplemente omitirlos.
Ese valor ser el que tenga el parmetro si es omitido en la llamada. El valor por defecto se indica en el
prototipo de la funcin. El formato es:

a). Tipo nombre_funcin(tipo parmetro valor, tipo parmetro valor, ...) o


b). Tipo nombre_funcin( )
Reglas de utilizacin de argumentos por defecto

DANIEL. OSORIO MALDONADO Pgina 44 de 184


UNI FIM
BORLAND C++

Se pasan por valor

Slo pueden ser valores literales o constantes. No pueden ser valores reales

Reglas para la utilizacin de argumentos por defecto


Se pasan por valor
Solo pueden ser valores literales o constantes. No oueden ser valores.
Todos los argumentos por defecto deben estar situados al final del prototipo.
Si el primer argumento es por defecto, los argumentos posteriores tendrn que ser por defecto

EJEMPLO:
//Con argumento en la funcion
#include<iostream.h>
#include<conio.h>
int suma(int a, int b, int c); //prototipo
int resta(int a, int b=0, int c= 0);//prototipo

main ( ) {
cout<<"Para sumar (1,2,3)= "<<suma (1,2,3) << endl;
cout<< "Para sumar (1,2) ="<<suma (1,2,0) << endl;
cout<<"Para sumar(1)="<<suma(1,0,0)<<endl;
cout<<"Para sumar(0) ="<<suma(0,0,0)<<endl<< endl;

cout<<"Para restar (1,2,3)= "<<resta(1,2,3)<<endl;


cout<< "Para restar (1,2) ="<<resta (1,2,0) <<endl;
cout<<"Para restar(1)="<<resta(1,0,0) <<endl;
cout<<Para restar(0)=<<resta(0,0,0);
getch();
}

int suma (int a,int b, int c) {


return (a+b+c);}
int resta (int a, int b, int c) {
return ((a - b) -c);}

//Sin Argumento en la funcion


//Calcula Area y Longitus de una //Circunferencia
#include<iostream.h>
#include<iostream.h>
#include<conio.h>
#include<math.h>
#define pi 2*asin(1)
double A_Circo();
double L_Circo();
float R;
main(){
cout<<"Ingrese el valor del Radio ";cin>>R;
cout<<"El Area del Circulo de Radio "<<R<<"\nEs "<<A_Circo()<<endl
<<"La Longitud de la Circunferencia de Radio "<<R<<"\nEs "<<L_Circo();
getch();
}
double A_Circo()

DANIEL. OSORIO MALDONADO Pgina 45 de 184


UNI FIM
BORLAND C++
{return(pi*R*R);}
double L_Circo()
{return(2*pi*R);}

Otra Forma, usando referencia


#include<iostream.h> main()
#include<iostream.h> {
#include<conio.h> float P;
#include<math.h> LeerR(P);
#define pi 2*asin(1) cout<<"El Area del Circulo de Radio
Void LeerR(float &R){ "<<P<<"\nEs "<<A_Circo(P)<<endl
cout<< Ingrese Radio =;cin>>R;} <<"La Longitud de la Circunferencia de Radio
double A_Circo(R) "<<P<<"\nEs "<<L_Circo(P);
{return(pi*R*R);} getch();
double L_Circo(R) }
{return(2*pi*R);}

FUNCIONES DE LIBRERA ESTNDAR. <math.h>


Son funciones incluida en la librera <math.h>, es decir se hace necesario cuando es invocada la funcion.

Funciones Matematicas
abs()Devuelve el valor absoluto del argumento entero x. int abs(int x); #include<stdlib.h>
fabs()Devuelve el valor absoluto del argumento en punto flotante de x: double fabs(double x)
ceil()Encuentra el nmero entero ms pequeo no menos que el argumento x. double ceil(double x)
floor()Encuentra el nmero entero ms grande no mayor que el argumento x. double floor(double x);
exp()Calcula la e exponencial al argumento x. double exp(double x);

Funciones trigonomtricas
sin( ) devuelve el seno de un ngulo. Su formato es: double sin(double ngulo);
cos () devuelve el coseno de un ngulo. El formato es: double cos(double ngulo);
tan () devuelve la tangente del ngulo indicado. El formato es: double tan(double ngulo);

asin()Devuelve el arco seno del angulo especificado. El formato es :double asin(double angulo)
acos()Devuelve el arco coseno del angulo especificado. El formato es :double acos(double angulo)
atan ()>devuelve el arcotangente del ngulo especificado. El formato es: double atan (double ngulo);

sinh()Devuelve el seno hiperbolico. El formato double sinh(double x);


cosh()Devuelve el coseno hiperbolico. El formato : double cosh(double x)
tanh()Devuelve la tangente hiperbolica. El formato double tanh(double x)

Funciones logartmicas y exponenciales.


log ()> devuelve el logaritmo neperiano de un nmero. El formato es:
double log (double nmero);

log10() > devuelve el logaritmo decimal de un nmero. El formato es:


double logl0 (double nmero);

exp()> devuelve el exponente neperiano de un nmero. El formato es:


double exp (double nmero);

DANIEL. OSORIO MALDONADO Pgina 46 de 184


UNI FIM
BORLAND C++
sqrt ()> devuelve la raz cuadrada de un nmero. El formato es:
double sqrt (double nmero)',
pow ()--> devuelve el resultado de una potencia. Debemos indicar la base y el exponente. El formato es:
double pow(base, exponente);

Recursividad
Se dice que un proceso es recursivo s forma parte de si mismo o sea que se define en funcin de si mismo.
La recursin aparece en la vida diaria, como por ejemplo si colocamos dos espejos uno al frente del otro y
no posicionamos en el centro, entonces podremos apreciar que la imagen se repite infinita veces. ste
simple ejemplo nos sirve de modelo en problemas matemticos, en estructuras de datos y en muchos otras
aplicaciones.
Un ejemplo muy conocido es el clculo del factorial de un nmero que esta definida para cualquier valor
de n(n-1)!

n! 1 si n=0 o n=1

n(n-1)! si n>0

#include<iostream.h>
#include<conio.h>
#include<ctype.h>
# define mensaje "\n Otro Factorial [S][N] ?: "
void LeerN(long &N)
{cout<<"Ingrese N = ";cin>>N;}
long factorial(long N)
{
if((N==0)||(N==1))
return 1;
else
return(N*factorial(N-1));
}

main() {
for(;;) {clrscr();
long M;
LeerN(M);
gotoxy(10,10);cout<<"El Factorial de "<<M<<" es "<<factorial(M)<<endl
<<'\t'<<mensaje;
if(toupper(getch())=='N')break;
}
}
/*Ingrese N = 9
El Factorial de 9 es 362880
Otro Factorial [S][N] ?: */

Experiencia : modifique el tipo de dato a long double y pruebe hasta que valor de N puede calcular.

TEMA: ARREGLOS
Definiciones Generales:

DANIEL. OSORIO MALDONADO Pgina 47 de 184


UNI FIM
BORLAND C++
Un array es una estructura homognea ,compuesta por varios componentes del mismo tipo y almacenados
consecutivamente en memoria.
Los arrays se representan mediante variables suscritas o subndices y pueden tener una o varias
dimensiones (subndices). A los arrays de una dimensin se les llama tambin listas o vectores a los de
dos dimensiones matriz o tablas , de tres tridimensionales ,etc.
Para hacer referencia en Borland C++ a un elemento de un arreglo se emplea los corchetes [ ] que
encierra el (los) subndice(s) correspondientes.
Sea el vector A de n elementos, cuya representacin comn:
a) A1 A2 A3 An . Otras representaciones:
b) A(1) A(2) A(3) .... A(n).
c) A[1] A[2] A[3] ... A[n].

En Borland C++ la notacin seria :


A[0], A[1], A[2], ...,A[i],...,A[n-1]; i=1,2,3,,n-1;
Ntese que el primer subndice es cero y que estos son consecutivos; el subndice puede ser cualquier
expresin entera o numero entero, para nuestro caso:
A[0], A[1], A[2], ...,A[n-1];
El nombre del arreglo es igual a la direccin de memoria de la primera variable del arreglo A[0].

Declaracion de los arreglos o Arrays


De una dimensin : tipo nombre_array[tamao];
Para averiguar el tamao del array se multiplica el numero de elementos por el tamao que ocupan .
El acceso se va ha realizar por dos mtodos: por indexacin o por punteros.
Con la indexacin se va a utilizar un numero llamado ndice para acceder a cada elemento.
As : A[0], A[1], A[2], ...,A[n-1];

Ejemplos simples:
char apellidos [20] :declara un array de nombre apellidos con tipo de dato char y de tamao 20.
int dato[5]:

7 13 17 19 23

0 1 2 3 4

Como consecuencia podemos afirmar que las tres caractersticas de un array de un array son:
int numero[23];

tamao: 23
nombre

tipo de dato

operaciones sobre sus elementos


a) Lectura y Escritura: para la lectura y escritura se utiliza las instrucciones de repeticin for

DANIEL. OSORIO MALDONADO Pgina 48 de 184


UNI FIM
BORLAND C++
Pe: dado un vector de n elementos con datos numricos:
Lectura :
Pseudocodigo: Sintaxis
desde i=0 hasta n-1 hacer for (i=0;i<n;i++)
leer A(i) cin>>a[i];
fin desde

Escritura :
Pseudocodigo: Sintaxis
desde i=0 hasta n-1 hacer for (i=0;i<n;i++)
Escribir A(i) cout<<a[i];
fin desde
Ejemp.
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
imain(){
int array[10];
for(int x=0;x<5;x++){
cout<<"Introduce el "<<(x+1)<<": "<<"Numero";
cin>>array[x];
}
for(x=0;x<5;x++){
If((array[x]/2)==(array[x]/2))
cout<<setw(4)<<array[x];

}
getch();
}
En Borland C++ los arrays son tratados como punteros .El nombre del array es en realidad un puntero a
la primera posicin(a = *numero) ->as solo apuntara al primero).Pero si desea obtener todos los datos
del array deber usar la aritmtica de punteros. Cuando a un puntero se le suma una unidad lo que se
consigue es que el puntero apunte al siguiente dato de ese mismo tipo(a = * (numero + 1)).
C++ /Borland C++ no realiza comprobacin de entornos en los arrays: as no detiene la escritura fuera del
final del array. Si se sobrepasa el final durante una operacin de asignacin, entonces se asignaran valores
a otra variable o a una traza de cdigo del programa; como consecuencia de ello no arrojara error
,dependiendo en todo caso de la habilidad del programador de realizar las codificaciones y rutinas de la
mejor manera posible.

Tema: Asignacin e Inicializacion de ARRAYS Unidimensionales


En trminos generales se puede inicializar un array de cualquier tipo dando valores individuales a cada uno
de los elementos, utilizando o no un bloque repetitivo(bloque for por ejemplo). No obstante Borland C++
permite en algunos casos, la inicializacin simultanea de todos los elementos de un array.
Para que pueda inicializarse de forma simultanea todos los elementos de un array, es condicin
indispensable que este pertenezca o halla sido declarado de la clase<static>o <extern>,o bien halla sido
declarado globalmente, fuera de cualquier funcin o al principio del programa.

Inicializacin de arrays numricos


a) Forma directa :dada una lista cualquiera de 07 elementos se tiene:
A[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;a[5]=6;a[6]=7

b) Usando una estructura de control

DANIEL. OSORIO MALDONADO Pgina 49 de 184


UNI FIM
BORLAND C++
for(i=0;i<7;i++)
a[i]=i+1;

c) Para arrays de una dimensin se puede inicializar cuando se declara.


Sintaxis
a).-[clase]<tipo><nombre>[tamao] ={valor1,valor2,valor 3,...,valor n }
o
b).-[clase]<tipo><nombre>[ ] = {valor1,valor 2,valor3,...,valor n }
En ambos casos , la clase de array ha de ser static o extern,
o bien ser definido fuera de cualquier funcin.
En el primer caso , se define un numero de elementos del array.
Si el numero de elementos entre llaves es menor que la dimensin del array, el resto de ellos se
inicializa acero.
Si por el contrario, el numero de elementos entre llaves es mayor que la dimensin de la tabla, se
producir un error en la compilacin del programa.
En el segundo caso C++ ajustara en forma automtica la dimensin del array, de acuerdo con el numero
de datos existentes entre llaves.
int b[5]={23,37,97,-41,101}=>equivale:

a[0]=23,a[1]=37,a[2]=97,a[3]=-31,[4]=101.
int a[4]={13,53} equivale a: a[4]={13,53,0,0}
int lista_1[ ]={17,37,29,23,43,-47,83} ;el nmero de elementos esta dado por el nmero de valores
dado entre llaves.

Observa: Borland C++ no permite inicializar arrays si estn declarados como locales. Para poder inicializar
un array se le debe definirse como global, es decir debe ser una variable que exista durante toda la
ejecucin del programa. Esto se consigue definiendo el array a nivel externo o declararlo como static.

INICIALIZACION DE ARRAYS DE CARACTERES


Los array de caracteres que guarden cadenas permiten una inicializacin abreviada y funcionan igual que
cualquier otro array . se declara y se accede igual que los dems . la diferencia es que se pueden introducir
todos sus elementos en una instruccin y visualizarlos tambin en una instruccin.

[clase]<tipo><nomb_array>[expN]={caract 1, caract2,...,caractn}
O
[clase]<tipo><nomb_array>[expN]=cadena

static char string[5]={ r , u , t , i , n , a , \0 } fjese el terminador null


static char string[ ] = rutina
De esto se desprende que el array que se declare debe tener la longitud necesaria que incluya el carcter
null(\0).
Cuando se usa la constante de caracteres , el compilador automticamente proporciona el terminador nulo.

TEMA: ARRAYS BIDIMENSIONALES (TABLAS O MATRICES)


Se le declara de la siguiente manera: tipo nomb_array[tamao 1][tamao 2] y es un array con filas y
columnas, tambin se le considera como un vector de vectores. Es por consiguiente un conjunto de
elementos, todos del mismo tipo, en el cual el orden de los componentes es significativo y el que se
necesita especificar los subndices para poder identificar a cada alemento del array.

DANIEL. OSORIO MALDONADO Pgina 50 de 184


UNI FIM
BORLAND C++
Sea la matriz de 5 filas por 4 columnas

0 1 2 3 columnas

3 5 7 13 0 fila 1
17 19 23 29 1 fila2
A[5][4] 31 37 43 47 2 fila3
53 59 61 67 3 fila4
71 79 83 97
4 fila5

Notacion : A[0][0] =3, A[0][1]=5,...A[0][3]=13;A[1][0]=17;A[1][1]=19,


A[2][0]=31,A[2][2]=43; A[3][0]=53; A[3][3]=67.
Pueden apreciar que la diagonal principal esta representada por A[1][1],A[2][2],A[3][3]

Declaracin de un array bidimensional

Sintaxis
<tipo><nombre_array>[expn1][expn2];

Declaracin general de un array multidimensional


Sintaxis
<tipo><nombre_array>[expn1][expn2][expn3]...[expnN];

tipo : no puede ser void


nombre : identificador que indica el nombre del array.
Del ejemplo:
int A [5][4]
fila
columna
Nombre

Tipo de Variable

Formato General Para Lectura y escritura


Dada una matriz de m=5 filas por n=4 columnas

a) lectura por filas


pseudocodigo

desde i=0 hasta m-1 hacer


desde (j=0;hasta n-1 hacer
leer a(i,j)
fin_desde
fin_desde

sintaxis

for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>[i][j];
DANIEL. OSORIO MALDONADO Pgina 51 de 184
UNI FIM
BORLAND C++

b) lectura por columnas


pseudocodigo

desde j= 0 hasta n-1 hacer


desde (i= 0;hasta m-1 hacer
leer a(i, j)
fin_desde
fin_desde

sintaxis

for(j=0;i<n;j++)
for(i=0;j<m;i++)
cin>>[i][j];

Para acceder a las posiciones de un array bidimensional hay dos mtodos: por indexacin o por punteros .
Por indexacin se debe colocar el ndice de cada dimensin del nomb_array [x][y].
#include<iostream.h>
#include<conio.h>
#include <ctype.h>
#include <iomanip.h>
main( ){
char proved[10][16];
int i,cantidad[10],n;
float precio[10],Total[10],t=0;
char opc;
for(;;){clrscr();
gotoxy(2,5);cout<<"Ingrese N de PROVEEDORES: ";cin>>n;
for (i=0;i<n;i++) {
cout<<"Proveedor: ";
cin>>proved[i];
cout<<"Cantidad :";cin>>cantidad[i];
cout<<"Precio Unitario:";cin>>precio[i];}
for (i=0;i<n;i++){
Total[i]=cantidad[i]*precio[i];
t=t+Total[i];
}
clrscr();
gotoxy(18,6);cout<<"Proveedores con Cantidad de Productos y su Costo Total ";
gotoxy(18,7);cout<<"********************************************* ";
gotoxy(2,8);cout<<setw(25)<<"Proveedor"<<setw(12)<<" Precio Unitario "<<setw(12)<<"Cantidad"
<<setw(10)<<" Total"<<endl;
for(i=0;i<n;i++)

cout<<setw(10)<<"["<<i<<"]"<<setw(10)<<proved[i]<<setw(14)<<precio[i]<<setw(14)<<cantidad[i]
<<setw(14)<<Total[i]<<"\n";
cout<<"Otro Reporte: [S][N]: ";

DANIEL. OSORIO MALDONADO Pgina 52 de 184


UNI FIM
BORLAND C++
opc=toupper(getch());
if(opc=='N')break;}
getch();}
//Programa que suma 02 matrices Cuadradas for(j=0;j<m;j++) //muestra los datos de la
//Y se pide una tercera tal que C=A+B //matriz A
#include<iostream.h> { cout<<A[i][j];cout<<" ";
#include<conio.h> }
main() }
{ cout<<"\nMatriz B:\n";
float A[50][50],B[50][50],Sum; for(i=0;i<n;i++)
int n,m,i,j; { cout<<"\n";
clrscr(); for(j=0;j<m;j++) //muestra los datos de la
cout<<"Ingrese el Orden de la Matriz A = " //matriz A
;cin>>n; cout<<endl; { cout<<B[i][j];cout<<" ";
clrscr(); }
cout<<"Matriz A Ingresando \n"; }
for(i=0;i<n;i++) //Suma de las matrices A y B
{ for(j=0;j<n;j++)//lee matriz A if(m==n)
{ cout<<"Ingrese {
A["<<i<<","<<j<<"]="; cout<<"\nLa suma de matrices es :";
cin>>A[i][j]; for(i=0;i<n;i++)
} {
} cout<<"\n";
cout<<"Ingrese el Orden de la Matriz B= for(j=0;j<m;j++)//muestra datos de la matriz B
";cin>>m; {
cout<<"Matriz B Ingresando \n"; cout<<(B[i][j]+A[i][j]);cout<<" ";
for(i=0;i<m;i++) }
{ for(j=0;j<m;j++) //lee matriz B }
{cout<<"Ingrese B["<<i<<","<<j<<"]="; }
cin>>B[i][j]; else
} {
} cout<<"\nLas Matrices son de diferente Orden
clrscr(); no"<<"se puede sumar!!";}
cout<<"\nMatriz A:\n"; getch(); }
for(i=0;i<n;i++)
{ cout<<"\n";

TEMA: TRATAMIENTOS DE CARACTERES Y CADENAS

La biblioteca del turbo C++ tiene un variado conjunto de funciones del manejo de caracteres.
Estas funciones corresponden tanto a las librerias <stdio.h> , <ctype.h>, y <string.h> para cadenas

DANIEL. OSORIO MALDONADO Pgina 53 de 184


UNI FIM
BORLAND C++

// Dibuja una caja putchar('\n');


#include <stdio.h>
#include<conio.h> /* draw the middle */
for (i=0; i<4; i++)
/* define some box-drawing characters */ {
#define LEFT_TOP 0xDA putchar(VERT);
#define RIGHT_TOP 0xBF for (j=0; j<10; j++)
#define HORIZ 0xC4
#define VERT 0xB3 putchar(' ');
#define LEFT_BOT 0xC0 putchar(VERT);
#define RIGHT_BOT 0xD9 putchar('\n');
}
main()
{ /* draw the bottom */
char i, j; putchar(LEFT_BOT);
for (i=0; i<10; i++)
/* draw the top of the box */ putchar(HORIZ);
putchar(LEFT_TOP); putchar(RIGHT_BOT);
for (i=0; i<10; i++) putchar('\n');
putchar(HORIZ); getch();
putchar(RIGHT_TOP); }

FUNCIONES PARA COPIAR CADENAS


a). Strcat(cadena1,cadena2): concatena y copia cadena 2 al final de cadena1.La cadana1 debe tener el
tamao necesario para almacenar el resultado.
Sintaxis de la funcin con punteros:
Char strcat(char *cadena1,char *cadena2)
La funcion devuelve un puntero a la primera cadena.
Ejemplo:

b). strncat(cadena1,cadena2,n) similar a la anterior pero copiando solo los n primeros caracteres de la
segunda cadena en la primera.
Sintaxis de la funcion:
char *strncat(char *cadena 1,char *cadena 2,int n)

Ejemplo

strcpy(cadena1,cadena2): Copia el contenido de la cadena2 incluyendo el carcter nulo en la


cadena1.Devuelve un puntero a esta ultima funcion.
Sintaxis funcion
char *strcpy(char *cadena1,char *cadena)
Ejemp.

d) strncpy(cadena1,cadena2) es similar a la anterior pero limitndose a los primeros n caracteres de la


segunda cadena.
Sintaxis de la funcion
Char *strncpy(char *cadena1,char *cadena2,n)
Ejm

strdup(cadena) devuelve un duplicado de cadena.


sintaxis de la funcion con puntero

DANIEL. OSORIO MALDONADO Pgina 54 de 184


UNI FIM
BORLAND C++
char *strdup(char *cadena)

Ejem
Funciones para bsqueda de caracteres en cadenas
a).strchr(cadena,car) Busca la primera aparicion del carcter(car) en la cadena proporcionando un puntero
de la primera aparicion de car en la cadena.Si fuese el caso de no encontrar una coincidencia devuelve el
puntero nulo.
Sintaxis de la funcin con punteros
char *strchr(char *cadena,char car):
Ejempl.
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main(){
char s[80]="Cadena de Prueba";
char s1[80];
clrscr();
gotoxy(6,6);
cout<<strchr("Salario Mensual =$98765",'$');
s1==strchr(s,'a');
gotoxy(10,10);cout<<s1;
return(0);
}

b) strrchr(cadena,car): Devuelve los caracteres de la cadena desde la ultima aparicin de un carcter


dentro de una cadena (car) ,o un puntero nulo en caso contrario.
Sintaxis de la Funcin :
Char *strrchr(char *cadena,car)
Ejempl
#include <string.h>
#include <iostream.h>
#include<conio.h>
main()
{
char string[30];
char *ptr, c = 'r';

strcpy(string, "This is a string");


ptr = strrchr(string, c);
if (ptr)
cout<<"The character "<<c<<" is at position: "<< ptr-string;
else
cout<<"The character was not found ";
getch();
}
//The character r is at position: 12

c) strpbrk(cadena1,cadena2):Devuelve el carcter de la cadena1 que en primera ocurrencia, que coincide


con el carcter de cadena2.
Sintaxis de la Funcion con Puntero: Char *strpbrk(char *cadena1,char *cadena2)
#include <iostream.h>
#include <string.h>
#include<conio.h>
main()
{
char *string1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

DANIEL. OSORIO MALDONADO Pgina 55 de 184


UNI FIM
BORLAND C++
char *string2 = "WVUTS";
char *ptr;

ptr = strpbrk(string1, string2);

if (ptr)
cout<<"strpbrk found first character: "<< *ptr;
else
cout<<"strpbrk didn't find character in set ";

getch();
}
//strpbrk found first character: S

d) strspn(cadena1,cadena2):localiza la posicin del primer carcter de una cadena (cadena1)que no


pertenece al conjunto de otra (cadena2).
Sintaxis
int strspn(char *cadena1,char *cadena2)

#include <iostream.h>
#include <string.h>
#include<conio.h>
main()
{
char *string1 = "1234567890";
char *string2 = "123DC8";
int length;
length = strspn(string1, string2);
cout<<"El Caracter en donde la cadena es diferente esta en la posicion :"
<<length;
getch();
}
// El Caracter en donde la cadena es diferente esta en la posicion :3
//No olvide que que la primera posicion tiene valor 0

e) strcspn(cadena1,cadena2):Localiza la posicin de la primera aparicin en una cadena de cualquier


carcter de otra cadena. Si tiene xito, la funcin strcspn devuelve el ndice del carcter de cadena1 que
pertenece al conjunto de caracteres de cadena2.
Sintaxis funcion
int strspn(char *cadena1,char *cadena2)

#include <iostream.h>
#include <string.h>
#include<conio.h>

main()
{
char *string1 = "1234567890";
char *string2 = "757DC8";
int length;
length = strcspn(string1, string2);
cout<<"El Caracter donde intersecta a la cadena esta en el indice o posicion : "<<length;
getch();
}
//Character where strings intersect is at position: 4
//No olvide que se empieza desde el indice posicion 0

DANIEL. OSORIO MALDONADO Pgina 56 de 184


UNI FIM
BORLAND C++

f) strstr(cadena1,cadena2) localiza la primera aparicin de una cadena en otra. Si tiene xito, la funcin
strstr devuelve un puntero a la primera aparicin de cadena2 como una subcadena de cadena1.Si la
bsqueda falla. Se devuelve NULL.
Sintaxis funcion con cuntero
Char *strstr(char *cadena1,char *cadena2)

#include <iostream.h>
#include <string.h>
#include<conio.h>
main()
{
char *str1 = "Borland International", *str2 = "nation", *ptr;
ptr = strstr(str1, str2);
cout<<"The substring is :\n"<< ptr;
getch();
}
/*The substring is :
national*/

g) strtok(cadena1,cadena2):rompe una cadena en subcadenas utilizando una lista de separadores.


Devuelve un puntero a la subcadena actual y un NULL cuando se almacena el final de la cadena.

Sintaxis de la Funcion con puntero


char *strtok(char *cadena, char *cadena2)

#include <string.h>
#include <iostream.h>
#include<conio.h>
main()
{
char input[16] = "abc,d";
char *p;
/* strtok places a NULL terminator
in front of the token, if found */
p = strtok(input, ",");
if (p) cout<<'\n'<< p;

/* A second call to strtok using a NULL


as the first parameter returns a pointer
to the character following the token */
p = strtok(NULL, ",");
if (p) cout<<'\n'<< p;
getch();
}
Salida /*abc
d */

FUNCIONES DE COMPARACIN DE CADENAS

a) strcmp(cadena1,cadena2)Compara segn el orden lexicogrfico , dos variables de cadena y


devuelve un valor:
<0 Si la cadena1 es menor que la cadena2
==0 Si la cadena1 es igual a la cadena2

DANIEL. OSORIO MALDONADO Pgina 57 de 184


UNI FIM
BORLAND C++
>0 Si la cadena1 es mayor que la cadena2

//aplicacin_1

#include <string.h>
#include <iostream.h>
#include<conio.h>
main()
{
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
int ptr;
ptr = strcmp(buf2, buf1);
if (ptr > 0)
cout<<"buffer2 is greater than buffer1 ";
else
cout<<"buffer2 is less than buffer1 ";

ptr = strcmp(buf2, buf3);


if (ptr > 0)
cout<<"buffer2 is greater than buffer3 ";
else
cout<<"buffer2 is less than buffer3 ";
getch();
}
/*buffer2 is greater than buffer1
buffer2 is less than buffer3 */

//Aplicacion_2
#include <string.h>
#include <iostream.h>
#include<conio.h>

main( ){
char clave[50];
gotoxy(2,4);cout<<Ingrese Clave de Acceso :;
cin.getline(clave,50);
gotoxy(2,6);
if(strcmp(clave, TIENES PERMISO )==0)
cout<<Clave de Acceso Correcta ;
else if(strcmp(Clave,tienes permiso)==0;
cout<<Clave de Acceso Correcta ;
else
cout<<Denegado el Acceso ;
gotoxy(20,20);cout<<Presione Enter ;
getch();
}

TEMA : PUNTEROS (Apuntador * y direccion &)

Un apuntador o puntero es una variable como cualquier otra;


diferencindose de las dems por sus contenidos; el cual deber ser una direccin obligadamente segn su
tipo.

DANIEL. OSORIO MALDONADO Pgina 58 de 184


UNI FIM
BORLAND C++

Variable Comn Variable Puntero


Tiene Un Nombre Tiene un Nombre
Tiene una Direccin Tiene una direccin
Tiene un contenido(un dato) Tiene un Contenido (una direccin)

Los punteros son declaraciones de la siguiente forma :


Tipo dato *p
En donde
Tipo dato : Es el indicador del tipo de dato a ser almacenada.
*p : Es el puntero p que guardar una direccin. Se caracteriza porque siempre es declarado
anteponiendo el carcter *.
Se dice comnmente que p guardar la direccin y que *p la in direccin. Entonces se entiende por
indireccin al contenido que hay en la direccin p.
Ejemplo
/* Programa de asignacion */
#include<iostream.h>
#include<conio.h>

main ( )
{
unsigned int a,*p,*q;

cout<<"Ingrese el Valor de a : ";


cin>>a;

p=&a; /* asigna la direccion de a, a la variable p */


/* p apunta a la variable entera de a */
q=p; /* La direccion que contiene p se asigna a q */
cout<<"La Direccion de "<<a<<" esta dada por :"<<p<<endl;
cout<<"En la direccion de 'a' esta el valor "<<*q;
getch();
}
Ingrese el Valor de a : 25
la solucion se aprecia: La Direccion de 25 esta dada por :0x0064fe00
En la direccion de 'a' esta el valor 25

Otro ejemplo:
/* Programa que Asigna valores de un puntero a otro puntero */
#include<iostream.h>
#include<conio.h>
imain()
{
int x;
int *p1,*p2;
cout<<"Ingrese el Valor de x: ";cin>>x;
p1 =&x;
p2=p1;//La direccion que tiene p1 se asigna a p2

/* Imprime el valor hexadecimal


de la direccion x no el valor de x */
cout<<"No olvidarse que se ha echo la Siguiente Asignacion:"
<<"p1<-&x "<<endl<<"y luego: p2<-p1"<<endl;
cout<<"La Direccion HEXADECIMAL de p2 es "<<&p2;

DANIEL. OSORIO MALDONADO Pgina 59 de 184


UNI FIM
BORLAND C++

/* ahora Imprime el valor de x */


cout<<"\n El valor de x es: "<<*p2;
getc();
}

Ingrese el Valor de x: 666


No olvidarse que se ha echo la Siguiente Asignacion:p1<-&x
y luego: p2<-p1
La Direccion HEXADECIMAL de p2 es 0x0064fdfc
El valor de x es: 666

Ejemplo 02 main()
//Intercambiar 02 valores usando punteros {
#include<iostream.h> float a,b;
#include<conio.h> Leerab(&a,&b);
void Leerab(float *x,float *y){ swab(&a,&b); /* Llama a la funcin swab y pasa la
cout<< "Ingrese el valor de a ";cin>>*x; direccin de a y b */
cout<< "Ingrse el valor de b ";cin>>*y; cout<<"\n Ahora a= "<<a<<" y b= "<<b;
} getch();
void swab(float *x,float *y){ }
float t; /*Salida
t=*x; Ingrese el valor de a 2
*x=*y; Ingrse el valor de b 5
*y=t;
} Ahora a= 5 y b= 2*/

El programa pide dos valores, enteros los cuales se almacenan en a y b respectivamente. Luego se invocan a
la funcion swab; entonces recepciona dos direcciones, las cuales son guardadas en dos punteros. Luego las
direcciones o contenidos son cambiados. El programa termina entonces cambiando los datos de las variables.

Tema: Estructuras Dinamicas de Datos


Asignacin Dinamica de Datos
La propiedad caracteristica de las estructuras dinmicas es la facultad que tienen para variar su tamao.
Esta propiedad las distingue claramente de las estructuras estaticas fundamentales (arrays y estructuras).
Por tanto, no es posible asignar una cantidad fija de memoria para una estructura dinmica, y como
consecuencia un compilador no puede asociar direcciones explcitas con las componentes de tales

DANIEL. OSORIO MALDONADO Pgina 60 de 184


UNI FIM
BORLAND C++
estrcturas. La Tecnica que se utiliza frecuentemente para resolver este problema consiste en realizar una
Asignacion dinamica de memoria; es decir, signacion de memoria para las componentes individuales, al
riempo que son creadas durante la ejecucion del programa, en vez de hacer la asignacion durante la
compilacion del mismo.
Los operadores new y delete se utilizan para reservar y liberar memoria dinmicamente, de forma similar
a las funciones malloc( ) y free( ) en C. Ahora los operadores new y delete son parte del lenguaje C++ y no
parte de una librera. El propsito de new es crear arrays cuyo tamao pueda ser determinado mientras el
programa corre.
delete funciona igual que free( ) en C. El contenido al que apunta el puntero es borrado, pero no el
puntero en s. Se pueden crear ms variables y hacer que la localizacin sea el mismo puntero.
Veamos un ejemplo de utilizacin de estos operadores:

#include<iostream.h> int index, *point1, *point2;


#include<conio.h> point1 = &index;
#include<stdlib.h> *point1 = 77;
int main(){ point2 = new int;
int *p,q; *point2 = 173;
p=new int; //asignacion de espacio para un cout <<"Los valores son "<<index <<"
entero "<<*point1 << << *point2 <<'\n';
//asegurese siempre de que la asignacion se ha point1 = new int;
efectuado point2 = point1;
if(!p){ *point1 = 999;
cout<<"Error de Asignacion \n" ; cout <<"Los valores son "<<index <<"
return 1; "<<*point1 <<" " <<*point2 <<'\n';
delete point1;
} cout<<"Ingrese el Valor de q: ";cin>>q; float *float_point1, *float_point2 = new float;
p=&q; //*p=100 float_point1 = new float;
cout<<"El Entero Contenido en q es: "<<*p << *float_point2 = 3.14159;
\n; *float_point1 = 2.4 * (*float_point2);
cout<<"\nY su Direccion es: "<<p; delete float_point2;
delete p; //se elimina la memoria delete float_point1;
getch( ); char *c_point;
} c_point = new char;
delete c_point;
c_point = new char [sizeof(int) + 133];
delete c_point;
EJEMPLO_2 getch();
# include <iostream.h> }
#include<conio.h>
main(){

Resultado de la ejecucin:
Los valores son 77 77 173
Los valores son 77 999 999

En las primeras lneas del programa, se hace uso de los punteros tal y como se haca en C++.
point2 ilustra el uso del operador new. Este operador requiere un modificador que debe ser un tipo. La
parte new int significa que se crea un nuevo entero en la memoria, y devuelve la localizacin del entero
creado. Esta localizacin es asignada a point2. La siguiente lnea asigna 173 al entero al que apunta point2.
Es importante distinguir entre point2, la localizacin del entero, y *point2, el entero. El puntero point2
apunta ahora a una variable entera que se ha reservado dinmicamente, y que puede utilizarse de igual
forma que se haca en C. Como ejemplo, se imprime el valor al que apunta.
A continuacin, se reserva memoria para una nueva variable, y point2 se refiere a la misma variable
reservada dinmicamente a la que apunta point1. En este caso, la referencia a la variable a la que point2
apuntaba previamente se ha perdido, y nunca podr ser utilizada o su memoria liberada. Slo cuando se
vuelva al sistema operativo se liberar la memoria que ocupaba. Por tanto, no debe utilizarse.

DANIEL. OSORIO MALDONADO Pgina 61 de 184


UNI FIM
BORLAND C++
Ya que el puntero point1 en s no ha cambiado, apunta realmente al dato original. Este dato podra
referenciarse otra vez utilizando point1, pero no es una buena prctica de programacin, ya que no hay
garanta de lo que el sistema pueda hacer con el puntero o el dato. La localizacin del dato queda libre para
ser reservada en una llamada subsiguiente, y ser pronto reutilizada en cualquier programa.
Ya que el operador delete est definido para no hacer nada si se le pasa un valor NULL, se puede liberar la
memoria ocupada por un dato al que apunta un puntero NULL, ya que realmente no se est haciendo nada.
El operador delete slo puede utilizarse para liberar memoria reservada con el operador new. Si se usa
delete con cualquier otro tipo de dato, la operacin no est definida, y por tanto nada sucede.
En el programa tambin declaramos algunas variables reales, y se realizan operaciones similares a las
anteriores. De nuevo esto ilustra que en C++ las variables no tienen que ser declaradas al comienzo de
cada bloque. Una declaracin es una sentencia ejecutable y puede entonces aparecer en cualquier lugar en
la lista de sentencias ejecutables.
Finalmente, ya que el operador new requiere un tipo para determinar el tamao de un bloque
dinmicamente reservado, se muestra cmo reservar un bloque de tamao arbitrario. Esto es posible
utilizando la construccon de las ltimas lneas del programa, donde un bloque de 37 caracteres de tamao
(37 bytes) es reservado. Un bloque de 133 bytes mayor que el tamao de un entero se reserva
posteriormente. Por tanto, el operador new se puede utilizar con la misma flexibilidad de la funcin malloc()
de C.
Cuando los datos reservados dinmicamente son borrados con delete, todava quedan en memoria. Si
repetimos la instruccin cout inmediatamente despus de utilizar delete, veremos que todava se conservan
los valores. Si la repetimos de nuevo antes de dejar el programa, cuando el espacio que ocupaban debe
haber sido sobreescrito, veremos que ya no es as. Incluso aunque el compilador nos d los nmeros
correctos, no es una buena prctica pensar que esos datos estn ah todava, porque en un programa
dinmico largo la memoria se usar continuadamente.
Las funciones estndar utilizadas en C para manejo dinmico de memoria, malloc(), calloc() y free(),
tambin se pueden utilizar en C++ de la misma forma que en C. Los operadores new y delete no deben
mezclarse con estas funciones, ya que los resultados pueden ser impredecibles. Si se est partiendo de
cdigo C, lo mejor es continuar utilizando las funciones en las nuevas lneas de programa. Si no es as, se
deben utilizar los nuevos operadores, ya que se han construido como parte del lenguaje en s, ms que
aadirse, y por tanto son ms eficientes.
Cuando se utiliza new para reservar memoria para un vector, el tamao del vector se sita entre corchetes,
siguiendo al tipo:
int *intvector;
int vector = new int [20];
y se libera:
delete [ ] intvector;

Punteros a funciones
Los punteros a funciones ya existan en C, aunque no se utilizan regularmente. Veamos un ejemplo:
#include <iostream.h>
#include<conio.h>
void printMensaje (float dato);
void printNumero (float dato);
void (*funcPuntero)(float);

DANIEL. OSORIO MALDONADO Pgina 62 de 184


UNI FIM
BORLAND C++
main(){
float pi = 3.14159;
printMensaje(pi);
funcPuntero = printMensaje;
funcPuntero (pi);
funcPuntero = printNumero;
funcPuntero (pi);
printNumero(pi);
getch();
}
void printMensaje(float dato)
{
cout <<" Esta es la funcion printMensaje " <<'\n';
}
void printNumero(float dato)
{
cout <<" Este es el dato: " << dato << '\n';
}
La salida del programa ser:

Esta es la funcion printMensaje


Esta es la funcion printMensaje
Este es el dato: 3.14159
Este es el dato: 3.14159

Hemos declarado dos funciones, printMensaje y printNumero, y despus funcPuntero, que es un


puntero a una funcin que recibe un parmetro real y no devuelve nada (void). Las dos funciones
declaradas anteriormente se ajustan precisamente a este perfil, y por tanto pueden ser llamadas por este
puntero.
En la funcin principal, llamamos a la funcin printMensaje con el parmetro pi, y en la lnea siguiente
asignamos al puntero a funcin funcPuntero el valor de printMensaje y utilizamos el puntero para llamar a la
misma funcin de nuevo. Por tanto, las dos llamadas a la funcin printMensaje son idnticas gracias a la
utilizacin del puntero funcPuntero.
Dado que hemos asignado el nombre de una funcin a un puntero a funcin, y el compilador no da error, el
nombre de una funcin debe ser un puntero a una funcin. Esto es exactamente lo que sucede. Un nombre
de una funcin es un puntero a esa funcin, pero es un puntero constante que no puede ser cambiado.
Sucede lo mismo con los vectores: el nombre de un vector es un puntero constante al primer elemento del
vector.
Ya que el nombre de una funcin es un puntero a esa funcin, podemos asignar el nombre de una funcin a
un puntero constante, y usar el puntero para llamar a la funcin. Pero el valor devuelto, as como el nmero
y tipo de parmetros deben ser idnticos. Muchos compiladores de C y C++ no avisan de las diferencias
entre las listas de parmetros cuando se hacen las asignaciones. Esto se debe a que las asignaciones se
hacen en tiempo de ejecucin, cuando la informacin de este tipo no est disponible para el sistema.
Si en el ejemplo anterior aadimos una funcin que tiene como parmetro un entero e intentamos llamarla
con el puntero a funcin funcPuntero, el compilador lanzar el siguiente mensaje de error: error: In this
statement, the referenced type of the pointer value "print_int" is "function (int) returning void", which is not
compatible with "function (float) returning void". Compilation terminated with errors.
TEMA :ESTRUCTURAS
Un Estructura es una coleccin de variables o datos de diferentes tipos que se referencian bajo un mismo
nombre. Una estructura proporciona un medio conveniente para mantener junta informacin relacionada. Al
definir una estructura se forma una plantilla que puede usar para crear variables de estructura.
A una creacin se le da el nombre tambien de registro

CREACION DE UNA ESTRUCTURA

DANIEL. OSORIO MALDONADO Pgina 63 de 184


UNI FIM
BORLAND C++
struct nombre_tipo_estructura {
tipo1 var1
tipo2 var2
tipo3 var3
.
.
.
tipo k_esimo vark;}
Despus de definir un tipo estructura, podemos declarar una variable de ese tipo de la forma :
struct nombre_tipo_estructura nom_var;

Si var =nombre_tipo_estructura; Ingrese codigo =>AEI68

struct var nom_var. Ingrese Apellidos =>HIDALGO

Ingrese Nombres =>PAULA


Para referenciar a un determinado miembro
de una estructura se utiliza la notacin Ingrese Curso =>MATLAB
Var_tipostruc.miembro
El siguiente ejemplo clarifica lo dicho: Ingrese Nota =>14

Ejemplo: El Codigo es AEI68


/* Una Estructura simple */ Apellidos: HIDALGO
#include<conio.h> Nombres es PAULA
#include<iostream.h> El Curso es MATLAB
#include<iomanip.h> La nota es 14
struct{
char codigo[8];
char apellidos[30];
char nombres[20];
char curso[15];
float nota;
} ficha; // Esta linea puede quedar tambine };
//y el programa principal acepta el nombre
main()
{
cout<<"\nIngrese codigo =>";
cin.getline(ficha.codigo,10);
cout<<"\nIngrese Apellidos =>";
cin.getline(ficha.apellidos,30);
cout<< "\nIngrese Nombres =>";
cin.getline(ficha.nombres,20);
cout<< "\nIngrese Curso =>";
cin.getline(ficha.curso,15);
cout<< "\nIngrese Nota =>";
cin>>ficha.nota;

cout<<"\nEl Codigo es "<<ficha.codigo;


cout<<"\nApellidos: "<<ficha.apellidos;
cout<<"\nNombres es "<<ficha.nombres;
cout<<"\nEl Curso es "<<ficha.curso;
cout<<"\nLa nota es "<<ficha.nota;
getch();
}

Los Arreglos de Registros consiste controlar varios registros mediante una variable indexada
Ejemplo:
/*ARREGLO de REGISTROS , declarando como: registro Notas[N]

DANIEL. OSORIO MALDONADO Pgina 64 de 184


UNI FIM
BORLAND C++
que indica una variable indexada del tipo structura
Considere el Arreglo NOTAS como una lista compuesta
de los Alumnos y las notas viene dada por
notas[i].p1,notas[i].p2,etc. */

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<string.h>
#define N 30

struct Alumno{
char codigo [10];
char nombres[30];
char apellidos[30];
};
struct Rendimiento{
Alumno ficha;
int p1,p2,p3,p4,pp;
}Notas[N];

main() {
int m,menor;
register int i;
float s=0,S=0,promedio,pp;

/*Ingrese de Datos */
cout<<"\nIngrese Nmeros de Alumnos a Procesar =>";
cin>> m;
for(i=0;i<m;i++)
{
cout<<"\n Ingrese Codigo : ";
gets(Notas[i].ficha.codigo);
cout<<"\n Ingrese Nombres =>";
gets(Notas[i].ficha.nombres);
cout<<"\n Ingrese Apellidos =>";
gets(Notas[i].ficha.apellidos);
cout<<"\n Ingrese La Notas =>"<<endl;
cout<<"Ingrese Nota1: ";
cin>>Notas[i].p1;
cout<<"Ingrese Nota2: ";
cin>>Notas[i].p2;
cout<<"Ingrese Nota3: ";
cin>>Notas[i].p3;
cout<<"Ingrese Nota4: ";
cin>>Notas[i].p4; }

for(i=0;i<m;i++){
menor=Notas[i].p1;
if(menor>Notas[i].p2) menor=Notas[i].p2;
if(menor>Notas[i].p3) menor=Notas[i].p3;
if(menor>Notas[i].p4) menor=Notas[i].p4;
S+=(Notas[i].p1+Notas[i].p2+Notas[i].p3+Notas[i].p4);
pp=(S-menor) /3.0;
cout<<"\nEl Promedio de las Notas de:"
<<Notas[i].ficha.nombres<<" es: "<<pp<<endl;

DANIEL. OSORIO MALDONADO Pgina 65 de 184


UNI FIM
BORLAND C++
S=0;
Notas[i].pp=pp;}
if(m>1){

for(i=0;i<m;i++)
s+=(Notas[i].pp);
promedio =s/(float)m;
cout<<"Promedio de las notas de los "
<<m<<" Alumnos es: "<<promedio<<endl;}
else
cout<<"\n NO hay mas alumnos que procesar: ";
getch();
}

Anidamiento de estructuras
Las declaraciones de la estructuras se pueden anidar. Es decir, una estructura contriene uno o mas
miembros que son estructuras, tal es el caso del ejmplo arriba en la cual se tiene una estructura llamada
Alumno , con datos a cerca de esta estructura y luego creo otra estructura llamada Rendimiento y dentro de
esta estructura recien valido el nombre de de la estructura alumno con la variable ficha.

TEMA: LAS UNIONES:


Una union es otro tipo de dato que se puede utilizar de diferentes maneras. Por ejempl, una union
especifica podra construirse como un entero en una operacin y como un dato en coma flotante de
simple presicion o en coma flotante de doble precision en otra. Las uniones tienen una apariencia
similar a las estructuras. Sin embargo, presentan bastantes dieferencias. Al igual que una estructura, una
union puede contener un grupo de tipos de datos diferentes. Sin embargo, en una union todos estos tipos
de datos comparten la misma posicin en la memoria. Es decir, una Union en un momento dado solo puede
contener informacin de un tipo de dato. En algunos otros lenguajes de alto nivel a esta capacidad se le
denomina registro variantey tambien pueden estar constituidas de estructuras, apuntadores y arreglos.

DANIEL. OSORIO MALDONADO Pgina 66 de 184


UNI FIM
BORLAND C++
Sintaxis y reglas:
Una union se construye mediante la palabra clave union siendo su sintaxis la siguiente:
Union nom_union{
type campo1;
type campo1;
type campo1;
...................
...................
type campo n;
};

Al final , como se aprecia al final se utiliza un punto y coma.

union int_or_long {
int i;
long l;
} a_number;

Si la variable a_number (variable asociada a la union) , se encuentra dentro de una funcion, la union es de
ambito local a esa funcion. Si esta instruccio se encuentra se encuentra fuera de las funciones,ser de
ambito global.
Al igual que como las esturcturas, es posible asociar varias variables a la misma union . Tambien, lo mismo
que ocurre con las estructuras, se hace referencia a los miembros de una union mediante el operador
punto(.). la sintaxis es simplemente :
a_number.nombre ; a_number ->nombre nombre de algun miembro de la union.
#include iostream.h
#includestdio.h

union prueba {
char c;
int b;
float d;

};
main(){
union prueba bcd;
cout<<Ingrese dato b;cin>>bcd.b;
cout<<direccion de b :<<&bcd.b<<\n;
cout<<direccion de d :<<&bcd.d<<\n;
cout<<direccion de cbd :<<&bcd<<\n;
cout<<numero de bytes :<<sizeof(bcd)<<\n;
getch();
}

Ingrese dato b666


direccion de b :0x0067fe00
direccion de d :0x0067fe00
direccion de cbd :0x0067fe00
numero de bytes :4

DANIEL. OSORIO MALDONADO Pgina 67 de 184


UNI FIM
BORLAND C++
NOTA:tanto la direccion de cada uno de sus atributos, como de la variable union, apuntan a la misma
localidad de memoria, ello se debe sencillamente a que una union es una localidad de memoria que se
utiliza para compartir datos de diferentes tipos.

El compilador asigna como espacio de memoria el mas grande posible, para contener el tipo de datos con
mayor logitud de bytes, esto se averigu mediante :

sizeof(bcd) que corresponde al tipo float, de atributo d.

Los tipos de Datos definidos por el Usuario: typedef y enum

typedef : el tipo typedef permite al usuario crear nuevos de tipos de datos y se apoya en el compilador,
esquemticamente :

Identificador de
typedef Tipo dato
usuario ;
typedef char array[25]; aqu se crea un nuevo nombre de tipo array
declarndose entonces que los vectores x,y obedecen al tipo array array x,y.
Se debe evitar el uso exagerado de nuevos tipos de datos, puede conllevar a confusin.
Ejemplo:
#include<isotream.h>
#include<conio.h>
typedef int entero
typedef double real

main(){
entero evalor;
real rvalor;

cout<< Ingrese un valor entero :<<evalor;


cout<< Ingrese un valor decimal :<<rvalor;

cout<<Los valores Ingresados son :<<Entero :<<evalor<<endl


<<Y el Valor Real o decima es :<<rvalor;
getch();
}

TEMA : PROGRAMACIN ORIENTADA A OBJETOS

DANIEL. OSORIO MALDONADO Pgina 68 de 184


UNI FIM
BORLAND C++
La Programacin Orientada a Objetos(POO) funcionan en forma diferente a los construidos bajo el enfoque
procedimental tradicional. Requieren una nueva estrategia de programacin que con frecuencia
es difcil, al menos en el primer intento de comprenderlo pero a mediada que el programador
valla internndose en el mundo de la POO este le ser muy natural. En terminos gnericos se
trata de programar en base a objetos que con frecuencia estan relacionados. Con C++, los
objetos son construidos utilizando la clase, un nuevo tipo de dato. Una clase proporciona un
conjunto de valores(datos) y de operaciones(mtodos o funciones miembro) que actuan sobre
esos valores. Los objetos resultantes pueden manipularse mediante m,ensajes.
El mensaje es parte de todos los lenguajes orientados a objetos, es comun tambien en windows y
en los programas de manejo de presentaciones. En la programacin orientada objetos, los objetos
mentienen no solo los datos(datos miembros),sino tambien los mtodos (funciones miembro) para trabajar
sobre esos datos. Los dos elementos se han combinado en un solo concepto de trabajo. Simplemente, los
objetos contienen datos y metodos para trabajar sobre esos datos.
La programacion orientada aobjetos ofrece tres ventajas distintas al programador:

Mantenimiento del Programa, los programas son ms fciles de leer y comprender, y la


programacin orientada a objetos controla la complejidad del programa, haciendo que el programador
vea nicamente los detalles necesarios.
La alteracin del programa(aadir o eleiminar caractersticas). Es posible aadir o eliminar
caractersticas de los programas como en un programa de bases de datos, simplemente aadiendo o
eliminando objetos. Los objetos nuevos pueden heredarlo todo desde un objeto padre y unicamente
necesitan aadir o eliminar los elementos en que difieran del padre.
Los objetos pueden utilizarse numerosas veces. Los objetos bien diseados pueden guardarse en un
toolkid de rutinas utiles que pueden insertarse fcilmente en un cdigo nuevo con pocos o ningun
cambio sobre ese cdigo.
Terminologa
a) Encapsulacion
Se refiere a la forma en la que el objeto combina sus datos y funciones miembro (mtodos) en una
simple estructura. Tipicamente, una descripcin de un objeto es parte de una clase de C++ e
incluye una descripcin de la estructura interna del objeto, cmo los objetos se ralacionan con otros
objetos y alguna forma de proteccin que aisla los detalles funcionales del objeto exterior de la
clase. La estructura de clases de C++ hace todo esto.
Los detalles funcionales del objeto se controlan en una clase de C++, utilizando los descriptores
private,public y/o protected. En programacin orientad a Objetos la seccion pblica se utiliza
tpicamente para la informacin de la interfaz (mtodos) que hace a la clase reutilizable por otras
aplicaciones. Si los datos o los mtodos estan contenidos en la seccion pblica , estan disponibles
ms all de la propia clase. La seccion privada de una clase limita la disponibilidad de datos o
mtodos a la misma clase. Una seccion protegida conteniendo datos o mtodos est limitada a la
clase y a cualquiera de las subclases derivadas.
b) Jeraquia de clases
La clase de C++ actualmente sirve de plantilla o modelo para la creacin de objetos. Los objetos
formados a partir de la descripcin de la clase son instancias de la clase. Es posible desarrollar una
jeraqua de clases donde hay una clase padre y varias clases hijas. En C++, la base para hacer esto
se centra en las clases derivadas.
Las clases padre representan las tares ms generalizadas, mientras las clases hijo derivadasllevan a
cabo tares ms especficas.
c) Herencia
La herencia en programacin orientada a objetos, permitea una clase heredar propiedades de otra
clase de objetos. La clase padre acta como un patrn para la clase derivada y puede ser alterada
de varias formas.
Si un objeto hereda sus atributos de un nico padre, hablaremos de herencia simple. Si un objeto
hereda sus atributos de mltiples padres, hablaremos de herencia mltiple. La herencia es un
concepto importante ya que permite reutilizar la definicin de una clase sin necesidad de realizar
cambios en el cdigo. La herencia fomenta la reutilizacin de un cdigo,ya que las clases hijas son
extenciones de las claces padre.

DANIEL. OSORIO MALDONADO Pgina 69 de 184


UNI FIM
BORLAND C++
d) Polimorfismo
El polimorfismo permite a cada objeto subclase responder al formato de mensaje de una forma
apropiada a su definicin,es decir que los mensajes comunes pueden enviarse a los objetos de la
clase padre y a todos los objetos de la subclase derivada.
Otra forma de interpretar sera que con el polomorfismo permite que un mensaje comn de reunin
de datos sea enviado a cada clase. La clase padre y las clases hijas reponden de forma apropiada al
mensaje. El polimorfismo fomenta la extensibilidad del cdigo existente.

Al llegar a esta parte del Capitulo es bueno hacer un acercamiento entre la clase primitiva y las
clases propiamente dichas que crean los objetos.
Al hablar de clases primitivas me estoy refiriendo a las estructuras como una forma de programar
al estilo de las clases, es decir sin los metodos ni propiedades que con llevan la programacin
Orientada a Objetos.
Una clase :Estructura que define las caracteristicas de un objeto.
consta de miembros de 02 tipos y todos son privados
*datos //instancia statica
*funciones //instancia dinamica
Mientras que una structura triene sus instancia y sus miembros todas publicas.
Objeto :variable correspondiente a una clase

/*Mediante una estructura halle la main(){


resultante de 02 fuerzas F1 y F2 y que Fuerzas Resultante;
forman un angulo theta, use el metodo float a,b,c;
del paralelogramo */ cout<< "Ingrese F1 = ";cin>>a;
#include<iostream.h> cout<< "Ingrese F2 = ";cin>>b;
#include<conio.h> cout<< "Ingrese el angulo theta = ";cin>>c;
#include<math.h> Resultante.leerF1F2theta(a,b,c);
#define pi 2*asin(1) cout<< "La Resultante de las 02 fuerzas: F1
#define K pi/180 = "<<a<<"y "<< "F2 = "<<b
struct Fuerzas { <<endl<<" Con angulo theta = "<<c<<"
float F1,F2,theta; \nEs "<<Resultante.calculo(a,b,c);
void leerF1F2theta(float x,float y,float z); getch();
double calculo(float F1,float F2,float }
theta); /*Salida
}; Ingrese F1 = 3
void Fuerzas::leerF1F2theta(float x,float Ingrese F2 = 4
y,float z) Ingrese el angulo theta = 90
{ F1=x;F2=y;theta=z;} La Resultante de las 02 fuerzas:
double Fuerzas::calculo(float F1,float F1 = 3y F2 = 4
F2,float theta) Con angulo theta = 90
{return(sqrt(F1*F1+F2*F2+2*F1*F2*cos(thet Es 5 */
a*K)));}

Aprecie las instancias, de la estructura vera todas son publicas.


Veamos ahora un ejercicio con clases

include<iostream.h> {
#include<conio.h> gotoxy(x,y);
class punto { cout<<ch;
public: }
int x,y; void punto::ocultar()
char ch; {
void mostrar(); cout<<" ";
void ocultar(); }
}; main( )
void punto::mostrar() {

DANIEL. OSORIO MALDONADO Pgina 70 de 184


UNI FIM
BORLAND C++
punto pt; gotoxy(24,10);cout<<"\n\t\t\t"<<24<<':' <<10;
pt.ch='*'; pt.mostrar();
pt.x=24; getch();
pt.y=10; }

DANIEL. OSORIO MALDONADO Pgina 71 de 184


Laboratorio de Computo
LABORATORIO N01
En este primer laboratorio vamos a reconocer el entorno de desarrollo de Borland C++ y
posteriormente desarrollaremos aplicaciones que sern resueltas en la computadora.
En la siguiente figura se aprecia la manera de empezar una aplicacin:
File\New\Text Edit, esta secuencia se aprecia en el siguiente grfico

El grfico siguiente muestra como debe quedar la ventana para empezar una aplicacin
por primera vez. Aqu puede empezar a escribir cdigo.

Al empezar a escribir el cdigo vamos atener una pantalla como se muestra, debe
seguirse los pasos que su profesor le indique para no cometer errores.
Al terminar de escribir el cdigo se esta en la posibilidad de compilar el programa, es
decir es la fase anterior a la ejecucin, permite corregir errores de sintaxis, para ello se
usa proyect\compile o tambien alt+F9.
Puede apreciar que hay dos ventanas pequeas, una para el cdigo y la otra para
depurar o tambien llamada ventana de mensajes.
Desde la ventana de mensajes se puede corregir los errores y esto es cuando aparece
un signo de admiracin de color rojo, indicndonos la posible ubicacin del error, se
hace dobleclic del boton primario para corregir

Cuando ya no existe errores es el momento entonces de ejecutar la aplicacin para ello


segumos la ruta Debug\run o tambien Ctrl + F9 o el icono del rayo
En pantalla debe salir el resultado:

Ingrese el valor de a :42


Ingrese el valor de b :35
Ingrese el valor de c :45
El mayor es c:45

Como salvar una aplicacin: para esta operacin se puede usar el menu con las
opciones File\save o File\save as.
como tambien el icono
Si desea cortar,copiar y pegar puede usar:

En la figura que se podr reconocer las distintas opciones que ofrecen los botones del Entorno
de Desarrollo del Borland C++
Como por ejemplo :
Botn de apertura.
Botn para compilar la aplicacin.(opcin Proyect\compilar)
Opcin de copiado\cortar\pegar.
Para realizar nuestra primera aplicacin debemos activar el Icono
que representa al Borland C++.
Para ello ir a men Inicio\programas\Borland C++.
Una vez activado el programa debemos estar seguros que estamos en el rea de trabajo, y es
all donde se debera a codificar el programa que ser resuelto por la computadora.

Aplicacin #1 : /*Supongamos que x y z son las siguientes funciones de t


x=t^3+8t+4; y=Sent + Cos2t; z=e^(3t+5),w=3t^(e)+5t^(2e+1/e) */
#include <iostream.h>
#include <math.h>
#include"conio.h"
main(){
int t;long x;double y,z,w;
x=0;y=0;z=0;w=0;
cout<<"Ingrese el Valor de t=";cin>>t;
x=t*t*t-8*t+4;
y=sin(t)+cos(2*t);
z=exp(3*t+5);
//w=pow(t,exp(1);
w=3*pow(t,exp(1))+(1.0/5.0)*pow(t,2*exp(1)+1.0/exp(1));
cout<<"El valor de x=t^3+8t+4=> "<<x<<endl
<<"El valor de y=Sent + Cos2t=> "<<y<<endl
<<"El valor de z=e^(3t+5)=> "<<z<<endl
<<"Y El Valor de w=3t^(e)+5t^(2e+1/e)=>"<<w<<endl;
getch();
}
Aplicacin #2
/*PROGRAMA DE CADENA ,PERMITE EMITIR UNA BOLETA DE PAGO */
#include<conio.h>
#include<ctype.h>
#include<iostream.h>
main ( )
{
char pg,c,nom[20], curso[15];
float pc,canti;
do{
clrscr();
gotoxy(20,5);cout<< "Ficha de Inscripcion ";
gotoxy(20,6);cout<<"======= == ===========";
gotoxy(15,7);cout<<" Nombres y Apellidos :";
gotoxy(15,8);cout<<" Nombre del Curso :";
gotoxy(15,9);cout<<" Precio del Curso :";
gotoxy(10,10);cout<<"Pago <Contado(C);Credito(D)> :" ;
gotoxy(50,10);cout<<"Cantidad :";

/*INGRESO DE DATOS*/

gotoxy(40,7); cin.getline(nom,20);
gotoxy(40,8); cin.getline(curso,15);
gotoxy(40,9); cin >>pc;
gotoxy(40,10);cin >>pg;
pg=toupper(pg);
if (pg=='C')
{ gotoxy(20,12);cout<<"Cancelado \n";
gotoxy(50,10);cout<<"Resta =0";}
else
{
gotoxy(60,10);cin >>canti;
gotoxy(20,12) ;cout<<"Resta :"<<(pc-canti)<<" Nuevos Soles";
}gotoxy(20,23); cout<<"Otra Inscripcion [S][N]?:";
}while (toupper(getch())=='S');
getch();
}

Aplicacin #3
Visualizar una aplicacin que permita el ingreso del nombre del Usuario, el nombre del curso
sin espacios en blanco y luego las notas de practicas como por ejemplo
prac1,prac2,prac3,prac4 hallar el promedio de estas notas
Para luego sumarlas a las de los examenes parciales y finales.
El promedio final tendr la siguiente formula:
Pp=(prac1+prac2+prac3+prac4)/4.
Profin=(Pp+Expar+Exfin)/3.0.

#include <iostream.h>
#include<conio.h>
main(){
float prac1,prac2,prac3,prac4;
float Pp,Profin,Expar,Exfin;
char nombre[20],curso[20];
cout<<"Ingrese su nombre ";
cin>>nombre;
cout<<"Ingrese nombre del curso sin espacios ";
cin>>curso;
cout<<"Ingrese la nota de la primera practica ";
cin>>prac1;
cout<<"Ingrese la nota de la segunda practica ";
cin>>prac2;
cout<<"Ingrese la nota de la tercera practica ";
cin>>prac3;
cout<<"Ingrese la nota de la cuarta practica ";
cin>>prac4;
Pp=(prac1+prac2+prac3+prac4)/4.0;
cout<<"Ingrese la nota del examen parcial ";
cin>>Expar;
cout<<"Ingrese la nota del examen final ";
cin>>Exfin;
Profin=(Pp+Expar+Exfin)/3.0;
cout<<"El promedio final de : "<<nombre<< es <<Profin;
getch();
}
El resultado se aprecia en la siguiente vista:

Aplicacin #5
/*Aplicacin que muestra como rellenar los espacios en blanco con un carcter(*)
Programa que calcula las distintas bases existentes */
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>

i main() {
int i,n;
cout<<"Ingrese el valor de i: ";cin>>i;
cout<<setfill('*'); //rellena de *
cout<<setiosflags(ios::showbase|ios::uppercase);
cout<<"En base 10: "<<setw(6)<<setbase(10)<<i<<endl;
//Tambien <<dec<<i<<endl
cout<<"En Base 8: "<<setw(6)<<setbase(8)<<i<<endl;
// Tambien <<oct<<i<<endl
cout<<"En Base 16:"<<setw(6)<<setbase(16)<<i<<endl;
//Tambien <<hex<<i<<endl
//GGcout<<"En Base 2:"<<setw(6)<<setbase(2)<<i<<endl;
getch();
}
Aplicacin #6
/* Escriba un programa en borland C++ para calcular y mostrar el maximo momento
flexionante, M de una viga, la cual esta apoyada en ambos extremos La formula para el
maximo momneto flexionante es M=XW(L-X)/L, donde X es la distancia desde el extremo
ixquierdo de la viga donde un peso,
W,esta colocado, y L es el Largo de la Viga. El despliegue producido por el programa :
el maximo momento flexionante es xxxx.xxx
|
|<--x->|
| W
-------------------------
#<----------L---------->#*/

#include"iostream.h"
#include"conio.h"
#include"math.h"
#include"iomanip.h"

main( ) {
float X,W,L,M;
cout<<"Ingrese la Longitud de la Viga :";cin>>L;
cout<<"Ingrese el peso W :";cin>>W;
cout<<"Ingrese la distancia desde el extremo al Peso X :";cin>>X;
cout<<setiosflags(ios::fixed|ios::showpoint)
<<setw(10)<<setprecision(4);
M=X*W*(L-X)/L;
cout<<"El Maximo Momento Flexionante es:"<<M;
getch();
}

Ingrese la Longitud de la Viga :100


Ingrese el peso W :30
Ingrese la distancia desde el extremo al Peso
X :45
El Maximo Momento Flexionante es:742.5000

Aplicacin #7
//Dado un valor cualquiera convertirlo en Grados C o F segn sea el caso
#include"iostream.h"
#include"conio.h"
#include"math.h"
main(){
float valor;
short k=32;
float C,F,Fa,Ce;
double Grados;
cout<<"a)Ingrese un valor en grados Celsius ";cin>>C;
Fa=(9.0/5.0)*C+32;
cout<<"b)Ingrese un valor en Grados Farenheith ";cin>>F;
Ce=(5.0/9.0)*(F-32);
cout<<"\n\n\tEntonces las conversiones son "
<<"\nLos Grados Celsius a Farenheid son :"<<Fa
<<"\nY los Grados Farenheid a Celsius es :"<<Ce;
getch();
}
//Uso del Redondeo
#include <math.h>
#include <stdio.h>
#include<conio.h>
#include<iostream.h>
main()
{
float number = 123.54;
float down, up;
down = floor(number);
up = ceil(number);
cout<<"Numero Original "<<number<<endl
<<"El numero redondeo abajo "<<down<<endl
<<"El numero redondeo arriba "<<up;
getch();
} /*Numero Original 123.54
El numero redondeo abajo 123
El numero redondeo arriba 124

*/
LABORATORIO N2
Aplicacin N1
//Este programa va a ordenar tres numeros ingresado
//desde Teclado
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<ctype.h>
main(){
int a,b,c,temp;
cout<<"Ingrese el Valor a:";cin>>a;
cout<<"Ingrese el valor b:";cin>>b;
cout<<"Ingrese el valor c:";cin>>c;
if (a>c)
{temp=a;
a=c;
c=temp;}
if (b>c){temp=b;
b=c;
c=temp;}
if (a>b)
{temp=a;
a=b;
b=temp;}
cout<<"Los Numeros Ordenados son :\n"<<a<<setw(5)
<<setw(5)<<b<<setw(5)<<c;

}
Aplicacin N2
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<ctype.h>
imain()
{
float a,b,c,max,perim;
char opc;
do{
clrscr();
cout<<"Ingrese los valores de los lados: "<<endl;
cout<<"Ingrese el lado a: ";cin>>a;
cout<<"Ingrese el lado b: ";cin>>b;
cout<<"Ingrese el lado c: ";cin>>c;

if(a>b)
max=a;
else
max=b;
if(max<c)
max=c;
perim=(a+b+c);
if(perim>2*max)
cout<<"Forman un Triangulo \n";
else
cout<<"Los Lados no Forman Un Triangulo"<<endl;
cout<<"Desea otra Prueba[S][N]?:";
opc=toupper(getch());
}while(opc=='S');
getch();
}

Aplicacin N3
//PROGRAMA QUE CALCULA EL AREA DE UN TRIANGULO CONOCIENDO
//SUS TRES LADOS
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
#include<ctype.h>
main(){
float a,b,c,p;
double ap,at;
char opc;
do{clrscr();
cout<<"ingrese los lados del Triangulo:\n";
cout<<"Ingrese lado a:";cin>>a;
cout<<"Ingrese lado b:";cin>>b;
cout<<"Ingrese lado c:";cin>>c;

p=(a+b+c)/2;
ap=(p*(p-a)*(p-b)*(p-c));
if (ap){
at=sqrt(ap);
cout<<"\n El Area Total es :"<<setiosflags(ios::fixed|ios::showpoint);
cout<<setprecision(2)<<at<<endl;}
else{
cout<<"Los Lados No Determinan Un Triangulo";}//<<"\n Pruebe Nuevamente";}
cout<<"\nDesea Probar Nuevamente [S][N]:?";
opc=toupper(getch());
}while(opc=='S');

}
//El Manipulador ios::fixed fija formato para reales.
//El Manipulador ios::showpoint muestra punto decimal y decimales
//El Manipulador setw(nn) establece el ANCHO del dato
//El Manipulador setprecision(2) establece 2 decimales para un real.
Aplicacin N4
/*Programa que calcula la cantidad de a pagar por las Horas Trabajadas si La horas superan a
40 que son las normales se considera el resto como
Horas Extras y estas se pagan 50% mas que las normales*/
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#include<iomanip.h>
void main()
{char nombre[20],opc;
int horas;
float precio_hora,salario;
do{
clrscr();
cout<<"ingrese su nombre:";
cin.getline(nombre,20);//no ingrese espacio en blanco
cout<<"Ingrese cantidad de horas trabajadas:";
cin>>horas;
cout<<" Ingrese Precio por Hora:";
cin>>precio_hora;
if(horas<=40)
salario=horas*precio_hora;
else
salario=40*precio_hora+1.5*precio_hora*(horas-40);
cout<< " Su Nombre es : ";
cout.width(10);cout<<nombre<<endl;
cout<<setiosflags(ios::fixed|ios::showpoint);
cout<<"salario: "<<setw(10)<<setprecision(2);
cout<<salario<<endl<<endl;
cout<<"Desea Continuar [S][N]:";
do{
opc=toupper(getch());
}while(opc!='N'&& opc!='S');
}while(opc!='N');
clrscr();
cout<<"ESO ES TODO POR HOY !!!...";
getch();
}
aplicacin N5

/*En un establecimiento Comercial se hace descuentos por toda compra que se


realiza con las condiciones iguientes, el igv es de 18%:
Si las compras >100 descuento =30%
Si las compras >60 descuento =20%
Si las compras >30 descuento =15%
Compras de Hasta 30 descuento=10% determinar : Descuentos,Pago del Impuesto, Importe a
pagar.

Determinar Objetos Datos:


Objeto dato_entrada: compras
Objeto dato_salida: Importe a pagar,Descuentos,Pagos de Impuesto y la Compra */

#include<iostream.h>
#include<conio.h>
#include<ctype.h>
#include<iomanip.h> //para manipuladores setw,setiosflags,etc
#define Pdsc0 0.10
#define Pdsc1 0.15
#define Pdsc2 0.20
#define Pdsc3 0.30

#define Imp 0.18

main(){
// Declarando Variables
float Compra,Dscto,PgImp,PgTotal,Q;
char rp;

do{
clrscr();
cout <<"Ingrese la Compra :";cin >>Compra;
Q=Compra;
if (Q >100)
Dscto = Q*Pdsc3;
else if(Q>60)
Dscto = Q*Pdsc2;
else if(Q>30)
Dscto = Q*Pdsc1;
else
Dscto = Q*Pdsc0;
//Calcular el Monto del Impuesto

PgImp =(Q-Dscto)*Imp;
//Calcular el Importe de la compra
PgTotal= (Q - Dscto+PgImp);

//Visualizar Resultados
cout<< endl;
cout << setiosflags(ios::fixed|ios::showpoint);//formato para Reales
cout <<"Compras :"
<<setw(10)<<setprecision(2)<<Q <<endl
<<"Descuento :"
<<setw(10)<<setprecision(2)<<Dscto <<endl
<<"Impuesto :"
<<setw(10)<<setprecision(2)<<PgImp <<endl
<<"Importe a pagar :"
<<setw(10)<<setprecision(2)<<PgTotal <<endl
<<"Otra compra [S][N]?:";// <<endl;
rp=toupper(getche());
}while(rp=='S');
}

/* Una Empresa de Confecciones paga al destajo por docenas confeccionada


de ropa interior, bajo las siguientes condiciones:
*por docena producida paga 50.00 nuevos soles , por unidades producidas 3.00
y con la finalidad de incentivar la produccion realiza los siguientes
incrementos por produccion:
*100 si la produccion es mayor o igual 60 docenas
*50 si la produccion es mayor a 40 pero menor a 60
*para produccion menores a 40 no hay bonificacion
El Trabajador esta sujeto a descontar por planilla:
Sistema de Salud: 7% del sueldo Bruto.
AFP :9% del sueldo bruto
Por otro lado debe para un impuesto si:
El sueldo bruto supera los 700.00 el impuesto es del 20%
si el sueldo bruto es mayor a 400 y menor a 700
el impuesto es del 10%
no hay descuentos para sueldo menor o igual 400
se pide un reporte total:
*/

#include <iostream.h>
#include <conio.h>
#include <string.h>
#include<ctype.h>
main()
{
char Cod[8],Nom[25],opc;
int UnidaProd,Boni,DocProd,NumeUnid,PagDocProd,PagoUnida,a;
float SueldoBruto,SistSalud,AFP,Impuesto,Total,SueldoNeto;
do {
clrscr();
/*PROGRAMA DEL MARCO*/
gotoxy(2,2);cout<<'*';
a=3;
while(a<65)
{
gotoxy(a,2);cout<<'*';
gotoxy(a,24);cout<<'*';
gotoxy(a,12);cout<<'*';
gotoxy(a,22);cout<<'*';;
a=a+1;
}
gotoxy(65,2);cout<<'';
a=3;
while(a<25)
{
gotoxy(2,a);cout<<'*';
gotoxy(65,a);cout<<'*';
a=a+1;
}
gotoxy(65,24);cout<<'*';
gotoxy(2,24);cout<<'*';
/*FIN DEL MARCO*/
gotoxy(20,5);cout<<"DEPARTAMENTO DE CONTABILIDAD";
gotoxy(15,7);cout<<"CODIGO :";
gotoxy(15,9);cout<<"NOMBRES:";
gotoxy(15,11);cout<<"UNIDADES PROD. :";
gotoxy(15,13);cout<<"INGRESOS :";
gotoxy(45,13);cout<<"EGRESOS :";
gotoxy(15,15);cout<<"PAGO DOCENAPRODUC (S/.) :";
gotoxy(45,15);cout<<"SNP :";
gotoxy(15,17);cout<<"PU (S/.) :";
gotoxy(45,17);cout<<"IMP :";
gotoxy(15,19);cout<<"BONIF (S/.):";
gotoxy(15,21);cout<<"SB :";
gotoxy(45,19);cout<<"AFP :";
gotoxy(45,21);cout<< "TOTAL:";
gotoxy(25,23);cout<<"SALARIO NETO:";

/*INGRESO DE DATOS*/
gotoxy(23,7);cin>>Cod;cin.ignore();
gotoxy(24,9);cin.getline(Nom,25);
gotoxy(32,11);cin>>UnidaProd;
DocProd=(UnidaProd/12);
NumeUnid=(UnidaProd%12);
PagDocProd=DocProd*50;
PagoUnida=NumeUnid*3;
if(DocProd>=60)
{Boni=100;}
if(DocProd>40 && DocProd<60)
{Boni=50;}
if(DocProd<=40)
{Boni=0;}
SueldoBruto=(float)(PagDocProd+PagoUnida+Boni);
SistSalud=SueldoBruto*0.02;
AFP=SueldoBruto*0.01;
if(SueldoBruto>=700)
{Impuesto=SueldoBruto*0.20;}
if(SueldoBruto>400 && SueldoBruto<700)
{Impuesto=SueldoBruto*0.10;}
if(SueldoBruto<=400)
{Impuesto=0;}
Total=SistSalud+AFP+Impuesto;
SueldoNeto=SueldoBruto-Total;
/*DIRECCIONANDO VALORES*/
gotoxy(30,15);cout<<PagDocProd;
gotoxy(30,17);cout<<PagDocProd;
gotoxy(30,19);cout<<Boni;
gotoxy(30,21);cout<<SueldoBruto;
gotoxy(55,15);cout<<SistSalud;
gotoxy(55,17);cout<<Impuesto;
gotoxy(55,19);cout<<AFP;
gotoxy(55,21);cout<<Total;
gotoxy(40,23);cout<<SueldoNeto;
gotoxy(20,25);cout<<"DESEA CONTINUAR [S/N] :";
opc=getch();
}
while(tolower(opc)!='n');
}
/*Determinar la suma de los n primeros terminos de la serie :
2 3 4

1 X x x x
2! 3! 4!
Definir Objetos_Datos de entrada y salida
Objeto_datos de Entrada: Num Termninos:NumTerm
Valor de x (X)
Objeto_Dato de Salida : Suma de la Serie(Suma) */

#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<ctype.h>

main(){
double Suma =0,X, trmino;
short NumTerm,Cont;
char rp;
for(;;){clrscr();
cout<<"Ingrese el Numero de trminos: ";cin>>NumTerm;
cout<<"Ingrese el valor de X: ";cin>>X;
Cont=1; //Contador de Trminos
termino=1;//primer termino de la serie
//Acumular el valor de los Trminos de la serie
while(Cont<=NumTerm)
{
Suma+= termino;
termino*=(X/Cont);
Cont++;
}
cout<<"\nLa Suma de los "<<NumTerm<<"Primeros Trminos Es :"
<<setiosflags(ios::fixed|ios::showpoint)
<<setprecision(10)<<Suma<<endl
<<"Otra Suma [S][N]: ";
rp=toupper(getch());
if(rp=='N')break;}

Aplicacin N6
/*Terna pitagorica entre los lados a , b y c
por ejemplo 3^2+4^=5^2
para valores de a y b <=25*/ A=3 B= 4 y C= 5
#include<iostream.h> A=5 B= 12 y C= 13
#include<math.h> A=6 B= 8 y C= 10
#include"conio.h" A=7 B= 24 y C= 25
main(){ A=8 B= 15 y C= 17
int A,B; A=9 B= 12 y C= 15
long C; A=10 B= 24 y C=
for(A=1;A<=25;A++) 26
for(B=A;B<=25;B++) A=12 B= 16 y C=
{ 20
C=floor(sqrt(A*A+B*B)); A=15 B= 20 y C=
if(C*C==(A*A+B*B)) 25
cout<<"A="<<A<<' '<<"B= "<<B<<' '<<" y C= "<<C<<endl;} A=18 B= 24 y C=
getch(); 30
} A=20 B= 21 y C=
29
Aplicacin N7
/*Programa que invierte una cantidad numerica */
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
main(){
long n;
int digito;
long invertido=0;
cout<<"Ingrese un Nmero de varias cifras:";
cin>>n;
do
{
digito = n % 10;
invertido =invertido*10 +digito;
n = n / 10;
}while (n>0);
cout<<"El Numero Invertido Es:"<<setw(8)<<invertido;
getch();
}
aplicacin N8
/*Programa que Imprime los Factores de un Numero Entero *
Definir Objetos Datos
Objetos Datos de Entrada :Numero (n)
:Numero (num)
Objeto Dato de Salida :Factores de un Numero (fact) */
#include<conio.h>
#include<iostream.h>
#include<ctype.h>
#include<iomanip.h>
main(){

unsigned int n,fact,num;


char opc;
do{clrscr();
gotoxy(5,5);cout<<"CALCULA LOS FACTORES DE UN NUMERO"<<endl;
gotoxy(5,6);cout<<"=========================="<<endl;
gotoxy(5,7);cout<<"Ingrese un Numero :";
cin>>n;
cout<<"Los factores de "<<n<<" Son: ";
fact=2;num=n;
do {
if(n%fact==0)
{if(num==fact)
{clrscr();
cout<<"El Numero es Primo :"<<num;
n=1; }
else
{ cout<<setw(6)<<fact;
n=n/fact; }
}
else
{ fact=fact+1; }
}
while(n !=1);
cout<<"\n Desea Otra Generacion [S][N] :?";
opc=toupper(getch());
}while(opc==' S');}

LABORATORIO N3

Aplicacin N1
/*Un Programa simple sobre funciones */
#include<iostream.h>
#include<iomanip.h>
#include<math.h>
void circulo(float radio,double &Ar);
float r;
double Ar;
main(){
cout<<setiosflags(ios::fixed|ios::showpoint)<<setprecision(3);
circulo(r,Ar);
getch();
}
void circulo(float R,double &Ar)
{ cout<<"Ingrese el Valor del radio: ";
cin>>r;
Ar=M_PI*pow(r,2);
cout<<"El Aea del Circulo es : "<<Ar;
}

Aplicacin N2
/* Area del Circulo y la Longitud de la Circunferencia */
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>
#include<iomanip.h>

void circulo();
void circunferencia();
double radio;
main(){char rp;
for(;;){clrscr();
cout<<"Ingrese el valor del Radio: ";cin>>radio;
cout<<setiosflags(ios::fixed|ios::showpoint)<<setprecision(3);
circulo();
circunferencia();
cout<<"\nOtro Calculo [S][N]; ";
rp=toupper(getch());
if(rp=='N')
break;}
getch();
}

void circulo()
{double c;
c=M_PI*(pow(radio,2));
cout<<"\n(*)El Area del Circulo es = "<<c;
}
void circunferencia()
{double d;
d=2*(M_PI)*radio;
cout<<"\n(*)La Longitud de la Circunferencia es=\a"<<d;}

Aplicacin N3
/* Programa que hace Uso de funciones que no es void para Realizar calculos */
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>
#include<iomanip.h>

long SumaEnteros(long N);


float Mayorde5(float A,float B,float C,float D,float E);
main(){
long Numero;
long Suma;
float A,B,C,D,E;
float maximo;
clrscr();
cout<<" a)Suma de los primeros Numeros Enteros"<<endl;
cout<<"Ingrese Un Numero entero :";cin>>Numero;
Suma=SumaEnteros(Numero);
cout<<" La Suma de los "<<Numero
<<" primeros Numeros Enteros es :"<<"**"<<Suma<<"**"<<endl
<<endl;
cout<<"b)Calcula el Mayor de 5 Numeros"<<endl;
cout<<"Ingrese Los valores A,B,C,D,E :"<<endl;cin>>A>>B>>C>>D>>E;
maximo=Mayorde5(A,B,C,D,E);
cout<<"El mayor de :"<<setw(5)<<A<<setw(5)<<B<<setw(5)<<C<<setw(5)<<D
<<setw(5)<<"y "<<E <<" es : "<<setw(2)<<maximo<<endl;
getch();}
long SumaEnteros(long N)
{ long suma;
suma=N*(N+1)/2;
return(suma);
}
float Mayorde5(float P1,float P2,float P3,float P4,float P5)
{ float max,ANITA;
max=P1;
if( max<P2)
max=P2;
if (max<P3 )
max=P3;
if( max<P4)
max=P4;
if (max<P5)
max=P5;
ANITA=max;
return(ANITA);
}

Aplicacin N4
#include<iostream.h>
#include<conio.h>
#include<math.h> //pongo math.h por que estoy utilizando la funcion pow();
void calcular(int n); //prototipo de la funcion calcular
main() //main es la funcion principal
{int ter;
gotoxy(17,2);cout<<"PROGRAMA QUE CALCULA EL TERMINO N \n";
gotoxy(16,3);cout<<"Y LA SUMA DE LOS N PRIMEROS TERMINOS\n";
gotoxy(15,4);cout<<"DE LA SERIE 3/5 - 5/8 + 8/13 - 13/21 + ...\n\n";
cout<<"Cuantos terminos quiere tener(N) : ";cin>>ter;cout<<endl<<endl;
calcular(ter); //aqui llamo a la funcion calcular
getch();
}
void calcular(int n) //definicion de la funcion calcular
{int p=3,q=5;
float s=(3.0/5);
if(n>1)
{ for(int i=2;i<=n;i++)
{q=(p+q);
p=(q-p);
s=s+p*pow(-1,i+1)/q*1.0;
}
}
cout<<"El termino N es : "<<p*pow(-1,n+1)<<"/"<<q<<endl<<endl;
cout<<"La suma de los N primeros terminos es : "<<s;
}

Aplicacin 5
/*Programa que Genera el codigo Ascci */
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
main(){
int x;
char ca;

for(x=32;x<=255;++x)
{
ca =x;
cout<<x<<"=>"<<ca<<"\t";}
getch();
}

aplicacin 6
//Programa que convierte coordenadas polares a rectangulares
#include<iostream.h>
#include <math.h>
#include <conio.h>
void polar(float x,float y, float&r,double &theta);
void obtrec(float &x,float &y);
void mostrar(float,double);

main(){
float distancia;
double angulo;
float x,y;
obtrec(x,y);
polar(x,y,distancia,angulo);
mostrar(distancia,angulo);

getch();}

void polar(float x,float y, float&r,double &theta)


{
const double A_Grados=M_PI/180.0;
r=sqrt(x*x+y*y);
theta=atan(y/x)*(1.0/A_Grados);

void obtrec(float &x,float &y){


cout<<"Programa de conversion de Coordenada "
<<"Rectangulares a polares \n"<<endl;
cout<<"introduzca la Coordenad X: ";cin>>x;
cout<<"introduzca la Coordenad Y: ";cin>>y;
}

void mostrar(float radio,double angulo){


cout<<"\nLas Coordenadas polares son : "<<endl;
cout<<"Distancia desde el origen : "<<radio<<endl;
cout<<"Angulo (en grados) respecto al eje x = "<<angulo<<endl;
}

Recursividad :
Aplicacin N1
/*Programa Hanoi, recurre a la funcion torres(), para encontrar la solucion
al juego.Acontinuacion se presenta para n=??*/
#include<iostream.h>
#include<conio.h>
#include<ctype.h>

void torres(int n,char start,char aux,char end);

main(){ int n;
char opc;
for(;;){clrscr();
char a='A',b='B',c='C';
cout<<"Ingrese El Numero de discos: ";cin>>n;
cout<<"\n Solucion de las torres de Hanoi : ";
torres(n,a,b,c);
cout<<"\nOtra Generacion[S][N]: ";
opc=toupper(getch());
if(opc=='N')break;}
getch();
} Ingrese El Numero de discos: 3

void torres(int n,char start,char aux,char end) Solucion de las torres de


{ if(n==1) Hanoi :
cout<<"\n Mover de "<<start<<" a "<<end; Mover de A a C
else{ Mover de A a B
Mover de C a B
torres(n-1,start,end,aux);
Mover de A a C
cout<<"\nMover de "<<start<<" a "<<end; Mover de B a A
torres(n-1,aux,start,end); Mover de B a C
Mover de A a C
Otra Generacion[S][N]:
}
}

Aplicacin N2
/* Calcula la Serie Fibonacci */
#include<iostream.h> Ingrese el Numero n: 21
#include<conio.h>
#include<ctype.h> El Termino 21 Corresponde
al Numero de Fibonacci :
long double fib(int n); 10946
long double fibo(int n); Otro Tremino [S][N]:
long n;
main(){
char opc;for(;;) { clrscr();
cout<<"Ingrese el Numero n: ";cin>>n;
cout<<"\nEl Termino "<<n<<" Corresponde al Numero de Fibonacci : "
<<fib(n);
cout<<"\nOtro Tremino [S][N]: ";
opc=toupper(getch());
if(opc=='N')break;}
getch();
}

/* long double fibo(int n){ //Modo Interactivo


int x=1,y=0;
if(n==0)
return 0;
else if(n==1)
return 1;
else{
while(n-->1) //(n=n-1)>1
{
x+=y;
y=x-y;
}
return x;
}
}*/
long double fib(int n) //Modo Recursivo
{
if((n==0)||(n==1))
return n;
else
return(fib(n-1)+fib(n-2));
}

LABORATORIO N4

Aplicacin N1
//Programa sobre vectores visualiza los valores ingresados y luego los ordena
#include<iostream.h>
#include<conio.h>
main(){
int aux,i,fc,n;
int a[20];
cout<<"Ingrese el Numero de elementos n= ";
cin>>n;
for(i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";
cin>>a[i];
}
clrscr();
for(i=1;i<=n;i++)
{cout<<"a["<<i<<"]="<<a[i]<<endl; }
getch();

do{ fc=0;
for(i=1;i<=n;i++)
if (a[i]>a[i+1])
{aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
fc=1; } }while(fc!=0);
clrscr();
for(i=1;i<=n;i++)
{cout<<"a["<<i<<"]="<<a[i]<<endl; }
getch(); }

2.- /*Exploracion de un array SECUENCIAL consiste en ir comparando todos


los elementos con el elemento buscado hasta encontaralo */
#include<iostream.h>
#include<conio.h>
#include<math.h>
main(){ int array[10];
short Tam;
cout<<"Introducir el Tamannio del Vector :\a";cin>>Tam;
for(int x=0;x<Tam;x++){
cout<<"Introducir el Numero "<<x+1<<" :";
cin>>array[x];
}
int num;
cout<<"\n\n";
cout<<"Introducir el Numero a buscar: ";
cin>>num;
cout<<"\n\n";
int sw=0;
for(int x=0;x<10;x++){
if(array[x]==num){
cout<<"El Numero "<<array[x]<<" esta en la Posicion "<<x+1;
sw=1;
break; }
}
if(sw==0)cout<<"Ese Numero no esta en el vector";
getch();
}

3.- /* Encontrar el mayor y menor valor en un arreglo de 23 Numeros


determinando a demas el primer indice al que corredponden.Darle
valores aleatorios entre 0 y 666,mostrando el contenido del
arreglo y los resultados requeridos
Objetos_Datos a Usar
Objeto_Datos de entrada : No
Objeto_datos Salida :Menor Valor
:Mayor Vaor
:Indice del menor Valor
:Indice del mayor Valor*/
#include<conio.h>
#include<iostream.h>
#include<ctype.h>
#include<stdlib.h>
#include<iomanip.h>
#define NumElem 23
#define Vmax 666
main(){
unsigned int A[NumElem];
unsigned int mayor,menor;
short indMay,indMen,ind,par=0,impar=0;
char opc;
do{clrscr(); randomize();
for(ind=0;ind<NumElem;ind++)
A[ind]=random(Vmax+1);
mayor =0; //artificio "falso supuesto"
menor =Vmax; //artificio "falso supuesto"
for(ind=0;ind<NumElem;ind++) {
if(A[ind]>mayor)
{ mayor=A[ind];
indMay=ind; }

if(A[ind]<menor)
{ menor=A[ind];
indMen=ind; }
}
clrscr();
for(ind=0;ind<NumElem;ind++) // los pares e impares

if(A[ind]%2==0){
par =par+1;}
else{
impar=impar+1;}
cout<<setw(40)<<"Arreglo Generado"<<endl;
for(ind=0;ind<NumElem;ind++)
cout<<setw(10)<<ind<<")"
<<setw(6)<<A[ind]<<endl;

gotoxy(25,5);cout<<"Mayor Valor ="<<setw(3)<<mayor<<endl;


gotoxy(25,6);cout<<"Coresponde al Elemento Nro" <<setw(3)<<indMay;
gotoxy(25,7);cout<<"Menor Valor es ="<<setw(3)<<menor;
gotoxy(25,8);cout<<"Corresponde al Elemento Nro"<<setw(3)<< indMen;
gotoxy(25,10);cout<<"Cantidad de Pares ="<<par;
gotoxy(25,11);cout<<"Cantidad de Impares ="<<impar;
gotoxy(25,13);cout<<"Desea Otra Generacion[S][N]:?"<<endl;
opc=toupper(getch());
}while(opc=='S');
}

4.-/*Formar un arreglo con los N primeros numeros primos y mostar los resultados
en forma de tabla.Validar que N este entre 1 y 100;*/
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<stdlib.h>
#define Maxi 100 //tamanhio del vector
main(){
unsigned //enteros positivos
Primos[Maxi],
ContPrimos,ContDivi,Numero,NumNatural,
NumPrimos;
ContPrimos=0;//contador de Numeros primos
NumNatural=2;//numero natural inicial
Primos[0]=1;//primer numero primo
do{ system("cls");
cout<<"Cantidad de Numeros Primos :";
cin>>NumPrimos;
}while(NumPrimos<1||NumPrimos>Maxi);
do{ ContDivi=0;
for(Numero =1;Numero<=NumNatural;Numero++)
if(NumNatural%Numero==0)
ContDivi++;
if(ContDivi==2) //es primo
{ContPrimos++;//contador de primos
Primos[ContPrimos]=NumNatural;}
NumNatural++;

}while(ContPrimos!=NumPrimos);
//mostrar tabla de resultados
cout<<setw(25)<<"Numero Natural N-->"<<setw(27)<<"Primo[N] "<<endl;
for(Numero=0;Numero<NumPrimos;Numero++)
cout<<setw(20)<<Numero+1
<<setw(30)<<(Primos[Numero])<<endl;
getch();}

4.- /* Programa que muestra,la siguiente tabla


PROVEEDOR PRECIO UNITARIO CANTIDAD TOTAL
proveedor1 12 10 120.00
proveedor2 10 5 50.00
proveedor3 20 7 140.00
Se tiene una tienda con N proveedores , que tienen productos
con un precio Unitario para cada producto. */

#include<iostream.h>
#include<conio.h>
#include "ctype.h"
#include "iomanip.h"
main(){
char proved[10][16];
int i,cantidad[10],n;
float precio[10],Total[10],t=0;
char opc;
for(;;){clrscr();
gotoxy(2,5);cout<<"Ingrese N de PROVEEDORES: ";cin>>n;
for (i=0;i<n;i++) {
cout<<"Proveedor: ";
cin>>proved[i];
cout<<"Cantidad :";cin>>cantidad[i];
cout<<"Precio Unitario:";cin>>precio[i];}
for (i=0;i<n;i++){
Total[i]=cantidad[i]*precio[i];
t=t+Total[i];
} clrscr();
gotoxy(18,6);cout<<"Proveedores con Cantidad de Productos y su Costo Total ";
gotoxy(18,7);cout<<"***************************************** ";
gotoxy(2,8);cout<<setw(25)<<"Proveedor"<<setw(12)
<<" Precio Unitario "<<setw(12)<<"Cantidad"
<<setw(10)<<" Total"<<endl;
for(i=0;i<n;i++)
cout<<setw(10)<<"["<<i<<"]"<<setw(10)<<proved[i]<<setw(14)
<<precio[i]<<setw(14)<<cantidad[i]
<<setw(14)<<Total[i]<<"\n";
cout<<"Otro Reporte: [S][N]: ";
opc=toupper(getch());
if(opc=='N')break;}
getch();
}

5.- /* Programa que realiza una suma de un vector y otro vector */


#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<ctype.h>

main(){
int i,j,n,suma1=0,suma2=0,
sumafin=0,media,nota_1[20],nota_2[20];
do{ gotoxy(2,2);clreol();
cout<<"Total de Notas <2,30> :";
cin>>n;
}while(n<2 && n<20);
for(i=0;i<n;i++){
gotoxy(2,4);clreol();
cout<<"Ingrese notas_1 :";
cin>>nota_1[i];
}
for(j=0;j<n;j++){
gotoxy(2,6);clreol();
cout<<"Ingrese notas_2 :";
cin>>nota_2[j];
}

gotoxy(2,8);cout<<"Notas_1 ={ ";
for(i=0;i<n;i++)
cout<<setw(6)<<nota_1[i];
cout<<"}";
gotoxy(2,10);cout<<"Notas_2 ={ ";
for(j=0;j<n;j++)
cout<<setw(6)<<nota_2[j];
cout<<"}";
for(i=0;i<n;i++)
suma1=(suma1+nota_1[i]);
for(j=0;j<n;j++)
suma2 =(suma2 + nota_2[j]);
sumafin= (suma1 +suma2);
gotoxy(2,12);cout<<"La suma es :";
cout<<setw(6)<<sumafin;
getch();
}
6.- /*Colaboracin del Ing. Carlos Rafo.Las cadenas de caracteres,tienen las siguientes
operaciones longitud,
concatenacion,subcadenas e indexacion;en el programa siguiente efecta llamada
a la funcion mid(),con el fin de encontrar una subcadena de k caracteres,a
partir del elemento m */
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#define N 80
void put_cadena(char nombre[]);
void mid(char y[],char x[],int m,int k);
main(){
char x[N];
char nombre[N];//="Hola c Plus Plus";
clrscr();
cout<<"Ingrese Una cadena ";
cin.getline(nombre,N);
cout<<"\nLa Cadena es ";
put_cadena(nombre);
mid(nombre,x,5,6);
put_cadena(x);
getch();
}

void put_cadena(char nombre[])


{
register int i;
for(i=0;i<nombre[i];i++)
putchar(nombre[i]);
}

void mid(char y[],char x[],int m,int k)


{
register int i=0;
while(i<k && y [i+m])
x[i++]=y[i+m];
x[i]='\0';
}

7.-//Una Matiz que se genera aleatoriamente y dice que elemento es el mayor .*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void leer();
void muestra();
int mayorm();
int menorm();
int mam,mem;
int ima,jma,ime,jme;
int W[15][15];
int q;

main(){
char r;
cout<<"desea generar una matriz Respond S :";
cin>>r;
if(r=='S')
{
cout<<"\nDe que orden\n";
cin>>q;
if(q>2&&q<16)
leer();
else
{cout<<"el numero esta fuera del rango\n";
getch();
exit(0);
}
}
else
exit(0);
cout<<"\nla matriz es\n";
muestra();
cout<<"\nel mayor elemento es "<<mayorm();
cout<<"\nsu posicion es "<<(ima+1)<<","<<(jma+1)<<"Col";
cout<<"\nel menor elemento es "<<menorm();
cout<<"\nsu posicion es "<<(ime+1)<<","<<(jme+1)<<"Col";
getch();
}

void leer()
{
randomize();
int i,j;
for(i=0;i<q;i++)
for(j=0;j<q;j++)
W[i][j]=(random(65)+5);
}

void muestra()
{
int i,j;
for(i=0;i<q;i++)
{
for(j=0;j<q;j++)
{cout<<"\t"<<W[i][j];}
cout<<"\n";}
getch();
}

int mayorm()
{int i,j;
mam=0;
for(i=0;i<q;i++)
for(j=0;j<q;j++)
if(W[i][j]>mam)
{mam=W[i][j];
ima=i;
jma=j;
}
return(mam);
}

int menorm()
{
int i,j;
mem=70;
for(i=0;i<q;i++)
for(j=0;j<q;j++)
if(W[i][j]<mem)
{mem=W[i][j];
ime=i;
jme=j;
}
return(mem);
}

8.-/* Programa que multiplica una constante a una matriz */


#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include"iomanip.h"
#include "ctype.h"
#define max 6
void imprime(int m[max][max])
{ for (int i=0;i<max;i++)
{for (int j=0;j<max;j++)
cout<<setw(4)<<m[i][j]; // <<" ";
cout <<"\n"; }
}
main(){
int i,j,m[max][max],VM=43,Vm=1;
int constante;char opc;
for(;;){ clrscr();
randomize();
for (i=0;i<max;i++)
for (j=0;j<max;j++)
m[i][j]=random(VM-Vm+1)+Vm;
cout << "MATRIZ\n";
imprime (m);
cout <<"Ingrese Constante a Multiplicar : ";
cin >> constante;
cout << "\n\nMATRIZ MULTIPLICADA\n";
for (i=0;i<max;i++)
for (j=0;j<max;j++)
m[i][j]=m[i][j]*constante;
imprime(m);
cout<<"Otra Matriz [S][N]:";
opc=toupper(getch());
if(opc=='N')break;} }

LABORATORIO N5

/*ARREGLO de REGISTROS , declarando como: registro Notas[N]


que indica una variable indexada del tipo structura
Considere el Arreglo NOTAS como una lista compuesta
de los Alumnos y las notas viene dada por
notas[i].p1,notas[i].p2,etc. */
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<string.h>
#define N 30

struct Alumno{
char codigo [10];
char nombres[30];
char apellidos[30];

};
struct Rendimiento{
Alumno ficha;
int p1,p2,p3,p4,pp;
}Notas[N];

main() {
int m;
register int i;
float s=0,S=0,promedio,pp;

/*Ingrese de Datos */
clrscr();
cout<<"\nIngrese Nmeros de Alumnos a Procesar =>";
cin>> m;
for(i=0;i<m;i++) {
cout<<"\n Ingrese Codigo : ";
gets(Notas[i].ficha.codigo);
cout<<"\n Ingrese Nombres =>";
gets(Notas[i].ficha.nombres);
cout<<"\n Ingrese Apellidos =>";
gets(Notas[i].ficha.apellidos);
cout<<"\n Ingrese La Notas =>"<<endl;
cout<<"Ingrese Nota1: ";
cin>>Notas[i].p1;
cout<<"Ingrese Nota2: ";
cin>>Notas[i].p2;
cout<<"Ingrese Nota3: ";
cin>>Notas[i].p3;
cout<<"Ingrese Nota4: ";
cin>>Notas[i].p4; }
for(i=0;i<m;i++){
S+=(Notas[i].p1+Notas[i].p2+Notas[i].p3+Notas[i].p4);
pp=S/4.0;
cout<<"\nEl Promedio de las Notas de:"
<<Notas[i].ficha.nombres<<" es: "<<pp<<endl;
S=0;
Notas[i].pp=pp;}
if(m>1){

for(i=0;i<m;i++)
s+=(Notas[i].pp); //1+Notas[i].p2+Notas[i].p3+Notas[i].p4);
promedio =s/(float)m;
cout<<"Promedio de las notas de los "
<<m<<" Alumnos es: "<<promedio<<endl;}
else
cout<<"\n NO hay mas alumnos que procesar: ";
getch(); }

aplicacin N2
/* Programa que calcula el Area de un Trapecio usando struct y funciones*/
#include<iostream.h>
#include<conio.h>
#include<ctype.h>

struct Trapecio{
int base,Base,altura;
void leer(int &b,int &B,int &h)
{base=b;Base=B;altura=h;
}

int calcular_Area()
{int Atrape;
Atrape=(base+Base)*altura/2;
return(Atrape);
}
};
main() {
int x,y,z;
char Rp;
for(;;){ clrscr();
Trapecio figura;
cout<<" Ingrese La base Menor del Trapecio = "; cin>>x;
cout<<" Ingrese La Base Mayor del Trapecio = "; cin>>y;
cout<<" Ingrese la Altura del Trapecio = "; cin>>z;
figura.leer(x,y,z);
cout<< " El Area del Trapecio es = "<<figura.calcular_Area()
<<" Unidades cuadradas "<<endl
<<"Pruebe con Otros Valores [S][N]";
Rp=toupper(getch());
if(Rp=='N')
break; }
}

Aplicacin N3

/*El siguiente programa resuelve el modulo de valores complejos haciendo uso de punteros */
#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<ctype.h>
struct complejo {
double x,y;
};

double comp_abs(complejo *z)


/* { double c;
c=sqrt((*z).x*(*z).x+(*z).y*(*z).y);
return c;
}*/ //Otra forma de usar punteros con estructuras

{double c;
c=sqrt((z->x*z->x) +(z->y*z->y));
return (c);
}
float x,y;
main() {
char rp;
for(;;){clrscr();
cout<<"Ingrese el valor de x :";cin>>x;
cout<<"Ingrese el valor de y :";cin>>y;
complejo a={x,y};
cout<<"El Modulo Calculado es :"<<comp_abs(&a)
<<"\n Otro Calculo [S][N] :";
rp=toupper(getch());
if(rp=='N')break;}

Aplicacin N4
/*problema contiene la definicion de clases y los conceptos de privado y
publico.Este programa utiliza una clase para obtener valores
trigonometricos para un angulo cualquiera
*/
#include<iostream.h>
#include<math.h>
#include<ctype.h>
#include<conio.h>
const double G_A_RAD= (M_PI)/180;

class grado{
double valor_dato;

public:
void establecer_valor(double);
double obtener_seno(void);
double obtener_coseno(void);
double obtener_tangente(void);
double obtener_secante(void);
double obtener_cosecante(void);
double obtener_cotangente(void);
} grad;

void grado:: establecer_valor(double ang)


{ valor_dato=ang; }
double grado::obtener_seno(void)
{ double respuesta;
respuesta =sin(G_A_RAD*valor_dato);
return respuesta;}
double grado::obtener_coseno(void)
{
double respuesta;
respuesta =cos(G_A_RAD*valor_dato);
return respuesta;
}
double grado::obtener_tangente(void)
{
double respuesta;
respuesta =tan(G_A_RAD*valor_dato);
return respuesta;
}
double grado::obtener_secante(void)
{
double respuesta;
respuesta =1.0/sin(G_A_RAD*valor_dato);
return respuesta;
}
double grado::obtener_cosecante(void)
{
double respuesta;
respuesta =1.0/cos(G_A_RAD*valor_dato);
return respuesta;
}
double grado::obtener_cotangente(void)
{
double respuesta ;
respuesta =1.0/tan(G_A_RAD*valor_dato);
return respuesta;
}
int main(void)
{
float angulo;
char Rp;
for(;;) {clrscr();
gotoxy(5,4);cout<<"Ingrese un Angulo Cualquiera : ";cin>>angulo;
grad.establecer_valor(angulo);
gotoxy(5,6);cout<<"* El Seno del angulo de "<<angulo<<" es :"
<<grad.obtener_seno()<<endl;
gotoxy(5,8);cout<<"* El Coseno del angulo es :"
<<grad.obtener_coseno()<<endl;
gotoxy(5,10);cout<<"* La Tangente del angulo es :"
<<grad.obtener_tangente()<<endl;
gotoxy(5,12);cout<<"* La Secante del angulo es :"
<<grad.obtener_secante()<<endl;
gotoxy(5,14);cout<<"* La Cosecante del angulo es :"
<<grad.obtener_cosecante()<<endl;
gotoxy(5,16);cout<<"* La CoTangente del angulo es :"
<<grad.obtener_cotangente()<<endl;
gotoxy(5,20);cout<<"Pruebe con Otro angulo [S][N]: ";
Rp=toupper(getch());
if(Rp=='N')
break; }
getch();//
}

Aplicacin N5

/*Programa que calcula la Resultante de 02 fuerzas aplicadas a un punto


y forman un angulo determinado */
#include<iostream.h>
#include<math.h>
#include<ctype.h>
#include<conio.h>
#define A (M_PI)/180
class Fuerzas
{ private:
float F1,F2,a,b,angulo;
public:
void establecer_valor(float a,float b)
{ F1=a,F2=b;}
double obtener_Angulo(float angulo)
{double Ang;
Ang=A*angulo;
return(Ang);}
double obtener_Resultante(void)
{
double R,Ang;
Ang=A*angulo;
R=sqrt(pow(F1,2)+pow(F2,2)+2*F1*F2*cos(Ang));
return(R);}
} matemat;

main() //Programa Principal


{ float valor1;float valor2,opc,angulo;
for(;;){ clrscr();
cout<<"Ingrese Fuerza F1: ";cin>>valor1;
cout<<"Ingrese Fuerza F2: ";cin>>valor2;
matemat.establecer_valor(valor1,valor2);
cout<<"Ingrese el Angulo que forman Las Fuerzas: ";
cin>>angulo;
cout<<"El Angulo en Radianes es :";
cout<<matemat.obtener_Angulo(angulo);
cout<<" \nLa Resultante de las fuerzas es : ";
cout<<matemat.obtener_Resultante()<<endl;
cout<<"Otras Fuerzas [S][N]: ";
opc=toupper(getch());
if(opc=='N')
break;}
}

Aplicacin N6
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>

class Fecha
{
private:
int mes;
int dia;
int anyo;
public :
Fecha(int =7,int=4,int =2001);//constructor
void estfecha(int,int,int);//una funcion miembro para copiar una fecha
void mostrarfecha(void);//una funcion miembro para desplegar una fecha
};

Fecha::Fecha(int mm,int dd,int aaaa)


{
mes=mm;
dia=dd;
anyo=aaaa;
}
void Fecha::estfecha(int mm,int dd,int aaaa)
{ mes=mm;
dia=dd;
anyo=aaaa;
//return ;
}

void Fecha::mostrarfecha(void)
{
cout<<"La fecha es ";
cout<<setfill('0')
<<setw(2)<<mes<<'/'
<<setw(2)<<dia<<'/'
<<setw(2)<<anho %100;//extrae los ultimos dos digitos
cout<<endl;
//return;
}
main(){
Fecha a,b,c(4,1,1998);//declara 3 digitos, inicializa 1 de ellos
b.estfecha(12,25,2002);//asigna los valores a los miembros de datos dde b
a.mostrarfecha();//desplegar los valores del objeto a
b.mostrarfecha();//desplegar los valores del objeto b
c.mostrarfecha();//desplegar los valores del objeto c
getch();}

La fecha es 07/04/01
La fecha es 12/25/02
La fecha es 04/01/98
TEMA: ASIGNACION DINAMICA DE MEMORIA
Aplicacin N1
/*asignacion dinamica consiste en reservar una serie de pocisiones de memoria
durante la ejcucion del programa.Para hacer la signacion dinamica se utilizan
los operadores :
new ->permite reservar memoria(equivale a la funcion malloc de c ....
delete -> restaura la memoria */
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<iomanip.h>

int main(){
int *array,a,n;
clrscr(); Ingrese el Primer Vector
cout<<"Introduce la Dimension del array "; Tamao del Vector 2
cin>>n;
array=new int[n]; Ingresar Valores del
if(n==0){cout<<"No hay suficiente memoria "; Vector
exit(1); 14
} 15
for(int x=0;x<n;x++){
cout<<"Introduce el valor "<<x<<":"; Ingrese el Segundo
cin>>array[x];} Vector
cout<<"\nLos valores Introducidos son: "; Tamao del Vector 2
for(int x=0;x<n;x++) {
cout<<"\nValor "<<x<<setw(3)<<array[x];} Ingresar Valores del
delete []array; Vector
getch(); } 17
18

Aplicacin N2
//Programa que suma vectores con tamanios dinamicos SUMA DE VECTORES
#include <iostream.h> 31 33
#include <conio.h>
struct vector { float *vect;
int tama;
};
int sumavectores(struct vector &r, struct vector &a, struct vector &b);
void ingresavector(struct vector &v);

main() {
struct vector r,a,b;
int i,error;
cout<<"\Ingrese el Primer Vector";
ingresavector(a);
cout<<"\Ingrese el Segundo Vector";
ingresavector(b);
error=sumavectores(r,a,b);
if(!error)
{cout<<"\n SUMA DE VECTORES "<<endl;
for(i=0;i<=(r.tama-1);i++)
cout<<r.vect[i] <<' ';
}
delete a.vect;
delete b.vect;
if(!error)
delete r.vect;
getch(); }
int sumavectores(struct vector &r,struct vector &a,struct vector &b) {
int error,i;
error=0;
if(a.tama==b.tama){
r.vect=new float[a.tama];
r.tama=a.tama;
for(i=0;i<=(r.tama-1);i++)
{ r.vect[i]=a.vect[i]+b.vect[i];}
}
else {
error =1;
cout<<"\nError: Los tamannios de los vectores deben ser iguales "; }
return error;
}
void ingresavector(struct vector &v) {
int tama,i;
cout<<"\nTamao del Vector ";
cin>>tama;
v.vect=new float[tama];
v.tama=tama;
cout<<"\nIngresar Valores del Vector "<<endl;
for(i=0;i<=(v.tama-1);i++)
cin>>v.vect[i];cout<<endl; }

Aplicacin N3
//Calificaciones
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
main(){
float numcalif;
short i;
cout<<"Introduzca el Numero de calificaciones a procesar ";
cin>>numcalif;
float *calif=new float[numcalif]; // se crea el arreglo
float S=0.0,Promedio;
for(i=0;i<numcalif;i++)
{ cout<<"Introduzca una Calificacion ";
cout<<i<<" : ";cin>>calif[i]; }
cout<<"\nSe creo un arreglo para "<<numcalif<<" Numeros Reales \n";
cout<<"Los valores almacenados en el arreglo son : ";
for(i=0;i<numcalif;i++)
cout<<"\n "<<i<<": Nota "<<calif[i];
cout<<endl;
cout<<"La Suma y Promedio de las Notas : ";
for(i=0;i<numcalif;i++)
S+=calif[i];
Promedio =S/numcalif;
cout<<"La Suma es "<<S<<" \nY el Promedio es "<<Promedio;
delete []calif; // devuelve el espacio de almacenaje al monton
getch();}

Introduzca el Numero de calificaciones a procesar 3


Introduzca una Calificacion 0 : 12
Introduzca una Calificacion 1 : 11
Introduzca una Calificacion 2 : 14

Se creo un arreglo para 3 Numeros Reales


Los valores almacenados en el arreglo son :
0: Nota 12
1: Nota 11
2: Nota 14
La Suma y Promedio de las Notas : La Suma es 37
Y el Promedio es 12.3333

MISCELNEA
Problemas propuestos en Practicas y examens tomados en la UNI

1. //Calcula el area de un triangulo; los lados son creados aleatoriamente


#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<ctype.h>
#include<math.h>
#include<stdlib.h>
main(){
float a,b,c,p;
double at,k;
char opc ;
do{system("cls");
randomize();
cout<<"ingrese los lados del triangulo aleatoriamente :";
a=rand()%100;
b=rand()%100;
c=rand()%100;
cout<<"\na = "<<a;
cout<<"\nb = "<<b;
cout<<"\nc = "<<c;
p=(a+b+c)/2;
k=(p*(p-a)*(p-b)*(p-c)) ;
if (k>0){
at=sqrt(k);
cout<<"\nEl Area Total es:"<<setiosflags(ios::fixed|ios::showpoint);
cout<<setprecision(2)<<at<<endl;}
else {
cout<<"\nLos lados nunca hacen un Triangulo"; }
cout<<"\nDesea Hacer otro Calculo[S][N]:?";
opc=toupper(getch());
}while(opc=='S');
}

2.- /*Programa que ordena en forma ascendente los elementos


de la diagonal principal de una matriz generando un vector con estos elementos
Definir Objetos Datos de Entrad y salida
Objeto_Dato de Entrada : n elementos a Ingresar
Objeto_Dato de Salida : Los elementos de la diagonal*/
#include <iostream.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <iomanip.h>
main(){
long max=43,min=1,i,j,n;
long k,temp;
double a[50][50],D[50];
cout<<"\nMatriz a Calcular en forma aleatoria: ";
cout<<"\nCuantos elementos se van ha ingresar : ";
cin>>n;
randomize();
cout<<"La Matriz Aleatoria es : "<<endl;
cout<<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{gotoxy(6*j,4+i);
a[i][j]=random((max-min+1)+min);}
}
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
{gotoxy(6*j,4+i);
cout<<a[i][j];}
}

for(k=n;k>=2;k--)
{ for(i=1;i<=k-1;i++)
{ if(a[k][k]<a[i][i])
{ temp=a[k][k];
a[k][k]=a[i][i];
a[i][i]=temp;}
}
}
gotoxy(7,10);cout<<"\nLa Matriz con la diagonal Ordenada es : "<<endl;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
{gotoxy(6*j,12+i);cout<<a[i][j];}
}
for(i=1;i<=n;i++)
D[i]=a[i][i];
cout<<"\nLa diagonal con los elementos es : D[i] :";
for(i=1;i<=n;i++)
cout<<setw(3)<<D[i];
getch();
}
3.- /*calcular la media,la varianza y desviacion standar ede n Valores (Mximo 37)
aplicando las formulas:
Media(X)=sigma desde i=1 hasta n (Xi)/n
Defina Ud los Objetos Datos */
#include"iostream.h"
#include"conio.h"
#include"iomanip.h"
#include"math.h"
#define Max 37
int main()
{ short N,i;
float suma,media,varianza,dstandar,X[Max];
clrscr();
do{cout<<"Ingresar numero de valores<1.."
<<Max<<">: ";
cin>>N;
cin.ignore();//ignora el enter
}while(N>Max);
for(i=1;i<=N;i++)
{cout<<"Ingresar valor ["
<<setw(2)<<i<<" ]:";
cin>>X[i];
cin.ignore();
}
//Hallar la media
suma =0.0;
for(i=1;i<=N;i++)
{suma+=X[i];
media=(float)suma/N;}
//Determinar la varianza y desviacion standar
suma=0;
for(i=1;i<=N;i++)
suma+=pow((X[i]-media),2);
varianza=(float)suma/N;
dstandar=pow(varianza,0.5);//raiz cuadrada
//Mostrar resultados
cout<<endl
<<setiosflags(ios::fixed|ios::showpoint);
cout<<"Media :"
<<setw(10)<<setprecision(3)<<media<<endl
<<"Varianza :"
<<setw(10)<<setprecision(3)<<varianza<<endl
<<"Desv.standar :"
<<setw(10)<<setprecision(3)<<dstandar<<endl
<<endl;
getch();}
4. Genere al azar nmeros comprendidos en el rango del 1 a 79 en un numero de 17 y
luego guardarlos en un Vector de la siguiente formula
1 / 3 n 3 n
79


1 2n 4 n 2
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
int i,n;
float A[50];
float leer(int n);
void show(float A[50]);

main( ){ randomize();
for (i=1;i<=17;i++){
n=random (79-1+1)+1; {
A[i]=leer(n); } }
cout<<"el vector es:";
show(A); }
float leer(int n){
return (pow(n,3)-n)/(3.0*(2*pow(n,4)-pow(n,2))); }
void show(float A[50]){
for (i=1;i<=17;i++){
cout<<A[i]<<" "; } }

5. /*PROGRAMA QUE CALCULA LA DIAGONAL SECUNDARIA DE UNA MATRIZ,


LA ORDENA Y CALCULA EL MCM DE SUS ELEMENTOS*/

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
void matriz(int a[20][20], int n){int i, j;
randomize();
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
a[i][j]=random(9-1)+1;}}}

void mostrar(int a[20][20], int n){ int i, j;


clrscr();
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
gotoxy(10+3*j,4+i);cout<<a[i][j];}
}cout<<endl;}

void sec_diag(int a[20][20], int diag2[20], int n){


int i, j=0;
for(i=n; i>=1; i--){ j++;
diag2[j]=a[i][j];}
cout<<"Diagonal sec: "<<endl;
for(i=1;i<=n;i++)
cout<<diag2[i]<<' ';
cout<<endl;
}

void ordenar(int diag2[20], int n) {int i, fc, aux;


do{ fc=0;
for(i=1; i<n; i++)
if(diag2[i]>diag2[i+1])
{
aux =diag2[i];
diag2[i] =diag2[i+1];
diag2[i+1]= aux;
fc=1;
}
}while(fc==1);
cout<<endl<<"Ordenando: "<<endl;
for(i=1;i<=n;i++)
cout<<diag2[i]<<' '<<endl;}
int mcm(int diag2[20], int n){
int x=2, z, count=0, i, max, fc;
int div[60];
int result=1;
fc=diag2[n];
do{ do{ z=0;
for(i=1; i<=n; i++)
if ((diag2[i]%x)==0)
{ diag2[i]/=x;
z=1;}
if(z==1) {
count++;
div[count]=x;
}
} while(z==1);
max=1;
for(i=1;i<=n;i++)
max*=diag2[i];
x++;
}while((max!=1) && (x<=fc));
for(i=1;i<=count;i++)
result*=div[i];
return(result);}

main(){
int a[20][20], diag2[20];
int n=0;
do{cout<<"ingrese la dimension de la matriz: "; cin>>n;
}while(n<=0);
matriz(a,n);
mostrar(a,n);
sec_diag(a,diag2,n);
ordenar(diag2,n);
cout<<endl<<"Su m.c.m. es: "<<mcm(diag2,n)<<endl;
getch();}

6. /*MENU DE MATRIXES*/
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void crear(int matriz[20][20],int *n);
void central(int matriz[20][20],int aux[20],int n);
void ultima(int matriz[20][20],int aux[20],int n);
void mayor(int matriz[20][20],int aux[20],int n);
void menor(int matriz[20][20],int aux[20],int n);
void mostrar(int matriz[20][20],int n);
main(){
int matriz[20][20];
int aux[20];
int n;
char opc;
do{clrscr();
gotoxy(30,5); cout<<"MATRICES ALEATORIAS ";
gotoxy(30,6); cout<<"====================";
gotoxy(10,9); cout<<"1.- Crear";
gotoxy(10,10); cout<<"2.- Intercambiar la columna central con la fila central";
gotoxy(10,11); cout<<" de una matriz cuadrada";
gotoxy(10,12); cout<<"3.- Intercambiar la ultmima columna con la ultima fila";
gotoxy(10,13); cout<<"4.- Intercambiar la fila mayor con la diagonal
principal";
gotoxy(10,14); cout<<"5.- Intercambiar la columna menor con la diagonal
principal";
gotoxy(10,15); cout<<"6.- Salir";
gotoxy(30,20); cout<<"Ingrese opciones=>";
cin>>opc;
switch (opc){
case '1': crear(matriz,&n);break;
case '2': central(matriz,aux,n);break;
case '3': ultima(matriz,aux,n);break;
case '4': mayor(matriz,aux,n);break;
case '5': menor(matriz,aux,n);break;
}
}while(opc!='6');}
void crear(int matriz[20][20],int *n) {
int i, j;
do { clrscr();
gotoxy(5,2);
cout<<"Ingrese el orden de la matriz(impar): ";
cin>>*n;
} while ((*n<=0) || ((*n%2)==0));
randomize();
for(i=1;i<=*n;i++)
for(j=1;j<=*n;j++)
matriz[i][j]=random(9-1)+1;
mostrar(matriz,*n); }
void central(int matriz[20][20],int aux[20],int n) {
int mid, i;
mid=((n/2)+1);
clrscr();
for(i=1;i<=n;i++)
aux[i]=matriz[i][mid];
for(i=1;i<=n;i++)
if(i!=mid)
matriz[i][mid]=matriz[mid][i];
for(i=1;i<=n;i++)
matriz[mid][i]=aux[i];
mostrar(matriz,n); }
void ultima(int matriz[20][20],int aux[20],int n)
{ int i;
clrscr();
for(i=1;i<=n;i++){
if(i!=n){
aux[i]=matriz[i][n];
matriz[i][n]=matriz[n][i];
matriz[n][i]=aux[i];
}
}
mostrar(matriz,n);
}

void mayor(int matriz[20][20],int aux[20],int n)


{ int i, j, max=0, fmax=1, temp;
clrscr();
for(i=1;i<=n;i++)
max+=matriz[1][i];
for(i=2;i<=n;i++){temp=0;
for(j=1;j<=n;j++)
temp+=matriz[i][j];
if(temp>max)
{ max=temp;fmax=i;}}

for(i=1;i<=n;i++)
{
if(i!=fmax)
{ aux[i]=matriz[i][i];
matriz[i][i]=matriz[fmax][i];
matriz[fmax][i]=aux[i];}}
mostrar(matriz,n);}
void menor(int matriz[20][20],int aux[20],int n)
{ int i, j, min=0, cmin=1, temp;
clrscr();
for(i=1;i<=n;i++)
min+=matriz[i][1];
for(i=2;i<=n;i++)
{ temp=0;
for(j=1;j<=n;j++)
temp+=matriz[j][i];
if(temp<min)
{ min=temp; cmin=i; }
}
for(i=1;i<=n;i++)
{if(i!=cmin)
{ aux[i]=matriz[i][i];
matriz[i][i]=matriz[i][cmin];
matriz[i][cmin]=aux[i];}
}

mostrar(matriz,n);}
void mostrar(int matriz[20][20],int n){
int i, j;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<matriz[i][j]<<" ";
cout<<endl; }
getch(); }

7. //Programa que realiza operaciones con un polinomio


#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <ctype.h>
//prototipo de la funcion
double polinomio(int,int,double[]);

main() {
char tecla;
double variable;
int grado,i;
do {
clrscr();
cout << "P(n) = A(n)X^n+A(n-1)X^n-1+A(n-1)X^(n-2)+... +A(1)X^1+A(0)X^0\n\n";
cout << "Ingrese el grado del polinomio \"n\" = ";cin >> grado;
double* coeficiente = new double[grado+1]; /*definimos un vector a la medida donde se
almanenaran los coeficientes del polinomio*/
for(i=grado;i>=0;i--) {
cout << "Ingrese el coeficiente A("<< i << ") del polinomio : ";
cin >> coeficiente[i];
}
cout << "\nIngrese el valor de la variable X : ";cin >> variable;
cout << "\nEl resultado luego de evaluar el polinomio es : "
<< polinomio(variable,grado,coeficiente);
delete[] coeficiente; //borrando el vector dinamico
cout << "\nDesea continuar (S/N) : ";cin >> tecla;
} while(toupper(tecla) == 'S');
clrscr();
cout << "El programa ha finalizado";
getch();
}

double polinomio(int variable,int grado,double coeficiente[]) {


return poly(variable,grado,coeficiente);
}

8.- /*Programa que calcula la M_aritmatica, M_Geometrica, M_Armonica */


#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

double M_aritmetica(long A[], double &Ma);


double M_geometrica(long A[], double &Mg);
double M_armonica(long A[], double &Mh);

int i, k, N, M;
float Ma, Mg, Mh;

main(){

long A[100];
clrscr();
cout<<"Ingrese el numero de elementos del arreglo: ";cin>>N;
randomize();
cout<<"\nLa media aritmetica es: "<<M_aritmetica(A, Ma)
<<"\nLa media geometrica es: "<<M_geometrica(A, Mg)
<<"\nLa media armonica es: "<<M_armonica(A, Mh);

getch();}

double M_aritmetica(long A[], double &Ma){


double Mt=0;
for(i=1; i<=N; i++){
A[i]=rand()%100; cout<<' '<<A[i];}
for(i=1; i<=N; i++)
Mt=Mt+A[i];
double SU=Mt/N;
return(SU);}

double M_geometrica(long A[], double &Mg){


double prod=1.0;
for(i=1; i<=N; i++)
prod*=A[i];
double MG=pow(prod,(1.0/N));
return(MG);
}

double M_armonica(long A[], double &Mh){


double SI=0;
for(i=1; i<=N; i++)
SI = SI + 1.0/A[i];
double MH=N/SI;
return(MH);
}

8.- //ENCUENTRA EL MAYOR DE tres NUMEROS


#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<stdlib.h>
int min(int *a,int *b,int *c,int &mayor);
main(){

int x,y,z,M;
system("cls");
cout<<"INGRSE EL VALOR DE a:";cin>>x;
cout<<"INGRSE EL VALOR DE b:";cin>>y;
cout<<"INGRSE EL VALOR DE c:";cin>>z;
cout <<"el MAYOR de a="<<x<<" b="<<y<<"c="<<z<< "es "<<' '<<min(&x,&y,&z,M);
getch();
}

int min(int *p,int *q,int *w,int &M){


int m,may;
m=(*p>*q)? *p:*q;
may=(m>*w)? m:*w;
return(may);}

/*Programa que usa punteros a char, en este caso se trata de del conocido
programa del zodiaco, Colaboracin de Carlos Rafo */
#include<iostream.h>
#include<conio.h>
#define N 12
#include<stdlib.h>
#include<ctype.h>

char *nombre(int b);


int signo(int n,int m);
int meses[N]={31,28,31,30,31,30,31,31,30,31,30,31};

main(){
int dd,mm,b;char rp; for(;;){
system("cls");
do{
cout<<"Ingrese la Fecha de Nacimiento :"<<endl
<<"\n Dia ...";cin>>dd;
cout<<"\n Mes ...";cin>>mm;
}while(dd>meses[mm-1]);
b=signo(dd,mm);
cout<<"\nSu SIGNO es :"<<nombre(b);
cout<<endl
<<"Otro signo [S][N] :";
rp=toupper(getch());
if(rp=='N')break;}

int signo(int dd,int mm){


register int i;
int dias =0;
int j=0;
static int estrella[N]={20,50,79,110,140,171,201,
232,265,295,326,356};
for(i=0;i<mm-1;i++)
dias +=meses[i];
dias+=dd;
if(dias<=20 || dias>365)
return(j);
else{
j=1;
while(dias>estrella[j++]);
}
return(j-1);
}
char *nombre(int b){
static char *astro[ ]={"Capricornio","Acuario","Picis","Aries","Tauro","Geminis"
,"Cancer","Leo","Virgo","Libra","Escorpio","Sagitario"};
return(astro[b]);
}

9.- #include<iostream.h>
#include<conio.h>
#include"time.h"
#include"stdlib.h"

main(){
int lista[50];
int ind,n,dd;
system("cls");
cout<<"Ingrese el valor del Numero de Elementos : ";cin>>n;
cout<<"\nElementos Ingresados : "<<endl;
randomize();//permite la generacin de nuevos Numeros
for(ind=0;ind<n;ind++){
dd=rand()%80;
lista[ind]=dd;}

for(ind=0;ind<n;ind++)
cout<<"\n El elemento "<<ind<<" es : "<<*(lista+ind);
cout<<"\nLa direccin que apunta al vector lista[] :"<<&(lista);
getch(); }

/* Como puede apreciar para acceder a los elementos del array es:
*(lista+ind)
Esto deja constancia de que lista es la direccion de comienzo del array.
Si a esta direccin le sumamos 1,que quiere decir que si ind vale 1,
nos situamos en el siguiente entero de la lista, esto es
*(lista+1) y lista[1]representan el mismo valor. Notar que un incremento
de uno sobre una direccion equivale a vanzar no un byte, sino un numero
de bytes igual al tamanio de los objetos al que se esta tratando. entonces
es razonable pensar :
*(array+indice) o array[indice] es lo mismo
Puesto que *(lista+0) y lista[0], siendo "p" una variable de tipo puntero,
la asignacion: p=&lista[0] es la misma que la signacion p=lista.
Esto indica que la direccin de comienzo de un array es la misma que la
del primer elemento. Por otra parte, despus de haber efectuado la
asignacin p= lista, las siguientes expresiones dan lugar a idnticas
resultados:
p[ind],*(p+ind),lista[ind],*(lista+ind)
sin embargo , hay una diferencia entre el nombre de un array y un puntero.
el nombre de array es una constante y un puntero es una variable,
esto quiere decir que las operaciones:
lista=p 0 lista++ no son correctas
p=lista 0 p++ si son correctas */

10.-//Programa que permite hacer un mantenimiento de registros


#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
struct registro
{
int codigo;
char nombre[50];
char direcion[50];
};

void crear(registro a1[50],int *n);


void buscar(registro a2[50],int n);
void listar(registro a3[50],int n);
void ordenar(registro a4[50],int n);
void modificar(registro a5[50],int n);
void adicion(registro a6[50],int*n);
void eliminar(registro a7[50],int*n);
void main()
{char opc;
textbackground(15);
textcolor(2);
int m;
registro a[50];
do{
clrscr();
gotoxy(34,2);cout<<"menu";
gotoxy(28,6);cout<<"1.- Crear";
gotoxy(28,7);cout<<"2.- Buscar";
gotoxy(28,8);cout<<"3.- Listar";
gotoxy(28,9);cout<<"4.- ordenar";
gotoxy(28,10);cout<<"5.- Modificar";
gotoxy(28,11);cout<<"6.- Adicionar";
gotoxy(28,12);cout<<"7.-Eliminar";
gotoxy(28,13);cout<<"8.- Salir";
gotoxy(34,15);cout<<"opc ->";
cin>>opc;

switch(opc)
{
case'1':crear(a,&m);break;
case'2':buscar(a,m);break;
case'3':listar(a,m);break;
case'4':ordenar(a,m);break;
case'5':modificar(a,m);break;
case'6':adicion(a,&m);break;
case'7':eliminar(a,&m);break;
}
}while (opc!='8');
}

void crear(registro a1[50],int *n)


{int i;
clrscr();
cout<<" k= ";
cin>>(*n);
for(i=1;i<=(*n);i++)
{cout<<"el Codigo"<<i<<":";cin>>a1[i].codigo;
cout<<"el Nombre"<<i<<":";
gets(a1[i].nombre);
cout<<"la direccion"<<i<<":";
gets(a1[i].direcion);
}
}
void adicion(registro a6[50],int*n)
{int cod;
int i;
clrscr();
gotoxy(30,2);cout<<"ADICION";
gotoxy(4,4);cout<<"Ingrese el codigo=";cin>>cod;
for(i=(*n);i<=(*n);i++)
if(cod==a6[i].codigo)
break;
if(cod==a6[i].codigo)
{gotoxy(25,22);cout<<"EL ERROR REGISTRO ";
}
else
{gotoxy(25,22);cout<<"INGRESE LA INFORMACION";
gotoxy(4,6);cout<<"NOMBRE:";gets(a6[*n+1].nombre);
gotoxy(4,8);cout<<":";gets(a6[*n+1].direcion);
a6[*n+1].codigo=cod;
*n=*n+1;
gotoxy(25,22);cout<<"REGISTRO ADICIONADO";
getch();
}
}
void eliminar(registro a7[50],int*n)
{int cod;
int i;
clrscr();
gotoxy(30,2);cout<<"ELIMINACION";
gotoxy(4,4);cout<<"Ingrese codigo=";cin>>cod;
for(i=1;i<=(*n);i++)
if(cod==a7[i].codigo)
break;
if(cod==a7[i].codigo)
{gotoxy(4,4);cout<<"NOMBRE:";a7[i].codigo;
gotoxy(4,6);cout<<"DIRRECCION:";a7[i].direcion;
a7[i].codigo=a7[i-1].codigo;
(*n)=(*n)-1;
gotoxy(25,22);cout<<"REGISTRO ELIMINADO";
}
else
{gotoxy(25,22);cout<<"REGISTRO NO EXISTE";
}
getch();
}
void buscar(registro a2[50],int n)
{int cod,i,pos=0;
clrscr();
cout<<"el codigo a buscar->";
cin>>cod;
for(i=1;i<=n;i++)
if(cod==a2[i].codigo)
{pos=i;
break;
}
if(cod==a2[i].codigo)
{cout<<"Nombre es="<<a2[i].nombre<<endl;
cout<<"la Direccion es="<<a2[i].direcion<<endl;
}
else
cout<<"el codigo hallado es";
getch();
}
void ordenar(registro a4[50],int n)
{int i,j;
int temp;
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++)
if (a4[i].codigo>a4[j].codigo)
{temp=a4[i].codigo;
a4[i].codigo=a4[j].codigo;
a4[j].codigo=temp;
}
}
void modificar(registro a5[50],int n)
{ int i,cod;
char campo;
clrscr();
gotoxy(30,2);cout<<"MODIFICACION";
gotoxy(2,4);cout<<"codigo:";cin>>cod;
for(i=1;i<=n;i++)
if(cod==a5[i].codigo)
break;
if(cod==a5[i].codigo)
{gotoxy(2,6);cout<<"NOMBRE(1):"<<a5[i].nombre;
gotoxy(2,8);cout<<"DIRECCION(2):"<<a5[i].direcion;
gotoxy(30,20);cout<<"Indique campo a modificar(1)(2)";
cin>>campo;
switch(campo)
{case'1':gotoxy(14,6);cout<<" ";
gotoxy(14,6);gets(a5[i].nombre);
break;
case'2':gotoxy(17,8);cout<<" ";
gotoxy(17,8);gets(a5[i].direcion);
break;
}
gotoxy(30,22);cout<<"Registro Modificado";
getch();
}
else
{gotoxy(30,22);cout<<"Registro no hallado";
getch();
}
}
void listar(registro a3[50],int n)
{int i;
clrscr();
for(i=1;i<=n;i++)
{gotoxy(30,3);cout<<"el Listado es";
gotoxy(30,4);cout<<"---------";
gotoxy(10,5);cout<<"el codigo es";
gotoxy(25,5);cout<<"el nombre";
gotoxy(40,5);cout<<"la direccion";
gotoxy(5,6+i);cout<<i;
gotoxy(10,6+i);cout<<a3[i].codigo;
gotoxy(25,6+i);cout<<a3[i].nombre;
gotoxy(40,6+i);cout<<a3[i].direcion;
}
getch();
}

11.- /*Primos Gemelos */


#include<iostream.h>
#include<conio.h>
void LeerN(int &num){
cout<<"Ingrese Numero Entero Cualquiera ";
cin>>num;}

int numdiv(int num){


int nd=0;
for( int i=1; i<=num; i++)
if (num%i==0)
nd++ ;
return nd;}
int primo(int num){
if (numdiv(num)==2)
return 1;
else
return 0;
}

main(){
int num;
LeerN(num);
if ( primo (num))
cout<<"El Numero "<<num<<"Es Primo \n";
else
cout<<"El Numero "<<num<<"No es Primo \n";
cout<<"\nLos Primos Gemelos de los primeros 400 Son \n";
for( int j=1; j<=400; j=j+2)
if ((primo(j)==1)&&(primo(j+2)==1))
cout<<j<<' '<<j+2<<endl;
getch();
}

12.- /*Programa graficos sen y cos colaboracin Ing. Rafo Lecca*/


#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

typedef double (*F)(double);


void graph_1(F f);
void tabulador(int x);

main(){
char c ; system("cls");
cout<<"\nIngrese Seno/Coseno : ";
c=getchar();
if(c=='S'||c=='s')
graph_1(sin);
else{
if(c=='C'||c=='s')
graph_1(cos);
else cout<<"\nInconsistente ";
}
getch();
}

void graph_1(F f)
{
float a;
int y;
for(a=0.0;a<3.0*M_PI;a+=0.50){
y=30+(int)20.0*(*f)(a);
tabulador(y);
cout<<"*\n";
}
}
void tabulador(int x)
{
for(int i=1;i<=x;i++)
cout<<' ';
}

13.- /*Una Integral . Suponga que una funcion f es positiva en un intervalo D={a<=x<=b}
Deseamos calcular el area bajo la curva y=f(x) entre x=a y x=b
Desarrollado por Daniel Osorio Maldonado*/
#include<conio.h>
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
#include<stdlib.h>

void FU(float x);


float SA(float a);
float SB(float b);
float S(float a,float b);
float FUN(float x);

main(){
int i,N;
float a,b,Area,R,SUM,x,h;
system("cls");
cout<<"Ingrese los Valores de a ";cin>>a;
cout<<"Ingrese los Valores de b ";cin>>b;
cout<<"Ingrese el # de Secciones :";cin>>N;
cout<<"Los Valores Parciales son:"<<endl
<<"Suma de A "<<FUN(a)<<endl
<<"Suma de B "<<FUN(b);
cout<<"\nSea La funcion de finida :FUN=2*x*x-5*x+3 ";
FUN(x);
h=(b-a)/N;
SUM=FUN(a)+FUN(b);
for(i=1;i<=N ;i++)
SUM=SUM+2*FUN(a+i*h);
Area=(h*SUM)/2;
cout<<"\nEl Area de la seccion es :"<<Area;

getch();
}

float FUN(float x){


return(pow(x,3));}

14.- /*Escriba un programa que analice los numeros del 0 - 99,de tal forma
que encuentre los nuemeros tales que la diferencia entre el numero inicial
y el que se forma al invertir sus cifras sean 27 */
#include<iostream.h>
#include<conio.h>
main(){
int N1,N2,N,NAUX,NUME,C27=0;
//cout<<"Ingrese un Numero :";cin>>N;
for(N=0;N<=99;N++){
N1=N/10;
N2=N-N1*10;
NAUX=N2*10+N1;
//Calculamos la diferencia entre :
NUME=N-NAUX;
if(NUME==27){
C27++;
cout<<':'<<"N ="<<N<<' '<<NAUX;}}
cout<<"\nLos Numeros que resultan igual a 27 son :"<<C27;
getch();}
15.- /*se ha lanzado al aire una moneda veinte veces si el nmero de caras es mayor que el
nmero de
sellos, emitir un mensaje que diga "Suertudo!", caso contrario "Sin Suerte". */
#include<stdlib.h>
#include<iostream.h>
#include<conio.h>
main(){
int m,veces,cara=0,sello=0;
randomize();
for (veces=0; veces<20; veces++) {
m=random(95)/10;
if (m%2==0)
cara++;
else
sello++;
} // fin del for
cout<<"La moneda fue lanzada 20 veces\n";
cout<<"cayo CARA "<<cara<<" veces.\n";
cout<<"cayo SELLO "<<sello<<" veces.\n";
if (cara>sello)
cout<<"SUERTUDO\n";
else
cout<<"SIN SUERTE\n";
getch();}

16.- /*se tiene un nmero de varias cifras, se quiere averiguar cuantas cifras pares y cuantas
impares
lo componen. Luego hallar la suma de las cifras colaboracin: Vasques Paragrulla */
#include<iostream.h>
#include<conio.h>
main(){
long N;
int dpar=0, dimpar=0,digito,total=0,suma=0;
cout<<"Ingrese un # de varias cifras : ";
cin>>N;
while (N>0){
digito=N%10;
if (digito%2==0)
dpar++;
else
dimpar++;
total++;
suma=suma+digito;
N=N/10;
}
cout<<"\ndigitos pares = "<<dpar<<endl
<<"\ndigito impares = "<<dimpar<<endl
<<"\nLa suma de los digitos es= "<<suma<<endl
<<"\nTotal digitos ingresados = "<<total;
getch();
}

17.- /* Realizar un programa que permita hallar la secuencia, el valor central y


la suma de sus laterales de los primeros 27 terminos de la serie : 0 1/3 1/8 1/15 1/24 1/35
1/48 1/63 1/80 1/99 1/120 1/143 1/168 1/195 1/224 1/255 1/288 1/323 1/360 1/399 1/440
1/483 1/528 1/575 1/624 1/675 1/728 */
#include <iostream.h>
#include<conio.h>
void imprime()
{int m=0,f=3;
cout<<"los primeros 27 terminos de la serie son :" ;
for (int i=1;i<=27;i++)
{if (i==1)
cout<<m;
else
{m=m+f;
f=f+2;

cout<<' '<<"1/"<<m;
}
}
}
void valcen( )
{
int m=0,f=3;
for (int i=1;i<=27;i++)
{ m=m+f;
f=f+2;
if (i==(27/2))
cout<<"\n valor central : "<<' '<<"1/"<<m;
}
}
void sumlat()
{
int m=0,f=3,li,lf;
for (int i=1;i<=27;i++)
{ if (i==(27/2))
{ li=m;
cout<<"\nsuma de laterales del valor central: "<<' '<<"1/"<<li<<"+";
}
m=m+f;
f=f+2;

if (i==(27/2)+1)
{lf=m;
cout<<"1/"<<lf<<"="<<((1.0/li)+(1.0/lf));
}
}
}
main() {
imprime();
valcen();
sumlat();
getch(); }

19.- /*los primeros 27 terminos de la serie son :0 1/3 1/8 1/15 1/24 1/35 1/48 1/63 1/8
0 1/99 1/120 1/143 1/168 1/195 1/224 1/255 1/288 1/323 1/360 1/399 1/440 1/483 1
/528 1/575 1/624 1/675 1/728 valor central : 1/224
suma de laterales del valor central: 1/195+1/255=0.00904977*/

// adivina un numero de un dado


#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
main(){
int Ls=6,Li=1,N,M;randomize();
do{
cout<<"Ingrese un numero [1...6]";
cin>>N;
}while(N<1||N>6);

M=random(Ls-Li+1)+Li;
if(N==M)
cout<<"Ud. Acerto ";
else
cout<<"Ud. No acerto ";
getch();}

20.- /*Escriba un programa que calcule el seno de 3 radianes a partir de la serie


senx=x-x^3/3! + x^5/5! + x^7/7! +....para N=1,2,3,....8.Compare cada respuesta
con la suministrada por la funcion de biblioteca Sin(x)*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
main(){
int x=3,N=8,K;
float termino=x;
float senx=x;
K=1;
cout<<"\tN \tsen x \t sin(x) ";
for(int i=1;i<=N;i++){
termino=-termino*x*x/((K+1)*(K+2));
senx=senx+termino;
cout<<" \n\tSenx="<<senx<<"\tsin(x)="<<sin(x);
K=K+2;}
getch();}

21.- //Operaciones con elementos de una Matrix


#include<iostream.h>
#include<conio.h>
#include<process.h>
#include<stdlib.h>
#include<iomanip.h>
#include<ctype.h>

#define n 6

void imprimir();
void leer();

void suma_may();
void suma_menor();
void resultante();
float sum_may[10];
float sum_men[10];
int A[6][6],i,j,mayo=0,menor=800;
int colM;
int colm;

main(){
//cout<<"Ingrese el orden de la matriz:";cin>>n;
cout<<"La matriz generada es:\n";leer();
suma_may();
suma_menor();
cout<<"\n\nLa matriz conbinada es:\n";resultante();
getch();
}

void leer()
{
randomize();
for(i=0;i<n;i++)
for(j=0;j<n;j++)
A[i][j]=rand()%100;
imprimir();
}
void imprimir()
{
for(i=0;i<n;i++){
for(j=0;j<n;j++)
cout<<setw(5)<<A[i][j];cout<<"\n"; }
}

void suma_may()
{
sum_may[j]=0;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
sum_may[j]=A[i][j]+sum_may[j];

for(j=0;j<n;j++){
if(sum_may[j]>mayo) { mayo=sum_may[j]; colM=j;} }
cout<<"\nLa suma Mayor es:"<<mayo;
cout<<"\nLa columna de dicha suma es:"<<colM+1;

void suma_menor()
{
sum_men[j]=0;
for(j=0;j<n;j++)
for(i=0;i<n;i++)
sum_men[j]=A[i][j]+sum_men[j];

for(j=0;j<n;j++){
if(sum_men[j]<menor) { menor=sum_men[j]; colm=j;} }
cout<<"\n\nLa suma Menor es:"<<menor;
cout<<"\nLa columna de dicha suma es:"<<colm+1;

}
void resultante(){
for(i=0;i<n;i++){
for(j=0;j<n;j++) {
if(j==colM){ cout<<setw(5)<<A[i][colm];if(colM==6)cout<<"\n";}
if(j==colm){ cout<<setw(5)<<A[i][colM];if(colm==6)cout<<"\n";}
if(j!=colM && j!=colm)
cout<<setw(5)<<A[i][j]; }
cout<<"\n"; }

22.=/* Campeonato de Futbol INTERFACULTADES :Se juega con 06 equipos cada uno juega
juega 6 partidos.
Se desea "simular" los resultados de dicho campeonato generando aleatoriamente el
Numero de goles que "consigue" y "recibe" cada equipo en cada partido .el ganador sera
aquel que tenga la mayor dierencia de goles al final del campeonato.si en caso no
hubiera un solo ganador, dar el mensaje correspondiente.Asumir que en un partido de no
puede haber mas 12 goles recibidos o anotados por un equipo
DEFINIR Objetos_Datos Entrada y salida
Objeto_Datos de Entrada:Ninguno
Objeto_Datos de Salida :Nombre de los equipos (Nombre[])
goles a favor por equipo(Equipo[])
goles en contra por equipo(Equipo[])
diferencia de goles por equipo (DifGoles[])
nombre del equipo ganador (Nombre[ganador])
mensaje*/
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

//Definicion de constantes
#define NumEquipos 6
#define GolesMax 12
#define False 0
#define True 1
//funcion principal
main(){
short Equipo[NumEquipos][2]; //arreglo de goles a favor y en contra de cada equipo
int DifGoles[NumEquipos]; //arreglo de diferencia de goles de cada equipo
char Nombre[NumEquipos][40]= //arreglo de nombres
{"FACULTAD MECANICA",
"FACULTAD CIVILES",
"FACULTAD ARQUITECTU",
"FACULTAD IND-SISTEMA",
"FACULTAD CIENCIAS",
"FACULTAD ECONOMIA"};
short cont,ganador,partido,mayor,TipoDeGol;
short ganauno;
char opc;
for(;;){clrscr();
//Inicializar a todos los equipos con 0 goles
for(cont=0;cont<NumEquipos;cont++)
for(TipoDeGol=0;TipoDeGol<2;TipoDeGol++)
Equipo[cont][TipoDeGol]=0;

//Generar resultados aleatorios


randomize();
for(partido=1;partido<=NumEquipos-1;partido++)
for(cont=0;cont<NumEquipos;cont++)
for(TipoDeGol=0;TipoDeGol<2;TipoDeGol++)
Equipo[cont][TipoDeGol]+=random(GolesMax);

//Determinar diferencia de goles por equipo


for(cont=0;cont<NumEquipos;cont++)
DifGoles[cont]=Equipo[cont][0]-Equipo[cont][1];

//Determinar el equipo que tiene mayor diferencia de goles


mayor=0;
for(cont=0;cont<NumEquipos;cont++)
{
if(DifGoles[cont]>mayor)
{
mayor=DifGoles[cont];
ganador=cont;
}
}

//Determinar si hay mas de un ganador


ganauno=True;//asumir que hay uno solo
for(cont=0;cont<NumEquipos;cont++)
if((DifGoles[cont]==mayor)&&(cont !=ganador))
ganauno=False;

//Escribir titulos
clrscr();
cout<<setw(15)<<"Equipos"<<setw(19)<<"G.Favor"
<<setw(15)<<"G.Contra"<<setw(15)<<"Diferencia"
<<endl;

//Escribir resultados
for(cont=0;cont<NumEquipos;cont++)
{
cout<<setw(2)<<(cont+1)<<')'
<<setiosflags(ios::left)
<<setw(20)<<Nombre[cont]
<<resetiosflags(ios::left)
<<setw(10)<<Equipo[cont][0]
<<setw(15)<<Equipo[cont][1]
<<setw(15)<<DifGoles[cont]
<<endl;
}
cout<<endl;
if(ganauno)
cout<<"Equipo Ganador :"<<Nombre[ganador];
else
cout<<"Hay empate para el primer Lugar ";
cout<<"\nOtra Prueba [S][N]:";
opc=toupper(getch());
if(opc=='N')break;}
}
Resultado
/* Equipos G.Favor G.Contra Diferencia
1)FACULTAD MECANICA 39 31 8
2)FACULTAD CIVILES 37 39 -2
3)FACULTAD ARQUITECTU 30 46 -16
4)FACULTAD IND-SISTEMA 32 26 6
5)FACULTAD CIENCIAS 26 44 -18
6)FACULTAD ECONOMIA 31 29 2
Equipo Ganador :FACULTAD MECANICA
Otra Prueba [S][N]:*/

23.- /* Escriba un programa que lea un entero positivo N>=10 y calcule el producto
(1/1^2)X(3/2^2)X(5/3^2)X....2N-1/N^2 */
#include"iostream.h"
#include"iomanip.h"
#include "ctype.h"
#include"conio.h"
#include"math.h"
main(){
double P=1.0;
long N,M=1.0 ;
float denominador,numerador;
unsigned conta=1;
cout<<"Ingrese el Numero de Terminos :";cin>>N;
while(conta<=N){
denominador=pow(M,2);
numerador=2*M-1;
P=P*numerador/denominador;
M=M+1;
conta++;
}
cout<<"\nEl Producto es :"<<P;
getch(); }

24.- //PROGRAMA QUE SIMULA EL TIRO DE 3 DADOS CON PUNTAJE


#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
main()
{
int d1,d2,d3,ptos;
char c;
gotoxy(22,2);
cout<<"PROGRAMA QUE SIMULA EL TIRO DE 3 DADOS CON PUNTAJE";
cout<<"\n\nPara lanzar los dados pulse una tecla";
cout<<"\n\nPara finalizar pulse la tecla \"o\" ";
randomize();
do
{
c=getch();
d1=rand()%5+1;
d2=rand()%5+1;
d3=rand()%5+1;
cout<<"\n\n\nEl valor del primer dado es:"<<d1;
cout<<"\n\nEl valor del segundo dado es:"<<d2;
cout<<"\n\nEl valor del tercer dado es:"<<d3;
if ((d1==d2)&&(d2==d3))
cout<<"\n\n Felicidades usted ha ganado 8 puntos!!!!!!!";
if (((d1==d2)&&(d2!=d3))||((d2==d3)&&(d3!=d1))||((d1==d3)&&(d3!=d2)))
cout<<"\n\nBien, usted ha ganado 4 puntos!!!!!!!!";

if(d1==d2+1 && d1==d3+2)


cout<<"\n\nTu puntaje es de 6 puntos!!!";
if(d2==d3+1 && d2==d1+2)
cout<<"\n\nTu puntaje es de 6 puntos!!!!";
if(d3==d1+1 && d3==d2+2)
cout<<"\n\nTu puntaje es de 6 puntos!!!";
if(d1==d3+1 && d1==d2+2)
cout<<"\n\nTu puntaje es de 6 puntos!!!";
if(d2==d1+1 && d2==d3+2)
cout<<"\n\nTu puntaje es de 6 puntos!!!";
if(d3==d2+1 && d3==d1+2)
cout<<"\n\nTu puntaje es de 6 puntos!!!";

if(d1==d2+1 && d1!=d3)


if(d1==d2+1 && d2!=d3)
if(d1==d2+1 && d3!=d1+1)
if(d1==d2+1 && d3!=d2+1)
if(d1==d2+1 && d2!=d3+1)
cout<<"\n\nTu puntaje es de 2 puntos!!!!";

if(d2==d3+1 && d2!=d1)


if(d2==d3+1 && d3!=d1)
if(d2==d3+1 && d1!=d2+1)
if(d2==d3+1 && d1!=d3+1)
if(d2==d3+1 && d3!=d1+1)
cout<<"\n\nTu puntaje es de 2 puntos!!!";

if(d3==d1+1 && d3!=d2)


if(d3==d1+1 && d1!=d2)
if(d3==d1+1 && d2!=d3+1)
if(d3==d1+1 && d2!=d1+1)
if(d3==d1+1 && d1!=d2+1)
cout<<"\n\nTu puntaje es de 2 puntos!!!!1";

if(d2==d1+1 && d1!=d3)


if(d2==d1+1 && d2!=d3)
if(d2==d1+1 && d3!=d2+1)
if(d2==d1+1 && d3!=d1+1)
if(d2==d1+1 && d1!=d3+1)
cout<<"\n\nTu puntaje es de 2 puntos!!!!";

if(d3==d2+1 && d2!=d1)


if(d3==d2+1 && d3!=d1)
if(d3==d2+1 && d1!=d3+1)
if(d3==d2+1 && d1!=d2+1)
if(d3==d2+1 && d2!=d1+1)
cout<<"\n\nTu puntaje es de 2 puntos!!!!";

if(d1==d3+1 && d3!=d2)


if(d1==d3+1 && d1!=d2)
if(d1==d3+1 && d2!=d1+1)
if(d1==d3+1 && d2!=d2+1)
if(d1==d3+1 && d3!=d2+1)
cout<<"\n\nTu puntaje es de 2 puntos!!!!";
}while (c!='o' && c!='O');
}

25.- /* Programa que calcula el descuento de salario por faltas y seguro.Usando


punteros a funciones*/

#include<iostream.h>
#include<conio.h>

float planilla(float smes,int falt,float *desc);

main(){
float sueldo,neto,descuento;
int faltos;

cout<<"SUELDO MENSUAL :";


cin>>sueldo;
cout<<"SE DESCONTARA EL %9.5 DE SU SUELDO POR AFP"<<endl;
cout<<"FALTAS : ";
cin>>faltos;

neto=planilla(sueldo,faltos,&descuento);

cout<<"DESCUENTOS= "<<descuento<<endl;
cout<<"NETO A PAGAR="<<neto; getch(); }

float planilla(float smes,int falt,float *desc)


{ float p;
*desc=((smes)*0.095)+((smes*falt)/30);
p=smes-(*desc);
return(p); }

26. -/*Programa que imprime los primeros N Terminos de la serie


1 2 4 8 15 26 42 64. */
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
void LeerN(int &NumTer){
cout<<"Ingrese el valor del Numero de terminos :";
cin>>NumTer;}

double SumTer(int NumTer)


{short Cont=0;//Contador =0
int ValTer=1;//primer termino = 1
int Increme=1;//primer incremento=1
unsigned suma=0;
while(Cont<NumTer){
Cont++;
suma+=ValTer;
cout<<"\nValor del termino "<<Cont<<"->"<<ValTer;
ValTer+=Increme;
Increme+=Cont;}
return(suma);
}
main()
{
int N,Cont;
LeerN(N);
cout<<"\nLa Suma de Los "<<Cont<<" primeros Terminos Es: "<<SumTer(N);
getch();
}
/*Ingrese el valor del Numero de terminos :10

Valor del termino 1->1


Valor del termino 2->2
Valor del termino 3->4
Valor del termino 4->8
Valor del termino 5->15
Valor del termino 6->26
Valor del termino 7->42
Valor del termino 8->64
Valor del termino 9->93
Valor del termino 10->130
La Suma de Los 0 primeros Terminos Es: 385 */

27.- //Programa que separa de una frase las palabras


#include<iostream.h>
#include<conio.h>
#include<stdio>
#include<ctype.h>
#include<stdlib.h>
#define LMAX 20

int separar(char subcad[ ][LMAX],char *cad){


int i=0, j, k=0;
do{while(cad[i]==' ') i++;
if (cad[i]=='\0') break;
j=0;
while((cad[i]!=' ')&&(cad[i]!='\0')){
subcad[k][j]=cad[i];
i++;j++;
}
subcad[k][j]='\0';
k++; }
while(cad[i]!='\0');
return k;};

main(){
int i,cant;
char cadena[200] ;
char arcad[50][LMAX];
char pmc;
for(;;) {system(cls);
cout<<"\n\ningresar una frase(cadenas)\n\n";
gets(cadena);
cant=separar(arcad,cadena);
cout<<"\n\nnumero de palabras: "<<cant<<"\n\npalabras:\n\n ";
for(i=0;i<cant;i++)
cout<<arcad[i]<<"\n";
cout<<"\n\ndesa separar otras frase? [S][N] " ;
pmc=toupper(getch()) ;
if(pmc=='N')
break; }
getch(); }

28.-/*Encuentre el Numero de puntos con coordenadas enteras que estan dentro


de la elipse de la forma ax^2 +bx^2=C */
#include<iostream.h>
#include<conio.h>
#include<math.h>
int elipse(float a,float b,float C);
void leer(float &a,float &b,float &C);
void Puntos(int &p);
void limites(int &X,float &Y);
int x,y,radio,i,p,P;//var. blobales
float a,b,C;
int lx,ly,X,Y;
main(){
leer(a,b,C);
cout<<elipse(a,b,C);
limites(X,Y);
Puntos(p);
getch();}

int elipse(float a,float b,float C){


X=sqrt(C/a);
Y=sqrt(C/b);
for(x=-X;x<=X;x++){
for(y=-Y;y<=Y;y++)
if(a*x*x+b*y*y<C)
{p++;
cout<<"\n\tValor de x:"<<x<<' '<<"Valor de y:"<<y<<"\t\a";}
}
}

void leer(float &a,float &b,float &C){


cout<<"Ingrese el coeficiente de x :";cin>>a;
cout<<"Ingrese el coeficiente de y :";cin>>b;
cout<<"Ingrese el coeficiente de C :";cin>>C;
}

void Puntos(int &p){


cout<<"\n\tEl Numero de Puntos es :"
<<p;
}
void limites(int &X,float &Y){
cout<<"\n\t El Limite de X es :"<<X
<<"\n\t El Limite de Y es "<<Y;
}

29.- //Mediante structuras realizar un programa que siga la secuencia .


#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<stdlib.h>
struct serie{
int x;};
void ingresar(serie &n);
void mostrar(serie &a,serie&b,serie&n);

main(){
serie a,b,n;
ingresar(n);
mostrar(a,b,n);
getch();
}

void ingresar(serie &n){


clrscr();
cout<<"Ingrese el numero de trminos: ";
cin>>n.x;}

void mostrar(serie&a,serie&b,serie&n){
int t;
clrscr();
t=n.x;
cout<<"Los "<<t<<" primeros terminos de la serie son: "<<endl;
for(int i=0;i<t;i++){
a.x=(2*i)+1;
b.x=(2*i)+3;
cout<<a.x<<"/"<<b.x<<" , ";}}

30./*Programa que simula los lados de un triangulo isosceles calcula el baricentro ..*/
#include<conio.h>
#include<iostream.h>
#include<math.h>
#include<stdlib.h>
void leer(int &x,int &y);
void imprimir(int x,int y);
float area(int x,int y,int z,int w);
float angulo(int x,int y,int z,int w);
void baricentro(int x,int y,int z,int w,int p,int q);
void main()
{randomize();
int a,b,c,d,m,n;
float A,B,C,p,s,ang;
int i=0;
do{
leer(a,b);
leer(c,d);
leer(m,n);
A=sqrt(pow(a-c,2)+pow(b-d,2));
B=sqrt(pow(a-m,2)+pow(b-n,2));
C=sqrt(pow(m-c,2)+pow(n-d,2));
if(A==B)i=1;
if(A==C)i=1;
if(B==C)i=1;
if((A==0)||(B==0)||(C==0))i=0;
}while(i==0);
cout<<" EL PRIMER PUNTO ES : ";
imprimir(a,b);
cout<<" EL SEGUNDO PUNTO ES : ";
imprimir(c,d);
cout<<" EL TERCER PUNTO ES : ";
imprimir(m,n);
cout<<"LOS LADOS DEL TRIANGULO SON : "<<"A = "<<A<<" B= "<<B<<" C=
"<<C;
p=((A+B+C)+0.0)/2;
s=area(A,B,C,p);
cout<<"\n"<<" EL AREA DELTRIANGULO ES IGUAL: "<<s;
ang=angulo(A,B,C,s);
cout<<"\n"<<"EL ANGULO ES : "<<ang;
baricentro(a,c,m,b,d,n);
getch();
}
void leer(int &x,int &y)
{
x=rand()%98;
y=rand()%98;
}
void imprimir(int x,int y)
{cout<<"\n"<<" ( "<<x<<" ; "<<y<<" ) "<<"\n";
}
float area(int x,int y,int z,int w)
{float S;
S=sqrt(w*(w-x)*(w-y)*(w-z));
return(S);
}
float angulo(int x,int y,int z,int w)
{float an;
if(x==y)
{an=asin(2.0*w/(x*z));
}
if(x==z)
{an=asin(2.0*w/(x*y));
}
if(y==z)
{an=asin(2.0*w/(y*x));
}
return(an);
}
void baricentro(int x,int y,int z,int w,int p,int q)
{float X,Y;
X=(x+y+z+0.0)/3;
Y=(w+p+q+0.0)/3;
cout<<"\n"<<"LA COORDENADA DEL BARICENTRO ES : ";
imprimir(X,Y);
}

31. /* Se tienen 02 Jugadores y cada uno va ha lanzar un dado 07 veces el que


tenga mayor suma acumulada gana */
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include <ctype.h>
#define mensaje "\n Otra Prueba [S][N]"
main(){
for(;;){clrscr();
randomize();
int i,j,h,k,suma1=0,suma2=0;
int v[100];
int w[100];
char nom1[20];
char nom2[20];
cout<<"=============================================="<<endl;
cout<<"Empieza el Juego"<<endl;
cout<<"=============================================="<<endl;
cout<<"Ingrese nombre del primer jugador: ";cin>>nom1;
for(i=1;i<=7;i++)
{cout<<"Jugada numero "<<i;cout<<": ";
v[i]=random(6)+1;
h=v[i];
cout<<v[i]<<endl;
suma1=h+suma1;
}
cout<<endl<<"La suma es: "<<suma1<<endl;
cout<<"=============================================="<<endl;
cout<<"Ingrese nombre del segundo jugador: ";cin>>nom2;
for(j=1;j<=7;j++)
{cout<<"Jugada numero "<<j;cout<<": ";
w[i]=random(6)+1;
cout<<w[i]<<endl;
k=w[i];
suma2=suma2+k;
}
cout<<endl<<"La suma es: "<<suma2<<endl;
cout<<"============================================"<<endl;

if(suma1>suma2){
cout<<"El ganador es: "<<nom1;}
if(suma2>suma1){
cout<<"El ganador es: "<<nom2;}
if(suma2==suma1){
cout<<"Empataron ";}
cout<<mensaje;
if(toupper(getch())=='N')break;
}}
32. /*programa que permite crear una matriz para despus crear un vector que puede sumar
a cada
uno de los elementos de la matriz*/
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
main() {
int vectorsuma[20][20];
int vector1[20][20];
int vector2[20][20];
int n,i,j;
cout<<"Ingrese la matriz cuadrada n:";
cin>>n;
for( i=0;i<n;i++)
{ for( j=0;j<n;j++)
{cout<<"Ingrese los valores del vector1 ["<<i+1<<"],["<<j+1<<"]:";
cin>>vector1[i][j];
}
}
cout<<endl;
for( i=0;i<n;i++)
{ for( j=0;j<n;j++)
{cout<<"Ingrese los valores del vector2["<<i+1<<"],["<<j+1<<"]:";
cin>>vector2[i][j];
}
}
cout<<endl;
cout<<"entonces el vectorsuma sera:"<<endl;
for( i=0;i<n;i++)
{ for( j=0;j<n;j++)
{cout<<" vectorsuma ["<<i+1<<"],["<<j+1<<"]:";
cout<<vector1[i][j]+vector2[i][j];
}
cout<<endl;
}
cout<<endl;
//mostrando las matrices:
cout<<"las matrices son:"<<endl ;
for( i=0;i<n;i++)
{for( j=0;j<n;j++)
{ cout<<setw(5)<<vector1[i][j];
}
cout<<endl;
}
cout<<endl;
for( i=0;i<n;i++)
{for( j=0;j<n;j++)
{ cout<<setw(5)<<vector2[i][j];
}
cout<<endl;
}
cout<<endl;
for( i=0;i<n;i++)
{for( j=0;j<n;j++)
{ cout<<setw(5)<<vector1[i][j]+vector2[i][j];
}
cout<<endl;
}
getch();
}/* Como tarea genere Ud. La Matriz de Manera aleatoria y genere el vector aleatoriamente */

33. //Programa que usa punteros a estructuras en este caso halla un modulo y la
//suma de sus elementos
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>
struct complex{
double x,y;
void leerxy(double a,double b);
double comp_abs(complejo *Z);
double sumaxy(complejo *w);
};
void complejo::leerxy(double a, double b)
{x=a;y=b;}

double complejo::comp_abs(complejo *z)


{return(sqrt((z->x*x+z->y*y)));}

double complejo::sumaxy(complejo *w)


{return(w->x+w->y);}

main()
{
float p,q,z;
complex comp1;
cout<<"Ingrese el primer valor ";cin>>p;
cout<<"Ingrese el segundo valor ";cin>>q;
comp1.leerxy(p,q);
complejo P={p,q};
cout<<"El Modulo es "<<P.comp_abs(&P)<<endl
<<"La suma es "<<P.sumaxy(&P);
getch();
}

34. /* Crear una matrix Aleatoria y visualizar:


a)La Diagonal Secundaria
b)La 2da Columna */
#include<stdlib.h>
#include<time.h>
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#define mensaje "\nOtra Generacion de Matrix: ? [S][N]"
void lec(int &filas,int &columnas){
cout<<"Ingrese el numero de orden: ";
cin>>filas;
columnas=filas;
}
void matrix(int filas, int columnas, int M[100][100]){
int max=23, min=1;
for(int i=0;i<filas;i++)
for(int j=0;j<columnas;j++)
M[i][j]=random(max-min+1)+min;
cout<<"MATRIZ\n";
}
void diagonal(int filas, int columnas,int M[100][100]){
int k=0,D[100];
cout<<"\n\nLa diagonal es: \n";
for(int i=0;i<filas;i++){
for(int j=0;j<columnas;j++){
if(i==j){
D[k]=M[i][j];
k=k+1;}
}}
cout<<'{';
for(k=0;k<filas;k++)
cout<<D[k]<<' ';
cout<<'}';}

SEGUNDACOLUMNA(int filas, int columnas,int M[100][100]){


int k=0,C[100];
cout<<"\n\nLa SEGUNDA COLUMNA : \n";
for(int i=0;i<filas;i++){
for(int j=0;j<columnas;j++){
if(j==1){
C[k]=M[i][j];
k=k+1;}
}}
cout<<'{';
for(k=0;k<filas;k++)
cout<<C[k]<<' ';
cout<<'}';}

void R(int M[100][100], int filas, int columnas){


for (int i=0;i<filas;i++){
for(int j=0;j<columnas;j++)
cout<<'\t'<<M[i][j]<<' ';
cout<<endl;}
}
main(){
int i,j,M[100][100],a,b;
int constante;char opcion;
cout<<" "<<endl;
cout<<" Diagonal de una Matriz "<<endl;
cout<<" "<<endl;
for(;;){clrscr();
randomize();
lec(a,b);
matrix(a,b,M);
R(M,a,b);
diagonal(a,b,M);
SEGUNDACOLUMNA(a,b,M);
cout<<mensaje;
cout<<endl;
opcion=getch();
cout<<endl;
if(opcion=='N'||opcion=='n')break;}
cout<<" "<<endl;
cout<<" FIN "<<endl;
cout<<" "<<endl;
getch();
}

35. /*programa que genera valores aleatorios y son almacenados en un vector realizando:
a) Los numeros por encima del promedio.
b) Los numeros multiplos de cinco.
c) La suma de los numeros.
d) El promedio de los valores almacenados
e) El menor numero . */
f) Los numeros que se repiten
#include<stdlib.h>
#include<time.h>
#include<iostream.h>
#include<conio.h>
main(){
int Notas[50],Nrepetidas[50],j=1, i, menor,k;
float promedio,S1=0,S2=0,S3=0,r;char opcion;
randomize ();
for(i=1;i<=20;i++){
Notas[i]=rand()%70+5;
menor=Notas[1];
S3=Notas[i]+S3;
promedio=S3/20;
if(Notas[i]%5==0)
S2=S2+1;
for(k=1;k<=20;k++){
if(menor>Notas[k])
menor=Notas[k]; }}
for(i=1;i<=20;i++){
if(Notas[i]>promedio)
S1=S1+1;
}
for(i=1;i<=20;i++){
for(k=1+i;k<=20;k++){
if (Notas[k]==Notas[i]){
Nrepetidas[j]=Notas[k];j=j+1;}
}
}
cout<<" "<<endl;
cout<<" Numeros aleatorios "<<endl;
cout<<" "<<endl;
do{
r=j;
cout<<"{ ";
for (i=1;i<=20;i++){cout<<Notas[i]<<' ';}
cout<<"}";
cout<<endl;
cout<<"Los numeros por encima del promedio son: "<<S1<<endl
<<"Los numeros multiplos de cinco son: "<<S2<<endl
<<"La suma de los numeros es: "<<S3<<endl
<<"El promedio es: "<<promedio<<endl
<<"El menor numero es: "<<menor<<endl;
cout<<"Los numeros que se repiten son: "<<endl;
cout<<"{";cout<<" ";
for(j=1;j<=r-1;j++){
cout<<Nrepetidas[j]<<" ";}
cout<<"}";
cout<<endl;
cout<<" Desea continuar (S/N)?";
cout<<endl;
opcion=getch();
cout<<endl;
}
while (opcion=='S'||opcion=='s');
cout<<" "<<endl;
cout<<" FIN "<<endl;
cout<<" "<<endl;
getch();
}

36. /*Programa que cuenta el numero de caracteres del apellido y las iniciales del Nombre y
Apellidos */
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<string.h>
int separar(char subcad[][20],char *cad)
{int i,j,k;
i=0; k=0;
do
{while (cad[i]==' ') i++;
if (cad[i]=='\0') break;
j=0;
while((cad[i]!=' ')&&( cad[i])!='\0')
{ subcad[k][j]=cad[i];
i++; j++;
}
subcad[k][j]='\0';
k++;
}while(cad[i]!='\0');
return k;
};
main()
{int i,cant=0,cant1=0,cant2=0;
char cadena[200];
char arcad[50][20];
cout<<"Ingesar nombres y apellidos ";
gets(cadena);
cant = separar(arcad,cadena);
cant1=cant-2;
cout<<"las iniciales son :";
for(i=0;i<cant;i++)
cout<<arcad[i][0]<<" ";
cant2=strlen(arcad[1]);
cout<<"El numero de caracteres del apllido paterno ;"<<cant2;
getch();
}

37. Programa sobre matrices y graficos


#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
#include<ctype.h>
void Mostrar(double matriz[20][20],int n);
void Mostrar_vector(double vector[20],int n);
void Grafico();
void CrearMatriz(double matriz[20][20],int*n);
void Interdiagonal(double A[20][20],double B[20][20],double aux[20],int n);
void Sist_Ecuaciones();
void Primo(double A[20][20],int*n);
void Inter_menor(double matriz[20][20],int aux[20],int n);
void Creamatriz_vector(double vector[20],double matriz[20][20],int*n);
void Inversa(double matriz[20][20],int n);
void Determinante(double A[20][20],int n);
void Triangular_Sup(double A[20][20],int n);
void Triangular_Inf(double A[20][20],int n);
main(){
double A[20][20],B[20][20],matriz[20][20],aux[20];
int n;
double X[10],vector[20];
int opc;
do{clrscr();
gotoxy(26,5);cout<<"M A T R I C E S";
gotoxy(6,7);cout<<"1) Graficos";
gotoxy(6,8);cout<<"2) Intercambiar Diagonales";
gotoxy(6,9);cout<<"3) Sistema de Ecuaciones";
gotoxy(6,10);cout<<"4) Matriz de Numeros Primos";
gotoxy(6,11);cout<<"5) Intercambiar la fila menor con la columna menor ";
gotoxy(6,12);cout<<"6) Introducir un vector en la diagonal principal de una matriz";
gotoxy(6,13);cout<<"7) Inversa de una matriz";
gotoxy(6,14);cout<<"8) Determinante de una matriz";
gotoxy(6,15);cout<<"9) Matriz triangular superior";
gotoxy(6,16);cout<<"10) Matriz triangular inferior";
gotoxy(6,17);cout<<"11) Salir";
gotoxy(6,19);cout<<"Ingrese su opcion: ";cin>>opc;
switch (opc){
case 1:Grafico();break;
case 2:Interdiagonal(A,B,aux,n);break;
case 3:Sist_Ecuaciones();break;
case 4:Primo(A,&n);break;
case 5:Inter_menor(matriz,aux,n);break;
case 6:Creamatriz_vector(vector,matriz,&n);break;
case 7:Inversa(matriz,n);break;
case 8:Determinante(A,n);break;
case 9:Triangular_Sup(A,n);break;
case 10:Triangular_Inf(A,n);break;
case 11: break;
default:cout<<"No existe tal opcion";break;
getch ();
}
}while(opc!=11);
getch();
}
void Grafico(){
float x,y;
clrscr();
gotoxy(5,20);cout<<"Grafica de la funcion y=x^2";
for(x=1;x<=75;x++){
gotoxy(x,15);cout<<"_";
}
for(y=1;y<=25;y++){
gotoxy(35,y);cout<<"|";
}
for(x=-24;x<=24;x=x+4){
y=pow(x,2);
gotoxy(35-x,15-(y/50));cout<<"*";
}
getch();
clrscr();
gotoxy(5,5);cout<<"Grafica de la funcion y=x^3";
for(x=1;x<=75;x++){
gotoxy(x,15);cout<<"_";
}
for(y=1;y<=25;y++){
gotoxy(35,y);cout<<"|";
}
for(x=-10;x<=10;x=x+2.5){
y=pow(x,3);
gotoxy(35-x,15+(y/100));cout<<"*";
}
getch();
}
void CrearMatriz(double matriz[20][20],int*n){
int i,j;
clrscr();
gotoxy(10,5);cout<<"Ingrese el orden de la matriz: ";cin>>*n;
for(i=1;i<=*n;i++){
for(j=1;j<=*n;j++){
matriz[i][j]=random(100-1)+1;
}
}
}
void Inter_menor(double matriz[20][20],int aux[20],int n){
int i,fmin=1;
clrscr();
CrearMatriz(matriz,&n);
Mostrar(matriz,n);
for(i=1;i<=n;i++){
if(i!=fmin){
aux[i]=matriz[fmin][i];
matriz[fmin][i]=matriz[i][fmin];
matriz[i][fmin]=aux[i];
}
}
gotoxy(10,15);cout<<"La nueva matriz es: ";
Mostrar(matriz,n);
}

void Mostrar(double A[20][20],int n){


int i,j;
cout<<endl;
for(i=1;i<=n;i++){
cout<<endl;
for(j=1;j<=n;j++){
cout<<"\t"<<A[i][j]<<"\t";
}
}
getch();
}
void Mostrar_vector(double vector[20],int n){
int i;
gotoxy(12,9);cout<<"V=[\t";
for(i=1;i<=n;i++){
cout<<vector[i]<<"\t";
}
cout<<"]";
getch();
}
void Interdiagonal(double A[20][20],double B[20][20],double aux[20],int n){
int i,j;
clrscr();
gotoxy(10,5);cout<<"Ingrese el orden de la matriz: ";cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
A[i][j]=random(100-1)+1;
B[i][j]=random(100-1)+1;
}
}
gotoxy(10,7);cout<<"La matriz A es: ";
Mostrar(A,n);
gotoxy(10,10+n);cout<<"La matriz B es: ";
Mostrar(B,n);
for(i=1;i<=n;i++){
aux[i]=A[i][i];
A[i][i]=B[i][i];
B[i][i]=aux[i];
}
clrscr();
gotoxy(10,5);cout<<"Intercambiando las diagonales ... ";
getch();
gotoxy(10,7);cout<<"La nueva matriz A es: ";
Mostrar(A,n);
gotoxy(10,10+n);cout<<"La nueva matriz B es: ";
Mostrar(B,n);
}
void ingresar_sistema(int &n, double A[10][10],double B[10]){
int i,j;
clrscr();
gotoxy(8,6);cout<<"Ingrese el numero de incognitas: "; cin>>n;
gotoxy(8,8);cout<<"El sistema sera de la forma:";
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
gotoxy(10*j+5,9+i);cout<<"A["<<i<<"]["<<j<<"]X"<<j;
if(j!=n)
cout<<"+";
else
cout<<"=";
}
gotoxy(10*n+16,9+i);cout<<"B["<<i<<"][1]";
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
gotoxy(12*j+3,10+n+i);cout<<"A["<<i<<"]["<<j<<"]= ";cin>>A[i][j];
}
}
for(i=1;i<=n;i++){
gotoxy(15,11+2*n+i);cout<<"B["<<i<<"][1]= ";cin>>B[i];
}
}
void ver_sistema(int &n, double A[10][10],double B[10]){
int i,j;
clrscr();
gotoxy(10,6);cout<<"Sistema Ax=B";
gotoxy(10,8);cout<<"Matriz A";
gotoxy(30,8);cout<<"Matriz B";
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
gotoxy(5*j+5,9+i);cout<<A[i][j];
}
gotoxy(5*n+20,9+i);cout<<B[i];
}
getch();
}
void Gauss(double A[10][10],double B[10],int n){
double h;
for(int k=0;k<=n-1;k++){
for(int i=1+k;i<=n-1;i++){
h=A[i+1][1+k]/A[1+k][1+k];
for(int j=1+k;j<=n;j++){
A[i+1][j]-=h*A[1+k][j];
}
B[i+1]-=h*B[1+k];
}
}
}
void Sist_Ecuaciones(){
double R[10],X[10],A[10][10],B[10];
int n,i,j;
float ss;
ingresar_sistema(n,A,B);
ver_sistema(n,A,B);
Gauss(A,B,n);
R[n]=B[n]/A[n][n];
for(int i=(n-1);i>=1;i--){
ss=0;
for(int j=(i+1);j<=n;j++){
ss+=R[j]*A[i][j];
}
R[i]=(B[i]-ss)/A[i][i];
}
clrscr();
gotoxy(10,6);cout<<"Las incognitas son: ";
Mostrar_vector(R,n);
}
void Primo(double A[20][20],int*n){
int i,j,p,c;
clrscr();
gotoxy(10,5);cout<<"Ingrese el orden de la matriz: ";cin>>*n; randomize();
for(i=1;i<=*n;i++){
for(j=1;j<=*n;j++){
do{
c=0;
p=random(1000)+1;
for(int t=2;t<=p;t++){
if(p%t==0)
c++;
}
}
while(c!=1);
A[i][j]=p;
}
}
clrscr();
gotoxy(10,5);cout<<"La matriz de numeros primos es:";
Mostrar(A,*n);
}
void Creamatriz_vector(double vector[20],double matriz[20][20],int*n){
randomize();
int i,j;
clrscr();
gotoxy(10,5);cout<<"Ingrese el orden de la matriz: ";cin>>*n;
for(i=1;i<=*n;i++){
vector[i]=random(100-1)+1;
for(j=1;j<=*n;j++){
if(i==j)
matriz[i][j]=vector[i];
else
matriz[i][j]=random(100-1)+1;
}
}
gotoxy(10,7);cout<<"El vector generado es: ";
Mostrar_vector(vector,*n);
gotoxy(10,11);cout<<"La matriz generada es: ";
Mostrar(matriz,*n);
}
void Inversa(double matriz[20][20],int n){
double mat[10][10],var;
int i,j,t;
clrscr();
CrearMatriz(matriz,&n);
Mostrar(matriz,n);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(i==j)
mat[i][i]=1;
else
mat[i][j]=0;
}
}
for(t=1;t<n;t++){
for(i=t;i<n;i++){
var=matriz[i+1][t]/matriz[t][t]*1.0;
for(j=t;j<=n;j++){
matriz[i+1][j]=matriz[i+1][j]-matriz[t][j]*var*1.0;
mat[i+1][j]=mat[i+1][j]-mat[t][j]*var*1.0;
}
}
}
for(t=n;t>1;t--){
for(i=t;i>1;i--){
var=matriz[i-1][t]/matriz[t][t]*1.0;
for(j=t;j>=1;j--){
matriz[i-1][j]=matriz[i-1][j]-matriz[t][j]*var*1.0;
mat[i-1][j]=mat[i-1][j]-mat[t][j]*var*1.0;
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
mat[i][j]*=mat[i][j]*matriz[i][i];
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
mat[i][j]=(0.01*int(mat[i][j]*100));
}
}
gotoxy(10,15);cout<<"La inversa de la matriz es: ";
Mostrar(mat,n);
}

void Determinante(double A[20][20],int n){


int i,j,t;
float var;
CrearMatriz(A,&n);
Mostrar(A,n);
for(t=1;t<n;t++){
for(i=t;i<n;i++){
var=A[i+1][t]/A[t][t]*1.0;
for(j=t;j<=n;j++){
A[i+1][j]=A[i+1][j]-A[t][j]*var*1.0;
}
}
}
double determinante=1;
for(t=1;t<=n;t++){
determinante*=A[t][t];
}
gotoxy(10,15);cout<<"El determinante de esta matriz es: ";
cout<<determinante;
getch();
}
void Triangular_Sup(double A[20][20],int n){
int i,j,t;
float var;
clrscr();
CrearMatriz(A,&n);
Mostrar(A,n);
for(t=1;t<n;t++){
for(i=t;i<n;i++){
var=A[i+1][t]/A[t][t]*1.0;
for(j=t;j<=n;j++){
A[i+1][j]=A[i+1][j]-A[t][j]*var*1.0;
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if((A[i][j]>-0.00001)&&(A[i][j]<0.00001))
A[i][j]=0;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
A[i][j]=(0.01*int(A[i][j]*100));
}
}
gotoxy(10,15);cout<<"La matriz triangular superior es: ";
Mostrar(A,n);
}
void Triangular_Inf(double A[20][20],int n){
int i,j,t;
float var;
clrscr();
CrearMatriz(A,&n);
Mostrar(A,n);
for(t=n;t>1;t--){
for(i=t;i>1;i--){
var=A[i-1][t]/A[t][t]*1.0;
for(j=t;j>=1;j--){
A[i-1][j]=A[i-1][j]-A[t][j]*var*1.0;
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if((A[i][j]>-0.00001)&&(A[i][j]<0.00001))
A[i][j]=0;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
A[i][j]=(0.01*int(A[i][j]*100));
}
}
gotoxy(10,15);cout<<"La matriz triangular inferior es: ";
Mostrar(A,n);
}

38. Programa que resuelve um sistema de Ecuaciones por el metodo por el metodo
Gauss_Jordan
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<iomanip.h>
int cont=1,n,p, i,j,k,l,r,s,dato;
double A[15],W[10][10],Wo[10][10],x[10],m,sum;
void menu();
void matriz_de_trabajo();
void ingresar_sistema();
void visualisar_sistema();
void hacer_diagonal_principal_dif_cero();
void Gaus_jordan();
void crear_pivote();
void crear_nulos_en_columna_pivote();
void calc_solucion();
void mostrar_solucion();
main ()
{ ingresar_sistema();
visualisar_sistema(); cont++;
hacer_diagonal_principal_dif_cero();
Gaus_jordan();
visualisar_sistema();
mostrar_solucion();
getch();
}

void ingresar_sistema()
{
cout<<"\n Ingrese Numero de Incognitas: ";
cin>>n;
cout<<"Ingrese Elementos de la Matriz A :\n ";
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{cout<<"A["<<(i+1)<<(j+1)<<"]=";
cin>>W[i][j];
}
cout<<"\n";
}
cout<<"Ingrese los Elementos de la Matriz B:\n ";
for(i=0;i<n;i++)
{ cout<<"\t\tB"<<(i+1)<<"=";cin>>W[i][n];
}
}

void visualisar_sistema()
{ getch();
if( cont==1)
{ clrscr();
cout<<"\n Sistema Ax=B ingresado:\n ";
}
else
cout<<"\n\n\n Sistema Ax=B (Matriz escalonada reducida) :\n";
cout<<"matriz A: ";
gotoxy(6*n,wherey());
cout<<"matriz B:\n";
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{ cout<<W[i][j];
cout<< \t;
}

cout<<W[i][n];
cout<<"\n";
}
getch();
}

void hacer_diagonal_principal_dif_cero()
{ //creando una fila adicional A[k]=(suma de todas las filas)
for(k=0;k<=n;k++)
for(j=0;j<n;j++)
A[k]= A[k]+W[j][k];

//sumando a cada fila la fila A[k]


for(j=0;j<n;j++)
for(k=0;k<=n;k++)
W[j][k]= A[k]+W[j][k];
}

void Gaus_jordan()
{ //creando la matriz escalonada reducida con operaciones elementales
for(j=0;j<n;j++)
for(k=0;k<n+1;k++)
{ if(j==k)
{ crear_pivote();
crear_nulos_en_columna_pivote();
}
}
}
void crear_pivote()
{ //haciendo pivotes W[j][j]=1
m=W[j][j];
if (m!=0)
for(s=j;s<=n;s++)
W[j][s]= W[j][s]/m;
else
{ cout<<"\n\n No es Inversible";
dato++;
}
}

void crear_nulos_en_columna_pivote()
{ //haciendo W[i][j]=0, j!=i , j != n , con operaciones elementales
for (l=0;l<n;l++)
{ m=W[l][k];
if(l!=k)
for(r=0;r<n+1;r++)
{ Wo[k][r]=m*W[k][r] ;
W[l][r]=W[l][r]- Wo[k][r];
}
}

}
void mostrar_solucion()
{ if(dato!=0)
cout<<"\n\n El Sistema Tiene infinitas Soluciones" ;
else
{ cout<<"\n solucion al sistema Ax=B:\n";
for(int i=0;i<n;i++)
{ cout<<"x["<<(i+1)<<"]="<<W[i][n];
cout<<"\t";
}
}
}
39. Programa que resuelve la siguiente serie
1 1
e 2a e 2 4a e 3 6a
M ..... ....
a 2a 3a
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>
#define e exp(1)
#define mensaje "\n otra prueba [s][n]"
main()
{
float s,a,r,n;

do{ clrscr();
cout<<"Ingrese el Numero de Terminos N ";
cin>>n;
cout<<"Ingrese el valor inicial de a: ";
cin>>a;
s=0;
for(int i=1;i<=n;i++)
{
r=pow(-1,1+i)*sqrt((pow(e,sqrt(i))+2*i*a)/(i*a));
s=s+r;}
cout<<"el valor de la suma es: "<<endl;
cout<<s<<endl;
cout<<mensaje;

}while(toupper(getch())=='S');
getche();
}

40. //Juegos con el alfabeto


//Salida por pantalla del alfabeto intercalando maysculas con minsculas.
#include <iostream>
#include <ctype.h> // Para el uso de 'toupper' y 'tolower'
main()
{
bool mayusculas=true; // Para el cambio de maysculas a minsculas y viceversa
char a='a';
int i; // Contador
while ((a!='z'+1)&&(a!='Z'+1)) // Primera lnea (AbCdEf....)
{
if (mayusculas) a=toupper(a);
else a=tolower(a);
mayusculas=!mayusculas;
cout << a;
a++;
}
cout << endl;
a='a';
while ((a!='z'+1)&&(a!='Z'+1)) // Segunda lnea (aBcDeF....)
{
if (!mayusculas) a=toupper(a);
else a=tolower(a);
mayusculas=!mayusculas;
cout << a;
a++;
}
cout << endl;
a='a';
i=0;
while ((a!='z'+1)&&(a!='Z'+1)) // Tercera lnea (ABcdEF.....)
{
if (mayusculas) a=toupper(a);
else a=tolower(a);
if (i%2) mayusculas=!mayusculas; // Introduzco una condicin de paridad para que
cout << a; // 'maysculas' cambie cada dos iteraciones en vez de en
cada
a++; // iteracin.
i++;
}
cout << endl;
a='a';
while ((a!='z'+1)&&(a!='Z'+1)) // Cuarta lnea (abCDef.....)
{
if (mayusculas) a=toupper(a);
else a=tolower(a);
if (i%2) mayusculas=!mayusculas; // Condicin de paridad
cout << a;
a++;
i++;
}
cout << endl;
cin.get();
}

41. /*Suponga que tiene un numero n y una aproximacion a su raiz cuadrada. para
obtener una aproximacion mas exacta a la raiz cuadrda real se puede utilizar
la siguiente formula:
aproximacion nueva=(n/aproximacion anterior)+aproximacion anterior)/2
Utilizando esta informacion, escriba una programa en C++que solicite al usuario
un numero y una suposicion inicial de su raiz cuadrada. Utilizando estos datos el
programa debe calcular una aproximacion de la raiz cuadrdad que sea exacta hasta
0.00001.(Sugerencia: detenga la gaza cuando la diferencia entre dos aproximaciones
sea menor que 0.00001).*/
#include<iostream.h>
#include<conio.h>
#include<math.h>
#define DIFACEPTADA 0.00001
main(){
float num,raiz,aprox;
cout<<"Introduzca el Numero cuya raiz cuadrada desea ";
cin>>num;
cout<<"Introduzca su mejor supocision para la raiz cuadrad de este numero ";
cin>>aprox;
do{
raiz=aprox;//almacenar la aproximacion
aprox=(num/raiz + raiz)/2.0;//calcular nueva aproximacion
cout<<"Nueva Aproximacion "<<aprox<<endl;
}while(fabs(aprox-raiz)>DIFACEPTADA);
cout<<"La Raiz cuadrada es "<<aprox<<endl;
getch();
}

42. Programa De la Tinka


#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<iomanip.h>
main()
{int x;
int i;
int V[46];
int T[6];
char opc;
int jugador[6];
int contador;
randomize();
contador=0;
do{clrscr();
for( i=0;i<46;i++)
V[i]=0;
i=0;
do
{x=random(46)+1;
if(V[x]==0)
{T[i]=x;
i=i+1;}
V[x]=1;

}while(i<6);
cout<<"Ingrese los numeros de su boleto";
cout<<endl;
for(int j=0;j<6;j++)
{cin>>jugador[j];
for(int m=0;m<6;m++)
{if(jugador[j]==T[m])
{contador=contador+1;}}
}
cout<<"Los numeros de la tinka son:";
cout<<endl;
for(int m=0;m<6;m++)
{cout<<T[m]<<endl;}
cout<<endl;
cout<<"Lista de resultados a continuacion:";
cout<<endl<<endl;
if(contador==3)
{cout<<"Usted es el ganador de tipo 1 (3 aciertos)";
cout<<"Jugada gratis";}
if(contador==4)
cout<<"Usted es el ganador de tipo 2 (4 aciertos)";
if(contador==5)
cout<<"Usted es el ganador de tipo 3 (5 aciertos)";
if(contador==6)
cout<<"Usted es el ganador de tipo 1 (6 aciertos)";
if(contador==0)
{cout<<"Usted no acerto ningun numero"<<endl ;
cout<<"No gano nada";}
if(contador==1)
{cout<<"Usted acerto un numero" <<endl;
cout<<"No gano nada";}
if(contador==2)
{cout<<"Usted acerto dos numeros"<<endl;
cout<<"No gano nada";}
cout<<endl;
cout<<"Desea comprar otro bolto de la tinka o se anima por la Grande[S][N]:?";
opc=toupper(getch());
}while(opc=='S');
getch();
}
APENDICE de MATLAB
En este apartado se vera el uso del Software para Ingenieria llamado Matlab.
Matlab es una herramienta muy potente que bien pueden aprovechar, los usuarios que de
alguna manera conocen o han tenido alguna experiencia con la programacion y conocen algo
de calculo.
Matlab , en su forma inicial, es un curso que se dicta a los alumnos de la facultad de
Ingenieria Mecanica en el curso de Comptacion I, de la Universidad Naciona de Ingenieria,
dejando la parte profunda para el estudio de los metodos Numericos.
Se vera de manera rpida los conceptos basicos, algunos comandos y problemas que han sido
materia de practicas en la UNI.

INTRODUCCION
El nombre de MATLAB proviene de la contraccin de los trminos MATrix LABoratory
y fue inicialmente concebido para proporcionar fcil acceso a las libreras LINPACK y
EISPACK, las cuales representan hoy en da dos de las libreras ms importantes en
computacin y clculo matricial.
MATLAB es un entorno de computacin y desarrollo de aplicaciones totalmente
integrado orientado para llevar a cabo proyectos en donde se encuentren implicados
elevados clculos matemticos y la visualizacin grfica de los mismos. MATLAB
integra anlisis numrico, clculo matricial, proceso de seal y visualizacin grfica en
un entorno completo donde los problemas y sus soluciones son expresados del mismo
modo en que se escribiran tradicionalmente, sin necesidad de hacer uso de la
programacin tradicional.

Para ciertas operaciones es muy rpido, cuando puede ejecutar sus funciones en
cdigo nativo con los tamaos ms adecuados para aprovechar sus capacidades de
vectorizacin. En otras aplicaciones resulta bastante ms lento que el cdigo
equivalente desarrollado en C/C++ o Fortran. En la versin 6.5 MATLAB ha
incorporado un acelerador JIT (Just In Time), que mejora significativamente la
velocidad de ejecucin de los ficheros *.m en ciertas circunstancias, por ejemplo
cuando no se hacen llamadas a otros ficheros *.m, no se utilizan estructuras y clases,
etc. Aunque limitado por el momento, cuando se aplica mejora sensiblemente la
velocidad, haciendo innecesarias ciertas tcnicas utilizadas en versiones anteriores
como la vectorizacin de los algoritmos. En cualquier caso, el lenguaje de
programacin de MATLAB siempre es una magnfica herramienta de alto nivel para
desarrollar aplicaciones tcnicas, fcil de utilizar y que, como ya se ha dicho, aumenta
significativamente la productividad de los programadores respecto a otros entornos de
desarrollo.

En los medios universitarios MATLAB se ha convertido en una herramienta bsica,


tanto para los profesionales e investigadores de centros docentes, como una
importante herramienta para el dictado de cursos universitarios, tales como sistemas e
ingeniera de control, lgebra lineal, proceso digital de imagen, seal, etc. En el
mundo industrial MATLAB est siendo utilizado como herramienta de investigacin
para la resolucin de complejos problemas planteados en la realizacin y aplicacin de
modelos matemticos en ingeniera. Los usos ms caractersticos de la herramienta
los encontramos en reas de computacin y clculo numrico tradicional,
procedimientos algortmicos, teora de control automtico, estadstica, anlisis de
series temporales para el proceso digital de seal.

El EID de Matlab Version 6.5


MATLAB se instala desde 02 CDs, si lo que se desea es aplicaciones sin documentar ni
productos, se instalara solo con el primer CD, caso contrario se instalara con los 02 CDs.
Matlab como cualquier otra aplicacin de Windows, una vez instalado se le activa haciendo
doble clic en el icono correspondiente en el escritorio o por medio del men Inicio. Al arrancar
MATLAB se abre una ventana del tipo de la indicada en la Figura 1. sta es la vista que se
obtiene eligiendo la opcin Desktop Layout/Default , en el men View. Como esta
configuracin puede ser cambiada fcilmente por el usuario, es posible que en muchos casos
concretos lo que aparezca sea muy diferente.
En cualquier caso, una vista similar se puede conseguir con el citado comando View/Desktop
Layout/Default . Esta ventana inicial requiere unas primeras explicaciones.
La parte ms importante de la ventana inicial es la Command Window, que aparece en la
parte derecha. En esta sub-ventana es donde se ejecutan los comandos de MATLAB, a
continuacin del prompt (aviso) caracterstico (>>), que indica que el programa est
preparado para recibir instrucciones.
En la pantalla mostrada en la Figura 1 se ha ejecutado el comando Tk=floor(rand(6)*46),
que hace referencia a los numeros aleatorios en una matriz de 6x6,mostrndose a continuacin
el resultado proporcionado por MATLAB.

Ventana inicial de MATLAB 6.5.


prompt para comandos
Desde el prompt de la ventana es posible digitar de manera directa los distintos comando que
el usuario va ha necesitar, por ejemplo se ha apreciado que con la combinacin de comandos
se ha calculado una matriz de 6x6 de numeros aleatorios.
La ventana que se aprecia abajo es el editor de Matlab, en ella se escribe el codigo fuente de
una aplicacin, para activarlo basta con ir al file\M-file o
desde el icono

Desde la Ventana principal se aprecia que aparecen dos ventanas tambin muy tiles: en la
parte superior se ve la ventana Current Directory, que se puede alternar con Workspace
haciendo doble clic en la pestaa correspondiente. La ventana Current Directory muestra los
ficheros del directorio activo o actual. A diferencia de versiones anteriores de MATLAB en que
el directorio activo se deba cambiar desde la Command Window, a partir de la versin 6.0 se
puede cambiar desde la propia ventana (o desde la barra de herramientas, debajo de la barra
de mens) con los mtodos de navegacin de directorios propios de Windows.
Haciendo doble clic sobre alguno de los ficheros de extensin *.m del directorio activo se abre
el editor de ficheros de MATLAB, herramienta fundamental para la programacin.
El Workspace contiene informacin sobre todas las variables que se hayan definido en esta
sesin y permite ver y modificar las matrices con las que se est trabajando.
En la parte inferior derecha aparece la ventana Command
History que muestra los ltimos comandos ejecutados en la Command Window. Estos
comandos se pueden volver a ejecutar haciendo doble clic sobre ellos.
Haciendo clic sobre un comando con el botn derecho del ratn se muestra un men
contextual con las posibilidades disponibles en ese momento. Para editar uno de estos
comandos hay que copiarlo antes a la Command Window.
En la parte inferior izquierda de la pantalla aparece una de las novedades de la versin 6.5, el
botn Start, con una funcin anloga a la del botn Inicio de Windows. Start da acceso
inmediato
a ciertas capacidades del programa.
Muestra las opciones de
Start/Desktop Tools, que
Muestra las posibilidades de
permiten el acceso a las principales
Start/MATLAB
componentes o mdulos de
MATLAB. Una de estas
componentes, Launch Pad realiza
un papel anlogo al botn Start,
dando acceso a todos los mdulos o
componentes de MATLAB que se
tengan instalados.
Formatos de Salida y Exhibicin de Nmeros:
Comando MATLAB
Exhibicin Ejemplo
format short Por omisin 2.3333
format short e 4 decimales 2.3333e+000
format long 14 decimales 2.33333333333333
format long e 15 decimales 2.333333333333334e+000
format bank 2 decimales 2.33
format hex exp. hexadecimal 4002aaaaaaaaaaab
format + +, -, espacio +

Operaciones Aritmticas:
ESCALAR MATRIZ VECTOR DESCRIPCIN
+ + + Adicin
- - - Sustraccin
* * .* Multiplicacin
/ / ./ Divisin hacia la derecha
\ \ \. Divisin hacia la izquierda
^ . Transposicin
Nota: el punto antepuesto o precedido al * , / y al \ son designados para
operaciones con arreglos o arrays.

Operadores Relacionales
OPERADOR DESCRIPCIN
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
== Igual en
condicional.
~= No igual

Operadores Lgicos
Operador Descripcin
& Y (and)
| O (or)
~ NO (not)

Combinaciones:
P
Q ~P P |Q P&Q
Falso Falso Verdadero Falso Falso
Falso Verdadero Verdadero Verdadero Falso
Verdadero Falso Falso Verdadero Falso
Verdadero Verdadero Falso verdadero Verdadero

Caracteres Especiales:
CARACTERES DESCRIPCION

[] Se utilizan para formar vectores y matrices


() Define precedencia en expresiones aritmticas. Encierra
argumentos de funciones en forma usual
, Separador de elementos de una matriz, argumentos de
funciones y declaraciones en lneas con declaraciones
mltiples
; Separador de declaraciones, termina renglones de una
matriz

Control de los formatos de salida y de otras opciones de MATLAB


Los formatos de salida en la ventana principal de MATLAB se pueden controlar fcilmente a
partir del cuadro de dilogo que se abre con el comando Preferences del men File.
En la siguiente figura puede apreciar que se ven dos reas; en el rea de la izquierda ud.
Puede variar la visualizacin; mientras que en el rea de la derecha las opciones de la izquierda

El cuadro de dilogo
de lera Figura permite elegir un editor de programas distinto del que
trae MATLAB, as como elegir el directorio donde estn los ficheros Help. Respecto a los
formatos numricos con que MATLAB muestra los resultados (recurdese que siempre calcula
con la mxima precisin), se pueden activar las mismas posibilidades por medio de comandos
tecleados en la lnea de comandos de MATLAB. Los ms importantes de estos comandos son
los siguientes:
format short coma fija con 4 decimales (defecto)
format long coma fija con 15 decimales
format hex cifras hexadecimales
format bank nmeros con dos cifras decimales
format short e notacin cientfica con 4 decimales
format short g notacin cientfica o decimal, dependiendo del valor
format long e notacin cientfica con 15 decimales
format long e notacin cientfica o decimal, dependiendo del valor
format loose introduce algunas lneas en blanco en la salida (defecto)
format compact elimina las lneas en blanco citadas ( opcin recomendada)
format rat expresa los nmeros racionales como cocientes de enteros
MATLAB aplica un factor de escala general a las matrices cuando los elementos ms
grandes o ms pequeos son superiores o inferiores respectivamente a una determinada
cantidad (103 y 10-3). Hay que aadir que MATLAB trata de mantener el formato de los nmeros
que han sido definidos como enteros (sin punto decimal). Si se elige la opcin format rat el
programa trata de expresar los nmeros racionales como cocientes de enteros.
El cuadro de dilogo Command Window Font de la 2da Figura ofrece la posibilidad de elegir
el tipo de letra as como el tamao y el color, tanto de las letras como del fondo con la que
se escribe en la ventana de comandos de MATLAB. Es mejor utilizar tipos de letra de tamao
constante (Fixedsys o Courier New), para que la salida se alinee bien en la pantalla.

Otras formas de definir matrices


MATLAB dispone de varias formas de definir matrices. El introducirlas por teclado slo es
prctico en casos de pequeo tamao y cuando no hay que repetir esa operacin muchas
veces. Recurdese que en MATLAB no hace falta definir el tamao de una matriz. Las matrices
toman tamao al ser definidas y este tamao puede ser modificado por el usuario mediante
adicin y/o borrado de filas y columnas. A continuacin se van a ver otras formas ms potentes
y generales de definir y/o modificar matrices.

TIPOS DE MATRICES PREDEFINIDOS


Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de tipos
particulares. Algunas de estas funciones son las siguientes:
eye(4) forma la matriz unidad de tamao (4x4)
zeros(3,5) forma una matriz de ceros de tamao (3x5)
zeros(4) dem de tamao (4x4)
ones(3) forma una matriz de unos de tamao (3x3)
ones(2,4) idem de tamao (2x4)
linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2
logspace(d1,d2,n) genera un vector con n valores espaciados logartmicamente entre
10^d1 y 10^d2. Si d2 es pi6, los puntos se generan entre 10^d1 y pi
rand(3) forma una matriz de nmeros aleatorios entre 0 y 1, con distribucin
uniforme, de tamao (3x3)
rand(2,5) idem de tamao (2x5)
randn(4) forma una matriz de nmeros aleatorios de tamao (4x4), con
distribucin normal, de valor medio 0 y varianza 1.
magic(4) crea una matriz (4x4) con los nmeros 1, 2, ... 4*4, con la propiedad de
que todas las filas y columnas suman lo mismo
hilb(5) crea una matriz de Hilbert de tamao (5x5). La matriz de Hilbert es una
matriz cuyos elementos (i,j) responden a la expresin (1/(i+j-1)). Esta es
una matriz especialmente difcil de manejar por los grandes errores
numricos a los que conduce
invhilb(5) crea directamente la inversa de la matriz de Hilbert
kron(x,y) produce una matriz con todos los productos de los elementos del vector
x por los elementos del vector y. Equivalente a x'*y, donde x e y son
vectores fila
compan(pol) construye una matriz cuyo polinomio caracterstico tiene como
coeficientes los elementos del vector pol (ordenados de mayor grado a
menor)
vander(v) construye la matriz de Vandermonde a partir del vector v (las columnas
son las potencias de los elementos de dicho vector)
Existen otras funciones para crear matrices de tipos particulares. Con Help/Help Window se
puede obtener informacin sobre todas las funciones disponibles en MATLAB, que aparecen 6
pi es una variable predefinida en MATLAB, que como es fcil suponer representa el nmero .

FORMACIN DE UNA MATRIZ A PARTIR DE OTRAS


MATLAB ofrece tambin la posibilidad de crear una matriz a partir de matrices previas ya
definidas, por varios posibles caminos:
recibiendo alguna de sus propiedades (como por ejemplo el tamao),
por composicin de varias submatrices ms pequeas,
modificndola de alguna forma.
A continuacin se describen algunas de las funciones que crean una nueva matriz a partir de
otra o de otras, comenzando por dos funciones auxiliares:
[m,n]=size(A) devuelve el nmero de filas y de columnas de la matriz A. Si la matriz es
cuadrada basta recoger el primer valor de retorno
n=length(x) calcula el nmero de elementos de un vector x
zeros(size(A)) forma una matriz de ceros del mismo tamao que una matriz A
previamente creada
ones(size(A)) dem con unos
A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los
elementos de un vector ya existente x
x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya
existente A
diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A
blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se le
pasan como argumentos
triu(A) forma una matriz triangular superior a partir de una matriz A (no tiene por
qu ser cuadrada)
tril(A) dem con una matriz triangular inferior
rot90(A,k) Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un
entero que puede ser negativo. Si se omite, se supone k=1
flipud(A) halla la matriz simtrica de A respecto de un eje horizontal
fliplr(A) halla la matriz simtrica de A respecto de un eje vertical
reshape(A,m,n) Cambia el tamao de la matriz A devolviendo una matriz de tamao mxn
cuyas columnas se obtienen a partir de un vector formado por las columnas
de A puestas una a continuacin de otra. Si la matriz A tiene menos de mxn
elementos se produce un error.
Un caso especialmente interesante es el de crear una nueva matriz componiendo como
submatrices otras matrices definidas previamente. A modo de ejemplo, ejectense las
siguientes lneas de comandos y obsrvense los resultados obtenidos:
A=rand(3)
B=diag(diag(A))
C=[A, eye(3); zeros(3), B]
En el ejemplo anterior, la matriz C de tamao (6x6) se forma por composicin de cuatro
matrices de tamao (3x3). Al igual que con simples escalares, las submatrices que forman una
fila
se separan con blancos o comas, mientras que las diferentes filas se separan entre s con
intros o puntos y comas. Los tamaos de las submatrices deben de ser coherentes.
DIRECCIONAMIENTO DE VECTORES Y MATRICES A PARTIR DE
VECTORES
Los elementos de un vector x se pueden direccionar a partir de los de otro vector v. En este
caso, x(v) equivale al vector x(v(1)), x(v(2)), ... Considrese el siguiente ejemplo:
v=[1 3 4]
v=
134
x=rand(1,6)
x=
0.5899 0.4987 0.7351 0.9231 0.1449 0.9719
x(v)
ans =
0.5899 0.7351 0.9231
De forma anloga, los elementos de una matriz A pueden diseccionarse a partir de los
elementos de dos vectores f y c. Vase por ejemplo:
f=[2 4]; c=[1 2];
A=magic(4)
A = 16 2 3 13
5 11 10 8
9 7 6 12
4 14 1 51
A(f,c)
ans = 5 11
4 14
El siguiente ejemplo continuacin del anterior - permite comprobar cmo los elementos de
una matriz se pueden direccionar con un slo ndice, considerando que las columnas de la
matriz estn una a continuacin de otra formando un vector:
f=[1 3 5 7];
A(f), A(5), A(6)
ans = 16 9 2 7
ans = 2
ans =11
Ms adelante se ver que esta forma de extraer elementos de un vector y/o de una matriz
tiene abundantes aplicaciones, por ejemplo la de modificar selectivamente esos elementos.
OPERADOR DOS PUNTOS (:)
Este operador es muy importante en MATLAB y puede usarse de varias formas. Se sugiere
practicar. mucho sobre los ejemplos contenidos en este apartado, introduciendo todas las
modificaciones que se le ocurran y haciendo pruebas abundantes (Probar es la mejor forma de
aprender!).
Para empezar, defnase un vector x con el siguiente comando:
x=1:10 x = 1 2 3 4 5 6 7 8 9 10
En cierta forma se podra decir que el operador (:) representa un rango: en este caso, los
nmeros enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este operador puede
tambin utilizarse con otros valores enteros y reales, positivos o negativos. En este caso el
incremento va entre el valor inferior y el superior.
x=1:2:10 x = 1 3 5 7 9
x=1:1.5:10 x = 1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000
x=10:-1:1 x = 10 9 8 7 6 5 4 3 2 1
Puede verse que, por defecto, este operador produce vectores fila. Si se desea obtener un
vector columna basta trasponer el resultado. El siguiente ejemplo genera una tabla de
funciones
seno y coseno. Ejectese y obsrvese el resultado (recurdese que con (;) despus de un
comando el
resultado no aparece en pantalla).
x=[0.0:pi/50:2*pi]';
y=sin(x); z=cos(x);
[x y z]
El operador dos puntos (:) es an ms til y potente y tambin ms complicado- con
matrices. A continuacin se va a definir una matriz A de tamao 6x6 y despus se realizarn
diversas operaciones sobre ella con el operador (:).
A=magic(6)
A = 35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11

Recurdese que MATLAB accede a los elementos de una matriz por medio de los ndices de
fila y de columna encerrados entre parntesis y separados por una coma. Por ejemplo:
A(2,3) ans = 7
El siguiente comando extrae los 4 primeros elementos de la 6 fila:
A(6, 1:4) ans = 4 36 29 13
Los dos puntos aislados representan "todos los elementos". Por ejemplo, el siguiente
comandoextrae todos los elementos de la 3 fila:
A(3, :) ans = 31 9 2 22 27 20
Para acceder a la ltima fila o columna puede utilizarse la palabra end, en lugar del nmero
correspondiente. Por ejemplo, para extraer la sexta fila (la ltima) de la matriz:
A(end, :) ans = 4 36 29 13 18 11
El siguiente comando extrae todos los elementos de las filas 3, 4 y 5:
A(3:5,:)
ans = 31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16

2da PARTE APLICACIONES CON MATLAB


Desde el Prompt del Matlab (ventana de comandos) escribir:
>>A=45;
>> B=31;
>> C=A+B;
Realice las operaciones de resta, multiplicacin y divisin;
Principales comandos:
clear sin argumentos, clear elimina todas las variables creadas previamente
clear A, b borra las variables indicadas.
clear global borra las variables globales.
clear functions borra las funciones.

Notas y previos
MATLAB puede almacenar informacin en Por ejemplo :
variables tales como : b = 50 ;
a = 100 Si se quiere saber el valor de alguna
Cada vez que capturamos informacin en variable capturada slo se tiene que poner
MATLAB y presionamos <ENTER> sta es el nombre de la variable y <ENTER> y
desplegada inmediatamente ( letras en MATLAB lo despliega. Estas variables
color azul ), pero si ponemos un punto y residen en el espacio de trabajo de
coma al final de la instruccin MATLAB MATLAB.
omite el desplegado de informacin.
Las variables son sensibles a las Como este ltimo clculo no tena variable
maysculas, por lo que las asignada, la respuesta seguarda en la
siguientesvariables son diferentes : variable ans (answer ).
Variable = 1
variable = 1 Borrado de variables.
Las variables pueden contener hasta 19 Para borrar el valor de una variable
caracteres. stas deben empezar conuna simplemente ponemos
letra, seguida por cualquier nmero de clear a Borra la variable " a "
letras, dgitos o guiones desubrayado. a verifique que este borrada.
Los caracteres de puntuacin no son clear a b c borrablas variables " a ", " b " y
permitidos en las variables. "c"
Cuando se trabaja con muchas variables " CLEAR " Borra todas las variables y no se
estas son difcil de recodar. pueden recuperar.
El comando who muestra un desplegado de
todas aquellas variables que se hanestado Funciones trigonomtricas
utilizando. sin ( 0.5) Seno de (0.5)
who As mismo
whos Muestralas variables con informacin cos ( X ); tan( X );
adicional. asin( X );acos( X );atan(X);
Hiperblica
Caracteres especiales asinh(X); acosh(X);atanh(X)
[ ] Son usados para formar vectores y Inversa- Hiperblica
matrices [ 1 2 3 ; 4 5 6 ] Atan2 ( X,Y ) Inversa de la tangente en los
( ) Usados para expresiones matemticas. cuatro cuadrantes.
sqrt(2). LOGARITMOS
log (0.5) Logaritmonatural
= Usado para hacer asignaciones. x = 5. LOG10 ( X ) Logaritmo decimal.
Funciones matemticas especiales.
' Transpuesta de una matriz A' abs ( -3) Valorabsoluto o magnitud de un
Usado para separar texto 'texto' nmero complejo
. Punto decimal 3.1415 ceil ( 123.123123) Redondeahacia ms
... Al final de una lnea indican que continua infinito
2,3,4,5,6 .... floor (X) Redondea hacia menos infinito
en el siguiente rengln. 7,8,9,10 ] fix (X) Redondea hacia cero
, Para separar elementos [1,2,3,4] round(X) Redondea hacia el entero ms
; Para separar filas en las matrices. [ 1 2; 3 prximo
4]
Para evitar que se despliegue la imag( 30 - 5j ) Parte imaginaria deun
informacin capturada. [3] ; nmero complejo
% Para hacer comentarios % este real ( X ) Parte real de un nmero complejo
programa,etc. angle ( X ) Angulo de un nmero complejo
! Para ejecutar un comando del Ms-dos !dir conj ( X ) Complejo conjugado
Operaciones bsicas sign ( -5) Funcinsigno : Devuelve el
SUMA signo del argumento
C=a+b (1 si es positivo, -1 si es negativo )
RESTA exp ( 1 ) Exponencial: e( x )
d=a-b REM ( X,Y ) Resto despus de la divisin
MULTIPLICACION ( x / y)
e=a*b sqrt (2) Razcuadrada
DIVISION Operaciones Lgicas
F=a/b En MATLAB se pueden hacer operaciones
F=a\b lgicas, por ejemplo.
POTENCIA 1<2
a^2 Como 1 es menor que 2, la respuesta es
cierta por lo que obtenemos un 1.
1<1 Si tenemos los siguientes valores :
Obtenemos un 0, porque 1 no es menor a = 1, b = 2, c = 3
que 1. Escribimos la formula para x1 :
Como se puede observar las nicas x1 = ( -b + sqrt ( b ^ 2 - 4 * a * c )) /
respuestas posibles con las operaciones 2*a
lgicasson : Para x2 :
Cierto = 1 y Falso = 0. x2 = ( -b - sqrt ( b ^ 2 - 4 * a * c )) / 2
and & *a
or | Podemos hacer la comprobacin para x1.
not ~ a * x1^ 2 + b * x1 + c Comprobacinx1
Para que la operacin and sea verdadera Arreglos (Arrays) Vectores.
las dos relaciones deben serverdaderas. Si se desea calcular el seno de " 0 a 1 " con
Recordemos and = 0 0 | 0 Falso incrementos de 0.25,se pueden capturar los
0 1 | 0 Falso valores y despus mandar llamar el seno
1 0 | 0 Falso de la funcin.
1 1 | 1 Verdadero Seno de 0 a 1 con incrementos de 0.25
( 1 < 2 ) & ( 2 < 3) Verdadero. x = [ 0, 0.25, 0.5, 0.75, 1 ]
( 1 < 2) & ( 2 < 1 ) Falso. Se pueden omitir las comas cuando se
Para la operacin OR : 0 0 | 0 capturan los nmeros.
01|1 Con los nmeros capturados, se obtiene el
10|1 seno de la variable x
11|1 escribiendosimplemente :
( 1 < 2 ) | ( 2 < 1 ) Verdadero. sin (x)
Para la operacin NOT : ~ 0 | 1 MATLAB opera en radianes, donde 2P= 360
~1|0 grados.
~ ( 2 < 1) Verdadero. Ahora se requiere obtener el coseno de
La variable NaN (Not a Number) cero a uno con incrementos de 0.01; loque
Cuando en un lenguaje de programacin equivale a capturar 101 elementos.
como basic, pascal o C, se da unasituacin Para evitar capturarlos a mano, MATLAB
que el programa no pueda manejar, como nos permite crear un vector de lasiguiente
una divisin como 0/0 elprograma se manera :
detiene, marcando un error. Variable = ( Valor inicial : Con incrementos
Cuando en MATLAB se presenta una de : Valor final )
situacin similar el programa no sedetiene, R = (0 : 0.01 : 1)
slo da una pequea advertencia de que se COS ( R ) Ahora se puede obtener el
present una divisinentre cero. Y el coseno de la variable R.
resultado es un NaN, que es una variable Hagamos el siguiente vector :
interna no es un nmero). Y = ( 0 : 1 : 10)
0/ 0 Si queremos saber cual es el cuarto
Ejemplo: defina a=[1 2 0] y b=[1 2 0] elemento del vector ponemos :
ahora pida la divisin elemento aelemento Y (4)
(comando "./") Si nos interesan los elementos 5 al 10 :
a ./ b Y( 5 : 10 )
Solucin de ecuaciones de segundo Otras opciones son :
grado. Y( 1 : 2 : 9) Tomalos elementos del 1 al 9
MATLAB se puede resolver fcilmente con incrementos de 2
ecuaciones del tipo ax+ bx + c = 0, Y([ 1, 3, 7,10]) Tomalos elementos 1, 3,
hacindolo como si fuera una sola 7 y 10 del array
instruccin. La frmula pararesolver una
ecuacin de segundo grado de este tipo Modificaciones de los arreglos
es : Si el noveno elemento del array debi ser
el nmero 20 en vez de 8,corregimos de la
siguiente manera :
Y(9) = 20
Otra forma de hacer arreglos, es con Logspace (0 , 2 , 10 )
linspace : Hemos creamos un arreglo que comienza
Linspace ( Valor inicial , Valor final , en 10 0 y termina en 10 2,conteniendo 10
Nmero de elementos ) valores.
Regresando al ejemplo del coseno de 0 a 1 Otra forma de crear arreglos es :
con incremento de 0.01 escribimos : x1 = 1 : 5 Arreglode 1 a 5, con incremento
Note el uso de comas (#, #, #) de 1
Z = linspace(0 , 10, 101) x2 = 10 : 5 : 100 Arreglode 10 a 100, con
Linspace describe una relacin lineal de incrementos de 5.
espaciado entre sus elementos. Si se quiere concatenar x1 y x2
Logspace describe una relacin de C = [ x1 x2 ]
espaciado " logartmica ".
Logspace ( Primer exponente , ltimo
exponente , Cantidad de valores )

Comando input: Se utiliza para que el programa pida valores de variables mientras se
ejecuta. La sintaxis de la orden es: a=input(Ingrese valor de a= );
Comnado fprintf; se utiliza para salida por pantalla. La sintaxis fprintf(El valor de a =
%6.3f,a); que el valor de a es = y tiene 03 decimales.
Comando disp; diisplaya el valor por pantalla

Instrucciones de Control con alternativas.


MATLAB permite el uso de instrucciones de control con alternativa:
a) Simplecuando solo se evalua una alternativa.
if valor_logico
bloque_instrucciones
end
b) Doblecuando se evalua 02 alternativas V o F
if valor_logico
bloque_instrucciones1
else
bloque_instrucciones2
end
En el caso de ifs anidados
if valo-lgico1
bloque_instrucciones1
elseif valo-lgico2
bloque_instrucciones2

elseif valor-lgico n
Bloque de instrucciones n
else
end
end

c) Multiplecuando se evalua varias alternativas; usa switch( var_Select)


Switch(var_Selec)
case var_sele1,
bloque_instrucciones1
case var_sele2,
bloque_instrucciones2

otherwise, end
%Programa que visualiza el dia de la semana
function y=semana()
n=input('Ingrese un Numero :');
switch(n)
case 1,
fprintf('El Dia es Lunes ')
case 2,
fprintf('El Dia es Martes')
case 3,
fprintf('El Dia es Miercoles')
case 3,
fprint('El Dia es jueves')
case 4,
fprintf('El Dia es Viernes ')
case 5,
fprintf('El Dia es Sabado')
case 6,
fprintf('El Dia es Domingo')otherwise,
fprintf('NO existe Dia de Semana')
end
Instruccin de Control Repetitivo
a) while... end, cuya estructura es:
while valor-lgico
Bloque de instrucciones
End
Si el valor-lgico es uno se ejecuta el bloque de instrucciones y en caso contrario no, el
proceso se repite sucesivamente hasta que valor-lgico sea nulo.

b) for end. El formato de la misma es,


for =1:N
Bloque de instrucciones
End

Funciones definidas con Matlab


Matlab permite que el usuario cree sus propias funciones, que le pedan ayudar en la solucion
de sus aplicaciones. Al igual que cualquier aplicacin de programacin sus funciones definidas
pueden ser varias y ser invocadas cuando sea necesario.
Sintaxis
a). function nom_fun() %sin argumentos puede usar input o no, es invocado desde el prompt.
b). function nom_fun(x) %lleva argumento y se le invoca desde el prompt con el
valor del argumento
Aplicaciones
1. Haciendo uso de la ventana de comandos calcule el rea de un trapecio sabiendo que
la formula a aplicar es la siguiente: S=(basemayor+basemenor)*altura/2.
Hagamos basemayor = B; basemenor= b; altura = h;
Desde el prompt>>B=15;b>>=20;h=25;S=(B+b)*h/2;
2. Hallar el rea y la longitud de una circunferencia, sabiendo que el radio es igual 10.
3. Se quiere hacer un programa que simule un cajero. Se sabe que el cajero slo da
billetes de 200, 100, 50,20 y 10 nuevos soles.
%Programa del CAJERO
function y=billete()
C=input('Ingrese Una Cantidad ');
b200=floor(C/200);
C=rem(C,200);
b100=floor(C/100);
C=rem(C,100);
b50=floor(C/50);
C=rem(C,50);
b20=floor(C/20);
C=rem(C,20);
b10=floor(C/10);
fprintf('Billetes de 200= %4d',b200);
fprintf('\nBilletes de 100=%4d',b100);
fprintf('\nBilletes de 50=%4d',b50);
fprintf('\nBilletes de 20=%4d',b20);
fprintf('\nBilletes de 10=%4d',b10);

Algoritmos a desarrllar con Matlab


1. Algoritmo que permite hallar el rea de un triangulo conociendo sus tres lados;
1.1 Leer los 3 lados a,b,c;
1.2 Calcular el semiperimetro->p = (a+b+c)/2
1.3 S=sqrt(p(p-a)(p-b)(p-c))
1.4 Imprimir resultados
1.5 Fin

2. Realice un algoritmo que permita convertir los grados Fahrenheit a grados Celsius.
2.1 Inicio
2.2 Leer grados Farenheit
2.3 Aplicar la formula C=(F-32)*5/9
2.4 Escribir Resultado
2.5 Fin del programa

3. Realice un algoritmo que desglose cierta cantidad de segundos introducidos por


teclado en su equivalente en semanas, das, horas minutos y segundos.

4. Realice un algoritmo de un representante de ventas quena gana 1575.00 nuevos


soles mensuales mas un 3 por 100 de comisin sobre las ventas mensuales
realizadas. Si al total obtenido hay que descontarle un 12.75 por 100 de
impuestos, indicar el sueldo neto al mes.

5. %Divisibilidad entre 02 numeros


function y=divi()
a=input('Ingrese a: ');
b=input('Ingrese b; ');
if(a>b)
if(mod(a,b)==0)
fprintf('a es divisible por b ');
else
fprintf('a no es divisible por b ');
end
else
fprintf('a debe ser mayor que b ');

end

6. %calcula el mayor de 03 numeros


function M=mayor()
a=input('\nIngrese primer nmero:');
b=input('\nIngrese segundo nmero:');
c=input('\nIngrese Tercer Numero :');

if (a>b)
if(a>c)
fprintf('\n Entonces El mayor es :%2d',a);
else
fprintf('\n Entonces El mayor es :%2d',c);
end
else
if(b>c)
fprintf('\n Entonces El mayor es :%2d',b);
else
fprintf('\n Entonces El mayor es :%2d',c);
end
end

7. %Programa que ordena 03 numeros


function y=ordena()
a=input('Ingrese el Valor de a ');
b=input('Ingrese el Valor de b ');
c=input('Ingrese el Valor de c ');
if a>c
aux=a;
a=c;
c=aux;
end
if b>c
aux=b; b=c; c=aux;
end
if a>b
aux=a; a=b; b=aux;
end
fprintf('El Oden es %2d %2d %2d',a,b,c)

8. %Programa que simula una calculadora


function y=calculadora()
fprintf('<1>. Suma(a+b) ' );
fprintf('<2>. Resta(a-b) ');
fprintf('<3>. Producto(a*b) ');
fprintf('<4>. Cociente(a/b) ');
fprintf('<5>. Resto(resto(a/b)) ');
fprintf('<6>. Salir');
n=input('Ingrese opcion: ');
switch(n)
case 1,
a=input('Ingrese el Valor de a:');
b=input('Ingrese el Valor de b:');
fprintf('La suma de %d y %d es %2d',a+b);
case 2,
a=input('Ingrese el Valor de a:');
b=input('Ingrese el Valor de b:');
fprintf('La diferencia de %d y %d es %2d',a-b);
case 3,
a=input('Ingrese el Valor de a:');
b=input('Ingrese el Valor de b:');
fprintf('El Producto de %d y %d es %2d',a*b);
case 4,
a=input('Ingrese el Valor de a:');
b=input('Ingrese el Valor de b:');
if b~=0
fprintf('El Cociente de %d y %d es %2d',a/b);
else
fprintf('No es posible el cociento ');
end
case 5,
a=input('Ingrese el Valor de a:');
b=input('Ingrese el Valor de b:');
if b~=0
fprintf('El resto de %d y %d es %2d',rem(a,b));
else
fprintf('No es posible el cociento ');
end
case 6,
exit
end

9. %funcion que calcula los digitos pares y los digitos impares


function y=dig()%[dpar,dimpar]=dig()
N=input('\nIngrese Un Numero de varias Cifras: ');
digpar=0;
digimpar=0;
while N~=0
if rem(N,2)==0
digpar=digpar+1;
else
digimpar=digimpar+1;
end
N=floor(N/10);
end
fprintf('\nLos Digitos Pares son :%5d',digpar);
fprintf('\nLos Digitos Impares son :%5d',digimpar);

10. %Una Funcion que calcula el Valor aproximado de senx


% senx= x-(x^3/3!) + (x^5/5!) - (x^7/7!)+...
function y =senx( )
x=input('Ingrese el Valor real de x en radianes ');
N=input('Ingrese el Valor entero de N ');
Termino=x;
senx=x;
k=1;
for i =1:N
Termino =(-1)*Termino*(x*x)/((k+1).*(k+2));
senx=senx+Termino;
k=k+2;
display([ i, senx, sin(x)]);
end

11. %Un Ejemplo de la forma como se aprecia los valores


function y=usofor() end
a=[1 3 2];
b=[2 1 1]; for i=1:3
c=[3 2 1]; for j=1:3
for i=1:3 c(i,j)=a(i,j)*b(i,j);
for j=1:3 end
c(i,j)=a(i,j)+b(i,j); end
end
end for i=1:3
for j=1:3
for i=1:3 c(i,j)=a(i,j)/b(i,j);
for j=1:3 end
c(i,j)=a(i,j)-b(i,j); end
end

12. %Programa que hace referencia al uso del for


function y=while1()
for r=5:-1:1;
for s=1:r
vol=(4/3)*pi*(r^3-s^3);
disp([r,vol])
end
end

Arreglos o Arrays en Matlab


Los arreglos en matlab pueden ser unidimensionales o bidimensionales, los primeros suelen
llamarse vectores, mientras que los segundos matrices, al respecto existe una amplia gama de
comandos que permite soluciones eficaces.
Por ejemplo un vector esta declarado como: A=[1 2 3 4 5 ];
Una matriz de 3x3, como B=[1 2 3;4 5 6;7 8 9];
Al digitar el vector dar como resultado : 1 2 3 4 5, mientras que una matriz sera de la
forma : 1 2 3
456
789
1. Sea el vector a=[1 3 5 7 9], entonces es posible escribir otro vector tal como b=ax1.5

b = 1.5000 4.5000 7.5000 10.5000 13.5000


2. Tambin se puede escribir : c=a+b dando como resultado:
c = 2.5000 7.5000 12.5000 17.5000 22.5000

3. El operador es muy utilizado en arreglos con matlab; por ejemplo se puede escribir
un vector dando un valor inicial luego el paso y finalmente el ultimo numero sea:
s=[1:2:9]; dando como resultado los valores de nmeros impares: 1 3 5 7 9.
4. Una comilla despus del nombre de un vector lo identifica como un vector transpuesto
que significa vector columna.
Ejercicio: Genera un vector cuyos elementos representen una particin del intervalo [-1,1],con
un paso igual 0.2;
Ejercicio: Genera un vector cuyos elementos representen una particin del intervalo [-1,1];en
20 subintervalos.
Ejercicio: >Es posible construir un vector mediante la notacin dos puntos de tal forma que
las componentes vayan decreciendo en valor? Prueba con 4:-2:-15.
Ejercicio: >Qu ocurre si ponemos 4:2:-15?
Matrices
Las matrices son arreglos bidimensional, para acceder a sus elementos se hace uso de ndices,
como que conforman la matriz en si, por ejemplo una matriz de 3x3 esta declarada como
a(3,3). Sea la matriz A=[1 2 3;4 5 6;7 8 9]; B =[-2 3 1;4 5 7;1 5 9]; entonces es posible la
siguiente operacin C=2A y D=3B cuyos resultados son :
C= 2 4 6 D= -6 9 3
12 15 21 12 15 21
3 15 27 3 15 27
a) Sea A=[1 2 3 4;5 6 7 8;9 10 11 12]; se puede escribir B=A
B= 1 5 9
2 6 10
3 7 11
4 8 12
b) Crear una matriz de orden de orden 2x4
>>g=[1 2 3 4;5 6 7 8];
c) crear una matriz de otra manera g=[1 2 3 4
5 6 7 8]
d) Restar 2 a cada elemento de g;

e) Realizar >>2*g-1;

f) >>h=[1 1 1 1 ;2 2 2 2;3 3 3 3];

g) Realice >>g+h;>>ans-h;>>2*g-h

h) Multiplque cada elemento de g por d=cada elemento de h;

i) Es posible la operacin >>g*h?; y esta ptra g*h

j) Pruebe y analice los siguientes comandos:

k) g./h ; h./g;
l) Resuelva la siguiente ecuacin 2 a + 3b + c = 6;
4a +b + 2c = 7;
a+ b + 7c = 4;
use metodos conocidos por Ud. Y luego compare con el comando de matlab \
m) Crear una matriz de orden 3x3 formada unicamente por unos y otra de orden 2x5
formada por ceros

n) Pruebe >>size(g); >>ones(size(g)


o) Recupere la matriz A y modifique la la cuarta columna.
p) Forma una nueva matriz inviertiendo el orden de las filas.
q) Crear una matiz W aadiendo todas las filas de la primera y tercera columna de B
a la derecha de A.
r) Crear B extrayendo las primeras dos filas y las dos primeras columnas de A.

POLINOMIOS
1. Sea el polinomio s 4 3s 3 9 s 2 1 su representacin en matlab es como sigue:
>>p=[1 3 9 0 1];
>>p = 1 3 9 0 1
>>z = polyval (p,2); z= 77; roots(p)
ans= -1.5187 + 2.5877i
-1.5187 - 2.5877i
0.0187 + .3328i
0.187 0.5528i
2. Sea la expression ( s 1)( s 2 2 s 1) ?
>>p1 = [1 1];
p2 = [1 2 1];
>>p3=conv(p1,p2)
p3= 1 3 3 1

3. Se tienen las siguientes expresiones, resuelva;


x 4 33 2 x 2 x 2

3x 4 2 x 3 x 2 7
4. %Graficar el Polinomio interpolante en el rango
%s ->[1,10]
x=[1 2 3 5];
y=[1.06 1.12 1.34 1.78];
d=polyfit(x,y,length(x)-1)

%ans = -0.0200 0.2000 -0.4000 1.2800

%d=[-0.0200s^3 0.2000s^2 -0.4000s 1.2800];


%Valores pequenios para s
xx=[1:.1:10];
%a=-0.0200*s.^3 + 0.2000*s.^2 -0.4000*s +1.2800;
yy=polyval(d,xx)
plot(x,y,'o',xx,yy);gris

5. Un conjunto de datos esta dado por


xd = [0 0.2000 0.4000 0.6000 0.8000 1.000]
yd = [0.3927 0.5672 .06982 .07941 .08614 .09053]
Estime todas las derivadas para x = a =0.3 con poly_drv y despus con polyfit.

6. %Interpolacion de Lagrange
%Objetivo:Interpolar datos mediante la Interpolacion de Lagrange
%Sintaxis: yi=Lagran_(c,y,xi)
% x,y: Tabla de Datos en forma de arreglo
% xi: arreglo de abscisas para las cuales se calculara el valor de y yi :arreglo de
valores y calculados mediante interpolacion de Lagrange.

function fi=Lagran_(x,f,xi)
fi=zeros(size(xi));
np1=length(f);
for i=1:np1
z=ones(size(xi));
for j=1:np1
if i~=j, z=z.*(xi-x(j))/(x(i)-x(j));end
end
fi=fi+z*f(i);
end
return

Integracin Numrica usando comandos con matlab

quad y quad8.
Sea la funcin : function y=intequad(x)
y = 1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6;
Guardarla con el nombre intquad luego desde la ventana de comandos
x=-1:0.1:2;
plot(x,intequad(x));
para hallar la Integral:
area = quad('intequad', 0, 1)
area = 29.8583

1. probar con quad8.

2. Integracin con procedimientos en Matlab

2.1 %trapezoide con grafico


function I=trapez_g(f_name,a,b,n)
hold off
h=(b-a)/n;
x=a+(0:n)*h;
f=feval(f_name,x);
I=(h/2)*(f(1)+ f(n+1));
if n>1 I=I+ h*sum(f(2:n));
end
h2=(b-a)/100;
xc=a+(0:100)*h2;
fc=feval(f_name,xc);
plot(xc,fc,'r');hold on;
title('REGLA TRAPEZOIDAL');xlabel('Eje de las X');
ylabel('Eje de las Y');
plot(x,f);
plot(x,zeros(size(x)));
for i=1:n;
plot([x(i),x(i)],[0,f(i)]);
end
% f_name es la funcin a la cual se la va a Integrar, los limites son a y b
% por ejemplo probar con intequad

2.2 % Mtodo de Simpson


function p=Simpson3(f,a,b,n)
% Datos
% f =el nombre de la funcion como string
%a =limite inferior
%b =limite inferior
%h =longitud de segmento
%x =es el vector x
% y =es el vector F(x)
% n =numero de segmentos
% Resultados
% p =Integracin
h = (b-a)/n;
n = n + 1;
y=zeros(n,1);
x=zeros(n,1);
suma =0;
for i=1:n
x(i) = a+h*(i-1) ;
y(i) = feval(f,x(i)) ;
end
for i=2:n-1
if rem(i,2)==1
suma =suma+2*y(i);
else
suma = suma + 4 * y ( i ) ;
end
end
p = h*(y(1)+suma+y(n))/3 ;
Aqu n debe ser par

2.3 function p=Simpson8 (f,a,b,n)


% Datos
%f =el nombre de la funcion como string
% a =limite inferior
% b =limite inferior
% h =longitud de segmento
% x =es el vector x
% y =es el vector F(x)
% n =numero de segmentos
% Resultados
% p =Integracin
h = (b - a) /n;
n = n + 1;
y =zeros(n,1);
x =zeros(n,1);
suma=0 ;
for i=1:n
x(i)=a+h * (i - 1) ;
y(i)=feval(f,x(i));
end
for i=2:n-1
if rem(i-1,3)==0
suma=suma+2*y(i);
else
suma=suma+3*y(i);
end
end

p=3*h*(y(1)+suma+y(n))/8;
Aqu n debe ser mltiplo de 3

GRAFICOS CON MATLAB


1. %Creando Una Grafica
title('Una Circunferencia ')
t=[0:0.1:20];
y=sin(t);
x=cos(t);
plot(x,y)

2. function g=GrafCoseno()
N=input('Ingrese un valor para el Intervalo N :');
x =-N:0.01:N;
y = cos(x);
plot (x ,y);

3. function g=GrafCoseno()
N=input('Ingrese un valor para el Intervalo N :');
x =-N:0.01:N;
y = cos(x);
plot (x ,y);

4. function expo=grafexp()
N=input('Ingrese un valor real de N par el Intevalo :');
z=input('Ingrese el exponente Z :');
x = -N:0.01:N;
y(3,:) = exp((-x).^2);
%y = exp((-x).^2);
plot(x , y);
title('FUNCION DE UNA EXPONENCIAL ')
ylabel('exp(x)'),...
xlabel('Eje de las X'),...
text(0.4,0.6,'y=exp(x)','sc')

5. function ma=grafmat1()
a=input('Ingrese un valor para a :');
b=input('Ingrese un valor para b :');
t=[a:.01:b];
x(1,:)=t;
x(2,:)=exp(t);
x(3,:)=sin(t);
x(4,:)=cos(t);
plot(t,x)
%plot(t,x,'r+:')
title('GRAFICAS DE ALGUNAS FUNCIONES ')
xlabel('X')
ylabel('Y')

6. %programa que grafica dos funciones


%para hallar el punto de interseccin
x=0.1:0.001:2;
y1=1./x;
y2=exp(x);
figure(1);
plot(x,y1);
title('Inversa');
grid off;

DANIEL OSORIO MALDONADO Pgina 178 de 184


figure(2);
plot(x,y2);
title('Exponencial');
grid on;
figure(3);
plot(x,y1,'k',x,y2,'r:');
title('Inversa y Exponencial');
legend('1/x','exp(x)');
grid off;
%zoom on;

7. %determinar 03 raices positivas mas bajas


function y=o3raices()
clg;clear
x=0:0.1:20;
y=cos(x).*cosh(x)+1;
plot(x,y)
grid
xlabel('x');ylabel('y=cos(x)*cosh(x)+1')

8. %Calculamos la resultante de 02 fuerzas por el metodo


%del paralelogramo
function y=Resultante()
A=2*asin(1)/180;
F1=input('Ingrese la Fuerza F1= ');
F2=input('Ingrese la Fuerza F2= ');
theta=input('Ingrese el angulo entre las Fuerzar= ');
R=sqrt(F1.^2+F2.^2+F1*F2*cos(theta*A));
%disp([F1 F2 R])
fprintf('La resultante de las 02 fuerzas =%6.3f',R)

9. %determinar 03 raices positivas mas bajas


function y=o3raices()
%clg;clear
x=0:0.1:20;
y=tan(x).*cosh(x)+1;
xlabel('x')
%ylabel('y=cos(x)*cosh(x)+1')
%title('Grafico de la funcion y=cos(x).*cosh(x)*1')
plot(x,y)
grid on

10. %Graficos de funciones


function y=senx()
x=[0:1/10:4];
y=1./(1+(x-2).^2);
plot(x,y)
xlabel('Eje de las X ')
ylabel('Eje de las Y ')
title('Grafico de las x e y de la funcion y=1./(1+(x-2).^2)')
text(1.3,0.4,'Una Curva en Forma de Campana ')

DANIEL OSORIO MALDONADO Pgina 179 de 184


EJERCICIOS SOBRE ECUACIONES NO LINEALES

1. Determine valores aproximados de las soluciones de las siguientes ecuaciones empleando el mtodo
grafico:
a. 0.5exp(x/3) - sen(x)=0, x>0

Funcin de la grafica: prb71_a.m function y=prb71_a()


x=[-5:0.01:5];
y=0.5*exp(x/3)-sin(x);
plot(x,y)
grid on

Valores
aproximados:

(0,-0.31)
(0,0.72)
(0,1.91)

b. log(1 + x) - x2 = 0
Funcin de la grafica: prb71_b.m function y=prb71_b()
x=[-2:0.01:2];
y=log10(1+x)-(x.^2);
plot(x,y);
grid on

Valores
aproximado:

(0,0)
(0,0.37)

DANIEL OSORIO MALDONADO Pgina 180 de 184


2. Encuentre de forma aproximada todas las soluciones positivas de las siguientes ecuaciones utilizando el
mtodo grafico:

a. tan(x) x + 1 = 0, 0<x<3

Funcion:prb72_a.m
function y=prb72_a()
x=[0:pi/10:3*pi];
y=tan(x)-x+1;
plot(x,y)
grid on

soluciones:
(0,1.26)
(0,1.88)
(0,4.4)
(0, 5.03)
(0, 7.54)
(0, 8.16)

b. sen(x) - 0.3ex = 0, x>0

Funcion: prb72_b.m
function y=prb72_b()
x=[0:0.01:10];
y=sin(x)-0.3*exp(x);
plot(x,y)
grid on

soluciones:

(0,0.542)
(0,1.074)

DANIEL OSORIO MALDONADO Pgina 181 de 184


c. 0.1x3 - 5x2- x + 4 + e-x = 0

Funcin: prb72_c.m
function y=prb72_c()
x=[-5:0.01:5];

y=0.1*(x.^3)-
5*(x.^2)-x+4+exp(-
x);

plot(x,y)
grid on

soluciones:

(0,-4.73)
(0,-1.34)
(0, 0.85)

d. log(x) - 0.2x2 + 1 = 0

Funcion: prb72_d.m
function y=prb72_d()
x=[-5:0.01:5];
y=log(x)-
0.2*(x.^2)+1;
plot(x,y)
grid on

soluciones:

(0, -3.316)
(0, -0.379)
(0, 0.379)
(0, 0.316)

DANIEL OSORIO MALDONADO Pgina 182 de 184


e. x + x2+ 3x-1 40 = 0

Funcion: prb72_e.m
function y=prb72_e()
x=[-5:0.01:5];
y=x+x.^2+3*(x.^-1)-40;
plot(x,y)
grid on

soluciones:

(0, 0075)

Calcule tan-1(3.5) en el intervalo [0, ] por el mtodo de la bisectriz. (Sugerencia: resuelva tan (x)=3.5, 0
x )

Funcion: graf73.m

function y=graf73()
x=[-pi:pi/10:pi];
y=atan(x);
plot(x,y)
grid on

solucion:

(0,0)

DANIEL OSORIO MALDONADO Pgina 183 de 184


Bibliografia

Luis Joyanes Aguilar Borland 5.0 Editorial Mc Graw Hill 1991

Javier Cevallos Programacion Orientada a Objetos

Herbert Schildt Borland 5.0 Editorial Mc Graw Hill 1991

John H. Matthews Metodos Numericos con Matlab Editorial. Prentice Hall 1999

Shoichiro Nakamura Metodos Numericos con Matlab Editorial Prentice Hall 1998

Javier Garcia Jalow Aprenda Matlab como si estuviera en primero Escuela tecnica de
Ingenieros Industriales Universidad Politecnica de Madrid ao 2005

DANIEL OSORIO MALDONADO Pgina 184 de 184

También podría gustarte