Odio los exámenes
Martes , 20 de Mayo de 2003. Enrique Barbeito García
Pero los odio más que nada por el nerviosismo estúpido con que los realizo. Hoy he hecho uno de prácticas de programación. Y entre que he llegado cinco minutos tarde y no he podido escuchar la explicación completa del profesor sobre el examen y que estaba como un flan, no he conseguido realizar por completo las cosas que pedía el examen.
Cuando el profesor me ha dado el examen, me pongo a leerlo detenidamente: « Realizar un programa que lea la información
contenida en el fichero de texto “aforado.txt” que contiene el código de las carreteras de una ciudad, una fecha y el número de coches que pasaron en dicha fecha por esa carretera. La forma que tiene ese archivo es
Codigo_de_la_Via(alfanumerico); fecha_circulacion(entero); numero_vehiculos(real);
- El programa debe pedir un código de vía y sacar todas las líneas de información contenidas en el fichero dado correspondiente a ese código
- Calcular la media de vehículos totales entre toda la información sacada »
Algo así decía (ni me acuerdo ya). Es decir, que tu tenías un archivo llamado aforado.txt y en él habían 37 líneas de este tipo:
$ cat aforado.txt 13061 22/04/2003:10:00 206 2220 22/04/2003:10:00 555 6000 22/04/2003:10:00 686 6001 22/04/2003:10:00 514 9010 22/04/2003:10:00 891 9011 22/04/2003:10:00 411 13061 22/04/2003:11:00 206 2220 22/04/2003:11:00 444 6000 22/04/2003:11:00 686 6001 22/04/2003:11:00 514 9010 22/04/2003:11:00 891 9011 22/04/2003:11:00 411 13061 22/04/2003:12:00 549 2220 22/04/2003:12:00 345 6000 22/04/2003:12:00 720 6001 22/04/2003:12:00 686 [ ... ]
Y tú tienes que inicialmente pedir un código (primer campo de los tres que contiene cada línea de información del archivo dado), lees el archivo y vas comparando el código introducido por el usuario con los existentes, “guardándote” los que coincidan e imprimiendo por pantalla los dos campos siguientes. Y después queda sacar la media de la suma de los números que hay en el tercer campo (media aritmética) y ya está. Osea, un ejemplo de ejecución sería:
$ ./examen INTRODUZCA CODIGO DE LA VIA: 6000 22/04/2003:10:00 -- 686 22/04/2003:11:00 -- 686 22/04/2003:12:00 -- 720 22/04/2003:13:00 -- 686 22/04/2003:14:00 -- 617 22/04/2003:15:00 -- 206 LA MEDIA DE LOS VEHICULOS TOTALES ES: 600.167
Pues bien, yo en el examen he hecho la primera parte y me ha faltado realizar eso que dice en la última línea anterior (la media) Y todo porque he empleado tres variables (una para cada campo) y todas de tipo string –ahí el error– Debería haber definido la tercera variable de tipo entero para poder ir sumando esos números del tercer campo en una variable auxiliar y con otra de tipo entero (un contador) contar los números totales y hacer finalmente una estúpida división! aaarrrjjj! Pero me he puesto nervioso, y en vez de ver el error en la tercera variable me he dicho: “Pues ahora voy a convertir la variable “campo3″ de tipo string a tipo int” y bueno… me ha dado por usar sprintf(); –no me preguntéis para qué… se me fue completamente la cabeza en ese momento. Porque podría haber intentado hacer casting, osea: (int)campo3 y ya esta :\– Pppffff… me odio. Si ya no tengo bastante con ser un patoso con la programación pues…. encima me pongo como un flan con estas cosas (tenía 20 minutos para hacerlo –entre que he llegado tarde y que ha
tardado en darme el examen… de 30 minutos que tenía, se habrán quedado en 20 :\–)
En fin… aquí os deleito con el código que he hecho en el examen. Y bueno, también he terminado ahora el ejercicio añadiendo el par de líneas que me han faltado :(
#include <iostream> #include <fstream> #include <string> using namespace std; void Codigo_de_la_Via(string cod) { fstream fic; string code, campo2; // aqui puse campo3, como tipo string, :( int i=0, vehiculos=0, campo3; fic.open("aforado.txt" , ios::in); // apertura de fichero en modo lectura if (!fic) // comprobacion de apertura correcta cout << "ERROR. APERTURA\n"; else { fic >> code; while (!fic.eof()) { if (code == cod) { fic >> campo2 >> campo3; cout << campo2 << " -- " << campo3 << endl; i++; vehiculos += campo3; // voy sacando el total de coches } fic >> code; } fic.close(); } // Asi de tonto se calcularia la media. ARJ! : cout<<"LA MEDIA DE LOS VEHICULOS TOTALES ES:"<<(float)vehiculos/i<<endl; } int main() { string codigo; cout << "INTRODUZCA CODIGO DE LA VIA: "; cin>>codigo; Codigo_de_la_Via(codigo); }
En fin… ¡¡qué vaya peste de exámenes!!
[ Actualización 21/05/2003 @ 1:27 AM ] , me acabo de dar cuenta de que aun quedan muchos grupos de prácticas por realizar este examen. Muchos de mis compañeros de clase conocen esta página; varios (casi todos) son los que aun no han hecho el examen… Ehhhmmm…. hace cinco minutos que he estado a punto de quitar el código del ejercicio y reponerlo la semana que viene, que ya estará hecho el examen en todos los grupos. Uhhhmmm… he decidido no quitarlo de la página: primero porque han pasado ya unas horas y en los logs de mi servidor web he visto varios accesos de distintas IPs, con lo que tal vez algún compañero mío ya vio el código y lo tenga en su poder y con intenciones de distribuirlo … y segundo (la razón más importante. Porque la primera es una gilipollez paranoica mía) porque quiero hacer un experimento sociológico digamos…
Para quien se sienta tentado a copiar el código con la esperanza de que le toque el mismo ejercicio que a mí… recordarle que el DLSI controla mucho el tema de copias así que solo pido una cosa: ser responsables con lo que hagáis y pensar un poco las cosas antes de hacer alguna tontería pues, si llegase a ocurrir algo malo, no os jodéis a vosotros mismos… me joderéis a mí también. Y eso quizás os sople la polla un rato pero a mí no :\ Hacer lo que queráis con el código, como si lo imprimís y os limpiáis el culo con él :D, pero hagáis lo que hagáis: usar la cabeza y pesar por un momento que leches estáis haciendo.
… Recemos porque dentro de unos días no tenga que lamentar esta decisión de dejar aquí el código al aire libre. Por supuesto lo hago asumiendo las posibles consecuencias. Y la culpa, si pasa algo, sería mía: por ser tan inocente gilipollas de dejar libre este insinuante caramelo con la esperanza de que la gente no se lo copie como si nada.
( recemos… Padre nuestro que estás en los cielos. Santificado sea tú… )
jeje, ya veo que te pego duro lo de los examenes
Si, estoy algo obsesionado… no creo que sea bueno eso! pero bueno… es algo que no puedo evitar jeje
Saludos!