.. -*- rst -*- .. jocs_prova.txt .. Com usar la redirecció d'entrada/sortida per passar els jocs de prova. .. Fitxer reStructuredText. Cal processar-lo amb rst2html per tal .. d'obtenir la versió en html ========================================= Com usar els jocs de prova dels projectes ========================================= .. |logoUPC| image:: ../imatges/upcf.jpg .. |logoETSEIB| image:: ../imatges/logo_etseib02.png .. .. - `Professorat <../fullInformatiu/consultes/index.html>`_ .. - `Documentació <../documentacio/index.html>`_ .. - `Informació general <../general/index.html>`_ .. - `Projectes <../projectes/index.html>`_ .. sidebar:: |logoETSEIB| Informàtica ETSEIB - `Pàgina principal <../index.html>`_ - `Material <../material/index.html>`_ - `Laboratori <../laboratori/index.html>`_ - `Einam <../einam/index.html>`_ .. .. contents:: Índex Acompanyem cada un dels projectes d'Informàtica amb un conjunt de jocs de prova. Un *joc de prova* està constituït per dos grups de fitxers: els corresponents a les dades que ha de llegir el programa i els corresponents als resultats que ha d'escriure. A continuació presentem diferents situacions en funció d'on llegeix les dades el programa i on escriu els resultats: els canals estàndard o fitxers seqüencials de text. Dades pel canal estàndard d'entrada i resultats pel canal estàndard de sortida ------------------------------------------------------------------------------ Suposem, per exemple, que el programa ``xyz`` llegeix les dades del canal estàndard d'entrada i escriu els resultats al canal estàndard de sortida. Suposem també que disposem de tres jocs de prova numerats del 0 al 2. El joc de prova *k*-èssim està format per dos fitxers: *k*-``etst`` Conté les dades que el programa llegirà del canal estàndard d'entrada. *k*-``stst`` Conté els resultats que el programa hauria d'escriure al canal estàndard de sortida És a dir, el fitxer ``0-etst`` conté les dades del primer joc de prova i el fitxer ``0-stst`` conté els resultats. Els fitxers ``1-etst`` i ``1-stst`` contenen respectivament les dades i els resultats del segon joc de prova, i així successivament. Per tal d'executar el programa subministrant-li com a dades pel canal estàndard d'entrada el contingut del fitxer ``0-etst`` cal fer el següent:: xyz < 0-etst El símbol ``<`` indica a l'`intèrpret de comandes`_ que el canal estàndard d'entrada es `redirigeix`_ cap al fitxer ``0-etst``. Per executar el programa amb les dades dels jocs de prova 1 i 2 només cal substituir ``0-etst`` per ``1-etst`` o ``2-etst`` en la comanda anterior. Com que el programa ``xyz`` escriu els resultats al canal estàndard de sortida, hauríem de comprovar que el resultat escrit pel programa coincideix amb el contingut del fitxer ``0-stst``. És possible comprovar automàticament que el resultat del programa ``xyz`` coincideix amb el contingut del fitxer ``0-stst``. Per això caldrà redirigir la sortida de ``xyz`` cap a un fitxer temporal, ``tmp`` per exemple, fent el següent:: xyz < 0-etst > tmp Ara cal comprovar automàticament que el contingut dels fitxers ``0-stst`` i ``tmp`` coincideix, tal i com s'explica en el document `Com calcular les diferències entre dos fitxers`_. Dades i resultats en fitxers seqüencials de text ------------------------------------------------ Suposem, per exemple, que el programa ``lmn`` rep les dades de dos fitxers seqüencials de text anomenats ``fe1`` i ``fe2``, i que calcula els resultats en tres fitxers seqüencials de text anomenats ``fs1``, ``fs2`` i ``fs3``. Suposem també que disposem de tres jocs de prova numerats del 0 al 2. El joc de prova *k*-èssim està format per cinc fitxers: *k*-``fe1`` i *k*-``fe2`` Contenen les dades que el programa llegirà dels fitxers ``fe1`` i ``fe2``. *k*-``fs1``, *k*-``fs2`` i *k*-``fs3`` Contenen els resultats que el programa hauria d'escriure en els fitxers ``fs1``, ``fs2`` i ``fs3``. És a dir, els fitxer ``0-fe1`` i ``0-fe2`` contenen les dades del primer joc de prova i els fitxers ``0-fs1``, ``0-fs2`` i ``0-fs3`` contenen els resultats. Els fitxers ``1-fe1``, ``1-fe2``, ``1-fs1``, ``1-fs2`` i ``1-fs3`` contenen les dades i els resultats del segon joc de prova, i així successivament. Per tal d'executar el programa subministrant-li les dades del joc de prova 0, abans cal copiar el contingut dels fitxers ``0-fe1`` i ``0-fe2`` en ``fe1`` i ``fe2`` respectivament, que són els fitxers d'on llegirà el programa, fent el següent:: cp 0-fe1 fe1 cp 0-fe2 fe2 lmn El programa ``lmn`` llegirà les dades dels fitxers ``fe1`` i ``fe2``, que coincideixen amb les del joc de prova 0, i escriurà en els fitxers ``fs1``, ``fs2`` i ``fs3``. Podem comprovar automàticament que cada un dels fitxers resultants coincideix amb el resultat que esperem comparant el fitxer ``fs1`` amb ``0-fs1``, ``fs2`` amb ``0-fs2`` i ``fs3`` amb ``0-fs3`` com s'explica en el document `Com calcular les diferències entre dos fitxers`_. Per executar el programa ``lmn`` amb les dades del joc de prova 1 i comprovar que el resultats coincideixen amb els que proporciona el joc de prova 1 només cal substituir ``0-`` per ``1-`` en els dos paràgrafs anteriors. Dades i resultats en fitxers i canals estàndard ----------------------------------------------- Suposem, per exemple, que el programa ``opq`` llegeix les dades de canal estàndard d'entrada i del fitxer ``fe1``, i escriu els resultats al canal estàndard de sortida i al fitxer ``fs1``. Suposem també que disposem de tres jocs de prova numerats del 0 al 2. El joc de prova *k*-èssim està format per quatre fitxers: *k*-``etst`` Conté les dades que el programa llegirà del canal estàndard d'entrada. *k*-``fe1`` Conté les dades que el programa llegirà del fitxer ``fe1``. *k*-``stst`` Conté els resultats que el programa hauria d'escriure al canal estàndard de sortida. *k*-``fs1`` Conté els resultats que el programa hauria d'escriure en el fitxer ``fs1``. És a dir, els fitxer ``0-etst`` i ``0-fe1`` contenen les dades del primer joc de prova i els fitxers ``0-stst`` i ``0-fs1`` contenen els resultats. Els fitxers ``1-etst``, ``1-fe1``, ``1-stst`` i ``1-fs1`` contenen les dades i els resultats del segon joc de prova, i així successivament. Per tal d'executar el programa subministrant-li les dades del joc de prova 0, abans cal copiar el contingut del fitxer ``0-fe1`` en ``fe1``, que és el fitxer d'on llegirà el programa, i en executar el programa cal redirigir l'entrada cap a ``0-etst`` i la sortida cap a un fitxer temporal ``tmp`` fent el següent:: cp 0-fe1 fe1 opq < 0-etst > tmp El programa ``opq`` llegirà les dades del fitxer ``fe1`` i del canal estàndard d'entrada que hem redirigit cap a ``0-etst``, que coincideixen amb les del joc de prova 0. El programa escriurà en el fitxer ``fs1`` i el canal estàndard de sortida que hem redirigit cap al fitxer ``tmp``. Podem comprovar automàticament que cada un dels fitxers resultants coincideix amb el resultat que esperem comparant el fitxer ``fs1`` amb ``0-fs1`` i ``tmp`` amb ``0-stst`` com s'explica en el document `Com calcular les diferències entre dos fitxers`_. Per executar el programa ``lmn`` amb les dades del joc de prova 1 i comprovar que el resultats coincideixen amb els que proporciona el joc de prova 1 només cal substituir ``0-`` per ``1-`` en els dos paràgrafs anteriors. .. _intèrpret de comandes: http://en.wikipedia.org/wiki/Command-line_interpreter .. _redirigeix: http://en.wikipedia.org/wiki/Redirection_(computing) .. _Com calcular les diferències entre dos fitxers: diff.html ---- |xhtml| |css| |vab| .. |xhtml| image:: http://www.w3.org/Icons/valid-xhtml10 :target: http://validator.w3.org/check?uri=referer :alt: Valid XHTML 1.0 Transitional :height: 31 :width: 88 .. |css| image:: http://jigsaw.w3.org/css-validator/images/vcss :target: http://jigsaw.w3.org/css-validator/ :alt: Valid CSS! :height: 31 :width: 88 .. |vab| image:: http://www.anybrowser.org/campaign/bvgraphics/qualsevol.png :target: http://www.anybrowser.org/campaign/anybrowser_cat.html :width: 88 :height: 31 :alt: Viewable With Any Browser