SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Estudis d’Informàtica, Multimèdia i Telecomunicació




Programació
PAC2 — Segona Prova d'Avaluació Continuada

Cognoms: RIBAS TUR
Nom: PAQUITA




Indicacions generals:
Raoneu i justifiqueu totes les respostes.
Les respostes incorrectes no disminueixen la nota.
Per a dubtes i aclariments sobre l’enunciat, adreceu-vos al consultor responsable de l’aula.


Lliurament:
1. S'ha de respondre les preguntes al mateix document de l'enunciat que rebrà el nom
   CognomsNomP_PAC2.doc (o CognomsNomP_PAC2.odt)
2. La codificació de la pregunta 7 es lliurarà mitjançant el fitxer PAC2_Exer07.php que es
   construirà sobre las plantilla adjunta. És especialment important respectar el nom
   d'aquesta arxiu php.
3. Els dos fitxers es comprimiran en un únic arxiu de format zip o rar de nom
   CognomsNomP_PAC2.zip (o CognomsNomP_PAC2.rar) que es lliurarà a la bústia de
   "Lliurament i registre d'AC"
4. Data límit per lliurar la solució: dilluns, 7 de novembre de 2011 (a les 23:59 hores).


És imprescindible respectar el format i data d’entrega. La no adequació a aquestes
especificacions pot suposar la no avaluació de la PAC.




                                                                                       1
Exercici 1: Declaració d’accions i funcions [10%]


Objectius: Distingir entre accions i funcions. Declarar accions i funcions per a resoldre un
problema. Definir els paràmetres, amb els tipus de dades corresponents i els modificadors
d’entrada i sortida correctes.


Materials: M1 i M2


Tasca: Per a cada apartat, decidiu si és millor una acció o una funció i definiu-ne la
capçalera (només es demana la capçalera, no cal que dissenyeu cap algorisme).
Es demana la capçalera d'un mòdul (acció o funció) que:

   a) Donades la productivitat horària d’una persona (amb decimals) del mes actual i del
      mes anterior retorni si la del mes actual s’ha incrementat o no respecte a la del mes
      anterior.

       funcio increment (mesActual, mesAnterior): boolea


   b) Donades les despeses ealitzades en programari fins el moment, el preu d’una
      nova llicència i el número total de llicències que es compren ara, actualitzi l’import
      total de la compra de programes acumulant l’import d’aquestes noves llicències.

       accio despesesProgramari (ent preuLlicencia: real,
                                 ent numLlicencia: enter,
                                 entsor despeses: real)


   c) Donada una població de gats, llegeixi del canal d’entrada estàndard les
      característiques d’aquests gats i retorni el número de gats de la població que són
      de color negre.

       funcio (gats): enter


   d) Donat l’import d’un préstec, el percentatge de finançament i el número de mesos
      finançat, retorni l’import mensual a pagar.
       funcio importMensual (import, percentatge, mesos): real




                                                                                      2
Exercici 2: Especificació d’accions i funcions [10%]


Objectius: Descriure de manera precisa què fa una funció o una acció sense necessitat de
saber com ho fa.


Materials: M1 i M2


Tasca: Especifiqueu les funcions i/o accions dels apartats a i b de l’exercici 1. Cal
que indiqueu la precondició, la postcondició i, si es tracta d’una funció, què retorna.
a)

{Pre: mesActual = MESACTUAL i mesAnterior=MESANTERIOR}

funcio increment (mesActual, mesAnterior): booleà

{Post: si mes Actual > mes Anterior increment= CERT sinó increment = FALS}



b)


{Pre: despeses = DESPESES i preuLlicencia = PREULLICENCIA i numLlicencia =
NUMLLICENCIA}

accio despesesProgramari (ent preuLlicencia: real,
                          ent numLlicencia: enter,
                          entsor despeses: real)

{Post: despeses = (preuLlicencia x numLlicencia) + despeses}




                                                                                  3
4
Exercici 3: Modificadors d’entrada i sortida [10%]


Objectius: Saber detectar la correctesa en la crida a accions o funcions, entenent el
funcionament dels modificadors d’entrada i sortida dels paràmetres.


Materials: M1 i M2


Tasca: Donats l’algorisme i les capçaleres de les següents accions i funcions:

      funcio function1( x: enter, y: enter) : enter;

      funcio function2( x: enter, c: caracter) : boolea;

      accio action1( ent x: enter, ent y: real, entsor b: boolea, entsor z: enter) ;

      accio action2( ent c: caracter, sor x: enter, entsor y: enter);

      algorisme algorithm
      var
             x, y: enter;
             c : real;
             d : caracter;
             b: boolea;
      fvar
             x := 5;
             y := 10;
             c := 0.0;
             d := readChar();
             b := fals;

             ...



             writeInteger (x + y);
             writeRea l(c / 2.0);
             writeChar (d);
             b := (x + y) = (c / 2.0);

             si (b) llavors
                      writeChar(‘S’);
             sino
                      writeChar(‘N’);
             fsi

      falgorisme




                                                                                       5
Responeu a cada apartat si és correcte o no substituir el requadre gris de
l’algorisme algorithm per la instrucció que es dóna i, si no ho és, indiqueu-ne les
causes.

   a) action2 (d, x, realToInt(c) );

       INCORRECTE: entsor ha de ser una variable


   b) action1 (function1(x, y), readChar(), function2(x, d), x);

       CORRECTE


   c) x := function1 (function1(x, y), y);

       CORRECTE


   d) b := function2 (action1 (x, c, b, x), d);

       INCORRECTE: Action1 no ens torna un enter




                                                                             6
Exercici 4: Disseny d’algorismes [15%]


Objectius:       Entendre un algorisme i saber fer crides a accions i funcions.


Materials: M1 i M2


Tasca: Disposem d’un algorisme que ens retorna informació del resultat d’una
cursa. Llegeix del canal d’entrada estàndard el dni d’un conductor (numèric, sense
lletra) i un identificador de cursa, també numèric, i:
    Si es tracta d’una cursa de cotxes escriu al canal de sortida estàndard:
             o    ‘W’ si el conductor indicat ha guanyat la cursa, i ha igualat o superat
                 la velocitat mitja obtinguda en la resta de carreres, i si aquesta és la
                 carrera en que ha fet menys parades,
             o i ‘L’ en la resta de casos.
    En cas de no ser una cursa de cotxes escriu ‘N’.


Ompliu les caixes, amb una única instrucció o expressió a cada una, per
aconseguir el comportament que us hem descrit. L’algorisme resultant ha d’utilitzar
obligatòriament les següents accions i funcions, que no heu d’implementar:



      Acció que llegeix del canal d’entrada estàndard la informació del conductor i cursa:

          accio getInfo (sor dni: enter, sor idRace: enter);

      Acció que donats el dni d’un conductor i l’identificador de cursa retorna si aquest ha guanyat
      la cursa, la velocitat mitja que ha portat a la cursa i el número d’aturades que ha fet:

          accio getInfoRunnerRace (ent dni: enter, ent idRace: enter,
                           sor won: boolea, sor averageSpeed: real, sor numberStops: enter);

      Acció que donat el dni d’un conductor retorna la velocitat mitja que ha portat a les curses
      que ha fet, i el número mínim d’aturades que ha fet fins al moment en totes les seves
      curses:

          accio getInfoRaces ( ent dni: enter, sor averageSpeed: real, sor numberStops: enter);

      Acció que donat un identificador de cursa retorna cert si és una cursa de cotxes i fals en cas
      contrari:

          funcio isCarRace (idRace: enter) : boolea;




                                                                                              7
algorisme RaceInfo

const
     WIN : caracter = ‘W’;
     LOSE : caracter = ‘L’;
     NOCAR : caracter = ‘N’;
fconst

var
        dni, idRace: enter;
        bCarRace, wonRace: boolea;
        averageSpeedRace, averageSpeed: real;
        numberStopsRace, numberStopsMin: enter;

fvar
       {Llegeix del canal d’entrada estàndard la informació del conductor i de la cursa
       que hem de tractar}

        getInfoRunnerRace (dni, idRace, wonRace, averageSpeedRace,                   ;
        numberStopsRace);
                          isCarRace (idRace);
      bCarRace       :=                                                     ;

      si bCarRace llavors

         {Obtenim la informació associada al conductor / cursa llegida del canal
                                                                     estàndard}
                                    getInfo (dni, idRace);
                                                                     ;


         {Obtenim la informació genèrica del conductor en totes les seves curses}
          getInfoRaces (dni, averageSpeed, numberStopsMin);
                                                      ;

          {Decidim quin caràcter s'ha d'escriure}

          si      WIN = CERT i averageSpeedRace ≥ averageSpeed i           llavors
                  numberStopsRace < numberStopsMin)


                 writeChar(WIN);
          sino
                writeChar(LOSE);
          fsi
      sino
           writeChar(NOCAR);
      fsi


falgorisme




                                                                                 8
Exercici 5: Disseny d’algorismes [15%]
Objectius: Dissenyar una funció/acció.
Materials: M1 i M2
Tasca: Es demana un mòdul (acció o funció) que determini el pagament a realitzar
per les entrades a un espectacle amb les següents condicions: només es poden
comprar fins a quatre entrades i, si es compra més d'una entrada, hi ha descompte:
al cost de dues entrades es descompta el 10%, al de tres entrades el 15%, i a la
compra de quatre entrades el 20%.
El mòdul ha de rebre com a paràmetres el número total d’entrades comprades i el
preu d’una entrada, i ha de retornar per una banda si el número total d’entrades
demanades està dintre dels límits, i per altra banda l’import total de les entrades
(retornarà import 0 en cas d’haver-ne demanat més entrades de les permeses).

accio entrades (ent numero: enter,
                   ent preu: real,
                   sor límits: booleà,
                   sor total: real)
var
  numero: enter;
  preu, total: real;
  límits: booleà;
fvar

si (numero > 0 i ≤ 4 ) llavors
  límits := cert;
        Si (numero =1) llavors
                  total := preu;
        fsi
        si (numero =2) llavors
                  total := (preu -10%) * 2;
        fsi
        si (numero =3) llavors
                  total := (preu -15%) * 3;
        fsi
        si (numero =4) llavors
                  total := (preu -20%) * 4;
        fsi
sinó
  total = 0;
  límits := fals;
fsi

faccio




                                                                             9
Exercici 6: Seguiment de l’execució [15%]


Objectius: Fer el seguiment, pas a pas, de l’execució d’una funció. Mantenir una taula amb
els valors que van prenent els objectes a mida que avança l’execució.


Materials: M1 i M2


Tasca: Disposem d'un algorisme capaç de calcular els dies transcorreguts entre dues
dates a partir de la vigència del calendari gregorià (aprox. 1583). Aquest algorisme té en
compte el patró de distribució dels anys de traspàs.

L’algorisme és:

algorisme daysBetwen

var
   day1, month1, year1, day2, month2, year2 : enter;
   counter1, counter2: enter;
fvar

  getData(day1, month1, year1);
  getData(day2, month2, year2);
  si wrongData (day1, month1, year1, day2, mont2, year2) llavors
     writeCharacter ('E');
  sino
     counter1 := daysAfter1583(year1, month1, day1);
     counter2 := daysAfter1583(year2, month2, day2);
     writeInteger (counter2-counter1);
  fsi

falgorisme


accio getData (sort day: enter, sort month:enter, sort year: enter)

  day := readInteger();
  month := readInteger();
  year := readInteger();
faccio


funcio wrongData (day1:enter, month1:enter, years1:enter, day2:enter, mont2:enter,
         year2:enter): boolea
var
  wrong: boolea;
fvar

  wrong:= false;
  si (year2<year1) llavors
      wrong:= true;
  sino si ((year2=year1) i (month2<mont1)) llavors
           wrong:= true;
       sino si ((year2=year1) i (month2=mont1) i (day2<day1)) llavors
               wrong:= true;
            fsi
       fsi
  fsi
  retorna (wrong);
ffuncio




                                                                                   10
funcio isLeapYear (year: enter): boolea
var
 leap: boolea;
fvar

  si (year mod 400 = 0) llavors
     leap := true;
  sino si (year mod 100 = 0 ) llavors
           leap := false;
       sino si (year mod 4 = 0 ) llavors
                 leap := true;
            sino
                 leap := false;
            fsi
      fsi
  fsi

  retorna (leap);
ffuncio


funcio dayOfTheYear(year: enter, month:enter, day:enter): enter
var
  daysCounter: enter;
fvar

  daysCounter := day;
  si (month >11) llavors
     daysCounter := daysCounter   + 30;
  fsi
  si (month >10) llavors
     daysCounter := daysCounter   + 31;
  fsi
  si (month >9) llavors
     daysCounter := daysCounter   + 30;
  fsi
  si (month >8) llavors
     daysCounter := daysCounter   + 31;
  fsi
  si (month >7) llavors
     daysCounter := daysCounter   + 31;
  fsi
  si (month >6) llavors
     daysCounter := daysCounter   + 30;
  fsi
  si (month >5) llavors
     daysCounter := daysCounter   + 31;
  fsi
  si (month >4) llavors
     daysCounter := daysCounter   + 30;
  fsi
  si (month >3) llavors
     daysCounter := daysCounter   + 31;
  fsi
  si (month >2) llavors
     daysCounter := daysCounter   + 28;
  fsi
  si (month >1) llavors
     daysCounter := daysCounter   + 31;
  fsi

  si (isLeapYear(year) i month > 2) llavors
    daysCounter := daysCounter + 1;
  fsi

  retorna (daysCounter);
ffuncio




                                                                  11
funcio daysYearsAfter1583 (year:enter) : enter
var
  daysCounter: enter;
  currentYear: enter;
  leap: boolean;
fvar

  daysCounter := 0;
  currentYear := 1583;

  mentre (currentYear < year)fer
    daysCounter := daysCounter + 365;
       leap := isLeapYear(currentYear)
       si (leap) llavors
          daysCounter := daysCounter +1;
       fsi
       currentYear := currentYear + 1;
  fmentre

  retorna (daysCounter);
ffuncio

funcio daysAfter1583(year: enter, month:enter, day:enter): enter
  retorna (daysYearsAfter1583 (year) + dayOfTheYear(year, month, day));
ffuncio



   a) Ompliu la taula amb tots els valors que van prenent en la function
      daysYearsAfter1583 els objectes si el valor rebut com paràmetre és 1586 (empreu
      una línia de la taula per cada canvi de valor d'una de les variables; hi ha més fileres
      que les necessàries).

                             currentYear         daysCounter
                                1583                  0
                                1584                 365
                                1585                 730
                                1586                1195



   b) Ompliu la taula amb els valors de la variable daysCounter en la function
      dayOfTheYear si els paràmetres de la crida són (1956, 3, 13).
      (Hi ha més caselles que les necessàries).


        41          72          73


   c) Suposant que la seqüència d’entrada és < 15 12 2000 15 12 2000>, què s’escriurà
      a la sortida estàndard?

                                             0




                                                                                     12
Exercici 7: Programació [15%]


Objectius: Codificar un algorisme en llenguatge PHP. Fer proves per a veure si el
funcionament és correcte.


Materials: Guia bàsica de PHP i miniguies.


Tasca: Codifiqueu en llenguatge PHP i proveu l’ algorisme de l’exercici 6.

Document php adjunt: PAC2_exer7




                                                                             13
Exercici 8: Codificació [10%]


Objectius: Comprensió d’algorismes en PHP.


Materials: Guia bàsica de PHP i miniguies.

Tasca 1: El model de calendari gregorià, va substituir el calendari julià que considerava
anys de traspàs tots els múltiples de 4. Creeu una function isLeapYearJulian equivalent a
isLeapYear, però seguint les normes del calendari julià:


funcio isLeapYearJulian (year: enter): booleà

var
          leap: booleà;
fvar

si (year mod 4 = 0) llavors
        leap := cert;
sinó
        leap := fals;
fsi

retorna (leap);

ffuncio


PHP:

function isLeapYearJulian ($year)
{
if ($year mod 4 = 0) {
         $leap == true;
} else {
         $leap == false;
}
return ($leap);
}




                                                                                   14
Tasca 2: L'any 1582, quan es va aplicar el calendari gregorià, es va haver de fer un
reajustament del calendari de manera que el dia posterior al 5 d'octubre va ser el 15
d'octubre (els dies 6 al 14 no van existir). Modifiqueu la function dayOfTheYear per tal que
fos vàlida també per l'any 1582

funcio dayOfTheYear(year: enter, month:enter, day:enter): enter
var
 daysCounter: enter;
fvar

  daysCounter := day;
  si (month >11) llavors
      daysCounter := daysCounter + 30;
  fsi
  si (month >10) llavors
      daysCounter := daysCounter + 31;
  fsi
  si (month >9) llavors
      daysCounter := daysCounter + 30;
  fsi
  si (month >8) llavors
      daysCounter := daysCounter + 31;
  fsi
  si (month >7) llavors
      daysCounter := daysCounter + 31;
  fsi
  si (month >6) llavors
      daysCounter := daysCounter + 30;
  fsi
  si (month >5) llavors
      daysCounter := daysCounter + 31;
  fsi
  si (month >4) llavors
      daysCounter := daysCounter + 30;
  fsi
  si (month >3) llavors
      daysCounter := daysCounter + 31;
  fsi
  si (month >2) llavors
      daysCounter := daysCounter + 28;
  fsi
  si (month >1) llavors
      daysCounter := daysCounter + 31;
  fsi

  si (isLeapYear(year) i month > 2) llavors
  daysCounter := daysCounter + 1;
  fsi


                                                                                     15
si (year = 1582) llavors

        si (month > 10) llavors
            daysCounter := daysCounter – 9;
        fsi
        si (month = 10 i day > 5) llavors
            daysCounter := daysCounter – 9;
        fsi
  fsi


 retorna (daysCounter);
ffuncio




PHP

function dayOfTheYear ($year, $month, $day)
{
$daysCounter = $day;

if ($month > 11) {
       $daysCounter = $daysCounter + 30;
}
if ($month > 10) {
       $daysCounter = $daysCounter + 31;
}
if ($month > 9) {
       $daysCounter = $daysCounter + 30;
}
if ($month > 8) {
       $daysCounter = $daysCounter + 31;
}
if ($month > 7) {
       $daysCounter = $daysCounter + 31;
}
if ($month > 6) {
       $daysCounter = $daysCounter + 30;
}
if ($month > 5) {
       $daysCounter = $daysCounter + 31;
}
if ($month > 4) {
       $daysCounter = $daysCounter + 30;
}


                                              16
if ($month > 3) {
         $daysCounter = $daysCounter + 31;
}
if ($month > 2) {
         $daysCounter = $daysCounter + 28;
}
if ($month > 1) {
         $daysCounter = $daysCounter + 31;
}
if (isLeapYear ($year) && $month > 2) {
         $daysCounter = $daysCounter + 1;
}
if ($year == 1582) {
         if ($month > 10) {
                $daysCounter = $daysCounter – 9;
         }
         if ($month == 10 && $day > 5) {
                $daysCounter = $daysCounter – 9;
         }
}
return ($daysCounter);
}


Tasca 3: Sabem que el dia 1 de gener de 1583 (primer any complet amb vigència del
calendari gregorià) va ser dissabte.
Creeu la function weekDay en PHP que rebi en un paràmetre la quantitat de dies passats
des de 1-1-1583 fins una data determinada i escrigui el dia de la setmana de què es tracta
aquesta data.

acció weekDay (ent nombreDies: enter);

var
       nombreDies: enter;
fvar

Si (nombreDies mod 7 = 0) llavors
       writeCharacter (‘dissapte’);
fsi

Si (nombreDies mod 7 = 1) llavors
       writeCharacter (‘diumenge’);
fsi

Si (nombreDies mod 7 = 2) llavors
       writeCharacter (‘dilluns’);
fsi




                                                                                    17
Si (nombreDies mod 7 = 3) llavors
       writeCharacter (‘dimarts’);
fsi

Si (nombreDies mod 7 = 4) llavors
       writeCharacter (‘dimecres’);
fsi

Si (nombreDies mod 7 = 5) llavors
       writeCharacter (‘dijous’);
fsi

Si (nombreDies mod 7 = 6) llavors
       writeCharacter (‘divendres’);
fsi

facció


PHP

function weekDay ($nombreDies)
{

if ($nombreDies % 7 == 0) {

         print ("dissapte");
}
if ($nombreDies % 7 == 1) {

         print ("diumenge");
}
if ($nombreDies % 7 == 2) {

       print ("dilluns");
}
if ($nombreDies % 7 == 3) {

         print ("dimarts");
}
if ($nombreDies % 7 == 4) {

         print ("dimecres");
}
if ($nombreDies % 7 == 5) {

         print ("dijous");
}


                                       18
if ($nombreDies % 7 == 6) {

       print ("divendres");
}

}




                              19

Weitere ähnliche Inhalte

Was ist angesagt?

Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaLidia Bria
 
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita RibasMatemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita RibasPaquita Ribas
 
| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel OrtizArdillita Trepadora
 
Programació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaLidia Bria
 
Funcions 4t eso matemàtiques
Funcions 4t eso matemàtiquesFuncions 4t eso matemàtiques
Funcions 4t eso matemàtiquesrbnterrassa
 
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...Paquita Ribas
 
Mates codificacio criptografia_compressio
Mates codificacio criptografia_compressioMates codificacio criptografia_compressio
Mates codificacio criptografia_compressioPaquita Ribas
 
Funciones
FuncionesFunciones
FuncionesEVAMASO
 
Power mates 2on
Power mates 2onPower mates 2on
Power mates 2onHermiprofe
 
Repàs Funcions Matemàtiques 4t ESO
Repàs Funcions Matemàtiques 4t ESORepàs Funcions Matemàtiques 4t ESO
Repàs Funcions Matemàtiques 4t ESOrbnterrassa
 
Programació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia BriaProgramació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia BriaLidia Bria
 
Algorismes
AlgorismesAlgorismes
Algorismesmferre7
 

Was ist angesagt? (20)

Prog_pac2
Prog_pac2Prog_pac2
Prog_pac2
 
Prog_pac1
Prog_pac1Prog_pac1
Prog_pac1
 
Prog_pac3
Prog_pac3Prog_pac3
Prog_pac3
 
Programació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia BriaProgramació - Pac1 - Lidia Bria
Programació - Pac1 - Lidia Bria
 
Prog_prac1
Prog_prac1Prog_prac1
Prog_prac1
 
Prog_prac2
Prog_prac2Prog_prac2
Prog_prac2
 
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita RibasMatemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
Matemàtiques per a la Multimèdia II - PAC 1 - Multimedia (UOC) - Paquita Ribas
 
| PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio | PROGRAMACIO | Pract2 solucio
| PROGRAMACIO | Pract2 solucio
 
| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz| programacion | PRACTICA 2 - Madel Ortiz
| programacion | PRACTICA 2 - Madel Ortiz
 
Programació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia BriaProgramació - Pac3 - Lidia Bria
Programació - Pac3 - Lidia Bria
 
Funcions
Funcions Funcions
Funcions
 
Funcions 4t eso matemàtiques
Funcions 4t eso matemàtiquesFuncions 4t eso matemàtiques
Funcions 4t eso matemàtiques
 
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
Matemàtiques per a la Multimèdia II - Pràctica 1 - Multimedia (UOC) - Paquita...
 
Mates codificacio criptografia_compressio
Mates codificacio criptografia_compressioMates codificacio criptografia_compressio
Mates codificacio criptografia_compressio
 
Funciones
FuncionesFunciones
Funciones
 
Funcions
FuncionsFuncions
Funcions
 
Power mates 2on
Power mates 2onPower mates 2on
Power mates 2on
 
Repàs Funcions Matemàtiques 4t ESO
Repàs Funcions Matemàtiques 4t ESORepàs Funcions Matemàtiques 4t ESO
Repàs Funcions Matemàtiques 4t ESO
 
Programació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia BriaProgramació - Pràctica 1 - Solució - Lidia Bria
Programació - Pràctica 1 - Solució - Lidia Bria
 
Algorismes
AlgorismesAlgorismes
Algorismes
 

Ähnlich wie Programació - PAC 2 - Multimedia (UOC) - Paquita Ribas

Programació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia BriaProgramació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia BriaLidia Bria
 
Programació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaProgramació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaLidia Bria
 
Programació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaLidia Bria
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaLidia Bria
 
Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programaciolluís nater
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinadesceedukat
 
Tractament i publicació d'imatge i vídeo practica2
Tractament i publicació d'imatge i vídeo practica2Tractament i publicació d'imatge i vídeo practica2
Tractament i publicació d'imatge i vídeo practica2Marcos Baldovi
 
Programació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaProgramació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaLidia Bria
 
Programem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robóticaProgramem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robóticaemunoz341
 
Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programacioscholl Garbí
 
eso2 ut3-programacio
eso2 ut3-programacioeso2 ut3-programacio
eso2 ut3-programacioscholl Garbí
 

Ähnlich wie Programació - PAC 2 - Multimedia (UOC) - Paquita Ribas (16)

Programació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia BriaProgramació - Pac2 - Solució - Lídia Bria
Programació - Pac2 - Solució - Lídia Bria
 
Programació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia BriaProgramació - Pac2 - Lidia Bria
Programació - Pac2 - Lidia Bria
 
Programació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia BriaProgramació - Pac3 - Solució - Lídia Bria
Programació - Pac3 - Solució - Lídia Bria
 
Programació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia BriaProgramació - Pràctica1 - Lidia Bria
Programació - Pràctica1 - Lidia Bria
 
Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programacio
 
PW_pac2
PW_pac2PW_pac2
PW_pac2
 
Operacions combinades
Operacions combinadesOperacions combinades
Operacions combinades
 
Tractament i publicació d'imatge i vídeo practica2
Tractament i publicació d'imatge i vídeo practica2Tractament i publicació d'imatge i vídeo practica2
Tractament i publicació d'imatge i vídeo practica2
 
PW_pac1
PW_pac1PW_pac1
PW_pac1
 
Hello NFC!
Hello NFC!Hello NFC!
Hello NFC!
 
UD3 PROGRAMACIÓ
UD3 PROGRAMACIÓUD3 PROGRAMACIÓ
UD3 PROGRAMACIÓ
 
Programació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia BriaProgramació - Pràctica2 - Solució - Lídia Bria
Programació - Pràctica2 - Solució - Lídia Bria
 
Programem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robóticaProgramem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robótica
 
Entorn Tangible Digital
Entorn Tangible DigitalEntorn Tangible Digital
Entorn Tangible Digital
 
Eso2 ut3-programacio
Eso2 ut3-programacioEso2 ut3-programacio
Eso2 ut3-programacio
 
eso2 ut3-programacio
eso2 ut3-programacioeso2 ut3-programacio
eso2 ut3-programacio
 

Mehr von Paquita Ribas

Tipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasTipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasPaquita Ribas
 
Tipografia · Resum llibre
Tipografia · Resum llibreTipografia · Resum llibre
Tipografia · Resum llibrePaquita Ribas
 
Taller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasTaller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasPaquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Paquita Ribas
 
Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Paquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Paquita Ribas
 
Tractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumTractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumPaquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Paquita Ribas
 
Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Paquita Ribas
 
Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Paquita Ribas
 
Tractament i publicació d'Àudio - Resum modul 1
Tractament i publicació d'Àudio -  Resum modul 1Tractament i publicació d'Àudio -  Resum modul 1
Tractament i publicació d'Àudio - Resum modul 1Paquita Ribas
 
Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Paquita Ribas
 
Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Paquita Ribas
 
Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Paquita Ribas
 
Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Paquita Ribas
 

Mehr von Paquita Ribas (20)

Tipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita RibasTipografia · Resum materials · Paquita Ribas
Tipografia · Resum materials · Paquita Ribas
 
Tipografia · Resum llibre
Tipografia · Resum llibreTipografia · Resum llibre
Tipografia · Resum llibre
 
Taller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita RibasTaller de Color · Pac 1 · Paquita Ribas
Taller de Color · Pac 1 · Paquita Ribas
 
Licencias
LicenciasLicencias
Licencias
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3Fotografia Digital - Resum mòdul 3
Fotografia Digital - Resum mòdul 3
 
Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2Fotografia Digital - Resum mòdul 2
Fotografia Digital - Resum mòdul 2
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1Fotografia Digital - Resum mòdul 1
Fotografia Digital - Resum mòdul 1
 
Tractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resumTractament i Publicació d'Àudio - Super-resum
Tractament i Publicació d'Àudio - Super-resum
 
Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6Tractament i Publicació d'Àudio - Resum mòdul 6
Tractament i Publicació d'Àudio - Resum mòdul 6
 
Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5Tractament i Publicació d'Àudio - Resum mòdul 5
Tractament i Publicació d'Àudio - Resum mòdul 5
 
Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4Tractament i Publicció d'Àudio - Resum mòdul 4
Tractament i Publicció d'Àudio - Resum mòdul 4
 
Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3Tractament i Publicació d'Àudio - Resum mòdul 3
Tractament i Publicació d'Àudio - Resum mòdul 3
 
Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2Tractament i Publicació d'Àudio - Resum mòdul 2
Tractament i Publicació d'Àudio - Resum mòdul 2
 
Tractament i publicació d'Àudio - Resum modul 1
Tractament i publicació d'Àudio -  Resum modul 1Tractament i publicació d'Àudio -  Resum modul 1
Tractament i publicació d'Àudio - Resum modul 1
 
Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8Gestió de projectes Resumen mod 8
Gestió de projectes Resumen mod 8
 
Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7Gestió de projectes - Resum mod 7
Gestió de projectes - Resum mod 7
 
Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6Gestió de projectes - Resum mod 6
Gestió de projectes - Resum mod 6
 
Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5Gestió de projectes - Resum mod 5
Gestió de projectes - Resum mod 5
 

Programació - PAC 2 - Multimedia (UOC) - Paquita Ribas

  • 1. Estudis d’Informàtica, Multimèdia i Telecomunicació Programació PAC2 — Segona Prova d'Avaluació Continuada Cognoms: RIBAS TUR Nom: PAQUITA Indicacions generals: Raoneu i justifiqueu totes les respostes. Les respostes incorrectes no disminueixen la nota. Per a dubtes i aclariments sobre l’enunciat, adreceu-vos al consultor responsable de l’aula. Lliurament: 1. S'ha de respondre les preguntes al mateix document de l'enunciat que rebrà el nom CognomsNomP_PAC2.doc (o CognomsNomP_PAC2.odt) 2. La codificació de la pregunta 7 es lliurarà mitjançant el fitxer PAC2_Exer07.php que es construirà sobre las plantilla adjunta. És especialment important respectar el nom d'aquesta arxiu php. 3. Els dos fitxers es comprimiran en un únic arxiu de format zip o rar de nom CognomsNomP_PAC2.zip (o CognomsNomP_PAC2.rar) que es lliurarà a la bústia de "Lliurament i registre d'AC" 4. Data límit per lliurar la solució: dilluns, 7 de novembre de 2011 (a les 23:59 hores). És imprescindible respectar el format i data d’entrega. La no adequació a aquestes especificacions pot suposar la no avaluació de la PAC. 1
  • 2. Exercici 1: Declaració d’accions i funcions [10%] Objectius: Distingir entre accions i funcions. Declarar accions i funcions per a resoldre un problema. Definir els paràmetres, amb els tipus de dades corresponents i els modificadors d’entrada i sortida correctes. Materials: M1 i M2 Tasca: Per a cada apartat, decidiu si és millor una acció o una funció i definiu-ne la capçalera (només es demana la capçalera, no cal que dissenyeu cap algorisme). Es demana la capçalera d'un mòdul (acció o funció) que: a) Donades la productivitat horària d’una persona (amb decimals) del mes actual i del mes anterior retorni si la del mes actual s’ha incrementat o no respecte a la del mes anterior. funcio increment (mesActual, mesAnterior): boolea b) Donades les despeses ealitzades en programari fins el moment, el preu d’una nova llicència i el número total de llicències que es compren ara, actualitzi l’import total de la compra de programes acumulant l’import d’aquestes noves llicències. accio despesesProgramari (ent preuLlicencia: real, ent numLlicencia: enter, entsor despeses: real) c) Donada una població de gats, llegeixi del canal d’entrada estàndard les característiques d’aquests gats i retorni el número de gats de la població que són de color negre. funcio (gats): enter d) Donat l’import d’un préstec, el percentatge de finançament i el número de mesos finançat, retorni l’import mensual a pagar. funcio importMensual (import, percentatge, mesos): real 2
  • 3. Exercici 2: Especificació d’accions i funcions [10%] Objectius: Descriure de manera precisa què fa una funció o una acció sense necessitat de saber com ho fa. Materials: M1 i M2 Tasca: Especifiqueu les funcions i/o accions dels apartats a i b de l’exercici 1. Cal que indiqueu la precondició, la postcondició i, si es tracta d’una funció, què retorna. a) {Pre: mesActual = MESACTUAL i mesAnterior=MESANTERIOR} funcio increment (mesActual, mesAnterior): booleà {Post: si mes Actual > mes Anterior increment= CERT sinó increment = FALS} b) {Pre: despeses = DESPESES i preuLlicencia = PREULLICENCIA i numLlicencia = NUMLLICENCIA} accio despesesProgramari (ent preuLlicencia: real, ent numLlicencia: enter, entsor despeses: real) {Post: despeses = (preuLlicencia x numLlicencia) + despeses} 3
  • 4. 4
  • 5. Exercici 3: Modificadors d’entrada i sortida [10%] Objectius: Saber detectar la correctesa en la crida a accions o funcions, entenent el funcionament dels modificadors d’entrada i sortida dels paràmetres. Materials: M1 i M2 Tasca: Donats l’algorisme i les capçaleres de les següents accions i funcions: funcio function1( x: enter, y: enter) : enter; funcio function2( x: enter, c: caracter) : boolea; accio action1( ent x: enter, ent y: real, entsor b: boolea, entsor z: enter) ; accio action2( ent c: caracter, sor x: enter, entsor y: enter); algorisme algorithm var x, y: enter; c : real; d : caracter; b: boolea; fvar x := 5; y := 10; c := 0.0; d := readChar(); b := fals; ... writeInteger (x + y); writeRea l(c / 2.0); writeChar (d); b := (x + y) = (c / 2.0); si (b) llavors writeChar(‘S’); sino writeChar(‘N’); fsi falgorisme 5
  • 6. Responeu a cada apartat si és correcte o no substituir el requadre gris de l’algorisme algorithm per la instrucció que es dóna i, si no ho és, indiqueu-ne les causes. a) action2 (d, x, realToInt(c) ); INCORRECTE: entsor ha de ser una variable b) action1 (function1(x, y), readChar(), function2(x, d), x); CORRECTE c) x := function1 (function1(x, y), y); CORRECTE d) b := function2 (action1 (x, c, b, x), d); INCORRECTE: Action1 no ens torna un enter 6
  • 7. Exercici 4: Disseny d’algorismes [15%] Objectius: Entendre un algorisme i saber fer crides a accions i funcions. Materials: M1 i M2 Tasca: Disposem d’un algorisme que ens retorna informació del resultat d’una cursa. Llegeix del canal d’entrada estàndard el dni d’un conductor (numèric, sense lletra) i un identificador de cursa, també numèric, i:  Si es tracta d’una cursa de cotxes escriu al canal de sortida estàndard: o ‘W’ si el conductor indicat ha guanyat la cursa, i ha igualat o superat la velocitat mitja obtinguda en la resta de carreres, i si aquesta és la carrera en que ha fet menys parades, o i ‘L’ en la resta de casos.  En cas de no ser una cursa de cotxes escriu ‘N’. Ompliu les caixes, amb una única instrucció o expressió a cada una, per aconseguir el comportament que us hem descrit. L’algorisme resultant ha d’utilitzar obligatòriament les següents accions i funcions, que no heu d’implementar: Acció que llegeix del canal d’entrada estàndard la informació del conductor i cursa: accio getInfo (sor dni: enter, sor idRace: enter); Acció que donats el dni d’un conductor i l’identificador de cursa retorna si aquest ha guanyat la cursa, la velocitat mitja que ha portat a la cursa i el número d’aturades que ha fet: accio getInfoRunnerRace (ent dni: enter, ent idRace: enter, sor won: boolea, sor averageSpeed: real, sor numberStops: enter); Acció que donat el dni d’un conductor retorna la velocitat mitja que ha portat a les curses que ha fet, i el número mínim d’aturades que ha fet fins al moment en totes les seves curses: accio getInfoRaces ( ent dni: enter, sor averageSpeed: real, sor numberStops: enter); Acció que donat un identificador de cursa retorna cert si és una cursa de cotxes i fals en cas contrari: funcio isCarRace (idRace: enter) : boolea; 7
  • 8. algorisme RaceInfo const WIN : caracter = ‘W’; LOSE : caracter = ‘L’; NOCAR : caracter = ‘N’; fconst var dni, idRace: enter; bCarRace, wonRace: boolea; averageSpeedRace, averageSpeed: real; numberStopsRace, numberStopsMin: enter; fvar {Llegeix del canal d’entrada estàndard la informació del conductor i de la cursa que hem de tractar} getInfoRunnerRace (dni, idRace, wonRace, averageSpeedRace, ; numberStopsRace); isCarRace (idRace); bCarRace := ; si bCarRace llavors {Obtenim la informació associada al conductor / cursa llegida del canal estàndard} getInfo (dni, idRace); ; {Obtenim la informació genèrica del conductor en totes les seves curses} getInfoRaces (dni, averageSpeed, numberStopsMin); ; {Decidim quin caràcter s'ha d'escriure} si WIN = CERT i averageSpeedRace ≥ averageSpeed i llavors numberStopsRace < numberStopsMin) writeChar(WIN); sino writeChar(LOSE); fsi sino writeChar(NOCAR); fsi falgorisme 8
  • 9. Exercici 5: Disseny d’algorismes [15%] Objectius: Dissenyar una funció/acció. Materials: M1 i M2 Tasca: Es demana un mòdul (acció o funció) que determini el pagament a realitzar per les entrades a un espectacle amb les següents condicions: només es poden comprar fins a quatre entrades i, si es compra més d'una entrada, hi ha descompte: al cost de dues entrades es descompta el 10%, al de tres entrades el 15%, i a la compra de quatre entrades el 20%. El mòdul ha de rebre com a paràmetres el número total d’entrades comprades i el preu d’una entrada, i ha de retornar per una banda si el número total d’entrades demanades està dintre dels límits, i per altra banda l’import total de les entrades (retornarà import 0 en cas d’haver-ne demanat més entrades de les permeses). accio entrades (ent numero: enter, ent preu: real, sor límits: booleà, sor total: real) var numero: enter; preu, total: real; límits: booleà; fvar si (numero > 0 i ≤ 4 ) llavors límits := cert; Si (numero =1) llavors total := preu; fsi si (numero =2) llavors total := (preu -10%) * 2; fsi si (numero =3) llavors total := (preu -15%) * 3; fsi si (numero =4) llavors total := (preu -20%) * 4; fsi sinó total = 0; límits := fals; fsi faccio 9
  • 10. Exercici 6: Seguiment de l’execució [15%] Objectius: Fer el seguiment, pas a pas, de l’execució d’una funció. Mantenir una taula amb els valors que van prenent els objectes a mida que avança l’execució. Materials: M1 i M2 Tasca: Disposem d'un algorisme capaç de calcular els dies transcorreguts entre dues dates a partir de la vigència del calendari gregorià (aprox. 1583). Aquest algorisme té en compte el patró de distribució dels anys de traspàs. L’algorisme és: algorisme daysBetwen var day1, month1, year1, day2, month2, year2 : enter; counter1, counter2: enter; fvar getData(day1, month1, year1); getData(day2, month2, year2); si wrongData (day1, month1, year1, day2, mont2, year2) llavors writeCharacter ('E'); sino counter1 := daysAfter1583(year1, month1, day1); counter2 := daysAfter1583(year2, month2, day2); writeInteger (counter2-counter1); fsi falgorisme accio getData (sort day: enter, sort month:enter, sort year: enter) day := readInteger(); month := readInteger(); year := readInteger(); faccio funcio wrongData (day1:enter, month1:enter, years1:enter, day2:enter, mont2:enter, year2:enter): boolea var wrong: boolea; fvar wrong:= false; si (year2<year1) llavors wrong:= true; sino si ((year2=year1) i (month2<mont1)) llavors wrong:= true; sino si ((year2=year1) i (month2=mont1) i (day2<day1)) llavors wrong:= true; fsi fsi fsi retorna (wrong); ffuncio 10
  • 11. funcio isLeapYear (year: enter): boolea var leap: boolea; fvar si (year mod 400 = 0) llavors leap := true; sino si (year mod 100 = 0 ) llavors leap := false; sino si (year mod 4 = 0 ) llavors leap := true; sino leap := false; fsi fsi fsi retorna (leap); ffuncio funcio dayOfTheYear(year: enter, month:enter, day:enter): enter var daysCounter: enter; fvar daysCounter := day; si (month >11) llavors daysCounter := daysCounter + 30; fsi si (month >10) llavors daysCounter := daysCounter + 31; fsi si (month >9) llavors daysCounter := daysCounter + 30; fsi si (month >8) llavors daysCounter := daysCounter + 31; fsi si (month >7) llavors daysCounter := daysCounter + 31; fsi si (month >6) llavors daysCounter := daysCounter + 30; fsi si (month >5) llavors daysCounter := daysCounter + 31; fsi si (month >4) llavors daysCounter := daysCounter + 30; fsi si (month >3) llavors daysCounter := daysCounter + 31; fsi si (month >2) llavors daysCounter := daysCounter + 28; fsi si (month >1) llavors daysCounter := daysCounter + 31; fsi si (isLeapYear(year) i month > 2) llavors daysCounter := daysCounter + 1; fsi retorna (daysCounter); ffuncio 11
  • 12. funcio daysYearsAfter1583 (year:enter) : enter var daysCounter: enter; currentYear: enter; leap: boolean; fvar daysCounter := 0; currentYear := 1583; mentre (currentYear < year)fer daysCounter := daysCounter + 365; leap := isLeapYear(currentYear) si (leap) llavors daysCounter := daysCounter +1; fsi currentYear := currentYear + 1; fmentre retorna (daysCounter); ffuncio funcio daysAfter1583(year: enter, month:enter, day:enter): enter retorna (daysYearsAfter1583 (year) + dayOfTheYear(year, month, day)); ffuncio a) Ompliu la taula amb tots els valors que van prenent en la function daysYearsAfter1583 els objectes si el valor rebut com paràmetre és 1586 (empreu una línia de la taula per cada canvi de valor d'una de les variables; hi ha més fileres que les necessàries). currentYear daysCounter 1583 0 1584 365 1585 730 1586 1195 b) Ompliu la taula amb els valors de la variable daysCounter en la function dayOfTheYear si els paràmetres de la crida són (1956, 3, 13). (Hi ha més caselles que les necessàries). 41 72 73 c) Suposant que la seqüència d’entrada és < 15 12 2000 15 12 2000>, què s’escriurà a la sortida estàndard? 0 12
  • 13. Exercici 7: Programació [15%] Objectius: Codificar un algorisme en llenguatge PHP. Fer proves per a veure si el funcionament és correcte. Materials: Guia bàsica de PHP i miniguies. Tasca: Codifiqueu en llenguatge PHP i proveu l’ algorisme de l’exercici 6. Document php adjunt: PAC2_exer7 13
  • 14. Exercici 8: Codificació [10%] Objectius: Comprensió d’algorismes en PHP. Materials: Guia bàsica de PHP i miniguies. Tasca 1: El model de calendari gregorià, va substituir el calendari julià que considerava anys de traspàs tots els múltiples de 4. Creeu una function isLeapYearJulian equivalent a isLeapYear, però seguint les normes del calendari julià: funcio isLeapYearJulian (year: enter): booleà var leap: booleà; fvar si (year mod 4 = 0) llavors leap := cert; sinó leap := fals; fsi retorna (leap); ffuncio PHP: function isLeapYearJulian ($year) { if ($year mod 4 = 0) { $leap == true; } else { $leap == false; } return ($leap); } 14
  • 15. Tasca 2: L'any 1582, quan es va aplicar el calendari gregorià, es va haver de fer un reajustament del calendari de manera que el dia posterior al 5 d'octubre va ser el 15 d'octubre (els dies 6 al 14 no van existir). Modifiqueu la function dayOfTheYear per tal que fos vàlida també per l'any 1582 funcio dayOfTheYear(year: enter, month:enter, day:enter): enter var daysCounter: enter; fvar daysCounter := day; si (month >11) llavors daysCounter := daysCounter + 30; fsi si (month >10) llavors daysCounter := daysCounter + 31; fsi si (month >9) llavors daysCounter := daysCounter + 30; fsi si (month >8) llavors daysCounter := daysCounter + 31; fsi si (month >7) llavors daysCounter := daysCounter + 31; fsi si (month >6) llavors daysCounter := daysCounter + 30; fsi si (month >5) llavors daysCounter := daysCounter + 31; fsi si (month >4) llavors daysCounter := daysCounter + 30; fsi si (month >3) llavors daysCounter := daysCounter + 31; fsi si (month >2) llavors daysCounter := daysCounter + 28; fsi si (month >1) llavors daysCounter := daysCounter + 31; fsi si (isLeapYear(year) i month > 2) llavors daysCounter := daysCounter + 1; fsi 15
  • 16. si (year = 1582) llavors si (month > 10) llavors daysCounter := daysCounter – 9; fsi si (month = 10 i day > 5) llavors daysCounter := daysCounter – 9; fsi fsi retorna (daysCounter); ffuncio PHP function dayOfTheYear ($year, $month, $day) { $daysCounter = $day; if ($month > 11) { $daysCounter = $daysCounter + 30; } if ($month > 10) { $daysCounter = $daysCounter + 31; } if ($month > 9) { $daysCounter = $daysCounter + 30; } if ($month > 8) { $daysCounter = $daysCounter + 31; } if ($month > 7) { $daysCounter = $daysCounter + 31; } if ($month > 6) { $daysCounter = $daysCounter + 30; } if ($month > 5) { $daysCounter = $daysCounter + 31; } if ($month > 4) { $daysCounter = $daysCounter + 30; } 16
  • 17. if ($month > 3) { $daysCounter = $daysCounter + 31; } if ($month > 2) { $daysCounter = $daysCounter + 28; } if ($month > 1) { $daysCounter = $daysCounter + 31; } if (isLeapYear ($year) && $month > 2) { $daysCounter = $daysCounter + 1; } if ($year == 1582) { if ($month > 10) { $daysCounter = $daysCounter – 9; } if ($month == 10 && $day > 5) { $daysCounter = $daysCounter – 9; } } return ($daysCounter); } Tasca 3: Sabem que el dia 1 de gener de 1583 (primer any complet amb vigència del calendari gregorià) va ser dissabte. Creeu la function weekDay en PHP que rebi en un paràmetre la quantitat de dies passats des de 1-1-1583 fins una data determinada i escrigui el dia de la setmana de què es tracta aquesta data. acció weekDay (ent nombreDies: enter); var nombreDies: enter; fvar Si (nombreDies mod 7 = 0) llavors writeCharacter (‘dissapte’); fsi Si (nombreDies mod 7 = 1) llavors writeCharacter (‘diumenge’); fsi Si (nombreDies mod 7 = 2) llavors writeCharacter (‘dilluns’); fsi 17
  • 18. Si (nombreDies mod 7 = 3) llavors writeCharacter (‘dimarts’); fsi Si (nombreDies mod 7 = 4) llavors writeCharacter (‘dimecres’); fsi Si (nombreDies mod 7 = 5) llavors writeCharacter (‘dijous’); fsi Si (nombreDies mod 7 = 6) llavors writeCharacter (‘divendres’); fsi facció PHP function weekDay ($nombreDies) { if ($nombreDies % 7 == 0) { print ("dissapte"); } if ($nombreDies % 7 == 1) { print ("diumenge"); } if ($nombreDies % 7 == 2) { print ("dilluns"); } if ($nombreDies % 7 == 3) { print ("dimarts"); } if ($nombreDies % 7 == 4) { print ("dimecres"); } if ($nombreDies % 7 == 5) { print ("dijous"); } 18
  • 19. if ($nombreDies % 7 == 6) { print ("divendres"); } } 19