16
1 Estudis d’Informàtica, Multimèdia i Telecomunicació Programació PAC1 — Primera Prova d'Avaluació Continuada Cognoms: Escriu aquí els teus cognoms Nom: Escriu aquí el teu nom 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 la vostra aula. Lliurament: 1. S'ha de respondre les preguntes al mateix document de l'enunciat que rebrà el nom CognomsNomP_PAC1.doc (o CognomsNomP_PAC1.odt) 2. S'ha d'enviar la codificació de les preguntes 8 i 9 mitjançant els arxius PAC1_Exer08.php PAC1_Exer09.php que es construiran sobre les plantilles adjunta. És especialment important respectar el nom d'aquests arxius php. 3. Els tres fitxers es comprimiran en un únic arxiu de format zip o rar de nom CognomsNomP_PAC1.zip (o CognomsNomP_PAC1.rar) que es lliurarà a la bústia de "Lliurament i registre d'AC" 4. Data límit per lliurar la solució: dia, XX de XXX de 2012 (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.

| Programacion | Pac 1 - (Solucion)

Embed Size (px)

DESCRIPTION

Pac 1 2011/12-2 Solucion

Citation preview

Page 1: | Programacion | Pac 1 - (Solucion)

1

Estudis d’Informàtica, Multimèdia i Telecomunicació Programació PAC1 — Primera Prova d'Avaluació Continuada

Cognoms: Escriu aquí els teus cognoms

Nom: Escriu aquí el teu nom

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 la vostra aula.

Lliurament:

1. S'ha de respondre les preguntes al mateix document de l'enunciat que rebrà el nom CognomsNomP_PAC1.doc (o CognomsNomP_PAC1.odt)

2. S'ha d'enviar la codificació de les preguntes 8 i 9 mitjançant els arxius PAC1_Exer08.php PAC1_Exer09.php que es construiran sobre les plantilles adjunta. És especialment important respectar el nom d'aquests arxius php.

3. Els tres fitxers es comprimiran en un únic arxiu de format zip o rar de nom CognomsNomP_PAC1.zip (o CognomsNomP_PAC1.rar) que es lliurarà a la bústia de "Lliurament i registre d'AC"

4. Data límit per lliurar la solució: dia, XX de XXX de 2012 (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.

Page 2: | Programacion | Pac 1 - (Solucion)

2

Exercici 1: Identificació de tipus [10%]

Objectius: Mostrar coneixements elementals sobre els tipus, com manipular-los i identificar els tipus resultants d’efectuar operacions entre objectes elementals del llenguatge algorísmic.

Materials: M1 i M2 fins M2.1

Tasca: Donades les següents definicions de tipus, constants i variables tipus size = {mm, cm, inch, foot, meter}; ftipus const CONSTA: real = 10.0; fconst var c: caracter; imax: booleà; item: size; x, y, z: enter;

r,s: real; fvar indiqueu quin es el tipus resultant d’avaluar les expressions següents (recordeu que l'operador = és de relació): i) s / integerToReal(x* realToInteger(r*4.0) )

El resultat és de tipus real.

ii) imax = cert o c = 'Z' o item > foot El resultat és de tipus booleà.

iii) (x mod charToInteger(c)) div realToInteger(CONSTA) El resultat és de tipus enter.

iv) c < ‘G’ o inch > cm El resultat és de tipus booleà.

Page 3: | Programacion | Pac 1 - (Solucion)

3

Exercici 2: Sintaxi d’expressions [10%]

Objectius: Mostrar l’habilitat en la confecció d’expressions en llenguatge algorísmic. Utilització apropiada d’objectes elementals del llenguatge algorísmic per a la confecció de les expressions donades unes declaracions prèvies d’objectes elementals.

Materials: M1 i M2 fins M2.1

Tasca: Donades les definicions de tipus, constants i variables de l’exercici 1, escriviu, en llenguatge algorísmic, les expressions següents:

a) Expressió que calculi el quadrat del residu de dividir x i z. (x mod z) * (x mod z)

b) Expressió que determini, amb decimals, quin percentatge representa y respecte z. 100.0 * integerToReal(y) / integerToReal(z)

c) Expressió que determini si el valor de item es foot o meter. item > inch o bé item = foot o item = meter

d) Expressió que determini si el valor de s no té decimals. s = integerToReal ( realToInteger (s))

Page 4: | Programacion | Pac 1 - (Solucion)

4

Exercici 3: Avaluació d’expressions [10%]

Objectius: Mostrar l’habilitat en la manipulació d’expressions en llenguatge algorísmic. Donades unes declaracions prèvies d’objectes elementals, saber explicar-ne com efectuar la seva avaluació i donar-ne el resultat correcte.

Materials: M1 i M2 fins M2.1

Tasca: Donades les definicions de tipus i variables de l’exercici 1 i suposant que les variables tenen els valors següents:

x:= 10; y:= 4; item:= inch; c := '5'; r := 30.5; s := 0.5

Calculeu el resultat de les expressions següents:

a) integerToReal (x) * r * CONSTA / s integerToReal(10) * 30.5 * 10.0 / 0.5 10.0 * 30.5 * 10.0 / 0.5 305.0 * 10.0 / 0.5 3050.0 / 0.5 6100.0

b) charToCode1

(c) + 5 + (x div y) mod realToInteger (r/CONSTA)

charToCode(‘5’) + 5 +(10 div 4) mod realToInteger( 30.5 / 10.0 ) 53 + 5 + 2 mod realToInteger( 3.05 ) 53 + 5 +2 mod 3 53 + 5 + 2 60

c) no (item < foot i CONSTA < ( r / 3.0)) no ( inch < foot i 10.0 < (30.5 / 3.0 ) no (inch < foot i 10.0 < 10.1666 ) no ( cert i cert ) no ( cert ) fals

d) 20 div ( realToInteger(s +2.5) * 8 div ((y * 5) div (x div y))) 20 div ( realtoInteger (0.5 + 2.5) * 8 div (( 4 * 5) div ( 10 div 4 )) ) 20 div ( realtoInteger (3.0) * 8 div (20 div 2) ) 20 div ( 3 * 8 div 10 ) 20 div ( 24 div 10 ) 20 div ( 2 ) 10

1 charToCode retorna un enter que es el codi ascii del caràcter

Page 5: | Programacion | Pac 1 - (Solucion)

5

Exercici 4: Correctesa d’expressions [10%]

Objectius: Mostrar l’habilitat en la manipulació d’expressions en llenguatge algorísmic. Donades unes declaracions prèvies d’objectes elementals, raonar la correctesa de l’expressió, argumentant els motius d’incorrecció si n’hi ha.

Materials: M1 i M2 fins M2.1

Tasca: Donades les definicions de tipus, constants i variables de l’exercici 1 i les assignacions proposades, digueu si són correctes o no les expressions següents, independentment del que pretenguin calcular. En cas que no ho siguin, especifiqueu-ne la raó o raons. x:= 10; y:= 4; z := 0; imax:= false; item := inch; c := '5'; r := 30.5; s := 0.5

a) (item > foot) i ((c > '0') o (charToCode(c) + y = '9'))

Incorrecta. charToCode(c) + y és un enter i no es pot comparar amb un caràcter.

b) (z * CONSTA) div realToInteger(r)

Incorrecta. z és enter i no es pot multiplicar amb CONSTA que és real.

c) 2.0 * s + r = 0.0 > imax

Correcta.

d) realToInteger(integerToReal(y*y/r)) mod 2

Incorrecta. L'operador de divisió / no es pot aplicar a un enter (y/r)

e) codeToChar(charToCode('2')+charToCode(c)) = '7'

Correcta.

Page 6: | Programacion | Pac 1 - (Solucion)

6

Exercici 5: Declaració de variables i especificació [10%]

Objectius: Donada la descripció d’un problema, declarar les variables necessàries i donar les especificacions (les precondicions i els postcondicions) de l’algorisme.

Materials: M1 i M2 fins M2.2

Tasca: Declareu les variables necessàries i doneu les especificacions d’un algorisme que resolgui el problema següent (no s'ha d'escriure l'algorisme):

“Donada una sèrie de caràcters a l'entrada estàndard que finalitza amb un caràcter '#' (i que no conté el caràcter '#' dins), comptar quantes vocals, quantes consonants, quants signes de puntuació i quants caràcters d'altra mena havia al text” En concret, es demana que definiu les variables necessàries per representar les dades del problema (apartat var…fvar d’un algorisme) i que doneu la precondició i la postcondició. var voc, cons, punct, other : enter; fvar

{ PRE: al canal d'entrada i ha una sèrie de caràcters que finalitza amb el caràcter '#' }

RecomptaCaracters

{ POST: voc= quantitat de vocales en la cadena i

cons= quantitat de consonants a la cadena i

punct= quantitat de signes de puntuació a la cadena i

other= quantitat d'altres caràcters a la cadena i

voc + cons + punct + other = total caràcters en cadena}

Page 7: | Programacion | Pac 1 - (Solucion)

7

Exercici 6: Comprensió d’algorismes [10%]

Objectius: Avaluar coneixements bàsics d’algorísmica. Estructura general d’un algorisme i l’ús d’estructures algorísmiques bàsiques. Es plantegen preguntes d’interpretació donat un algorisme en llenguatge algorísmic.

Materials: M1 i M2 fins M2.3

Tasca: Donat el següent algorisme,

algorisme nameAlgorithm var max, min, x : enter; fvar {Pre: a l’entrada estàndard hi ha una sèrie llarga de números parells i senars entre 1 i 1000 i que finalitza amb un zero } x :=readInteger(); max := 0; min := 1000; mentre fer si llavors max := x;

sino si llavors min := x;

fsi fsi x :=readInteger(); fmentre writeInteger(max); writeInteger(min); {Post: Calcula i escriu per pantalla el nombre parell més gran (max) i el senar més petit (min)} falgorisme

Completeu les parts que falten 1r quadre x ≠ 0, també és vàlid x > 0 2n quadre x > max i x mod 2 = 0 3r quadre x < min i x mod 2 = 1

Page 8: | Programacion | Pac 1 - (Solucion)

8

Exercici 7: Modificació del comportament d’un algorisme [10%]

Objectius: Avaluar coneixements bàsics d’algorísmica. L’avaluació va un pas més enllà de la interpretació bàsica en plantejar modificacions del mateix. Es demanen modificacions al comportament d’un algorisme ja donat per tal de que aquest pugui contemplar situacions diferents.

Materials: M1 i M2 fins M2.3

Tasca: Considerant l’algorisme de l’exercici 6, modifiqueu-lo per tal que cap expressió contingui una condició composta.

algorisme nameAlgorithm var max, min, x : enter; fvar

{Pre: a l’entrada estàndard hi ha una sèrie llarga de números parells i senars entre 1 i 1000 i que finalitza amb un zero } x :=readInteger(); max := 0; min := 1000; mentre x ≠ 0 fer si x mod 2 = 0 llavors si x>max llavors max := x;

fsi sino si x<min llavors min := x;

fsi fsi x :=readInteger(); fmentre writeInteger(max); writeInteger(min); {Post: Calcula i escriu per pantalla el nombre parell més gran (max) i el senar més petit (min)} falgorisme

Page 9: | Programacion | Pac 1 - (Solucion)

9

Exercici 8: Codificació [15%]

Objectius: Donat un llistat en llenguatge algorísmic, traduir-lo a PHP. Treballar les assignacions, comparacions i iteracions, que en PHP requereixen utilitzar adientment el = i el ==. També treballar la recollida de dades obtingudes com paràmetres.

Materials: M1 i M2 fins M2.3

Tasca: L’algorisme següent implementa un simulador de plans d'estalvi a partir d'unes dades inicials:

• Un capital inicial en € (cap) • Un tipus d'interès en % (tin) • Una previsió d'aportació anual en €(apo) • Un increment previst en l'aportació anual en % (inc) • Una durada en anys (year)

El simulador, amb les dades entrades fa tres simulacions:

1. Simulació amb aportacions anuals incrementades. 2. Simulació amb aportacions anuals fixes 3. Simulació sense aportacions anuals

En cadascuna de les simulacions es mostra, emprant un línia per cada any, l'any, el Capital a l'inici del període, l'aportació anual i el capital al final del període, com ara

SIMULACIÓ amb aportacions anuals incrementades Any Inici període Aportació Final període 0 0.000 5200.000 5200.000 1 5200.000 10.000 5340.000 2 5340.000 10.300 5483.800 3 5483.800 10.609 5631.504 4 5631.504 10.927 5783.219 5 5783.219 11.255 5939.054 6 5939.054 11.593 6099.124 tot i que no es demana que els resultats es mostrin en forma de taula atès que en llenguatge algorísmic, evidentment, no existeix instruccions per donar format a la sortida. Indicacions en llenguatge algorísmic

• De cara a la solució suposarem que està definit el tipus text que conté una cadena de caràcters.

• Que existeix la funció readText que serveix per llegir una cadena de text sobre una variable de tipus text i que s'empra com les equivalents per a números o caràcters: nom_var = readText();

• Que existeix la acció writeText que serveix per enviar una cadena de caràcters a la sortida estàndard i que s'empra com les equivalents per a números o caràcters: writeText("Hola món"); o writeText(nom_var);

• Que existeix la acció writeLR(); que escriu un salt de línia a la sortida estàndard.

Page 10: | Programacion | Pac 1 - (Solucion)

10

algorisme saveSimulation; var year, i: enter; cap, capSeg, tin, apo, aposeg, inc: real fvar

{Pre: a l'entrada hi una sèrie de dades CAP, TIN, APO, INC, YEAR } cap := readReal(); tin := readReal(); apo := readReal(); inc := readReal(); year := readInteger; writeText("Capital inicial:"); writeReal(cap); writeLF(); writeText("Tipus d'interès:"); writeReal(tin); writeLF(); writeText("Aportació anual inicial:"); writeReal(apo); writeLF(); writeText("Increment aportació:"); writeReal(inc); writeLF(); writeText("Durada del pla (anys):"); writeIntegerl(year); writeLF(); capSeg := cap; apoSeg := apo; incSeg := inc; tin := tin / 100.0; inc := inc / 100.0; writeText("Simulació amb aportacions incrementades"); writeLF(); writeInteger(0); writeReal(0.000); writeReal(cap); wrireReal(cap); writeLF(); per i := 1 fins year fer capFin := cap * (1 + tin) + apo; writeInteger(i); writeReal(cap); writeReal(apo); writeReal(capFin); apo := apo (1 + inc); writeLF(); cap := capFin fper writeText ("Capital acumulat"); writeReal (cap); writeLF();

Page 11: | Programacion | Pac 1 - (Solucion)

11

writeText("Simulació amb aportacions fixes"); writeLF(); cap := capSeg; apo := apoSeg; writeInteger(0); writeReal(0.000); writeReal(cap); wrireReal(cap); writeLF(); per i := 1 fins year fer capFin := cap * (1 + tin) + apo; writeInteger(i); writeReal(cap); writeReal(apo); writeReal(capFin); writeLF(); cap := capFin fper writeText ("Capital acumulat"); writeReal (cap); writeLF(); writeText("Simulació sense aportacions anuals"); writeLF(); cap := capSeg; apo := 0; writeInteger(0); writeReal(0.000); writeReal(cap); wrireReal(cap); writeLF(); per i := 1 fins year fer capFin := cap * (1 + tin) + apo; writeInteger(i); writeReal(cap); writeReal(apo); writeReal(capFin); writeLF(); cap := capFin; fper writeText ("Capital acumulat"); writeReal (cap);

{Post: a la sortida estàndard es mostren els resultats de les simulacions } falgorisme Indicacions per a PHP La crida ha de ser del tipus: PAC1_exer08.php?CAP=5200&TIN=2.5&APO=10&INC=3.0&YEAR=6 Per a comprovar el funcionament podeu fer servir http://comoras.uoc.edu/~jgilm/pac1/PAC1_exer08.php?CAP=5200&TIN=2.5&APO=10&INC=3.0&YEAR=6

Page 12: | Programacion | Pac 1 - (Solucion)

12

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//ES" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html lang="ES" dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>PAC1_Exer8</title> </head> <body> <h3>PAC1_Exer8</h3> <h3>***** NOM DE L'ESTUDIANT ******</h3> <!-- No oblideu posar el nom --> <div> <?php /* Calcula les previsions d'un pla d'estalvi que es defineix per Un capital inicial CAP Un tipus d'interès en % TIN Una previsió d'aportació anual APO Increment anual previst a l'aportació en % INC Una durada en anys YEAR i escriu, a una línia per any, les dades dels capitals Fa tres simulacions: 1 -> amb aportacions anuals incrementades 2 -> amb aportacions anuals fixes 3 -> sense aportacions anuals exercici 8 - PAC1 - Febrer-juny 2012 autor: */ /* Get Data */ $cap = $_GET["CAP"]; $tin = $_GET["TIN"]; $apo = $_GET["APO"]; $inc = $_GET["INC"]; $year = $_GET["YEAR"]; $capSeg = $cap; $apoSeg = $apo; /* Mostra dades inicials */ print "<h2>PLA D'ESTALVI</H2>"; printf ("Capital inicial : %10d&euro;<br />", $cap); printf ("Tipus d'inter&egrave;s : %10.3f%%<br />", $tin); printf ("Aportaci&oacute; anual inicial: %10d&euro;<br />", $apo); printf ("Increment aportaci&oacute; : %10.3f%%<br />", $inc); printf ("Durada del pla (anys): %10d<br /><br/>", $year);

Page 13: | Programacion | Pac 1 - (Solucion)

13

/* Es passa de tant per cent a tant per 1 */ $tin /= 100; $inc /= 100; /* Simulació amb aportacions incrementades*/ print "<h2>SIMULACI&Oacute; amb aportacions anuals incrementades</h2>"; print "<table border=1><tr><th>Any</th><th>Inici per&iacute;ode</th><th>Aportaci&oacute;</th><th>Final per&iacute;ode</th></tr>"; print "<tr><td> 0 </td><td> 0.000</td><td> $cap</td><td> $cap</td></tr>"; for ($i=1; $i<=$year; $i++) { $capFin = $cap*(1+$tin)+$apo; print "<tr><td>$i</td> "; printf ("<td> %10.3f</td>",$cap); printf ("<td> %10.3f</td>",$apo); printf ("<td> %10.3f</td>",$capFin); print "</tr>"; $apo *= (1+$inc); $cap = $capFin; } print"</table>"; print "<h3>CAPITAL FINAL ACUMULAT</h3>"; printf ("<H3> %10.2f &euro;</H3>",$capFin); /* Simulació amb aportacions fixes*/ $cap = $capSeg; $apo = $apoSeg; print "<h2>SIMULACI&Oacute; amb aportacions anuals fixes</h2>"; print "<table border='5'><tr><th>Any</th><th>Inici per&iacute;ode</th><th>Aportaci&oacute;</th><th>Final per&iacute;ode</th></tr>"; print "<tr><td> 0 </td><td> 0.000</td><td> $cap</td><td> $cap</td></tr>"; for ($i=1; $i<=$year; $i++) { $capFin = $cap*(1+$tin)+$apo; print "<tr><td>$i</td> "; printf ("<td> %10.3f</td>",$cap); printf ("<td> %10.3f</td>",$apo); printf ("<td> %10.3f</td>",$capFin); print "</tr>"; $cap = $capFin; } print"</table>"; print "<h3>CAPITAL FINAL ACUMULAT</h3>"; printf ("<H3> %10.2f &euro;</H3>",$capFin);

Page 14: | Programacion | Pac 1 - (Solucion)

14

/* Simulació sense aportacions */ $cap = $capSeg; $apo = 0; print "<h2>SIMULACI&Oacute; sense aportacions anuals</h2>"; print "<table border=1><tr><th>Any</th><th>Inici per&iacute;ode</th><th>Aportaci&oacute;</th><th>Final per&iacute;ode</th></tr>"; print "<tr><td> 0 </td><td> 0.000</td><td> $cap</td><td> $cap</td></tr>"; for ($i=1; $i<=$year; $i++) { $capFin = $cap*(1+$tin)+$apo; print "<tr><td>$i</td> "; printf ("<td> %10.3f</td>",$cap); printf ("<td> %10.3f</td>",$apo); printf ("<td> %10.3f</td>",$capFin); print "</tr>"; $cap = $capFin; } print"</table>"; print "<h3>CAPITAL FINAL ACUMULAT</h3>"; printf ("<H3> %10.2f &euro;</H3>",$capFin); ?> </div> </body> </html>

Page 15: | Programacion | Pac 1 - (Solucion)

15

Exercici 9: Problema, algorisme i programa en PHP [15%]

Objectius: Avaluar coneixements d’algorísmica creant un algorisme y implementant en PHP la solució a un programa plantejat a partir d'una descripció. El nucli de la solució conté composicions alternatives i iteratives.

Materials: M1 i M2 fins M2.3

Tasca: Simulador del sorteig de la ONCE en què se sorteja un número de 5 xifres (entre 00000 i 99999) i es pot sortejar cap, una o sis series (un número entre 1 i 120) segons el tipus de sorteig (0, 1 ó 6).

Indicacions: • Es faciliten les imatges per mostrar el número premiat (només el número, no les

sèries)

0.png 1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png

• Per simular el sorteig es farà servir la funció rand2

• L'entrada de dades s'haurà de realitzar pel mètode $_GET de manera que funcioni amb una crida del tipus: PAC1_exer09.php?tipus=0 o PAC1_exer09.php?tipus=1 o PAC1_exer09.php?tipus=6

(min, max) que rep dos nombres enters (min i max) i retorna un número enter entre ells, ambdós inclosos.

• Es pot comprovar el funcionament a http://comoras.uoc.edu/~jgilm/pac1/PAC1_exer09.php?tipus=X on X pot ser la xifra 0, 1 o 6.

Ampliació: Es considerarà una ampliació opcional tenir cura que, en el cas que se

sortegin 6 sèries, no hagi repeticions en el sorteig. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//ES" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html lang="ES" dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <head> <title>PAC1_Exer9</title> </head> <body> <h3>PAC1_Exer9</h3> <h3>***** NOM DE L'ESTUDIANT ******</h3> <!-- No oblideu posar el nom --> <div> <?php /* Sorteja un número de 5 xifres (entre 00000 i 99999) que mostra com cinc imatges .png encadenades També llegeix de la crida la variable $tipus que conté un número que pot ser 0: no se sortejarà cap sèrie 1: se sortejarà una sèrie 6: se sortejaran 6 sèries

2 http://php.net/manual/es/function.rand.php

Page 16: | Programacion | Pac 1 - (Solucion)

16

Es considera ampliació que, en cas que hagi 6 sèries, no hagi repeticions. exercici 9 - PAC1 - Febrer-juny 2012 autor: */ /* get quantity of series */ $tipus = $_GET["tipus"]; /* draw & show the winning number */ print "<H3> NUMERO PREMIAT <H3> <br />"; for ($i=0; $i<5; $i++) { $digit = rand (0,9); print "<img src='$digit.png'>"; } print "<br />"; /* print series */ if ($tipus>0) { if ($tipus==1) print "<H3>SÈRIE PREMIADA</H3>"; else print "<H3>S&Egrave;RIES PREMIADES</H3>"; $s1 = rand (1, 120); print "$s1 <br />"; if ($tipus==6) { $s2 = rand (1, 120); while ($s1==$s2) $s2=rand (1, 120); print "$s2 <br />"; $s3 = rand (1, 120); while (($s1==$s3)||($s2==$s3)) $s3=rand (1, 120); print "$s3 <br />"; $s4 = rand (1, 120); while (($s1==$s4)||($s2==$s4)||($s3==$s4)) $s4=rand (1, 120); print "$s4 <br />"; $s5 = rand (1, 120); while (($s1==$s5)||($s2==$s5)||($s3==$s5)||($s4==$s5)) $s5=rand (1, 120); print "$s5 <br />"; $s6 = rand (1, 120); while (($s1==$s6)||($s2==$s6)||($s3==$s6)||($s4==$s6)||($s5==$s6)) $s6=rand (1, 120); print "$s6 <br />"; } } /* farewell */ print "<H2>Fi del sorteig</H2>"; ?> </div> </body> </html>