// pi-ea-1.cpp (C) 2006 adolfo@di-mare.com /** \file pi-ea-1.cpp \brief CI-0202 Primer examen Parcial. - Cámbiele el nombre al archivo por su número de carnet. - Cambie el valor de la hilera \c carnet por su propio carnet. - Reordene los bloques { UNO } ... { CUATRO } en \c Trituradora(). - Si su \c permutacion es 3214, deje los bloques de código de \c Trituradora() en este orden: \code TRES: { // ... } DOS: { // ... } UNO: { // ... } CUATRO: { // ... } \endcode - Envíe por correo electrónico su programa modificado. - En el ASUNTO ponga CI-0202: Examen Parcial. \author Adolfo Di Mare \date 2006 */ unsigned permutacion = 3214; ///< GLOBAL: permutacion del estudiante. unsigned char carnet[] = "A00006"; ///< GLOBAL: carnet del estudiante. #include // Lectura y escritura C++ #include // setw() /// Obtiene el \c i-ésimo dígito del número \c n. unsigned Formula2(unsigned n, unsigned i) { unsigned mult = 1; for (unsigned k=1; k0; --k) { for (int d=4; d>0; --d) { unsigned l = Formula2(permutacion, d); // Deduce la permutación... switch (l) { case UNO: { // caso UNO: bloque de código número "1" unsigned j = V(22); unsigned k = V(44); hilera[j] *= j; // multiplicación loca hilera[j] = hilera[j] % (0x7A - 0x61 + 1) + 0x61; // ASCII hilera[k] *= k; hilera[k] = hilera[k] % (0x7A - 0x61 + 1) + 0x61; break; } case DOS: { unsigned j = V(33); unsigned k = V(55); hilera[j] *= j; hilera[j] = hilera[j] % (0x7A - 0x61 + 1) + 0x61; hilera[k] *= k; hilera[k] = hilera[k] % (0x7A - 0x61 + 1) + 0x61; break; } case TRES: { unsigned j = V(68); unsigned k = V(76); hilera[j] *= j; hilera[j] = hilera[j] % (0x7A - 0x61 + 1) + 0x61; hilera[k] *= k; hilera[k] = hilera[k] % (0x7A - 0x61 + 1) + 0x61; break; } case CUATRO: { unsigned j = V(20); unsigned k = V(13); hilera[j] *= j; hilera[j] = hilera[j] % (0x7A - 0x61 + 1) + 0x61; hilera[k] *= k; hilera[k] = hilera[k] % (0x7A - 0x61 + 1) + 0x61; break; } } } // for } // for #undef V // borra la macro #undef Formula1 #undef Formula2 } // Trituradora() #include // strcpy() /// Contienen los datos de respuesta de un estudiante. struct CPT { unsigned char* carnet; unsigned permutacion; unsigned char* resultado; }; /// Valores para el primer examen parcial. /// - Ejemplo de cómo inicializar una estructura grande. CPT Clase[24] = { "A42473" , 3142 , "A42a7v" , "994156" , 3421 , "994150" , "A01460" , 4312 , "" , "A02068" , 3421 , "" , "A10706" , 2431 , "" , "A32793" , 3142 , "" , "A34529" , 2413 , "" , "A41749" , 4312 , "" , "A42473" , 3142 , "A42a7v" , "A43121" , 2431 , "" , "A43269" , 4312 , "" , "A43527" , 3142 , "A0000" , "A44479" , 3142 , "A44a7d" , "A45048" , 3421 , "" , "A45357" , 3142 , "" , "A45397" , 4312 , "" , "A50445" , 3214 , "" , "A50519" , 3142 , "A50d1d" , "A52076" , 2431 , "Ab2076" , "A52169" , 3142 , "A52r6d" , "A53444" , 3142 , "A53000" , "A53636" , 3214 , "A00o0o" , "A54972" , 3142 , "" , "A62970" , 2413 , "Ac2p70" , }; /// Calcula la cantidad de valores almacenados en un vector. #define DIM(V) (sizeof(V) / sizeof(*V)) // *V == *(V+0) == V[0] /// Programa principal C++ int main() { cout << endl << endl << "===== COMIENZO =====" << endl << endl; unsigned char resultado[ sizeof("A12345") ]; // 7 == 6+1 cout << "CARNET " << " PERMUTACION "; cout << " CORRECTO " << " RESULTADO"; for (unsigned i=0; i