Programmazione Iterativa
Flusso naturale del programma:
- viene eseguita un’istruzione dopo l’altra fino a che non si incontra l’istruzione di fine programma.
Programmazione iterativa:
- un'istruzione (o una serie di istruzioni) vengo eseguite continuamente, fino a quando non sopraggiungono delle condizioni che fanno terminare il ciclo.
while
Il ciclo while ripete un blocco di codice fino a quando una condizione specificata è vera.
Sintassi
while (condizione) {
//blocco di codice da eseguire
}
Esempio 1
//Questo ciclo continua fino a che i è minore di 20
function myFunction() {
var i = 0;
while (i < 20) {
var text = "<br>Il numero è " + i;
document.getElementById("demo").innerHTML += text;
i++;
}
document.getElementById("demo").innerHTML += "<br>Il ciclo è finito!";
}
/* ================================================================
!!! ATTENZIONE !!!
Se si dimentica di aumentare la variabile usata nella condizione,
il ciclo diventerà infinito . Questo manderà in crash il browser.
================================================================= */
for
Il for inizializza una variabile, pone una condizione e poi modifica (normalmente incrementa o decrementa) la variabile iniziale.
for (inzializzazione; condizione; modifica){
// blocco istruzioni;
}
Il codice <blocco istruzioni> viene eseguito fino a che l’espressione <condizione> risulta vera, poi si passa la all’istruzione successiva al for.
Esempio
// Questo ciclo for continua fino a che < i > è minore di 20
function test () {
for (var i = 0; i < 20; i++) {
console.info('I adesso vale ' + i);
}
console.info("Adesso i vale " + i +
". Il ciclo è terminato.");
}
test();
Esercizio: Media tra numeri
/medianumeri.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Media tra numeri</title>
<link rel="stylesheet" href="/css/stile.css">
</head>
<body>
<div class="copertina">
<div class="contenitore">
<h1>Media tra più numeri</h1>
</div>
</div>
<div class="contenitore">
<div class="riga align-items-center mt-2">
<div class="col">
<input id="input-utente" type="text" placeholder="Inserisci i numeri separati da punto e virgola" value="" class="aba-input">
</div>
<div class="col-auto">
<button id="btn-calcola" type="button" class="bottone bottone-rosso btn-rounded">Calcola</button>
</div>
</div>
<h5 class="my-2">Risultato</h5>
<p id="risultato"></p>
</div>
<script>
// Calcola la media dei numeri organizzati in un
// Array di numeri
function calcolaMedia(numArray) {
var i = 0; // Indice dell'array di numeri
var somma = 0; // Somma dei valori presenti nell'array
while (i < numArray.length) {
somma = somma + numArray[i];
i++;
}
if (numArray.length > 0) {
return somma / numArray.length;
}
return 0;
}
// Trasforma una stringa di numeri separati da punti e virgola
// in un array di numeri controllando che i valori siano
// realmete numeri e restituisce NaN se la conversione non va a buon fine
function traduciInput(numeriStringa) {
var arrayStr = numeriStringa.split(';');
var numArray = [];
for (i = 0; i < arrayStr.length; i++) {
arrayStr[i] = arrayStr[i].replace(',','.');
var num = parseFloat(arrayStr[i]);
if (isNaN(num))
return NaN;
numArray.push(num);
}
return numArray;
}
// Prende la stringa inserita dall'utente nel campo di immissione
// prova a trasformarla in un array di numeri utilizzando la funzione traduciInput
// se la trasformazione riesce utilizza la funzione calcolaMedia per calcolare al media dei numeri
// altrimenti restituisce un messaggio di errore
function outpuSuPagina () {
var testoUtente = document.getElementById('input-utente');
var outputUtente = document.getElementById('risultato');
var testoInserito = testoUtente.value;
var numArray = traduciInput(testoInserito);
if (numArray == NaN) {
outputUtente.innerHTML = "Inserisci solo numeri separati da punto e virgola!";
} else {
var r = calcolaMedia(numArray);
outputUtente.innerHTML = "La media è: " + r;
}
}
var bottone = document.getElementById('btn-calcola');
bottone.addEventListener('click', outpuSuPagina);
</script>
</body>
</html>
/css/stile.css
/*==============
GENERALE
================*/
* {
box-sizing: border-box;
margin:0;
}
html {
font-size: 20px;
}
/*==============
TIPOGRAFIA
================*/
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
font-size: 1rem;
color: #222222;
line-height: 1.4;
}
h1,h2,h3 {
font-weight: 300;
}
h4,h5,h6 {
font-weight: 600;
font-variant: small-caps;
}
h1,h2,h3,h4,h5,h6 {
line-height: 1.1;
}
h1 {
font-size: 4.5rem;
}
h2 {
font-size: 3.5rem;
}
h3 {
font-size: 2.5rem;
}
h4 {
font-size: 1.8rem;
}
h5 {
font-size:1.4rem;
}
h6 {
font-size: 1.1rem;
}
a {
color: #660000;
font-weight: 600;
text-decoration: none;
}
a:hover {
color: #dd0000;
text-decoration: underline;
}
p {
margin-bottom: 1.6rem;
}
section {
padding-top: 60px;
}
/*==============
CONTAINER
================*/
.contenitore {
width: 90%;
margin-left: auto;
margin-right: auto;
}
@media (max-width: 1200px) {
.contenitore {
width: 100%;
padding-right: 15px;
padding-left: 15px;
}
}
.d-flex {
display: flex;
}
.align-items-center {
align-items: center;
}
.justify-content-between {
justify-content: space-between;
}
.rotondo {
border-radius: 50%;;
}
.full-screen {
min-height: 100vh;
}
.text-center {
text-align: center;
}
.text-orologio {
font-family: 'Courier New', Courier, monospace;
font-size: 18vw;
}
@media (max-width:996px) {
.text-tablet-center {
text-align: center;
}
}
/*========================
BARRA DI NAVIGAZIONE
==========================*/
nav {
background-color: black;
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 1000;
}
nav ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-flow: row wrap;
justify-content: center;
}
nav ul > li > a {
display: block;
padding: 0.8rem 2rem;
color: #eeeeee;
text-transform: uppercase;
}
nav ul > li > a:hover {
color: #222222;
background-color: #cccccc;
text-decoration: none;
}
.nav-brand {
height: 40px;
}
/*========================
COPERTINA
==========================*/
.copertina {
background-color: #333;
color: white;
padding-top: 4rem;
padding-bottom: 4rem;
}
.copertina-orologio {
background-color: #333333;
color: white;
}
/*========================
GRIGLIA
==========================*/
.img-fluid {
max-width: 100%;
height: auto;
}
.riga {
display: flex;
flex-flow: row wrap;
margin-left: -15px;
margin-right: -15px;
}
.col-33, .col-66, .col, .col-auto {
padding-left: 15px;
padding-right: 15px;
}
.col-33 {
flex: 1 1 33.33%;
max-width: 33.33%;
}
.col-66 {
flex: 1 1 66.66%;
max-width: 66.66%;
}
.col-auto {
flex: 0 0 auto;
max-width: 100%;
}
.col {
flex: 1 1 1px;
}
@media (max-width:996px) {
.col-66.col-tablet-100, .col-33.col-tablet-100, .col.col-tablet-100 {
flex: 1 1 100%;
min-width: 100%;
}
.riga-tablet-2 .col {
flex: 1 1 50%;
max-width: 50%;
}
}
/*=======================
MARGINI
========================*/
.m-0 {
margin: 0;
}
.m-auto {
margin: auto;
}
.mt-2, .my-2 {
margin-top:2rem;
}
.mb-2, .my-2 {
margin-bottom: 2rem;
}
.ml-2, .mx-2 {
margin-left: 2rem;
}
.mr-2, .mx-2 {
margin-right: 2rem;
}
/*========================
BOTTONI
==========================*/
.bottone {
border:2px solid transparent;
border-radius:0;
display: inline-block;
cursor: pointer;
font-weight: 700;
padding: 0.75rem 1.5rem;
}
.bottone:hover {
text-decoration: none;
}
.bottone-rosso {
background-color: #660000;
border-color: #660000;
color: white;
}
.bottone-rosso:hover {
background-color: white;
color: #660000;
}
.btn-rounded {
border-radius: 2rem;
}
.btn-rounded:focus {
outline: none;
}
/*========================
COLORI
==========================*/
.bg-grigio-chiaro {
background-color: #cccccc;
}
/*========================
GALLERY
==========================*/
.img-cont-1by1 {
padding-bottom: 100%;
}
.img-cont-4by3 {
padding-bottom: 75%;
}
.img-cont {
background-size: cover;
background-position: center;
background-repeat: no-repeat;
transition: all 0.5s;
}
.galleria a {
display: block;
overflow: hidden;
}
.galleria a:hover .img-cont {
opacity: 0.7;
transform: scale(1.1);
}
/*========================
INPUT
==========================*/
.aba-input {
width: 100%;
padding: 0.5rem 0.75rem;
border-radius: 0;
border: #cccccc 1px solid;
}
.aba-input:focus {
outline: #660000 solid 3px;;
}