Você está na página 1de 36

Algoritmos de Programação

Material de Estudo
Referente à aula teórica: 24 de março 2020 – 08:55 a 09:40
Profa. Angela

Assunto: correção dos exercícios e somatórios com processos repetitivos


Orientações:
1. estude o material desta apresentação, ANTES DE RESOLVER OS EXERCÍCIOS DA AULA PRÁTICA, lendo atentamente o
conteúdo;
2. faça os exercícios apresentados (1) e anexe-os no escaninho- o programa cole-os no bloco de notas .txt;
PRAZO: até 27 de março às 14h. A entrega desse material é OBRIGATÓRIA para ser atribuída frequência na disciplina
TEÓRICA.

(1) Se você não tiver um compilador, há alguns online. Por exemplo: https://www.onlinegdb.com/online_c++_compiler

Não se esqueça de acessar a aula prática, que lá também temos atividades a serem feitas!
1
Comando for Profa. Angela

IMPORTANTE:

Observações Gerais:

- para enviar os exercícios resolvidos, peço que colem todos os exercícios num arquivo só TXT;
- colar SOMENTE o seu programa (cpp);
- por favor, NÃO enviem todos os arquivos da pasta do CodeBlocks ou Visual Studio. Eles são muito pesados e
difíceis de abrir;

Na parte teórica de hoje, vou fazer a correção dos exercícios destacando alguns pontos que apareceram
nas diversas versões feitas por vocês.

Assunto novo: como resolver problemas que utilizam somatórios.


Comando for Profa. Angela

1ª situação: trecho retirado de um exercício

K <= N

O incremento de K é de 1 em 1:

Pode ser:

for( K=1; K<=1*N ; K+=1 ) K=K+1


cout<< K << " ";
ou
K++
Comando for Profa. Angela

Lembrar:

Quando o incremento ou decremento é de 1 em 1

Incremento: K = K + 1 K++

Decremento: K = K – 1 K--

Quando o incremento ou decremento é diferente de 1, por exemplo, de n genericamente

Incremento: K = K + n K += n

Decremento: K = K – n K -= n
Comando for Profa. Angela

Exemplo usando *=: imprimir as N primeiras potências de 2

Isso vale também para as outras Imprimir: 2, 4, 8, 16, 32, ...


operações:
N

Precisamos de uma variável para imprimir a sequencia das


potencias de 2: int A
Multiplicação: K = K * n K *= n
onde A, começa com 2 e variar por multiplicações sucessivas por 2
Divisão: K = K / n K /= n A *= 2

Resto: K = K % n K %= n
O controle do processo repetitivo pode ser construído:

• K iniciando em 1 e de 1 em 1, até K atingir N


Comando for Profa. Angela
Comando for Profa. Angela

Podemos colocar no comando for: - a inicialização e a atualização de A


Comando for Profa. Angela

Lembrando: o comando for possui três partes:

Inicialização – executada apenas Incremento – executado a partir


uma vez, quando o comando Controle – teste de
parada – executado da 2ª vez
começa
todas as vezes

Ponto-e-vírgula separando as 3 partes


Comando for Profa. Angela

Este exemplo, exercício da aula passada: ele está correto, porém há um excesso de zelo, em relação à condição
de controle.
Comando for Profa. Angela

Observação: repare que na condição não há vírgula separando.


Deve ser uma condição única. A junção é feita com && ou ||
condição

Nesse caso, se o F foi inicializado com 30, então é certo


que F será MAIOR OU IGUAL à 30

Não está errado! Mas não precisava. Bastava a condição de controle ser
Comando for Profa. Angela

Outro exemplo, agora do exercício que imprime a tabela de conversão libras para quilograma. O
exercício pedia que o valor da libra começaria em 1 e depois seguisse de 5 em 5.

Isto é, 1, 5, 10, 15, 20, 25, ..... , 100.

Você precisava decidir: como fazer


para imprimir a primeira linha da
tabela, para o valor da libra igual à 1.
E depois, fazer o processo repetitivo
para os demais.
Comando for Profa. Angela

A proposta não está errada! Mas não precisava. Vamos analisar o que faz o primeiro comando repetitivo, for.
Comando for Profa. Angela

1ª parte: 2ª parte: 3ª parte:

Lb =1 Lb <= 1 Lb = Lb + 1

Assim, para Lb valendo 1, a condição Lb <= 1 é verdadeira então o comando cout é executado uma vez.
O comando volta para a linha do for e executa a 3ª parte: incrementa em uma unidade a variável Lb, que passa
a conter o valor 2.
Agora, a condição Lb <=1, não é mais verdade, pois Lb é maior do que 1. Então, ele sai do processo repetitivo e
vai executar o próximo comando depois do cout

CONCLUSÃO: EXECUTOU APENAS UMA VEZ O


NÃO PRECISAVA DO FOR!
COMANDO COUT
Comando for Profa. Angela

Uma versão interessante do mesmo exercício:

construiu o processo repetitivo como se fosse


imprimir os valores da libra, começando em
zero e de cinco em cinco, imprimir os demais.

Isto é, 0, 5, 10, 15, 20, ...., 100

Para evitar de imprimir o valor zero e no


lugar, imprimir o valor 1, acrescentou
uma condição: if

para o valor de f menor do que


5, atribuiu 1 ao f e o imprimiu.
Comando for Profa. Angela

A maioria apresentou uma versão, parecida com essa, mais enxuta!

MUITO BOM!!!!!!
Comando for Profa. Angela

Quinto exercício: ler N números inteiros, na variável X. Encontrar e imprimir o maior número digitado.
O valor de N também deve ser lido.

A ideia nesse exercício, é:

1. definir uma variável chamada Maior, para ser o elemento de comparação e guardar o maior elemento;

2. construir um processo repetitivo, para fazer a leitura de X, N vezes;

3. a cada leitura de X, dentro do processo repetitivo, compará-lo com Maior:


o Se X for maior do que o valor contido em Maior, atualizar o valor de Maior com o valor de X:
Maior = X
o Senão, não tem nada a fazer – não tem else

4. ao final, Maior tem o maior número lido.

A questão é: com que valor inicializar a variável Maior?


Comando for Profa. Angela

Solução apresentada, mas que não atende para qualquer número inteiro digitado.

Primeira ideia: inicializar com ZERO

E se os valores digitados para X forem todos


negativos?
Comando for Profa. Angela

Solução apresentada, mas que não atende para qualquer número inteiro digitado.

Imprimir que o maior número é ZERO.


Não digitamos zero!!!!
Comando for Profa. Angela

Como podemos resolver isso?

• Inicializar Maior com o menor número possível dentro do compilador (alguns alunos utilizaram esse
recurso)
Biblioteca:
Comando for Profa. Angela
• Atribuir a primeira leitura para Maior - essa ideia apareceu em vários exercícios, de formas diferentes.

Primeira leitura fora do for e já atribui para


Maior

Observe que a variável de


controle do for, K, é inicializada,
agora com 2, pois uma leitura já
foi feita!
Comando for Profa. Angela

Neste caso: foi incluído na


condição do if: K == 1

Se uma das duas condições for


verdadeira:
K == 1 OU X > Maior
Assunto NOVO: Somatórios Profa. Angela

Quando aprendemos o comando while, usamos o seguinte o exemplo: construir um programa que
imprime os N primeiros naturais, começando em 1. N deve ser lido.

O programa apresentado foi:


RESULTADO DA EXECUÇÃO:

o programa repetiu a impressão do valor de K,


enquanto o valor de K fosse menor ou igual à N,
onde o valor de K sofreu o incremento de uma
unidade à cada repetição. 22
Assunto NOVO: Somatórios Profa. Angela

Vamos destacar alguns comandos:

23
Assunto NOVO: Somatórios Profa. Angela
Trecho destacado:
Resultado impresso:
Para N = 10, o programa imprimiu a sequência:

1 2 3 4 5 6 7 8 9 10

E, se, no lugar de imprimir o valor de K, quiséssemos somar cada valor de K, resultando no valor do somatório?
Por exemplo, se o N = 10:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

Assim, no lugar de imprimir os números, de 1 a 10, imprimiríamos apenas o valor 55.

Que comando deveríamos colocar no lugar do cout???

24
Assunto NOVO: Somatórios Profa. Angela

Como representar um somatório num programa

Considere o seguinte somatório: S = 1 + 2 + 3 + 4 + 5 + ... + N

A representação matemática, do somatório é dada por:


𝑁

𝑆 = ෍𝑘
𝑘=1

k= 1
Esse é o processo repetitivo
while (k <=N)

A fórmula para o cálculo do somatório é dado por: 𝑆 = 𝑆 + 𝑘 Memorize essa


representação!!!
e, o valor de inicialização de S deve ser o elemento neutro da adição: S = 0;
25
Assunto NOVO: Somatórios Profa. Angela

int main()
{
int N, K = 1, S = 0; Observe que utilizamos três variáveis:
cout<<"Digite um valor para N: ";
cin >> N;
N : quantidade de números que desejamos
somar;
cout<<"\n\n Soma dos " << N << " primeiros Naturais: ";
while ( K<= N ) S: variável para acumular o somatório e foi
{ inicializada com 0 (zero);
S = S + K;
K++; K: variável que, além de ser o componente do
} incremento do somatório, é utilizada no
cout << S;
controle do processo repetitivo;
cout << "\n\n\n";
return 0;
}

26
Assunto NOVO: Somatórios Profa. Angela
Vamos ver outros exemplos:

1. Construir um programa que calcula e imprime, o valor do somatório dos N primeiros pares, começando em 2.

O que se deseja calcular e imprimir? Supor ler N = 4 ➔ S = 2 + 4 + 6 + 8


N

o somatório é calculado por: S = S + K; onde, nesse caso, K = 2, 4, 6, ...... com incremento de 2 em 2: K=K+2

Para descobrir como terminar (condição do processo repetitivo), vamos examinar o valor do último número a ser
somado no somatório, para vários valores de N:

N= K
1 2 Repare no último elemento a ser
2 2, 4 somado, para cada valor de N, é
3 2, 4, 6 igual à 2*N
4 2, 4, 6, 8
5 2, 4, 6, 8, 10 assim, o controle do processo repetitivo pode ser:
.... ( K<= 2*N )
27
Contadores e Somatórios Profa. Angela
Veja o programa como ficou:

Valor inicial de K = 2

Valor inicial de S = 0

controle

somatório

incremento

Slide 28 28
Contadores e Somatórios Profa. Angela

Exemplo 2: calcular o somatório de N números inteiros, lidos, pela variável X. O valor de N, também,
deverá ser lido.
Deseja-se calcular o seguinte somatório:

S = S + X; onde, X deve ser lido, N vezes e, S inicia com 0 (zero)

.......
S = 0;
O que o comando while deve repetir, N vezes? ......
while( )
• a leitura de X; {
• e, o somatório cin>> X;
S = S + X;
}

Como podemos controlar a repetição, N vezes ?

29
Assunto NOVO: Somatórios Profa. Angela

Controle das repetições:

como repetir N vezes, a leitura e o somatório, :

• precisamos escolher uma variável para controlar as N repetições:


• Vamos usar a variável K, onde K começa em 1 e, com o incremento de 1 em 1, até atingir N;

Isto é, K = 1, 2, 3, 4, 5, ..., N  representa o número de vezes que o processo será repetido.


Então:
para K = 1 representa a 1ª repetição
para K = 2 representa a 2ª repetição
para K = 3 representa a 3ª repetição
.....
para K = N representa a Nª repetição
30
Assunto NOVO: Somatórios Profa. Angela

Observe cada linha do programa e o print do


console com o resultado:

Valores
digitados

Slide 31
Assunto NOVO: Somatórios Profa. Angela

Exemplo 3: construir um programa que calcula e imprime o valor do seguinte somatório:


1 1 1 1
𝑆 = 1 + + + + ⋯+ , onde N deve ser lido
2 3 4 𝑁

Como podemos representar essa soma?


algum elemento repetidor
Lembrando que o somatório é dado por: S=S+ ?
que se deseja somar

No exemplo, veja,
que o que se repete
𝑛𝑢𝑚 1 1 1 1 1
é uma fração : = , , , , …,
𝑑𝑒𝑛 1 2 3 4 𝑁
num/ den

Assim, o somatório fica:


S = S + num / den ;
32
Assunto NOVO: Somatórios Profa. Angela

S = S + num / den ;

𝑛𝑢𝑚 1 1 1 1 1
= , , , , …,
𝑑𝑒𝑛 1 2 3 4 𝑁

Observando as frações, vemos que:

• num: o numerador de todos se repete e é igual à 1 ➔ num =1;


• den: o denominar varia de 1 até N, com incremento de 1 em 1➔ den = 1, 2, 3,..., N

Assim, o somatório e o processo repetitivo ficam: S = S + 1 / den;

com den iniciando em 1, com incremento de 1 em 1, até atingir N

Observação: como há fração no somatório então vamos trabalhar com S e den como REAIS - float
33
Assunto NOVO: Somatórios Profa. Angela

S e den são do tipo float

34
Assunto NOVO: Somatórios Profa. Angela

A seguir, é uma versão do programa anterior. Acrescentei a impressão dos valores intermediários do somatório
para acompanharem o processo repetitivo.

Observe cada linha do programa e o print do


console com o resultado:

Slide 35
Material Aula Teórica – correção atividade anterior e conceito novo: Somatórios Profa. Angela

Esse é o material da aula teórica. É muito importante que você tenha estudado com muita atenção.

A atividade da aula teórica consiste em refazer os 3 programas exemplos dos slides de números : 28 , 31 e 35, trocando
o comando while por for. Devem ser anexados o programa cpp, num único arquivo txt, no escaninho até sexta-feira 27
de março de 2020, às 14h00.

Estarei no chat online, no AVA da sala TEÓRICA, quarta-feira de 08h00 até 12h00, para as duvidas. Em outros
horários, da semana, por email:
- profa.angela@gmail.com
- angel@puc-campinas.edu.br

36

Você também pode gostar