UNIVERSIDAD DE CONCEPCIÓN FACULTAD DE INGENIERÍA AGRÍCOLA DEPTO. DE AGROINDUSTRIAS Juan Carlos Sandoval Avendaño PAUTA EXAMEN LENGUAJE DE PROGRAMACIÓN INGENIERÍA CIVIL AGRÍCOLA NOMBRE :___________________________________________ PTOS. :________ TIEMPO MÁXIMO : 2 HORAS FECHA : Lu 24/07/06 (1) Escriba un programa en pascal que muestre por pantalla, en color, las soluciones de la ecuación cúbica .B$ +B# ,B - œ !ß donde los coeficientes .ß +ß , y - son ingresados por el usuario, usando el siguiente esquema de trabajo: Para la ecuación cúbica B$ + B# , B - œ ! (si el coeficiente que acompaña a B$ no es ", entonces divida la ecuación por tal coeficiente), con +ß ,ß - − ‘ß primero calcule # U ´ + $, * $ V ´ #+ *+,#(&% Si V # U$ ß entonces la ecuación posee tres raíces realesß las cuales son: B" œ # ÈU -9=Ð )$ Ñ +$ B# œ # ÈU -9=Ð )#1 Ñ + 1 + B$ œ # ÈU -9=Ð )# $ Ñ $ $ $ donde ) œ E<--9=Œ ÈV $ . U Si V # U$ ß entonces las tres raíces son: B" œ ÐE FÑ +$ È$ B# œ "# ÐE FÑ +$ 3 # ÐE FÑ È$ B$ œ "# ÐE FÑ +$ 3 # ÐE FÑ donde E œ =3189ÐVÑ ’¸V ¸ ÈV # U$ “ "Î$ 1 Fœœ UÎE ß =3 E Á ! ! ß =3 E œ ! =3189ÐVÑ œ œ " " ß =3 V ! ß =3 V ! Además, guarde en un archivo externo RAICES.DOC los coeficientes y las soluciones de la ecuación cúbica. Incluya funciones ArcCos y Signo apropiadas. (Obs.: Pascal posee la función Arcotangente). (30 puntos) Solución: Program ExamenLenguajeProgramacionProb1_12006; uses Crt; var d, a, b, c : real; Q, R, R2, Q3 : real; a3, m2Q : real; angulo : real; x1, x2, x3 : real; x2Re, x2Im, x3Re, x3Im : real; UnTercio : real; Am, Bm :real; AmasB, AmenosB : real; r32 : real; arch : Text; Function Potencia(Base, Exponente: real):real; begin Potencia:=Exp(Exponente*ln(Base)); end; Function ArcCos(x:real):real; begin if x=1.0 then ArcCos:=0.0 else if x=-1.0 then ArcCos:=Pi else ArcCos:=Pi/2-ArcTan(x/sqrt(1.0-sqr(x))); end; Function Signo(x:real):ShortInt; begin if x>=0 then Signo:=+1 else Signo:=-1; end; Begin ClrScr; 2 write('Ingrese readln(d); write('Ingrese readln(a); write('Ingrese readln(b); write('Ingrese readln(c); d = '); a = '); b = '); c = '); Assign(arch,'RAICES.DOC'); Rewrite(arch); Writeln(arch,'d = ',d:0:2); Writeln(arch,'a = ',a:0:2); Writeln(arch,'b = ',b:0:2); Writeln(arch,'c = ',c:0:2); if d<>0 then begin if d<>1.0 then begin a:=a/d; b:=b/d; c:=c/d; end; Q:=(sqr(a)-3*b)/9; R:=(2*sqr(a)*a-9*a*b+27*c)/54; R2:=sqr(R); Q3:=sqr(Q)*Q; a3:=a/3; if R2<Q3 then begin angulo:=ArcCos(R/sqrt(Q3)); m2Q:=-2*sqrt(Q); x1:=m2Q*cos(angulo/3)-a3; x2:=m2Q*cos((angulo+2*Pi)/3)-a3; x3:=m2Q*cos((angulo-2*Pi)/3)-a3; TextColor(Red); writeln('La ecuación posee tres raíces reales'); writeln('x1 = ',x1:0:5); writeln('x2 = ',x2:0:5); writeln('x3 = ',x3:0:5); writeln(arch,'La ecuación posee tres raíces reales'); writeln(arch,'x1 = ',x1:0:5); writeln(arch,'x2 = ',x2:0:5); writeln(arch,'x3 = ',x3:0:5); end else begin UnTercio:=1/3; Am:=-Signo(R)*Potencia((Abs(R)+sqrt(R2-Q3)),UnTercio); if Am=0 then Bm:=0 else Bm:=Q/Am; AmasB:=Am+Bm; AmenosB:=Am-Bm; r32:=sqrt(3)/2; 3 x1:=AmasB-a3; x2Re:=-0.5*AmasB-a3; x2Im:=r32*AmenosB; x3Re:=x2Re; x3Im:=-x2Im; TextColor(Cyan); writeln('La ecuación posee una raíz real y dos complejas conjugadas'); writeln('x1 = ',x1:0:5); writeln(arch,'La ecuación posee una raíz real y dos complejas conjugadas'); writeln(arch,'x1 = ',x1:0:5); if x2Im<0 then begin writeln('x2 = ',x2Re:0:3,' - ',-x2Im:0:3,' i '); writeln('x3 = ',x3Re:0:3,' + ',x3Im:0:3,' i '); writeln(arch,'x2 = ',x2Re:0:3,' - ',-x2Im:0:3,' i '); writeln(arch,'x3 = ',x3Re:0:3,' + ',x3Im:0:3,' i '); end else begin writeln('x2 = ',x2Re:0:3,' + ',x2Im:0:3,' i '); writeln('x3 = ',x3Re:0:3,' - ',-x3Im:0:3,' i '); writeln('x2 = ',x2Re:0:3,' + ',x2Im:0:3,' i '); writeln('x3 = ',x3Re:0:3,' - ',-x3Im:0:3,' i '); end; end; end else begin writeln('La ecuación ',a:0:1,'xý + ',b:0:1,'x + ',c:0:1,' es cuadrática'); writeln(arch,'La ecuación ',a:0:1,'xý + ',b:0:1,'x + ',c:0:1,' es cuadrática'); end; Close(arch); End. ú (2) Escriba un programa en pascal que lea desde un archivo externo CURSO.DAT el nombre de 50 alumnos junto con las notas que obtuvieron en una prueba, y muestre por pantalla, con 1 decimal, el promedio y la desviación estándar de ellas. Anote el formato del archivo CURSO.DAT. (Indicaciones: ! B3 8 Promedio œ B œ 3œ" 8 4 ! ÐB3 B Ñ# Desviación estándar œ = œ Ë 3œ" 8 8 ) (30 puntos) Solución: El formato del archivo CURSO.DAT es: Juan Perez Rosales 7 Pedro Almodobar Jerez 4.6 Antonio de la Maza Pedreros 6.5 . . . . Program ExamenLenguajeProgramacionProb2_12006; Uses Crt; Const NroAlumnos=50; Type Vector=array[1..NroAlumnos] of real; VectorCadena=array[1..NroAlumnos] of string[40]; Var x : Vector; Nombre : VectorCadena; i : 1..NroAlumnos; arch : Text; suma : real; Promedio, DesvEst : real; Begin ClrScr; Assign(arch,'CURSO.DAT'); Reset(arch); for i:=1 to NroAlumnos do begin Readln(arch,Nombre[i]); Readln(arch,x[i]); end; Close(arch); suma:=0; for i:=1 to NroAlumnos do suma:=suma+x[i]; 5 Promedio:=suma/NroAlumnos; suma:=0; for i:=1 to NroAlumnos do suma:=suma+sqr(x[i]-Promedio); DesvEst:=sqrt(suma/NroAlumnos); Writeln('Promedio = ',Promedio:0:1); Writeln('Desviación estándar = ',DesvEst:0:1); End. 6