1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
-- 25/02/2012 -- Diseñe un programa que actúe como calculadora de fracciones. Debe de leer el numerador y denominador de dos fracciones y la operación a realizar con ellas. Se deben ofrecer las cuatro operaciones aritméticas básicas (+, -, *, /). La fracción resultante siempre se debe mostrar simplificada. with ada.text_io; with ada.integer_text_io; procedure ada7x10 is use ada.text_io; use ada.integer_text_io; num1,num2,numRes,den1,den2,denRes,mcmRes,mcdRes:integer; operador:character; -- Variable de tipo carácter. correcto:boolean := true; -- Variable booleana. -- FUNCION QUE CALCULA EL MINIMO COMUN MULTIPLO DE DOSNUMEROS: function mcm( numA,numB:integer ) return integer is -- Precondición: Se ha de recibir dos parámetros de tipo entero. -- Poscondición: Se devolverá un parámetro entero. A:integer := numA; b:integer := numB; i:integer := 1; j:integer := 1; begin while A/=B loop A := numA * i; B := numB; while A/=B and j<=numA loop B := numB * j; j := j+1; end loop; j := 1; i := i+1; end loop; return A; end mcm; -- FUNCION QUE CALCULA EL MAXIMO COMUN DIVISOR DE DOS NUMEROS: function mcd( numA,numB:integer ) return integer is -- Precondición: Se han de recibir dos parámetros de tipo entero. -- Poscondición: Se devolverá un parámetro de tipo entero. A:integer := numA; B:integer := numB; x:integer; begin while B/=0 loop x := A; A := B; B := x mod B; end loop; return A; end mcd; begin -- Solicitud de los datos: put_line("Introduzca su fracción:"); put_line("1º fracción:"); put(" Numerador: "); get(num1); put(" Denominador: "); get(den1); put_line("2º fracción:"); put(" Numerador: "); get(num2); put(" Denominador: "); get(den2); new_line; put_line("Operación a realizar: '+,-,*,/'"); get(operador); -- Segun el operador se hace determinada operación: case operador is when '+' => if den1 = den2 then numRes := num1 + num2; denRes := den1; else mcmRes := mcm(den1,den2); numRes := (mcmRes/den1)*num1 + (mcmRes/den2)*num2; denRes := mcmRes; end if; when '-' => if den1 = den2 then numRes := num1 - num2; denRes := den1; else mcmRes := mcm(den1,den2); numRes := (mcmRes/den1)*num1 - (mcmRes/den2)*num2; denRes := mcmRes; end if; when '*' => numRes := num1 * num2; denRes := den1 * den2; when '/' => numRes := num1 / den2; denRes := den1 / num2; when others => put_line("No ha usado un operador valido."); correcto := false; end case; -- Si el operador era correcto... if correcto then -- Ahora se simplifica el resultado: mcdRes := mcd(numRes,denRes); numRes := numRes / mcdRes; denRes := denRes / mcdRes; -- Por ultimo se imprime el resultado: put("La fracción resultante es: "); put(numRes,width=>0); put("/"); put(denRes,width=>0); new_line; end if; end ada7x10; |