PAC 1. Estructures bàsiques de Javascript

Com he comentant en l’anàlisi de l’assignatura, es comença amb un nivell baixet… com per anar “perdent la por”. Bona idea, ja que només entendre la manera com s’executa el codi ja requereix un cert nivell d’abstracció.

En aquesta PAC es respon a preguntes sobre qüestions bàsiques relatives al llenguatge, però alhora prou generalistes i aplicables a altres llenguatges.

Aquesta és la PAC que vaig presentar:

PAC1 – JavaScript: Estructures bàsiques.

1.- Quina utilitat té l’estructura de control if…else if…, posa un exemple de codi propi de com la faries servir. Podries dir alguna estructura de control que ens ofereixi unes possibilitats similars?. (1 punt)

La estructura de control if…else…if és la forma complexa de la estructura de control condicional if…else. Serveix per executar una acció específica en cas que es compleixi una condició, alhora que permet l’ús de condicionals nous en cas de que no es compleixi la primera.

var assignatures = prompt("De quantes assignatures t'has matriculat aquest semestre?");
if (assignatures == 0) {
document.write("Has decidit prendre un semestre de descans.");}
else if (assignatures == 1) {
document.write("Millor una ben feta que pas cap");}
else if (assignatures == 2) {
document.write("De dues en dues no acabaràs mai...");}
else if (assignatures >= 3 && assignatures<=4) {
document.write("En el terme mig està la virtut");}
else if (assignatures == 4) {
document.write("Quatre és un bon nombre. Ànims!");}
else if (assignatures == 5) {
document.write("Si les aproves totes, acabaràs ben aviat");}
else {
document.write("Estàs segur de que no són massa assignatures?");}

La estructura de control switch pot oferir possibilitats similars en aquells casos en els que s’hagi d’evaluar el valor d’una variable i executar diverses accions segons quin sigui aquest valor. En canvi, si es vol fer servir per rangs de valors de igual manera que si fos una estructura if…else…if s’ha de posar true (un valor booleà) com expressió amb la que es compararan les expressions de cada un dels casos.

var assignatures = prompt("De quantes assignatures t'has matriculat aquest semestre?");
switch(true) {
case (assignatures >= 0 && assignatures <= 2): document.write("Poca feina!"); break; case (assignatures >= 3 && assignatures <= 5): document.write("Nivell de feina normal"); break; case (assignatures >5):
document.write("Massa feina!");
break;
default:
document.write("No sé que dir...");
break;
}

2.- Respon cert o fals i justifica la teva resposta a les següents afirmacions (2 punts):
A JavaScript

a) Els paràmetres d’una funció son accessibles des de fora d’aquestes.
Si els paràmetres que es passen a una funció corresponen a una variable, aquesta es passa per valor, és a dir, que les modificacions que la funció faci a aquesta variable no modifiquen el valor a fora de la funció (això s’anomena àmbit local). En canvi, els tipus compostos com arrays o objectes són passats per referència, el que significa que la modificació dels valors dins la funció modifica els valors a fora (àmbit global).

b) La principal característica d’una funció recursiva és que en el codi que conté es realitza la crida d’una altre funció.
Fals. No és del tot correcte ja que la principal característica d’una funció recursiva és que en el codi que conté es realitza la crida de la mateixa funció. En el cas de que el codi realitzi la crida a una altra funció només podem parlar de recursivitat (en aquest cas seria indirecta o creuada) si la segona funció també crida a la funció principal.

c) L’estructura de control While s’executa com a mínim una vegada.
Fals. El grup d’accions corresponent a una estructura de control while podria no executar-se mai si la condició no es compleix. Per assegurar-nos de que el grup d’accions s’executa com a mínim una vegada és convenient fer servir la estructura de control do…while.

d) Sempre indicarem de quin tipus es una variable.
Fals. Javascript és un llenguatge dèbilment tipificat, el que significa que no cal indicar de quin tipus és una variable en el moment de definir-la.
3.- Quin serà el valor final de X després d’aplicar les següents operacions (1 punt):

a) x = ( “35” === 35 ) && ( “8” == 8);
Si es substitueixen les cometes tipogràfiques anglosaxones per dobles la expressió dóna el resultat false, d’altra manera s’obté un error de sintaxi.
b) x = 3;
y = -5;

x = x -y +(++y);
El valor de x serà 4. Primer s’incrementa el valor de y i després es suma a 8.
c) x = 2;
x = “23” + x++;
Si es substitueixen les cometes tipogràfiques anglosaxones per dobles la expressió dóna el resultat 232, ja que l’increment de la x és ignorat per tenir lloc després de la concatenació.

d) x = true;
y = false;

x = ( x && ( x || y ) )
El resultat és true, ja que (true || false) dóna com a resultat true i després true&&true dóna com a resultat true.

4.- Explica quina diferencia existeix en aplicar l’operador aritmètic d’increment de la següent manera “++X” o “X++”. Per a que serveixen i quines diferencies hi ha entre els operadors de comparació “==” i “!==” (2 punt)
Si s’aplica l’operador aritmètic d’increment de la manera “++x” dins una expressió d’assignació, primer es porta a terme l’increment i després l’assignació. Si s’aplica de la manera “x++” primer s’aplica l’assignació i després l’increment.

L’operador de comparació “==” compara si els valors de dues expressions formen una igualtat no estricta, és a dir, sense tenir en compte el tipus. Es complementa amb l’operador “!=”, que comprova si existeix una desigualtat no estricta.
L’operador de comparació “!==” comprova si entre els valors de dues expressions existeix una desigualtat estricta, és a dir, tenint en compte el tipus per decidir si existeix o no la desigualtat.

5.- Escriu un programa que demani quants alumnes hi ha a l’aula, acte seguit ens anirà demanant que introduïm el nom d’un alumne tantes vegades com haguem indicat anteriorment. Cada vegada que introduïm el nom d’un alumne el tindrem que imprimir a la plana web. (2 punts)

alumnes = prompt("Quants alumnes hi ha a l'aula?");
for (i=1; i<=alumnes; i++){
temp = prompt("Introdueix el nom de l'alumne");
document.write(temp + "
");
}

6.- Partint del codi de l’exercici anterior realitzarem unes quantes modificacions afegint-hi unes regles de validació:

– S’ha de validar que quan ens demana que indiquem el nombre d’estudiants de l’aula el valor introduït sigui numèric, en cas contrari ens mostrarà un missatge dient que el valor introduït no és correcte i ens el tornarà a sol·licitar fins que sigui correcte.
– Validarem que els noms dels alumnes introduïts realment son una cadena de text, en cas contrari imprimirà a la plana web el text introduït i al costat el text “El nom no és vàlid” (aquest valor introduït no serà comptabilitzat).
(2 punts)

do {
alumnes = parseInt(prompt("Quants alumnes hi ha a l'aula?"));
if (isNaN (alumnes) ) { // comprova que el valor és numèric
alert("el valor introduit no es correcte");
}
} while (isNaN (alumnes) )

for (i=1; i<=alumnes; i++){
do {
temp = String(prompt("Introdueix el nom de l'alumne"));
if ( /\d/.test(temp) || temp=="") { // comprova si el valor conté nombres o és buit
document.write(temp + " - El valor introduït no és correcte
");
}
} while ( /\d/.test(temp) || temp=="" )
document.write(temp + "
");
}

Leave a Reply