For declaração de loop. Tarefas típicas


Vamos tentar escrever um programa para resolver o seguinte problema:
Encontre a soma de todos os números inteiros entre 100 e 500. 

Ao resolver este problema, torna-se difícil encontrar a soma. Se simplesmente escrevermos o resultado da adição à variável s, por exemplo, como

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

vai demorar muito para o registro propriamente dito, pois o computador não vai entender como usar as reticências na expressão aritmética e teremos que escrever todos os números de 100 a 500 nessa soma. E o valor de tal programa seria insignificante. Especialmente se quisermos mudar nossos números e escolher um intervalo diferente.

O que devemos fazer?

Se prestarmos atenção à entrada acima, usaremos constantemente a adição "+".
Você pode tentar adicionar números à variável s gradualmente. Por exemplo, usando esta notação
s := s + i;
o que fizemos aqui:
1) à direita colocamos a expressão s+i, , ou seja, pegamos o valor da variável s, que agora temos na memória e somamos o valor da variável i< para ele /strong>
2) à esquerda definimos o nome da variável s, ou seja, todo o resultado do cálculo da direita será armazenado nesta variável, portanto, alteraremos o valor da variável s. 

Onde podemos obter números de nosso intervalo?

Os números de 100 a 500 que pertencem ao nosso intervalo devem cair na variável i um a um. E isso pode ser feito usando o conhecido loop for
Por exemplo, desta forma s := 0; //no início é necessário zerar a variável s, para que na primeira etapa o número 100 seja adicionado a zero, e não ao que está na memória! for i := 100 to 500 do //cabeçalho do loop, no qual a variável i muda seu valor de 100 para 500 em incrementos de 1 s := s + i; //o corpo do loop, no qual gradualmente adicionamos o valor da variável variável i à variável s // e o resultado é armazenado de volta na variável s Esta solução é muito semelhante ao cálculo da soma por ações
 s = 0 + 100 = 100
 s = 100 + 101 = 201
 s = 201 + 102  = 303
etc.

Número máximo entre os números fornecidos

Ao estudar o operador condicional, tocamos no tópico de encontrar o número máximo de vários números inseridos. No problema "Máximo de quatro números" usamos o seguinte algoritmo:
1. atribua o valor da variável M à primeira das quatro variáveis;
2. se o valor da segunda variável for maior que o valor da variável M, substitua o valor da variável pelo valor da segunda variável;
3. se o valor da terceira variável for maior que o valor da variável M, substitua o valor da variável M pelo valor da terceira variável;< br /> 4. se o valor da quarta variável for maior que o valor na variável M, substitua o valor da variável pelo valor da quarta variável.

Pode-se ver que cada  o número (vamos denotar por X) comparamos com a variável M, como segue:
 
pseudocódigo
entrada X se (M < X) então   M = X
O principal neste código é determinar qual valor inicial a variável M terá.
Normalmente, ao resolver um problema de encontrar um máximo ou mínimo, o valor inicial da variável M é atribuído igual ao primeiro número.
Assim, o código acima deve ser executado 1 vez menos que o número de números (porque o primeiro número deve ser digitado e armazenado como valor inicial da variável M).
Se tivermos o número de números definido no teclado (por exemplo, na variável n), podemos organizar um ciclo (de 2 a n), usando o mesmo número para armazenar a variável numérica.

Tente escrever o programa você mesmo.

Máximo não entre todos

Se precisarmos encontrar o máximo (mínimo) não entre todos os números inseridos, mas apenas entre os números que atendem a uma determinada condição, devemos levar em consideração o fato de que o primeiro número que tomamos como valor inicial do máximo (mínimo) nem sempre satisfará nossos requisitos.

Por exemplo, se estamos procurando o número negativo máximo, tendo o conjunto de dados: \(\{5, -2, 4, 2, -1, -3\}\ ) obteremos o número 5 no valor inicial do máximo, e é positivo e maior que qualquer negativo. E, portanto, a condição X > M sempre será falso.

Portanto, não basta adicionar apenas uma verificação de número negativo ao algoritmo do problema anterior, é necessário também levar em consideração o fato de que o primeiro número pode não satisfazer a condição exigida (neste caso, ser negativo ).

Você pode corrigir isso adicionando a seguinte condição dentro do loop:

pseudocódigo
se X é negativo, então se M >= 0 ou M < X, então M=X
No código especificado, a condição  M >= 0 permite que você execute a ação  M = X mesmo se variável contém inicialmente um valor obviamente maior que o resto (no nosso exemplo, o valor é igual a 5).

Também observamos que, se o intervalo de números for conhecido, o número mínimo (máximo) do intervalo especificado pode ser considerado como o valor inicial do máximo (mínimo).

Tarefa

N números são fornecidos. Encontre o segundo maior elemento em uma sequência.

Este problema permite duas interpretações.
Por exemplo, se recebermos um conjunto de números: \(10\ 15\ 20\ 35\ 14\ 35\ 10\), qual deve ser a resposta ?
Sob o "segundo maior elemento" ou simplesmente "segundo máximo", pode ser entendido como:
1) o valor que estaria na penúltima casa se dispuséssemos (ordenássemos) todos os valores em ordem não decrescente (cada próximo é maior ou igual ao anterior). Então para o conjunto de números considerado a resposta será o valor 35;
2) o valor do elemento, que é maior que apenas o máximo. Então a resposta é 20.
Se houver apenas um elemento máximo no conjunto de números (todos os outros são menores), ambas as interpretações são iguais e a resposta será a mesma para os dois casos, caso contrário, a resposta será diferente.

Considere o primeiro caso (vamos escrever o algoritmo em pseudocódigo).
Para encontrar a resposta, usaremos duas variáveis:
1) maximum1 - valor máximo (primeiro máximo);
2) maximum2 - segundo máximo (nossa resposta).

Se o intervalo de alteração de valores for conhecido, então, como valores iniciais, tomamos um número obviamente menor que o limite inferior do intervalo (por exemplo, com um intervalo de -1000 para 1000 - pegue o número -1001)
Se o intervalo de valores for desconhecido, você pode escrever os dois primeiros números de entrada nos valores iniciais das variáveis ​​max1 e max2 e depois compará-los duas variáveis. input N //número de números entrada a, b máx1 = um max2 = b se b > um, então     max1 = b     máx2 = um
A seguir, consideramos todos os outros elementos (os 2 primeiros já foram visualizados, portanto, começaremos pelo 3º) nc para i de 3 a n insira um se um > maximum1 //houve um valor maior que maximum1 Que max2 = max1 //o antigo primeiro máximo torna-se o segundo max1 = a //o ​​novo elemento será o primeiro máximo de outra forma //próximo elemento não mais que max1 // precisa ser comparado com o valor maximum2 se um > máximo 2 Que max2 = a //toma como o novo valor max2 // max1 não muda neste caso Todos Todos kts
Tente implementar esse algoritmo você mesmo.