Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Algoritmo iterativo - Teknopedia
Algoritmo iterativo - Teknopedia
Niente fonti!
Questa voce o sezione sull'argomento programmazione non cita le fonti necessarie o quelle presenti sono insufficienti.

Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti.

Un algoritmo iterativo è una tipologia di algoritmo costituito da una sequenza di azioni che viene ripetuta, finché è necessaria la ripetizione stessa (un ciclo). Tutte le operazioni che richiedono la ripetizione di una stessa azione più volte, ma in numero finito sono dette procedure iterative. Ad ogni iterazione, l'esecutore svolge un compito. Al termine verifica se tale compito vada ripetuto mediante una condizione di ripetizione.

Esempio della catena di montaggio

[modifica | modifica wikitesto]

Per spiegare meglio il concetto di algoritmo iterativo, si consideri il lavoro di un addetto ad una catena di montaggio: egli deve eseguire le stesse azioni ripetutamente finché ci sono pezzi da assemblare. L'algoritmo iterativo della catena di montaggio può essere così descritto:

  1. Preleva i componenti
  2. Assembla i componenti
  3. Passa i componenti al collega
  4. Se ci sono altri componenti da assemblare, torna al punto 1

Utilizzo delle iterazioni nei linguaggi di programmazione

[modifica | modifica wikitesto]

Per rendere agevole l'implementazione di procedure iterative nei linguaggi di programmazione di alto livello, sono disponibili due fondamentali costrutti: for e while. Il primo si presta ai cicli enumerativi (ossia quelli in cui il numero di iterazioni è prestabilito o dipende da un valore numerico calcolato prima dell'iterazione), mentre il secondo permette una libera applicazione della condizione di iterazione.

A tal proposito vanno fatte alcune importanti distinzioni sintattiche tra i linguaggi della famiglia C (con l'aggiunta di Java) e il linguaggio Visual Basic. Affrontiamo separatamente le sintassi dei suddetti costrutti nei due casi

Famiglia C

[modifica | modifica wikitesto]

Per quanto riguarda il costrutto for, la sintassi è la seguente:

for (istruzione iniziale; condizione di iterazione; istruzione di fine ciclo) {
    [istruzioni di iterazione]
}

oppure

for (istruzione iniziale; condizione di iterazione; istruzione di fine ciclo) [istruzione di iterazione];

a seconda del fatto che una iterazione preveda una o più istruzioni.

Il funzionamento è il seguente:

  1. Viene eseguita l'istruzione iniziale
  2. Viene eseguito il blocco iterativo
  3. Viene eseguita l'istruzione di fine ciclo
  4. Se la condizione di iterazione è vera viene ripetuto il ciclo, quindi si torna alla verifica della condizione
  5. Se la condizione di iterazione è falsa si esce dal ciclo

La definizione di cui sopra permette di utilizzare un ciclo for con qualunque tipo di condizione. Tuttavia tale ciclo si presta per algoritmi enumerativi. Ad esempio, il seguente codice C++ scrive a video, elemento per elemento, gli elementi di un array:

for (i = 0; i < count(arr); i++) cout « arr[i]«endl;

Per quanto riguarda il costrutto while, esso specifica soltanto la condizione di iterazione, lasciando le due altre operazioni al codice. Esiste una variante, la do... while. Esaminiamone la sintassi:

while (condizione) {
    [istruzioni]
}
while (condizione) istruzione;
do {
   [istruzioni]
} while (condizione);
do [istruzione] while (condizione);

La differenza tra i costrutti è tanto semplice quanto sostanziale:

  • While verifica la condizione: se è vera esegue il ciclo finché la condizione non diventerà falsa
  • Do... While esegue la prima iterazione, e poi si comporta come il precedente

Do...While è dunque particolarmente indicato quando si ha a che fare con strutture dati dalle quali i dati da verificare devono prima essere estratti tramite una chiamata a funzione.

Ad esempio, posto di avere una classe di tipo Stack MyStack, contenente oggetti di tipo MyObj, vogliamo scrivere a video il contenuto degli oggetti fino a trovare un particolare elemento terminatore, posto che lo stack non sia mai vuoto (es. il costruttore inizializza lo stack col terminatore e la pop non lo elimina comunque). Il seguente codice richiede il ciclo do...while

char TERMINATOR = '\0';
MyStack Stk;
MyObj Obj;
string Objstr
do {
   Obj = Stk.pop();
   Objstr = Obj.content();
   cout « Objstr « endl;
} while (Objstr != TERMINATOR);

Nei linguaggi C è possibile controllare la sequenza dinamica dei cicli iterativi mediante due istruzioni in grado rispettivamente di saltare alla prossima iterazione o interrompere del tutto il ciclo. Tali istruzioni sono continue e break. Ad esempio il seguente codice mostra i primi 5 file eseguibili di una directory, memorizzata come array di stringhe. Nell'esempio non si tiene conto di estensioni multiple (es. .exe.bak)

k = 0;
for (i = 0; 0 < count(dir); i++) {
    if (!strpos(".exe",dir[i])) continue;
    if (k == 5) break;
    cout « dir[i] « endl;
    k++;
}

Visual Basic

[modifica | modifica wikitesto]

Nel linguaggio Visual Basic, con particolare riferimento alla versione .NET, è possibile realizzare cicli iterativi in maniera molto semplice grazie ai costrutti For... Next e Do... Loop.

Il ciclo For di VB è strettamente pensato per cicli enumerativi. Se in C i parametri del for sono liberi, in VB è richiesto che il ciclo sia numerico. Ecco la sintassi specifica (<> indicano opzionalità):

For [contatore] = [valore iniziale] To [valore finale] <Step [salto]>
    [istruzioni]
Next

La variabile contatore deve essere di tipo numerico, i valori iniziale e finale possono essere anche funzioni che restituiscono un intero. Lo step è un valore opzionale che indica l'entità dell'incremento/decremento, che di default è 1 (o -1). L'esecutore riconosce dinamicamente, a runtime, se il ciclo deve essere incrementale o decrementale confrontando i valori iniziale e finale.

Analogamente ai linguaggi C è possibile utilizzare un ciclo Do... Loop in quattro diverse versioni

While [condizione] Do
    [istruzioni]
Loop

Do
    [istruzioni]
While [condizione]

Le altre due si ottengono sostituendo a While il termine Until

  • La prima sintassi verifica che la condizione sia vera prima di procedere
  • La seconda esegue la prima iterazione e poi verifica che la condizione sia vera
  • La terza e la quarta, analogamente con le precedenti, proseguono solo se la condizione è falsa

Iterazioni nei linguaggi assemblativi

[modifica | modifica wikitesto]

Nei linguaggi assembly tradizionali non sono disponibili costrutti iterativi, in quanto le primitive disponibili a livello macchina non li prevedono; le iterazioni sono infatti rappresentate attraverso istruzioni esplicite di salto a un'istruzione precedente. Per realizzare un ciclo for con istruzioni assemblative si parte dall'esempio della catena di montaggio, e si realizza il codice strutturandolo nel seguente modo:

  1. Si etichettano il punto di inizio ciclo (START) e la prima istruzione dopo il ciclo (END)
  2. Eventuali istruzioni pre-iterazione vanno prima della label START
  3. Istruzioni break corrispondono ad un salto incondizionato (JMP) a END
  4. Istruzioni continue corrispondono ad un salto incondizionato (JMP) a START
  5. Si implementa la condizione di iterazione su START, implementando un algoritmo di confronto tale che se la condizione è falsa si salta subito a END
  6. Si implementa tutto l'algoritmo dell'iterazione
  7. Si fa un salto incondizionato a START

Voci correlate

[modifica | modifica wikitesto]
  • Algoritmo ricorsivo
  Portale Informatica: accedi alle voci di Teknopedia che trattano di Informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Algoritmo_iterativo&oldid=138980891"

  • Indonesia
  • English
  • Français
  • 日本語
  • Deutsch
  • Italiano
  • Español
  • Русский
  • فارسی
  • Polski
  • 中文
  • Nederlands
  • Português
  • العربية
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022