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 M 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 M 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 M 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.
|