Sei sulla pagina 1di 50

Universidad Nacional de Ingeniería

Facultad de Mecánica

SEPARATA
PROGRAMACION ORIENTADA A OBJETOS
TEMA: ALGORITMOS

Ingeniero Daniel Osorio Maldonado


1era Edición
PROGRAMACION ORIENTADA A OBJETOS

TEMA: ALGORITMOS
PSEUDOCODIGO / DIAGRAMA DE FLUJO

Los algoritmos pueden constituir por así decirlo en un listado de instrucciones que indican
el camino a seguir para dar solución a un problema y que puede o no ser resuelto por una
computadora , generalmente el algoritmo viene acompañado de un pseudocódigo y un
diagrama de flujo.
Cuando el Algoritmo se ha desarrollado en forma correcta, el paso siguiente es llevar el
pseudocodigo a la codificación del lenguaje de programación.
Como ya se explicó, la codificación del algoritmo (pseudocodigo) en un determinado
lenguaje debe respetar su sintaxis para que el compilador pueda traducirlo en Lenguaje
Maquina y hallar la solución 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 solución de un Problema.
‰ Un análisis profundo del problema planteado.
‰ Diseño y construcción del Algoritmo.
‰ Verificación del algoritmo.

Se entiende que por verificación del algoritmo, el seguimiento del mismo con datos que
se ajusten a las característica del problema que se va a resolver.

Característica:
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
idénticos de entrada.
‰ Finito : El algoritmo, independientemente de la complejidad del mismo, debe ser
siempre de longitud finita.

Metodología:
‰ Definición 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/Impresión de resultados.

Pseudocodigo
Es la parte textual del algoritmo,se podría decir que es como la receta para un paciente o
también una receta culinaria para cocinar un plato. Generalmente es la traducción del
Inglés de la sintaxis del compilador al idioma con el que estamos trabajando.

Ing. Daniel Osorio Maldonado


Página 2 de 50
PROGRAMACION ORIENTADA A OBJETOS

DIAGRAMA DE FLUJO
Un diagrama de flujo es la representación gráfica de un algoritmo.
En cuanto a la simbología utilizada para la representación, se tomara la norma (ANSI–
ISO).

DIAGRAMA DEFINICION

INICIO – FIN

ENTRADA DE DATOS

PROCESOS/CONSTANTES

F V BIFURCACIÓN(V/F)

PROCESO REPETITIVO (Desde/Para)

LLAMADA A (PROCEDIMIENTOS/FUNCIONES)

ESCRITURA

PANTALLA

CONECTOR

CONECTOR A SIGUIENTE PAGINA

DIRECCIONES DE FLUJO DEL PROGRAMA

Ing. Daniel Osorio Maldonado


Página 3 de 50
PROGRAMACION ORIENTADA A OBJETOS

DIAGRAMA NASSI_SCHNEIDERMAN(N-S)
También 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 interpretación,
tal como se vera en los ejercicios y aplicaciones.

Inicio
Accion 1
Accion 2
Accion 3
Fin

Codificación y Programación
Es el Proceso mediante el cual se traduce un algoritmo a una codificación en un lenguaje
de programación específico.

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 solución 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 demás elementos que necesita declarar en un programa: variables, constantes,
tipos, estructuras de datos, archivos, procedimientos.

Una variable es un identificador (objeto_dato) que almacena un dato o valor, que ademas
tiene una posición o direccion de memoria y que dependiendo del tipo de dato, va ha
ocupar tambien un espacio en la memoria, ahora bien el valor de la variable puede
cambiar durante el desarrollo del algoritmo o ejecución 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, generalmente
es el espacio que ocupará en la memoria.
Reglas para nombrar a la Varia

Ing. Daniel Osorio Maldonado


Página 4 de 50
PROGRAMACION ORIENTADA A OBJETOS

VARIABLES:
Suelen constar de varios caracteres alfanuméricos de los cuales el primero debe
necesariamente ser una letra: ejemplo Par, nume5to,
a) No deben antecederle ningún valor numérico ejemplo: 123_num. Se debe cambiar
a num_123.
b) No debe existir espacio en blanco en el nombre, ejemplo: op c1. Cambiar a opc1
c) No debe existir operadores aritméticos entre su nombre, Ejemplo varia+ble.
Cambiar a variable.

CONSTANTES: Son un caso especial de variable ya que son identificadores que


generalmente son declarados en el programa antes de las variables propiamente dicha,
éstos identificadores asumen un valor dado por el programador, éste valor no cambia
durante el proceso del programa, ejemplo pi=3.141592.

Tipos de datos en general:


Se denomina tipo de datos a las características propias de un objeto_dato o entidad, por
ejemplo la edad o el domicilio de un registro, deben tener una característica que la
diferencie una de otra, la edad debe ser entero y el domicilio cadena combinado con
números (también se conoce como alfanumérico), podemos decir entonces que existen,
en la mayoría de los lenguaje de Programación, los siguientes tipos de datos:
Numéricos
Alfanuméricos
Carácter
Lógicos (booleano)
Este tipo de Dato no existe en C++/Borland C++, lo que existe es la representación 0
para falso y 1 para verdadero.
En Borland C++ es bueno señalar 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, resuelto con Borland C++; para Visual C++ en
modo 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

Caen en este campo también los Interruptores o Conmutadores(SWITCH), que son


Objetos_Datos que se utilizan en un programa y solo pueden tomar dos valores (CIERTO y
FALSO, 0 y 1),realizando la función de transmitir información de un punto a otro dentro

Ing. Daniel Osorio Maldonado


Página 5 de 50
PROGRAMACION ORIENTADA A OBJETOS

del programa. Podemos decir que actúa como recordatorios manteniendo caracteristicas
de objeto o cálculos que estuvieron presentes en un momento anterior de la ejecución
del programa.
Se utilizan inicializándolos con un valor y en los puntos en que corresponda se cambia al
valor contrario, de tal forma que examinando su valor posteriormente podemos realizar la
transmisión que deseábamos.
Ejemplos:
a) Ejemplo con Borland C++ int i,sp=0,simp=0,sw=0; //asume falso
int sw=0; //se asume falso for(i=1;i<=100;i++)
........do{ if(i%2==0){
if(a<b) sp=sp+i;
cout<<proceso1; sw=1; // asume verdadero }
proceso2; else
sw=1 // asume verdadero simp=simp+i;
else cout<<"La suma de los primeros 100 pares es
cout<<proceso3 "<<sp<<endl
while(sw!=1);// mientras no sea verdadero <<"\nLa suma de los primeros 100 impares es
................ "<<simp;
b) Ejemplo de aplicación con Borland C++ getch();
/*Programa que suma los pares y los impares de }
100 numeros enteros positivos*/ /*Salida
#include<iostream.h> La suma de los primeros 100 pares es 2550
#include<conio.h> La suma de los primeros 100 impares es 2500 */
main(){
Vea otra aplicación y con diagrama de flujo, mas adelante.

Operación de Asignación: La operación de asignación es el modo de


darle valores a una variable. La operación de asignación se representa con el símbolo Å .
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,
específicamente 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 gráfico
esquematiza lo dicho:

LAS VARIABLES EN LA MEMORIA


VAR1Å66
SUMÅ0
AUXÅVAR1+17

ACUÅVAR1+5 SUMÅSUM+AUX+ACU

SUMÅ0+(66+17)+(66+5)

Como puede apreciar los valores son almacenados en bloque, claro que esta explicación
es muy simple, en realidad cada valor es almacenado en celdas 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 programación difiera de un programa de
aplicación.

Ing. Daniel Osorio Maldonado


Página 6 de 50
PROGRAMACION ORIENTADA A OBJETOS

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 solución de un
problema se realiza de manera directa y sin desviaciones o bifurcaciones.
DF
P1: Hallar el Area y la longitud de una circulo INICIO
Objeto_datos de Entrada:R (radio)
Objeto_datos de Salida :Area, Longitud
R
DIAGRAMA N – S
Pseudocodigo
Inicio INICIO S=pi*R*R
Leer R LEER R
Calculo del Área
CALCULAR S =pi*R*R
S=pi*R*R
CALCULA L=2*pi*R
Calculo de la longitud L=2*pi*R
L=2*pi*R ESCRIBE S,L
Escribir S,L FIN
Fin S, L

P2: Hallar la resultante de 02 Fuerzas que forman un ángulo ‘θ’.


Objeto_dato de Entrada: F1,F2, theta FIN
Objeto_dato de Salida : Resultante R
Pseudocodigo
Inicio
Leer F1,F2,theta
K=pi/180
Calculo de la Resultante
R= F12 + F 2 2 + 2 F1F 2 cos(thetaK )
ESCRIBIR R INICIO
FIN

DIAGRAMA N - S K=pi/180
INICIO
K=PI/180
LEER F1,F2,THETA F1,F2,θ
R = F12 + F 2 2 + F1F 2COS (θ * K
ESCRIBIR R
FIN
R= F12 + F 2 2 + 2 F1F 2 cos(θ * k )

P3. Desarrolle un algoritmo que permita simular el retiro


de dinero en billetes de mínima denominación de un cajero R
automático. El cajero solo emite billetes de las siguientes
denominaciones: 200, 100,50, 20 y 10 .
Objeto_dato de Entrada: Q //Cantidad FIN
Objeto_dato de Salida : b200, b100, b50, b20, b10
//denominación de billetes
Pseudocodigo

Ing. Daniel Osorio Maldonado


Página 7 de 50
PROGRAMACION ORIENTADA A OBJETOS

Inicio
INICIO
Leer Q
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)
Q=resto(Q/50)
Fin
b20=entero(Q/20)
N-S Q=resto(Q/20)
b10=entero(Q/10)
Leer Q
b200=entero(Q/200)
Q=resto(Q/200)
b100=entero(Q/100) b200,b100,b50,b20
Q=resto(Q/100) ,b10
b50=entero(Q/50)
Q=resto(Q/50)
b20=entero(Q/20)
FIN
Q=resto(Q/20)
b10=entero(Q/10)
Escribir b200,b100,b50,b20,b10
Fin

TEMA: INSTRUCCIONES QUE CONTROLAN UN PROGRAMA


Un programa en general debe estar sujeto a un control de su flujo, para ello las
estructuras de selección permiten al usuario tener un control del programa mediante el
uso de instrucciones de control, constituyendo mecanismos para dirigir el flujo de
ejecución. Dentro de estas tenemos:
a) Instrucción de Control Simple.
La estructura Si (Condicion) - Entonces
Proceso
Fin del Si
Indica a la computadora que efectúe una serie de una o mas instrucciones basadas en
el resultado de una comparación.
INICIO
DIAGRAMA NASSI_SCHNEIDERMAN(N-S)

CONDICION CONDICION

VERDAD (SI) PROCESO


PROCESO 1

PROCESO 2
Escribir
ESCRIBIR

FIN
FIN

Ing. Daniel Osorio Maldonado


Página 8 de 50
PROGRAMACION ORIENTADA A OBJETOS

b). Instrucción de Control de alternativa doble


Indica a la computadora que debera
realizar la comparación de 02
alternativas, si se cumple la INICIO
alternativa verdadera debera
realizar el proceso para esta
alternativa VERDADERA. En caso DATOS

contrario debera realizar la


alternativa FALSA. F V
CONDICION

Pseudocodigo PROCESO_F PROCESO_V


Si ( di ió ) V d d t

CONDICION

FALSO VERDADERO ESCRIBIR

PROCESO
ESCRIBIR
FIN

FIN

Ejemplos de alternativa simple


P1: Ingresar desde teclado un numero y emitir un mensaje si el numero ingresado es
par.
Solucion
Objetos datos 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” V
RESTO(A/2)=0
Fin del Si
Escribir Mensaje
Fin F
Mensaje= “PAR”

ESCRIBIR

FIN

Ing. Daniel Osorio Maldonado


Página 9 de 50
PROGRAMACION ORIENTADA A OBJETOS

P2: Ingresar 02 números y luego ordenarlos mediante un algoritmo de


menor a mayor
Solución
Objetos datos de entrada: A,B
Objeto dato de Salida: Ordenado
Pseudocodigo
Inicio
Leer A,B

INICIO

A,B

V
A>B

Tempo=A
F A=B
B=Tempo

ESCRIBIR
A, B

FIN

P3: Ingrese una edad y decir si es mayor de edad e imprimir la edad ingresada
Objeto_Dato de Entrada: Edad
INICIO
Objeto_Dato de Salida :Men y edad
Pseudocodigo
Inicio
E
Leer E
Si (E>=18) entonces V
Men= “Mayor de Edad” E>=18
Fin del Si
Escribir inicio Mayor de Edad
F
Men, E Leer E
Fin Si(E>=18)

VERDAD (SI) Men, E


Men= “Mayor de Edad”

ESCRIBIR
Men,E Fin
FIN

Ing. Daniel Osorio Maldonado


Página 10 de 50
PROGRAMACION ORIENTADA A OBJETOS

Ejemplos de INICIO
alternativa doble
P4: Se tienen 02 números A,B
ingresados desde teclado
verificar si A es divisible F V
A=0
por B emitiendo un
mensaje.
V Men= “A debe ser
Solucion B=0 diferente de cero”
Objetos Datos de Entrada:
A,B
Objetos Datos de Salida: F Men= “No es
Mensaje
posible la división
Inicio
Leer A y B
Si A=0 entonces
Men= “A debe ser diferente F V
A>B
de cero”
Si no
Si B=0 entonces Men= “A debe F V
Resto(A/B)=0
Men= “No es posible la ser mayor que B”
división”
Si no Men= “A no es Men= “A es
Si (A>B) entonces divisible por B” divisible por B”
Si (resto(A/B)=0)
Entonces
Men = “A es divisible ”
Si no
Men=”A no es divisible por B”
Fin del Si
Mensaje
Sino
Men=
“A debe se mayor que B” FIN
Fin del Si
Escribir Men
Fin

P5: Se tienen cuatro mensajes para las notas 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
Objeto_Dato de Salida :Mensaje
Pseudocodigo
Inicio
Leer Nota (N)
Si N>=17 entonces
Men=”Sobre Saliente”
Si no
Si N>=15 entonces
Men= “NOTABLE ”
Si N>=13 entonces
Men= “Aprobado”
Sino
Men= “Asistente”
Fin del Si
Fin del Si
Escribir Men

Ing. Daniel Osorio Maldonado


Página 11 de 50
PROGRAMACION ORIENTADA A OBJETOS

INICIO

F V
N>=17

F V Sobresaliente
N>=15

Men= “No es posible la división

V
N>=13

Asistente Aprobado

Mensaje

FIN

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

Ing. Daniel Osorio Maldonado


Página 12 de 50
PROGRAMACION ORIENTADA A OBJETOS

INICIO

A,B

F V
A>B

F V A mayor que B
A= B

B mayor que A A es igual a B

Mensaje

FIN

P5: Algoritmo que lee 02 números y nos dice cual es el mayor o son iguales

Pseudocodigo INICIO
Inicio
Leer A y B A,B
Si (A > B) entonces
A es mayor en B
Si no F
A>B
V

Si (A = B) entonces
A es igual a B F V A mayor que B
Si no A= B

B es mayor que A
Fin del Si B mayor que A A es igual a B

Fin del Si
Fin del Si
Escribir Mensaje
Fin Mensaje

FIN

Ing. Daniel Osorio Maldonado


Página 13 de 50
PROGRAMACION ORIENTADA A OBJETOS

P6: Un ejemplo con (sw): Algoritmo que lee un secuencia de notas (con valores que
van desde 0 a 10) que termina con el valor -1 y nos dice si hubo o no alguna nota con
valor 10.

Objeto_datos:
NOTA : variable para leer la secuencia.
SW :switch para controlar la aparición de notas 10 con
los siguientes significados:
FALSO :No hay nota 10
CIERTO :Si hay nota 10

INICIO

SWÅFALSO

LEER NOTA

T F
NOTA<>-1
T
T F T
NOTA=10 SW

SWÅCIERTO Escribir “Hubo 10”


F Escribir “No Hubo 10”

IMPRIME
LEER NOTA

FIN

Ing. Daniel Osorio Maldonado


Página 14 de 50
PROGRAMACION ORIENTADA A OBJETOS

Instrucción de Control con alternativas Múltiples


Conocido tambien como de Selección Multiple, tal es el caso
del “do Case”; “Case of”; “switch()”.
Permite tener un control de una Var_Selectora, como “condición” para varias
alternativas; dependiendo del Lenguaje de Programación la condición 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 múltiple

La Var_Selectora puede ser variable, expresión, función; empero, sin embargo, el valor
representado debe ser por decir lo menos, un valor escalar es decir un dato numérico
entero o un carácter. 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 acción o proceso.

Modo en que Funciona

(a) El valor de la Var_Selectora o(condición) se INICIO


evalúa en las alternativas uno a uno.
DATOS

(b) Si halla una coincidencia que contenga el


valor de la Var_Selectora, entonces ejecutara
Var_Selec
el proceso correspondiente dando por
finalizado la estructura, para luego buscar
otra coincidencia, y ejecutar.
Alternativa 1 Proceso 1
(c) Existe un termino que se usa
ocasionalmente y que representa la acción Alternativa 2 Proceso 2

cuando ninguna de las alternativas se


Alternativa 3 Proceso 3
cumple, es el caso del “si no” , el termino no
es obligatorio, pero permita clarificar una
aplicación. Alternativa N Proceso N

Pseudocodigo Alternativa X Proceso Desco


Definir Condición o var_Selectora
En Caso que (Var_Selctora) sea
Caso 1 proceso_1 Escribir
Caso 2 proceso_2
Caso 3 proceso_3
……………………….
FIN
Caso N proceso_N

Ing. Daniel Osorio Maldonado


Página 15 de 50
PROGRAMACION ORIENTADA A OBJETOS

Caso X proceso_Desconocido
Fin del Caso

DIAGRAMA N - S
1
CONDICIONANTE O
Proceso1 2 VAR_SELECTORA

proceso2 3
...
Proceso3
N X
ProcesoN Proceso x

Aplicación: Programar una operación Aritmética con 02 operandos: Operando1 y


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

Ing. Daniel Osorio Maldonado


Página 16 de 50
PROGRAMACION ORIENTADA A OBJETOS

INICIO
1
A
‘¿’
Inicializar constantes
Mas =’+’
Menos =’-’
Por =’*’ Op2<>0
Entre =’?’
Residuo =’¿’
Sin Solucion op1 ? op2
Potencia =’~’

Digite el Operador

‘~’ Op1~op2

op1, op2
‘X’
Desconocido

OPERADOR

‘+’ Op1+op2 IMPRIMIR


RESULTADO
‘-’
Op1-op2

‘*’
Op1*op2 FIN

‘?’
V
F
Op2<>0

Sin Solucion op1 ? op2

1
A

Instrucciones de Control Repetitivas


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 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 sólo 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

Ing. Daniel Osorio Maldonado


Página 17 de 50
PROGRAMACION ORIENTADA A OBJETOS

es comun usar la instrucción (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.

Instrucción 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 condición.se pueden representar:
Pseudocodigo
mientras (condición )
sea verdadera
proceso
fin del mientras

Diagrama Nassi_Schneiderman
V
CONDICION
O
LAZO F IMPRIMIR
MIENTRAS < CONDICION>
PROCESOS

Accion1
Accion2
FIN
Accion3

1. Desarrollar la suma de los primeros M términos de la siguiente suma:

a 2a 3a
D= + + +K
a + 2b 2a + 3b 3a + 4b
solucion: INICIO
definir objetos_datos E/S
objeto_dato de entrada: A,B,N. a,b,n
Objeto_dato de salida : SUMA DE N.
Pseudocodigo: S=0, i=1
Inicio
Leer a,b,n.
S=0 //acumulador i<=n
i=1 //contador
mientras(i<=n) hacer IMPRIMIR
S=S+((i.a)/(2i.a+(i+1).b) S=S+((i.a)/(2i.a+(i+1).b)
i=i+1
INICIO
fin del mientras
escribir S i=i+1
fin

Ing. Daniel Osorio Maldonado


Página 18 de 50
PROGRAMACION ORIENTADA A OBJETOS

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)=0
sp=2*i/(2*i-1)
fin del si F
sp=2*i/(2*i-1)
su=2*i/(2*i-1)
i=i+1
fin del mientras FIN
escribir su, sp
sp=2*i/(2*i-1)

i=i+1

Instrucción de control Repetitivo “hacer procesos mientras


(condición)
En este tipo de Instrucción 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 condición se
cumple, es muy parecida al “repeat until”
del Pascal. Proceso 1
Pseudocodigo
Hacer (procesos)
Proceso 2
mientras (condición ) sea verdadera
fin del hacer .
V
F
DIAGRAMA (N-S) Condición

PROCESO1
PROCESO2 Escribir

MIENTRAS CONDICION FIN

Ing. Daniel Osorio Maldonado


Página 19 de 50
PROGRAMACION ORIENTADA A OBJETOS

Problema de Aplicación
INICIO
Se ingresa un Numero de varias cifras,
y luego hallar la suma de sus cifras, el numero
invertido y la cifra mayor. Leer num
Por ejemplo 1234, la suma es:10, invertido es
4321 y la cifra mayor es 4.
Objetos_datos de entrada y Salida inversoÅ 0,Su Å 0, MÅ0
Objeto_Dato de Entrada: Numero
Objeto_Dato de Salida: Salida numero
invertido. dgtÅresto(num/10)

Pseudocodigo
Inicio inversoÅinverso*10+dgt
Su ÅSu+digito
Leer numero
Inicializar variables : inverso Å 0,
SuÅ0,MÅ0 V
dgt>M
Hacer
digitoÅ resto(M/10) MÅdgt
F
InversoÅ inverso*10+digito.
Su ÅSu+digito
Si (digito>M) entonces
numÅentero(nume/10)
M Ådigito
Fin del si
F
numero=entero(numero/10) V
Mientras(numero>0) num> 0
Escribir inverso, Su, M
Fin Inverso , Su, M

FIN

Esta instrucción “hacer procesos… mientras (condición) sea verdadera”, es


utilizada para consistenciar y controlar la repetición de un programa sin
necesidad de salir, dándole al usuario el control del mismo. Vea el siguiente
ejemplo:
Se desea hallar la suma de los primeros N términos de la siguiente serie:

1 2 3 4
S= − + − + ...
t +1 2t + 3 3t + 5 4t + 7

Ing. Daniel Osorio Maldonado


Página 20 de 50
PROGRAMACION ORIENTADA A OBJETOS

Instrucción de control Repetitivo for


Esta instrucción de control repetitivo considera: que el proceso debe iniciarse para un
valor inicial que vendría a ser el inicio del contaje, una segunda expresión que contiene
el valor máximo o mínimo 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
programación; 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
Para Vcont=Valor_inic,
desde/para vi=1 hasta vf de uno en uno Hacer Valor_fin,incremento
HACER
Proceso_A
Proceso_B
…………….. PROCESOA
Fin del desde/para PROCESOB
Diagrama N-S

desde/para de var_contador=Vi Hasta Vf IMPRIMIR


ProcesoA
ProcesoB
FIN
Fin desde/para

Ing. Daniel Osorio Maldonado


Página 21 de 50
PROGRAMACION ORIENTADA A OBJETOS

Aplicación
Se va a Ingresar un Número y la
INICIO
tarea consiste en mostrar todos los
divisores de ese número ingresado.
Cuando el numero Ingresado tiene Lee ne
por divisores a la unidad(1) o al
mismo numero mostrara un
ContDivi=0
mensaje diciendo “ El Numero es
Primo ”
para Divisor=1, hasta ne
SOLUCION
Objetos_Datos de ENTRADA Y
SALIDA V
Objejo_Datos de Entrada: el Resto(ne/Divisor)=0
Numero entero(NumeEnte)
Objeto_Dato de Salida : Escribir Divisor
numero de divisores(NumeDivi), F
mensaje
ContDivi=ContDivi+1
PSEUDOCODIGO
Inicio
Leer un Numero entero: NumeEnte
F V
Definir la variable Contador de ContDivi=2
Divisores e Inicializarla a 0
NumeDivi=0
Contabilizar los divisores y No es Primo Numero Primo
mostrarlos
PARA Divisor=1 HASTA
NumeEnte, HACER
MENSAJ
SI Residuo de
DIVISORE
NumeEnte/Divisor=0, ENTONCES
Escribir Divisor
ContDiv=ContDiv+1
Fin del SI FIN

Escribir mensaje
SI ContDiv=2,ENTONCES
MENSAJE “Numero Primo”
SINO
MENSAJE “No es Primo”
Fin del Si
Fin

Ing. Daniel Osorio Maldonado


Página 22 de 50
PROGRAMACION ORIENTADA A OBJETOS

HALLAR EL VOLUMEN DE UNA PIRAMIDE Diagrama de flujo


REGULAR DE BASE HEXAGONAL
Solución:
INICIO
Pseudocodigo
Inicio
Leer h, r
Aplicar la formula
h, r
r2 × h× 3
V =
2
v=h*sqrt (3)*pow(r,2) /2
Escribir V
Fin

Programa en Visual C++ v


#include<iostream.h>
#include<math.h>
main () {
double v,h,r; FIN
cout<<"ingrese la altura de la piramide
regular:" ; cin>>h; +++++++++++++++++++++++++++++++++
cout<<"ingrese el circunradio de la base de la cout<<"a=";cin>>a;
piramide regular:" ; cin>>r; cout<<"b=";cin>>b;
v=h*sqrt(3.0)*pow(r,2.0)/2.0 ; cout<<"c=";cin>>c;
cout<<"el volumen de la piramide regular de if(a>b)
base hexagonal es:"<<v; s=(a+b)*c/sqrt(a-b);
return (0); else
} cout<<"indeterminado"<<end;
cout<<"respuesta="<<s<<endl;
DESARROLLE LA SIGUIENTE FORMULA return(0);
}

( a + b) * c
S=
INICIO

a−b
Pseudocodigo A,B,C
Objeto dato de entrada: A,B,C
Objeto dato de salida: S
Inicio
Leer A,B,C F
Si (A>B) A>B
entonces
( A + B) * C V
S=
A− B
sino INDETERMINADO
Escribir indeterminado (A+ B)*C
Escribir S S=
Fin
Programa A− B
#include<iostream.h>
#include<math.h>
main() S
{float a,b,c;
double s;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"c=";cin>>c;
FIN

Ing. Daniel Osorio Maldonado


Página 23 de 50
PROGRAMACION ORIENTADA A OBJETOS

PROGRAMAR LA FORMULA CON V C++:


INICIO

a+b−c
S =3
a−2 A,B,C

Objeto dato de entrada: A,B,C


Objeto dato de salida: S
Pseudocodigo F
Inicio A>2
Leer A ,B, C
Si (A>2) entonces V
a+b−c
S =3
a−2 INDETERMINADO
A+ B−C
sino
Escribir “indeterminado”
S =3
Escribir S
A−2
Fin
Programa en Visual C++
#include<iostream.h> S
#include<math.h>
main(){
float a,b,c;
double s;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b; FIN
cout<<"c=";cin>>c;
if(a+b>=c&&a>2) Escribir k
s=pow(((a+b-c)/sqrt(a-2)),3); Fin
else Programa
cout<<"indeterminado"<<end; #include <iostream.h>
cout<<"respuesta="<<s<<endl; #include <math.h>
return(0); #include<ctype,h>
} main (){
int n,i;
Aplique Visual C++ para resolver: float a,b,c,s,k;double S=0;
a − 2b 3a − 4b 5a − 6b Obj char R;
S= − + − .... eto
3
c +1 3
3c + 3 3
5c + 5 s cout<<"ingrese el numero de terminos:";
dat cin>>n;
os de entrada: N,a,b,c cout<<"ingrese el valor numerico de a:";
Objetos datos de salida:S cin>>a;
Pseudocodigo cout<<"ingrese el valor numerico de b:";
Inicio cin>>b;
Leer N //No de Terminos cout<<"ingrese el valor numerico de c:";
Leer a,b,c cin>>c;
Para i=1 hasta N hacer for(int i=1; i<=n;i++){
si ((2i-1)a >= (2i)b )&&((2c-1)+(sqrt(2i-1)>0) if(si ((2*i-1)*a >= (2*i)*b )&&((2*c-1)+ (sqrt(2*i-
entonces 1)>0)
(2i + 1)a - (2i + 2)b
S = (−1) i (2i + 1)a - (2i + 2)b
3
(2i + 1)c + 2i + 1 S = S + (−1) i
sino
3
(2i + 1)c + 2i + 1
mensaje “No es posible La operación” else
fin del si cout<<”No es posible la Operación”
fin del para }
Cout<<” La suma = “<<S;

Ing. Daniel Osorio Maldonado


Página 24 de 50
PROGRAMACION ORIENTADA A OBJETOS

return(0); cout<<"\nLos lados nunca hacen un


} Triangulo"; }
cout<<"\nDesea Hacer otro Calculo[S][N]:?";

MISCELÁNEA opc=toupper(getch());
}while(opc=='S');
¾ Problemas propuestos en Practicas }
y exámenes tomados en la
Universidad Nacional de Ingeniería
(UNI) 2.- /*Programa que ordena en forma
ascendente los elementos
¾ En cada uno de los problemas
de la diagonal principal de una matriz
trate de resolverlos aplicando los
generando un vector con estos elementos
algoritmos y diagramas de flujo, y Definir Objetos Datos de Entrad y salida
luego vea la solución. Objeto_Dato de Entrada : n elementos a
¾ Los problemas se pueden resolver Ingresar
aplicando Visual C++ o Borland Objeto_Dato de Salida : Los elementos de
C++. la diagonal*/
¾ Para visual C++ no se considera #include <iostream.h>
las librería #include<conio.h> ni #include <conio.h>
#include<ctype.h> #include <ctype.h>
#include <stdlib.h>
¾ Tampoco getch() ni
#include <iomanip.h>
gotoxy(col,fil)
main(){
¾ Algunos problemas son propios. long max=43,min=1,i,j,n;
long k,temp;
double a[50][50],D[50];
1. //Calcula el área de un triangulo; los cout<<"\nMatriz a Calcular en forma
lados son creados aleatoriamente aleatoria: ";
#include<iostream.h> cout<<"\nCuantos elementos se van ha
#include<conio.h> ingresar : ";
#include<iomanip.h> cin>>n;
#include<ctype.h> randomize();
#include<math.h> cout<<"La Matriz Aleatoria es : "<<endl;
#include<stdlib.h> cout<<endl;
main(){ for(i=1;i<=n;i++)
float a,b,c,p; { for(j=1;j<=n;j++)
double at,k; {gotoxy(6*j,4+i);
char opc ; a[i][j]=random((max-min+1)+min);}
do{system("cls");//SOLO con Win 98 o }
Milenium for(i=1;i<=n;i++)
randomize(); { for(j=1;j<=n;j++)
cout<<"ingrese los lados del triangulo {gotoxy(6*j,4+i);
aleatoriamente :"; cout<<a[i][j];}
a=rand()%100; }
b=rand()%100; for(k=n;k>=2;k--)
c=rand()%100; { for(i=1;i<=k-1;i++)
cout<<"\na = "<<a; { if(a[k][k]<a[i][i])
cout<<"\nb = "<<b; { temp=a[k][k];
cout<<"\nc = "<<c; a[k][k]=a[i][i];
p=(a+b+c)/2; a[i][i]=temp;}
k=(p*(p-a)*(p-b)*(p-c)) ; }
if (k>0){ }
at=sqrt(k); gotoxy(7,10);cout<<"\nLa Matriz con la
cout<<"\nEl Area Total diagonal Ordenada es : "<<endl;
es:"<<setiosflags(ios::fixed|ios::showpoint); for(i=1;i<=n;i++)
cout<<setprecision(2)<<at<<endl;} {for(j=1;j<=n;j++)
else { {gotoxy(6*j,12+i);cout<<a[i][j];}
}

Ing. Daniel Osorio Maldonado


Página 25 de 50
PROGRAMACION ORIENTADA A OBJETOS

for(i=1;i<=n;i++) de 17 y luego guardarlos en un Vector


D[i]=a[i][i]; de la siguiente formula
cout<<"\nLa diagonal con los elementos es : (
1/ 3 n3 − n
79
)
D[i] :"; ∑1 2n 4 − n 2
for(i=1;i<=n;i++)
cout<<setw(3)<<D[i]; #include<iostream.h>
getch(); #include<conio.h>
} #include<math.h>
3.- /*calcular la media,la varianza y desviacion #include<stdlib.h>
standar ede n Valores (Mximo 37) int i,n;
aplicando las formulas: float A[50];
Media(X)=sigma desde i=1 hasta n (Xi)/n float leer(int n);
Defina Ud los Objetos Datos */ void show(float A[50]);
#include"iostream.h"
#include"conio.h" main( ){ randomize();
#include"iomanip.h" for (i=1;i<=17;i++){
#include"math.h" n=random (79-1+1)+1; {
#define Max 37 A[i]=leer(n); } }
int main() cout<<"el vector es:";
{ short N,i; show(A); }
float suma,media,varianza,dstandar,X[Max]; float leer(int n){
clrscr(); return (pow(n,3)-
do{cout<<"Ingresar numero de valores<1.." n)/(3.0*(2*pow(n,4)-pow(n,2))); }
<<Max<<">: "; cin>>N; void show(float A[50]){
cin.ignore();//ignora el enter for (i=1;i<=17;i++){
}while(N>Max); cout<<A[i]<<" "; } }
for(i=1;i<=N;i++) {
cout<<"Ingresar valor [" 5. /*PROGRAMA QUE CALCULA LA DIAGONAL
<<setw(2)<<i<<" ]:"; SECUNDARIA DE UNA MATRIZ,
cin>>X[i]; LA ORDENA Y CALCULA EL MCM DE SUS
cin.ignore(); ELEMENTOS*/
}//Hallar la media
suma =0.0; #include <iostream.h>
for(i=1;i<=N;i++) #include <stdlib.h>
{suma+=X[i]; #include <conio.h>
media=(float)suma/N;} void matriz(int a[20][20], int n){int i, j;
//Determinar la varianza y desviacion standar randomize();
suma=0; for(i=1;i<=n;i++){
for(i=1;i<=N;i++) for(j=1;j<=n;j++){
suma+=pow((X[i]-media),2); a[i][j]=random(9-1)+1;}}}
varianza=(float)suma/N;
dstandar=pow(varianza,0.5);//raiz //cuadrada void mostrar(int a[20][20], int n){ int i, j;
//Mostrar resultados clrscr();
cout<<endl for(i=1;i<=n;i++){
<<setiosflags(ios::fixed|ios::showpoint); for(j=1;j<=n;j++){
cout<<"Media :" gotoxy(10+3*j,4+i);cout<<a[i][j];}
<<setw(10)<<setprecision(3)<<media<<endl }cout<<endl;}
<<"Varianza :"
void sec_diag(int a[20][20], int diag2[20], int
<<setw(10)<<setprecision(3)<<varianza<<e n){
ndl int i, j=0;
<<"Desv.standar :" for(i=n; i>=1; i--){ j++;
<<setw(10)<<setprecision(3)<<dstandar<<e diag2[j]=a[i][j];}
ndl<<endl; cout<<"Diagonal sec: "<<endl;
getch();} for(i=1;i<=n;i++)
3. Genere al azar números comprendidos cout<<diag2[i]<<' ';
en el rango del 1 a 79 en un numero cout<<endl;
}

Ing. Daniel Osorio Maldonado


Página 26 de 50
PROGRAMACION ORIENTADA A OBJETOS

void crear(int matriz[20][20],int *n);


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

Ing. Daniel Osorio Maldonado


Página 27 de 50
PROGRAMACION ORIENTADA A OBJETOS

clrscr(); matriz[i][i]=matriz[i][cmin];
for(i=1;i<=n;i++) matriz[i][cmin]=aux[i];}
aux[i]=matriz[i][mid]; }
for(i=1;i<=n;i++) mostrar(matriz,n);}
if(i!=mid) void mostrar(int matriz[20][20],int n){
matriz[i][mid]=matriz[mid][i]; int i, j;
for(i=1;i<=n;i++) for(i=1;i<=n;i++)
matriz[mid][i]=aux[i]; {for(j=1;j<=n;j++)
mostrar(matriz,n); } cout<<matriz[i][j]<<" ";
void ultima(int matriz[20][20],int aux[20],int cout<<endl; }
n){ getch(); }
int i;
clrscr(); 7. //Programa que realiza operaciones con
for(i=1;i<=n;i++){ un polinomio
if(i!=n){ #include <iostream.h>
aux[i]=matriz[i][n]; #include <conio.h>
matriz[i][n]=matriz[n][i]; #include <math.h>
matriz[n][i]=aux[i]; #include <ctype.h>
} //prototipo de la funcion
} double polinomio(int,int,double[]);
mostrar(matriz,n);
} main() {
char tecla;
void mayor(int matriz[20][20],int aux[20],int double variable;
n) int grado,i;
{ int i, j, max=0, fmax=1, temp; do {
clrscr(); clrscr();
for(i=1;i<=n;i++) cout << "P(n) = A(n)X^n+A(n-1)X^n-1+A(n-
max+=matriz[1][i]; 1)X^(n-2)+... +A(1)X^1+A(0)X^0\n\n";
for(i=2;i<=n;i++){temp=0; cout << "Ingrese el grado del polinomio \"n\"
for(j=1;j<=n;j++) = ";cin >> grado;
temp+=matriz[i][j]; double* coeficiente = new double[grado+1];
if(temp>max) /*definimos un vector a la medida donde se
{ max=temp;fmax=i;}} almanenaran los coeficientes del polinomio*/
for(i=grado;i>=0;i--) {
for(i=1;i<=n;i++) cout << "Ingrese el coeficiente A("<<
{ i << ") del polinomio : ";
if(i!=fmax) cin >> coeficiente[i];
{ aux[i]=matriz[i][i]; }
matriz[i][i]=matriz[fmax][i]; cout << "\nIngrese el valor de la variable X :
matriz[fmax][i]=aux[i];}} ";cin >> variable;
mostrar(matriz,n);} cout << "\nEl resultado luego de evaluar el
void menor(int matriz[20][20],int aux[20],int polinomio es : "
n) <<
{ int i, j, min=0, cmin=1, temp; polinomio(variable,grado,coeficiente);
clrscr(); delete[] coeficiente; //borrando el vector
for(i=1;i<=n;i++) dinamico
min+=matriz[i][1]; cout << "\nDesea continuar (S/N) : ";cin >>
for(i=2;i<=n;i++) tecla;
{ temp=0; } while(toupper(tecla) == 'S');
for(j=1;j<=n;j++) clrscr();
temp+=matriz[j][i]; cout << "El programa ha finalizado";
if(temp<min) getch();
{ min=temp; cmin=i; } }
}
for(i=1;i<=n;i++) double polinomio(int variable,int grado,double
{if(i!=cmin) coeficiente[]) {
{ aux[i]=matriz[i][i]; return poly(variable,grado,coeficiente);

Ing. Daniel Osorio Maldonado


Página 28 de 50
PROGRAMACION ORIENTADA A OBJETOS

} 8.- //ENCUENTRA EL MAYOR DE tres


NUMEROS
8.- /*Programa que calcula la M_aritmatica, #include<iostream.h>
M_Geometrica, M_Armonica */ #include<conio.h>
#include<iostream.h> #include<iomanip.h>
#include<conio.h> #include<stdlib.h>
#include<math.h> int min(int *a,int *b,int *c,int &mayor);
#include<stdlib.h> main(){
#include<time.h>
int x,y,z,M;
double M_aritmetica(long A[], double &Ma); system("cls");
double M_geometrica(long A[], double &Mg); cout<<"INGRSE EL VALOR DE a:";cin>>x;
double M_armonica(long A[], double &Mh); cout<<"INGRSE EL VALOR DE b:";cin>>y;
cout<<"INGRSE EL VALOR DE c:";cin>>z;
int i, k, N, M; cout <<"el MAYOR de a="<<x<<"
float Ma, Mg, Mh; b="<<y<<"c="<<z<< "es "<<'
'<<min(&x,&y,&z,M);
main(){ getch();
}
long A[100];
clrscr(); int min(int *p,int *q,int *w,int &M){
cout<<"Ingrese el numero de elementos del int m,may;
arreglo: ";cin>>N; m=(*p>*q)? *p:*q;
randomize(); may=(m>*w)? m:*w;
cout<<"\nLa media aritmetica es: return(may);}
"<<M_aritmetica(A, Ma)
<<"\nLa media geometrica es: /*Programa que usa punteros a char, en este
"<<M_geometrica(A, Mg) caso se trata de del conocido
<<"\nLa media armonica es: programa del zodiaco, Colaboración de Carlos
"<<M_armonica(A, Mh); Rafo */
#include<iostream.h>
getch();} #include<conio.h>
#define N 12
double M_aritmetica(long A[], double &Ma){ #include<stdlib.h>
double Mt=0; #include<ctype.h>
for(i=1; i<=N; i++){
A[i]=rand()%100; cout<<' '<<A[i];} char *nombre(int b);
for(i=1; i<=N; i++) int signo(int n,int m);
Mt=Mt+A[i]; int
double SU=Mt/N; meses[N]={31,28,31,30,31,30,31,31,30,31,30,
return(SU);} 31};

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


double prod=1.0; int dd,mm,b;char rp; for(;;){
for(i=1; i<=N; i++) system("cls");
prod*=A[i]; do{
double MG=pow(prod,(1.0/N)); cout<<"Ingrese la Fecha de Nacimiento
return(MG); :"<<endl
} <<"\n Dia ...";cin>>dd;
cout<<"\n Mes ...";cin>>mm;
double M_armonica(long A[], double &Mh){ }while(dd>meses[mm-1]);
double SI=0; b=signo(dd,mm);
for(i=1; i<=N; i++) cout<<"\nSu SIGNO es :"<<nombre(b);
SI = SI + 1.0/A[i]; cout<<endl
double MH=N/SI; <<"Otro signo [S][N] :";
return(MH); rp=toupper(getch());
} if(rp=='N')break;}

Ing. Daniel Osorio Maldonado


Página 29 de 50
PROGRAMACION ORIENTADA A OBJETOS

} nos situamos en el siguiente entero de la lista,


int signo(int dd,int mm){ esto es *(lista+1) y lista[1]representan el
register int i; mismo valor. Notar que un incremento
int dias =0; de uno sobre una direccion equivale a vanzar
int j=0; no un byte, sino un numero de bytes igual al
int estrella[N]={20,50,79,110,140,171,201, tamanio de los objetos al que se esta tratando.
232,265,295,326,356}; Entonces es razonable pensar :
for(i=0;i<mm-1;i++) *(array+indice) o array[indice] es lo mismo
dias +=meses[i]; Puesto que *(lista+0) y lista[0], siendo "p" una
dias+=dd; variable de tipo puntero, la asignacion:
if(dias<=20 || dias>365) p=&lista[0] es la misma que la signacion
return(j); p=lista. Esto indica que la dirección de
else{ comienzo de un array es la misma que la
j=1; del primer elemento. Por otra parte, después
while(dias>estrella[j++]); de haber efectuado la asignación p= lista, las
} siguientes expresiones dan lugar a idénticas
return(j-1);} resultados:
char *nombre(int b){ p[ind],*(p+ind),lista[ind],*(lista+ind)
static char *astro[ sin embargo , hay una diferencia entre el
]={"Capricornio","Acuario","Picis","Aries","Taur nombre de un array y un puntero. el nombre
o","Geminis" de array es una constante y un puntero es una
,"Cancer","Leo","Virgo","Libra","Escorpio","Sagi variable, esto quiere decir que las operaciones:
tario"}; lista=p 0 lista++ no son correctas
return(astro[b]); p=lista 0 p++ si son correctas */
}

9.- #include<iostream.h> 10.-//Programa que permite hacer un


#include<conio.h> mantenimiento de registros
#include"time.h" #include<iostream.h>
#include"stdlib.h" #include<conio.h>
#include<stdio.h>
main(){ #include<string.h>
int lista[50]; struct registro
int ind,n,dd; {
system("cls"); int codigo;
cout<<"Ingrese el valor del Numero de char nombre[50];
Elementos : ";cin>>n; char direcion[50];
cout<<"\nElementos Ingresados : "<<endl; };
randomize();//permite la generación de
nuevos Numeros void crear(registro a1[50],int *n);
for(ind=0;ind<n;ind++){ void buscar(registro a2[50],int n);
dd=rand()%80; void listar(registro a3[50],int n);
lista[ind]=dd;} void ordenar(registro a4[50],int n);
for(ind=0;ind<n;ind++) void modificar(registro a5[50],int n);
cout<<"\n El elemento "<<ind<<" es : void adicion(registro a6[50],int*n);
"<<*(lista+ind); void eliminar(registro a7[50],int*n);
cout<<"\nLa dirección que apunta al vector main()
lista[] :"<<&(lista); {char opc;
getch(); } textbackground(15);
textcolor(2);
/* Como puede apreciar para acceder a los int m;
elementos del array es: *(lista+ind) registro a[50];
Esto deja constancia de que lista es la do{
direccion de comienzo del array. clrscr();
Si a esta dirección le sumamos 1,que quiere gotoxy(34,2);cout<<"menu";
decir que si ind vale 1, gotoxy(28,6);cout<<"1.- Crear";
gotoxy(28,7);cout<<"2.- Buscar";
gotoxy(28,8);cout<<"3.- Listar";

Ing. Daniel Osorio Maldonado


Página 30 de 50
PROGRAMACION ORIENTADA A OBJETOS

gotoxy(28,9);cout<<"4.- ordenar"; gotoxy(25,22);cout<<"REGISTRO


gotoxy(28,10);cout<<"5.- Modificar"; ADICIONADO";
gotoxy(28,11);cout<<"6.- Adicionar"; getch();
gotoxy(28,12);cout<<"7.-Eliminar"; }
gotoxy(28,13);cout<<"8.- Salir"; }
gotoxy(34,15);cout<<"opc ->"; void eliminar(registro a7[50],int*n)
cin>>opc; {int cod;
int i;
switch(opc) clrscr();
{ gotoxy(30,2);cout<<"ELIMINACION";
case'1':crear(a,&m);break; gotoxy(4,4);cout<<"Ingrese
case'2':buscar(a,m);break; codigo=";cin>>cod;
case'3':listar(a,m);break; for(i=1;i<=(*n);i++)
case'4':ordenar(a,m);break; if(cod==a7[i].codigo)
case'5':modificar(a,m);break; break;
case'6':adicion(a,&m);break; if(cod==a7[i].codigo)
case'7':eliminar(a,&m);break; {gotoxy(4,4);cout<<"NOMBRE:";a7[i].codigo;
}
}while (opc!='8'); gotoxy(4,6);cout<<"DIRRECCION:";a7[i].direci
} on;
a7[i].codigo=a7[i-1].codigo;
void crear(registro a1[50],int *n) (*n)=(*n)-1;
{int i; gotoxy(25,22);cout<<"REGISTRO
cout<<" k= "; ELIMINADO";
cin>>(*n); }
for(i=1;i<=(*n);i++) else
{cout<<"el Codigo"<<i<<":"; {gotoxy(25,22);cout<<"REGISTRO NO
cin>>a1[i].codigo; EXISTE";
cout<<"el Nombre"<<i<<":"; }
gets(a1[i].nombre); getch();
cout<<"la direccion"<<i<<":"; }
gets(a1[i].direcion); void buscar(registro a2[50],int n)
} {int cod,i,pos=0;
} clrscr();
void adicion(registro a6[50],int*n) cout<<"el codigo a buscar->";
{int cod; cin>>cod;
int i; for(i=1;i<=n;i++)
gotoxy(30,2);cout<<"ADICION"; if(cod==a2[i].codigo)
gotoxy(4,4);cout<<"Ingrese el {pos=i;
codigo=";cin>>cod; break;
for(i=(*n);i<=(*n);i++) }
if(cod==a6[i].codigo) if(cod==a2[i].codigo)
break; {cout<<"Nombre
if(cod==a6[i].codigo){gotoxy(25,22); es="<<a2[i].nombre<<endl;
cout<<"EL ERROR REGISTRO "; cout<<"la Direccion
} es="<<a2[i].direcion<<endl;
else }
{gotoxy(25,22);cout<<"INGRESE LA else
INFORMACION"; cout<<"el codigo hallado es";
getch();
gotoxy(4,6);cout<<"NOMBRE:";gets(a6[*n+1] }
.nombre); void ordenar(registro a4[50],int n)
{int i,j;
gotoxy(4,8);cout<<":";gets(a6[*n+1].direcion int temp;
); for (i=1;i<n;i++)
a6[*n+1].codigo=cod; for (j=i+1;j<=n;j++)
*n=*n+1; if (a4[i].codigo>a4[j].codigo)
{temp=a4[i].codigo;

Ing. Daniel Osorio Maldonado


Página 31 de 50
PROGRAMACION ORIENTADA A OBJETOS

a4[i].codigo=a4[j].codigo; #include<conio.h>
a4[j].codigo=temp; void LeerN(int &num){
} cout<<"Ingrese Numero Entero Cualquiera ";
} cin>>num;}
void modificar(registro a5[50],int n)
{ int i,cod; int numdiv(int num){
char campo; int nd=0;
clrscr(); for( int i=1; i<=num; i++)
gotoxy(30,2);cout<<"MODIFICACION"; if (num%i==0)
gotoxy(2,4);cout<<"codigo:";cin>>cod; nd++ ;
for(i=1;i<=n;i++) return nd;}
if(cod==a5[i].codigo) int primo(int num){
break; if (numdiv(num)==2)
if(cod==a5[i].codigo) return 1;
else
{gotoxy(2,6);cout<<"NOMBRE(1):"<<a5[i].no return 0;
mbre; }

gotoxy(2,8);cout<<"DIRECCION(2):"<<a5[i].d
irecion; main(){
gotoxy(30,20);cout<<"Indique campo a int num;
modificar(1)(2)"; LeerN(num);
cin>>campo; if ( primo (num))
switch(campo){ cout<<"El Numero "<<num<<"Es Primo \n";
case'1':gotoxy(14,6);cout<<" "; else
gotoxy(14,6);gets(a5[i].nombre); cout<<"El Numero "<<num<<"No es Primo
break; \n";
case'2':gotoxy(17,8);cout<<" "; cout<<"\nLos Primos Gemelos de los
gotoxy(17,8);gets(a5[i].direcion); primeros 400 Son \n";
break; for( int j=1; j<=400; j=j+2)
} if ((primo(j)==1)&&(primo(j+2)==1))
gotoxy(30,22);cout<<"Registro Modificado"; cout<<j<<' '<<j+2<<endl;
getch(); getch();
} }
else
{gotoxy(30,22);cout<<"Registro no hallado"; 12.- /*Programa graficos sen y cos
getch(); colaboración Ing. Rafo Lecca*/
} #include<iostream.h>
} #include<conio.h>
void listar(registro a3[50],int n) #include<stdio.h>
{int i; #include<math.h>
for(i=1;i<=n;i++){ #include<stdlib.h>
gotoxy(30,3); cout<<"el Listado es";
gotoxy(30,4);cout<<"---------"; typedef double (*F)(double);
gotoxy(10,5);cout<<"el codigo es"; void graph_1(F f);
gotoxy(25,5);cout<<"el nombre"; void tabulador(int x);
gotoxy(40,5);cout<<"la direccion";
gotoxy(5,6+i);cout<<i; main(){
gotoxy(10,6+i);cout<<a3[i].codigo; char c ; system("cls");
gotoxy(25,6+i);cout<<a3[i].nombre; cout<<"\nIngrese Seno/Coseno : ";
gotoxy(40,6+i);cout<<a3[i].direcion; c=getchar();
} if(c=='S'||c=='s')
getch(); graph_1(sin);
} else{
if(c=='C'||c=='s')
graph_1(cos);
11.- /*Primos Gemelos */ else cout<<"\nInconsistente ";
#include<iostream.h> }

Ing. Daniel Osorio Maldonado


Página 32 de 50
PROGRAMACION ORIENTADA A OBJETOS

getch(); float FUN(float x){


} return(pow(x,3));}

void graph_1(F f) 14.- /*Escriba un programa que analice los


{ numeros del 0 - 99,de tal forma
float a; que encuentre los nuemeros tales que la
int y; diferencia entre el numero inicial
for(a=0.0;a<3.0*M_PI;a+=0.50){ y el que se forma al invertir sus cifras sean 27
y=30+(int)20.0*(*f)(a); */
tabulador(y); #include<iostream.h>
cout<<"*\n"; #include<conio.h>
} main(){
} int N1,N2,N,NAUX,NUME,C27=0;
void tabulador(int x) { //cout<<"Ingrese un Numero :";cin>>N;
for(int i=1;i<=x;i++) for(N=0;N<=99;N++){
cout<<' '; N1=N/10;
} N2=N-N1*10;
NAUX=N2*10+N1;
13.- /*Una Integral . Suponga que una funcion //Calculamos la diferencia entre :
f es positiva en un intervalo D={a<=x<=b} NUME=N-NAUX;
Deseamos calcular el area bajo la curva y=f(x) if(NUME==27){
entre x=a y x=b C27++;
Desarrollado por Daniel Osorio Maldonado*/ cout<<':'<<"N ="<<N<<' '<<NAUX;}}
#include<conio.h> cout<<"\nLos Numeros que resultan igual a 27
#include<iostream.h> son :"<<C27;
#include<math.h> getch();}
#include<iomanip.h>
#include<stdlib.h> 15.- /*se ha lanzado al aire una moneda veinte
veces si el número de caras es mayor que el
void FU(float x); número de ellos, emitir un mensaje que diga
float SA(float a); "Suertudo!", caso contrario "Sin Suerte". */
float SB(float b); #include<stdlib.h>
float S(float a,float b); #include<iostream.h>
float FUN(float x); #include<conio.h>
main(){
main(){ int m,veces,cara=0,sello=0;
int i,N; randomize();
float a,b,Area,R,SUM,x,h; for (veces=0; veces<20; veces++) {
//system("cls"); m=random(95)/10;
cout<<"Ingrese los Valores de a ";cin>>a; if (m%2==0)
cout<<"Ingrese los Valores de b ";cin>>b; cara++;
cout<<"Ingrese el # de Secciones :";cin>>N; else
cout<<"Los Valores Parciales son:"<<endl sello++;
<<"Suma de A "<<FUN(a)<<endl } // fin del for
<<"Suma de B "<<FUN(b); cout<<"La moneda fue lanzada 20 veces\n";
cout<<"\nSea La funcion de finida cout<<"cayo CARA "<<cara<<" veces.\n";
:FUN=2*x*x-5*x+3 "; cout<<"cayo SELLO "<<sello<<" veces.\n";
FUN(x); if (cara>sello)
h=(b-a)/N; cout<<"SUERTUDO\n";
SUM=FUN(a)+FUN(b); else
for(i=1;i<=N ;i++) cout<<"SIN SUERTE\n";
SUM=SUM+2*FUN(a+i*h); getch();}
Area=(h*SUM)/2;
cout<<"\nEl Area de la seccion es :"<<Area; 16.- /*se tiene un número de varias cifras, se
quiere averiguar cuantas cifras pares y
getch(); cuantas impares
} lo componen. Luego hallar la suma de las
cifras colaboración: Vasques Paragrulla */

Ing. Daniel Osorio Maldonado


Página 33 de 50
PROGRAMACION ORIENTADA A OBJETOS

#include<iostream.h> f=f+2;
#include<conio.h> if (i==(27/2))
main(){ cout<<"\n valor central : "<<'
long N; '<<"1/"<<m;
int dpar=0, dimpar=0,digito,total=0,suma=0; }
cout<<"Ingrese un # de varias cifras : "; }
cin>>N; void sumlat()
while (N>0){ {
digito=N%10; int m=0,f=3,li,lf;
if (digito%2==0) for (int i=1;i<=27;i++)
dpar++; { if (i==(27/2))
else { li=m;
dimpar++; cout<<"\nsuma de laterales del valor
total++; central: "<<' '<<"1/"<<li<<"+";
suma=suma+digito; }
N=N/10; m=m+f;
} f=f+2;
cout<<"\ndigitos pares = "<<dpar<<endl
<<"\ndigito impares = if (i==(27/2)+1)
"<<dimpar<<endl {lf=m;
<<"\nLa suma de los digitos es=
"<<suma<<endl cout<<"1/"<<lf<<"="<<((1.0/li)+(1.0/lf));
<<"\nTotal digitos ingresados = "<<total; }
getch(); }
} }
main() {
imprime();
valcen();
17.- /* Realizar un programa que permita sumlat();
hallar la secuencia, el valor central y getch(); }
la suma de sus laterales de los primeros 27
terminos de la serie : 0 1/3 1/8 1/15 1/24 19.- /*los primeros 27 terminos de la serie son
1/35 1/48 1/63 1/80 1/99 1/120 1/143 1/168 :0 1/3 1/8 1/15 1/24 1/35 1/48 1/63 1/8
1/195 1/224 1/255 1/288 1/323 1/360 1/399 0 1/99 1/120 1/143 1/168 1/195 1/224 1/255
1/440 1/483 1/528 1/575 1/624 1/675 1/728 1/288 1/323 1/360 1/399 1/440 1/483 1
*/ /528 1/575 1/624 1/675 1/728 valor central :
#include <iostream.h> 1/224
#include<conio.h> suma de laterales del valor central:
void imprime() 1/195+1/255=0.00904977*/
{int m=0,f=3;
cout<<"los primeros 27 terminos de la serie // adivina un numero de un dado
son :" ; #include<iostream.h>
for (int i=1;i<=27;i++) #include<conio.h>
{if (i==1) #include<stdlib.h>
cout<<m; main(){
else int Ls=6,Li=1,N,M;randomize();
{m=m+f; do{
f=f+2; cout<<"Ingrese un numero [1...6]";
cin>>N;
cout<<' '<<"1/"<<m; }while(N<1||N>6);
}
} M=random(Ls-Li+1)+Li;
} if(N==M)
void valcen( ) cout<<"Ud. Acerto ";
{ else
int m=0,f=3; cout<<"Ud. No acerto ";
for (int i=1;i<=27;i++) getch();}
{ m=m+f;

Ing. Daniel Osorio Maldonado


Página 34 de 50
PROGRAMACION ORIENTADA A OBJETOS

20.- /*Escriba un programa que calcule el seno


de 3 radianes a partir de la serie void leer()
senx=x-x^3/3! + x^5/5! + x^7/7! +....para {
N=1,2,3,....8.Compare cada respuesta randomize();
con la suministrada por la funcion de biblioteca for(i=0;i<n;i++)
Sin(x)*/ for(j=0;j<n;j++)
#include<iostream.h> A[i][j]=rand()%100;
#include<conio.h> imprimir();
#include<math.h> }
main(){ void imprimir()
int x=3,N=8,K; {
float termino=x; for(i=0;i<n;i++){
float senx=x; for(j=0;j<n;j++)
K=1; cout<<setw(5)<<A[i][j];cout<<"\n"; }
cout<<"\tN \tsen x \t sin(x) "; }
for(int i=1;i<=N;i++){
termino=-termino*x*x/((K+1)*(K+2)); void suma_may()
senx=senx+termino; {
cout<<" sum_may[j]=0;
\n\tSenx="<<senx<<"\tsin(x)="<<sin(x); for(j=0;j<n;j++)
K=K+2;} for(i=0;i<n;i++)
getch();} sum_may[j]=A[i][j]+sum_may[j];

21.- //Operaciones con elementos de una for(j=0;j<n;j++){


Matrix if(sum_may[j]>mayo) {
#include<iostream.h> mayo=sum_may[j]; colM=j;} }
#include<conio.h> cout<<"\nLa suma Mayor es:"<<mayo;
#include<process.h> cout<<"\nLa columna de dicha suma
#include<stdlib.h> es:"<<colM+1;
#include<iomanip.h>
#include<ctype.h> }

#define n 6 void suma_menor()


{
void imprimir(); sum_men[j]=0;
void leer(); for(j=0;j<n;j++)
for(i=0;i<n;i++)
void suma_may(); sum_men[j]=A[i][j]+sum_men[j];
void suma_menor();
void resultante(); for(j=0;j<n;j++){
if(sum_men[j]<menor) {
float sum_may[10]; menor=sum_men[j]; colm=j;} }
float sum_men[10]; cout<<"\n\nLa suma Menor es:"<<menor;
int A[6][6],i,j,mayo=0,menor=800; cout<<"\nLa columna de dicha suma
int colM; es:"<<colm+1;
int colm;
}
main(){ void resultante(){
//cout<<"Ingrese el orden de la for(i=0;i<n;i++){
matriz:";cin>>n; for(j=0;j<n;j++) {
cout<<"La matriz generada es:\n";leer(); if(j==colM){
suma_may(); cout<<setw(5)<<A[i][colm];if(colM==6)cout<
suma_menor(); <"\n";}
cout<<"\n\nLa matriz conbinada if(j==colm){
es:\n";resultante(); cout<<setw(5)<<A[i][colM];if(colm==6)cout<
getch(); <"\n";}
} if(j!=colM && j!=colm)
cout<<setw(5)<<A[i][j]; }

Ing. Daniel Osorio Maldonado


Página 35 de 50
PROGRAMACION ORIENTADA A OBJETOS

cout<<"\n"; } for(TipoDeGol=0;TipoDeGol<2;TipoDeGol++)
Equipo[cont][TipoDeGol]=0;
22.=/* Campeonato de Futbol
INTERFACULTADES: Se juega con 06 equipos //Generar resultados aleatorios
cada uno juega juega 6 partidos. randomize();
Se desea "simular" los resultados de dicho for(partido=1;partido<=NumEquipos-
campeonato generando aleatoriamente el 1;partido++)
Numero de goles que "consigue" y "recibe" for(cont=0;cont<NumEquipos;cont++)
cada equipo en cada partido .el ganador sera for(TipoDeGol=0;TipoDeGol<2;TipoDeGol++)
aquel que tenga la mayor dierencia de goles al Equipo[cont][TipoDeGol]+=random(GolesMax)
final del campeonato.si en caso no ;
hubiera un solo ganador, dar el mensaje //Determinar diferencia de goles por equipo
correspondiente.Asumir que en un partido de for(cont=0;cont<NumEquipos;cont++)
no puede haber mas 12 goles recibidos o DifGoles[cont]=Equipo[cont][0]-
anotados por un equipo Equipo[cont][1];
DEFINIR Objetos_Datos Entrada y salida
Objeto_Datos de Entrada: Ninguno //Determinar el equipo que tiene mayor
Objeto_Datos de Salida: Nombre de los diferencia de goles mayor=0;
equipos (Nombre []) for(cont=0;cont<NumEquipos;cont++)
goles a favor por equipo(Equipo[]) {
goles en contra por equipo (Equipo[]) if(DifGoles[cont]>mayor)
diferencia de goles por equipo (DifGoles[]) {
nombre del equipo ganador mayor=DifGoles[cont];
(Nombre[ganador]) ganador=cont;
}
mensaje*/ }
#include<iostream.h> //Determinar si hay mas de un ganador
#include<conio.h> ganauno=True;//asumir que hay uno solo
#include<iomanip.h> for(cont=0;cont<NumEquipos;cont++)
#include <string.h> if((DifGoles[cont]==mayor)&&(cont
#include <stdlib.h> !=ganador))
#include <ctype.h> ganauno=False;
//Escribir titulos
//Definicion de constantes clrscr();
#define NumEquipos 6
#define GolesMax 12 cout<<setw(15)<<"Equipos"<<setw(19)<<"G
#define False 0 .Favor" <<setw(15)<<"G.Contra"
#define True 1 <<setw(15)<<"Diferencia" <<endl;
//funcion principal //Escribir resultados
main(){ for(cont=0;cont<NumEquipos;cont++){
short Equipo[NumEquipos][2]; //arreglo de cout<<setw(2)<<(cont+1)<<')'
goles a favor y en contra de cada equipo <<setiosflags(ios::left)
int DifGoles[NumEquipos]; //arreglo de <<setw(20)<<Nombre[cont]
diferencia de goles de cada equipo <<resetiosflags(ios::left)
char Nombre[NumEquipos][40]= //arreglo <<setw(10)<<Equipo[cont][0]
de nombres <<setw(15)<<Equipo[cont][1]
{"FACULTAD MECANICA", <<setw(15)<<DifGoles[cont]
"FACULTAD CIVILES", <<endl; }
"FACULTAD ARQUITECTU", cout<<endl;
"FACULTAD IND-SISTEMA", if(ganauno)
"FACULTAD CIENCIAS", cout<<"Equipo Ganador :"
"FACULTAD ECONOMIA"}; <<Nombre[ganador];
short cont,ganador,partido,mayor,TipoDeGol; else
short ganauno; cout<<"Hay empate para el primer Lugar ";
char opc; cout<<"\nOtra Prueba [S][N]:";
for(;;){clrscr(); opc=toupper(getch());
//Inicializar a todos los equipos con 0 goles if(opc=='N')break;}
for(cont=0;cont<NumEquipos;cont++) } Resultado

Ing. Daniel Osorio Maldonado


Página 36 de 50
PROGRAMACION ORIENTADA A OBJETOS

/*Equipos G.Favor G.Contra Difer d3=rand()%5+1;


1)MECANICA 39 31 8 cout<<"\n\n\nEl valor del primer dado
2)CIVILES 37 39 -2 es:"<<d1;
3)ARQUITEC 30 46 -16 cout<<"\n\nEl valor del segundo dado
4)INDUS-SISTEMA 32 26 6 es:"<<d2;
5)CIENCIAS 26 44 -18 cout<<"\n\nEl valor del tercer dado es:"<<d3;
6)ECONOMIA 31 29 2 if ((d1==d2)&&(d2==d3))
Equipo Ganador: FACULTAD MECANICA cout<<"\n\n Felicidades usted ha ganado 8
Otra Prueba [S][N]:*/ puntos!!!!!!!";
if
23.- /* Escriba un programa que lea un (((d1==d2)&&(d2!=d3))||((d2==d3)&&(d3!=
entero positivo N>=10 y calcule el d1))||((d1==d3)&&(d3!=d2)))
producto cout<<"\n\nBien, usted ha ganado 4
(1/1^2)X(3/2^2)X(5/3^2)X....2N-1/N^2 puntos!!!!!!!!";
*/
#include"iostream.h" if(d1==d2+1 && d1==d3+2)
#include"iomanip.h" cout<<"\n\nTu puntaje es de 6 puntos!!!";
#include "ctype.h" if(d2==d3+1 && d2==d1+2)
#include"conio.h" cout<<"\n\nTu puntaje es de 6 puntos!!!!";
#include"math.h" if(d3==d1+1 && d3==d2+2)
main(){ cout<<"\n\nTu puntaje es de 6 puntos!!!";
double P=1.0; if(d1==d3+1 && d1==d2+2)
long N,M=1.0 ; cout<<"\n\nTu puntaje es de 6 puntos!!!";
float denominador,numerador; if(d2==d1+1 && d2==d3+2)
unsigned conta=1; cout<<"\n\nTu puntaje es de 6 puntos!!!";
cout<<"Ingrese el Numero de Terminos if(d3==d2+1 && d3==d1+2)
:";cin>>N; cout<<"\n\nTu puntaje es de 6 puntos!!!";
while(conta<=N){
denominador=pow(M,2); if(d1==d2+1 && d1!=d3)
numerador=2*M-1; if(d1==d2+1 && d2!=d3)
P=P*numerador/denominador; if(d1==d2+1 && d3!=d1+1)
M=M+1; if(d1==d2+1 && d3!=d2+1)
conta++; if(d1==d2+1 && d2!=d3+1)
} cout<<"\n\nTu puntaje es de 2 puntos!!!!";
cout<<"\nEl Producto es :"<<P;
getch(); } if(d2==d3+1 && d2!=d1)
if(d2==d3+1 && d3!=d1)
24.- //PROGRAMA QUE SIMULA EL TIRO DE 3 if(d2==d3+1 && d1!=d2+1)
DADOS CON PUNTAJE if(d2==d3+1 && d1!=d3+1)
#include<iostream.h> if(d2==d3+1 && d3!=d1+1)
#include<conio.h> cout<<"\n\nTu puntaje es de 2 puntos!!!";
#include<stdlib.h>
main() if(d3==d1+1 && d3!=d2)
{ if(d3==d1+1 && d1!=d2)
int d1,d2,d3,ptos; if(d3==d1+1 && d2!=d3+1)
char c; if(d3==d1+1 && d2!=d1+1)
gotoxy(22,2); if(d3==d1+1 && d1!=d2+1)
cout<<"PROGRAMA QUE SIMULA EL TIRO DE cout<<"\n\nTu puntaje es de 2 puntos!!!!1";
3 DADOS CON PUNTAJE";
cout<<"\n\nPara lanzar los dados pulse una if(d2==d1+1 && d1!=d3)
tecla"; if(d2==d1+1 && d2!=d3)
cout<<"\n\nPara finalizar pulse la tecla \"o\" "; if(d2==d1+1 && d3!=d2+1)
randomize(); if(d2==d1+1 && d3!=d1+1)
do if(d2==d1+1 && d1!=d3+1)
{ cout<<"\n\nTu puntaje es de 2 puntos!!!!";
c=getch();
d1=rand()%5+1; if(d3==d2+1 && d2!=d1)
d2=rand()%5+1; if(d3==d2+1 && d3!=d1)

Ing. Daniel Osorio Maldonado


Página 37 de 50
PROGRAMACION ORIENTADA A OBJETOS

if(d3==d2+1 && d1!=d3+1) double SumTer(int NumTer)


if(d3==d2+1 && d1!=d2+1) {short Cont=0;//Contador =0
if(d3==d2+1 && d2!=d1+1) int ValTer=1;//primer termino = 1
cout<<"\n\nTu puntaje es de 2 puntos!!!!"; int Increme=1;//primer incremento=1
unsigned suma=0;
if(d1==d3+1 && d3!=d2) while(Cont<NumTer){
if(d1==d3+1 && d1!=d2) Cont++;
if(d1==d3+1 && d2!=d1+1) suma+=ValTer;
if(d1==d3+1 && d2!=d2+1) cout<<"\nValor del termino "<<Cont<<"-
if(d1==d3+1 && d3!=d2+1) >"<<ValTer;
cout<<"\n\nTu puntaje es de 2 puntos!!!!"; ValTer+=Increme;
}while (c!='o' && c!='O'); Increme+=Cont;}
} return(suma);
}
25.- /* Programa que calcula el descuento de main()
salario por faltas y seguro.Usando {
punteros a funciones*/ int N,Cont;
LeerN(N);
#include<iostream.h> cout<<"\nLa Suma de Los "<<Cont<<"
#include<conio.h> primeros Terminos Es: "<<SumTer(N);
getch();
float planilla(float smes,int falt,float *desc); }
/*Ingrese el valor del Numero de terminos :10
main(){
float sueldo,neto,descuento; Valor del termino 1->1
int faltos; Valor del termino 2->2
Valor del termino 3->4
cout<<"SUELDO MENSUAL :"; Valor del termino 4->8
cin>>sueldo; Valor del termino 5->15
cout<<"SE DESCONTARA EL %9.5 DE SU Valor del termino 6->26
SUELDO POR AFP"<<endl; Valor del termino 7->42
cout<<"FALTAS : "; Valor del termino 8->64
cin>>faltos; Valor del termino 9->93
Valor del termino 10->130
neto=planilla(sueldo,faltos,&descuento); La Suma de Los 0 primeros Terminos Es: 385
*/
cout<<"DESCUENTOS=
"<<descuento<<endl; 27.- //Programa que separa de una frase las
cout<<"NETO A PAGAR="<<neto; getch(); palabras
} #include<iostream.h>
#include<conio.h>
#include<stdio>
float planilla(float smes,int falt,float *desc) #include<ctype.h>
{ float p; #include<stdlib.h>
*desc=((smes)*0.095)+((smes*falt)/30); #define LMAX 20
p=smes-(*desc);
return(p); } int separar(char subcad[ ][LMAX],char *cad){
int i=0, j, k=0;
26. -/*Programa que imprime los primeros N do{while(cad[i]==' ') i++;
Terminos de la serie if (cad[i]=='\0') break;
1 2 4 8 15 26 42 64…. */ j=0;
#include<iostream.h> while((cad[i]!=' ')&&(cad[i]!='\0')){
#include<conio.h> subcad[k][j]=cad[i];
#include<stdlib.h> i++;j++;
void LeerN(int &NumTer){ }
cout<<"Ingrese el valor del Numero de subcad[k][j]='\0';
terminos :"; k++; }
cin>>NumTer;} while(cad[i]!='\0');

Ing. Daniel Osorio Maldonado


Página 38 de 50
PROGRAMACION ORIENTADA A OBJETOS

return k;}; cout<<"Ingrese el coeficiente de y :";cin>>b;


cout<<"Ingrese el coeficiente de C :";cin>>C;
main(){ }
int i,cant;
char cadena[200] ; void Puntos(int &p){
char arcad[50][LMAX]; cout<<"\n\tEl Numero de Puntos es :"
char pmc; <<p;
for(;;) {system(“cls”); }
cout<<"\n\ningresar una void limites(int &X,float &Y){
frase(cadenas)\n\n"; cout<<"\n\t El Limite de X es :"<<X
gets(cadena); <<"\n\t El Limite de Y es "<<Y;
cant=separar(arcad,cadena); }
cout<<"\n\nnumero de palabras:
"<<cant<<"\n\npalabras:\n\n "; 29.- //Mediante structuras realizar un
for(i=0;i<cant;i++) programa que siga la secuencia ….
cout<<arcad[i]<<"\n"; #include<iostream.h>
cout<<"\n\ndesa separar otras frase? [S][N] " #include<conio.h>
; #include<iomanip.h>
pmc=toupper(getch()) ; #include<stdlib.h>
if(pmc=='N') struct serie{
break; } int x;};
getch(); } void ingresar(serie &n);
void mostrar(serie &a,serie&b,serie&n);
28.-/*Encuentre el Numero de puntos con
coordenadas enteras que estan dentro main(){
de la elipse de la forma ax^2 +bx^2=C serie a,b,n;
*/ ingresar(n);
#include<iostream.h> mostrar(a,b,n);
#include<conio.h> getch();
#include<math.h> }
int elipse(float a,float b,float C);
void leer(float &a,float &b,float &C); void ingresar(serie &n){
void Puntos(int &p); clrscr();
void limites(int &X,float &Y); cout<<"Ingrese el numero de términos: ";
int x,y,radio,i,p,P;//var. blobales cin>>n.x;}
float a,b,C;
int lx,ly,X,Y; void mostrar(serie&a,serie&b,serie&n){
main(){ int t;
leer(a,b,C); clrscr();
cout<<elipse(a,b,C); t=n.x;
limites(X,Y); cout<<"Los "<<t<<" primeros terminos de la
Puntos(p); serie son: "<<endl;
getch();} for(int i=0;i<t;i++){
a.x=(2*i)+1;
int elipse(float a,float b,float C){ b.x=(2*i)+3;
X=sqrt(C/a); cout<<a.x<<"/"<<b.x<<" , ";}}
Y=sqrt(C/b);
for(x=-X;x<=X;x++){ 30./*Programa que simula los lados de un
for(y=-Y;y<=Y;y++) triangulo isosceles calcula el baricentro …..*/
if(a*x*x+b*y*y<C) #include<conio.h>
{p++; #include<iostream.h>
cout<<"\n\tValor de x:"<<x<<' '<<"Valor #include<math.h>
de y:"<<y<<"\t\a";} #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);
void leer(float &a,float &b,float &C){ float angulo(int x,int y,int z,int w);
cout<<"Ingrese el coeficiente de x :";cin>>a;

Ing. Daniel Osorio Maldonado


Página 39 de 50
PROGRAMACION ORIENTADA A OBJETOS

void baricentro(int x,int y,int z,int w,int p,int }


q); if(y==z)
void main() {an=asin(2.0*w/(y*x));
{randomize(); }
int a,b,c,d,m,n; return(an);
float A,B,C,p,s,ang; }
int i=0; void baricentro(int x,int y,int z,int w,int p,int q)
do{ {float X,Y;
leer(a,b); X=(x+y+z+0.0)/3;
leer(c,d); Y=(w+p+q+0.0)/3;
leer(m,n); cout<<"\n"<<"LA COORDENADA DEL
A=sqrt(pow(a-c,2)+pow(b-d,2)); BARICENTRO ES : ";
B=sqrt(pow(a-m,2)+pow(b-n,2)); imprimir(X,Y);
C=sqrt(pow(m-c,2)+pow(n-d,2)); }
if(A==B)i=1;
if(A==C)i=1; 31. /* Se tienen 02 Jugadores y cada uno va
if(B==C)i=1; ha lanzar un dado 07 veces el que
if((A==0)||(B==0)||(C==0))i=0; tenga mayor suma acumulada gana */
}while(i==0); #include<iostream.h>
cout<<" EL PRIMER PUNTO ES : "; #include<conio.h>
imprimir(a,b); #include<stdio.h>
cout<<" EL SEGUNDO PUNTO ES : "; #include<stdlib.h>
imprimir(c,d); #include <ctype.h>
cout<<" EL TERCER PUNTO ES : "; #define mensaje "\n Otra Prueba [S][N]"
imprimir(m,n); main(){
cout<<"LOS LADOS DEL TRIANGULO SON : for(;;){clrscr();
"<<"A = "<<A<<" B= "<<B<<" C= randomize();
"<<C; int i,j,h,k,suma1=0,suma2=0;
p=((A+B+C)+0.0)/2; int v[100];
s=area(A,B,C,p); int w[100];
cout<<"\n"<<" EL AREA DELTRIANGULO ES char nom1[20];
IGUAL: "<<s; char nom2[20];
ang=angulo(A,B,C,s);
cout<<"\n"<<"EL ANGULO ES : "<<ang; cout<<"=======================
baricentro(a,c,m,b,d,n); ======================="<<endl;
getch(); cout<<"Empieza el Juego"<<endl;
} cout<<"=======================
void leer(int &x,int &y) ======================="<<endl;
{ cout<<"Ingrese nombre del primer jugador:
x=rand()%98; ";cin>>nom1;
y=rand()%98; for(i=1;i<=7;i++)
} {cout<<"Jugada numero "<<i;cout<<": ";
void imprimir(int x,int y) v[i]=random(6)+1;
{cout<<"\n"<<" ( "<<x<<" ; "<<y<<" ) h=v[i];
"<<"\n"; cout<<v[i]<<endl;
} suma1=h+suma1;
float area(int x,int y,int z,int w) }
{float S; cout<<endl<<"La suma es:
S=sqrt(w*(w-x)*(w-y)*(w-z)); "<<suma1<<endl;
return(S); cout<<"=======================
} ======================="<<endl;
float angulo(int x,int y,int z,int w) cout<<"Ingrese nombre del segundo jugador:
{float an; ";cin>>nom2;
if(x==y) for(j=1;j<=7;j++)
{an=asin(2.0*w/(x*z)); {cout<<"Jugada numero "<<j;cout<<": ";
} w[i]=random(6)+1;
if(x==z) cout<<w[i]<<endl;
{an=asin(2.0*w/(x*y)); k=w[i];

Ing. Daniel Osorio Maldonado


Página 40 de 50
PROGRAMACION ORIENTADA A OBJETOS

suma2=suma2+k; cout<<endl;
} //mostrando las matrices:
cout<<endl<<"La suma es: cout<<"las matrices son:"<<endl ;
"<<suma2<<endl; for( i=0;i<n;i++)
{for( j=0;j<n;j++)
cout<<"======================= { cout<<setw(5)<<vector1[i][j];
====================="<<endl; }
cout<<endl;
if(suma1>suma2){ }
cout<<"El ganador es: "<<nom1;} cout<<endl;
if(suma2>suma1){ for( i=0;i<n;i++)
cout<<"El ganador es: "<<nom2;} {for( j=0;j<n;j++)
if(suma2==suma1){ { cout<<setw(5)<<vector2[i][j];
cout<<"Empataron ";} }
cout<<mensaje; cout<<endl;
if(toupper(getch())=='N')break; }
}} cout<<endl;
for( i=0;i<n;i++)
32. /*programa que permite crear una matriz {for( j=0;j<n;j++)
para después crear un vector que puede {
sumar a cada cout<<setw(5)<<vector1[i][j]+vector2[i][j];
uno de los elementos de la matriz*/ }
#include<iostream.h> cout<<endl;
#include<conio.h> }
#include<iomanip.h> getch();
main() { }/* Como tarea genere Ud. La Matriz de
int vectorsuma[20][20]; Manera aleatoria y genere el vector
int vector1[20][20]; aleatoriamente */
int vector2[20][20];
int n,i,j; 33. //Programa que usa punteros a
cout<<"Ingrese la matriz cuadrada n:"; estructuras en este caso halla un modulo y la
cin>>n; //suma de sus elementos
for( i=0;i<n;i++) #include<iostream.h>
{ for( j=0;j<n;j++) #include<conio.h>
{cout<<"Ingrese los valores del vector1 #include<math.h>
["<<i+1<<"],["<<j+1<<"]:"; #include<ctype.h>
cin>>vector1[i][j]; struct complex{
} double x,y;
} void leerxy(double a,double b);
cout<<endl; double comp_abs(complejo *Z);
for( i=0;i<n;i++) double sumaxy(complejo *w);
{ for( j=0;j<n;j++) };
{cout<<"Ingrese los valores del void complejo::leerxy(double a, double b)
vector2["<<i+1<<"],["<<j+1<<"]:"; {x=a;y=b;}
cin>>vector2[i][j];
} double complejo::comp_abs(complejo *z)
} {return(sqrt((z->x*x+z->y*y)));}
cout<<endl;
cout<<"entonces el vectorsuma double complejo::sumaxy(complejo *w)
sera:"<<endl; {return(w->x+w->y);}
for( i=0;i<n;i++)
{ for( j=0;j<n;j++) main()
{cout<<" vectorsuma {
["<<i+1<<"],["<<j+1<<"]:"; float p,q,z;
cout<<vector1[i][j]+vector2[i][j]; complex comp1;
} cout<<"Ingrese el primer valor ";cin>>p;
cout<<endl; cout<<"Ingrese el segundo valor ";cin>>q;
} comp1.leerxy(p,q);

Ing. Daniel Osorio Maldonado


Página 41 de 50
PROGRAMACION ORIENTADA A OBJETOS

complejo P={p,q}; }}
cout<<"El Modulo es cout<<'{';
"<<P.comp_abs(&P)<<endl for(k=0;k<filas;k++)
<<"La suma es "<<P.sumaxy(&P); cout<<C[k]<<' ';
getch(); 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]<<' ';
34. /* Crear una matrix Aleatoria y visualizar: cout<<endl;}
a)La Diagonal Secundaria }
b)La 2da Columna */ main(){
#include<stdlib.h> int i,j,M[100][100],a,b;
#include<time.h> int constante;char opcion;
#include<iostream.h> cout<<"
#include<conio.h> ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» "<<endl;
#include<iomanip.h> cout<<" º Diagonal de una Matriz
#define mensaje "\nOtra Generacion de º "<<endl;
Matrix: ? [S][N]" cout<<"
void lec(int &filas,int &columnas){ ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ "<<endl;
cout<<"Ingrese el numero de orden: "; for(;;){clrscr();
cin>>filas; randomize();
columnas=filas; lec(a,b);
} matrix(a,b,M);
void matrix(int filas, int columnas, int R(M,a,b);
M[100][100]){ diagonal(a,b,M);
int max=23, min=1; SEGUNDACOLUMNA(a,b,M);
for(int i=0;i<filas;i++) cout<<mensaje;
for(int j=0;j<columnas;j++) cout<<endl;
M[i][j]=random(max-min+1)+min; opcion=getch();
cout<<"MATRIZ\n"; cout<<endl;
} if(opcion=='N'||opcion=='n')break;}
void diagonal(int filas, int columnas,int cout<<" ÉÍÍÍÍÍÍÍÍÍÍ» "<<endl;
M[100][100]){ cout<<" º FIN º "<<endl;
int k=0,D[100]; cout<<" ÈÍÍÍÍÍÍÍÍÍͼ "<<endl;
cout<<"\n\nLa diagonal es: \n"; getch();
for(int i=0;i<filas;i++){ }
for(int j=0;j<columnas;j++){
if(i==j){ 35. /*programa que genera valores aleatorios
D[k]=M[i][j]; y son almacenados en un vector realizando:
k=k+1;} a) Los numeros por encima del promedio.
}} b) Los numeros multiplos de cinco.
cout<<'{'; c) La suma de los numeros.
for(k=0;k<filas;k++) d) El promedio de los valores
cout<<D[k]<<' '; almacenados
cout<<'}';} e) El menor numero . */
f) Los numeros que se repiten
SEGUNDACOLUMNA(int filas, int columnas,int #include<stdlib.h>
M[100][100]){ #include<time.h>
int k=0,C[100]; #include<iostream.h>
cout<<"\n\nLa SEGUNDA COLUMNA : \n"; #include<conio.h>
for(int i=0;i<filas;i++){ main(){
for(int j=0;j<columnas;j++){ int Notas[50],Nrepetidas[50],j=1, i, menor,k;
if(j==1){ float promedio,S1=0,S2=0,S3=0,r;char
C[k]=M[i][j]; opcion;
k=k+1;} randomize ();

Ing. Daniel Osorio Maldonado


Página 42 de 50
PROGRAMACION ORIENTADA A OBJETOS

for(i=1;i<=20;i++){ 36. /*Programa que cuenta el numero de


Notas[i]=rand()%70+5; caracteres del apellido y las iniciales del
menor=Notas[1]; Nombre y Apellidos */
S3=Notas[i]+S3; #include<stdio.h>
promedio=S3/20; #include<iostream.h>
if(Notas[i]%5==0) #include<conio.h>
S2=S2+1; #include<string.h>
for(k=1;k<=20;k++){ int separar(char subcad[][20],char *cad)
if(menor>Notas[k]) {int i,j,k;
menor=Notas[k]; }} i=0; k=0;
for(i=1;i<=20;i++){ do
if(Notas[i]>promedio) {while (cad[i]==' ') i++;
S1=S1+1; if (cad[i]=='\0') break;
} j=0;
for(i=1;i<=20;i++){ while((cad[i]!=' ')&&( cad[i])!='\0')
for(k=1+i;k<=20;k++){ { subcad[k][j]=cad[i];
if (Notas[k]==Notas[i]){ i++; j++;
Nrepetidas[j]=Notas[k];j=j+1;} }
} subcad[k][j]='\0';
} k++;
cout<<" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» }while(cad[i]!='\0');
"<<endl; return k;
cout<<" º Numeros aleatorios };
º "<<endl; main()
cout<<" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ {int i,cant=0,cant1=0,cant2=0;
"<<endl; char cadena[200];
do{ char arcad[50][20];
r=j; cout<<"Ingesar nombres y apellidos ";
cout<<"{ "; gets(cadena);
for (i=1;i<=20;i++){cout<<Notas[i]<<' ';} cant = separar(arcad,cadena);
cout<<"}"; cant1=cant-2;
cout<<endl; cout<<"las iniciales son :";
cout<<"Los numeros por encima del promedio for(i=0;i<cant;i++)
son: "<<S1<<endl cout<<arcad[i][0]<<" ";
<<"Los numeros multiplos de cinco son: cant2=strlen(arcad[1]);
"<<S2<<endl cout<<"El numero de caracteres del apllido
<<"La suma de los numeros es: "<<S3<<endl paterno ;"<<cant2;
<<"El promedio es: "<<promedio<<endl getch();
<<"El menor numero es: "<<menor<<endl; }
cout<<"Los numeros que se repiten son:
"<<endl; 37. Programa sobre matrices y graficos
cout<<"{";cout<<" "; #include<iostream.h>
for(j=1;j<=r-1;j++){ #include<iomanip.h>
cout<<Nrepetidas[j]<<" ";} #include<stdlib.h>
cout<<"}"; #include<math.h>
cout<<endl; #include<conio.h>
cout<<" ¨Desea continuar (S/N)?"; #include<ctype.h>
cout<<endl; void Mostrar(double matriz[20][20],int n);
opcion=getch(); void Mostrar_vector(double vector[20],int n);
cout<<endl; void Grafico();
} void CrearMatriz(double matriz[20][20],int*n);
while (opcion=='S'||opcion=='s'); void Interdiagonal(double A[20][20],double
cout<<" ÉÍÍÍÍÍÍÍÍÍÍ» "<<endl; B[20][20],double aux[20],int n);
cout<<" º FIN º "<<endl; void Sist_Ecuaciones();
cout<<" ÈÍÍÍÍÍÍÍÍÍͼ "<<endl; void Primo(double A[20][20],int*n);
getch(); void Inter_menor(double matriz[20][20],int
} aux[20],int n);

Ing. Daniel Osorio Maldonado


Página 43 de 50
PROGRAMACION ORIENTADA A OBJETOS

void Creamatriz_vector(double gotoxy(5,20);cout<<"Grafica de la funcion


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

Ing. Daniel Osorio Maldonado


Página 44 de 50
PROGRAMACION ORIENTADA A OBJETOS

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

Ing. Daniel Osorio Maldonado


Página 45 de 50
PROGRAMACION ORIENTADA A OBJETOS

for(int i=(n-1);i>=1;i--){ double mat[10][10],var;


ss=0; int i,j,t;
for(int j=(i+1);j<=n;j++){ clrscr();
ss+=R[j]*A[i][j]; CrearMatriz(matriz,&n);
} Mostrar(matriz,n);
R[i]=(B[i]-ss)/A[i][i]; for(i=1;i<=n;i++){
} for(j=1;j<=n;j++){
clrscr(); if(i==j)
gotoxy(10,6);cout<<"Las incognitas son: "; mat[i][i]=1;
Mostrar_vector(R,n); else
} mat[i][j]=0;
void Primo(double A[20][20],int*n){ }
int i,j,p,c; }
clrscr(); for(t=1;t<n;t++){
gotoxy(10,5);cout<<"Ingrese el orden de la for(i=t;i<n;i++){
matriz: ";cin>>*n; randomize(); var=matriz[i+1][t]/matriz[t][t]*1.0;
for(i=1;i<=*n;i++){ for(j=t;j<=n;j++){
for(j=1;j<=*n;j++){ matriz[i+1][j]=matriz[i+1][j]-
do{ matriz[t][j]*var*1.0;
c=0; mat[i+1][j]=mat[i+1][j]-mat[t][j]*var*1.0;
p=random(1000)+1; }
for(int t=2;t<=p;t++){ }
if(p%t==0) }
c++; for(t=n;t>1;t--){
} for(i=t;i>1;i--){
} var=matriz[i-1][t]/matriz[t][t]*1.0;
while(c!=1); for(j=t;j>=1;j--){
A[i][j]=p; 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;
clrscr(); }
gotoxy(10,5);cout<<"La matriz de numeros }
primos es:"; }
Mostrar(A,*n); for(i=1;i<=n;i++){
} for(j=1;j<=n;j++){
void Creamatriz_vector(double mat[i][j]*=mat[i][j]*matriz[i][i];
vector[20],double matriz[20][20],int*n){ }
randomize(); }
int i,j; for(i=1;i<=n;i++){
clrscr(); for(j=1;j<=n;j++){
gotoxy(10,5);cout<<"Ingrese el orden
de la matriz: ";cin>>*n; mat[i][j]=(0.01*int(mat[i][j]*100));
for(i=1;i<=*n;i++){ }
vector[i]=random(100-1)+1; }
for(j=1;j<=*n;j++){ gotoxy(10,15);cout<<"La inversa de la matriz
if(i==j) es: ";
matriz[i][j]=vector[i]; Mostrar(mat,n);
else }
matriz[i][j]=random(100-1)+1;
} void Determinante(double A[20][20],int n){
} int i,j,t;
gotoxy(10,7);cout<<"El vector generado es: "; float var;
Mostrar_vector(vector,*n); CrearMatriz(A,&n);
gotoxy(10,11);cout<<"La matriz generada es: Mostrar(A,n);
"; for(t=1;t<n;t++){
Mostrar(matriz,*n); for(i=t;i<n;i++){
} var=A[i+1][t]/A[t][t]*1.0;
void Inversa(double matriz[20][20],int n){ for(j=t;j<=n;j++){

Ing. Daniel Osorio Maldonado


Página 46 de 50
PROGRAMACION ORIENTADA A OBJETOS

A[i+1][j]=A[i+1][j]-A[t][j]*var*1.0; for(j=1;j<=n;j++){
} if((A[i][j]>-0.00001)&&(A[i][j]<0.00001))
} A[i][j]=0;
} }
double determinante=1; }
for(t=1;t<=n;t++){ for(i=1;i<=n;i++){
determinante*=A[t][t]; for(j=1;j<=n;j++){
} A[i][j]=(0.01*int(A[i][j]*100));
gotoxy(10,15);cout<<"El determinante de esta }
matriz es: "; }
cout<<determinante; gotoxy(10,15);cout<<"La matriz triangular
getch(); inferior es: ";
} Mostrar(A,n);
void Triangular_Sup(double A[20][20],int n){ }
int i,j,t;
float var; 38. Programa que resuelve um sistema de
clrscr(); Ecuaciones por el metodo por el metodo
CrearMatriz(A,&n); Gauss_Jordan
Mostrar(A,n); #include<iostream.h>
for(t=1;t<n;t++){ #include<conio.h>
for(i=t;i<n;i++){ #include<stdlib.h>
var=A[i+1][t]/A[t][t]*1.0; #include<math.h>
for(j=t;j<=n;j++){ #include<iomanip.h>
A[i+1][j]=A[i+1][j]-A[t][j]*var*1.0; 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();
for(i=1;i<=n;i++){ void matriz_de_trabajo();
for(j=1;j<=n;j++){ void ingresar_sistema();
if((A[i][j]>- void visualisar_sistema();
0.00001)&&(A[i][j]<0.00001)) void hacer_diagonal_principal_dif_cero();
A[i][j]=0; void Gaus_jordan();
} void crear_pivote();
} void crear_nulos_en_columna_pivote();
for(i=1;i<=n;i++){ void calc_solucion();
for(j=1;j<=n;j++){ void mostrar_solucion();
A[i][j]=(0.01*int(A[i][j]*100)); main ()
} { ingresar_sistema();
} visualisar_sistema(); cont++;
gotoxy(10,15);cout<<"La matriz triangular hacer_diagonal_principal_dif_cero();
superior es: "; Gaus_jordan();
Mostrar(A,n); visualisar_sistema();
} mostrar_solucion();
void Triangular_Inf(double A[20][20],int n){ getch();
int i,j,t; }
float var;
clrscr(); void ingresar_sistema()
CrearMatriz(A,&n); {
Mostrar(A,n); cout<<"\n Ingrese Numero de Incognitas: ";
for(t=n;t>1;t--){ cin>>n;
for(i=t;i>1;i--){ cout<<"Ingrese Elementos de la Matriz A :\n
var=A[i-1][t]/A[t][t]*1.0; ";
for(j=t;j>=1;j--){ for(i=0;i<n;i++)
A[i-1][j]=A[i-1][j]-A[t][j]*var*1.0; { for(j=0;j<n;j++)
} {cout<<"A["<<(i+1)<<(j+1)<<"]=";
} cin>>W[i][j];
} }
for(i=1;i<=n;i++){ cout<<"\n";

Ing. Daniel Osorio Maldonado


Página 47 de 50
PROGRAMACION ORIENTADA A OBJETOS

}
cout<<"Ingrese los Elementos de la Matriz void crear_pivote()
B:\n "; { //haciendo pivotes W[j][j]=1
for(i=0;i<n;i++) m=W[j][j];
{ if (m!=0)
cout<<"\t\tB"<<(i+1)<<"=";cin>>W[i][n]; for(s=j;s<=n;s++)
} W[j][s]= W[j][s]/m;
} else
{ cout<<"\n\n No es Inversible";
void visualisar_sistema() dato++;
{ getch(); }
if( cont==1) }
{ clrscr();
cout<<"\n Sistema void crear_nulos_en_columna_pivote()
Ax=B ingresado:\n "; { //haciendo W[i][j]=0, j!=i , j != n , con
} operaciones elementales
else for (l=0;l<n;l++)
cout<<"\n\n\n Sistema Ax=B (Matriz { m=W[l][k];
escalonada reducida) :\n"; if(l!=k)
cout<<"matriz A: "; for(r=0;r<n+1;r++)
gotoxy(6*n,wherey()); { Wo[k][r]=m*W[k][r] ;
cout<<"matriz B:\n"; W[l][r]=W[l][r]- Wo[k][r];
for(i=0;i<n;i++) }
{ for(j=0;j<n;j++) }
{ cout<<W[i][j];
cout<< ‘\t’; }
} void mostrar_solucion()
{ if(dato!=0)
cout<<W[i][n]; cout<<"\n\n El Sistema Tiene
cout<<"\n"; infinitas Soluciones" ;
} else
getch(); { cout<<"\n solucion al sistema
} Ax=B:\n";
for(int i=0;i<n;i++)
{
void hacer_diagonal_principal_dif_cero() cout<<"x["<<(i+1)<<"]="<<W[i][n];
{ //creando una fila adicional A[k]=(suma de cout<<"\t";
todas las filas) }
for(k=0;k<=n;k++) }
for(j=0;j<n;j++) }
A[k]= A[k]+W[j][k]; 39. Programa que resuelve la siguiente serie
1 1
//sumando a cada fila la fila A[k] e + 2a e + 4a
2
e + 6a 3

for(j=0;j<n;j++) M = − + − ..... + ....


for(k=0;k<=n;k++)
a 2a 3a
W[j][k]= A[k]+W[j][k];
#include<iostream.h>
}
#include<conio.h>
void Gaus_jordan()
#include<math.h>
{ //creando la matriz escalonada reducida con
#include<ctype.h>
operaciones elementales
#define e exp(1)
for(j=0;j<n;j++)
#define mensaje "\n otra prueba [s][n]"
for(k=0;k<n+1;k++)
main()
{ if(j==k)
{
{ crear_pivote();
float s,a,r,n;
crear_nulos_en_columna_pivote();
}
do{ clrscr();
}
cout<<"Ingrese el Numero de Terminos N ";
}

Ing. Daniel Osorio Maldonado


Página 48 de 50
PROGRAMACION ORIENTADA A OBJETOS

cin>>n; if (i%2) mayusculas=!mayusculas; //


cout<<"Ingrese el valor inicial de a: "; Introduzco una condición de paridad para que
cin>>a; cout << a; //
s=0; 'mayúsculas' cambie cada dos iteraciones en
for(int i=1;i<=n;i++) vez de en cada
{ a++; // iteración.
r=pow(- i++;
1,1+i)*sqrt((pow(e,sqrt(i))+2*i*a)/(i*a)); }
s=s+r;} cout << endl;
cout<<"el valor de la suma es: "<<endl; a='a';
cout<<s<<endl; while ((a!='z'+1)&&(a!='Z'+1)) // Cuarta
cout<<mensaje; línea (abCDef.....)
{
}while(toupper(getch())=='S'); if (mayusculas) a=toupper(a);
getche(); else a=tolower(a);
} if (i%2) mayusculas=!mayusculas; //
Condición de paridad
40. //Juegos con el alfabeto cout << a;
//Salida por pantalla del alfabeto a++;
intercalando mayúsculas con minúsculas. i++;
#include <iostream> }
#include <ctype.h> // Para el uso de cout << endl;
'toupper' y 'tolower' cin.get();
main() }
{
bool mayusculas=true; // Para el cambio 41. /*Suponga que tiene un numero n y una
de mayúsculas a minúsculas y viceversa aproximacion a su raiz cuadrada. para
char a='a'; obtener una aproximacion mas exacta a la raiz
int i; // Contador cuadrda real se puede utilizar
while ((a!='z'+1)&&(a!='Z'+1)) // Primera la siguiente formula:
línea (AbCdEf....) aproximacion nueva=(n/aproximacion
{ anterior)+aproximacion anterior)/2
if (mayusculas) a=toupper(a); Utilizando esta informacion, escriba una
else a=tolower(a); programa en C++que solicite al usuario
mayusculas=!mayusculas; un numero y una suposicion inicial de su raiz
cout << a; cuadrada. Utilizando estos datos el
a++; programa debe calcular una aproximacion de
} la raiz cuadrdad que sea exacta hasta
cout << endl; 0.00001.(Sugerencia: detenga la gaza cuando
a='a'; la diferencia entre dos aproximaciones
while ((a!='z'+1)&&(a!='Z'+1)) // Segunda sea menor que 0.00001).*/
línea (aBcDeF....) #include<iostream.h>
{ #include<conio.h>
if (!mayusculas) a=toupper(a); #include<math.h>
else a=tolower(a); #define DIFACEPTADA 0.00001
mayusculas=!mayusculas; main(){
cout << a; float num,raiz,aprox;
a++; cout<<"Introduzca el Numero cuya raiz
} cuadrada desea ";
cout << endl; cin>>num;
a='a'; cout<<"Introduzca su mejor supocision para la
i=0; raiz cuadrad de este numero ";
while ((a!='z'+1)&&(a!='Z'+1)) // Tercera cin>>aprox;
línea (ABcdEF.....) do{
{ raiz=aprox;//almacenar la aproximacion
if (mayusculas) a=toupper(a); aprox=(num/raiz + raiz)/2.0;//calcular nueva
else a=tolower(a); aproximacion

Ing. Daniel Osorio Maldonado


Página 49 de 50
PROGRAMACION ORIENTADA A OBJETOS

cout<<"Nueva Aproximacion cout<<endl;


"<<aprox<<endl; for(int m=0;m<6;m++)
}while(fabs(aprox-raiz)>DIFACEPTADA); {cout<<T[m]<<endl;}
cout<<"La Raiz cuadrada es cout<<endl;
"<<aprox<<endl;
getch(); cout<<"Lista de resultados a continuacion:";
} cout<<endl<<endl;
if(contador==3)
42. Programa De la Tinka {cout<<"Usted es el ganador de tipo 1 (3
#include<iostream.h> aciertos)";
#include<conio.h> cout<<"Jugada gratis";}
#include<stdlib.h> if(contador==4)
#include<ctype.h> cout<<"Usted es el ganador de tipo 2 (4
#include<iomanip.h> aciertos)";
main() if(contador==5)
{int x; cout<<"Usted es el ganador de tipo 3 (5
int i; aciertos)";
int V[46]; if(contador==6)
int T[6]; cout<<"Usted es el ganador de tipo 1 (6
char opc; aciertos)";
int jugador[6]; if(contador==0)
int contador; {cout<<"Usted no acerto ningun
randomize(); numero"<<endl ;
contador=0; cout<<"No gano nada";}
do{clrscr(); if(contador==1)
for( i=0;i<46;i++) {cout<<"Usted acerto un numero" <<endl;
V[i]=0; cout<<"No gano nada";}
i=0; if(contador==2)
do {cout<<"Usted acerto dos
{x=random(46)+1; numeros"<<endl;
if(V[x]==0) cout<<"No gano nada";}
{T[i]=x; cout<<endl;
i=i+1;} cout<<"Desea comprar otro bolto de la tinka
V[x]=1; o se anima por la Grande[S][N]:?";
opc=toupper(getch());
}while(i<6); }while(opc=='S');
cout<<"Ingrese los numeros de su boleto"; getch();
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:";

BIBLBLIOGRAFIA

JOYANES AGUILAR, Luis. Programación en C++ algoritmos, estructuras de datos y


objetos. España: McGraw-Hill. 2000. 710 p.

ALLEN WEIS, Mark. Estructuras de datos y algoritmos. Wilmington


E.U.A: Addison – Wesley Iberoamericana, 1995. 486 p.
www.ejemplode.com/8-informatica/79-
ejemplo_de_algoritmo_en_pseudocodigo.html

Ing. Daniel Osorio Maldonado


Página 50 de 50

Potrebbero piacerti anche