21
Trabajo Final de Laboratorio de Programación y Computación Gabriela Isabel Rojas Fernández Juan Diego Jiménez Forno 24/11/2011

Trabajo Final de Laboratorio de Programación y Computación

Embed Size (px)

Citation preview

Page 1: Trabajo Final de Laboratorio de Programación y Computación

Gabriela Isabel Rojas Fernández Juan Diego Jiménez Forno

24/11/2011

Page 2: Trabajo Final de Laboratorio de Programación y Computación

1)INTRODUCCIÓN

La tecnología en estos últimos tiempos ha avanzado a velocidades muy

grandes, lo cual ha traído consecuencias positivas y negativas. Gracias a las

nuevas tecnologías los problemas que antes solo podían ser solucionados por

grandes luminarias ahora pueden ser resueltos por cualquier persona que sepa

que programa usar y que datos ingresar.

Esto ha creado una nueva rama de la técnica: la programación estructurada.

Gracias a esto ahora casi cualquier persona con acceso a una computadora y al

internet puede conseguir un programa que permita crear otros programas de

manera sencilla y usando solo algunas palabras que difieren del lenguaje

común y corriente.

El programa que nosotros hemos a prendido a utilizar es el MatLab, el cual es

el más sencillo y simple de los lenguajes de programación avanzados. Pero

esta sencillez no impide que lo que se haga con él sea dar respuesta a los

problemas más complejos.

En este informe presentaremos algunos de los problemas básicos del área en

la cual nosotros, químicos, nos desempeñamos.

Page 3: Trabajo Final de Laboratorio de Programación y Computación

2)PRINCIPIOS TEÓRICOS

Estructuras de Control: Permiten modificar la dirección de las líneas de

flujo en un programa. Pueden ser:

o E.C. Selectiva

o E.C. Secuencial

o E.C. Repetitiva: Es aquella estructura que realiza un número finito

de veces una o más sentencias. Puede ser:

E.C.R. Mientras (While): Repite una o más veces acciones

mientras se cumpla cierta condición.

PSEUDOCÓDIGO/MATLAB-SCRIPT

--Mientras(condición) hacer

sentencia(s)Fin_mientras--

--While(condition)

TareasEnd--

Condición

Sentencias

Page 4: Trabajo Final de Laboratorio de Programación y Computación

E.C.R. Desde (For): Repite una o varias condiciones

mientras se cumpla cierta condición. Se utiliza cuando

sabemos cuantas veces queremos repetir una sentencia.

E.C.R. Hacer mientras (Do While)

PSEUDÓDIGO/MATLAB-SCRIPT

--Desde (VVI:Inc:VF)HacerTarea(s)

Fin desde--

--For variable=valorinicial:incremento:Valor final Tarea(s)

End--

VI, VF,Inc

Tarea(s)

Page 5: Trabajo Final de Laboratorio de Programación y Computación

o Estructura de Control Repetitiva controlado por el Usuario: Es

aquella en la que el usuario decide si continúa o no la repetición

de sentencias.

3)PROBLEMAS A TRATAR

a) Movimiento de un Proyectil: Este programa determina el tiempo, la

masa de pólvora y la altura máxima empleada para que un

proyectil recorra cierta distancia.

Variables de Entrada:

Masa del Proyectil en Kg.

Ángulo de Lanzamiento en grados sexagesimales.

Distancia al Objetivo en metros.

Variables de Salida:

Masa de Pólvora en gramos.

Altura en metros.

Tiempo es segundos.

Script:

function proyectil()conta='s';while(conta=='s' || conta=='S');%Se piden los datos requeridosmb=input('Ingrese la masa del proyectil en kilogramos: ');db=input('Ingrese la distancia al objetivo en metros: ');a=input('Ingrese el ángulo de lanzamiento: ');%Se realizan los cálculos necesariosvp=((db*9.81)/(sin(2*a*pi/180)))^(0.5);h=vp^2*(sin(a*pi/180))^2/(2*9.81);mp=(mb*vp^2)/(16);t=db/(vp*cos(a*pi/180));%Se muestran los resultadosdisp(['La masa de pólvora en gramos es: ' num2str(mp)]);disp(['La altura máxima del proyectil en metros es: ' num2str(h)]);disp(['El tiempo de vuelo en segundos es: ' num2str(t)]);

Page 6: Trabajo Final de Laboratorio de Programación y Computación

conta=input('Si desea continuar presione "s" o "S" : ','s');endend

Salida según opción:

b) Combustión de Hidrocarburos Simples Lineales Saturados: Este

programa nos muestra la energía liberada por mol y por el total de

masa de un hidrocarburo cualquiera.

Variables de Entrada:

Número de Carbonos.

Masa de la muestra en gramos.

Variables de Salida:

Energía liberada en J/mol.

Energía liberada en J.

Script:

function combustion()conta='s';while(conta=='s' || conta=='S');%Se pide el número de átomos de carbono del hidrocarburo y la masan=input('Ingrese el número de carbonos: ');m=input('Ingrese la masa en gramos a combustionar: ');%Se calcula el número de moles:

Page 7: Trabajo Final de Laboratorio de Programación y Computación

mo=m/(12*(n)+2*n+2);%Se despliega un menu:disp(' MENU N°2');disp('1. Combustión Completa.');disp('2. Combustión Incompleta.');%Se pide la opciónopc=input('Elija su opción: ');%Se evalua la opciónswitch opc case 1 %Se calcula el número de enlaces rotos: ccr=n-1; chr=2*n+2; cor=(3*n+1)/2; %Se calcula el número de enlaces formados: ccof=2*n; cohf=2*n+2; %Se calcula la energía liberada por mol: cEL=ccr*347+chr*414+cor*498.7; %Se calcula la energía absorbida por mol: cEA=ccof*745+cohf*460; %Se calcula la energía total por mol; cET=-cEA+cEL; %Se calcula la energía liberada por la reacción: cER=cET*mo; %Se muestran los resultados disp(['La energía liberada por mol es: ' num2str(cET) ' KJ/mol.']); disp(['La energía liberada es: ' num2str(cER) ' KJ.']); if cET>0 disp('Hay error, la reacción siempre es exotérmica.'); else disp('La reacción es exotérmica.'); end case 2 %Se calcula el número de enlaces rotos: icr=2*(n-1); ihr=2*(2*n+2); ior=n; %Se calcula el número de enlaces formados: icof=2*n; iohf=2*4*n; %Se calcula la energía liberada por mol: iEL=icr*347+ihr*414+ior*498.7; %Se calcula la energía absorbida por mol: iEA=icof*745+iohf*460; %Se Calcula la energía total por mol: iET=-iEA+iEL; %Se calcula la energía liberada por la reacción: iER=iET*mo; %Se muestran los resultados disp(['La energía liberada por mol es: ' num2str(iET) ' KJ/mol.']); disp(['La energía liberada es: ' num2str(iER) ' KJ.']);

Page 8: Trabajo Final de Laboratorio de Programación y Computación

if iET>0 disp('Hay error, la reacción siempre es exotérmica.'); else disp('La reacción es exotérmica.'); end otherwise disp('Error en el ingreso de opción.');endconta=input('Si desea continuar presione "s" o "S" : ','s');endend

Salida según opción:

c) Soluciones Buffer: Este programa nos muestra el pH inicial, el pH

final y la variación de este.

Variables de Entrada:

Concentración Molar del ácido/base.

Concentración Molar de la especie conjugada.

Volumen a total de la Solución en Litros.

Concentración Molar de la sustancia a agregar.

Volumen de sustancia a agregar en Litros.

Page 9: Trabajo Final de Laboratorio de Programación y Computación

Variables de Salida:

pH del Buffer.

pH final del Buffer.

Variación del pH.

Script:

function buffer()conta='s';while(conta=='s' || conta=='S');%Se muestra un menúdisp(' ');disp(' MENÚ N°3');disp('1. Buffer Bicarbonato.');disp('2. Buffer Fosfato.');disp('3. Buffer Amonio.');disp('4. Buffer Acetato.');%Se pide la opcióndisp(' ');opc=input('Ingrese su opción: ');disp(' ');switch opc case 1 ca=input('Ingrese la concentración del ácido: '); cb=input('Ingrese la concentración de la sal: '); v=input('Ingrese el volumen total de solución buffer: '); pka=6.38; pH=pka+log10(cb/ca); disp(' '); disp(['El pH inicial es de: ' num2str(pH)]); disp('¿Qué sustancia desea agregar Ácido Clorhídrico (a)') disp(' o Hidróxido de Sodio (b)?'); agr=input('Elija la opción: ','s'); switch agr case 'a' || 'A' v2=input('Ingrese el volumen de ácido a usar: '); M=input('Ingrese la concentración: '); pHf=pka+log10((cb*v-M*v2)/(ca*v+M*v2)); if (cb*v-M*v2)/(ca*v+M*v2)<=0 disp('El volumen o la cancentración ingresados es excesivo.'); else disp(['El pH final es de: ' num2str(pHf)]); end case 'b' || 'B' v2=input('Ingrese el volumen de base a usar: '); M=input('Ingrese la concentración: '); pHf=pka+log10((cb*v+M*v2)/(ca*v-M*v2)); disp(['El pH final es de: ' num2str(pHf)]); disp(['La variación del pH fue: ' num2str(abs(pH-pHf))]); end case 2

Page 10: Trabajo Final de Laboratorio de Programación y Computación

ca=input('Ingrese la concentración del ácido: '); cb=input('Ingrese la concentración de la sal: '); v=input('Ingrese el volumen total de solución buffer: '); pka=7.20; pH=pka+log10(cb/ca); disp(['El pH inicial es de: ' num2str(pH)]); disp('¿Qué sustancia desea agregar Ácido Clorhídrico (a)') disp(' o Hidróxido de Sodio (b)?'); agr=input('Elija la opción :','s'); switch agr case 'a' || 'A' v2=input('Ingrese el volumen de ácido a usar: '); M=input('Ingrese la concentración: '); pHf=pka+log10((cb*v-M*v2)/(ca*v+M*v2)); if (cb*v-M*v2)/(ca*v+M*v2)<=0 disp('El volumen o la cancentración ingresados es excesivo.'); else disp(['El pH final es de: ' num2str(pHf)]); end case 'b' || 'B' v2=input('Ingrese el volumen de base a usar: '); M=input('Ingrese la concentración: '); pHf=pka+log10((cb*v+M*v2)/(ca*v-M*v2)); disp(['El pH final es de: ' num2str(pHf)]); disp(['La variación del pH fue: ' num2str(abs(pH-pHf))]); end case 3 ca=input('Ingrese la concentración de la base: '); cb=input('Ingrese la concentración de la sal: '); v=input('Ingrese el volumen total de solución buffer: '); pka=9.26; pH=pka+log10(cb/ca); disp(['El pH inicial es de: ' num2str(pH)]); disp('¿Qué sustancia desea agregar Ácido Clorhídrico (a)') disp(' o Hidróxido de Sodio (b)?'); agr=input('Elija la opción :','s'); switch agr case 'a' || 'A' v2=input('Ingrese el volumen de ácido a usar: '); M=input('Ingrese la concentración: '); pHf=pka+log10((cb*v-M*v2)/(ca*v+M*v2)); if (cb*v-M*v2)/(ca*v+M*v2)<=0 disp('El volumen o la cancentración ingresados es excesivo.'); else disp(['El pH final es de: ' num2str(pHf)]); end case 'b' || 'B' v2=input('Ingrese el volumen de base a usar: '); M=input('Ingrese la concentración: '); pHf=pka+log10((cb*v+M*v2)/(ca*v-M*v2)); disp(['El pH final es de: ' num2str(pHf)]); disp(['La variación del pH fue: ' num2str(abs(pH-pHf))]); end case 4 ca=input('Ingrese la concentración del ácido: ');

Page 11: Trabajo Final de Laboratorio de Programación y Computación

cb=input('Ingrese la concentración de la sal: '); v=input('Ingrese el volumen total de solución buffer: '); pka=4.76; pH=pka+log10(cb/ca); disp(['El pH inicial es de: ' num2str(pH)]); disp('¿Qué sustancia desea agregar Ácido Clorhídrico (a)') disp(' o Hidróxido de Sodio (b)?'); agr=input('Elija la opción :','s'); switch agr case 'a' || 'A' v2=input('Ingrese el volumen de ácido a usar: '); M=input('Ingrese la concentración: '); pHf=pka+log10((cb*v-M*v2)/(ca*v+M*v2)); if (cb*v-M*v2)/(ca*v+M*v2)<=0 disp('El volumen o la cancentración ingresados es excesivo.'); else disp(['El pH final es de: ' num2str(pHf)]); end case 'b' || 'B' v2=input('Ingrese el volumen de base a usar: '); M=input('Ingrese la concentración: '); pHf=pka+log10((cb*v+M*v2)/(ca*v-M*v2)); disp(['El pH final es de: ' num2str(pHf)]); disp(['La variación del pH fue: ' num2str(abs(pH-pHf))]); end otherwise disp('Error en ingreso de opción.');endconta=input('Si desea continuar presione "s" o "S" : ','s');endend

Salida según opción:

Page 12: Trabajo Final de Laboratorio de Programación y Computación

d) Graficas: Este programa nos muestra el gráfico del sólido de

nuestra elección y de una función cualquiera de 3 variables.

Variables de Entrada:

Coeficientes de las variables.

Coordenadas del centro en algunas gráficas.

Exponentes de las variables para la función

Variables de Salida:

Gráfica.

Script:

Page 13: Trabajo Final de Laboratorio de Programación y Computación

function graficas()conta='s';while(conta=='s' || conta=='S');%Se despliega el menudisp(' ');disp( 'MENU N°4');disp('1. Paraboloide');disp('2. Paraboloide hiperbólico');disp('3. Esfera');disp('4. Elipsoide');disp('5. Cilindro');disp('6. Cilindro parabólico');disp('7. Cono');disp('8. Otras gráficas');disp(' ');opc=input('Ingrese su opción :');disp(' ');switch opc case 1 A=input('Ingrese el denominador de X: '); B=input('Ingrese el denominador de Y: '); C=input('Ingrese el coeficiente de Z: '); [x,y]=meshgrid(-50:50,-50:50); z=((x.^2)/A^2+(y.^2)/B^2)/C; surf(x,y,z); case 2 A=input('Ingrese el denominador de X: '); B=input('Ingrese el denominador de Y: '); C=input('Ingrese el coeficiente de Z: '); [x,y]=meshgrid(-50:50,-50:50); z=((x.^2)/A^2-(y.^2)/B^2)/C; surf(x,y,z); case 3 h=input('Ingrese la coordenada del centro para X: '); k=input('Ingrese la coordenada del centro para Y: '); l=input('Ingrese la coordenada del centro para Z: '); r=input('Ingrese el radio: '); [x,y,z]=sphere; x=h+r*x; y=k+r*y; z=l+r*z; surf(x,y,z); case 4 h=input('Ingrese la coordenada del centro para X: '); k=input('Ingrese la coordenada del centro para Y: '); l=input('Ingrese la coordenada del centro para Z: '); a=input('Ingrese el semidiametro respecto a X: '); b=input('Ingrese el semidiametro respecto a Y: '); c=input('Ingrese el semidiametro respecto a Z: '); [x,y,z]=ellipsoid(h,k,l,a,b,c); surf(x,y,z); case 5 h=input('Ingrese la coordenada del centro para X: '); k=input('Ingrese la coordenada del centro para Y: ');

Page 14: Trabajo Final de Laboratorio de Programación y Computación

l=input('Ingrese la coordenada del centro para Z: '); r=input('Ingrese el radio: '); [x,y,z]=cylinder; x=h+r*x; y=k+r*y; z=l+r*z; surf(x,y,z); case 6 A=input('Ingrese el denominador de X: '); C=input('Ingrese el coeficiente de Z: '); [x,y]=meshgrid(-50:50,-50:50); z=(x.^2/A)*C; plot3(x,y,z),grid; case 7 A=input('Ingrese el denominador de X: '); B=input('Ingrese el denominador de Y: '); C=input('Ingrese el coeficiente de Z: '); [x,y]=meshgrid(-50:50,-50:50); z1=sqrt(x.^2/A^2+y.^2/B^2)*C; z2=-sqrt(x.^2/A^2+y.^2/B^2)*C; plot3(x,y,z1,x,y,z2),grid; case 8 A=input('Ingrese el coeficiente de X (positivo) : '); B=input('Ingrese el coeficiente de Y (positivo) : '); C=input('Ingrese el coeficiente de Z : '); a=input('Ingrese el exponente de X (entero) : '); b=input('Ingrese el exponente de Y (entero) : '); [x,y]=meshgrid(-50:50,-50:50); z=(A*x.^a+B*y.^b)/C; surf(x,y,z); otherwise disp('Error en el ingreso de opción.');endconta=input('Si desea continuar presione "s" o "S" : ','s');endend

Salida según opción:

Page 15: Trabajo Final de Laboratorio de Programación y Computación

e) Adivinador: Este programa nos muestra el número pensado en el

intervalo de 1 a 63, solamente mostrando matrices.

Variables de Entrada:

No hay.

Variables de Salida:

Un número entre el 1 el 63.

Script:

function adivinador()conta='s';while(conta=='s' || conta=='S');%Se pide a lusuario que piense un númerodisp('Piense un número del uno al 63');acu=0;A=[1,23,45;3,25,47;5,27,49;7,29,54;9,31,53;11,33,55;13,35,57;15,37,59;17,29,61;19,41,63;21,43,0]opca=input('¿Se encuentra su número? : ', 's');

Page 16: Trabajo Final de Laboratorio de Programación y Computación

if opca=='si' acu=acu+1;enddisp(' ');B=[2,23,46;3,26,47;6,27,50;7,30,51;10,31,54;11,34,55;14,35,58;15,38,59;18,39,62;19,42,63;22,43,0]opcb=input('¿Se encuentra su número? : ', 's');if opcb=='si' acu=acu+2;enddisp(' ');C=[4,23,46;5,28,47;6,29,52;7,30,53;12,31,54;12,36,55;14,37,60;15,38,61;20,39,62;21,44,63;22,45,0]opcc=input('¿Se encuentra su número? : ', 's');if opcc=='si' acu=acu+4;enddisp(' ');D=[8,27,46;9,28,47;10,29,56;11,30,57;12,31,58;13,40,59;14,49,60;15,42,61;24,43,62;25,44,53;26,45,0]opcd=input('¿Se encuentra su número? : ', 's');if opcd=='si' acu=acu+8;enddisp(' ');E=[16,27,54;17,28,55;18,29,56;19,30,57;20,31,58;21,48,59;22,49,60;23,50,61;24,51,62;25,52,63;26,53,0]opce=input('¿Se encuentra su número? : ', 's');if opce=='si' acu=acu+16;enddisp(' ');F=[32,43,54;33,44,55;34,45,56;35,46,57;36,47,58;37,48,59;38,49,60;39,50,61;40,51,62;41,52,63;42,53,0]opcf=input('¿Se encuentra su número? : ', 's');if opcf=='si' acu=acu+32;enddisp(' ');if acu~=0 disp(['Su número es..... ']); disp([' ¡' num2str(acu) ' !.']);else disp('!Piense un número del 1 al 63¡');endconta=input('Si desea ser impresionado (otra vez) presione "s" o "S" : ','s');endend

Salida según opción:

Page 17: Trabajo Final de Laboratorio de Programación y Computación