UNIVERSIDADE ESTADUAL DE MARINGÁ DEPARTAMENTO DE INFORMÁTICA Prof. Yandre Maldonado - 1 Estruturas de Controle Prof. Yandre Maldonado e Gomes da Costa yandre@din.uem.br Estrutura de Seleção Prof. Yandre Maldonado - 2 Existem situações em que a execução de um programa pode seguir caminhos alternativos; Na solução de alguns problemas há mais de um caminho possível de ser seguido para se obter a solução correta; Exemplos: ax 2 +bx+c=0, e se <0; Cálculo de IRRF Salário < R$ 1000,00 isento; Salário entre R$ 1000,00 e 2000,00 10%; Sálário entre R$ 2000,00 e 3000,00 20%; Salário acima de R$ 3000,00 30%. Estrutura de Seleção Prof. Yandre Maldonado - 3 Os possíveis caminhos devem estar fundamentados em alguma lógica; É dever de quem escreve o algoritmo, dar condições para que o caminho percorrido seja o adequado à solução do problema; Não se pode construir soluções parciais, que não atendam todos os casos possíveis;
Estrutura de Seleção Prof. Yandre Maldonado - 4 Estrutura se então: Permite determinar se um conjunto de instruções deve ser executado ou não; Sintaxe e semântica geral desta instrução em Pascal: if <condição> then <Inst1> <InstN> condição for V; condição for F. Onde: -if e then são palavras reservadas de Pascal; -<condição> deve ser uma expressão que produza valor lógico (v ou f); -<Inst1> a <InstN> formam o bloco de instruções que serão executados ou não, de acordo com o valor da condição. Estrutura de Seleção Prof. Yandre Maldonado - 5 Exemplo em Pascal: Dados dois valores inteiros, x e y fornecidos pelo usuário, descubra e informe qual dos dois é o maior. program testa_se; x, y: integer; write ('Digite um valor para x: '); read (x); write ('Digite um valor para y: '); read (y); if x>y then write ('X e maior do que Y.'); if x<y then write ('X e menor do que Y.'); if x=y then write ('X e igual a Y.'); Estrutura de Seleção Prof. Yandre Maldonado - 6 Estrutura se então senão: Permite fazer a escolha entre dois blocos de instruções alternativos, mutuamente exclusivos; Esta estrutura não aumenta o poder de programação em relação a estrutura se então, mas tende a facilitar a tarefa de programação; Sintaxe e semântica geral desta instrução;
Estrutura de Seleção Prof. Yandre Maldonado - 7 Estrutura se então senão: Permite determinar se um conjunto de instruções deve ser executado ou não; Sintaxe e semântica geral desta instrução em Pascal: if <condição> then <Bloco1> end else <Bloco2> condição for V; condição for F. Onde: -if then e else são palavras reservadas de Pascal; -<condição> deve ser uma expressão que produza valor lógico (v ou f); -<Bloco1> e <Bloco2> formam o bloco de instruções que serão executados ou não, de acordo com o valor da condição. Exemplo: dados dois números quaisquer diferentes entre si, faça um algoritmo que descubra qual é o maior deles. Prof. Yandre Maldonado - 8 program testa_se; x, y, maior: real; write ('Digite um valor para x: '); read (x); write ('Digite um valor para y: '); read (y); if x>y then maior:=x; if y>x then maior:=y; write ('Maior numero: ', maior); program testa_se_senao; x, y, maior: real; write ('Digite um valor para x: '); read (x); write ('Digite um valor para y: '); read (y); if x>y then maior:=x else maior:=y; write ('Maior numero: ', maior); Estrutura de Seleção Prof. Yandre Maldonado - 9 Exercícios Faça o exercício do cálculo de IRRF utilizando a estrutura se então senão sem o uso de operadores lógicos (AND e OR). Dados três números inteiros e diferentes entre si, faça um algoritmo que descubra qual é o maior e o menor entre eles. Dado um par de coordenada cartesiana (x, y), faça um algoritmo que determine em qual quadrante, ou sobre qual eixo está o par.
Prof. Yandre Maldonado - 10 Estrutura de Controle de São necessárias quando se tem que repetir uma determinada instrução, que represente um comportamento padrão, várias vezes; Com estas estruturas, escreve-se a instrução uma única vez, e ela pode ser executada várias vezes; podem ser controladas por: contador; condição. Estrutura de Controle de Prof. Yandre Maldonado - 11 Problema 1: faça um algoritmo que calcule a soma de todos os números inteiros compreendidos entre 1 e 5, inclusive. program soma1; soma: integer; soma:=1+2+3+4+5; write('valor da soma: ', soma); Estrutura de Controle de Prof. Yandre Maldonado - 12 Problema 2: faça um algoritmo que calcule a soma de todos os números inteiros compreendidos entre 1 e 100.000, inclusive. O padrão para a solução do problema seria o mesmo, mas o trabalho para a construção da expressão aritmética não. Vamos escrever uma nova solução, que resolve o problema 1 repetindo uma mesma instrução e utilizando os objetos: soma: acumula o resultado da soma obtida entre os números do intervalo; i: tem a função de gerar os números pertencentes ao intervalo.
Prof. Yandre Maldonado - 13 program soma2; Esta solução pode parecer mais soma, i: integer; complicada, mas note que nela a solução é construída soma:=0; repetindo-se as seguintes i:=1; instruções: soma:=soma+i; i := i+1; soma:= soma+i; soma := soma+i; i:= i+1; i := i+1; soma:= soma+i; i := i+1; soma:= soma+i; i := i+1; soma := soma+i; write('valor da soma: ', soma); Estrutura de Controle de Prof. Yandre Maldonado - 14 Assim, a solução do problema 2 poderia ser descrita através da repetição destas duas instruções cerca de 100.000 vezes; As estruturas de controle de repetições são estruturas que permitem a repetição da execução um bloco de instruções, de acordo com determinadas condições, mesmo escrevendo-o uma única vez; Sintaxe e semântica de uma estrutura de controle de repetições; while <condição> do bloco de instruções Prof. Yandre Maldonado - 15 inst1; instn; instx; Onde: condição for V; condição for F. - enquanto faça é a estrutura de controle de repetições; - condição deve ser um valor lógico (objeto tipo lógico, expressão booleana, ou expressão relacional); - inst1instn (bloco 1) formam o conjunto (bloco) de instruções que serão executadas a cada vez que a condição for V; Após a primeira execução do bloco de instruções, o valor de condição é reavaliado, e enquanto o seu valor continuar verdadeiro, o bloco será executado novamente. Quando a condição deixar de ser V, o bloco será ignorado. Note que se na primeira execução a condição for F, o bloco não será executado nenhuma vez.
Estrutura de Controle de Solução para o problema 1: Prof. Yandre Maldonado - 16 program problema1; soma, i: integer; soma:=0; i:=1; while i<=5 do soma:=soma+i; i:=i+1; write('valor da soma: ', soma); Estrutura de Controle de Solução para o problema 2: Prof. Yandre Maldonado - 17 program problema2; soma, i: integer; soma:=0; i:=1; while i<=100000 do soma:=soma+i; i:=i+1; write('valor da soma: ', soma); Prof. Yandre Maldonado - 18 Estrutura de Controle de Faça um algoritmo para calcular o fatorial de um número dado: program fatorial; fat, i, n: integer; fat:=1; i:=1; read (n); while i<=n do fat:=fat*i; i:=i+1; write('fatorial do numero: ', fat);
Controle de por condição Prof. Yandre Maldonado - 19 Sintaxe e semântica idênticas; Quando o controle é por contador, a interrupção é prevista no instante em que é iniciada a execução da estrutura de controle de repetições; É imprescindível que haja uma instrução dentro do bloco de instruções que permita a alteração do valor lógico da condição; Controle de por condição Prof. Yandre Maldonado - 20 Exemplo 1: faça um algoritmo para calcular a soma entre os números de um conjunto de números inteiros e positivos a ser fornecido pelo usuário. Note que neste caso não se sabe em momento algum quantos serão os números, o usuário deverá inserí-los até que se dê por satisfeito. Solução 1 Prof. Yandre Maldonado - 21 program soma_indeterm; soma, n: integer; soma:=0; read (n); while n>0 do soma:=soma+n; read(n); write('soma acumulada: ', soma);
Solução 2 - uma solução mais elegante Prof. Yandre Maldonado - 22 program soma_indeterm; soma, n: integer; cont: char; soma:=0; cont:='s'; while cont='s' do write('digite um numero: '); readln(n); soma:=soma+n; write('continuar? (s/n)'); readln(cont); write('soma acumulada: ', soma); Observe que o objetivo é criar uma condição de parada que permita encerrar as repetições no momento adequado. Exercícios Prof. Yandre Maldonado - 23 Faça um algoritmo que calcule a soma entre todos os valores inteiros presentes em um intervalo determinado por dois valores fornecidos pelo usuário; Faça um algoritmo que calcule a média entre os números de um conjunto fornecido pelo usuário. Prof. Yandre Maldonado - 24 bloco de instruções Outras Estruturas de Controle de Repita-até repeat inst1; instn; until <condição>; instx; Onde: condição for V; condição for F. - repeat e until é a estrutura de controle de repetições; - condição deve ser um valor lógico (objeto tipo lógico, expressão booleana, ou expressão relacional); - inst1instn (bloco 1) formam o conjunto (bloco) de instruções que terão a execução repetida a cada vez que a condição for F; Após a primeira execução do bloco de instruções, o valor de condição é avaliado, e se o seu valor for falso, o bloco será executado novamente. Quando a condição deixar de ser F, é encerrada a execução da estrutura e a execução do algoritmo continua (instx). Note que nesta estrutura o bloco de instruções será executado sempre pelo menos uma vez.
bloco de instruções Prof. Yandre Maldonado - 25 for I := VI to VF do inst1; instn; Para-até-faça instx; Onde: - for, to e do são palavras reservadas no Pascal; - I é a iável de controle; - VI representa o valor inicial de I; - VF representa o valor final de I; - inst1instn são as instruções que poderão ser executadas várias vezes. Inicialmente I recebe o valor de VI, se este valor for menor ou igual a VF, o bloco é executado uma vez e I é incrementada em VP (isto é I:= I + VP). Depois disto, se I continuar menor ou igual a VF, o bloco é executado novamente e I é incrementada em VP. Isto se repete até que I receba um valor que seja maior que VF, quando isto acontecer o bloco não mais será executado, e a execução passa para instx. Prof. Yandre Maldonado - 26 Estruturas de Controle de Repetição Aspectos sobre para-até-passo-faça: Nesta estrutura o valor de passo (VP) pode ser ignorado, assim a iável de controle (I) é sempre incrementada em uma unidade (I := I + 1); Esta estrutura só pode ser utilizada em repetições controladas por um contador. Isto é, aquelas repetições que sabemos o número de vezes que acontecerá quando iniciamos sua execução Exemplo 1 : Fatorial de um número dado. Enquanto-faça Para-ate-faça Repita-até Prof. Yandre Maldonado - 27 program fatorial; n, i, fat: integer; write ('Informe o valor de n: '); readln (n); fat:=1; i:=1; while i<=n do fat:=fat*i; i:=i+1; write ('Fatorial: ',fat); program fatorial; n, i, fat: integer; write ('Informe o valor de n: '); readln (n); fat:=1; for i:=1 to n do fat:=fat*i; write ('Fatorial: ',fat); program fatorial; n, i, fat: integer; write ('Informe o valor de n: '); readln (n); fat:=1; i:=1; repeat fat:=fat*i; i:=i+1; until i>n; write ('Fatorial: ',fat);
Prof. Yandre Maldonado - 28 Estruturas de Controle de Repetição Exercício: Refaça um algoritmo para calcular a soma entre os números de um conjunto de números inteiros e positivos a ser fornecido pelo usuário. Faça uma solução utilizando a estrutura repitaaté e uma solução utilizando a estrutura paraaté-passo-faça. Se não for possível a solução através do uso de uma das instruções, justifique. Lembre-se que este é o caso em que não se sabe em momento algum quantos serão os números, o usuário deverá inserí-los até que se dê por satisfeito. Prof. Yandre Maldonado - 29 Solução 1 - repita-até algoritmo soma_indeterm; iaveis Observe que a iável soma, n: inteiro; cont não precisou ser cont: texto; inicializada antes de repita, inicio pois como o laço é soma<-0; executado pelo menos uma vez, ela receberá algum repita valor antes da condição leia(n); que a envolve ser testada. soma<-soma+n; novalinha; escreva('continuar? (s/n)'); leia(cont); ate cont='n'; novalinha; escreva('soma acumulada: ', soma); fim. Estruturas de Controle de Repetição Prof. Yandre Maldonado - 30 Solução 2 - para-até-passo-faça: Solução impossível, pois não se sabe quantas vezes a execução do bloco de instruções será repetida no instante em que ela começar. Assim, não se pode controlar a repetição por um contador e o uso de paraaté-passo-faça se torna impossível.
Prof. Yandre Maldonado - 31 Combinando Estruturas de Repetição e Seleção Foi feita uma pesquisa em uma universidade entre os acadêmicos matriculados na instituição. Todos os acadêmicos que estavam presentes no dia da pesquisa, preencheram ao seguinte questionário: Sexo? (M- masculino; F- feminino): Idade? (em anos): Gosta do curso que está fazendo? (S- sim; N- não): O número de pessoas que responderam ao questionário é indeterminado. Faça um algoritmo que seja capaz de calcular e informar: a) o número de homens entrevistados; b) o número de mulheres entrevistadas; c) o percentual de mulheres entre todos os entrevistados; d) quantos homens com menos de 23 anos não gostam do curso que estão fazendo. Prof. Yandre Maldonado - 32 program entrevista; idade, nh, nm, hm23: integer; sexo, gosta, cont: char; pm: real; nh:=0; nm := 0; hm23 := 0; repeat write ('Digite o sexo do entrevistado: '); readln(sexo); write ('Digite a idade do entrevistado: '); readln(idade); write ('O entrevistado gosta do curso que faz? (s/n)'); readln(gosta); if sexo = 'f' then nm:=nm+1 else nh:=nh+1; if (idade<23) and (gosta='n') then hm23:=hm23+1; write ('Deseja continuar? (s/n)'); readln(cont); until cont='n'; pm:=(nm/(nh+nm))*100; writeln('numero de homens entrevistados: ', nh); writeln('numero de mulheres entrevistadas: ', nm); writeln('percentual de mulheres entre os entrevistados: ', pm, '%'); writeln('numero de homens com menos de 23 que nao gostam do curso: ', hm23); Prof. Yandre Maldonado - 33 Combinando Estruturas de Repetição e Seleção Exercícios 1. Durante uma semana (sete dias), foram colhidas as temperaturas médias diárias de uma determinada região em graus celsius. Faça um algoritmo que calcule e informe a temperatura média da semana, e a temperatura mais alta da semana. Na solução deve ser utilizada uma estrutura de controle de repetição. 2. Refaça o algoritmo anterior, considerando um número indeterminado de dias. 3. Faça um algoritmo que, recebendo 4 notas bimestrais de um número indeterminado de alunos, calcule e informe a média anual da turma, e a média anual de aluno mais alta. Considere pesos 1, 2, 3 e 4 para as quatro notas bimestrais que forem inseridas.
Estrutura de Seleção Múltipla Prof. Yandre Maldonado - 34 Esta é uma estrutura que permite que seja executado um único conjunto de instruções, entre vários, de acordo com o valor de um objeto; Esta estrutura pode substituir a ocorrência de várias estruturas SE-ENTÃO ou SE- ENTÃO-SENÃO; Prof. Yandre Maldonado - 35 Sintaxe e Semântica da Estrutura case valor of valor1: valor2: valor3: inst11; inst1n; inst21; inst2n; inst31; inst3n; Onde: - Valor é um objeto ou uma constante do tipo inteiro ou caractere; -Inst11inst1n é o bloco de instruções que serão executadas se valor for igual a valor1; -Inst21inst2n é o bloco de instruções que serão executadas se valor for igual a valor2; Estrutura de Seleção Múltipla Prof. Yandre Maldonado - 36 Exemplo: program testa_caso; op: char; write ('Digite uma opcao (1, 2, 3 ou 4): '); readln (op); case op of '1': writeln ('1 - Voce escolheu a opcao um.'); '2': writeln ('2 - Voce escolheu a opcao dois.'); '3': writeln ('3 - Voce escolheu a opcao tres.'); '4': writeln ('4 - Voce escolheu a opcao quatro.'); else write('opcao invalida.');
Prof. Yandre Maldonado - 37 Estrutura de Seleção Múltipla Faça um algoritmo para calcular o valor total a pagar por um consumidor que abasteceu seu carro, sabendo que serão informados o tipo de combustível escolhido (G/A/D) e o número de litros consumido. Considere os seguintes preços por litro de combustível: Gasolina R$ 1,20; Álcool R$ 0,70; Diesel R$ 0,60. Solução Prof. Yandre Maldonado - 38 program testa_caso; litros, total: real; tipo: char; write ('Digite a quantidade de litros: '); readln (litros); write ('Digite o tipo de combustivel: '); readln (tipo); case tipo of 'a': total:=0.7*litros; 'd': total:=0.6*litros; 'g': total:=1.2*litros; write ('Total a pagar: ', total); Estrutura de Seleção Múltipla Prof. Yandre Maldonado - 39 Faça um algoritmo que calcule e informe o valor total do salário mensal de um vendedor de carros, sabendo que o mesmo ganha um salário fixo de R$ 800,00 e mais comissão. A comissão é igual a 3% se ele vender até 3 carros no mês; 5% se vender entre 4 e 6 carros; e 7% se vender entre 7 e 10 carros; e 10% se vender além de 10 carros. Suponha que todos os carros vendidos custem R$ 10.000,00 e que será informado o número de carros vendidos no mês pelo vendedor.