Está en la página 1de 18

LABORATORIO DE PROGRAMACION

INFORME N°2

Estudiante: Univ. Elio Gerson


Churata Apaza
Carrera: Ingeniería Electrónica
Docente Teoria: Lic. Virginia Zota
Uño
Docente Laboratorio: Ing. Juan
Carlos Duchen Cuellar
Fecha de publicación:
Contenido:
25/02/2022
1. Triangulos conociento 3 datos.
2. Matriz Vandermonde Fecha de entrega: 09/03/2022
3. Division de polinomios con el
método de horner
4. Sistema 2x2
➢ TRIANGULOS CONOCIENTO 3 DATOS.

Objetivo.- Se desea conocer seis datos sobre el triangulo que son los tres lados y los tres angulos. Ademas de
calculas el valor del área, perímetro.

Para hacer posible el calculo de datos debe tenerse al menos un lado dentro de la terna de valores.

➢ Fundamento teorico

Caso 1: Se conoce un lado y dos angulos

Si un ángulo es opuesto
Por ley de senos:
A=dato
B=A*sen(b)/sen(a)
C=A*sen(c)/sen(a)
a=dato
b=dato
c=180°-a-b

Caso 2: Se conocen dos lados y un angulo


Por ley de cosenos:
Si el angulo conocido es opuesto al lado desconocido
A=dato
B=dato
C=(A2+B2-2*A*B*cos(c))^0.5
a= arcocos((B2+ C2-A2 )/2*B*C))
b= 180-a-c
c=dato
Si el angulo conocido NO es opuesto al lado desconocido
A=dato
B=dato
C=(A2+B2-2*A*B*cos(c))^0.5
a=dato
b= arcsen(B*sen(a)/A)
c= 180-a-b
Caso 3: se conocen tres lados
A=dato
B=dato
C=dato
a= arcocos((B2+ C2-A2 )/2*B*C))
b= arcocos((A2+ C2-B2 )/2*A*C))
c=180-a-b

calculo del perímetro

Per=A+B+C

Calculo del área por el método de Heron

Area=(P(P-A)(P-B)(P-c))^0.5

Donde P=(A+B+C)/2
Diagrama de flujo

Listado del código

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

int main() {
int continuar;
do{
float a,aa,b,bb,c,cc,pi,resp,area,perimetro,p;
int lados;
cout << "ingrese la cantidad de lados conocidos" << endl;
cin >> lados;
switch (lados) {
case 1:
cout << "el lado es opuesto a algun angulo conocido?" << endl;
cout << "1.Si" << endl;
cout << "2.No" << endl;
cin >> resp;
if (resp==1) {
cout << "ingrese el lado conocido y el angulo opuesto en grados" << endl;
cin >> a >> aa;
cout << "ingrese el otro angulo en grados" << endl;
cin >> bb;
b = a*sin(bb*M_PI/180)/sin(aa*M_PI/180);
cc = 180-(aa+bb);
c = a*sin(cc*M_PI/180)/sin(aa*M_PI/180);
} else {
cout << "ingrese el lado conocido" << endl;
cin >> a;
cout << "ingrese los angulos en grados" << endl;
cin >> bb >> cc;
aa = 180-bb-cc;
b = a*sin(bb*M_PI/180)/sin(aa*M_PI/180);
c = a*sin(cc*M_PI/180)/sin(aa*M_PI/180);
}
break;
case 2:
cout << "el angulo conocido es opuesto al lado desconocido?" << endl;
cout << "1.Si" << endl;
cout << "2.No" << endl;
cin >> resp;
if (resp==1) {
cout << "ingrese los lados" << endl;
cin >> a >> b;
cout << "Ingrese el angulo en grados" << endl;
cin >> cc;
c = pow((a*a+b*b-2*a*b*cos(cc*M_PI/180)),0.5);
aa = acos((b*b+c*c-a*a)/(2*b*c))*180/M_PI;
bb = 180-aa-cc;
} else {
cout << "ingrese el lado,y su angulo opuesto en grados" << endl;
cin >> a >> aa;
cout << "Ingrese el lado restante" << endl;
cin >> b;
bb = asin(b*sin(aa*M_PI/180)/a)*180/M_PI;
cc = 180-aa-bb;
c = pow((a*a+b*b+2*a*b*cos(cc*M_PI/180)),0.5);
}
break;
case 3:
cout << "Ingrese el valor de los lados" << endl;
cin >> a >> b >> c;
aa = acos((b*b+c*c-a*a)/(2*b*c))*180/M_PI;
bb = acos((a*a+c*c-b*b)/(2*a*c))*180/M_PI;
cc = 180-aa-bb;
break;
default:
cout << "invalido" << endl;
}
perimetro=a+b+c;
p=perimetro/2;
area=pow(p*(p-a)*(p-b)*(p-c),0.5);

cout<<"Los resultados obtenidos son los sigientes"<<endl;


cout << "A=" << a << "[u]" <<endl;
cout << "B=" << b << "[u]" <<endl;
cout << "C=" << c << "[u]" <<endl;
cout << "a=" << aa << "[grad]" <<endl;
cout << "b=" << bb << "[grad]" <<endl;
cout << "c=" << cc << "[grad]" <<endl;
cout << "Area=" << area <<"[u^2]" << endl;
cout << "Perimetro=" << perimetro<<"[u]" << endl;
cout<<"ingrese 0 si desea continuar,o cualquier otro numero para salir"<<endl;
cin>>continuar;
system("cls");
}while(continuar==0);
cout<<"Hasta luego"<<endl;
return 0;
}

➢ Capturas de funcionamiento
MATRIZ VANDERMONDE

Objetivo:Generar matrices enensimas de Vandermonde y calcular el determinante

✓ Fundamento teorico

✓ Diagrama de flujo
Listado del código

#include<iostream>
#include<cmath>
using namespace std;

int main() {
float det,n;
float elementos[100];
int i,j;
cout<<"\tMATRIZ DE VANDERMONDE"<<endl;
cout<<"------------------------------------------------"<<endl;
cout << "Ingrese el orden de la matriz " << endl;
cin >> n;
for (i=0;i<=n-1;i++) {
cout << "ingrese el elemento a[" << i+1 << "]" << endl;
cin >> elementos[i];
}
cout << "La matriz generada es:" << endl;
for (j=0;j<=n-1;j++) {
cout<<"\t";
for (i=0;i<=n-1;i++) {
cout << pow(elementos[j],i) << " ";
}
cout << " " << endl;
}
cout << "su determinante es:" << endl;
det = 1;
for (j=0;j<=n-1;j++) {
for (i=0;i<=n-1;i++) {
if (i<j) {
det = det*(elementos[j]-elementos[i]);
}
}
}
cout << "\tdet=" << det << endl;
return 0;
}
Capturas de funcionamiento
DIVISION DE POLINOMIOS CON EL MÉTODO DE HORNER

➢ Fundamento teorico

El método de Horner es un método creado por William George Horner que nos permite dividir dos polinomios,
para ver los detalles de este método resolveremos un ejercicio de manera detallada.
Dividir:

Resolución:
Para dividir los polinomios por el método de Horner los polinomios, tanto el dividendo como el divisor deben
estar ordenados en forma decreciente, con respecto al exponente de la variable.
Entonces ordenando el dividendo y el divisor obtendremos:

Enseguida colocamos los coeficientes del dividendo y el divisor en el siguiente sistema gráfico, compuesto por
dos líneas horizontales y dos verticales:

Colocando los coeficientes, el esquema queda así:


• Una vez ubicado los coeficientes del dividendo y del divisor en el esquema, se traza la 2da línea
vertical que separa a los coeficientes del cociente y del residuo y se procede a dividir así:
• Se divide el 1er coeficiente del dividendo entre el 1er coeficiente del divisor: 12 ÷ 3 = 4; este resultado
se coloca en la primera columna y debajo de la segunda línea horizontal, luego se multiplica por los
coeficientes del divisor que han sido cambiados de signo: 4 x 7 = 28 ; 4 x 4 = 16 ; ambos resultados se
colocan en la 2da y 3ra columna, respectivamente y en una fila. Luego la suma de la segunda columna
(28 + − 7 = 21); se vuelve a dividir entre el primer coeficiente del divisor (21 ÷ 3 = 7), resultado que se
coloca en la 2da columna y debajo de la 2da línea horizontal para luego multiplicarse por los
coeficientes del divisor que han sido cambiados de signo, estos productos: 49 y 28 en la 3ra y 4ta
columna y debajo de la primera fila en que se colocaron los anteriores productos, con la suma de la
tercera columna se procede en forma análoga que la anterior, pero las cantidades de las columnas que
están a la derecha de la 2da línea vertical se suman y ya no se dividen entre el primer coeficiente del
divisor, simplemente se colocan en el espacio destinado a los coeficientes del residuo.
Agregamos variables a los coeficientes y obtenemos:
Cociente:

Residuo:

Generalizando

𝑎0 𝑥 𝑛 + 𝑎1 𝑥 𝑛−1 + ⋯ + 𝑎𝑛
𝑝𝑎𝑟𝑎 𝑛 > 𝑚
𝑏0 𝑥 𝑚 + 𝑏1 𝑥 𝑚−1 + ⋯ + 𝑏𝑚
Para hacer bo=1 dividimos los demás bi y ai entre bo, de esta manera evitamos tener que dividir entre bo a cada paso,
además cambiamos los signos de los b1,b2…,bn multiplicando por (-1).

𝑏0 𝑎 𝑎 𝑎 𝑎𝑛−𝑚 ... 𝑎𝑛 −𝑚 1 𝑎𝑛
𝑏1
𝑏
...
𝑏𝑛
𝑛−𝑚 ... 𝑟0 𝑟1 𝑟𝑚−1

Cociente Residu
𝑟0o = 𝑎𝑛−𝑚 1 + 𝑘0
𝑟1 = 𝑎𝑛−𝑚 + 𝑘1

𝑟 = 𝑎𝑛−𝑚 3 +𝑘
...

𝑟𝑚−1 = 𝑎𝑛 +𝑘𝑛
constantes

➢ Diagrama de flujo
➢ Listado del código

#include<iostream>
using namespace std;

int main() {

float c;
int i,j,n,m;
float q[100],r[100],a[100],b[100];
cout<<"DIVISION DE POLINOMIOS POR EL METODO DE HORNER"<<endl;
cout<<"---------------------------------------------------------------"<<endl;
cout << "ingrese el grado del dividendo" << endl;
cin >> n;
cout << "Ingrese el grado del divisor" << endl;
cin >> m;
if (n>m) {
cout << "Ingrese los coeficientes del Dividendo" << endl;
for (i=0;i<=n;i++) {
cout << "x^[" << n-i << "]:" ;
cin >> a[i];
}
cout << "\tingrese los coeficientes del divisor" << endl;

for (i=0;i<=m;i++) {
cout << "x^[" << m-i << "]: ";
cin >> b[i];
}
float aux;
aux=b[0];
for (i=0;i<=n;i++) {
a[i] = a[i]/aux;
b[i] = (-1)*b[i]/aux;
}
q[0] = a[0];

//cociente
float c;
for (i=1;i<=n;i++) {
if(i<=n-m){
c=0;
for (int j=0;j<i;j++) {
c=c+q[j]*b[i-j];
}
q[i] = c+a[i];
}
else{
q[i]=0;
}
}
cout<<"los coeficientes del cociente"<<endl;
for (int j=0;j<=n-m;j++) {
cout<<"x^["<<n-m-j<<"]: "<<q[j]<<endl;
}

//residuo

for (i=n-m;i<=n;i++) {
c=0;
for (int j=i;j>=0;j--) {
if(i-j+1>m){
b[i-j+1]=0;
}
c=c+q[j]*b[i-j+1];
}
r[i-n+m]= c+a[i+1];

}
cout<<"los coeficientes del residuo"<<endl;
for (int j=0;j<=m-1;j++) {
cout<<"x^["<<m-1-j<<"]:"<<aux*r[j]<<endl;
}

} else {
cout << "division impropia No calculable por el metode de horner" << endl;
}
return 0;
}

➢ Capturas de funcionamiento
➢ SISTEMA 2X2

Objetivo: Resolver un sistema de dos ecuaciones con dos incognitas

➢ Fundamento teorico

Sean el sistema de ecuaciones:


𝑎𝑥 + 𝑏𝑦 = 𝑐
{
𝑑𝑥 + 𝑓𝑦 = 𝑔

El sitema se puede representar matricialmente como:


𝑎 𝑏 𝑥 𝑐
[ ] ∗ [𝑦] = [𝑔]
𝑑 𝑓

𝐴∗𝑋 = 𝐵
Donde A es la matriz de coeficientes, del que se realizara el analisis de determinante

Si det(A)!=0 => Existe una solución única

Por regla de Cramer


𝑐 𝑏 𝑎 𝑐
| | |𝑑
𝑔 𝑓 𝑐∗𝑓−𝑔∗𝑏 𝑔| 𝑎∗𝑔−𝑑∗𝑐
𝑥= 𝑎 𝑏 = 𝑦= 𝑎 𝑏 =
| | 𝑎∗𝑓−𝑑∗𝑏 | | 𝑎∗𝑓−𝑑∗𝑏
𝑑 𝑓 𝑑 𝑓

Si det(A)==0 => No hay solución o existen infinitas soluciones

Por regla de Cramer


𝑐 𝑏
| | 𝑐 𝑏
𝑔 𝑓
𝑥= => 𝑠𝑖 | | == 𝑖𝑛𝑓𝑖𝑛𝑖𝑡𝑎𝑠 𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛𝑒𝑠 𝑝𝑎𝑟𝑎 𝑥
0 𝑔 𝑓
𝑐 𝑏
𝑠𝑖 | |! = 𝑛𝑜 ℎ𝑎𝑦 𝑠𝑜𝑙𝑢𝑐𝑖𝑜𝑛𝑒𝑠 𝑝𝑎𝑟𝑎 𝑥
𝑔 𝑓
➢ Diagrama de flujo

➢ Listado del código

#include<iostream>
using namespace std;

int main() {
float a,b,c,d,f,g,x,det,yy;

cout<<"\tSISTEMA DE DOS ECUACIONES CON DOS INCOGNITAS"<<endl;


cout<<"\t\tax+b=c"<<endl;
cout<<"\t\tdx+f=g"<<endl<<endl;
cout << "ingrese al coeficientes de la primera ecuacion" << endl;
cout<<"a= ";cin >> a ;
cout<<"b= ";cin >> b ;
cout<<"c= ";cin >> c ;
cout << "\ningrese al coeficientes de la segunda ecuacion" << endl;

cout<<"d= ";cin >> d ;


cout<<"f= ";cin >> f ;
cout<<"g= ";cin >> g ;

system("cls");

cout<<"Sistema introducido:"<<endl;
cout<<"\t\t("<<a<<")x+("<<b<<")y="<<c<<endl;
cout<<"\t\t("<<d<<")x+("<<f<<")y="<<g<<endl<<endl;
cout<<"resultado obtenido:"<<endl;
det = (a*f-d*b);
if (det!=0) {
x = (c*f-g*b)/det;
yy = (a*g-d*c)/det;
cout << "\t\tx=" << x << endl;
cout << "\t\ty=" << yy << endl;
} else {
if (c*f-g*b==0) {
cout << "Infinitas soluciones" << endl;
} else {
cout << "No existen soluciones" << endl;
}
}
return 0;
}
➢ Capturas de funcionamiento

También podría gustarte