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 138 139 |
// 2x17: Calculadora de fracciones /* 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. */ #include <stdio.h> #define NADA "\e[m" #define CIAN "\e[1;34m" #define SUB "\e[0;4m" // Función que calcula el M.C.M.: int mcm( int numA, int numB ) { // Precondición: Se ha de recibir dos parámetros de tipo entero. // Poscondición: Se devolverá un parámetro entero. int A=numA, B=numB, i, j; for( i=1; A!=B; i++ ) { A = numA * i; B = numB; for( j=1; j<=numA && A!=B; j++ ) B = numB * j; }; return A; }; // Función que calcula el Máximo Común Divisor: int mcd( int numA, int numB ) { // Precondición: Se han de recibir dos parámetros de tipo entero. // Poscondición: Se devolverá un parámetro de tipo entero. int x; while( numB!=0 ) { x = numA; numA = numB; numB = x%numB; }; return numA; }; main() { system("clear"); char signo; int numeUno, denoUno; int numeDos, denoDos; int numeRes, denoRes; int numeResSim, denoResSim; int bol = 1, temp, tempDos; printf( "\v A continuacion introduzca sus dos fracciones a calcular,\n ejemplo: " CIAN "2/3*1/6" NADA " (sin espacios): " ); scanf( "%i/%i%c%i/%i", &numeUno, &denoUno, &signo, &numeDos, &denoDos ); // Se realiza la operación correspondiente según el operador: switch(signo) { case '+': //Si los denominadores son comunes se suma directamente, si no se busca un M.C.M. if( denoUno == denoDos ) { numeRes = numeUno+numeDos; denoRes = denoUno; } else { temp = mcm( denoUno, denoDos ); numeRes = (temp/denoUno)*numeUno + (temp/denoDos)*numeDos; denoRes = temp; }; break; case '-': //Si los denominadores son comunes se resta directamente, si no se busca un M.C.M. if( denoUno == denoDos ) { numeRes = numeUno-numeDos; denoRes = denoUno; } else { temp = mcm( denoUno, denoDos ); numeRes = (temp/denoUno)*numeUno - (temp/denoDos)*numeDos; denoRes = temp; }; break; case '*': numeRes = numeUno*numeDos; denoRes = denoUno*denoDos; break; case '/': numeRes = numeUno*denoDos; denoRes = denoUno*numeDos; break; default: bol = 0; }; // Ahora se simplifica la fracción obtenida con el M.C.D. tempDos = mcd( numeRes, denoRes ); numeResSim = numeRes/tempDos; denoResSim = denoRes/tempDos; //Se imprime el resultado: if( bol == 1) printf( "\n " SUB " %i " NADA " %c " SUB " %i " NADA " = " SUB " %i " NADA " = " SUB " %i " NADA "\n %i %i %i %i\n\n", numeUno, signo, numeDos, numeRes, numeResSim, denoUno, denoDos, denoRes, denoResSim ); else printf("\n Operador incorrecto\n\n"); }; |