LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam

Quando si risolve la stragrande maggioranza delle attività (comprese quelle molto semplici) nel programma, è quasi impossibile specificare esplicitamente tutte le operazioni che devono essere eseguite. Bisogna infatti calcolare la somma dei primi n termini della serie armonica:

Y \u003d 1+ 1/2 + 1/3 +… + 1 / n

Ovviamente, utilizzando solo i tipi di operatori sopra considerati, è possibile comporre un programma solo per un valore fisso di n. Ad esempio, per n \u003d 5, i calcoli richiesti possono essere specificati utilizzando un operatore di assegnazione del modulo:

Y: \u003d 1 + 1/2 + 1/3 + 1/4 + 1/5

Se il valore di n non è fisso, ma è il dato originale inserito durante l'esecuzione del programma (e anche una costante descritta nel programma), non è possibile scrivere un operatore di assegnazione simile. Per la registrazione della forma Y: \u003d 1 + 1/2 + 1/3 +… + 1 / n nei linguaggi di programmazione non è consentito.

Per eliminare le difficoltà che sorgono, serve operatori di loop... Consentono di ripetere l'esecuzione di singole parti del programma. Ce ne sono quattro editor di ciclipresente in una forma o nell'altra in tutti i linguaggi di programmazione: semplice operatore di ciclo aritmetico (ciclo con parametro con passo 1), operatore di ciclo aritmetico complesso (ciclo con un parametro di passo arbitrario), operatore di ciclo iterativo con precondizione, operatore di ciclo iterativo con postcondizione.

Operatore di ciclo Pascal aritmetico semplice (ciclo con parametro)

Torniamo al problema di cui sopra di calcolare la somma dei primi n termini di una serie armonica, le cui regole non possono essere impostate sotto forma di espressione aritmetica se il valore di n non è fissato in anticipo.

Infatti il \u200b\u200bcalcolo di questa somma può essere fatto secondo un algoritmo molto semplice e compatto: prima poniamo y \u003d 0 (utilizzando l'operatore di assegnazione y: \u003d 0), quindi eseguiamo l'operatore di assegnazione y: \u003d y + 1 / i per valori consecutivi i \u003d 1 , 2,…, n. Ad ogni successiva esecuzione di questo operatore, il termine successivo verrà aggiunto al valore corrente di y. Come puoi vedere, in questo caso il processo di calcolo sarà ciclico: l'operatore y: \u003d y + 1 / i deve essere eseguito più volte, ad es. ciclicamente, per diversi valori di i.

Questo esempio di un processo di calcolo ciclico è abbastanza tipico; le sue caratteristiche sono quelle

  • il numero di ripetizioni del ciclo è noto all'inizio della sua esecuzione (in questo caso è uguale al valore n, che si presume sia impostato da quel momento);
  • il ciclo è controllato da una variabile tipo ordinale, che in questo processo ciclico assume valori sequenziali da una data iniziale a un dato valore finale (nel nostro caso, è una variabile intera i che assume valori sequenziali da 1 a n).

Per un compito compatto di questo tipo di processi e servizi computazionali operatore di loop con parametro... La forma più comunemente usata di questo operatore è in Pascal:

Per V: \u003d da E1 a E2 fai S,

dove per (per), per (aumentando a) e fare (fare, fare) - parole ufficiali, V - una variabile di tipo ordinale, chiamata parametro loop, E1 e E2 - espressioni dello stesso tipo del parametro loop, S - un operatore che viene eseguito più volte in un ciclo, chiamato corpo del ciclo.

Nota che in Pascal dopo fare deve esserci un operatore, se è necessario eseguire più azioni, queste devono essere combinate in un operatore composto racchiudendo le parentesi di operatore.

Questo operatore di ciclo Pascal prevede l'assegnazione del parametro di ciclo V di valori sequenziali dal valore iniziale uguale al valore dell'espressione E1 al valore finale uguale al valore dell'espressione E2, i.e. ad ogni ripetizione viene eseguito l'operatore di assegnazione V: \u003d succ (V), e l'esecuzione dell'operatore S a ciascun valore del parametro del ciclo V. In questo caso, i valori delle espressioni E1 ed E2 vengono calcolati una volta, quando si immette l'operatore del ciclo, e il valore del parametro del ciclo V non dovrebbe cambiare come risultato dell'esecuzione dell'operatore S. Se il valore finale specificato è inferiore al valore iniziale (che è consentito), l'istruzione S non viene mai eseguita.

In Pascal, si presume che al completamento normale dell'istruzione loop, il valore del parametro loop sia indefinito.

Utilizzando operatore di loop con parametro l'algoritmo per il calcolo della somma dei primi n termini della serie armonica può essere specificato come segue:

Un esempio di un codice di programma per sommare i primi n termini di una serie armonica

Readln (n);
Y: \u003d 0;
Per i: \u003d 1 an do y: \u003d y + 1 / i;

In alcuni casi, è conveniente che il parametro del ciclo Pascal assuma valori sequenziali, ma non crescenti, ma decrescenti. Per questi casi, Pascal fornisce un operatore di ciclo con un parametro della seguente forma:

Per V: \u003d E1 fino a E2 do S,

dove giù verso (decrescente a) è una parola di servizio e tutte le altre parole ed espressioni hanno lo stesso significato. La modifica del parametro del ciclo da un valore più grande a un valore più piccolo si verifica quando viene eseguita l'assegnazione V: \u003d pred (V). notare che valore iniziale può essere inferiore al valore finale. In questo caso, l'istruzione S non verrà mai eseguita. Anche il valore del parametro loop al completamento dell'esecuzione di tale loop è considerato indefinito.

Va anche ricordato che per entrambe le opzioni di registrazione loop con parametro true: se i valori iniziale e finale sono uguali, il corpo del ciclo (operatore S) verrà eseguito una volta.

Nota anche quello parametro loop non può essere utilizzato nel corpo del ciclo, quindi il suo scopo principale è controllare il numero di volte in cui il ciclo viene ripetuto. Ad esempio, il valore y \u003d x n, dove n\u003e \u003d 0 è un numero intero, può essere calcolato utilizzando il seguente algoritmo: preimpostare y \u003d 1, quindi moltiplicare questo valore n volte per x:

Codice di esempio per un programma a ciclo Pascal

Readln (n);
Readln (x);
Y: \u003d 1;
Per i: \u003d 1 an do y: \u003d y * x;

Come puoi vedere, qui il parametro del ciclo i serve solo per il corpo del ciclo (operatore y: \u003d y * x) da eseguire il numero di volte richiesto.

Operatore di ciclo Pascal aritmetico con passo arbitrario

Una complicazione naturale del semplice ciclo aritmetico di Pascal è un ciclo in cui il parametro del ciclo cambia non di 1, ma di un valore arbitrario - passo di incremento... In questo caso, durante l'esecuzione del ciclo, il passo cambia secondo una data legge. Ci sono operatori standard per implementare un tale ciclo in Forth; in altre lingue devono essere organizzati dal ciclo aritmetico più semplice.

Operatori di iterazione del ciclo Pascal

I loop iterativi differiscono dai loop con un parametro in quanto il numero di ripetizioni non è noto in anticipo.

Possiamo andare a raccogliere i funghi e tornare a casa quando il cesto è pieno. Tutti i raccoglitori di funghi sono divisi in 2 categorie:

  • Guardano per vedere se c'è spazio nel cestino e solo allora raccolgono i funghi se possono essere messi nel cestino. (È vero, nella vita questi raccoglitori di funghi non dovevano incontrarsi)
  • Per prima cosa raccolgono i funghi e solo allora pensano a come metterli nel cestino.

Questo offre due opzioni per l'implementazione di cicli iterativi:
con una precondizione e con una postcondizione.

In un ciclo con una precondizione, la condizione viene prima verificata, quindi viene eseguito un passaggio. Il raccoglitore di funghi verrà fornito con un cesto pieno o quasi pieno. In un ciclo con una postcondizione, prima un passaggio e poi un controllo. Come un normale raccoglitore di funghi, questo porterà un cesto pieno o leggermente traboccante.

Quale algoritmo dovresti scegliere? Dipende dall'attività specifica.

Se, dopo aver fatto un passo senza controllare, puoi cadere in un buco, allora è meglio controllare all'inizio (come un cieco con un bastone). Bene, se un passaggio senza controllo non ti spaventa, puoi rimandarlo fino al completamento del passaggio.

Dobbiamo anche analizzare l'evento che ci aspettiamo. Se può accadere prima del primo passaggio, è necessario un ciclo con una precondizione. E se l'evento non può accadere prima del primo passaggio, è necessario un ciclo con una postcondizione.

Operatore di ciclo Pascal con postcondizione

Considera ora un problema di matematica. Supponiamo di dover calcolare la somma dei primi termini di una serie armonica che soddisfa la condizione 1 / i\u003e \u003d e, dove 0< e<1, а i=1,2,3…...Эту задачу можно решить по следующему алгоритму: положить предварительно y=0 и i=0, а затем в цикле увеличивать i на 1, к значению y добавлять очередное слагаемое 1/ i до тех пор, пока текущее значение 1/ i впервые окажется больше заданного значения 0< e<1.

Ovviamente, il numero di ripetizioni di questo ciclo non è noto in anticipo. In casi di questo tipo, possiamo solo formulare una condizione in base alla quale deve essere completato il processo di aggiunta del termine successivo alla somma.

Per specificare tali processi di calcolo, viene utilizzato l'operatore del ciclo Pascal con una postcondizione. Questo operatore ha la forma:

Ripeti S1; S2; ...; Si fino a B,

dove ripetere (ripetere) e fino a (prima) - parole di servizio, attraverso Si qualsiasi operatore Pascal è indicato, e NELespressione booleana.

Quando viene eseguita questa istruzione del ciclo, la sequenza di istruzioni tra repeat e until verrà eseguita una o più volte. Questo processo termina quando, dopo la successiva esecuzione della sequenza di istruzioni specificata, l'espressione logica B diventa (per la prima volta) vera. Pertanto, utilizzando l'espressione logica B, viene impostata la condizione per il completamento dell'esecuzione dell'operatore di ciclo. Poiché in questo caso la condizione viene verificata dopo l'esecuzione della sequenza di istruzioni (il corpo del ciclo), questo operatore di ciclo è chiamato operatore di ciclo con postcondizione.

Usando questo tipo di operatore di ciclo Pascal, il problema di sommare i primi termini di una serie armonica che soddisfa una data condizione può essere implementato come segue:

Readln (e);
i: \u003d 0;
y: \u003d 0;
Ripetere
i: \u003d i + 1;
y: \u003d y + 1 / i;
Fino al 1 / i

Si noti che l'operatore di ciclo con una postcondizione è più generale dell'operatore di ciclo con un parametro: qualsiasi processo ciclico specificato utilizzando un ciclo con un parametro può essere rappresentato come un ciclo con una postcondizione. Il contrario non è vero. Ad esempio, il problema di sommare i primi n termini di una serie armonica, considerato in precedenza, con un operatore di ciclo con una postcondizione sarebbe simile a questo:

Codice di esempio per un operatore di loop Pascal con postcondition

Readln (n);
i: \u003d 0;
y: \u003d 0;
Ripetere
i: \u003d i + 1;
y: \u003d y + 1 / i;
Finché i\u003e n;

Operatore di ciclo Pascal con precondizione

Nel caso di un operatore di ciclo Pascal con una postcondizione, la sequenza di operatori in esso inclusa verrà sicuramente eseguita almeno una volta. Nel frattempo, tali processi ciclici si incontrano abbastanza spesso quando anche il numero di ripetizioni del ciclo è sconosciuto in anticipo, ma per alcuni valori dei dati iniziali, le azioni previste nel ciclo non dovrebbero essere eseguite affatto e anche una singola esecuzione di queste azioni può portare a risultati errati o indefiniti.

Sia dato, ad esempio, un numero reale M. Occorre trovare il più piccolo numero intero non negativo k per cui 3 k\u003e M. Questo problema può essere risolto secondo il seguente algoritmo: preliminarmente poniamo y \u003d 1 e k \u003d 0; Quindi, in un ciclo, moltiplica y per 3 e aumenta k per 1 finché la corrente y è per la prima volta maggiore di M. A prima vista, puoi usare l'operatore di ciclo con una postcondizione qui:

Codice di esempio per un operatore di loop Pascal con postcondition

Y: \u003d 1; k: \u003d 0;
Ripetere
y: \u003d y * 3;
k: \u003d k + 1;
Finché y\u003e M;

Tuttavia, è facile verificare che per M<1 будет получен неправильный результат k=1, тогда как должно быть получено k=0: в этом случае предварительно сформированное значение k=0 является окончательным результатом и действия, предусмотренные в цикле, выполняться не должны.

Per impostare questo tipo di processi di calcolo, quando il numero di ripetizioni del ciclo non è noto in anticipo e le azioni fornite nel ciclo potrebbero non essere eseguite affatto, viene utilizzato un operatore di ciclo con una precondizione. Questo operatore di ciclo ha la seguente forma in Pascal:

dove mentre (fino a), fare (fare, fare) - parole ufficiali, NEL - espressione logica, S - operatore. Qui l'operatore S viene eseguito zero o più volte, ma prima di ogni sua successiva esecuzione, viene valutato il valore dell'espressione B e l'operatore S viene eseguito solo se il valore dell'espressione B è vero. L'istruzione loop termina quando l'espressione B restituisce per la prima volta false. Se l'espressione B assume questo valore la prima volta che viene valutata, l'operatore S non verrà eseguito nemmeno una volta.

Nel problema che stiamo considerando, il valore corretto di k per qualsiasi valore di M può essere ottenuto come segue:

Codice di esempio per un operatore di ciclo Pascal con una precondizione

Y: \u003d 1; k: \u003d 0;
Mentre inizi
y: \u003d y * 3;
k: \u003d k + 1;
Fine;

L'operatore del ciclo Pascal con una precondizione può essere considerato il più universale: utilizzando tali operatori, è anche possibile definire processi ciclici definiti dagli operatori del ciclo con un parametro e una postcondizione.

Nota differenze e caratteristiche di un buon stile di lavoro con gli operatori ciclici considerati.

Loop con la precondizione While (mentre la condizione è vera) Loop con ripetizione postcondizione (fino a quando la condizione non è vera)
  • Prima dell'inizio del loop, è necessario effettuare le impostazioni iniziali delle variabili che controllano la condizione del loop per entrare correttamente nel loop.
  • Il corpo del ciclo deve contenere istruzioni che modificano le condizioni della variabile in modo che il ciclo termini dopo un certo numero di iterazioni.
  • Il ciclo viene eseguito finché la condizione è vera (purché True)
  • Il ciclo viene eseguito mentre la condizione è falsa (mentre è falsa)
  • Il ciclo termina quando la condizione diventa falsa (prima di False)
  • Il ciclo termina quando la condizione diventa vera (a True)
  • Il ciclo potrebbe non essere eseguito nemmeno una volta se il valore iniziale della condizione quando si entra nel ciclo è False
  • Il ciclo deve essere eseguito almeno una volta
  • Se è necessario eseguire più di un operatore nel corpo del ciclo, è necessario utilizzare l'operatore composto
  • Indipendentemente dal numero di operatori nel corpo del ciclo, non è richiesto l'uso di un operatore composto
Loop con contatore (con parametro) For
  • L'impostazione iniziale della variabile del contatore di loop prima dell'intestazione non è richiesta
  • Non è consentito modificare i valori delle variabili nell'intestazione nel corpo del ciclo
  • Il numero di iterazioni del ciclo è costante e determinato con precisione dai valori dei limiti inferiore e superiore e dall'incremento
  • Il normale corso del ciclo può essere violato da un'istruzione goto o da procedure Break and Continue
  • Il ciclo non può essere eseguito nemmeno una volta se il passo del ciclo cambia il valore del contatore dal limite inferiore nella direzione opposta al limite superiore

Un'istruzione eseguita in un ciclo può essere essa stessa un ciclo. Questo vale per tutti i tipi di cicli. Di conseguenza, otteniamo loop annidati... È più conveniente considerare come funzionano i cicli annidati usando l'esempio dei cicli annidati con un parametro. Supponiamo di dover descrivere il funzionamento di un orologio elettronico, partendo dal tempo 0 ore, 0 minuti, 0 secondi. Il valore dei minuti diventerà uguale a 1 solo dopo che i secondi hanno "passato" tutti i valori consecutivi da 0 a 59. Le ore cambieranno il suo valore di 1 solo dopo che i minuti avranno "passato" tutti i valori consecutivi da 0 a 59. Quindi, l'output di tutti i valori di tempo dall'inizio della giornata alla fine della giornata possono essere rappresentati dal seguente frammento di programma:

Per h: \u003d da 0 a 23 do
Per m: \u003d da 0 a 59 do
Per s: \u003d da 0 a 59 do
Writeln (h, ":", m, ":", s);

Per comodità di implementare strutture cicliche in Pascal, le ultime versioni del linguaggio hanno introdotto gli operatori rompere e Continuaapplicato all'interno di passanti. Espandono l'uso dei loop e migliorano la struttura del programma.

Durante l'esecuzione del corpo del ciclo fino al completamento del ciclo, possono verificarsi condizioni aggiuntive che richiedono la fine del ciclo. In questo caso, il ciclo può essere terminato dall'istruzione break.

Durante l'esecuzione del ciclo, può verificarsi una condizione in cui è necessario saltare tutte o alcune delle azioni previste nel ciclo senza interrompere del tutto il ciclo. Per fare ciò, utilizzare l'operatore continue, che trasferisce il controllo al punto del programma in cui viene verificata la condizione per continuare o terminare il ciclo.

Ciao cari lettori! Veniamo allo studio dei cicli. Loop a Pascal. Cos'è? Come usarlo? A cosa servono? Queste sono le domande a cui risponderò oggi.
Se hai letto, sai che esistono tre tipi di algoritmi: lineare, ramificato e ciclico. Sappiamo già come implementare algoritmi in Pascal. Cominciamo a studiare l'ultimo tipo di algoritmi.
In Pascal, come nella maggior parte dei linguaggi di programmazione, ci sono tre tipi di costrutti di loop.

Ogni ciclo è costituito da un corpo e un'intestazione. Il corpo del ciclo è un insieme di operatori ripetuti e la condizione è un'espressione logica, a seconda del risultato di cui il ciclo viene ripetuto.

Prendiamo un problema che risolveremo utilizzando diversi tipi di loop.

Obiettivo 1. Stampa tutti i numeri da 1 al numero inserito dalla tastiera.

While o un ciclo con una condizione preliminare

Come probabilmente hai già capito dal nome, mentre È un ciclo in cui la condizione è di fronte al corpo. Inoltre, il corpo del ciclo viene eseguito se e solo se la condizione vero; non appena la condizione diventa falso

Mentre ha il formato:

mentre < условие> fare<оператор 1>; (Ciao ... fai ...)

Questo ciclo è adatto per un solo operatore, ma se desideri utilizzare più operatori nel tuo codice, dovresti racchiuderli tra parentesi operatore - inizioe fine;.

La soluzione del problema.

Programma example_while; var i, N: intero; (dichiarazione di variabili) inizio i: \u003d 1; (Imposta i su 1) readln (N); (Leggi l'ultimo numero) mentre i<= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.

Ripeti o loop con postcondition

Ripetere - completo di fronte mentre. Ripetere È un ciclo in cui la condizione viene dopo il corpo. Inoltre, è soddisfatto se e solo se il risultato della condizione falso; non appena l'espressione booleana diventa vero, il ciclo si interrompe.

Repeat ha il formato:

ripetere ( ripetere … )
<оператор 1>;
< оператор 2>;

fino a (prima…) <условие>

Inizio e fine non richiesto.

La soluzione del problema.

Programma example_repeat; var i, N: integer; (dichiarazione di variabili) begin i: \u003d 1; (Imposta i su 1) readln (N); (Leggiamo l'ultimo numero) repeat (non sono richiesti inizio e fine dopo la ripetizione) write (i, ""); (Otteniamo i) Inc (i); (aumentare i di uno.) finché i \u003d N + 1; (Ad esempio, i \u003d 11 e N \u003d 10. Il ciclo terminerà, quindi la condizione diventa vera). Fine.

For o un ciclo con un parametro

Per È un ciclo in cui il corpo viene eseguito un numero di volte specificato.

Esistono due forme di scrittura di questo ciclo:

La prima forma

per<счетчик1> := <значение1> per<конечное_значение> fare<оператор1>;

<счетчик1> aumenterà di 1.

<значение1> È il valore iniziale del contatore. Può essere una variabile o un numero.
<конечное_значение> : una volta che il valore<счетчик1> diventerà di più<конечное_значение>

Se è necessario scrivere diversi operatori nel corpo del ciclo, utilizzare inizio e fine.

E<счетчик1>e<конечное_значение>e<значение1> - variabili totale genere.

La variabile i viene spesso utilizzata come contatore.

Seconda forma

per<счетчик2> := <значение2> giù verso<конечное_значение> fare<оператор1>;

Dopo ogni iterazione, il valore<счетчик2> diminuirà di 1.

<значение2> È il valore iniziale del contatore.
<конечное_значение> : una volta che il valore<счетчик2> diventerà meno<конечное_значение>, il ciclo smetterà di funzionare.

Due note importanti:

  1. Il ciclo si ripete fintanto che il valore del valore del contatore si trova nel segmento [valore; end_value].
  2. Modificare il valore del contatore all'interno del corpo non posso! Questo è ciò che il compilatore restituisce:

La soluzione del problema:

Programma example_for; var i, N: intero; iniziare a leggere (N); (supponendo di aver inserito 10) per i: \u003d 1 a N scrivi (i, ""); (numero di iterazioni - 10-1 + 1 \u003d 10) end.

D'accordo, questo codice è più semplice e conciso di tutti i precedenti. E il ciclo per - non proprio un ciclo ordinario, non vi è alcuna condizione logica in esso. Pertanto, un ciclo con un parametro è chiamato zucchero sintattico nella programmazione. Lo zucchero sintattico è un'aggiunta alla sintassi di un linguaggio di programmazione che non aggiunge nuove funzionalità, ma rende l'uso del linguaggio più umano.

Risolviamo un paio di problemi.

Per1. Sono forniti gli interi K e N (N\u003e 0). Stampa N volte il numero K.

Organizziamo un semplice ciclo da 1 al numero richiesto.

Programma per1; var K, N, i: intero; iniziare a leggere (K, N); per i: \u003d 1 a N scrivi (K, ""); (Scriviamo K separato da uno spazio) end.

Per2. < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.

Dal< B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

Programma per 2; var A, B, i, count: integer; iniziare a leggere (A, B); per i: \u003d A to B scrivi (i, ""); (scrivi i numeri dal più piccolo al più grande) count: \u003d B - A + 1; (conta il numero di numeri) writeln; write ("Numero di numeri -", count); fine.

For9. Ti vengono dati due numeri interi A e B (A< B). Найти сумму квадратов всех целых чисел от A до B включительно.

Organizziamo lo stesso ciclo del problema precedente, ma allo stesso tempo sommiamo i quadrati di tutti i numeri. Per calcolare il quadrato, usa la funzione.

Programma per9; var A, B, i, S: intero; iniziare a leggere (A, B); S: \u003d 0; (PascalABC lo fa automaticamente, ma se hai un compilatore diverso, ti consigliamo di resettare le variabili manualmente) per i: \u003d A to B do S: \u003d S + Sqr (i); (somma tutti i quadrati) writeln; scrivi ("Somma di quadrati -", S); fine.

Per 13 °. Viene fornito un numero intero N (\u003e 0). Trova il valore dell'espressione 1.1 - 1.2 + 1.3 -… (N termini, segni si alternano). Operatore condizionale non usare.

Per cambiare il segno, ad ogni iterazione del ciclo cambiamo il valore della variabile speciale al contrario.

Programma per 13; var N, A, i: intero; S: reale; iniziare a scrivere ("N \u003d"); readln (N); S: \u003d 1,1; A: \u003d 1; (Primo positivo) per i: \u003d 2 a N do (abbiamo già eseguito la prima iterazione del ciclo, quindi iniziamo a contare da 2) inizio A: \u003d -A; (Ora negativo) S: \u003d S + A * (1 + i / 10); (Aggiungi su) fine; Writeln (S: 5: 1); (Diamo una familiarità per la parte frazionaria) fine.

Mentre 1 °. Dati numeri positivi A e B (A\u003e B). Il segmento di lunghezza A contiene il numero massimo possibile di segmenti di lunghezza B (senza sovrapposizioni). Senza utilizzare le operazioni di moltiplicazione e divisione, trova la lunghezza della parte non occupata del segmento A.

Sottrai B da A ogni volta fino a quando A - B\u003e \u003d 0.

Program while1; var A, B: intero; inizio readln (A, B); mentre (A - B)\u003e \u003d 0 fai A: \u003d A - B; (Finché la differenza è positiva, sottraiamo. È necessario fornire una variante con molteplicità A e B, quindi\u003e \u003d) scrivi (A); fine.

Mentre4 °. Viene fornito un numero intero N (\u003e 0). Se è una potenza di 3, restituisce True, se non lo è restituisce False.

Procediamo come segue: mentre N è divisibile per tre, dividi N interamente. Allora, se N \u003d 1, il numero è una potenza di tre; se N<> 1, quindi il numero non è una potenza di tre. Per risolvere questo problema, è necessario sapere cos'è e come funziona.

Program while4; var N: intero; iniziare readln (N); mentre N mod 3 \u003d 0 do N: \u003d N div 3; (Finché il resto della divisione per tre è uguale a zero, dividere N interamente) writeln (N \u003d 1); (espressione booleana) end.

Per oggi è tutto! Non dimenticare di visitare il nostro sito più spesso e di fare clic sui pulsanti posti davanti ai commenti.

Molto spesso diventa necessario eseguire più volte la stessa istruzione (o gruppo di istruzioni). Per questo nella linguaPascal previsto operatori di ciclo.

1. Un operatore di loop con una precondizione.

Modulo di registrazione: mentre<условие> fare<оператор>;

Qui mentre(fino a),fare (fare)- parole riservate.

L'operatore può essere qualsiasi operatore semplice o composto. Qui<оператор> viene eseguito solo se e fintanto che è vero<условие>, che viene controllato ogni volta che l'istruzione viene eseguita. Se fin dall'inizio la condizione contafalso , l'istruzione loop non verrà mai eseguita.

Lo schema a blocchi dell'algoritmo di funzionamento di un tale operatore è mostrato in Fig. 1.

Figura: 1. Operatore di loop con precondizione

Esempio

io modo

. Calcolo del fattoriale di un numero p(cioè prodotti 1 2 ...p):

Programma Fact_1;

Cost n \u003d 5;

Var i, fatto: intero;

Inizio

i: \u003d 1; Fatto: \u003d 1;

mentre io<=n do {заголовок цикла}

inizio (inizio ciclo)

fatto: \u003d fatto * i;

io: \u003d io + 1

fine; (fine ciclo)

WriteLn ("fattoriale", n, "\u003d", Fatto: 10)

Fine.

2. Operatore di un ciclo con una postcondizione. Lo schema a blocchi dell'algoritmo di lavoro dell'Operatore è mostrato in Fig.2.

Modulo di registrazione:

Ripetere

<оператор1>; <оператор2>;

Fino a<условие>;

Ripeti qui (ripetere fino ad allora) Fino a (fino a quando la condizione è soddisfatta) - parole riservate.

Una sequenza di istruzioni può essere una o più istruzioni. A differenza del precedente, in questo ciclo la condizione viene sempre verificata dopo l'esecuzione dell'istruzione (o di una sequenza di istruzioni), se è falsa l'istruzione viene eseguita nuovamente, altrimenti il \u200b\u200bciclo pre sta crescendo. Con questa strutturaoperatore almeno una volta obbligosarà soddisfatto.

Esempio:

II modo

. Calcolo del fattoriale di un numero p(cioè prodotti 1 2 ...p):

Programma Fact_2;

Cost n \u003d 5;

Var i, fatto: intero;

Inizio

i: \u003d 1; Fatto: \u003d 1;

Ripetere

inizio (inizio ciclo)

fatto: \u003d fatto * i;

io: \u003d io + 1

fine; (fine del corpo del ciclo)

Finché i\u003e n; (condizione)

WriteLn ('Fattoriale ", n," \u003d ", Fatto: 10)

Fine.

Qui io È un contatore di ripetizioni che deve essere modificato manualmente in un ciclo.

3. Un operatore di ciclo con un parametro.

Questo ciclo consente di ripetere un'azione un numero noto di volte.

Un contatore è una variabile che conta il numero di volte che il ciclo si ripete. In tale ciclo, il contatore aumenta automaticamente esattamente di 1.

Modulo di registrazione:

PERcontatore \u003d valore_inizioPERend_valueFARE

INIZIO

. . . .

FINE;

Se è necessario che il parametro diminuisca di 1, utilizzarechiama la parola Giù verso(il valore iniziale è maggiore del valore finale).

Esempio:

III modo

Calcolo del fattoriale di un numero p(cioè prodotti 1 2 ...p):

Program Fact_3;

Cost n \u003d 5;

Var i, fatto: intero;

Inizio

Fatto: \u003d 1;

per i: \u003d 1 an do

inizio (inizio ciclo)

fatto: \u003d fatto * i;

fine; (fine ciclo)

WriteLn ("Fattoriale", n, "\u003d", Fatto: 10)

Fine.

In qualità di operatore, puoi utilizzare qualsiasi semplice o conoperatore per tapparelle.

Le seguenti regole dovrebbero essere tenute a mente quando si utilizza questo operatore di ciclo:

1) puoi usare una semplice variabile come parametro,descritto nello stesso blocco;

2) il parametro deve essere di tipo discreto;

3) i valori iniziale e finale devono essere dello stesso tipo diparametro;

4) nel corpo del ciclo (operatore), una modifica esplicita del valore del parametro(ad esempio, dall'operatore di assegnazione) può portare a infinitociclo;

5) è impossibile nel corpo del ciclo cambiare i valori iniziali e finali di paparametri, se specificati da variabili;

6) al termine del ciclo, il valore del parametro diventa uguale al valore del parametro finale, se il ciclo non è stato interrottooperatore di transizione.

TE STESSO

1. Scrivi un programma che visualizzi i numeri in formato zona:

7 49

5 25

3 9

1 1

2. Risolvi il problema in tre modi (utilizzando diversi tipi di loop):

Quanti anniL l'importo del deposito raggiungerà l'importo desideratoS (RUB), con un investimento inizialeV (RUB), se l'interesse annuale garantito dalla banca è del 10% dell'importo del deposito.

Esegui l'algoritmo perS \u003d 100.000 rubli, V \u003d 10.000 rubli.

Le istruzioni loop forzano l'esecuzione delle istruzioni che contengono

ripetutamente.

In Pascal, ci sono tre tipi di operatori di ciclo: un operatore di ciclo con un parametro, un operatore di ciclo con una precondizione e un operatore di ciclo con una postcondizione.

Operatore di loop con parametro

Il formato dell'operatore di loop con un parametro:

per V: \u003d da E1 a E2 fai S

dove V è una variabile di tipo ordinale, E1, E2 sono espressioni dello stesso tipo, S è un operatore chiamato loop body. Le espressioni E1 ed E2 vengono valutate una volta entrando nel ciclo. Il parametro V assume prima il valore E1 poi subito dopo (SUCC (V)), ecc. prima di raggiungere E2. Per ogni valore di V, viene eseguito l'operatore S. Se è necessario eseguire più operatori nel corpo del ciclo, vengono combinati in uno utilizzando un operatore composto. Se il valore finale di E2 è inferiore al valore iniziale di E1, l'operatore S non viene eseguito nemmeno una volta.

L'operatore del ciclo di parametri viene utilizzato anche nella forma seguente:

per V: \u003d Е1 fino a E2 do S

Contrariamente al primo caso, V cambia da E1 a E2, passando da V a pred (V).

Nota che se V, E1, E2 sono di tipo INTEGER, allora nel primo caso è un ciclo con un passo di +1 e nel secondo con un passo di -1.

Operatore di loop con precondizione

Il formato dell'operatore di loop con una precondizione:

dove B è un'espressione logica, S è un operatore. L'operatore S verrà eseguito fintanto che la condizione B è vera. L'istruzione di ciclo verrà completata quando l'espressione B sarà inizialmente falsa.

Operatore di loop con postcondizione

Il formato dell'operatore di loop con postcondition:

ripetere S fino a B

dove B è un'espressione logica, S è un operatore. L'operatore S viene eseguito finché B non diventa vero. L'istruzione REPEAT viene eseguita almeno una volta, poiché il test per la verità della condizione B viene eseguito dopo l'esecuzione dell'istruzione S.

Le parole di servizio REPEAT e UNTIL agiscono già come parentesi, quindi le parentesi dell'operatore BEGIN e END sono opzionali.

Programmi di esempio

Come esempio di utilizzo degli operatori di ciclo, si consideri un programma per il calcolo del fattoriale.

Programma 2.1.1. Loop con parametro (passo +1)

FATTORIALE DEL PROGRAMMA1;

VAR I, N: INTEGER;

WRITE ("ENTER N");

READLN (N); F: \u003d 1;

PER I: \u003d 1 TO N DO F: \u003d F * I;

Programma 2.1.2. Loop con parametro (passo -1)

FATTORIALE DEL PROGRAMMA2;

VAR I, N: INTEGER;

WRITE ("ENTER N");

READLN (N); F: \u003d 1;

PER I: \u003d N DOWNTO 1 DO F: \u003d F * I;

WRITELN ("FACTORIAL FROM", N, "EQUAL", F)

Programma 2.2. Loop con precondizione

FATTORIALE DEL PROGRAMMA3;

VAR I, N: INTEGER;

WRITE ("ENTER N");

READLN (N); F: \u003d 1; I: \u003d 1;

MENTRE IO<=N DO

WRITELN ("FACTORIAL FROM", N, "EQUAL", F)

Un operatore è un elemento indivisibile del programma, che consente di eseguire determinate azioni algoritmiche. La differenza tra l'operatore, in relazione ad altri elementi, è che significa sempre un qualche tipo di azione. Nel linguaggio Pascal, gli operatori sono composti da parole di funzione. Gli operatori utilizzati nel programma sono separati l'uno dall'altro e dagli altri elementi del programma dal simbolo (;). Tutti operatori Pascal può essere approssimativamente suddiviso in due gruppi:

  1. semplice;
  2. strutturato.

Operatori semplici sono operatori che non contengono altri operatori. Questi includono:

  • operatore di assegnazione (: \u003d);
  • operatore di procedura;
  • operatore di salto incondizionato (GOTO).

Operatori strutturati sono operatori che contengono altri operatori. Questi includono:

  • operatore composto;
  • istruzioni condizionali (IF, CASE);
  • operatori di loop (FOR, WHILE, REPEAT);
  • operatore di join (WITH).

Operatori semplici

Operatore di procedura

Operatore di procedura serve per chiamare una procedura.

Formato: [nome_procedura] (elenco dei parametri di chiamata);

Un'istruzione di procedura consiste in un identificatore di procedura, immediatamente seguito da un elenco di parametri di chiamata tra parentesi. Pascal ha procedure senza parametri. In questo caso, quando viene chiamato, non esiste un elenco di parametri. L'esecuzione della procedura operatore porta all'attivazione delle azioni descritte nel suo corpo. Esistono due tipi di procedure in Pascal:

  • Standard, che sono descritti nella lingua stessa e appartengono alla lingua;
  • Procedure utente create dall'utente.

Per chiamare le procedure standard, è necessario connettersi nella sezione USES del nome del modulo (libreria), dove viene descritta questa procedura. Alcune procedure presenti nel modulo SYSTEM sono sempre connesse automaticamente al programma e la loro connessione nella sezione USES non è necessaria. Le procedure standard Pascal sono READ, WRITE, REWRITE, CLOSE, RESET.

LEGGI ([file_variable], [input_list])

LEGGI (x, y)

Le procedure utente (non standard) devono essere create prima di utilizzarle nel programma e si trovano nella sezione di descrizione del programma stesso o in unità di programma separate del modulo. Se la procedura è in un modulo, il nome di questo modulo deve essere menzionato nell'applicazione USES.

Operatore di salto incondizionato GOTO

Formato: GOTO [etichetta];

GOTO è una parola riservata in Pascal. [etichetta] è un identificatore arbitrario che consente di contrassegnare un determinato operatore di programma e successivamente fare riferimento ad esso. In Pascal è consentito usare un intero senza segno come etichette. L'etichetta viene posta prima dell'operatore contrassegnato e da esso viene separata (:). Un operatore può essere taggato con più tag. Sono anche separati l'uno dall'altro (:). Prima di utilizzare un'etichetta in una sezione di istruzioni, è necessario descriverla nella sezione ETICHETTA (sezione descrizione).

L'azione GOTO trasferisce il controllo all'istruzione contrassegnata corrispondente. Quando si utilizzano le etichette, è necessario seguire le seguenti regole:

  • l'etichetta deve essere descritta nella sezione descrizione e tutte le etichette devono essere utilizzate;
  • se gli interi sono usati come etichette, non vengono dichiarati.

Contrasta con i principi della tecnologia di programmazione strutturata. I linguaggi di programmazione moderni non includono un tale operatore e non è necessario utilizzarlo. Inoltre, i computer moderni utilizzano il cosiddetto metodo di trasporto. Se nel programma viene rilevato un operatore di salto incondizionato, tale operatore interrompe l'intera pipeline, costringendola a essere ricreata, il che rallenta notevolmente il processo di calcolo.

Operatori strutturati

IF istruzioni di condizione

Un operatore condizionale viene utilizzato in un programma per implementare una struttura algoritmica: la ramificazione. In questa struttura, il processo computazionale può continuare in una delle possibili direzioni. La scelta della direzione viene solitamente effettuata controllando alcune condizioni. Esistono due tipi di struttura del ramo: struttura a forcella e attraversamento.

In Pascal, l'istruzione condizionale IF è un mezzo per organizzare un processo computazionale ramificato.

Formato: IF [boolean_expression] Then [istruzione_1]; Else [operator_2];

IF, Then, Else - parole di controllo. [operator_1], [operator_2] - operazioni ordinarie del linguaggio Pascal. La parte Else è facoltativa (potrebbe mancare).

L'istruzione IF funziona come segue: in primo luogo, viene verificato il risultato dell'espressione logica. Se il risultato è TRUE, viene eseguita [istruzione_1] che segue la parola chiave Then e [istruzione_2] viene ignorata. Se il risultato è FALSE, [istruzione_1] viene saltata e [istruzione_2] viene eseguita.

Se manca la parte Else, l'istruzione IF non è completa:

IF [boolean_expression] Then [istruzione];

In questo caso, se il risultato è True (TRUE), viene eseguito l '[operatore], se False (FALSE), il controllo viene trasferito all'operatore che segue l'istruzione IF.

ci sono 2 numeri A e B. Trova il numero massimo.

Operatore composto

Un operatore composto è una sequenza di operazioni arbitrarie in un programma, racchiuse tra le cosiddette parentesi operatore (Begin-End).

Formato: Begin [operatori]; Fine;

Gli operatori composti consentono di rappresentare un gruppo di operatori come un unico operatore.

Dichiarazione di selezione CASE

È inteso per l'implementazione di più rami, poiché l'operatore IF può implementare solo due direzioni del processo di calcolo, non è sempre conveniente utilizzarlo per implementare più rami. La ramificazione multipla viene implementata con l'istruzione CASE.

Formato: CASE [select_key] OF

[select_const_1]: [operator_1];

[select_const_2]: [operator_2];

[select_const_N]: [operator_N];

ELSE [operatore];

CASE, OF, ELSE, END - parole di controllo. [select_key] è un parametro di uno dei tipi ordinali. [select_constants] - costanti dello stesso tipo della chiave di selezione che implementano la selezione. [operator_1 (N)] è un operatore ordinario. ELSE potrebbe mancare.

L'operatore di selezione funziona come segue: prima che l'operatore funzioni, viene determinato il valore del parametro della chiave di selezione. Questo parametro può essere espresso come variabile nel programma o in qualche altro modo. Quindi il tasto di selezione del parametro viene confrontato sequenzialmente con la costante di selezione. Se il valore della chiave di selezione corrisponde a una delle costanti di selezione, viene eseguito l'operatore che segue questa costante e tutti gli altri operatori vengono ignorati. Se il tasto di selezione non corrisponde a nessuna delle costanti, viene eseguita l'istruzione che segue Else. Spesso Else è facoltativo e se il tasto di selezione non corrisponde a nessuna delle costanti di selezione e se Else è assente, il controllo viene trasferito all'operatore seguendo l'istruzione CASE.

L'istruzione CASE non verifica in modo esplicito la condizione specifica dell'istruzione IF. Allo stesso tempo, l'operazione di confronto viene eseguita implicitamente. CASE introduce la dissonanza nel programma Pascal, poiché l'operatore specificato termina con la parola di servizio End, che non ha abbinato Begin.

Crea un algoritmo e un programma per un problema che simuli il lavoro di un semaforo. Quando si immette il carattere della prima lettera dei colori del semaforo, il programma dovrebbe visualizzare un messaggio sul colore e le azioni corrispondenti.

Il programma funziona come segue: dalla tastiera, la procedura di Lettura inserisce una lettera simbolo del colore di un semaforo. Se viene inserita la lettera "з", corrispondente al colore verde, nell'istruzione CASE il valore inserito nell'elenco di selezione troverà la costante di selezione "з" e verrà visualizzato il messaggio "Colore verde, movimento consentito". Quando si immettono le lettere "k" e "z", verranno visualizzati messaggi simili. Quando si immette un altro carattere, verrà visualizzato il messaggio "Il semaforo non funziona", poiché in questo caso la parte Else dell'istruzione CASE funziona.

Operatori di loop

Una struttura algoritmica ciclica è una struttura in cui alcune azioni vengono eseguite più volte. Esistono due tipi di strutture di loop nella programmazione: un loop con un parametro e un loop iterativo.

Un ciclo con un parametro contiene sempre i cosiddetti parametri di ciclo: X, X n, X k, ∆X. A volte un ciclo con un parametro è chiamato ciclo regolare. La caratteristica caratteristica è che il numero di loop e ripetizioni può essere determinato prima che il loop venga eseguito.

In un ciclo iterativo, è impossibile determinare il numero di cicli prima che venga eseguito. Viene eseguito fintanto che la condizione di continuazione del ciclo è soddisfatta.

In Pascal, ci sono tre operatori che implementano strutture computazionali cicliche:

  • operatore di conteggio FOR. Ha lo scopo di implementare un ciclo con un parametro e non può essere utilizzato per implementare un ciclo iterativo;
  • un operatore di ciclo con una precondizione WHILE;
  • operatore di loop con REPEAT postcondition.

Gli ultimi due sono focalizzati sull'implementazione di un ciclo iterativo, ma possono anche essere usati per implementare un ciclo con un parametro.

Dichiarazione FOR

Formato: PER [cycle_parameter]: \u003d [n_z_p_ts] To [k_z_p_ts] Do [operator];

FOR, To, Do - parole di servizio. [cycle_parameter] è un parametro di ciclo. [n_z_p_ts] - valore iniziale del parametro del ciclo. [k_z_p_ts] - il valore finale del parametro del ciclo. [operator] è un operatore arbitrario.

Il parametro loop deve essere una variabile di tipo ordinale. I valori di inizio e fine del parametro del ciclo devono essere dello stesso tipo del parametro del ciclo.

Consideriamo il lavoro dell'operatore che utilizza il suo algoritmo:

Nella prima fase, il valore del parametro loop prende [n_z_p_ts], quindi il parametro loop viene verificato se è minore o uguale a [k_z_p_ts]. Questa condizione è una condizione per continuare il ciclo. Se è fatto, il ciclo continua il suo lavoro e l '[operatore] viene eseguito, dopodiché il parametro del ciclo viene aumentato (diminuito) di uno. Quindi, con il nuovo valore del parametro loop, viene verificata la condizione di continuazione del loop. Se viene eseguito, le azioni vengono ripetute. Se la condizione non è soddisfatta, il ciclo interrompe il suo lavoro.

L'istruzione For differisce in modo significativo da dichiarazioni simili in altri linguaggi di programmazione. Le differenze sono le seguenti:

  • il corpo della dichiarazione For. L'istruzione potrebbe non essere eseguita nemmeno una volta, poiché la condizione per continuare il ciclo è verificata prima del corpo del ciclo;
  • il passo di modifica del parametro del ciclo è costante e uguale a 1;
  • il corpo del ciclo nell'istruzione For è rappresentato da una singola istruzione. Nel caso in cui l'azione del loop body richieda più di un operatore semplice, allora questi operatori devono essere trasformati in un operatore composto mediante parentesi operatore (BEGIN-END);
  • Il parametro loop può essere solo una variabile di tipo ordinale.

Un esempio di utilizzo dell'istruzione FOR: crea una tabella per convertire i rubli in dollari.

Istruzione WHILE (istruzione loop precondizione)

Formato: WHILE [condizione] Do [operatore];

MENTRE, Do - parole di servizio. [condition] è un'espressione booleana. [operator] è un normale operatore.

;

L'istruzione While funziona come segue: in primo luogo, viene verificato il risultato della condizione logica. Se il risultato è vero, viene eseguito l'operatore, dopodiché la condizione viene restituita al test con il nuovo valore del parametro nell'espressione logica della condizione. Se il risultato è falso, il ciclo termina.

Quando lavori con While, dovresti prestare attenzione alle sue proprietà:

  • le condizioni utilizzate nel While sono la condizione per continuare il ciclo;
  • nel corpo del ciclo, il valore del parametro della condizione incluso nell'espressione cambia sempre;
  • il ciclo While potrebbe non essere eseguito nemmeno una volta, perché il controllo delle condizioni durante il ciclo viene eseguito prima del corpo del ciclo.

Istruzione REPEAT (istruzione loop con postcondition)

Formato: REPEAT [loop-body]; UNTIL [condizione];

L'istruzione REPEAT funziona come segue: prima vengono eseguite le istruzioni del corpo del ciclo, dopodiché viene verificata la condizione logica del risultato. Se il risultato è falso, l'operatore torna all'esecuzione del corpo del ciclo successivo. Se il risultato è vero, l'istruzione termina.

L'operatore Ripeti ha le seguenti caratteristiche:

  • in Repeat, viene verificata la condizione di terminazione del loop e, se la condizione è soddisfatta, il loop termina;
  • il corpo del ciclo viene sempre eseguito almeno una volta;
  • il parametro per il controllo della condizione viene modificato nel corpo del ciclo;
  • gli operatori del corpo del ciclo non devono essere racchiusi tra parentesi di operatore (BEGIN-END), mentre il ruolo delle parentesi di operatore viene svolto da Repeat e Until.

Calcola y \u003d sin (x), dove xn \u003d 10, xk \u003d 100, il passo è 10.

LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam