Per l'istruzione del ciclo. Compiti tipici


Proviamo a scrivere un programma per risolvere il seguente problema:
Trova la somma di tutti i numeri interi compresi tra 100 e 500. 

Quando si risolve questo problema, diventa difficile trovare la somma. Se scriviamo semplicemente il risultato dell'addizione alla variabile s, ad esempio, as

s=100+101+102+103+...+500

ci vorrà molto tempo per la registrazione stessa, perché il computer non capirà come usare i puntini di sospensione nell'espressione aritmetica e dovremo scrivere tutti i numeri da 100 a 500 in questa somma. E il valore di un tale programma sarebbe trascurabile. Soprattutto se vogliamo cambiare i nostri numeri e prendere una gamma diversa.

Cosa dovremmo fare?

Se prestiamo attenzione alla voce sopra, utilizziamo costantemente l'aggiunta "+".
Puoi provare ad aggiungere numeri alla variabile s gradualmente. Ad esempio, utilizzando questa notazione
s := s + i;
cosa abbiamo fatto qui:
1) a destra mettiamo l'espressione s+i, , cioè prendiamo il valore della variabile s, che ora abbiamo in memoria e sommiamo il valore della variabile i< ad essa /strong>
2) a sinistra impostiamo il nome della variabile s, ovvero l'intero risultato del calcolo a destra verrà memorizzato in questa variabile, quindi cambieremo il valore della variabile s. 

Dove possiamo trovare i numeri della nostra gamma?

I numeri da 100 a 500 che appartengono al nostro intervallo dovrebbero rientrare nella variabile i uno per uno. E questo può essere fatto usando il noto ciclo for
Ad esempio, in questo modo
s := 0; //all'inizio è necessario azzerare la variabile s, in modo che al primo passo il numero 100 venga sommato a zero, e non a quello che c'è in memoria!
for i := da 100 a 500 do //intestazione del ciclo, in cui la variabile i cambia il suo valore da 100 a 500 con incrementi di 1
    s := s + io; //il corpo del ciclo, in cui aggiungiamo gradualmente il valore della variabile variabile i alla variabile s
                 // e il risultato viene memorizzato nella variabile s
Questa soluzione è molto simile al calcolo della somma per azioni
 s = 0 + 100 = 100
 s = 100 + 101 = 201
 s = 201 + 102  = 303
eccetera.

Numero massimo tra i numeri dati

Durante lo studio dell'operatore condizionale, abbiamo toccato l'argomento della ricerca del numero massimo da diversi numeri inseriti. Nel problema "Massimo di quattro numeri" abbiamo utilizzato il seguente algoritmo:
1. assegnare il valore alla variabile M alla prima delle quattro variabili;
2. se il valore della seconda variabile è maggiore del valore della variabile M, allora sostituisci il valore della variabile con il valore della seconda variabile;
3. se il valore della terza variabile è maggiore del valore della variabile M, allora sostituisci il valore della variabile M con il valore della terza variabile;< br /> 4. se il valore della quarta variabile è maggiore del valore nella variabile M, sostituire il valore della variabile con il valore della quarta variabile.

Si può vedere che ogni  il numero (denotiamolo con X) lo abbiamo confrontato con la variabile M, come segue:
 
pseudocodice
ingresso X
se (M < X) allora
  M = X

La cosa principale in questo codice è determinare quale valore iniziale avrà la variabile M.
Di solito, quando si risolve un problema per trovare un massimo o un minimo, il valore iniziale della variabile M viene assegnato uguale al primo numero.
Pertanto, il codice di cui sopra deve essere eseguito 1 volte meno del numero di numeri (poiché il primo numero deve essere inserito e memorizzato come valore iniziale della variabile M).
Se abbiamo il numero di numeri impostati da tastiera (ad esempio, nella variabile n), allora possiamo organizzare un ciclo (da 2 a n), utilizzando il stesso numero per memorizzare la variabile numero.

Prova a scrivere tu stesso il programma.

Massimo non tra tutti

Se dobbiamo trovare il massimo (minimo) non tra tutti i numeri inseriti, ma solo tra i numeri che soddisfano una certa condizione, allora dobbiamo tenere conto del fatto che il primo numero che prendiamo come valore iniziale del massimo (minimo) non sempre soddisfa i nostri requisiti.

Ad esempio, se stiamo cercando il numero massimo negativo, avendo il set di dati: \(\{5, -2, 4, 2, -1, -3\}\ ) otterremo il numero 5 nel valore iniziale del massimo, ed è positivo e maggiore di qualsiasi negativo. E quindi la condizione X > M sarà sempre false.

Pertanto, non è sufficiente aggiungere un solo controllo per un numero negativo all'algoritmo del problema precedente, è anche necessario tenere conto del fatto che il primo numero potrebbe non soddisfare la condizione richiesta (in questo caso essere negativo ).

Puoi risolvere questo problema aggiungendo la seguente condizione all'interno del ciclo:

pseudocodice
se X è negativo, allora
  se M >= 0 o M < X, allora
    M=X

Nel codice specificato, la condizione  M >= 0 consente di eseguire l'azione  M = X anche se la condizione la variabile contiene inizialmente un valore che è ovviamente maggiore del resto (nel nostro esempio, il valore è uguale a 5).

Notiamo anche che se l'intervallo di numeri è noto, il numero minimo (massimo) dall'intervallo specificato può essere preso come valore iniziale del massimo (minimo).

Compito

Sono dati N numeri. Trova il secondo elemento più grande in una sequenza.

Questo problema consente due interpretazioni.
Ad esempio, se ci viene fornito un insieme di numeri: \(10\ 15\ 20\ 35\ 14\ 35\ 10\), quale dovrebbe essere la risposta ?
Sotto il "secondo elemento più grande" o semplicemente "secondo massimo", può essere inteso come:
1) il valore che sarebbe al penultimo posto se disponessimo (ordinando) tutti i valori in ordine non decrescente (ciascuno successivo è maggiore o uguale al precedente). Quindi per l'insieme di numeri considerato la risposta sarà il valore 35;
2) il valore dell'elemento, che è maggiore solo del massimo. Allora la risposta è 20.
Se c'è un solo elemento massimo nell'insieme dei numeri (tutti gli altri sono inferiori), entrambe le interpretazioni sono le stesse e la risposta sarà la stessa per entrambi i casi, altrimenti la risposta sarà diversa.

Considera il primo caso (scriveremo l'algoritmo su pseudocodice).
Per trovare la risposta, utilizzeremo due variabili:
1) maximum1 - valore massimo (primo massimo);
2) maximum2 - secondo massimo (la nostra risposta).

Se il range di valori cambia è noto, allora come valori iniziali prendiamo un numero che è ovviamente minore del limite inferiore del range (ad esempio, con un range da -1000 Da a 1000 - prendi il numero -1001)
Se l'intervallo di valori è sconosciuto, puoi scrivere i primi due numeri di input nei valori iniziali delle variabili max1 e max2, quindi confrontarli due variabili.
input N //numero di numeri
ingresso a, b
massimo1 = a
massimo2 = b
se b > un, quindi
    massimo1 = b
    massimo2 = a

Successivamente, consideriamo tutti gli altri elementi (i primi 2 sono già stati visualizzati, quindi inizieremo dal 3°)
nc per i da 3 a n
    ingresso A
    se un > massimo1 //c'era un valore maggiore di massimo1
      Quello
        max2 = max1 //ex primo massimo diventa secondo
        max1 = a //il nuovo elemento sarà il primo massimo
      Altrimenti
        //elemento successivo non più di max1
        // deve essere confrontato con il valore massimo2
        se un > massimo 2
          Quello
            max2 = a //prenderlo come nuovo valore max2
                           // max1 non cambia in questo caso
        Tutto
    Tutto
kts

Prova a implementare questo algoritmo da solo.