PDA

View Full Version : Aiutatemi ad imparare Javascript...


matteo171717
15-10-2003, 16:31
Sto affrontando il primo anno di università e abbiamo cominciato con javascript....

ora io non ci capisco un granchè, anzi...

Stamattina in laboratorio ci e' stato assegnato come compito un programmino semplice (secondo il proff.) che doveva svolgere queste funzioni:

Scrivere un programma in javascript che dato un intero N:
-Scriva N asterischi di fila;
-Verifica se N è un multiplo di 4;
-Se non è multiplo di 4 stampa in lettere il resto della divisione intera per 4!

Per svolgerlo bisogna usare una volta ciascuno questi cicli:

if--->else
for
while
switch

Io sono già in crisi per il primo punto del programma...avevo pensato a una cosa del genere:

var n = (un numero qualsiasi);
for (var i = 1; i > 0; i--)
writer (*);

pero' non mi funziona...

già non ho capito perchè all'interno del ciclo for bisogna mettere un altra lettera e non la n...e poi...boh...

datemi una mano! :cry:

Per le mie prove sto usando questo: http://www.di.unipi.it/~ambriola/ib/JIntE/JIntE.htm

matteo171717
15-10-2003, 17:26
allora....

provando e cercando di capire quello che dice il libro sono arrivato a questa soluzione...

var n = 0;
for (var i = 8; i > 0; i--)
{writer ("*") }


in questo modo lui mi scrive si 8 asterischi, ma sembra infischiarsene del valore che io assegno a n, in quanto legge solo il valore di i! :muro:

PGI
15-10-2003, 17:50
non conosco granchè di javascript ma se metti

for(var i=n; i>0; i--) {...}

non fa il ciclo n volte?

matteo171717
15-10-2003, 18:23
Originariamente inviato da PGI
non conosco granchè di javascript ma se metti

for(var i=n; i>0; i--) {...}

non fa il ciclo n volte?


giusto...

non ci avevo pensato!
grazie! :)

adesso devo incominciare a pensare agli altri due punti!

PGI
15-10-2003, 19:19
2) per sapere se "n" sia un multiplo di 4 puoi usare l'operatore resto ("%").

var resto= n % 4;

se il resto della divisione tra n e 4 è 0 allora n è un multiplo di 4, altrimenti procedi con il punto 3.

3) qui puoi usare lo switch (da qualche parte lo devi pur usare mi sembra, per cui niente array)

Non so come sia lo switch in Javascript, suppongo sia simile a Java per cui dovresti fare una cosa al'incirca così:

switch(resto) {
case 1:
writer("uno");
break;
case 2:
writer("due");
break;
case 3:
writer("tre");
break;
}

4) dopo aver stampato il resto dovresti usare il "while" rimanente per un altro ciclo:

var index=0;
while(index<resto) {
writer("*");
index++;
}

Coordina un po' la faccenda, traducila in javascript e dovresti avere il tuo programma.

&Ciao.

matteo171717
16-10-2003, 07:11
anche leggendo sul libro non sono riuscito a capire cosa serve l'ultima parte con il while...


Grazie Mille!:)

PGI
16-10-2003, 11:57
Ho provato quel "compilatore on-line" che hai indicato nel link... è divertentissimo! :D


var n=35;
for(var i=0;i<11;i++) writer("*");
writer("\n");
var resto=n%4;
if(resto==0) {
writer("multiplo");
} else {
writer(n);
writer(" non è un multiplo di 4\n");
switch(resto) {
case 1:
writer("uno");
break;
case 2:
writer("due");
break;
case 3:
writer("tre");
break;
}
writer("\n");
var index=0;
while(index<resto) {
writer("*");
index++;
}
}


Originariamente inviato da matteo171717
anche leggendo sul libro non sono riuscito a capire cosa serve l'ultima parte con il while...



Nell'esercizio si chiedeva di usare un "if-else", un "for", uno "switch" e un "while".

"for" e "while" hanno la stessa funzione: eseguono ciclicamente un blocco di istruzioni finchè la "condizione" del ciclo è "vero".

Siccome hai usato il "for" la prima volta per stampare "n" asterischi, dall'altra parte usiamo il "while". Che for e while siano molto simili (per alcuni l'uso dell'uno o dell'altro è solo una questione di gusti personali) lo si nota proprio nell'uso che ne facciamo:

la prima volta (for):

for(int index=0; index < N ; index ++) { stampa("*") }

La prima volta che il "motore" di esecuzione (in questo caso un browser internet trattandosi di javascript) incontra quella linea "for..." esegue queste operazioni:

1) crea una variabile "index" e la imposta a "0".
2) verifica che "index" sia minore di "N": se "vero"
3) passa al corpo "{...}" e ne esegue il contenuto (stampa un asterisco).

Giunto al termine del corpo del ciclo

1) aumenta di 1 la variabile "index";
2) se "index è minore di N" = vero -> esegue di nuovo il corpo, aumenta di "1", verifica, riesegue...ecc. ecc. fintanto che "index<N"

[nota che l'inizializzazione di index è eseguita solo 1 volta, dal secondo passaggio in poi la prima istruzione del "for" (index=0) non viene più considerata]

E il while?

la prima istruzione che abbiamo usato per il "while" è in realtà esterna al ciclo:

1) var index = 0;
poi viene il ciclo effettivo:
2) while (index < RESTO ) { stampa{"*"}; index++; }

Per confrontare il "for" di prima e questo "while" occorre guardare l'inizializzazione "esterna" (var index = 0), la condizione del while (index < RESTO) e l'ultima istruzione del ciclo (index++)

I passaggi in esecuzione sono questi:

A) (crea) e inizializza una variabile "index" a 0;
B) verifica che "index" sia minore di "RESTO": se "vero"
C) esegue il corpo {...}. L'ultima istruzione nel corpo aumenta di "1" il valore di index

Giunto al termine del corpo torna a verificare la condizione:

A) se "index < RESTO" -> esegue il corpo che, tra l'altro, dice di aumentare di 1 un'altra volta "index".

In altri termini quelle tre righe:

var index=0;
while(index < RESTO) {
...
index++;
}

sono identiche a:

for(index=0; index < RESTO; index ++) {...}

così come il primo ciclo for

for(var i=N; var > 0; var--) {...}

è uguale a:

var i=N;

while(var > 0) {
...
var--;
}

&Ciao

matteo171717
16-10-2003, 18:38
Originariamente inviato da PGI
Ho provato quel "compilatore on-line" che hai indicato nel link... è divertentissimo! :D


var n=35;
for(var i=0;i<11;i++) writer("*");
writer("\n");
var resto=n%4;
if(resto==0) {
writer("multiplo");
} else {
writer(n);
writer(" non è un multiplo di 4\n");
switch(resto) {
case 1:
writer("uno");
break;
case 2:
writer("due");
break;
case 3:
writer("tre");
break;
}
writer("\n");
var index=0;
while(index<resto) {
writer("*");
index++;
}
}





Nell'esercizio si chiedeva di usare un "if-else", un "for", uno "switch" e un "while".

"for" e "while" hanno la stessa funzione: eseguono ciclicamente un blocco di istruzioni finchè la "condizione" del ciclo è "vero".

Siccome hai usato il "for" la prima volta per stampare "n" asterischi, dall'altra parte usiamo il "while". Che for e while siano molto simili (per alcuni l'uso dell'uno o dell'altro è solo una questione di gusti personali) lo si nota proprio nell'uso che ne facciamo:

la prima volta (for):

for(int index=0; index < N ; index ++) { stampa("*") }

La prima volta che il "motore" di esecuzione (in questo caso un browser internet trattandosi di javascript) incontra quella linea "for..." esegue queste operazioni:

1) crea una variabile "index" e la imposta a "0".
2) verifica che "index" sia minore di "N": se "vero"
3) passa al corpo "{...}" e ne esegue il contenuto (stampa un asterisco).

Giunto al termine del corpo del ciclo

1) aumenta di 1 la variabile "index";
2) se "index è minore di N" = vero -> esegue di nuovo il corpo, aumenta di "1", verifica, riesegue...ecc. ecc. fintanto che "index<N"

[nota che l'inizializzazione di index è eseguita solo 1 volta, dal secondo passaggio in poi la prima istruzione del "for" (index=0) non viene più considerata]

E il while?

la prima istruzione che abbiamo usato per il "while" è in realtà esterna al ciclo:

1) var index = 0;
poi viene il ciclo effettivo:
2) while (index < RESTO ) { stampa{"*"}; index++; }

Per confrontare il "for" di prima e questo "while" occorre guardare l'inizializzazione "esterna" (var index = 0), la condizione del while (index < RESTO) e l'ultima istruzione del ciclo (index++)

I passaggi in esecuzione sono questi:

A) (crea) e inizializza una variabile "index" a 0;
B) verifica che "index" sia minore di "RESTO": se "vero"
C) esegue il corpo {...}. L'ultima istruzione nel corpo aumenta di "1" il valore di index

Giunto al termine del corpo torna a verificare la condizione:

A) se "index < RESTO" -> esegue il corpo che, tra l'altro, dice di aumentare di 1 un'altra volta "index".

In altri termini quelle tre righe:

var index=0;
while(index < RESTO) {
...
index++;
}

sono identiche a:

for(index=0; index < RESTO; index ++) {...}

così come il primo ciclo for

for(var i=N; var > 0; var--) {...}

è uguale a:

var i=N;

while(var > 0) {
...
var--;
}

&Ciao

Per quanto riguarda il compilatore io non lo trovo così divertente...
mah....i gusti sono gusti! :D

Per tutto il resto che dire...
GRAZIE, GRAZIE E ANCORA GRAZIE!:)