(Java) Instruction de boucle for. Tâches typiques


Essayons d'écrire un programme pour résoudre le problème suivant :
Trouvez la somme de tous les nombres entiers entre 100 et 500. 

Lors de la résolution de ce problème, il devient difficile de trouver la somme. Si nous écrivons simplement le résultat de l'addition à la variable s, par exemple, comme

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

cela prendra beaucoup de temps pour l'enregistrement lui-même, car l'ordinateur ne comprendra pas comment utiliser les points de suspension dans l'expression arithmétique et nous devrons écrire tous les nombres de 100 à 500 dans cette somme. Et la valeur d'un tel programme serait négligeable. Surtout si nous voulons changer nos chiffres et prendre une gamme différente.

Que devons-nous faire ?

Si nous prêtons attention à l'entrée ci-dessus, nous utilisons constamment l'ajout "+".
Vous pouvez essayer d'ajouter progressivement des nombres à la variable s. Par exemple, en utilisant cette notation
s=s+i ;
ce que nous avons fait ici :
1) à droite nous mettons l'expression s+i, , c'est-à-dire que nous prenons la valeur de la variable s, que nous avons maintenant en mémoire et ajoutons la valeur de la variable i< à elle /strong>
2) à gauche, nous définissons le nom de la variable s, c'est-à-dire que tout le résultat du calcul à droite sera stocké dans cette variable, nous allons donc modifier la valeur de la variable s. 

Où pouvons-nous obtenir les chiffres de notre gamme ?

Les nombres de 100 à 500 qui appartiennent à notre gamme devraient tomber dans la variable i un par un. Et cela peut être fait en utilisant la boucle for
bien connue Par exemple, de cette manière s=0 ; //au début il faut réinitialiser la variable s, pour qu'au premier pas le nombre 100 soit ajouté à zéro, et non à ce qui est en mémoire ! for ( i = 100; i<=500; i++) //en-tête de la boucle, dans laquelle la variable i change sa valeur de 100 à 500 par incréments de 1 s = s + je ; //le corps de la boucle, dans lequel on ajoute progressivement la valeur de la variable changeante i à la variable s // et le résultat est stocké dans la variable s Cette solution est très similaire au calcul de la somme par actions
 s = 0 + 100 = 100
 s = 100 + 101 = 201
 s = 201 + 102  = 303
etc.

Nombre maximum parmi les nombres donnés

Lors de l'étude de l'opérateur conditionnel, nous avons abordé le sujet de la recherche du nombre maximum parmi plusieurs nombres saisis. Dans le problème "Maximum de quatre nombres" nous avons utilisé l'algorithme suivant :
1. affecter la valeur de la variable M à la première des quatre variables ;
2. si la valeur de la deuxième variable est supérieure à la valeur de la variable M, alors remplacer la valeur de la variable par la valeur de la deuxième variable ;
3. si la valeur de la troisième variable est supérieure à la valeur de la variable M, alors remplacer la valeur de la variable M par la valeur de la troisième variable ;< br /> 4. si la valeur de la quatrième variable est supérieure à la valeur de la variable M, alors remplacez la valeur de la variable par la valeur de la quatrième variable.

On peut voir que chacun  le nombre (notons-le par X) que nous avons comparé avec la variable M, comme suit :
 
pseudocode
entrée X si (M < X) alors   M = X
L'essentiel dans ce code est de déterminer quelle valeur initiale aura la variable M.
Habituellement, lors de la résolution d'un problème de recherche d'un maximum ou d'un minimum, la valeur initiale de la variable M est attribuée égale au premier nombre.
Ainsi, le code ci-dessus doit être exécuté 1 fois moins que le nombre de nombres (car le premier nombre doit être saisi et stocké comme valeur initiale de la variable M).
Si nous avons le nombre de nombres définis au clavier (par exemple, dans la variable n), alors nous pouvons organiser un cycle (de 2 à n), en utilisant le même nombre pour stocker la variable nombre.

Essayez d'écrire le programme vous-même.

Maximum pas parmi tous

Si nous devons trouver le maximum (minimum) non pas parmi tous les nombres saisis, mais uniquement parmi les nombres qui satisfont à une certaine condition, nous devons alors tenir compte du fait que le premier nombre que nous prenons comme valeur initiale du maximum (minimum) ne satisfera pas toujours nos exigences.

Par exemple, si nous recherchons le nombre négatif maximum, alors avoir l'ensemble de données : \(\{5, -2, 4, 2, -1, -3\}\ ) nous obtiendrons le nombre 5 dans la valeur initiale du maximum, et il est positif et supérieur à tout négatif. Et donc la condition X > M sera toujours faux.

Par conséquent, il ne suffit pas d'ajouter une seule vérification pour un nombre négatif à l'algorithme du problème précédent, il faut également tenir compte du fait que le premier nombre peut ne pas satisfaire la condition requise (dans ce cas, être négatif ).

Vous pouvez résoudre ce problème en ajoutant la condition suivante dans la boucle :

pseudocode
si X est négatif, alors si M >= 0 ou M < X, alors M=X
Dans le code spécifié, la condition  M >= 0 permet d'effectuer l'action  M = X même si la condition la variable contient initialement une valeur évidemment supérieure aux autres (dans notre exemple, la valeur est égale à 5).

Nous notons également que si la plage de nombres est connue, le nombre minimum (maximum) de la plage spécifiée peut être considéré comme la valeur initiale du maximum (minimum).

Tâche

N nombres sont donnés. Trouvez le deuxième plus grand élément d'une séquence.

Ce problème permet deux interprétations.
Par exemple, si on nous donne un ensemble de nombres : \(10\ 15\ 20\ 35\ 14\ 35\ 10\), alors quelle devrait être la réponse ?
Sous le "deuxième plus grand élément" ou simplement "deuxième maximum", peut être compris comme :
1) la valeur qui serait à l'avant-dernière place si nous organisions (triions) toutes les valeurs dans un ordre non décroissant (chacune suivante est supérieure ou égale à la précédente). Ensuite, pour l'ensemble de nombres considéré, la réponse sera la valeur 35 ;
2) la valeur de l'élément, qui est supérieure uniquement au maximum. Alors la réponse est 20.
S'il n'y a qu'un seul élément maximum dans l'ensemble des nombres (tous les autres sont inférieurs), alors les deux interprétations sont les mêmes, et la réponse sera la même pour les deux cas, sinon la réponse sera différente.

Considérons le premier cas (nous écrirons l'algorithme sur pseudocode).
Pour trouver la réponse, nous allons utiliser deux variables :
1) maximum1 - valeur maximale (premier maximum) ;
2) maximum2 - deuxième maximum (notre réponse).

Si la plage de valeurs change est connue, alors comme valeurs initiales, nous prenons un nombre évidemment inférieur à la limite inférieure de la plage (par exemple, avec une plage de -1000 à 1000 - prenez le numéro -1001)
Si la plage de valeurs est inconnue, vous pouvez écrire les deux premiers nombres d'entrée dans les valeurs initiales des variables max1 et max2, puis les comparer deux variables. entrée N //nombre de nombres entrée a, b max1 = un max2 = b si b > un, alors     max1 = b     max2 = un
Ensuite, nous considérons tous les autres éléments (les 2 premiers ont déjà été visionnés, nous allons donc commencer par le 3ème) nc pour i de 3 à n saisir un si un > maximum1 // il y avait une valeur supérieure à maximum1 Ce max2 = max1 // l'ancien premier haut devient le deuxième max1 = a //le nouvel élément sera le premier maximum sinon //élément suivant pas plus que max1 // il doit être comparé avec la valeur maximum2 si un > maximum 2 Ce max2 = a // le prendre comme nouvelle valeur max2 // max1 ne change pas dans ce cas Tous Tous kts
Essayez d'implémenter cet algorithme vous-même.