Sintaxi del llenguatge. Exercicis de consola

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

En la primera pràctica vas instal.lar el SpiderMonkey i el vas començar a fer servir, però no li vam treure el suc. Ara que ja ens hem iniciat en la sintaxi de Javascript podràs practicar directament amb exemples purs javascript, amb l'intèrpret de comandes la consola, sense la necessitat d'integrar el codi dins una pàgina html.

En aquesta pràctica consolidarem la sintaxi fent servir els conceptes que has estudiat: declaració de variables, operacions aritmètiques i lògiques, bucles, condicionals, objectes,...

Referències

Desenvolupament

En la teoria de sintaxi de Javascript vam veure com es creava un objecte utilitzant el constructor, i es definien unes propietats i uns mètodes. Un exemple de fitxer javascript pur que ho fa es presenta a continuació. Recorda que ara no podem utilitzar document.write, perquè l'objecte document representa la pàgina activa del teu navegador web, i ara no estem treballant en aquest context. Per contra, per mostrar informació per la consola podem utilitzar print.

fitxer ordinadorObj.js:

//definir l'objecte ordinador, amb diferents propietats, i el mètode canviarEstat
//que permet encendre i apagar l'ordinador.

function ordinadorObj(marca,cpu,ram,hdd) {
	this.marca=marca
	this.cpu=cpu;
	this.ram=ram;
	this.hdd=hdd;
	//en l'estat inicial està apagat
	this.estat=0;

	this.canviarEstat=canviarEstat;
	function canviarEstat(valor) {
		this.estat=valor;
	}
}

myOrdinador=new ordinadorObj("DELL","Core i5",4,"500GB");
console.log(myOrdinador.cpu);
console.log(myOrdinador.estat);
//encenem
myOrdinador.canviarEstat(1);
console.log(myOrdinador.estat);
//apaguem
myOrdinador.canviarEstat(0);
console.log(myOrdinador.estat);

Per executar-lo:

$ node ordinadorObj.js
Core i5
1
0

Pots redirigir la sortida per pantalla a un fitxer:

$ node ordinadorObj.js > sortida.txt

Demanar dades en línia de comandes. És possible fer-ho amb NodeJS?:

Provar el següent codi:

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('What do you think of Node.js? ', (answer) => {
  console.log('Thank you for your valuable feedback:', answer);
  rl.close();
});
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('Quina hora és? (0-24): ', (hora) => {
  console.log('La teva hora:', hora);
  rl.close();
if (hora < 14)
{
   console.log("Bon dia");
} else if(hora < 20) {
   console.log("Bona tarda");
} else {
   console.log("Bona nit");
}
});

Bateria d'exercicis

1. Fer un exercici (strings.js) on defineixes unes variables com a objecte String. Avalua les següents funcions (http://www.w3schools.com/jsref/jsref_obj_string.asp):

2a. Escriu les taules de multiplicar del 1 al 10 (bucles).

2b. Entra un número del 1 al 10, i escriu la taula de multiplicar d'aquest número (bucle).

3. Avarigua el mes de l'any en què estem, i digues en quina estació de l'any estem. Utilitza if, i també switch.

var day=new Date().getDay();

4. Crear un Array d'assignatures (buit). Fes un bucle i demana 10 vegades el nom d'una assignatura. Has d'anar omplint l'array. Finalment, fes un bucle i printa totes les assignatures.

5.comprovar https://www.w3schools.com/js/js_booleans.asp. Es dóna la solució amb el fitxer boolean.js:

 
//comprovar http://www.w3schools.com/js/js_obj_boolean.asp
//The Boolean object represents two values: "true" or "false".

//The following code creates a Boolean object called myBoolean:
//var myBoolean=new Boolean();

//If the Boolean object has no initial value, or if the passed value is one of the following:

//    0
//    -0
//    null
//    ""
//    false
//    undefined
//    NaN

//the object is set to false. For any other value it is set to true (even with the string "false")!
//NOTA! Aquesta última afirmació no és correcta del tot. Comprovació...

var myBoolean1=new Boolean();
var myBoolean2=new Boolean();
var myBoolean3=new Boolean();
var myBoolean4=new Boolean();
var myBoolean5=new Boolean();
var myBoolean6=new Boolean();
var myBoolean7=new Boolean();
var myBoolean8=new Boolean();
var myBoolean9=new Boolean();

myBoolean1=0;
myBoolean2=-0;
myBoolean3=null;
myBoolean4="";
myBoolean5=false;
myBoolean6=undefined;
myBoolean7=NaN;
myBoolean8=1;
myBoolean9="false";

console.log(myBoolean1);
console.log(myBoolean2);
console.log(myBoolean3);
console.log(myBoolean4);
console.log(myBoolean5);
console.log(myBoolean6);
console.log(myBoolean7);
console.log(myBoolean8);
console.log(myBoolean9);

if (myBoolean1==false) { console.log("és fals") } else { console.log("és vertader") };
if (myBoolean2==false) { console.log("és fals") } else { console.log("és vertader") };
if (myBoolean3==false) { console.log("és fals") } else { console.log("és vertader") };
if (myBoolean4==false) { console.log("és fals") } else { console.log("és vertader") };
if (myBoolean5==false) { console.log("és fals") } else { console.log("és vertader") };
if (myBoolean6==false) { console.log("és fals") } else { console.log("és vertader") };
if (myBoolean7==false) { console.log("és fals") } else { console.log("és vertader") };
if (myBoolean8==false) { console.log("és fals") } else { console.log("és vertader") };
if (myBoolean9==false) { console.log("és fals") } else { console.log("és vertader") };

6. Generar 100 números aleatoris del 1 al 100 (fés un bucle), i trobar la mitjana aritmètica de tots aquests números. Dóna la solució amb dos números decimals.

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Mitjana números aleatoris</title>

</head>
<body>
    <h1>Mitjana números aleatoris</h1>
    <script type="text/javascript">
	var num, suma, mitjana;
	suma = 0; //important!!!
	for (var i=0;i<100;i++) {
		//http://www.w3schools.com/jsref/jsref_random.asp
		num = Math.random()*100; 
		suma += num;
		console.log(num + " " + suma);
	}
	mitjana = suma / 100;
	console.log("Mitjana: " + mitjana.toFixed(2));
	document.write ("La mitjana és: " + mitjana.toFixed(2));
    </script>
</body>
</html>

7. Entra un número pel teclat (o bé com a argument en la línia de comandes). Comprova que és un número. Què passa si li sumes 1? És necessària la funció de parsejar a enter? Se't dóna la solució (però millor si ho intentes fer pel teu compte abans de mirar la solució.

parseint.js

var args = process.argv;
console.log(args[2]);
num = args[2];

if (isNaN(num)) {
	console.log("No és un número");
} else {
	console.log(num+1);
	num=parseInt(num);
	console.log(num+1);
}

8. . De l'objecte Date, repassa els mètodes toLocaleDateString(), toLocaleTimeString() i toLocaleString(). Aquesta és la manera més senzilla d'obtenir la data i hora del sistema amb el format que utilitzem normalment. Utilitzant alguna d'aquestes funcions, obté la data del sistema amb el format:

dd-mm-yyyy a les hh::mi::ss

Utilitzant prototype, crea el mètode el_meu_format() que respongui al format anterior.

9. Estem organitzant un MOOC (Massive Online Open Course), i volem que el deadline de l'examen final comenci a les 15h del 19/11/2018 (hora local d'aquí). Quina hora UTC haurem d'anunciar als participants? Per a una persona que visqui a Kashgar (Xingjian), quina serà la seva hora local?

var d1 = new Date(2018, 10, 19, 15, 0,0,0);
var d2 = new Date(2018, 10, 19, 15+7, 0,0,0); 
//hem de sumar 7 hores respecte la local,
// i hem de sumar 8 hores respecte la UTC

//GMT (o UTC) + 8

console.log(d1.toUTCString());

console.log(d1.toLocaleDateString());
console.log(d1.toLocaleString());

toLocaleString()	Converts a Date object to a string, using locale conventions

console.log(d2.toLocaleString());

Una altra solució:

var data=new Date(2018,10,19,15,00,00);
var data2=new Date(data);
data2.setHours(data2.getHours()+7);
console.log("Hora local:\t" + data.toLocaleString());
console.log("Hora UTC:\t" + data.toUTCString());
console.log("Hora Kashgar:\t" + data2.toLocaleString());

10. Una regla bàsica quan redactem un text: Després de punt hi ha un espai.... A continuació tenim un text on l'escriptor s'ha fet un lio i trobem diferents casos. Posar ordre, i fer que després de punt tinguem un sol espai en blanc. Evidentment, ho farem amb expressions regulars, i el mètode replace() dels String.

A slowly widening smile appeared on Powells face. Donovan continued, And think of that screwballs face when he sees us do it?. Robots are, of course, manufactured on Earth, but their shipment through apace is much simpler if it can be done in parts to be put together at their place of use.  It also, incidentally, eliminates the possibility of robots, in complete adjustment, wandering off while still on Earth and thus bringing U. S. Robots face to face with the strict laws against robots on Earth.Still, it placed upon men such as Powell and Donovan the necessity of synthesis of complete robots, - a grievous and complicated task.     Powell and Donovan were never so aware of that fact as upon that particular day when, in the assembly room, they undertook to create a robot under the watchful eyes of QT 1, Prophet of the Master.The robot in question, a simple MC model, lay upon the table, almost complete. Three hours work left only the bead undone, and Powell paused to swab his forehead and glanced uncertainly at Cutie.The glance was not a reassuring one. For three hours, Cutie had sat, speechless and motionless, and his face, inexpressive at all times, was now absolutely unreadable. Powell groaned. Lets get the brain in now, Mike! 	Donovan uncapped the tightly sealed container and from the oil bath within he withdrew a second cube. Opening this in turn, he removed a globe from its sponge-rubber casing.He handled it gingerly, for it was the most complicated mechanism ever created by man.  Inside the thin platinumplated skin of the globe was a positronic brain, in whose delicately unstable structure were enforced calculated neuronic paths, which imbued each robot with what amounted to a pre-natal education.It fitted snugly into the cavity in the skull of the robot on the table. Blue metal closed over it and was welded tightly by the tiny atomic flare. Photoelectric eyes were attached carefully, screwed tightly into place and covered by thin, transparent sheets of steel-hard plastic.

text extret de I, Robot, de Isaac Asimov.

solució:

var str = "A slowly widening ...";
var patt = /\.\s*/g;
// o bé
//var patt = new RegExp(/\.\s*/, "g"); 

var str = str.replace(patt, ". ");

$ node prova.js > output.txt

Entrega

Fés la bateria d'exercicis que se't proposa i penja'ls al Schoology. Inclou també les proves i ampliacions que hagis fet.

Recorda la normativa per entregar les pràctiques al Google Classroom: ASIX-M10-UF2#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Google_Classroom


creat per Joan Quintana Compte, octubre 2018

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines