• Nenhum resultado encontrado

Aula 6 - Estruturas de Controle

N/A
N/A
Protected

Academic year: 2022

Share "Aula 6 - Estruturas de Controle"

Copied!
39
0
0

Texto

(1)

Aula 6 - Estruturas de Controle

Ameliara Freire [email protected]

(2)

Variaveis, constantes, leitura e escrita ainda não são suficientes para formar uma

linguagem completa para descricao de programas.

Cada programa/algoritmo tem um fluxo de execucao que pode ser definido usando

termos especificos de uma linguagem

Estrutura sequencial

Estrutura de selecao

Estrutura de repeticao

Tipos primitivos

(3)

Impõe uma ordem de cima para baixo e da esquerda para a direita na execucao de um algoritmo.

As acoes são separadas por “;”

Formato geral:

Estrutura sequencial

//declaracao de variaveis

//corpo do algoritmo acao 1;

acao 2;

...

(4)

Permite o uso de condicoes para escolher entre execucoes de diferentes blocos

Condicoes são expressoes lógicas relacionais que, quando avaliadas, produzem valor lógico (booleano)

Comandos:

if

if – else

switch - case

Estruturas de

selecao/decisao

(5)

Forma geral

if-else

if(condicao){

//sequencia de comandos se verdadeiro }else{ // o else é opcional

//sequencia de comandos se falso }

if(media > 7.0){

printf(“Aprovado”);

}else{

printf(“Final ou reprovado”);

}

(6)

Fluxo do if-else

if (condicao) { C1;

C2;

...

Cn;

}else { D1;

D2;

...

Dm;

}

condicao

C1;

C2;

...

Cn;

V

D1;

D2;

...

Dn;

F

(7)

Altere a funcao que lê as notas do aluno e imprime a média para que a mensagem

impressa se comporte da seguinte maneira:

Se a média foi maior ou igual a 7.0 a mensagem deve ser “Aprovado”. Caso contrário a mensagem deve ser “Estude mais para a final”.

Exercicio

(8)

O que o programa abaixo faz?

Exercicio

#include <stdio.h>

main(){

int a,b;

printf(“Digite 2 números: “);

scanf(“%d %d”,&a,&b);

if (b){

printf(“%f”,a/b);

}else {

printf(“Não posso fazer a divisao”);

} }

(9)

Variacoes do if-else

if(condicao 1){

C1

}else if (condicao 2){

C2

}else if(condicao 3){

C3 }else{

C4 }

if(condicao 1){

if(condicao 2){

if(condicao 3){

...

} } }

if(condicao 1){

...

}

if(condicao 2){

...

}

if(condicao 3){

...

(10)

Cada código que estiver dentro de um bloco deve estar um nível a mais de indentação à direita do bloco mais externo.

Indentar o código é FUNDAMENTAL para

compreensão do escopo de código (identificar

onde começa e onde termina).

Importância da indentação

if(condicao 1){

if(condicao 2){

if(condicao 3){

...

} } }

(11)

Como simplificar a seguinte selecao aninhada?

Simplificando selecoes

if (condicao1) { if (condicao2) { if (condicao3) { if (condicao4) { W;

} } } }

if (condicao1 && condicao2 && condicao3 && condicao4){

W;

}

(12)

Simplificando selecoes

if (X == V1) { C1;

}

if (X == V2) { C2;

}

if (X == V3) { C3;

}

if (X == V4) { C4;

}

Como diminuir o numero de testes?

if (X == V1) { C1;

}else if (X == V2) { C2;

}else if (X == V3) { C3;

}else if (X == V4) { C4;

}

Qual a

sequencia de comparacoes para atingir

(13)

Análise de fluxo

int A,B,C;

if (A != 0){

C1;

}else{

if (B != 0){

if (C != 0){

C2;

}else{

C3;

C4;

} } C5;

} C6;

Que comandos são executados quando A=B=V e C=F?

(14)

Análise de fluxo

Que comandos são executados quando A=B=V e C=F?

{

int A,B,C;

if (A != 0){

C1;

}else{

if (B != 0){

if (C != 0){

C2;

}else{

C3;

C4;

} } C5;

} C6;

}

(15)

Análise de fluxo

Que comandos são executados quando A=C=F e B=V?

{

int A,B,C;

if (A != 0){

C1;

}else{

if (B != 0){

if (C != 0){

C2;

}else{

C3;

C4;

} } C5;

} C6;

}

(16)

Análise de fluxo

Que comandos são executados quando A=C=F e B=V?

{

int A,B,C;

if (A != 0){

C1;

}else{

if (B != 0){

if (C != 0){

C2;

}else{

C3;

C4;

} } C5;

} C6;

}

(17)

Análise de fluxo

Que comandos são executados quando A=C=F e B=V?

{

int A,B,C;

if (A != 0){

C1;

}else{

if (B != 0){

if (C != 0){

C2;

}else{

C3;

C4;

} } C5;

} C6;

}

(18)

Análise de fluxo

Que comandos são executados quando A=C=F e B=V?

{

int A,B,C;

if (A != 0){

C1;

}else{

if (B != 0){

if (C != 0){

C2;

}else{

C3;

C4;

} } C5;

} C6;

}

(19)

Escreva um programa que lê a idade de um usuario e em seguida diz se o usuário é ou não maior de idade.

Escreva um programa que lê um número inteiro e diz se o número é par ou ímpar.

Escreva um programa que lê tres numeros e em seguida imprime quantos deles são

iguais.

Escreva um programa que lê três número s inteiros e em seguida imprime os números em ordem crescente.

Exercício

(20)

#include <stdio.h>

main() { int num;

printf("Programa que verifica numero\n\n");

printf("Digite o numero: ");

scanf("%d",&num);

if(num%2 == 0) {

printf("\n Numero par!");

} else {

printf("\n Numero impar!");

} }

(21)

Multipla escolha: quando se tem um conjunto de valores discretos a serem testados, onde cada valor corresponde a uma acao.

Otimizacao das escolhas se-senao-se

Switch-case

switch (<variável>) { case <valor 1>:

<instruções>;

[break;]

case <valor 2> :

< instruções>;

[break;]

...

[default:<instruções>;]

}

OBS:

“ variável” deve ser int ou char;

break” serve para implementar escolha disjunta

(22)

Escreva um

programa C que

receba 2 números e um caractere

operador (+, -, * ou /) do teclado, realize a operação

determinada entre eles e imprima na tela o resultado

Switch-case (exemplo)

#include <stdio.h>

int main ( ) { char op;

float num1, num2;

printf(“Digite um número, um operador e um número:”);

scanf (“ %f %c %f”, &num1, &op, &num2);

switch (op) { case ‘+’:

printf (“ = %f”, num1 + num2);

break;

case ‘-’:

printf (“ = %f”, num1 - num2);

break;

default:

printf (“ Operador inválido!”) }

}

(23)

Escreva uma funcao que solicita o usuario digitar um numero de 1 à 7. Em seguida a funcao imprime uma mensagem de acordo com o numero digitado:

1 – “Voce pertence ao curso de Agronomia”

2 – “Voce pertence ao curso de Veterinária”

3 – “Voce pertence ao curso de Zootecnia”

4 – “Voce pertence ao curso de Pedagogia”

5 – “Voce pertence ao curso de Letras”

6 – “Voce pertence ao curso de Engenharia de Alimentos”

7 – “Voce pertence ao curso de CIENCIA DA COMPUTACAO!”

Qualquer outro numero - “Voce nao pertence a curso algum da UAG”

Exercicio

(24)

Imagine um procedimento (algoritmo)

pronto para calcular a média de um aluno.

O que fazer para calcular a média de todos os alunos de uma turma?

Estruturas de repeticao

(25)

São construcoes que permitem descrever acoes repetitivas

Também conhecido por loop.

O numero de repeticoes pode ser indeterminado?

O número de repeticoes pode ser infinito?

Repeticao com numero de vezes indeterminado

Laço com teste no inicio (while)

Laço com teste no final (do-while)

Repeticao com numero de vezes determinado

Laço (for)

Laços ou comandos de

repeticao

(26)

Antes de cada execucao dos comandos de uma repeticao, a condicao é testada

Repeticao com teste no início

while (condicao) { C1;

C2;

...

Cn;

}

while comandos

Segue o fluxo

condicao valida

condicao invalida

(27)

Exemplos

Repeticao com teste no início

int i = 0;

while (i < 10) {

printf(“Valor de i: %d ”, i);

i++;

}

int i = 0;

while (i < 10) {

printf(“Valor de i: %d ”, i);

}

(28)

Como seria um programa para calcular a média de 50 alunos da uma turma?

Escreva um programa que calcula o produto de dois números lidos sem usar o operador de multiplicação (‘*’).

Construa um algoritmo que fica lendo

indefinidamente numeros positivos. Caso o numero lido seja igual a 0 o algoritmo pára de ler números e imprime a média dos

números pares lidos anteriormente.

Exercicio

(29)

Escreva um programa que lê um número e em seguida calcula e imprime seu fatorial.

Exercicio-desafio

(30)

Depois de cada execucao dos comandos de uma repeticao, a condicao é testada

Os comandos são executados pelo menos uma vez

Repeticao com teste no final

do { C1;

C2;

...

Cn;

}while (condicao);

comandos

Segue o fluxo

while condicao valida

condicao invalida

do

(31)

Como ficaria o algoritmo para calcular a média dos 50 alunos com teste no final usando o comando do-while?

Exercício

(32)

O numero de vezes da repeticao é determinado.

Possui uma variavel de controle cujo valor varia de um valor inicial a um valor final, de acordo com um determinado passo

A condicao de parada é o numero de vezes da repeticao.

Repeticao fixa

(33)

Inicialização:

Expressão de atribuição. Sempre é executada uma única vez.

Teste de Condição:

Condição que controla a execução do laço. É sempre avaliada a cada execução. Se Verdadeiro continua a execução. Se falso pára a execução.

Incremento:

Define como a variável de controle será alterada.

É sempre executada após a execução do corpo do laço.

Repeticao fixa

for(inicializacao;condicao;incremento ){

C1;

...

Cn;

}

(34)

Repeticao fixa

int i;

for(i= 0;i < 10;i++){

printf(“%d”,i);

}

printf(“%d”,i);

i = 1

i = 1 + 2 i = 9

i = 11 int i;

for(i= 0;i < 10;i=i+2){

printf(“%d”,i);

}

i = 1

printf(“%d”,i);

i = 1 + 1

(35)

Como ficaria o algoritmo para calcular a

media dos 50 alunos usando repeticao fixa?

Escreva um algoritmo que lê 50 números inteiros e em seguida mostra a soma de todos os ímpares lidos.

Altere o algoritmo anterior para que ele

considere apenas a soma dos ímpares que estejam entre 100 e 200.

Construa um algoritmo que leia um conjunto de 20 numeros inteiros e mostre qual foi o maior e o menor valor fornecido.

Exercicio

(36)

Lacos são equivalentes

Comparacao entre repeticoes

se (numero de vezes é conhecido){

usa-se o for }senao{

se (teste precisa ser feito no inicio){

usa-se while }senao{

usa-se do-while }

}

(37)

Foi feita uma pesquisa para determinar o perfil dos alunos que

ingressaram em engenharia na UFPE num determinado semestre. Faça um programa que:

a) Leia um número indeterminado de alunos que prestaram vestibular. Os dados solicitados correspondem ao sexo do aluno (‘m’ para masculino e ‘f’ para feminino), se passou no vestibular e o número de vezes que este aluno prestou vestibular. No caso de conter no lugar do sexo a letra ‘x’, este é o “sinal” para parar de ler os dados.

c) Determine e imprima:

A quantidade de alunos que passaram no vestibular.

A porcentagem de alunos do sexo masculino que passaram no vestibular.

A porcentagem de alunos, independentemente do sexo, que prestou vestibular 3 ou mais vezes no período.

(38)

#include <stdio.h>

#include <conio.h>

main( ) {

char sexo, passou;

int nh = 0, nr = 0, nv, ntotal = 0, nrpassou = 0;

do {

printf("\nDigite o sexo do aluno que prestou vestibular: ");

fflush(stdin);

scanf("%c", &sexo);

if (sexo != 'x' && (sexo == 'm' || sexo == 'M' || sexo == 'f' || sexo == 'F')) {

printf("Digite o numero de vezes que o aluno prestou vestibular: ");

scanf("%d", &nv);

printf("Digite se o aluno passou vestibular [s - sim ou n - nao]: ");

fflush(stdin);

scanf("%c", &passou);

if(passou == 's' || passou == 'S') {

if (sexo == 'm' || sexo == 'M') nh++;

if (nv > 3) nr++;

nrpassou++;

ntotal++;

}

else if (passou == 'n' || passou == 'N') ntotal++;

}

}while(sexo != 'x' && sexo != 'X');

if(ntotal > 0) {

printf("\nA porcentagem dos alunos que passaram no vestubular eh: %.2f\n", ((float)nrpassou/ntotal)*100);

printf("A porcentagem dos alunos do sexo masculino que passaram no vestubular eh: %.2f\n", ((float)nh/ntotal)*100);

printf("A porcentagem dos alunos que prestaram vestibuar mais de 3 vezes eh: %.2f\n", ((float)nr/ntotal)*100);

} else

printf("Nenhum dado foi informado!");

38

(39)

#include <stdio.h>

#include <conio.h>

main() {

int n, k;

float x, e, num, den;

do {

printf("Digite o valor de x e n (n >= 2)");

scanf("%f %d",&x,&n);

}while (n < 2);

num = 1;

den = 1;

e = num/den;

for (k = 1; k <= n-1; k++) {

num = num * x;

den = den * k;

e = e + num/den;

}

printf("Resultado: %.2f", e);

getch();

}

Referências

Documentos relacionados

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

2 - OBJETIVOS O objetivo geral deste trabalho é avaliar o tratamento biológico anaeróbio de substrato sintético contendo feno!, sob condições mesofilicas, em um Reator

Considerando a importância dos tratores agrícolas e características dos seus rodados pneumáticos em desenvolver força de tração e flutuação no solo, o presente trabalho

A simple experimental arrangement consisting of a mechanical system of colliding balls and an electrical circuit containing a crystal oscillator and an electronic counter is used

Com efeito, estudos com grupos não selecionados de crianças têm evidenciado essas associações e mostrado que a influência que a velocidade de processamento exerce sobre o

Moreover, the ameliorative effect of the oxime K027 on the induced lipid peroxidation at 24 h after malathion poisoning suggests a potential link between the overstimulation

Para isso, pretendemos pensar sobre as pulsões, sobre como se dá esse pulsional, reflectindo também sobre as relações iniciais do bebé com o outro, e culminando no que pode estar

Este trabalho de pesquisa tem por objetivo levar à comunidade escolar uma discussão acerca do tema abordado: “A construção da identidade negra dos alunos da Escola Estadual de