• Non ci sono risultati.

Brescianet.com. 3F - 2 MODULO 3F - 2 MODULO da e /12/2016: 3F - 2 MODULO

N/A
N/A
Protected

Academic year: 2022

Condividi "Brescianet.com. 3F - 2 MODULO 3F - 2 MODULO da e /12/2016: 3F - 2 MODULO"

Copied!
52
0
0

Testo completo

(1)

Pagina 1 di 1

Brescianet.com

Sito di supporto alla didattica

http://lnx.brescianet.com/ScuolaForum2016/

3F - 2 MODULO

http://lnx.brescianet.com/ScuolaForum2016/viewtopic.php?f=4&t=16

3F - 2 MODULO

da e01692

Appunti estemporanei

12/12/2016: 3F - 2 MODULO

da e01692

le coordinate delle img sono 0,0 (alto a sinistra) , M-1,N-1 in basso a destra (dove M larghezza img e N altezza)

<html>

<body>

<map name=pioppo>

<area shape=rect coords="94,46,345,222" href=pink.htm>

<area shape=circle coords="482,139,72" href=silver.htm>

<area shape=poly coords="228,255,328,92,564,259" href=orange.htm>

<!area shape=default href=white.htm>

<area shape=rect coords="0,0,629,285" href=white.htm>

</map>

<img src=pluto.png usemap=#pioppo border=1>

</body>

</html>

non funziona in IE

<area shape=default href="rosso.htm">

alternativa

<area shape=rect coords="0,0,M-1,N-1" href="rosso.htm">

Eser 2.1 per sabato su di dispositivo cartaceo 3O - 3/12/2016

Triangle come shape non esiste!!!!

Gli oggetti in foreground(davanti) vanno definiti per primi (il browser registra le ultime

coordinate!). Quindi lo sfondo va messo come shape=default e per IE shape=rect coords="0,0,M,N"

17/12/2016 - 3F - 2 MODULO

da e01692

Triangle come shape non esiste!!!!

Gli oggetti in foreground(davanti) vanno definiti per ultimi (il browser registra le ultime coordinate!)

3T 13/12/2016

I frame consentono la suddivisione di una pagina WEB in sottofinestre. Ogni sottofinestra

Inviato: 12/12/2016, 9:58

Inviato: 12/12/2016, 9:59

Inviato: 17/12/2016, 12:01

(2)

può contenere un documento.

svantaggi dei frame

1) non sono adatti alle risposte dei motori di ricerca poichè restituiscono i singoli contenuti (pagine HtML) privi del contesto di navigazione implementato nei frameset

I frame non sono adatti ai siti di ecommerce o promozionali perchè non danno una visione dell'insieme degli articoli offerti

vantaggi

1) elementi comuni a tutte le pagine con i frame vengono centralizzati in singole pagine HTML. Mi basta modificare una di queste pagine per ottenere l'aggiornamento su tutte le pagine del sito

2) Navigazione veloce

SSI consentono di ovviare allo svantaggio dei frame nei motori di ricerca.

22/12/2016 - 3F - 2 MODULO

da e01692

la gestione dei frame è + semplice delle server side include. Quindi se il sito viene diffuso mediante un passaparola (contatto diretto tra WEB master e utenza) i frame semplificano di molto la gestione

Le server side include aggregano i documenti richiesti con gli elementi comuni (pubblicità, menu etc) per cui quando transitano sulla rete gli spider riescono a catturare anche la semantica di navigazione che verrà riproposta tale e quale quando viene effettuata una ricerca

3T 20/12/2016

frame => se ho n sottofinestre mi servono n+1 file => n per i contenuti delle sottofinestre + una che definisce la suddivisione (è quella che contiene il tag frameset)

framset => definisce la divisione frame => definisce il contenuto valorizzazione di rows e cols:

COLS="20%,20%,20%,20%,20%"

COLS="*,*,*,*,*"

esempio => colonna centrale doppia delle altre COLS="*,*,2*,*,*"

COLS="17%,16%,34%,16%,17%"

cols="100,*" => prima colonna larga 100px e 2° parte restante

<FRAMESET COLS="100,20%,*"> => prima colonna larga 100 px (non verrà ridimensionata quando cambio l'ampiezza della finestra - 20% della finestra del browser per la 2° colonna - la parte che resta alla terza

Inviato: 22/12/2016, 8:05

(3)

<FRAMESET cols="2*,*">

<FRAME SRC="">

<frameset rows="*,*">

<FRAME SRC="">

<FRAME SRC="">

</frameset>

</FRAMESET>

Esempio frameset a finestra 1° soluzione

<frameset rows="*,*">

<frameset cols="*,2*">

<FRAME SRC="">

<FRAME SRC="">

</frameset>

<frameset cols="*,2*">

<FRAME SRC="">

<FRAME SRC="">

</frameset>

</frameset>

2° soluzione

<frameset cols="*,2*">

<frameset rows="*,*">

<FRAME SRC="">

<FRAME SRC="">

</frameset>

<frameset rows="*,*">

<FRAME SRC="">

<FRAME SRC="">

</frameset>

</frameset>

3° soluzione

<frameset cols="*,2*" rows="*,*">

<FRAME SRC="">

<FRAME SRC="">

<FRAME SRC="">

<FRAME SRC="">

</frameset>

Esempio Alfa

<frameset cols="3*,*">

<frameset rows="4*,*">

<frameset cols="*,*">

<frame src=a.htm>

<frame src=b.htm>

</frameset>

<frame src=d.htm>

</frameset>

<frameset rows="*,4*">

<frame src=c.htm>

<frameset cols="*,*">

<frame src=e.htm>

<frame src=f.htm>

</frameset>

(4)

</frameset>

</frameset>

21/12/2017 - 3F - 2 MODULO

da e01692

compatibilità in avanti => un sistema gestisce situazioni future spiegato come mai <noframes> funziona nei vecchi browser Esempi di domande

quale tipo di browser riconosce <noframes> ?

perchè un vecchio browser si comporta correttamente pur non conoscendo il tag <noframes>

SCROLLING=NO => non mostra la scroll bar anche se il contenuto del frame è molto lungo

SCROLLING=YES => mostra sempre la scroll bar anche se il contenuto del frame è molto breve (rispetto al frame contenitore)

SCROLLING=AUTO => mostra la scroll bar se serve

MARGINWIDTH, MARGINHEIGHT => distanza del testo all'interno del frame rispetto al bordo del frame

NAME => direttiva presente in tutti i tag => identifica l'oggetto gestito dal tag.

Nei frame la direttiva NAME serve per specificare la finestra che subirà l'effetto di un link (tag A)

la valorizzazione di NAME è case sensitive.

TARGET => direttiva del tag A che indica quale frame usare.

Se un tag A non presenta la direttiva TARGET di default userà il frame che lo contiene.

23/1/2017 - 3F - 2 MODULO

da e01692

Il name del target è case sensitive.

Se non esiste un frame con name = al target cliccando sul link si apre una nuova finestra e il browser abbina ad essa il nome indicato nel target. Qualsiasi link che presenta lo stesso target userà tale finestra come

destinazione del link.

Quindi si apre una nuova finestra solo quando clicco la prima volta su un target sconosciuto. I successivi click con lo stesso target useranno tale finestra

PAGINA PRINCIPALE

---

Inviato: 21/01/2017, 11:59

Inviato: 23/01/2017, 10:00

(5)

<frameset cols="*,2*">

<FRAME NAME=MENU src=menu.htm>

<frameset rows="*,*">

<FRAME NAME=ALTo src="">

<FRAME NAME=BAssO src="">

</Frameset>

</Frameset>

MENU.HTML

---

<h1>MENU</H1>

<a href=red.htm>Vai alla pagina rossa</a><BR>

<a href=green.htm target=ALTo>Vai alla pagina verde</a><BR>

<a href=orange.htm target=ALTO>Vai alla pagina arancio</a><BR>

<a href=silver.htm target=ALTO>Vai alla pagina argento</a><BR>

10/1/2017 - 3T

riprendere dai target magici

scrivere un link senza target e un link con target = _self => equivalente _blank => apre una nuova finestra e la popola con la pagina indicata in HREF

_top => sostituisce la pagina visualizzata nella finestra del browser con quella indicata in HREF _new => attenti non è un target magico

19/1/2017 3O riprendere da _parent e sottoframe

sottoframe => frame che richiama in src una pagina html che contiene dei tag FRAMESET

<frameset cols="*,2*">

<FRAME NAME=MENU src=menu.htm>

<frameset rows="*,*">

<frameset cols="*,*,*">

<FRAME NAME=ALTo src="">

<FRAME NAME=CentroAlto src="">

<FRAME NAME=DestraAlto src="menu.htm">

</FRAMESET>

<FRAME NAME=Basso src="sottoframe.htm">

</Frameset>

</Frameset>

con sottoframe.htm uguale a:

<frameset cols="*,*">

<FRAME NAME=BASSo src="">

<FRAME NAME=DestraBasso src="menu.htm">

</FRAMESET>

è equivalente a:

<frameset cols="*,2*">

<FRAME NAME=MENU src=menu.htm>

<frameset rows="*,*">

<frameset cols="*,*,*">

<FRAME NAME=ALTo src="">

<FRAME NAME=CentroAlto src="">

<FRAME NAME=DestraAlto src="menu.htm">

</FRAMESET>

<frameset cols="*,*">

<FRAME NAME=BASSo src="">

<FRAME NAME=DestraBasso src="menu.htm">

</FRAMESET>

(6)

</Frameset>

</Frameset>

Nel 2° esempio la divisione dei frameset è gestita in un solo file

Nel 1° esempio la divisione dei frameset è gestita su + file in questo caso si parla di sottoframe => la distinzione è utile quando uso il target magico _parent

I sottoframe vengono usati per gestire il cambiamento su + frame con un solo link

_parent => indica il frameset genitore. In assenza di sottoframe il frameset genitore è sempre la finestra del browser per cui _parent e _top coincidono

se il target _parent è in un frame definito in un sottoframe allora verrà usato come target il frame che richiama quel sottoframe.

Inoltre i sottoframe consentono in abbinamento con _parent di costruire meccanismi di navigazione dei link che non risentono della posizione della nostra pagina (nella finestra principale o in un frame di una finestra gestita con frameset)

Esempio:

questa applicazione

http://www.brescianet.com/appunti/web_l ... serJs1.htm funziona anche se inserita in un frameset.

Esempio sui LINK con FRAME:

MENU

---

<h1>MENU</H1>

<a href=pink.htm target=_parent>Vai alla pagina rosa (_parent)</a><BR>

<a href=red.htm>Vai alla pagina rossa (no target)</a><BR>

<a href=green.htm target=ALTo>Vai alla pagina verde (ALTo)</a><BR>

<a href=orange.htm target=ALTO>Vai alla pagina arancio (ALTO)</a><BR>

<a href=silver.htm target=ALTO>Vai alla pagina argento (ALTO)</a><BR>

<a href=red.htm target=_self>Vai alla pagina rossa (_self)</a><BR>

<a href=silver.htm target=_Self>Vai alla pagina argento (_Self)</a><BR>

<a href=orange.htm target=_Self>Vai alla pagina arancio (_Self)</a><BR>

<a href=white.htm target=_blank>Vai alla pagina bianco (_blank)</a><BR>

<a href=pink.htm target=_top>Vai alla pagina rosa (_top)</a><BR>

FILE SUDDIVISIONE PRINCIPALE ---

<frameset cols="*,2*">

<FRAME NAME=MENU src=menu.htm>

<frameset rows="*,*">

<frameset cols="*,*,*">

<FRAME NAME=ALTo src="">

<FRAME NAME=CentroAlto src="">

<FRAME NAME=DestraAlto src="menu.htm">

</FRAMESET>

<FRAME NAME=Basso src="sottoframe.htm">

</Frameset>

</Frameset>

FILE SOTTOFRAME

---

(7)

<frameset cols="*,*">

<FRAME NAME=BASSo src="">

<FRAME NAME=DestraBasso src="menu.htm">

</FRAMESET>

mostrata soluzione eser 4

tramite i forms i browser inviano dati al server (esempio una ricerca su google richiede la scrittura in una casella di testo dell'info cercata)

28/1/2017 - 3F - 2 MODULO

da e01692

i forms sono composti da controlli: caselle di testo, radio button, checkbox, listbox , bottoni etc.

la direttiva NAME nei controlli è molto importante poichè consente di identificare il controllo tramite i linguaggi lato client (JS) e lato server (PHP e ASP)

DIRETTIVA METHOD DEL TAG FORM

METHOD=GET => mostra sull'url i parametri impostati sul forms (nome del controllo e sua valorizzazione)

http://www.brescianet.com/appunti/web_l ... Potenz.php?

Filtro=P&Classe=3T&Sesso=M

http://www.brescianet.com/appunti/web_l ... Potenz.php?

Filtro=&Classe=&Sesso=F

METHOD=POST => non mostra sull'url i parametri impostati sul forms quindi la pagina non presenta ? seguito dalla lista degli argomenti

esempio

http://www.brescianet.com/appunti/web_l ... Potenz.php

Per inviare dati ad una pagina web posso usare 2 modalità:

1) tramite un forms

2) passando degli argomenti ad una pagina web (predisposta opportunamente per gestirli) i parametri iniziano dopo il ? - Ogni parametro è separato dal carattere & e ogni valore dal simbolo =. Ecco un esempio

nomefile.php?nomeparametro1=valore1&nomeparametro2=valore2&...

esempio

ElencoStudenti-Potenz.php?Filtro=&Classe=3T&Sesso=F Con questo URL posso estrarre le femmine di 3T

esempio 2

<a href=ElencoStudentiModello.php?classe=1T>Classe 1T</A><br>

<a href=ElencoStudentiModello.php?classe=2T>Classe 2T</A><br>

<a href=ElencoStudentiModello.php?classe=3T>Classe 3T</A><br>

Inviato: 28/01/2017, 11:57

(8)

<a href=ElencoStudentiModello.php?classe=4T>Classe 4T</A><br>

La modalità che prevede l'uso dei parametri sull'URL è utilizzata per i link predefiniti (esempio ricerche predefinite - evitano all'utente di inserire dati per selezionare un gruppo informazioni)

DIRETTIVA ACTION DEL TAG FORM

Definisce la pagina che verrà chiamata quando i dati del forms verranno inviati.

ESEMPIO => quando clicco sul bottone di invia la pagina verrà inviata alla pagina a.php

<FORM action=a.php method=get>

Cognome: <input type=text>

<input type=submit value="invia dati">

</FORM>

3T 17/1/2017

le pagine che accettano i forms sono generalmente dinamiche (php e asp)

<input type=submit value="invia">

DOMANDA VERIFICA => costruire un forms che carica la pagina pioppo.htm

<FORM action=pioppo.htm>

<input type=submit value="invia">

</FORM>

3O 21/1/2017

se action contiene l'indicazione mailto: allora i dati verranno inviati al client di posta locale (esempio outlook che deve essere configurato!) per l'invio ad un destinatario - il comportamento è identico a quello visto per href

NAME => direttiva usata sia per i controlli che per il form - è case sensitive e identifica ogni singolo oggetto

spiegato il motivo per cui la stessa pagina presenta aspetti differenti sui controlli a secondo del SO che carica tale pagina

30/1/2017 - 3F - 2 MODULO

da e01692

Per rendere mutuamente esclusivi un gruppo di radiobutton devo usare lo stesso name per tutti i radio dello stesso argomento.

La direttiva VALUE definisce il valore da inviare alla pagina indicata in action i radio button sono usati per scelte mutualmente esclusive (1 tra n possibilità) i checkbox sono usati per scelte multiple (m tra n possibilità)

nei checkbox il valore inviato alla pagina indicata in action è quello contenuto in value se

Inviato: 30/01/2017, 9:59

(9)

il controllo è spuntato altrimenti è la stringa vuota ""

Con la direttiva checked indico le scelte predefinite sia nei radio che nei checkbox

SELECT

OPTION => identifica il singolo elemento Direttive OPTION

value => se definito invia al server il valore indicato in value della voce selezionata. Se non esiste la direttiva value in option allora verrà inviata l'etichetta della voce

selezionata

Selected => definisce la voce predefinita Direttive SELECT

size => definisce la dimensione in righe. se omesso size è = 1 ed appaiono dei combobox

finito select 3T 19/1/2017

<select name=studenti>

<option value=12>Rossi Bianca

<option value=512 selected>Verdi Erika

<option value=162>Gialli Chiara

<option value=1872>Rossi Bianca

</select>

il server se seleziono Verdi riceve il codice 512 (esempio la matricola di quella studentessa)

Nelle textarea il valore predefinito è posto tra il tag di apertura e chiusura. Errore usare VALUE!

commenti:<textarea>Cognome nome

</textarea>

Esempio di domanda sulle TEXTAREA

Costruire un controllo identificato con il nome commenti che permetta di scrivere 400 char su 10 righe. Il valore predefinito è il vs cognome nome.

la direttiva cols è il nr di char per colonna la direttiva rows è il nr di righe

rows e cols non limitano il nr di char che posso scrivere.

<textarea name=commenti rows=10 cols=40>Cognome nome</textarea>

spiegata la direttiva WRAP (in toto) - soft e hw non sono diversi sul client => mandano a capo il testo quando arrivo al limite destro della textarea. E' sul server che la situazione

(10)

cambia. Con Wrap=HARD gli invii automatici inseriti nel controllo vengono inviati al server mentre con Wrap=soft vengono ignorati

i controlli hidden sono usati dal JS come variabili. Non sono visibili

<input type=hidden name=Nominativo value="Neri Bruna">

ESEMPIO 3F

---

<form name=DATI action="mailto:pippo@caio.it">

Cognome: <input type=text size=40><br>

Prov. residenza: <input type=text size=2 maxlength=2 name="prov di residenza"><br>

classe <input type=radio name=classe value="1"> 3F <input type=radio checked name=classe value=2> 3Q <input type=radio name=classe value=3> 3H<br>

genere: <input type=radio name=genere value=M checked>Maschio - <input type=radio name=genere value=F>Femmina<br>

lingue conosciute:

<input type=checkbox value=Ita checked name=ITA>Italico

<input type=checkbox value=Fra name=FRA>Francese -

<input type=checkbox value=UK name=UK>Inglese<br>

lingue conosciute: <select name=lingueparlate size=1>

<option value=ita>Italico

<option value=fra>Francese

<option value=uk selected>Inglese

<option value=es>spagnolo

<option value=ar>Arabo

<option value=ch>Cinese

</SELECT><br>

commenti: <textarea rows=10 cols=40>Verdi Anna</textarea>

<input type=hidden value="4T" name=classe>

<input type=submit value="invia dati">

</form>

<FORM action=pioppo.htm>

<input type=submit value="invia">

</FORM>

--- ESEMPIO 3O

---

<FORM action=pioppo.htm name=DATI>

Nominativo:<input type=text name=nominativo size=40><br>

Prov. residenza:<input type=text name=prov size=2 value="BS" MAXLENGTH=2><br>

PASSWORD: <input type=PASSWORD name=PWD size=6 MAXLENGTH=6><br>

esito fine anno <input type=radio name=esito value="P" checked> promosso - <input type=radio name=esito value="NP"> non promosso<br>

genere: <input type=radio name=genere value=1> maschio - <input type=radio name=genere value=2 checked> femmina<br>

lingue parlate : <input type=checkbox value="I" name=ita checked> ITA <input type=checkbox value="Fr" name=fra> FRA <input type=checkbox value="Inglese" name=uk> UK<br>

Nazionalità:

<select name=nazione size=3>

<option value=1>Italica

<option value=2>Francese

<option value=3 selected>Inglese

(11)

</SELECT><br>

Commenti: <textarea cols=80 rows=4>Ciao</textarea>

<INPUT TYPE=HIDDEN NAME="classe" VALUE="3O">

<input type=submit value="invia">

</FORM>

---

2/2/2017 - 3F - 2 MODULO

da e01692

JAVASCRIPT => è case sensitive

alert => istruzione JS che mostra una finestra di avviso con all'interno la frase indicata come argomento

esempio alert("AVE") alert('AVE')

onClick => evento che viene scatenato quando cliccheggio sul controllo

<input type=button value="Saluta!!" onclick="alert('AVE')">

le sequenze di char racchiuse tra " si dicono stringhe => sono costanti!

posso usare in alternativa il singolo apice

"AVE" => stringa

'AVE' => ancora una stringa (sequenza di char ascii!) scritture equivalenti corrette

<input type=button value="Saluta!!" onclick="alert('AVE')">

<input type=button value='Saluta!!' onclick='alert("AVE")'>

scrittura errata

<input type=button value="Saluta!!" onclick="alert("AVE")">

il browser usa i " o il ' per identificare la sequenza JS da eseguire sul click

se uso sistematicamente " anche per eventuali stringhe il browser interpreta l'inizio della stringa come fine dell'istruzione JS generando un errore!

ESEMPIO VISTO IN CLASSE

---

<FORM action="http://www.brescianet.com/appunti/web_latoclient/esercizi/eser_html2.htm">

Cognome<input type=text name=cognome value="Rossi" size=30><br>

Nome<input type=text name=nome value="Mario" size=20 maxlength=30><br>

Provincia

<select name=provincia size=4>

<option value=1>MI

<option value=2>TN

<option value=3 selected>BS

<option value=4>Altro

</select>

<br>

Password<input type=password name=pwd value="" size=6><br>

Classe di appartenenza:

<input type=radio Name=classe value="IIIT">3T

<input type=radio Name=classe value="IIIO">3O

<input type=radio Name=classe value="IIIF" checked>3F<br>

Genere: <input type=radio Name=Genere value="M">Maschio

<input type=radio Name=Genere value="F">Femmina<br>

Inviato: 02/02/2017, 8:00

(12)

Lingue conosciute:<input type=CHECKBOX NAME=ita value="I" checked>Italiano

<input type=CHECKBOX NAME=Fra value="Fr">Francese

<input type=CHECKBOX NAME=ING value="Uk">Inglese

<input type=CHECKBOX NAME=Ara value="As">Arabo<br>

Amici:<select name=studenti>

<option value=12>Rossi Bianca

<option value=512 selected>Verdi Erika

<option value=162>Gialli Chiara

<option value=1872>Rossi Bianca

</select><br>

commenti:<textarea rows=10 cols=40>Cognome nome</textarea>

<input type=hidden name=Nominativo value="Neri Bruna"><br>

<input type=submit value="invia">

<input type=button value="Saluta!!" onclick="alert('AVE')">

</FORM>

---

24/1/2017 3T (riprendere dalla lettura del controllo HIDDEN)

JAVASCRIPT

document => oggetto che in JS identifica il documento corrente oggetti dotati di proprietà e azioni (metodi)

metodi e proprietà di un oggetto vengono separati dal punto

document.URL => proprietà che identifica il percorso del file visualizzato

document.DATI.submit() => metodo che consente l'invio dei dati alla pagina indicata in action

document.write(document.URL); => scrive l'indirizzo della pagina web che sto guardando esempio

<script language=Javascript>

alert(document.URL)

</SCRIPT>

<script language=Javascript>

document.write("<h1>AVE</h1>") document.write(document.URL) document.write("<br>")

document.write(document.url) document.write("<br>")

document.write("document.URL")

</SCRIPT>

esempio

<input type=BUTTON value="SALUTA" ONCLICK="document.DATI.submit()">

equivale a

<input type=SUBMIT value="SALUTA">

document.DATI.nominativo.value => proprietà che estrae la frase scritta nel textbox nominativo del form DATI contenuto nella pagina visualizzata

(13)

+ per le stringhe è un operatore di concatenazione 1+2=3

"1"+"2"="12"

esempio:

<FORM action=pioppo.htm name=DATI>

Nominativo:<input type=text name=nominativo size=40 value="Rossi mario"><br>

Prov. residenza:<input type=text name=prov size=2 value="BS" MAXLENGTH=2><br>

<INPUT TYPE=HIDDEN NAME="classe" VALUE="3O">

<input type=SUBMIT value="invia dati">

<input type=BUTTON value="invia dati (JS)" ONCLICK="document.DATI.submit()">

<input type=BUTTON value="SALUTA" ONCLICK="alert(document.DATI.nominativo.value)">

</FORM>

document.write(stringa) => metodo del documento corrente che permette di scriverci dentro.

script usato per le sezioni JS

<script language="javascript">

document.write("<h1>AVE STUDENTS</h1>")

</SCRIPT>

Esempio 3F

---

<form name=DATI action="pioppo.htm">

Cognome: <input type=text name=Cognome size=40><br>

Prov. residenza: <input type=text size=2 maxlength=2 name="prov di residenza"><br>

<input type=hidden value="3F" name=classe>

<input type=button value="Saluta" onClick="alert('AVE '+document.DATI.Cognome.value)">

<input type=submit value="invia dati">

<input type=BUTTON value="invia dati 2" ONCLICK="document.DATI.submit()">

</form>

<script language=Javascript>

document.write("<h1>AVE</h1>") document.write("<br>")

document.write("<h1>AVE "+document.DATI.classe.value +"</h1>")

</SCRIPT>

---

4/2/2017 -: 3F - 2 MODULO

da e01692

ISTRUZIONI DI I/O di JS

prompt => consente di richiedere un valore tramite una finestra di dialogo alert => mostra una finestra di avviso

esempio d'uso

classe=prompt("Che classe siete ?")

classe è una variabile (un post-it informatico) che riceverà il valore letto con l'istruzione prompt

classe è diverso da

"classe"

Inviato: 04/02/2017, 11:59

(14)

"classe" è una costante di tipo stringa (sequenza di simboli ascii)

classe => è una variabile contenitore che userò per memorizzare dati acquisiti durante l'esecuzione di un prg

"ciao " + "Marco " => "ciao Marco " => concatenazione di stringe se voglio concatenare delle variabili

"Ciao "+Nominativo

si noti l'assenza di " sulle variabili

<script language="javascript">

classe="terza T"

document.write("<h1>"+classe +"</h1>") document.write("<h1>"+"classe" +"</h1>")

</SCRIPT>

Esempio 1 - Saluta la classe indicata in prompt

<script language="javascript">

classe=prompt("Che classe siete ?")

document.write("<h1>AVE "+classe +"</h1>")

</SCRIPT>

3O 28/1/2017 - 3O

"12"+"3" ="123" => il + concatena le stringhe

12+3 => 15 (sono numeri per cui la semantica dell'operatore + resta quella solita

SINTASSI E SEMANTICA DI PROMPT accetta 2 argomenti

var=prompt("frase che spiega quello che voglio","valore predefinito")

Il valore digitato viene assegnato alla variabile var presente a sinistra dell'=

provincia=prompt("Dove risiedi ?","BS") Esempio:

<script language="javascript">

provincia=prompt("Dove risiedi ?","BS") document.write("<h1>"+provincia +"</h1>")

</SCRIPT>

COMMENTI:

I commenti sono particolari frasi descrittive che il programmatore inserisce nel codice per ricordarsi cosa fa una determinata porzione di codice

i commenti vengono ignorati dall'interprete JS (IE). Servono solo al prg o a chi intende capire a cosa serve una porzione di codice.

// commento su una sola riga => utile per spiegare cosa fa un prg in una determinata sequenza di istruzioni - i commenti su 1 sola riga sono brevi e di natura estemporanea /*

commento

(15)

su + righe

*/

I commenti su + righe vanno usati quando la descrizione che devo inserire è molto lunga. Con tale sintassi non devo replicare per ogni riga la sequenza // che identifica il commento

<!-- commento HTML //--> => sono i commenti in HTml => SONO ignorati dal browser e i webmaster li usano solo per evidenziare particolari porzioni di codice HTML. I commenti HTML sono usati per evitare errori da parte dei browser che non supportano js.

ESEMPIO:

<script language="javascript">

<!--

alert("Welcome to Software Developers");

//-->

</SCRIPT>

senza i commenti html i vecchi browser che non supportano JS mostrano in toto la sequenza di comandi JS creando perplessità nell'utente che consulta la pagina

3T 26/1/2017

Ricordarsi di mostrare il vantaggio dell'uso del JS nel controllo dell'input

<FORM action=pioppo.htm name=DATI>

Nominativo:<input type=text name=nominativo size=40 value="Rossi mario"><br>

<input type=SUBMIT value="invia dati">

<input type=BUTTON value="invia dati (JS)" ONCLICK="document.DATI.submit()">

</FORM>

con SUBMIT il controllo dell'errore è sistematicamente effettutato dal server. questo =>

1) inutile traffico

2) lentezza nella risposta

Gli errori dovuti all'assenza di dati sul server (esempio do il voto al Mario rossi di 3T ma lo studente non esiste in archivio) devono essere necessariamente gestiti dal server Gli errori sintattici possono essere gestiti dal browser.

esempio

ciao#libero => non è una email

ciao@libero.it => è una mail ma non è detto che sia registrata sul server

I controlli sintattici possono essere fatti sia dal client che dal server ma è meglio dal client poichè la risposta è immediata e non genera inutile traffico

6/2/2017 - 3F - 2 MODULO

da e01692 Inviato: 06/02/2017, 10:02

(16)

Costrutto di selezione => IF if (Condizione)

eseguo istruzione A [else

eseguo istruzione B]

esempio

<script language="JavaScript">

risposta=prompt("Scrivi qualcosa:","") if (risposta!="")

alert(risposta)

</SCRIPT>

se la condizione è vera eseguo A altrimenti B non è obbligatorio che sia inserita la sezione else if (HosuperatoIlModulo1=="NO")

Risecchio il modulo 1

IF è la componenti di prg che replica la capacità umana di prendere delle decisioni ed effettuare delle scelte

condizione => restituisce solo vero o falso operatori di confronto

>

>=

<

<=

!= diverso

== uguale (non = !!!!!!!!!!!!!! perchè assegna il valore a destra!!)

3O 4/2/2017 if (eta>=18)

alert("sei maggiorenne!") if (voto<6)

alert("Devi ripetere la prova!") else

alert("Inizia a studiare il 2° modulo") Qui ho un errore:

if (cognome="verdi") alert("AVE " + cognome);

infatti

<script language="JavaScript">

cognome=prompt("Chi sei:","") if (cognome="rossi")

alert("AVE " + cognome);

</SCRIPT>

saluterà sempre rossi poichè l'= implica assegnamento e non confronto

(17)

La scrittura corretta è:

<script language="JavaScript">

cognome=prompt("Chi sei:","") if (cognome=="rossi")

alert("AVE " + cognome);

</SCRIPT>

Una variabile che contiene un valore <> da zero o <> dalla stringa vuota

"" verrà sempre interpretato in una condizione con valore vero esempio

// In questo script dirà: "Hai definito un'età"

eta=19 if (eta)

alert("Hai definito un'età") else

alert("Non hai definito un'età")

// In questo script dirà: "Non hai definito un'età"

eta=0 if (eta)

alert("Non hai definito un'età") else

alert("Non hai definito un'età")

// In questo script dirà: "Hai definito il nome"

nome="Mario"

if (nome)

alert("Hai definito il nome") else

alert("Non hai definito il nome")

// In questo script dirà: "Non hai definito il nome"

nome=""

if (nome)

alert("Hai definito il nome") else

alert("Non hai definito il nome")

3T 2/2/2017

riprendere da questo esempio

Questo esempio mostra come con JS controllo l'input prima di inviare i dati (controllo sintattico):

---

<script language="JavaScript">

function Controllo() {

if (document.DATI.nominativo.value!="") document.DATI.submit()

else

alert("Manca il nominativo!!!!") }

(18)

</SCRIPT>

<FORM action=pioppo.htm name=DATI>

Nominativo:<input type=text name=nominativo size=40 value=""><br>

<input type=SUBMIT value="invia dati">

<input type=BUTTON value="invia dati (JS)" ONCLICK="Controllo()">

</FORM>

</SCRIPT>

---

BOTTONE RESET => reimposta i controlli ai valori predefiniti tramite le direttive checked, selected e value

TYPE=BUTTON => bottone generico che viene connesso a JS tramite l'evento onClick.

---

<form name=DATI action="pioppo.htm">

Cognome: <input type=text name=Cognome size=40 value=""><br>

Prov. residenza: <input type=text size=2 maxlength=2 name="prov di residenza" value="BS"><br>

classe <SELECT NAME=classi>

<Option>3F

<Option>3I

<Option>3U

<Option SELECTED>3N

</SELECT><br>

Lingue conosciute: <input type=checkbox name=ita checked>Ita

<input type=checkbox name=fra>Fra

<input type=checkbox name=uk>Uk <BR>

<input type=button value="bottone">

<input type=submit value="invia dati">

<input type=reset value="ripristina valori iniziali" >

</form>

--- Un prg è composto da 3 sezioni INPUT => richiesta dati

ALGORITMO => risoluzione del problema sui dati di input OUTPUT ==> presentazione dei risultati

Le applicazioni reali sono composte per il 70% di Input/output (interfaccia utente).

La parte di I/O è abbastanza costante in tutti i prg pertanto una volta appresa la tecnica si tratta di uno sviluppo applicativo abbastanza ripetitivo.

Aver citato come istruzioni di input prompt, confirm e il forms e di output document.writeln ed alert mi consente di ridurre al minimo il codice relativo all'acquisizione dei dati e alla presentazione dei risultati consentendomi di evidenziare l'unico elemento veramente

(19)

variabile di un prg: la sezione algoritmo.

Quando sviluppo una soluzione le 3 sezioni principali di un prg possono essere risolte una ad una anche senza seguire un ordine preciso.

Esempio

<script language=javascript>

// INPUT

x=prompt("dammi un numero:","0") // ALGORITMO DEL SEGNO

Questa parte la analizzo dopo // OUTPUT

document.write("il numero che ha digitato e': "+risultato);

</SCRIPT>

Indentate il codice in modo da evidenziare la gerarchia tra le

istruzioni. Questa tecnica aumenta la leggibilità del codice e diminuisce la probabilità d'errore

if (x>0)

risultato="positivo"

else if (x<0)

risultato="negativo"

else

risultato="zero"

ESEMPIO BASE

risoluzione del segno di un valore letto:

<script language=javascript>

// INPUT

x=prompt("dammi un numero:","0") // ALGORITMO DEL SEGNO

if (x>0)

risultato="positivo"

else if (x<0)

risultato="negativo"

else // non mettere if (x==0) risultato="zero"

// OUTPUT

document.write("il numero che ha digitato e': "+risultato);

</SCRIPT>

manca il controllo dell'errore: se scrivo "ciao" mi indica che il valore è zero il che è errato.

isNaN(arg) => funzione JS che restituisce vero se il suo argomento non è un numero!!

SINTASSI BASE DI IF if (Condizione) eseguo istruzione A [else

eseguo istruzione B]

(20)

significa che posso inserire un IF dentro l'altro if (Condizione1)

eseguo istruzione A else

if (Condizione2) eseguo istruzione B else

eseguo istruzione C

Con N alternative il nr di if da usare sono N-1

questa modalità è valida se devo gestire + di 2 alternative. In questo caso viene utile la seguente sintassi

if (Condizione1) eseguo istruzione A else

if (Condizione2) eseguo istruzione B else

if (Condizione3) eseguo istruzione C else

eseguo istruzione D equivalente a:

if (Condizione1) eseguo istruzione A else if (Condizione2) eseguo istruzione B else if (Condizione3) eseguo istruzione C else

eseguo istruzione D

Lo script base precedente del segno di X può essere riscritto in questo modo:

---

<script language=javascript>

// INPUT

x=prompt("dammi un numero:","0") // ALGORITMO DEL SEGNO

if (x>0)

risultato="positivo"

else if (x<0)

risultato="negativo"

else // non mettere if (x==0) risultato="zero"

// OUTPUT

document.write("il numero che ha digitato e': "+risultato);

</SCRIPT>

---

Controllo dell'input (per ora limitato alle stringhe) ---

(21)

<script language=javascript>

// INPUT

x=prompt("dammi un numero:","0") // ALGORITMO DEL SEGNO

if (isNaN(x))

document.write("Non hai scritto un numero!!!!") else

{ if (x>0)

risultato="positivo"

else if (x<0)

risultato="negativo"

else // non mettere if (x==0) risultato="zero"

}

// OUTPUT

document.write("il numero che ha digitato e': "+risultato);

</SCRIPT>

09/02/2017- 3F - 2 MODULO

da e01692

se le istruzioni sottese ad un if sono + di una userò le {} per delimitarle

if (condizione) {

istruzioneA1 istruzioneA2 ...

istruzioneAn }

else {

istruzioneB1 istruzioneB2 ...

istruzioneBn }

premere ALT + 123 sul tastierino numerico => { premere ALT + 125 sul tastierino numerico => } oppure

ALT+SHIFT+[ => { ALT+SHIFT+] => }

if (condizione) {

istruzioneA1 istruzioneA2 ...

istruzioneAn }

non è = a questa if (condizione)

Inviato: 09/02/2017, 8:01

(22)

istruzioneA1 istruzioneA2 ...

istruzioneAn

poichè solo IstruzioneA1 è sottesa all'IF mentre le istruzioni istruzioneA2

...

istruzioneAn

verranno sempre eseguite

DOMANDA 1 => gestione del segno + controllo errore SOLUZIONE:

<script language=javascript>

// INPUT

x=prompt("dammi un numero:","0") if (x!=null)

{

// ALGORITMO DEL SEGNO if (isNaN(x))

document.write("Non hai scritto un numero!!!!") else

{ if (x>0)

risultato="positivo"

else if (x<0)

risultato="negativo"

else // non mettere if (x==0) risultato="zero"

}

// OUTPUT

document.write("il numero che ha digitato e': "+risultato);

} else

document.write("hai desistito!!!");

</SCRIPT>

parseInt(arg) => decodifica l'argomento passato in un numero esempio

parseInt("11") => 11 parseInt("11.6") => 11 parseInt("11.2") => 11

quindi in presenza di decimali tronca la parte dopo la , parseFloat("11.2") => 11.2

parseFloat("11") => 11.0 Esempio con errore:

<script language=javascript>

// INPUT

x=prompt("dammi il 1° numero:","0") y=prompt("dammi il 2° numero:","0") //ALGORITMO

z=x+y

Z=x*y // Z è maiuscola per cui è un'altra variabile // OUTPUT

document.write("<h1>z=x+y="+z+"</h1>") document.write("<h1>z=x*y="+Z+"</h1>")

(23)

</SCRIPT>

si osservi se x="10" e y="5" il risultato mostrato è:

z=x+y=105 z=x*y=50

si osservi che nel caso della moltiplica il risultato ottenuto è corretto. Il motivo risiede nel fatto che il * ha solo una semantica

relativa a dati numerici e pertanto JS converte in automatico le stringhe lette con prompt.

si osservi che nel caso della somma il risultato ottenuto è inaspettato.

Il motivo risiede nel fatto che il + assume 2 significati: somma per i numeri e concatenzione per le stringhe. Prompt restituisce delle stringhe per cui JS applica il 2° significato: concatena! Per ottenere la somma devo rendere esplicita la conversione utilizzando parseInt e parseFloat.

Esempio intermedio

---

<script language=javascript>

// INPUT

x=prompt("dammi il 1° numero (intero):","0") x=parseInt(x)

y=prompt("dammi il 2° numero (reale):","0") y=parseFloat(y)

//ALGORITMO z=x+y

Z=x*y // Z è maiuscola per cui è un'altra variabile // OUTPUT

document.write("<h1>z=x+y="+z+"</h1>") document.write("<h1>z=x*y="+Z+"</h1>")

</SCRIPT>

---

13/2/2017 - 3F - 2 MODULO

da e01692

riprendere dal controllo dell'errore

<script language=javascript>

// INPUT

x=prompt("dammi il 1° numero (intero):","0") x=parseInt(x)

y=prompt("dammi il 2° numero (reale):","0") y=parseFloat(y)

//ALGORITMO z=x+y

Z=x*y // Z è maiuscola per cui è un'altra variabile // OUTPUT

document.write("<h1>z=x+y="+z+"</h1>") document.write("<h1>z=x*y="+Z+"</h1>")

</SCRIPT>

Inviato: 13/02/2017, 10:00

(24)

parseInt("Ciao") => NaN => costante che dice che non è assimilabile ad un numero

condizioni complesse => costruite con gli operatori || && e !

&& AND => ed anche

|| OR => oppure

! NOT => negazione

condizione1 && condizione2 => vera se tutte e 2 le condizioni sono vere condizione1 || condizione2 => vera se una delle 2 condizioni è vera

!Condizione => vera se Condizione è falsa

isNaN(x) || isNaN(y) => vera se uno dei 2 non è un numero

!isNaN(x) && !isNaN(y) => vera se tutti e 2 sono numeri

DOMANDA 2=> calcolo della somma e prodotto di 2 numeri con controllo errore

2° soluzione

---

<script language=javascript>

// INPUT

x=prompt("dammi il 1° numero (intero):","0") if (x!=null)

{

y=prompt("dammi il 2° numero (reale):","0") if (y!=null)

{

if (isNaN(x) || isNaN(y))

document.write("Errore. mi ha scritto delle stringhe!") else

{

x=parseInt(x) y=parseFloat(y) //ALGORITMO z=x+y

Z=x*y // Z è maiuscola per cui è un'altra variabile // OUTPUT

document.write("<h1>z=x+y="+z+"</h1>") document.write("<h1>z=x*y="+Z+"</h1>") }

} }

</SCRIPT>

2° soluzione

---

<script language=javascript>

// INPUT

x=prompt("dammi il 1° numero (intero):","0") if (x!=null)

{

y=prompt("dammi il 2° numero (reale):","0")

(25)

if (y!=null) {

if (!isNaN(x) && !isNaN(y)) {

x=parseInt(x) y=parseFloat(y) //ALGORITMO z=x+y

Z=x*y // Z è maiuscola per cui è un'altra variabile // OUTPUT

document.write("<h1>z=x+y="+z+"</h1>") document.write("<h1>z=x*y="+Z+"</h1>") }

else

document.write("Errore. mi ha scritto delle stringhe!") }

}

</SCRIPT>

---

3T 9/2/2017

riprendere dagli esercizi 3° soluzione

---

<script language=javascript>

// INPUT

x=prompt("dammi il 1° numero (intero):","0") if (x!=null)

{

y=prompt("dammi il 2° numero (reale):","0") if (y!=null)

{

if (!(isNaN(x) || isNaN(y))) {

x=parseInt(x) y=parseFloat(y) //ALGORITMO z=x+y

Z=x*y // Z è maiuscola per cui è un'altra variabile // OUTPUT

document.write("<h1>z=x+y="+z+"</h1>") document.write("<h1>z=x*y="+Z+"</h1>") }

else

document.write("Errore. mi ha scritto delle stringhe!") }

}

</SCRIPT>

---

Funzioni MATH.

Math.sqrt(x) => radice quadrata di x Operatori algebrici:

*, + , - , / , %

A % B => restituisce il resto della divisione di A per B

(26)

un numero x è pari se x % 2 = 0

DOMANDA => leggere un valore e stabilire se è pari, dispari o zero + controllo errore

<script language=javascript>

// INPUT

x=prompt("dammi un numero:","0") if (x!=null)

{

// ALGORITMO DEL Pari/dispari if (isNaN(x))

document.write("Non hai scritto un numero!!!!") else

{

if ((x % 2 ==0) && x!=0) risultato="pari"

else if (x % 2 ==1) risultato="dispari"

else

risultato="zero"

}

// OUTPUT

document.write("il numero che ha digitato e': "+risultato);

} else

document.write("hai desistito!!!");

</SCRIPT>

Un pari/dispari/destra potrebbe essere valutato in vari modi:

if (x==0)

risultato="zero"

else if (x % 2 ==1) risultato="dispari"

else

risultato="pari"

oppure if (x==0)

risultato="zero"

else if (x % 2 ==0) risultato="pari"

else

risultato="dispari"

----

COMPITO => valutare anche la casistica : "NOn hai scritto un intero"

(3O-3F) 11/2/2017 3O

La tabella ascii definisce l'ordinamento lessicografico. Questa relazione d'ordine è vera:

"Zorro" < "anta"

poichè le lettere maiuscole in ascii sono poste prima di quelle minuscole.

"1234" < "8" => confronto lettera per lettera per cui in ascii "8" > "1" da cui segue la relazione

(27)

DOMANDA 3 sull'IF: dato un char stabilire (con controllo errore!) se è minuscola, maiuscola, numero o altro

<script language=javascript>

// INPUT

c=prompt("dammi una lettera:","") if (c!=null)

{

if (c=="") // c non contiene alcun char document.write("stringa vuota") else if (c.length!=1)

document.write("Non hai digitato un singolo carattere!") else if (c<="Z" && c>="A")

document.write("Maiuscola") else if (c<="z" && c>="a") document.write("Minuscola") else if (c<="9" && c>="0") document.write("Numero") else

document.write("Non hai digitato un carattere alfanumerico") }

</SCRIPT>

16/2/2017 - 3F - 2 MODULO

da e01692

DOMANDA 4 => valutare se 2 punti sono all'interno del rettangolo di coordinate (a,b) {angolo inferiore sinistro} e (c,d) {angolo in alto a destra}

<script language=javascript>

a=1 b=1 c=10 d=3 // INPUT

x=prompt("dammi la X:","") if (x!=null)

{

y=prompt("dammi la Y:","") if (y!=null)

{

// qualcosa e' stato digitato if ((isNaN(x) || isNaN(y))

document.write("Non hai messo delle coordinate sensate!") else

{

if (x<c && x>a && y<d && y>b)

document.write("sei dentro il rettangolo") else if (x<a || x>c || y>d || y<b)

document.write("fuori dal il rettangolo") else

document.write("sei sul bordo il rettangolo") }

} }

</SCRIPT>

Inviato: 16/02/2017, 8:00

(28)

3T 14/2/2017

La condizione sul bordo risulta piuttosto complessa if (

(x<c && x>a) && (y==d || y==b)

||

(y<d && y>b) && (x==a || x==c) )

document.write("sei sul bordo il rettangolo") else if (x<a || x>c || y>d || y<b)

document.write("fuori dal il rettangolo") else

document.write("sei dentro il rettangolo") Un numero è intero se

x==parseInt(x)

DOMANDA => valutazione pari/dispari/zero + valutazione del segno SOLUZIONE

---

<script language=javascript>

// INPUT

x=prompt("dammi un numero:","0") if (x!=null)

{

// ALGORITMO DEL Pari/dispari if (isNaN(x))

document.write("Non hai scritto un numero!!!!") else

{

if (x==parseInt(x)) // è un intero {

if ((x % 2 ==0) && x!=0) risultato="pari"

else if (x % 2 ==1) risultato="dispari"

else

risultato="zero"

// OUTPUT

document.write("il numero che ha digitato e': "+risultato);

} else

document.write("Non hai scritto un numero intero!!!!") }

} else

document.write("hai desistito!!!");

</SCRIPT>

---

DOMANDA 6 => leggere una mail e valutare se è corretta o meno (all'interno di un form)

Iniziamo con questo esempio:

---

<form action=pioppo.htm>

e-mail:<input type=text value="" NAME=email><br>

<input type=button value="Invia la tua mail" onClick="ControllaMail()">

</form>

(29)

<script language=javascript>

function ControllaMail() {

alert("AVE") }

//ControllaMail() Nome="Rossinelli"

alert(Nome.indexOf("e"));

alert(Nome.charAt(3));

</SCRIPT>

---

Si osservi che JS esegue tutte le istruzioni che non sono incluse nella dicitura

function NomeFunzione() {}

Per eseguire le istruzioni all'interno di function NomeFunzione() {} devo richiamarla in modo esplicito con istruzioni del tipo:

ControllaMail() oppure

onClick="ControllaMail()"

18/2/2017 - 3F - 2 MODULO

da e01692

function => racchiude porzioni di codice che non vengono eseguite da JS durante il caricamento della pagina ma solo quando accade un evento opportuno oppure se tra script /script richiamo quella funzione in modo esplicito con il suo nome

esempio ControllaMail() 3O 16/2/2017

stringa.indexOf(c) => posizione del 1° carattere c in stringa

stringa.indexOf(s) => posizione della prima occorrenza della stringa s in stringa - restituisce -1 se non trova

stringa.lastIndexOf(s) => posizione dell'ultima occorrenza della stringa s in stringa - restituisce -1 se non trova

(3T)

compitao => costruire le condizioni necessarie a valutare questi errori

@pioppo.it marco@pioppo.

marco@.it

da usare nel seguente script:

---

<form Name=DATI>

e-mail:<input type=text value="" NAME=email><br>

Inviato: 18/02/2017, 11:57

(30)

<input type=button value="Invia la tua mail" onClick="ControllaMail()">

</form>

<script language=javascript>

function ControllaMail() {

s=document.DATI.email.value if (s.length==0)

alert("Non hai scritto nulla!")

else if (s.indexOf("@")!=-1 && s.indexOf(".")!=-1) {

// qui arrivo anche con una mail di questo tipo:

// marco@pioppo.

// @pioppo.it // marco@.it

NonEUnaMail=(condizione vera se ho marco@pioppo.)

NonEUnaMail=NonEUnaMail || (condizione vera se ho @pioppo.it) NonEUnaMail=NonEUnaMail || (condizione vera se ho marco@.it) if (NonEunaMail)

alert("mail assurda!!!") else

document.DATI.submit();

} else

alert("Non è una mail poichè non hai @ o .") }

//ControllaMail() /*

Nome="Rossinelli"

alert(Nome.indexOf("i"));

alert(Nome.lastIndexOf("i"));

alert(Nome.charAt(6));

alert(Nome.substring(1,5));

*/

</SCRIPT>

--- 3T - 16/2/2017

NonEUnaMail=(condizione vera se ho marco@pioppo.)

NonEUnaMail=NonEUnaMail || (condizione vera se ho @pioppo.it) NonEUnaMail=NonEUnaMail || (condizione vera se ho marco@.it) è equivalente a:

NonEUnaMail=(condizione vera se ho marco@pioppo.) || (condizione vera se ho @pioppo.it) || (condizione vera se ho marco@.it)

ed equivalente a:

EUnaMail=(condizione falsa se ho marco@pioppo.)

EUnaMail=EUnaMail && (condizione falsa se ho @pioppo.it) EUnaMail=EUnaMail && (condizione falsa se ho marco@.it) x=1+2+4

equilvalente x=1

(31)

x=x+2 x=x+4

Funzione reale usata per testare una mail (non richiesta) ---

function isEmail(email) {

// email=document.ACCESSO.Email.value;

//var email = document.getElementById('Email');

var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;

if (!filter.test(email)) return false;

return true;

}

---

20/2/2017 - 3F - 2 MODULO

da e01692

(s.length-1)==s.lastIndexOf(".") // . ho un punto alla fine (s.indexOf("@")==0) // @ all'inizio della stringa

((s.indexOf("@.")!=-1) || (s.indexOf("..")!=-1)) // @ all'inizio della stringa

ESEMPIo 6 - Soluzione (delle 5 condizioni centrali mi bastano 3)

<form Name=DATI>

e-mail:<input type=text value="" NAME=email><br>

<input type=button value="Invia la tua mail" onClick="ControllaMail()">

</form>

<script language=javascript>

function ControllaMail() {

s=document.DATI.email.value if (s.length==0)

alert("Non hai scritto nulla!")

else if (s.indexOf("@")!=-1 && s.indexOf(".")!=-1) {

// condizione vera se ho marco@pioppo.

// ovvero non ho messo il tld (sigla finale dopo l'ultimo punto NonEUnaMail=( (s.length-1)==s.lastIndexOf(".") )

// condizione vera se ho @pioppo.it

// ovvero non ho messo il nome dell'utente

NonEUnaMail=NonEUnaMail || ( s.indexOf("@")==0 ) // condizione vera se ho marco@.it

// ovvero non ho messo il nome del dominio

NonEUnaMail=NonEUnaMail || ( s.indexOf("@.")!=-1 ) // esempi non gestiti

// non posso avere .. => s.indexOf("..")!=-1

// + di un @ ==> s.indexOf("@")!=s.lastIndexOf("@") if (NonEUnaMail)

alert("mail assurda!!!") else

document.DATI.submit();

} else

alert("Non è una mail poichè non hai @ o .")

Inviato: 20/02/2017, 10:03

(32)

}

</script>

23/2/2017: 3F - 2 MODULO

da e01692

ITERAZIONI

Consente di ripetere un'operazione finchè una condizione resta vera Costrutto FOR

for (inizializzazione ; condizione ; istruzione finale x ogni ciclo) parte iterata (ripetuta) {}

...

Suo funzionamento:

1) viene eseguita: inizializzazione

2) controllo la condizione. se è falsa smetto di usare il for e passo all'istruzione successiva ... (punto 6)

3) viene eseguita: parte iterata (ripetuta) 4) viene eseguita: istruzione finale x ogni ciclo 5) ritorno al punto 2)

6) ...

Esempio

<script language=javascript>

N=10 // numero di saluti for (i=1 ;i <=10; i++)

document.write(i+"° AVE<br>")

document.write("Ho finito con i saluti")

</script>

e' equivalente alla seguente sequenza

<script language=javascript>

N=10 // numero di saluti i=1 // è eseguito prima del for for ( ;; )

{

if (i>10) break; // se la condizione è vera esco dal ciclo document.write(i+"° AVE<br>")

i++ // eseguito prima del ciclo }

document.write("Ho finito con i saluti")

</script>

for (;;) => loop infinito Domande

primi N dispari

N=prompt("Dammi il numero di elementi","10") N=parseInt(N)

for (i=0 ;i<N; i++) {

document.write((2*i+1)+"<br>") }

/*

Inviato: 23/02/2017, 7:59

(33)

for (i=1 ;i<=N; i++) {

document.write((2*i-1)+"<br>") }

*/

oppure

N=prompt("Dammi il numero di elementi","10") N=parseInt(N)

for (i=1,d=1 ;i<=N; i++, d=d+2) {

document.write(d+"<br>") }

la , nella prima parte del for (inizializzazione) separa le singole istruzioni che verranno eseguite

for (Istr1,Istr2,...,IstrN ; condizione ; istrA,istrB,...,istrZ) Parteiterata

equivale Istr1 Istr2 ...

for ( IstrN; condizione ; istrZ) {

Parteiterata istrA

istrB ..., }

ESEMPIO

Leggo un elenco di numeri fino a quando non leggo 0 x=prompt("Dammi un numero","0")

for ( ;x!=0; )

x=prompt("Dammi un numero","0") ESEMPIO

Leggo un elenco di numeri fino a quando non leggo 0 e restituisco la somma

x=prompt("Dammi un numero","0") for (s=0 ;x!=0; )

{

s=s+parseInt(x)

document.write(x+"<BR>")

x=prompt("Dammi un numero","0") }

document.write("la somma dei valori letti e': " +s) 1° DOMANDA VERIFICHE

Leggo un elenco di numeri fino a quando non leggo 0 e restituisco la media. Nella lettura devo escludere valori non numerici

(34)

SOLUZIONE

x=prompt("Dammi un numero","0") for (s=0, i=0 ;x!=0;)

{

if (!isNaN(x) && x!=0) {

s=s+parseFloat(x) i=i+1

document.write(x+"<BR>") }

x=prompt("Dammi un numero","0") }

if (i>0)

document.write("la media dei valori letti e': " +s/i) else

document.write("Non hai fornito numeri!")

Compito per casa 3T - 3F

1) Dato un valore N calcolare la somma dei primi N termini S(N)=1+2+...+N 2) Dato un valore B e un esponente n calcolare B^n

3) Dato un valore N calcolare il fattoriale N!=1*2*3...*N 4) Dato N stampare i valori da N a 1

S(N)=N(N+1)/2 non applicabile

25/2/2017 - 3F - 2 MODULO

da e01692

1) Dato un valore N calcolare la somma dei primi N termini S(N)=1+2+...+N

<script language=javascript>

N=prompt("Dammi N","10") s=0

for (i=1 ;i<=N; i++ )

s=s+i //s(n)=n+S(n-1) - s(0)=0 document.write("la somma e': " +s)

</script>

3) Dato un valore N calcolare il fattoriale N!=1*2*3...*N N!=1*2*3...*N

(N-1)!=1*2*3...*(N-1)

N!=1*2*3...*(N-1)*N=(N-1)!*N

<script language=javascript>

N=prompt("Dammi N","10") p=1

for (i=1 ;i<=N; i++ )

p=p*i // f(n)=f(n-1)*n n!=n*(n-1)! - 0!=1 document.write("il fattoriale e': " +p)

</script>

2) Dato un valore B e un esponente n calcolare B^n

<script language=javascript>

Inviato: 25/02/2017, 11:59

(35)

b=prompt("Dammi B","10") N=prompt("Dammi N","10") p=1

for (i=1 ;i<=N; i++ )

p=p*b // p(n,b)=p(n-1,b)*b - b^0=1

document.write("la potenza " +b+"^"+N+" e': " +p)

</script>

4) Dato N stampare i valori da N a 1

<script language=javascript>

N=prompt("Dammi N","10") for (i=N ;i>=1; i-- )

document.write(i +"<br>")

</script>

loop infinito che non fa nulla for (;;);

x^n x^(n-1)*x

DOMANDA 2 => serie di fibonacci x(1)=richiesto

x(2)=richiesto

N => numeri della serie da stampare x(n)=x(n-1)+x(n-2)

x(1)=1 x(2)=1

x(3)=x(2)+x(1)=2 x(4)=x(3)+x(2)=3 x(5)=x(4)+x(3)=5 x(6)=x(5)+x(4)=8 ....

x(n)=x(n-1)+x(n-2) SOLUZIONE FIBONACCI:

---

<script language=javascript>

X2VoltePrec=prompt("X(1)","1") XPrec=prompt("X(2)","1")

X2VoltePrec=parseInt(X2VoltePrec) XPrec=parseInt(XPrec)

N=prompt("N","5")

document.write("X(1)="+X2VoltePrec+"<br>") document.write("X(2)="+XPrec+"<br>")

for (i=3; i<=N ; i++) // i nr di elementi stampati {

XCorrente=XPrec+X2VoltePrec

document.write("X("+i+")="+XCorrente+"<br>")

X2VoltePrec=XPrec // alla prossima iterazione il termine precedente diventa il precedente del precedente (2 volte precedente)

XPrec=XCorrente // alla prossima iterazione il termine corrente diventa il precedente

(36)

}

</script>

--- --- 3T - NO 3F 3O

<script language=javascript>

x=prompt("Dammi un numero","0") for ( ;x!=0; )

x=prompt("Dammi un numero","0") document.write("finito!!!!<br>")

</script>

<script language=javascript>

for ( x=prompt("Dammi un numero","0");x!=0; x=prompt("Dammi un numero","0"));

document.write("finito!!!!<br>")

</script>

ricordarsi che un ; al termine del for indica l'assenza della parte iterata. Se non ho ; l'istruzione successiva al for viene interpretata come la componente iterata del for stesso.

21/02/2017 3T 1° e 2° ora 25/02/2017 3O

---

Algoritmo che descrive la creazione di una tabella da r=1 a N

scrivi r-esima riga da r=1 a N

dalla c=1 alla colonna N scrivi c-esima cella

6/3/2017 - 3F - 2 MODULO

da e01692

Algoritmo che descrive la creazione di una tabella aperturadellatabella

da r=1 a N

scrivi r-esima riga chiusuradellatabella

decodifico: aperturadellatabella, chiusuradellatabella e scrivi r-esima riga, da r=1 a N

---

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

scriviriga(r)

document.write("</TABLE>") ---

Inviato: 06/03/2017, 10:00

(37)

decodifico:scriviriga(r)

---

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

aprinuovariga

dalla c=1 alla colonna N

scrivi c-esima cella sulla r-esima riga chiudinuovariga

}

document.write("</TABLE>") ---

decodifico: aprinuovariga, chiudinuovariga e scrivi c-esima cella e dalla c=1 alla colonna N

---

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++) scrivicella(r,c)

document.write("</TR>") }

document.write("</TABLE>") --- decodifico scrivicella(r,c) ---

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++)

document.write("<td width=25>" + r*c + "</td>") document.write("</TR>")

}

document.write("</TABLE>") ---

DOMANDA : disegnare la tavola pitagorica NxN SOLUZIONE:

N=prompt("N:","10") N=parseInt(N)

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++)

document.write("<td width=25>" + r*c + "</td>") document.write("</TR>")

}

document.write("</TABLE>")

SCHEMA DI RIFERIMENTO PER LE PROSSIME DOMANDE:

<script language=javascript>

N=prompt("N:","10") N=parseInt(N)

(38)

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++) if (condizione)

document.write("<td width=25 bgcolor=yellow>&nbsp;</td>") else

document.write("<td width=25>&nbsp;</td>") document.write("</TR>")

}

document.write("</TABLE>")

</script>

DOMANDA : disegnare una tabella con la diagonale gialla - le restanti celle bianche

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++) if (r==c)

document.write("<td width=25 bgcolor=yellow>&nbsp;</td>") else

document.write("<td width=25>&nbsp;</td>") document.write("</TR>")

}

document.write("</TABLE>")

DOMANDA : disegnare una tabella con l'antidiagonale gialla - le restanti celle bianche

vedo che gli indici delle celle gialle si comportano in questo modo:

1 N => 1+N 2 N-1 => 1+N 3 N-2 => 1+N ...

N 1

un indice cresce (quello della riga) mentre l'altro decresce (quello

della colonna). In realtà devo notare che la somma delle coordinate r e c resta costante : N+1

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++) if ((r+c)==(N+1))

document.write("<td width=25 bgcolor=yellow>&nbsp;</td>") else

document.write("<td width=25>&nbsp;</td>") document.write("</TR>")

}

(39)

document.write("</TABLE>")

DOMANDA : disegnare una tabella con la diagonale e l'antidiagonale gialla - le restanti celle bianche

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++)

if (((r+c)==(N+1)) || (r==c))

document.write("<td width=25 bgcolor=yellow>&nbsp;</td>") else

document.write("<td width=25>&nbsp;</td>") document.write("</TR>")

}

document.write("</TABLE>")

DOMANDA : disegnare una tabella con il bordo giallo mentre le restanti celle sono bianche

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++)

if (r==1 || r==N || c==1 || c==N)

document.write("<td width=25 bgcolor=yellow>&nbsp;</td>") else

document.write("<td width=25>&nbsp;</td>") document.write("</TR>")

}

document.write("</TABLE>")

DOMANDA : disegnare una tabella a scacchiera gialla e bianca

Noto che la somma delle coordinate quando è pari la cella è colorata altrimenti no.

quindi

document.write("<TABLE BORDER=1>") for (r=1; r<=N; r++)

{

document.write("<TR>") for (c=1; c<=N; c++) if ((r+c) % 2== 0)

document.write("<td width=25 bgcolor=yellow>&nbsp;</td>") else

document.write("<td width=25>&nbsp;</td>") document.write("</TR>")

}

document.write("</TABLE>")

COMPITO 3O-3T => fare su carta scritto a mano ESERCIZIO 9.B.1 e 9.B.2

Riferimenti

Documenti correlati

Per avviare uno dei due programmi di editor presenti nel sistema operativo Windows XP, si clicca sul tasto “Start”, della barra delle applicazioni, quindi sulla voce

II° MODO: Selezionare il file o la cartella da copiare o spostare; per copiare l'elemento selezionato scegliere Mo- difica/Copia mentre per spostare l'elemento selezionato

quale carica Q 0 si deve mettere al centro del quadrato per avere equilibrio;.. il lavoro necessario per trasportare il dipolo ad una distanza d/2 dal filo, mantenendo costante il

[ ] che nei confronti dei soggetti cessati dalla carica nell'anno antecedente la data di pubblicazione del bando di gara, individuati nel presente modulo, sono state

test = una condizione che, finché è vera (ha valore true) fa sì che il ciclo prosegua; quando non è più vera (ha valore false), provoca l’uscita dal ciclo; in questo caso,

Generalmente i tag inseriti dagli utenti vengono mostrati in una tag cloud, utilizzata per navigare e trovare i contenuti desiderati all’interno del sito: cliccando su un tag (link),

• &#34;programma&#34; per gestire interazioni asincrone e parziali tra HTTP client e HTTP server = classe XMLHttpRequest  le API della classe XMLHttpRequest mi permettono

Nella classe Photogallery, dobbiamo ancora definire (oltre a variabili d'istanza e costruttore) i metodi (funzioni). •