Buscar

Algo e estrutura de dados estruturas de repeticao

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

MC 102 – Algoritmos e programac¸a˜o de computadores
Estruturas de repetic¸a˜o
• Considere o algoritmo de Euclides para o ca´lculo do MDC:
Entrada: dois inteiros positivos m e n;
Sa´ıda: o ma´ximo divisor comum de m e n;
1. x← m;
2. y ← n;
3. repita
4. r ← resto(x, y);
5. x← y;
6. y ← r;
7. ate´ que r = 0;
8. retorne x.
1
MC 102 – Algoritmos e programac¸a˜o de computadores
Estruturas de repetic¸a˜o
• Permitem que uma sequeˆncia de comandos seja executada
repetidas vezes.
• A execuc¸a˜o termina quando um crite´rio de parada e´ atingido.
• Veremos:
– while;
– do. . .while;
– for.
2
MC 102 – Algoritmos e programac¸a˜o de computadores
Comando while
• No while, o crite´rio de parada e´ testado antes que a sequeˆncia
de comandos da ac¸a˜o seja executada.
Condic¸a˜o
True
False
Ac¸a˜o
Sintaxe: while (expressa˜o)
ac¸a˜o
3
MC 102 – Algoritmos e programac¸a˜o de computadores
Um exemplo simples – validac¸a˜o de dados de entrada
• Ler nu´meros ate´ que seja digitado um nu´mero positivo;
4
MC 102 – Algoritmos e programac¸a˜o de computadores
Um exemplo simples – validac¸a˜o de dados de entrada
• Ler nu´meros ate´ que seja digitado um nu´mero positivo;
#include < stdio.h >
int main(){
int num;
printf(‘‘Digite um nu´mero positivo: \n”);
scanf(‘‘%d’’, &num);
while (num <= 0) {
printf(‘‘ERRO: nu´mero na˜o positivo! \n”);
printf(‘‘Digite um nu´mero positivo: \n”);
scanf(‘‘%d’’,&num);
}
. . .
return 0;
}
4
MC 102 – Algoritmos e programac¸a˜o de computadores
• Programa que leia n nu´meros e calcule a me´dia aritme´tica
destes nu´meros.
5
MC 102 – Algoritmos e programac¸a˜o de computadores
• Programa que leia n nu´meros e calcule a me´dia aritme´tica
destes nu´meros.
#include < stdio.h >
int main()
{
int n, cont = 1;
float num, acum = 0;
printf(‘‘Digite quantos nu´meros:\n”);
scanf(‘‘%d”, &n)
while (cont <= n) {
scanf(‘‘%f”,&num);
acum = acum + num;
cont++;
}
printf(‘‘A me´dia e´ %.3f\n”, acum / n);
return 0;
}
5
MC 102 – Algoritmos e programac¸a˜o de computadores
• Quais sa˜o os valores de m e n apo´s a execuc¸a˜o do trecho de
co´digo abaixo.
6
MC 102 – Algoritmos e programac¸a˜o de computadores
• Quais sa˜o os valores de m e n apo´s a execuc¸a˜o do trecho de
co´digo abaixo.
int n = 123456789;
int m = 0
while (n != 0) {
m = (10 * m) + (n % 10);
n = n / 10;
}
6
MC 102 – Algoritmos e programac¸a˜o de computadores
• Programa que leia 10 nu´meros pares na˜o negativos e calcule a
me´dia aritme´tica destes nu´meros.
7
MC 102 – Algoritmos e programac¸a˜o de computadores
• Programa que leia 10 nu´meros pares na˜o negativos e calcule a
me´dia aritme´tica destes nu´meros.
#include < stdio.h >
int main()
{
int n, cont=0, acum=0;
printf(‘‘Digite 10 nu´meros pares:\n”);
while (cont<10) {
scanf(‘‘%d”,&n);
if (n>=0 && !(n%2)) {
acum = acum + n;
cont++;
}
}
printf(‘‘A me´dia e´ %.3f\n”, acum / 10.0);
return 0;
}
7
MC 102 – Algoritmos e programac¸a˜o de computadores
Imprimir os 20 primeiros nu´meros de Fibonacci
8
MC 102 – Algoritmos e programac¸a˜o de computadores
Imprimir os 20 primeiros nu´meros de Fibonacci
#include < stdio.h >
int main(){
int f1=0, f2=1, cont=2, aux;
printf(‘‘0, 1”);
while (cont < 20) {
aux = f2;
f2 = f1 + f2;
f1 = aux;
printf(‘‘, %d”, f2);
cont++;
}
printf(‘‘.\n”);
return 0;
}
8
MC 102 – Algoritmos e programac¸a˜o de computadores
• Programa que leia um nu´mero inteiro e imprima quantos d´ıgitos este
nu´mero possui.
9
MC 102 – Algoritmos e programac¸a˜o de computadores
• Programa que leia um nu´mero inteiro e imprima quantos d´ıgitos este
nu´mero possui.
#include < stdio.h >
#include < math.h >
int main()
{
int n, cont;
scanf(‘‘%d”, &n);
n = abs(n);
cont = 1;
n = n / 10;
while (n != 0) {
cont++;
n = n / 10;
}
printf(‘‘%d d´ıgitos.\n”, cont);
return 0;
}
9
MC 102 – Algoritmos e programac¸a˜o de computadores
Comando do – while
• O crite´rio de parada e´ testado apo´s a sequeˆncia de comandos da ac¸a˜o
ser executada.
– A ac¸a˜o e´ sempre executada pelo menos uma vez.
Condic¸a˜o
True
False
Ac¸a˜o
Sintaxe: do
ac¸a˜o
while (expressa˜o)
10
MC 102 – Algoritmos e programac¸a˜o de computadores
Validac¸a˜o de dados de entrada
11
MC 102 – Algoritmos e programac¸a˜o de computadores
Validac¸a˜o de dados de entrada
#include < stdio.h >
int main()
{
int num;
do {
printf(‘‘Digite um nu´mero positivo: \n”);
scanf(‘‘%d’’,&num);
} while (num <= 0)
. . .
return 0;
}
11
MC 102 – Algoritmos e programac¸a˜o de computadores
Estruturas de repetic¸a˜o
• Considere o algoritmo de Euclides para o ca´lculo do MDC:
Entrada: dois inteiros positivos m e n;
Sa´ıda: o ma´ximo divisor comum de m e n;
1. x← m;
2. y ← n;
3. repita
4. r ← resto(x, y);
5. x← y;
6. y ← r;
7. ate´ que r = 0;
8. retorne x.
12
MC 102 – Algoritmos e programac¸a˜o de computadores
Algoritmo de Euclides
#include < stdio.h >
int main(){
int m, n, x, y, r;
scanf(‘‘%d%d”,&m,&n);
x = m;
y = n;
do {
r = x % y;
x = y;
y = r;
} while (r>0);
printf(‘‘MDC de %d e %d e´ %d\n”, m, n, x);
return 0;
}
13
MC 102 – Algoritmos e programac¸a˜o de computadores
• Ca´lculo de xk, x, k inteiros. Retorne: xk se k > 0; 1 caso contra´rio.
14
MC 102 – Algoritmos e programac¸a˜o de computadores
• Ca´lculo de xk, x, k inteiros. Retorne: xk se k > 0; 1 caso contra´rio.
#include < stdio.h >
int main()
{
int x, k;
long int pot = 1;
scanf(‘‘%d%d”,&x, &k);
if (k>0)
do {
pot = pot * x;
k−−;
} while (k>0);
printf(‘‘%d\n”, pot);
return 0;
}
14
MC 102 – Algoritmos e programac¸a˜o de computadores
• Ideia espertinha −→ k = 2i
int main() {
int x, k;
long int pot=1;
scanf(‘‘%d%d”,&x, &k);
if (k>0) {
pot = x;
k = k / 2;
while (k > 0) {
pot = pot * pot;
k = k / 2;
}
}
printf(‘‘%d\n”, pot);
return 0;
}
15
MC 102 – Algoritmos e programac¸a˜o de computadores
Exerc´ıcios
1. Refac¸a os programas feitos em sala trocando do – while por
while e vice-versa.
2. Modifique o programa dos nu´meros de Fibonacci para que o
nu´mero de nu´meros impressos seja um dado fornecido pelo
usua´rio. Imprima cinco nu´meros por linha (a menos da u´ltima
linha que podera´ ter menos de cinco nu´meros).
3. Generalize a ide´ia espertinha de fazer o ca´lculo de xk,
considerando qualquer k ≥ 0.
xk =


x
k
2 . x
k
2 , se k ≡ 0 (mod 2);
x
k−1
2 . x
k−1
2 . x, caso contra´rio.
16
MC 102 – Algoritmos e programac¸a˜o de computadores
Comando for
Sintaxe: for ( expresssa˜o 1; expressa˜o 2; expressa˜o 3)
ac¸a˜o
• Expressa˜o 1: e´ usada para iniciar as varia´veis necessa´rias na
estrutura de repetic¸a˜o – e´ avaliada uma u´nica vez, antes da
primeira iterac¸a˜o;
• Expressa˜o 2: condic¸a˜o de parada – e´ avaliada no in´ıcio de cada
iterac¸a˜o; verdadeira quando seu valor e´ diferente de zero;
• Expressa˜o 3: atualizac¸a˜o das varia´veis envolvidas na condic¸a˜o
de parada – avaliada ao final de cada iterac¸a˜o.
17
MC 102 – Algoritmos e programac¸a˜o de computadores
• Ca´lculo de n!, n inteiro, na˜o muito grande. Retorne: n! se
n ≥ 0; −1 caso contra´rio.
#include < stdio.h >
int main() {
int n, i;
long int fat = 1;
scanf(‘‘%d”,&n);
if (n>=0)
for (i = 1; i<= n; ++i)
fat = fat * i;
else
fat = -1;
printf(‘‘%d\n”, fat);
return 0;
}
18
MC 102 – Algoritmos e programac¸a˜o de computadores
Exerc´ıcios
1. Refac¸a todos os exemplos anteriores nos quais foram usadas
estruturaswhile ou do – while usando for. Quando poss´ıvel
melhore os algoritmos.
2. Fac¸a um programa para ler um nu´mero positivo n ≥ 2 e decidir
se este nu´mero e´ primo.
• Um nu´mero positivo n ≥ 2 e´ primo se e´ divis´ıvel apenas por
1 e por n.
– Note que o nu´mero 1 na˜o e´ primo.
19
MC 102 – Algoritmos e programac¸a˜o de computadores
Ler um nu´mero positivo n ≥ 2 e decidir se este
nu´mero e´ primo
Soluc¸a˜o 1
• Armazenar a informac¸a˜o a priori sobre todos os inteiros
representa´veis.
– Pre´-processamento pode ser muito caro; e
– quantidade de memo´ria necessa´ria pode ser proibitiva.
20
MC 102 – Algoritmos e programac¸a˜o de computadores
Soluc¸a˜o 2
• Passo 1: Lemos o nu´mero, n, que queremos saber se e´ primo.
• Passo 2: Verificamos se n e´ divis´ıvel por i, ∀i ∈ [2, n− 1].
– Se sim para algum i: conclu´ımos que o nu´mero na˜o e´ primo.
• Passo 3: Se n na˜o e´ divis´ıvel por nenhum i ∈ [2, n− 1]
conclu´ımos que e´ primo.
21
MC 102 – Algoritmos e programac¸a˜o de computadores
#include < stdio.h >
int main()
{
int n, i, primo = 1;
printf(‘‘Digite um nu´mero maior ou igual a 2.\n”);
scanf(‘‘%d”, &n);
if (n>=2) {
for (i = 2; i < n; i++)
if (!(n % i)) primo = 0;
if (primo)
printf(‘‘O nu´mero e´ primo!\n”);
else
printf(‘‘O nu´mero na˜o e´ primo!\n”);
}
return 0;
}
22
MC 102 – Algoritmos e programac¸a˜o de computadores
Soluc¸a˜o 3
• Passo 1: Lemos o nu´mero, n, que queremos saber se e´ primo.
• Passo 2: Procuramos por divisores de n observando que
– Se n for par e n 6= 2, enta˜o n na˜o e´ primo.
– Se n na˜o e´ primo, enta˜o n = p.q.
∗ Logo, podemos supor p ≤ √n, com p, q ≥ 2.
• Passo 3: Se algum divisor de n for encontrado, enta˜o n na˜o e´
primo. Caso contra´rio, n e´ primo.
23
MC 102 – Algoritmos e programac¸a˜o de computadores
#include <stdio.h>
#include <math.h>
int main()
{
int n, i, sup, primo = 1;
printf(‘‘Digite um nu´mero maior ou igual a 2.\n”);
scanf(‘‘%d”, &n);
if (n>=2) {
sup = sqrt(n);
for (i=2; primo && (i <= sup) ; i++)
if (!(n%i)) primo = 0;
if (primo) printf(‘‘O nu´mero e´ primo!\n”);
else printf(‘‘O nu´mero na˜o e´ primo!\n”);
}
return 0;
}
24
MC 102 – Algoritmos e programac¸a˜o de computadores
Comando break
• Usado para alterar o fluxo normal do programa;
• E´ usado dentro de estruturas de repetic¸a˜o (em conjunto com
uma estrutura condicional), ou dentro do comando switch;
• Ocasiona a sa´ıda imediata destas estruturas;
– Ocasiona a sa´ıda apenas da estrutura mais interna (apenas
um n´ıvel).
25
MC 102 – Algoritmos e programac¸a˜o de computadores
Comando break
• E´ conveniente? Boa pra´tica de programac¸a˜o?
– Necessa´rio no caso do switch;
– Quando bem usado, pode gerar um co´digo mais conciso e
simples de entender.
while (1) {
scanf(‘‘%lf”, &x);
if (x < 0.0) break;
printf(‘‘%f\n”, sqrt(x));
}
26
MC 102 – Algoritmos e programac¸a˜o de computadores
Comando continue
• Usado para alterar o fluxo normal do programa;
• E´ usado dentro de estruturas de repetic¸a˜o (em conjunto com
uma estrutura condicional).
• Transfere o controle para o final da iterac¸a˜o corrente.
– No caso de while e do – while a condic¸a˜o de parada e´
avaliada imediatamente;
– No caso de for, o controle e´ passado para o passo de
incremento.
27
MC 102 – Algoritmos e programac¸a˜o de computadores
Comando continue
• E´ conveniente? Boa pra´tica de programac¸a˜o?
– Quando bem usado, pode gerar um co´digo mais conciso e
simples de entender.
while (i<10) {
scanf(‘‘%d”,&num);
if (num % 2) continue;
acum = acum + num;
i++;
}
28
MC 102 – Algoritmos e programac¸a˜o de computadores
Comando goto
Na˜o pode ser usado!!!!
Nunca!
De jeito nenhum!
Jamais!
• Estrutura que altera o fluxo do programa. Pode interferir
completamente no conceito de programac¸a˜o estruturada.
• Deve ser evitado.
• Na˜o vou ensinar!!! >:(
29

Outros materiais