Domanda Risolto Potete spiegarmi i cicli? Cosa fanno di preciso? (JAVA).

Ignyyy

Utente Bronze
24 Maggio 2019
24
17
1
27
Salve, sono arrivato cicli in Java. Ho alcune difficoltà, sarà che ancora non ho preso la mano con essi. Comunque, mi servirebbe una spiegazione dei cicli, di ciò che fanno, come e quando usarli, perchè, e sopratutto come analizzano la condizione che noi scriviamo? E se potete e volete, scrivete un semplice algoritmo in Java con l'uso di un ciclo a scelta vostra e spiegate cosa fanno i cicli in quel caso e come conducono alla soluzione. Grazie a tutti!
 
Parto con una piccola introduzione sul come è costituito un costrutto iterativo (ciclo) in modo da usare un linguaggi comprensibile e non ambiguo.
Un costrutto iterativo è essenzialmente costituito da due componenti:
1. condizione del ciclo, detta anche condizione di guardia, è una espressione booleana che viene valutata ad ogni iterazione e determina il continuo o meno dell'esecuzione del corpo del ciclo;
2. corpo del ciclo, è un gruppo di istruzioni che vengono eseguiti ogni qual volta la condizione di guardia risulta vera.

Esistono due tipologie di cicli, distinti da quando la condizione di guardia viene controllata, e sono i cicli pre-condizionali e post-condizionali.
I cicli pre-condizionali sono identificati con l'istruzione Java while e sono così chiamati perché viene valutata prima la condizione e solo dopo, se questa risulta vera, viene eseguito il corpo. Differentemente i cicli post-condizionali eseguono almeno una volta il corpo e solo dopo valutano la condizione prima di proseguire. Questi sono identificati con l'istruzione do...while.

Un aspetto assai importante di cui tener conto quando si scrivono le condizioni di guardia è che queste possano diventare false, quindi permettere che ci sia un momento in cui si esca dal ciclo e l'esecuzione del programma possa proseguire e terminare più in la, non andando quindi in un ciclo infinito.
Facciamo alcuni esempi.

Supponiamo di voler scrivere un programma che calcoli l'n-esima potenza di un certo valore v e che per calcolarla usiamo la sola operazione prodotto.
Nota: Presumo che la gestione dell'input non sia un argomento che hai avuto modo di affrontare, quindi immaginiamo che tale valore sia scelto dall'utente in qualche modo, non ci interessa quale. Nella partica tale valore è immediatamente inizializzato nel nostro codice sorgente.

Java:
public static void main(String []args){
        int v = 5;  // un presunto valore inserito dall'utente
        int power = 3; // effettuerà l'elevamento al cubo
        int result = 1;
     while(power > 0){
        result = result * v;
        power--;
    }
        System.out.println("out: " + result);
     }

In questo codice puoi osservare come è fondamentale che vi sia l'istruzione di decremento power-- poiché altrimenti la condizione non sarebbe mai falsa e l'istruzione di stampa non verrebbe mai eseguita. Fa un tentativo tu stesso.

I cicli vengono impiegati ogni qual volta vi un comportamento di un programma che ti interessa iterare, alcuni esempi possono essere:
1. far ripetere l'input da tastiera dall'utente
2. eseguire stampe successive (immagina un count down partendo da un certo valore n)
3. scansionare tutte le posizioni di una struttura dati (malgrado suppongo tu non le abbia viste è un comportamento molto frequente)
4. validare un input (controllare se un certo valore inserito è corretto in base a delle specifiche interne, eg. il valore deve essere necessariamente positivo)

Se ti dovessero servire ulteriori chiarimenti o esempi non esitare a chiedere.
 
  • Mi piace
Reazioni: Kolo93 e ~Random
Parto con una piccola introduzione sul come è costituito un costrutto iterativo (ciclo) in modo da usare un linguaggi comprensibile e non ambiguo.
Un costrutto iterativo è essenzialmente costituito da due componenti:
1. condizione del ciclo, detta anche condizione di guardia, è una espressione booleana che viene valutata ad ogni iterazione e determina il continuo o meno dell'esecuzione del corpo del ciclo;
2. corpo del ciclo, è un gruppo di istruzioni che vengono eseguiti ogni qual volta la condizione di guardia risulta vera.

Esistono due tipologie di cicli, distinti da quando la condizione di guardia viene controllata, e sono i cicli pre-condizionali e post-condizionali.
I cicli pre-condizionali sono identificati con l'istruzione Java while e sono così chiamati perché viene valutata prima la condizione e solo dopo, se questa risulta vera, viene eseguito il corpo. Differentemente i cicli post-condizionali eseguono almeno una volta il corpo e solo dopo valutano la condizione prima di proseguire. Questi sono identificati con l'istruzione do...while.

Un aspetto assai importante di cui tener conto quando si scrivono le condizioni di guardia è che queste possano diventare false, quindi permettere che ci sia un momento in cui si esca dal ciclo e l'esecuzione del programma possa proseguire e terminare più in la, non andando quindi in un ciclo infinito.
Facciamo alcuni esempi.

Supponiamo di voler scrivere un programma che calcoli l'n-esima potenza di un certo valore v e che per calcolarla usiamo la sola operazione prodotto.
Nota: Presumo che la gestione dell'input non sia un argomento che hai avuto modo di affrontare, quindi immaginiamo che tale valore sia scelto dall'utente in qualche modo, non ci interessa quale. Nella partica tale valore è immediatamente inizializzato nel nostro codice sorgente.

Java:
public static void main(String []args){
        int v = 5;  // un presunto valore inserito dall'utente
        int power = 3; // effettuerà l'elevamento al cubo
        int result = 1;
     while(power > 0){
        result = result * v;
        power--;
    }
        System.out.println("out: " + result);
     }

In questo codice puoi osservare come è fondamentale che vi sia l'istruzione di decremento power-- poiché altrimenti la condizione non sarebbe mai falsa e l'istruzione di stampa non verrebbe mai eseguita. Fa un tentativo tu stesso.

I cicli vengono impiegati ogni qual volta vi un comportamento di un programma che ti interessa iterare, alcuni esempi possono essere:
1. far ripetere l'input da tastiera dall'utente
2. eseguire stampe successive (immagina un count down partendo da un certo valore n)
3. scansionare tutte le posizioni di una struttura dati (malgrado suppongo tu non le abbia viste è un comportamento molto frequente)
4. validare un input (controllare se un certo valore inserito è corretto in base a delle specifiche interne, eg. il valore deve essere necessariamente positivo)

Se ti dovessero servire ulteriori chiarimenti o esempi non esitare a chiedere.
Grazie mille!
Comunque, la classe Scanner l'ho affrontata, quindi posso agiungerli io i valori. Ti ringrazio!
Ora devo trovare in giro sul Web una lista di esercizi in Java con l'uso dei cicli. While, Do while e for