Estruturas de repetição (Ciclos) -...
Embed Size (px)
Transcript of Estruturas de repetição (Ciclos) -...

Estruturas de repetição (Ciclos)
1Universidade Metodista de Angola, Departamento de Engenharias
Introdução
Vamos começar por tentar resolver os seguintes exercícios com base nos conhecimentosQue já temos até agora.
Problema 1:
Escreva um programa em ANSI-C que escreve os primeiros 10 números inteiros no ecrã.
Problema 2:
Escreva um programa em C que escreve os primeiros 100 números inteiros no ecrã.
Problema 3:
Escreva um programa em C que escreve os primeiros 1000 números inteiros no ecrã.
Problema 4:
Escreva um programa em C que escreve os primeiros 10.000 números inteiros no ecrã.

Estruturas de repetição (Ciclos)
2Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
printf(“1”);printf(“2”);printf(“3”);printf(“4”);printf(“5”);printf(“6”);printf(“7”);printf(“8”);printf(“9”);printf(“10”);
exit(0);}
Solução do Problema 1
#include <stdio.h>#include <stdlib.h>
int main(){
putchar(‘1’);putchar(‘2’);putchar(‘3’);putchar(‘4’);putchar(‘5’);putchar(‘6’);putchar(‘7’);putchar(‘8’);putchar(‘9’);putchar(‘10’); //erro
exit(0);}
ou
#include <stdio.h>#include <stdlib.h>
int main(){
putchar(‘1’);putchar(‘2’);putchar(‘3’);putchar(‘4’);putchar(‘5’);putchar(‘6’);putchar(‘7’);putchar(‘8’);putchar(‘9’);putchar(‘1’);putchar(‘0’);
exit(0);}
ou
#include <stdio.h>#include <stdlib.h
int main(){
puts(“1”);puts(“2”);puts(“3”);puts(“4”);puts(“5”);puts(“6”);puts(“7”);puts(“8”);puts(“9”);puts(“10”);
exit(0);}
Solução 1 Solução 4Solução 3Solução 2
ou

Estruturas de repetição (Ciclos)
3Universidade Metodista de Angola, Departamento de Engenharias
Solução do Problema 1
Outputs:
Solução 1 Solução 2 Solução3 Solução4
imprime o seguinte: não funciona imprime o seguinte: imprime o seguinte:
12345678910 12345678910 123455678910

• Resolução do Problema 2, tinha que se usar 100 instruções printf ou puts. • Resolução do Problema 3, tinha que se usar 1000 instruções printf ou puts.• Resolução do Problema 4, tinha que se usar 10.000 instruções printf ou puts.
• Não é a melhor forma de programar.• Existem instruções em C que permitem fazer repetições• Essas instruções são as seguintes:
• Instrução while também conhecido por ciclo while• Instrução do-while• Instrução for também conhecido por ciclo for
– Essas instruções são as mesmas na linguagem C++, linguagem java.– Quando se diz que são as mesmas quer dizer a sintaxe é exactamente igual nessas linguagens de
programação.– No visual basic a sintaxe é um pouco diferente.
Estruturas de repetição (Ciclos)
4Universidade Metodista de Angola, Departamento de Engenharias

• Vamos então estudar cada uma delas, começando pela sintaxe e depois exemplos.• Lembrem-se que queremos resolver o problema 2, problema 3 e o problema
4.• Instrução while
Sintaxe:while ( condição )
instrução ou bloco de instruções;
Estruturas de repetição (Ciclos)
5Universidade Metodista de Angola, Departamento de Engenharias
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
Fluxograma da instrução while
Interpretação: enquanto a condição for verdadeira executar o bloco de instruções

Estruturas de repetição (Ciclos)
6Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
while( i <= 10 ){
printf(“%d”,i);i++;
}exit(0);}
Solução do problema 1Usando a instrução while
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
while( i <= 100 ){
printf(“%d”,i);i++;
}exit(0);}
Solução do problema 2Usando a instrução while
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
while( i <= 1000 ){
printf(“%d”,i);i++;
}exit(0);}
Solução do problema 3Usando a instrução while
Instrução while

• Instrução do-whileSintaxe:
doinstrução ou bloco de instruções;
while ( condição );
Estruturas de repetição (Ciclos)
7Universidade Metodista de Angola, Departamento de Engenharias
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
Fluxograma da instrução do-while
Interpretação: do fazer while enquanto
Fazer, enquanto….As instruções são executadas pelo menos
uma vez.

Estruturas de repetição (Ciclos)
8Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
do{
printf(“%d”,i);i++;
}while( i <= 10 );exit(0);}
Solução do problema 1Usando a instrução do-while
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
do{
printf(“%d”,i);i++;
}while( i <= 100 );exit(0);}
Solução do problema 2Usando a instrução do-while
#include <stdio.h>#include <stdlib.h>
int main(){
int i = 1;
do{
printf(“%d”,i);i++;
}while( i <= 1000 );exit(0);}
Solução do problema 3Usando a instrução do-while
Instrução do-while

Estruturas de repetição (Ciclos)
9Universidade Metodista de Angola, Departamento de Engenharias
• Instrução forSintaxe:
for( inicializações ; condição ; pos-instrução)instrução ou bloco de instruções;
Fluxograma da instrução for
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
inicializações
Pós-instrução
for( i = 1 ; i <= 10 ; i++ ){printf(“%d”,i);
}
Exemplo:

Estruturas de repetição (Ciclos)
10Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 100 ; i++){
printf(“%d”,i);}
exit(0);}
Solução do problema 1Usando a instrução for
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 10 ; i++ ){
printf(“%d”,i);}
exit(0);}
Solução do problema 2Usando a instrução for
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 1000 ; i++){
printf(“%d”,i);}
exit(0);}
Solução do problema 3Usando a instrução forInstrução for

Estruturas de repetição (Ciclos)
11Universidade Metodista de Angola, Departamento de Engenharias
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo condiçãoNão Sim
Instruções; ou bloco de instruções
Entrada do ciclo
Saída do ciclo
inicializações
Pós-instrução
Fluxograma do ciclo while Fluxograma do ciclo do-while Fluxograma do ciclo for
Resumo
Testa a condição antes de Executar as instruções
As instruções são executadasZero ou mais vezes
Testa a condição depois de Executar as instruções
As instruções são executadasUma ou mais vezes
Testa a condição antes de Executar as instruções
As instruções são executadasZero ou mais vezes

• Instrução break1. Terminar a execução das instruções dentro da instrução switch.2. A instrução break, quando aplicada a um ciclo, termina o correspondente
ciclo.
• Instrução continue– A instrução continue dentro de um ciclo, permite passar para próxima
iteração.
Estruturas de repetição (Ciclos)
12Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 30 ; i++ ){
if(i==15)break;
else printf(“%d ”,i);
}exit(0);}
Exemplo usando a instrução break
O que é que esse programa imprime no ecrã?
Resposta: O programa imprime:1 2 3 4 5 6 7 8 9 10 11 12 13 14
Imprime todos os números inteiros entre 0 e 15

Estruturas de repetição (Ciclos)
13Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main(){
int i;
for( i = 1 ; i <= 30 ; i++ ){
if(i%2==0)continue;
else printf(“%d ”,i);
}exit(0);}
Exemplo usando a instrução continue
O que é que esse programa imprime no ecrã?
Resposta: O programa imprime:1 3 5 7 9 11 13 15 16 17 19 21 23 25 27 29
Imprime todos os números impares entre 0 e 30

Estruturas de repetição (Ciclos)
14Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>
int main(){
int i, j, n;char c;
printf("introduza um número:");scanf("%d",&n);//c=getchar();printf("introduza um caracter:");scanf("%c",&c);
for( i = 1 ; i <= n ; i++){
for( j = 1 ; j <= n ; j++)putchar(c);putchar('\n');
}exit(0);
}
O programa exemplifica dois ciclos for Encadeados.
Este exemplo foi tirado do livro do prof.Luis Damas. (pag 150).
O programa pede ao utilizador que insiraUm número e um caracter, e posteriormenteEscreve n linhas, cada uma delas com n caracteres.
exemplo:
Introduza um número: 4Introduza um caracter:#Output:# # # # # # # ## # # ## # # #
Os ciclos podem ser encadeados

• Ciclos que nunca terminam, ou seja, a condição é sempre verdadeira• Exemplos
• Esses tipos de ciclos são normalmente usados quando não se sabe a partida o número de vezes que se vai iterar o ciclo.
• Para terminar o ciclo infinito usa-se a instrução break ou return;
• No slide que se segue, é mostrado dois exemplos de terminação de ciclos infinitos usando as instruções break e return.
• O exemplo que se segue, permite esclarecer a diferença entre a instrução break e a instrução return.
Estruturas de repetição (Ciclos)
15Universidade Metodista de Angola, Departamento de Engenharias
Ciclos infinitos
while (1)instruções;
doInstruções; while(1);
for( ; ; )instruções;

#include <stdio.h>#include <stdlib.h>
int main()
int i=1;
for( ; ; ){
if(i==3)break;
i++;}printf("Rubem");exit(0);
}
Estruturas de repetição (Ciclos)
16Universidade Metodista de Angola, Departamento de Engenharias
#include <stdio.h>#include <stdlib.h>
int main()
int i=1;
for( ; ; ){
if(i==3)return;
i++;}printf("Rubem");exit(0);
}
Output:Rubem
Output:None - Nothing
O break termina o ciclo O return sai da função, ou seja, sai da função main

Exercícios
17Universidade Metodista de Angola, Departamento de Engenharias
Escreva um programa em Linguagem C que lê um inteiro positivo e determina se esse número é primo.Solução:
O número 7 é primo?
7 % 1 = 07 % 2 = 17 % 3 = 17 % 4 = 37 % 5 = 27 % 6 = 17 % 7 = 0
O número 6 é primo?
6 % 1 = 06 % 2 = 06 % 3 = 06 % 4 = 26 % 5 = 16 % 6 = 0
iresto
num
resto = 0 e i = num
resto = 0 e i ≠ num

18Universidade Metodista de Angola, Departamento de Engenharias
inicio
Ler (num)
i = 2
resto=num % i
resto == 0 e num == i ?
resto == 0 e num ≠ i ?
“é primo”
“não é primo”
i <= num ?
i++
fim
sim
não
sim
não
sim
não
do-while clcle
#include <stdio.h>#include <stdlib.h>
int main(){
int num,i,resto;
i=2;printf("insira um inteiro positivo:");scanf("%d",&num);do{
resto = num % i;if(resto == 0 && num == i){printf("\n%d é primo\n",num);
}elseif(resto == 0 && num != i){
printf("\n%d ñ é primo\n",num);break;
}i++;
}while(i <= num);
exit(0);}
Solução 1

19Universidade Metodista de Angola, Departamento de Engenharias
inicio
Ler (num)
divisor = 2resto=num % divisor
resto != 0
resto = num % divisor
divisor ++
num == divisor ?
“é primo” “é primo”
fim
sim
sim
não
não
while cicle
#include <stdio.h>#include <stdlib.h>
int main(){int num,divisor,resto;
printf(“insira um numero:");scanf("%d",&num);
divisor=2;
resto = num % divisor;
while(resto != 0){divisor++;
resto = num % divisor;}
if(divisor == num)printf("%d é primo",num);
elseprintf("%d ñ é primo",num);
exit(0); }
Solução 2

20Universidade Metodista de Angola, Departamento de Engenharias
Esses algoritmo ou programas só funcionampara números inteiros maiores que 1
#include <stdio.h>#include <stdlib.h>
int main(){int num,i,resto;i=2;printf("insira um inteiro positivo:");scanf("%d",&num);
if(num == 1){ /*Para n = 1*/printf(“%d é primo”,num);return;
}
do{
resto = num % i;if(resto == 0 && num == i){
printf("\n%d é primo\n",num);}else
if(resto == 0 && num != i){printf("\n%d ñ é primo\n",num);break;
}i++;
}while(i <= num);
exit(0);}
#include <stdio.h>#include <stdlib.h>
int main(){int num,divisor,resto;
printf(“insira um numero:");scanf("%d",&num);divisor=2;
if(num == 1){//para n=1printf(“%d é primo”,num);return;
}resto = num % divisor;
while(resto != 0){divisor++;
resto = num % divisor;}
if(divisor == num)printf("%d é primo",num);
elseprintf("%d ñ é primo",num);
exit(0); }