• Nenhum resultado encontrado

Decisões e Repetições

N/A
N/A
Protected

Academic year: 2021

Share "Decisões e Repetições"

Copied!
39
0
0

Texto

(1)

Decisões e Repetições

!

Decidir se uma seção de código deve ser executada

ou não ou o número de vezes que uma repetição

deve ser executada, depende do resultado de certas

expressões => verdadeiro ou falso => expressões

que em geral envolve uma espécie de operador

chamado de operador relacional.

!

Operador relacional compara dois valores. As

comparações envolvem relações do tipo, é igual,

menor que e maior que. O resultado dessas

comparações é verdadeiro ou falso.

(2)

Operador Significado

> Maior que

< Menor que

== Igual

!= Diferente

>= Maior ou igual

<= Menor ou igual

(3)

#include <iostream.h>

void main( )

{ int num;

cout<<“Entre com um número:”:

cin>>num;

cout<<“num<10 é “<< (num<10)<<endl

<<“num>10 é “<<(num>10)<<endl

<<“num==10 é “<<(num==10)<<endl;

}

Entre com um número: 20 num<10 é 0

(4)

!

Repetição usando while

sintaxe: while (expressão) ou while (expressão)

comando ; { comando 1;

comando 2; ...

comando n ;

}

!

Calcular o valor da primeira potencia de2 maior

que 1000.

!

Calcular a primeira potencia de 2 maior que 1000.

(5)

// programa para calcular a primeira potência de 2>1000

#include <iostream.h>

void main( )

{ int produto = 2;

while ( produto <= 1000 )

produto = produto * 2 ;

cout<<“primeira potencia de 2 maior que 1000=“

<<produto << endl ;

}

!

Exercício: Uma classe de 10 estudantes fez um teste. As

notas (valores entre 0 e 10) estão disponíveis. Faça um

(6)

!

Generalizar o problema, ou seja, usar o programa

para calcular a média de turmas com quaisquer

número de alunos.

!

Como e quando parar a leitura???

!

Usar um “sentinela” ou “flag” que indique o fim dos

dados. Ele deve ser um valor que não pode ser

confundido com a entrada.

!

Para o nosso problema podemos usar um número

(7)

!

Formatação:

! setprecision(2) " indica que a variável após essa instrução deve ser escrita com dois dígitos depois do ponto.

! Setioflags(ios::fixed | ios:::showpoint) " duas opções de

formatação separadas pelo separador de opção |

! ios::fixed " formato de pt. Fixo, oposto da notação científica (xxxExx)

! ios::showpoint " força o pt. Decimal e imprime os dígitos depois do pt. Mesmo que sejam zero. Ex: 88.00 sem essa opção seria 88. Usando essas opções o valor é arredondado. Ex: 87.945 " 87.95

(8)

// media usando sentinela para controlar a repetição #include <iostream.h>

#include <iomanip.h> void main( )

{ float media, nota, soma_total = 0 ; int contador = 0;

cout<<“Entre com uma nota (-1 para terminar):”; cin>>nota;

while ( nota != -1)

{ soma_total = soma_total + nota ; contador = contador + 1 ;

cout<< “Entre com uma nota (-1 para terminar):”; cin>>nota;

}

if (contador != 0)

{ media = soma_total/contador ;

cout <<“Media da classe é:”<<setprecison(2) <<setiosflags(ios::fixed| ios::showpoint) <<media<<endl;

(9)

!

Controlador de uma repetição

1) o nome da variável de controle (ou contador

do loop);

2) O valor inicial da variável de controle;

3) A condição de teste para o valor final da

variável de controle ( ou seja, se o loop deve

ou não continuar)

4) O incremento (ou decremento) pelo qual a

variável vai ser modificada a cada passagem

do loop;

(10)

// repetição controlada por contador

#include <iostream.h>

void main( )

{ int contador = 1 ; //

nome e valor inicial da variável de controle

while ( contador <= 10 ) // condição de teste

{ cout << contador << endl ;

++ contador ; // incremento

}

(11)

!

A estrutura de repetição for =>controla

sozinha todos os detalhes do controlador de

repetição

expressão 1;

while (expressão 2)

{ comando;

expressão 3 ;

}

expressão 1 =>valor inicial da variável de controle

expressão 2 =>valor final da variável de controle

expressão 3 => incremento da variável de controle

(12)

!

Comando for => sintaxe

a) for ( j = 0 ; j <15 ; j++ ) comando ; expressão inicial expressão de teste expressão de incremento

corpo da repetição com um único comando

b) for ( j = 0 ; j <15 ; j++ ) { comando ; comando ; comando ; } c o r p o d a r e p e t i ç ã o c o m múltiplos comandos

(13)

#include <iostream.h>

void main( )

{ for (int j=0; j<15; j++)

cout<< j * j <<“ “;

cout<<endl;

}

0 1 4 9 16 25 36 49 64 81 100 121 144 169 196

(14)

#include <iostream.h> void main( )

{ int soma = 0 ;

for ( int num = 2; num <= 100; num += 2) soma += num ;

cout << “A soma é :” << soma << endl ; }

#include <iostream.h> void main( )

{ for (int num = 2, int soma = 0; num <=100; soma+=num , num += 2) ;

(15)

!

As três expressões são opcionais:

! se expressão 1 é omitida # variável de controle foi iniciada em algum outro pt. do programa

! se expressão 2 é omitida # loop infinito

! se expressão 3 é omitida # incremento é calculado por

comandos dentro do corpo do for.

!

for (j=0, alfa=100; j<50; j++, beta--)

!

for (; j>50; j--)

(16)

!

Exercício: Uma pessoa investiu R$1000,00 numa

aplicação que rende 5% de juros por ano. Assumindo que

os juros permanecem na conta, calcule e imprima a

quantidade de dinheiro na conta ao final de 10 anos, ano

a ano. Use a seguinte fórmula para determinar esse valor:

a = p (1 + r)

n

onde :

p => é o investimento inicial

r => é a taxa de juros anual

n => é o número de anos

(17)

#include <iostream.h> #include <iomanip.h> #include <math.h> void main( )

{ double valor_final, valor_inicial = 1000.00, taxa = 0.05;

cout << “ANO”<< setw(18) << “VALOR NA CONTA” <<endl ;

for ( int ano = 1; ano <= 10; ano++)

{ valor_final = valor_inicial * pow (1.0 + taxa,ano); cout<< setw(3) << ano

<< setiosflags(ios::fixed | ios:: showpoint)

<< setw(18) << setprecision (2) << valor_final << endl ; }

(18)

ANO VALOR NA CONTA

1

1050.00

2 1102.50

3

1157.63

4 1215.51

5

1276.28

6

1340.10

7

1407.10

8

1477.46

9 1551.33

10

1628.89

(19)

!

Estrutura de repetição do… while ( semelhante ao repeat…

until do Pascal)

do do

comando { comando1; …

while (condição); comandon;

}

while (condição) ;

Exemplo:

#include <iostream.h>

void main ( )

{ int contador = 1;

do

cout << contador << “ “;

(20)

Decisões

!

As decisões em uma repetição sempre são

relacionadas a mesma questão: Deve executar o

corpo da repetição novamente?

!

Nos programas geralmente temos outros tipos de

decisões, como dependendo de um resultado pulo

uma parte do programa, ou chamo uma função,

etc...

!

Forma mais importante comando if ... else. Este

(21)

!

O comando if

!

sintaxe

if ( X > 100 )

{ comando;

comando único no corpo do if

if ( velocidade >= 120 ) comando;

comando; comando;

Múltiplos comandos no corpo do if Expressão teste

(22)

!

o comando if ... else

if ( X > 100 )

{ comando;

comando único no corpo do if

if ( velocidade >= 120 ) comando;

comando; comando; }

Múltiplos comandos no corpo do if Expressão teste

Expressão teste

else

comando;

comando único no corpo do else

else

{ comando;

(23)

!

if’s podem ser aninhados dentro de if’s e dentro

de repetições.

!

aninhando ifs dentre de repetições=> dado um

número determinar se ele é ou não primo.

!

aninhando if...else dentro de repetições => contar

o número de palavras e caracteres numa frase

digitada pelo usuário

(24)

#include <iostream.h>

void main( )

{ unsigned long int n;

cout<<“Entre com um número:”;

cin >> n;

for (int j=2; j<n/2; j++)

if (n%j == 0)

{ cout << “nro não é primo: divisível por:”

<<j << endl;

exit (0);

}

(25)

#include <iostream.h> #include <conio.h> void main( )

{ int contchar = 0; //conta os caracteres ≠ espaço

int contpal = 1; //conta os espaços entre as palavras char ch = ‘a’; //para garantir que não será enter(\r) cout<<“Entre com uma frase:”;

while ( ch!=‘\r’) //repetição até encontrar \r { ch = getche( ) ; //lê um único caractere

if ( ch ==‘ ‘) contpal++; else

contchar++; }

(26)

!

O programa requer que o usuário tecle <enter> para

informar ao programa que a entrada foi completada.

!

A entrada é válida mesmo que o usuário digite nenhum

caractere ou um único.

!

O programa precisa processara cada caractere digitado

pelo usuário até encontrar um <enter>

!

A função de biblioteca getche( ) faz esse serviço. Ela

retorna cada caractere digitado tão logo isso seja feito.

Deve ser incluido <conio.h>

!

A função getche( ) ecoa o caractere na tela. Uma outra

função chamada getch( ) é semelhante ao getche( ) mas

não ecoa o caractere na tela.

(27)

#include <iostream.h> #include <conio.h> void main( )

{ int contchar = 0; //conta os caracteres ≠ espaço

int contpal = 1; //conta os espaços entre as palavras char ch ;

cout<<“Entre com uma frase:”;

while ( ( ch = getche( ) ) != ‘\r’) //repetição até encontrar \r if ( ch ==‘ ‘) contpal++; else contchar++; if (contchar!=0) contpal++ ;

(28)

! O comando switch => estrutura de seleção múltipla (semelhante ao case do Pascal) swtich ( n ) { case 1: comando; comando; break; case 2: comando; comando; break; case 3: comando; break; default: comando;

Inteiro ou variável caractere

Inteiro ou constante caractere

causa a saída do switch Corpo do primeiro case Corpo do segundo case Corpo do terceiro case

(29)

!

Em cada case temos um break. O break faz com

que termine o comando switch. Se não existir o

comando break, todos os comandos são executados

até o final do switch.

!

O rótulo default é opcional. Se o valor da

expressão não coincidir com nenhum rótulo,

executa os comandos a frente do default se existir,

senão não executa nada.

(30)

#include <iostream.h> void main( ) { int veloc; cout<<“Entre 33, 45 ou 78:”; cin>>veloc; switch (veloc)

{ case 33: cout<<“Rotação de LP”<<endl;break; case 45: cout<<“Compacto simples”<<endl;

break;

case 78: cout<<“Rotação obsoleta”<<endl; break;

(31)

#include <iostream.h> #include <conio.h> void main( ) { char dir=‘a’; int x=10,y=10; while (dir!=‘\r’)

{ cout<<“Sua posição é:”<<x<<“,”<<y<<endl; cout<<“Entre com a direção (N,S,L,O):”; dir=getche( );

switch (dir)

{ case ‘N’: case ’n’: y--; break; case ‘S’: case ‘s’: y++;break; case ‘L’: case ’l’: x++;break; case ‘O’: case ’o’: x--;break; }

(32)

!

Exercício: Na avaliação dos alunos da

pós-graduação não usamos notas e sim graus,

representados por A,B,C,D e E. Faça um programa

que receba como entrada os graus atribuídos a uma

turma de alunos da pós e mostre o total de cada

uma dos graus.

OBS: veja que não conhecemos o número de

alunos. Qual será o critério de parada?

(33)

#include <iostream.h> void main( )

{ int grau, conta_a=0,conta_b=0,conta_c=0,conta_d=0,conta_e=0; cout<<"Entre com as letras que representam as notas:" <<endl

<<"Digite EOF para terminar"<<endl; while ((grau = cin.get( ))!=EOF)

{ switch (grau)

{ case 'A':case 'a': conta_a++; break; case 'B':case 'b': conta_b++; break; case 'C':case 'c': conta_c++; break; case 'D':case 'd': conta_d++; break; case 'E':case 'e': conta_e++; break;

case '\n':case ' ': break ; // não faz nada

default: cout<<"Entrada não válida. Tente novamente"<< endl; break;

} }

cout<<endl<<"Total de cada grau"<<endl<<"A: "<<conta_a<<endl <<"B: "<<conta_b<<endl<<"C: "<<conta_c<<endl

(34)

min = (alfa < beta)? alfa : beta ;

!

Operador condicional=> onde existir um if da

forma: if ( alfa < beta )

min = alfa ;

else

min = beta ;

!

sintaxe:

resultado = (expressão de teste)? exp1:exp2 ;

(35)

!

while ((grau = cin.get( ) )!= EOF)

cin.get( )-> função que lê 1 caractere e armazena na

variável inteira grau. Após essa leitura compara o valor

lido com EOF

!

A notação do pt. Será vista quando falarmos de classes

!

Caracteres são normalmente armazenados em variáveis

do tipo char. Na linguagem C++ podem ser armazenados

em variáveis inteiras. Pode ser tratado com caractere ou

como inteiro.

!

EOF -> acrônimo de End Of File-> constante simbólica

do tipo inteiro definida em iostream.h (normalmente –1).

Tecla que representa EOF: Unix:CTRL d, DOS:CTRL Z

(36)

!

O que faz o seguinte programa?

#include <iostream.h>

void main( )

{ for (int i=0; i<80; i++)

{ char ch = (i % 8)? ‘ ‘: ‘x’;

cout<< ch ;

}

}

(37)

Operadores Lógicos

!

and => && ; or => || ; not => !

!

Resumo dos operadores e precedência

=, +=, -=, *=, /=, %= Atribuição ? : Condicional !, &&, || Lógicos <, >, <=, >= ==, != Relacional Aditivo: +, -Multiplicativo: *, /, % Aritméticos !, ++, , -Unário Operadores Tipo do operador

(38)

Outras Estruturas de Controle

! comando break => parada de execução.Além do uso no comando switch, pode ser usado dentro de uma repetição para forçar uma parada.

#include <iostream.h> #include <conio.h> void main( )

{ unsigned long n, j; bool eprimo=true;

cout<<"Entre com um numero:"; cin>>n; for (j=2; j<=n/2; j++)

if (n%j == 0)

{ cout<<"O nro "<<n<<" não é primo:é divisivel por “<j<<endl; eprimo=false; break;

}

(39)

!

Comando continue => dentro de uma repetição faz com o

controle de execução volte para o topo

#include <iostream.h> #include <conio.h> void main( )

{ long dividendo, divisor; char ch; do

{ cout<<"Entre com o dividendo:"; cin>>dividendo; cout<<"Entre com o divisor:" ; cin>>divisor;

if (divisor ==0)

{ cout<<"Divisor não pode ser zero:"<<endl; continue;

}

cout<<"O quociente é: "<< dividendo/divisor<<endl;

cout<<"O resto da divisão é: "<< dividendo%divisor<<endl; cout<<"Repetir(S/N)?"; cin>>ch;

Referências

Documentos relacionados

 Manipulação e exploração de materiais variados (lixas, buchas, tecidos e papéis diversos, areia, argila, terra etc.) com texturas, formas e espessuras

A necessidade de conduzir testes separados para avaliar o potencial de produção de grãos e potencial de produção da planta inteira de híbridos de milho tem se tornado cada vez

José Marcos perguntou ao Presidente sobre as eleições para as CSPPD nos campi que deveria ocorrer em novembro de 2016, o Presidente informou que entregou

Pedro I (1798-1834) adotou o NEOCLASSICISMO como o estilo oficial do Império brasileiro, o que promoveu sua disseminação tanto na arquitetura quanto na pintura e escultura.

A presente dissertação realizada no âmbito da Unidade Curricular de Projeto, do 5º ano do Mestrado Integrado em Engenharia e Gestão Industrial, tem como objetivo o

Ao serem atravessados por raios X, tecidos mais densos (como o fígado) ou com elementos mais pesados (como o cálcio), absorvem mais radiação que ou com elementos mais pesados (como

( ) O Código de Processo Civil, embora admita que o magistrado decrete de ofício as nulidades absolutas, fica-lhe vedada essa decretação nos casos de falta

Assim o espalhamento Raman ate então usado em Fisiéa do Estado Sõlido como um importante meio de de - terminação de frequências e simetrias de fonons Õticos,