59
ESTRUTURAS DE CONTROLE Na criação de algoritmos e programas utiliza-se os conceitos de: bloco lógico, entrada de dados, saída de dados, variáveis, constantes, atribuições, expressões lógicas, relacionais e aritméticas, bem como comandos que traduzam estes conceitos de forma a representar o conjunto de ações. Para que este conjunto de ações se torne viável, é necessário que haja uma perfeita relação lógica no modo pela qual essas ações são executadas, e no modo que é regido o fluxo de suas execuções. Através das estruturas básicas de controle de fluxo de execução – seleção e repetição – e da combinação delas, pode-se construir um algoritmo ou programa para solucionar qualquer problema. ESTRUTURAS DE SELEÇÃO (COMANDOS DE DECISÃO) Uma estrutura de seleção permite a escolha de um conjunto de ações a ser executado quando ______________________________________________________________________ ___________ Algoritmos e Técnicas de Programação I Professor: Luciano 58

apostila de programação.doc

Embed Size (px)

Citation preview

Page 1: apostila de programação.doc

ESTRUTURAS DE CONTROLE

Na criação de algoritmos e programas utiliza-se os conceitos de:

bloco lógico, entrada de dados, saída de dados, variáveis, constantes, atribuições, expressões lógicas, relacionais e aritméticas,

bem como comandos que traduzam estes conceitos de forma a representar o conjunto de ações.

Para que este conjunto de ações se torne viável, é necessário que haja uma perfeita relação lógica no modo pela qual essas ações são executadas, e no modo que é regido o fluxo de suas execuções.

Através das estruturas básicas de controle de fluxo de execução – seleção e repetição – e da combinação delas, pode-se construir um algoritmo ou programa para solucionar qualquer problema.

ESTRUTURAS DE SELEÇÃO (COMANDOS DE DECISÃO)

Uma estrutura de seleção permite a escolha de um conjunto de ações a ser executado quando determinadas condições, representadas por expressões lógicas, são ou não satisfeitas.

As estruturas de seleção são implementadas através de comandos de decisão. A linguagem C++ oferece três comandos de decisão:

ifif – elseswitch

SELEÇÃO SIMPLES (COMANDO if)_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

58

Page 2: apostila de programação.doc

if (<condição>)instrução; // comando único

O comando if instrui o computador a tomar uma decisão simples.

<condição> é uma expressão lógica, que, quando inspecionada, pode gerar um resultado falso ou verdadeiro.

Se <condição> for verdadeira, a instrução (comando único) será executada; caso contrário (<condição> for falsa), encerra o comando if, neste caso, sem executar nenhum comando.

Exemplo:

# include <iostream.h>

main(){ int anos; cout<<"\nQuantos anos você tem ??"; cin>>anos; if (anos < 30) cout<<"Você é muito jovem !!";}

Na execução do programa, se o usuário digitar um número menor que 30, o programa imprimirá “Você é muito jovem”. Agora, se o usuário digitar um número maior ou igual a 30, o programa não fará absolutamente nada.

O corpo de um comando if pode ter uma única instrução terminada por ponto-e-vírgula (como no exemplo anterior) ou várias instruções sempre entre chaves.

if (<condição>)_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

59

Page 3: apostila de programação.doc

{ instrução1; // instruções (comandos) instrução2;}

Exemplo:

# include <iostream.h>

main(){ int anos; cout<<"\nQuantos anos você tem ??"; cin>>anos; if (anos < 30) { cout<<" Você é muito jovem !!";

cout<<" Estude bastante !!"; }

}

SELEÇÃO COMPOSTA (COMANDO if-else)

if (<condição>)instrução1; // comando único

else instrução2; // comando único

Se <condição> for verdadeira, a instrução1 será executada, caso contrário, se <condição> for falsa, será executada a instrução2.

O comando if-else é uma expansão de um simples comando if. O comando if permite que executemos algo somente se a condição for verdadeira, caso contrário nada é executado.

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

60

Page 4: apostila de programação.doc

Caso haja mais de uma instrução no comando if-else, também há a necessidade de chaves delimitando o início e o fim dos blocos de instruções.

if (<condição>) {

instrução; //bloco verdade instrução; } else

{ instrução; // bloco falso instrução; }

Exemplo: Programa que calcula a nota final de um aluno e verifica se o mesmo foi aprovado ou reprovado.

# include <iostream.h># include <conio.h>

main(){ int p1, // Prova 1 p2, // Prova 2 nt, // Nota de Trabalhos ef, // Exame Final nf; // Nota Final cout<<"\n Digite as 4 notas do aluno: "; cin>>p1>>p2>>nt>>ef; nf = p1 + p2 + nt + ef; if (nf >= 60) // se nota final maior ou igual a 60 cout<<"\n\nParabéns !!!\nAprovado com Nota Final = "<<nf; else // se a nota final for menor que 60 { cout<<"\n\nReprovado !!"; cout<<"\nEstude mais !!"; } getch();}

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

61

Page 5: apostila de programação.doc

Exercícios de Fixação:

1-) Qual é a saída do programa:

# include <iostream.h>

main (){ int x = 7; if (x % 2 == 0) cout<<” O número é par !!”; else cout<<” O número é ímpar !! “;}

2-) Qual é a saída do programa:

# include <iostream.h>

main (){ int a = 2, b = 3; if ( (a<1) || (b > 4)) cout<<”O valor de a é ”<<a<<” e o de b é ”<<b; }

3-) Descubra o erro de programação no trecho de programa abaixo.

main (){ int z = 3; if (z < 3); cout<<z; else cout<<2*z; }

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

62

Page 6: apostila de programação.doc

4-) Qual é o valor de x e de x no final da execução do programa.

main (){ int y = 4, x = 2; if (y > 5) y = 3 * y; y = y + 1; if (y > 4) { y++; x++; } else x = x + 2; y = y + 3;x++;}

5-) Qual é o valor de x no final da execução do programa.

main (){ int x = 3; if (x > 4) x = 2 *x; x = x + 1;}

6-) Qual é a saída do programa abaixo.

main(){ if (2 > 1); cout<<”Verdade !!”; }

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

63

Page 7: apostila de programação.doc

7-) Qual é o valor de a e de b no final da execução do programa.

main(){ int a = 2, b = 0; if ( (a < 3) && (b != 1)) { a--; b++; } if (a != 1) b++; else b--;}

8-) Qual é o valor de a e de b no final da execução do programa.

main(){ int a = 2, b = 0; if ( (a < 1) || (b != 1)) { a--; b++; } if (a == 1) b++; else b--;}

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

64

Page 8: apostila de programação.doc

SELEÇÃO ENCADEADA

Quando, devido à necessidade de processamento das informações de um problema em estudo, agrupamos várias seleções, formamos então uma seleção encadeada.

Geralmente tal formação ocorre quando uma determinada ação ou bloco deve ser executado se um grande conjunto de possibilidades ou combinações de situações for satisfeito.

Seleção Encadeada Homogênea

Uma seleção encadeada é chamada de homogênea quando a mesma segue um determinado padrão lógico de construção.

if (<condição1>) if (<condição2>)

if (<condição3>) if (<condição4>) instrução1;

A construção acima segue um padrão. Após cada if existe outro if..

Observe que a instrução1 somente será executada quando todas as condições forem ao mesmo tempo verdadeiras. Portanto, a estrutura acima seria equivalente a que segue:

if(<condição1>&&<condição2>&&<condição3>&& <condição4>)

instrução1;

Seleção Encadeada Heterogênea

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

65

Page 9: apostila de programação.doc

Quando não se consegue identificar um padrão lógico de construção em uma estrutura de seleção encadeada, dizemos que esta é uma estrutura de seleção encadeada heterogênea.

if (<condição1>) if (<condição2>)

{ instrução1; // bloco verdade 1

instrução2; . . .

instruçãoN; } else if (<condição3>) {

instrução1; // bloco verdade 2 instrução2; . . .

instruçãoN; } else if (<condição4>) if (<condição5>) instruçãoX; else instruçãoY;

Podemos resumir todas as variações possíveis da estrutura anterior em uma Tabela de Decisão:

Condição1

Condição2

Condição3

Condição4

Condição5

Instruçãoa ser

executadaV V - - - Bloco

verdade 1V F V - - Bloco

verdade 2

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

66

Page 10: apostila de programação.doc

V F F V V XV F F V F Y

Exemplo: Dados três valores A, B e C, o programa abaixo verifica se eles podem ser os comprimentos dos lados de um triângulo e, se forem, o programa verifica ainda se compõem um triângulo equilátero, isósceles ou escaleno.

é triângulo: (A < B+C) e (B < A+C) e (C < A+B);

é equilátero: (A=B) e (B=C);

é isósceles: (A=B) ou (A=C) ou (B=C);

é escaleno: (AB) e (BC);

# include <iostream.h># include <conio.h>

main(){ int a, b, c; cout<<"\nForneca três valores inteiros:"; cin>>a>>b>>c; if ((a<b+c) && (b<a+c) && (c<a+b)) if ((a==b) && (b==c)) cout<<"\nTriângulo Equilátero!!"; else if ((a==b) || (a==c) || (b==c)) cout<<"\nTriângulo Isósceles !!"; else cout<<"\nTriângulo Escaleno !!"; else cout<<"Os valores não formam um triângulo !!"; getch();}

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

67

Page 11: apostila de programação.doc

IF – ELSE - IF

Suponha que em um determinado programa uma variável x possa assumir quatro valores, sendo eles v1, v2, v3, v4, e que exista uma instrução diferente que será executada para cada valor armazenado em x.

if (x == v1) instrução1;if (x == v2) instrução2;if (x == v3) instrução3;if (x == v4) instrução4;

Construindo a Tabela de Decisão:

x = v1 x = v2 x = v3 x = v4 InstruçãoV F F F 1F V F F 2F F V F 3F F F V 4

Somente uma e apenas uma instrução pode ser executada, trata-se de uma situação excludente (se x é igual a v3, não é igual a v1, nem a v2, nem a v4).

Todas as condições (x==vn) serão efetuadas e ocorrerão testes desnecessários (todos os Fs da tabela de decisão).

Para melhorar a performance desta estrutura, é possível transformá-la em um conjunto de seleções encadeadas:

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

68

Page 12: apostila de programação.doc

if (x == v1) instrução1;else if (x == v2)

instrução2; else if (x == v3) instrução3; else if (x == v4) instrução4;

Utilizando a Tabela de Decisão:

x = v1 x = v2 x = v3 x = v4 InstruçãoV - - - 1F V - - 2F F V - 3F F F V 4

Nesta estrutura o número médio de testes a serem executados diminui.

Se o conteúdo de x for igual a v2, serão executados apenas dois testes (x == v1) e (x == v2) e uma instrução (2), enquanto, na estrutura anterior, seriam inspecionadas quatro condições, embora um única instrução (2) tenha sido executada também.

Esta construção segue um padrão, após cada else existe outro comando if.

Como, na verdade, esta estrutura corresponde a um encadeamento homogêneo, ela pode ser simplificada utilizando uma estrutura de seleção de múltipla escolha (switch).

SELEÇÃO DE MÚLTIPLA ESCOLHA (COMANDO SWITCH)

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

69

Page 13: apostila de programação.doc

O comando switch permite selecionar uma entre várias instruções alternativas. Embora construções if-else possam executar testes para escolha de uma entre várias alternativas, muitas vezes são deselegantes.

O comando switch tem um formato limpo e claro.

switch (variável ou constante) { case constante1: instrução; // corpo do primeiro caso instrução; break; case constante2: instrução; // corpo do segundo caso instrução; break; case constante3: instrução; // corpo do terceiro caso instrução; break; default: instrução; // corpo do caso default instrução; }

A instrução switch consiste na palavra-chave switch seguida do nome de uma variável ou constante entre parênteses.

O corpo do comando switch é composto de vários casos rotulados por uma constante e opcionalmente um caso default.

O corpo de cada caso é composto por qualquer número de instruções. Geralmente, a última instrução é break.

O comando break causa a saída imediata de todo o corpo do switch. Na falta do comando break, todas as instruções após o caso escolhido serão executadas, mesmo as que pertencem aos casos seguintes.

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

70

Page 14: apostila de programação.doc

Não se pode utilizar uma variável nem uma expressão lógica como rótulo de um caso.

Pode haver nenhuma, uma ou mais instruções seguindo cada caso. Estas instruções não necessitam estar entre chaves.

O corpo de um switch deve estar entre chaves.

Se o rótulo de um caso for igual ao valor da expressão switch, a execução começa nele. Se nenhum caso for satisfeito e existir um caso default, a execução começará nele.

Um caso default é opcional.

Não pode haver casos com rótulos iguais.

Exemplo:

# include <iostream.h># include <conio.h>

main(){ unsigned int x; cout<<"Forneça um valor inteiro "; cin>>x; switch (x) { case 1: cout<<"O valor digitado é igual a 1"; break; case 2: cout<<"O valor digitado é igual a 2"; break ; case 3: cout<<"O valor digitado é igual a 3"; break; default: cout<<"O valor digitado é igual a "<<x; }

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

71

Page 15: apostila de programação.doc

getch();}

Exercícios de Fixação

1-) Qual é a saída do programa.

main(){ int x = 10, y = 3; if (x < 10) cout<<”Saída 1”; else if (y < 4) if (x > 10) cout<<”Saída 2”; else cout<<”Saída 3”;}

2-) Qual é a saída do programa.

main(){ int a = 2, b = 3, c = 4; if ((a<3) && ((b !=3) || (c == 4))) cout<<”saída 1”; if ((c ==3) || (b ==4)) cout<<”Saída 2”; if ((a < 3) && (b > 4)) cout<<”Saída 3”; else if (a == 2) if (b==5) cout<<”Saída 4”; else cout<<”Saída 5”;}

3-) Reescreva o trecho de programa abaixo utilizando apenas um comando de decisão if.

main()_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

72

Page 16: apostila de programação.doc

{ int x, y; cin>>x>>y; if (x < 5) if (y > 2) if (x+y < 20) if (y == 16) cout<<x<<” ”<<y;} 4-) Quais são os valores de x e y no final da execução do programa.

main(){ float x = 5, y = 2; if ((x < 6) && (y < x)) { x++; y++; } else x = x + 2; y = y + 3; if (x == y) x++; else y--; if ((x < 10) && (y > 8)) x--; else y--;}

5-) Qual será os valores de a, b e c no final da execução do programa.

main(){ int a = 1, b = 2, c = 3;

if ((a>b) && (b<c)) a++; b++; c++; if ((c == 4) || (b == 2)) a++; else b++; a--; if (b > c) { a = 2 * b; b++;} else {_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

73

Page 17: apostila de programação.doc

a--; b--; c--; }}6-) Qual será os valores de a, b e c no final da execução do programa.

main(){ int a = 1, b = 2, c = 3;

if ((a>b) && (b<c)) { a++; b++; c++; } if ((c == 4) || (b == 2)) a++; else b++; a--; if (b > c) { a = 2 * b; b++; } else a--; b--;c--;}

7-) Reescreva o programa abaixo utilizando o comando switch.

main(){int a;cin>>a;if (a == 1999) cout <<”Ano Atual !!”;else if (a == 1998) cout<<”Ano passado”; else if (a == 2000) cout<<”Próximo Ano”; else cout<<”Outros anos !!”;}

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

74

Page 18: apostila de programação.doc

Exercícios Propostos

1-) Faça um programa para ler dois valores A e B, e imprimir o maior deles.

2-) Refazer o exercício 1-) prevendo a possibilidade de serem iguais e imprimir a mensagem:”A = B”.

3-) Faça um programa para:- ler dois número inteiros;- calcular e imprimir o quociente do primeiro pelo segundo (se o

segundo for diferente de zero).

4-) Faça um programa para:- ler dois números reais;- verificar se ambos são maiores que zero;- se forem imprimir uma mensagem.

5-) Faça um programa para:- ler um caracter;- imprimir as seguintes mensagens, segundo o caso:

- “Sinal de Menor”- “Sinal de maior”- “Sinal de Igual”- “Outro Sinal”

6-) Faça um programa para verificar se um número inteiro é par ou ímpar.

7-) Faça um programa que coloca em ordem crescente três valores lidos do teclado.

8-) Refaça o programa para o cálculo das raízes de um equação do segundo grau, levando em consideração a análise da existência de raízes reais.

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

75

Page 19: apostila de programação.doc

9-) Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um programa que calcule seu peso ideal, utilizando as seguintes fórmulas:

- para homens: (72.7*h)-58;- para mulheres: (62.1*h)-44.7

10-) Dados três valores reais A, B e C correspondendo aos comprimentos dos lados de um triângulo, faça um programa para verificar se podem compor um triângulo e determine o tipo de triângulo (equilátero, isósceles e escaleno).

11-) Elabore um programa que, dada a idade de um nadador, classifique-o em uma das seguintes categorias:

- infantil A = 5 – 7 anos- infantil B = 8 – 10 anos- juvenil A = 11 – 13 anos- juvenil B = 14 – 17 anos- sênior = maiores de 18 anos

12-) Faça um programa utilizando o comando switch para ler um caracter do teclado e imprimir o telefone correspondente de acordo com a lista:

(A) Artur 221(J) João 219(L) Luiz 321(M) Mário 320

13-) Refaça o exercício 5-) utilizando o comando switch.

14-) Refaça o exercício 9-) utilizando o comando switch.

15-) Construa um programa que seja capaz de concluir qual dentre os animais seguintes foi escolhido, através de perguntas e respostas. Animais possíveis leão, cavalo, homem, macaco, morcego, baleia, avestruz, pingüim, pato, águia, tartaruga, crocodilo e cobra.

Exemplo: _________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

76

Page 20: apostila de programação.doc

É mamífero ? SimÉ quadrúpede? SimÉ carnívoro ? Não

ESTRUTURAS DE REPETIÇÃO

As estruturas de repetição (ou de laços) permitem que uma seqüência de comandos seja executada repetidamente até que uma determinada condição de interrupção seja satisfeita.

Em C++ existem três estruturas de repetição:

1. while 2. do – while3. for

REPETIÇÃO COM TESTE NO INÍCIO (WHILE)

Consiste numa estrutura de controle de fluxo lógico que permite executar diversas vezes um mesmo trecho do algoritmo, porém, sempre verificando antes de cada execução se é “permitido” repetir o mesmo trecho.

Para realizar em C++ a repetição com teste no início, utiliza-se a instrução WHILE que possui a seguinte sintaxe:

while (<condição>){

instrução1;instrução2; . . .instruçãoN;

}

A instrução WHILE consiste na palavra-chave while seguida de uma condição entre parênteses.

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

77

Page 21: apostila de programação.doc

Se a condição for verdadeira, o laço WHILE é executado, ou seja, as N instruções são executadas e a condição é avaliada novamente.O ciclo: teste da condição e execução das N instruções, é repetido até que a condição se torne falsa (igual a zero), então o laço termina e o controle do programa passa para a instrução seguinte.

O corpo de um WHILE pode ter uma única instrução terminada por ponto-e-vírgula, várias instruções entre chaves ou ainda nenhuma instrução mantendo o ponto-e-vírgula.

Exemplo:

# include <iostream.h># include <conio.h>

main(){ int i = 0; while (i < 4) { cout<<’*’; i++; } getch(); }

É importante saber que o comando WHILE é geralmente utilizado como aparece no exemplo anterior.

Uma variável contadora (no exemplo, a variável i), é utilizada para contar o número de vezes que o corpo do WHILE será executado. Esta variável é sempre inicializada com algum valor antes de ser utilizada no laço e incrementada (ou decrementada) dentro do corpo do WHILE.

Em geral, um laço WHILE é utilizado da seguinte forma:

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

78

Page 22: apostila de programação.doc

inicialização da variável contadora;

while (<condição>){ . . incremento da variável contadora; .

}

A utilização do laço WHILE dessa maneira, pode substituir o comando FOR que será descrito adiante.

Exemplo: Programa que calcula as notas finais de uma turma de 60 alunos verificando se cada aluno foi aprovado ou reprovado (utilizando o comando WHILE).

# include <iostream.h># include <conio.h>

main(){ int p1, // Prova 1 p2, // Prova 2 nt, // Nota de Trabalhos ef, // Exame Final nf, // Nota Final cont = 0; // inicialização da variável contadora while (cont < 60) {

cout<<"\n Digite as 4 notas do aluno: "; cin>>p1>>p2>>nt>>ef; nf = p1 + p2 + nt + ef; if (nf >= 60) cout<<"\n\nParabéns !!!\nAprovado com Nota Final = "<<nf; else cout<<"\n\nReprovado !!\n Estude mais !!"; cont++; // incremento da variável contadora getch(); clrscr(); // limpa a tela

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

79

Page 23: apostila de programação.doc

} getch();}

REPETIÇÃO COM TESTE NO FINAL (DO - WHILE)

Para realizar a repetição de um trecho do programa com teste no final, utiliza-se o comando DO-WHILE.

O laço DO-WHILE é bastante similar ao laço WHILE e é utilizado em situações onde há a necessidade de executar o corpo do laço uma primeira vez e depois avaliar a condição.

A sintaxe do comando DO-WHILE é:

do{ instrução1; instrução2; . . . instruçãoN; }while (<condição>);

A instrução DO-WHILE consiste na palavra-chave do seguida de um bloco de uma ou mais instruções entre chaves e terminada pela palavra chave while seguida de uma condição entre parênteses terminada por ponto-e-vírgula.

Primeiramente, o bloco de N instruções é executado, em seguida a condição entre parênteses é avaliada; se verdadeira, o corpo do laço é mais uma vez executado e a condição é avaliada novamente.

O ciclo: execução do bloco e teste da condição, é repetido até que a condição se torne falsa, então o laço termina e o controle do programa passa para a instrução seguinte.

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

80

Page 24: apostila de programação.doc

Exemplo:

# include <iostream.h># include <conio.h>

main(){ int i = 0; do { cout<<’*’; i++; } while (i < 4); getch(); }

Assim como no comando WHILE, pode-se utilizar o comando DO-WHILE com uma variável contadora para contar o número de vezes que o corpo do laço é executado.

inicialização da variável contadora;

do{ . . incremento da variável contadora; .

} while (<condição>);

É importante lembrar que utilizando o comando DO-WHILE o corpo do laço é executado pelo menos uma vez antes da avaliação da condição.

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

81

Page 25: apostila de programação.doc

Exemplo: Programa que calcula as notas finais de uma turma de 60 alunos verificando se cada aluno foi aprovado ou reprovado (utilizando o comando DO-WHILE).

# include <iostream.h># include <conio.h>

main(){ int p1, // Prova 1 p2, // Prova 2 nt, // Nota de Trabalhos ef, // Exame Final nf, // Nota Final cont = 0; // inicialização da variável contadora do {

cout<<"\n Digite as 4 notas do aluno: "; cin>>p1>>p2>>nt>>ef; nf = p1 + p2 + nt + ef; if (nf >= 60) cout<<"\nAprovado com Nota Final = "<<nf; else cout<<"\n\nReprovado !!\n Estude mais !!"; cont++; // incremento da variável contadora getch(); clrscr(); // limpa a tela

} while (cont < 60); getch();}

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

82

Page 26: apostila de programação.doc

Exercícios de Fixação

1-) Qual o valor da variável x no final da eyecução dos trechos de programa abaixo:

a-) b-)int cont = 0, x = 2; int i = 0, x = 3;while (cont < 5) while (i <= 6) { { x = x + 10; x = x + 3; cont++; i +=2; } }

c-) d-) int j = 1, x = 1; int cont = 1, x = 2; while (j <= 8) while (cont <= 10) { { x = 2*x; x = pow(x, 2); j+=2; cont+=3; } }

e-) f-) int cont = 5, x = 1; int k = 4, x = 2; while (cont >0) while (k >=1) { { x++; x +=2; cont--; k--; } }

g-) h-) int cont = 0, x = 2; int j = 4, x = 1; do do { { x = 3*x; x = x + 2; cont++; j--; } while (cont <=3); } while (j > 0);

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

83

Page 27: apostila de programação.doc

i-) j-) int k = 1, x = 2; int k = 1, x = 2; while ((k < 6) || (x < 3)) while ((k < 6) && (x <3)) { { x++; x++; k++; k++; } }

k-) l-) int j = 1, x = 2; int k = 2, x = 5; do do { { x++; x -=2; j += 3; k = 2 * k; }while ((x<4)&&(j<10)) ; }while ((x>0)||(k < 4));

m-) n-) int k = 2, x = 1; int j = 1, x = 2; while (k > 1) x++; do x--;

while (j > 0);

2-) Qual a saída do trecho de programa abaixo:

int cont = 3; while (cont < 2) { cout<<”Nao saio nenhuma vez. Buaaaa !!”; cont++; }

3-) Qual a saída do trecho de programa abaixo: int cont = 3; do { cout<<”Saio pelo menos uma vez. Eba !”; cont++;_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

84

Page 28: apostila de programação.doc

} while (cont < 2);4-) Qual os valores de cont, x, y e z no final da execução do trecho de programa abaixo:

int cont = 0, x = 1, y = 2, z = 3;if (x < 2) while (cont < 3) { y++; cont++; }if (y ==5) while (x < 3) { z++; x++; }

5-) Quais os valores de a, b e c no final da execução do programa abaixo:

int i=0, j = 0, a=1, b=1, c=1;if (a ==1) { b++; while (i < 3) { a++; i++; } }if (b == 1) a--;else { a++; while (b < 4) b++; c++; a--; }while (j < 3) { if (a < 2) c++; else c--; j++;_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

85

Page 29: apostila de programação.doc

}6-) Quais os valores de x, y e z no final da execução do programa abaixo:

int cont=1, k=0, x = 1, y = 2, z = 1;while (cont <=2) { if (x ==1) do { y++; k++; } while (k < 2); if (x == 2) k++; else if (x < 2) x++; k = 4; while (k > 1) { y +=2; x--; z++; k--; } if (k ==1) z++; else x++; z--; cont ++; }

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

86

Page 30: apostila de programação.doc

REPETIÇÃO COM VARIÁVEL DE CONTROLE (FOR)

O uso das estruturas de repetição vistas anteriormente (WHILE e DO-WHILE) pode ser mais adequado em casos onde se torna difícil determinar quantas vezes um bloco de instruções será executado.

Quando se sabe de antemão o número de vezes que um bloco de instruções deve ser repetido é recomendado o uso do laço FOR.

A instrução FOR consiste na palavra-chave for seguida de parênteses que contêm três expressões separadas por pontos-e-vírgulas. A primeira expressão é chamada de inicialização da variável de controle, a segunda de teste e a terceira de incremento da variável de controle.

Em sua forma mais simples, a inicialização é uma instrução de atribuição e é sempre executada uma única vez antes do laço ser iniciado.

O teste é uma condição avaliada como verdadeira ou falsa e controla a execução do laço. Esta expressão é avaliada toda vez que o laço é iniciado ou reiniciado. Se a condição do teste for verdadeira, as instruções do corpo do laço são executadas, caso contrário, o laço é encerrado e o controle de fluxo de execução do programa passa para a instrução seguinte ao laço.

O incremento geralmente define a maneira pela qual a variável de controle será alterada cada vez que o laço for repetido. Essa expressão é executada sempre, imediatamente após a execução do corpo do laço.

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

87

Page 31: apostila de programação.doc

Exemplo:

# include <iostream.h># include <conio.h>

main(){ int i; for (i =0; i < 20; i++) cout<<`*`;}

No exemplo acima, o laço FOR será executado 20 vezes. Na primeira vez, a inicialização assegura que a variável de controle i vale zero. Na última vez, i vale 19. O corpo do laço não é executado quando i vale 20.

Exemplo: Imprime a tabuada do 6.

# include <iostream.h># include <conio.h>

main(){ int i; for (i =1; i <=10; i++) cout<<”\n ”<<i<<” ”<< (i*6);}

A saída do programa do exemplo anterior é:

1 62 123 184 24

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

88

Page 32: apostila de programação.doc

5 306 367 428 489 5410 60

Exemplo: Imprime os múltiplos de 3 entre 3 e 100.

# include <iostream.h># include <conio.h>

main(){ int i; for (i =3; i <=100; i+=3) cout<<”\t”<<i;}

A saída é:

3 6 9 12 15 18 21 24 ...

A sintaxe da instrução FOR pode ser dada como segue:

for ( i = 0; i < 10; i++) instrução;

Quando há mais de uma instrução dentro do corpo do laço deve-se delimitá-lo através de chaves._________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

89

inicialização teste incremento

corpo do laço

Page 33: apostila de programação.doc

for (i = 0; i < 10; i++) { instrução; instrução; }

Não se deve nunca colocar ponto-e-vírgula depois do parênteses que contêm as três expressões do FOR.

A não ser que se queira deixar o corpo do laço vazio. Neste caso nenhuma instrução será executada durante a execução do laço FOR. A instrução seguinte é um exemplo do comando FOR com corpo vazio.

for (i = 0; i <= 100; i ++) ;

Exemplo: Programa que calcula as notas finais de uma turma de 60 alunos verificando se cada aluno foi aprovado ou reprovado (utilizando o comando FOR).

# include <iostream.h># include <conio.h>

main(){ int p1, // Prova 1 p2, // Prova 2 nt, // Nota de Trabalhos ef, // Exame Final nf, // Nota Final i; // variável de controle

for (i = 0; i < 60; i++)

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

90

continua

Page 34: apostila de programação.doc

{ cout<<"\n Digite as 4 notas do aluno: "; cin>>p1>>p2>>nt>>ef; nf = p1 + p2 + nt + ef; if (nf >= 60) { cout<<"\n\nParabéns !!!"; cout<<"\nAprovado com Nota Final = "<<nf; } else cout<<"\n\nReprovado !!\n Estude mais !!";getch(); clrscr(); // limpa a tela

} getch();}

Exercícios de Fixação

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

91

Page 35: apostila de programação.doc

1-) Qual o valor da variável x no final da execução dos trechos de programa abaixo:

a-) int x = 2;

for(int cont = 0; cont < 5; cont ++) x = x + 10;

b-) int x = 1;

for(int j = 1; j <= 8; j +=2) x = 2 * x;

c-) int x = 1; for (int k = 5; k > 0; k--) x++;

d-) int x = 2; for (int p = 4; p >= 1; p--) x +=2;

e-) int x = 3; for (int i = 1; i < 4; i++) ; x = x + 5;

f-) int x = 2; for (int i = 0, int j = 0; (i + j) < 10; i++, j++) x = x + 3;

g-) int x = 3; for (int i = 1; i <= 3; i++) for (int j = 1; j <= 3; j++) x = x+ 2;

h-) _________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

92

Page 36: apostila de programação.doc

int x = 1; for (int k = 0; k < 3; k++) for (int j = 1; j < 3; j++) x ++;

i-) int x = 2; for (int i = 1; i < 3; i++) for (int j = 1; j < 3; j++) for (int k = 1; k < 3; k++) x = x+ 2;

j-) int x = 2; for (int i = 1; i < 3; i++); for (int j = 1; j < 3; j++); for (int k = 1; k < 3; k++) x = x + 2;

2-) Qual a saída do trecho de programa abaixo:

for (i = 3; i < 2; i++) cout<<”Nao saio nenhuma vez. Buaaaa !!”;

3-) Verdadeiro ou falso: Os dois trechos de programa seguintes produzem o mesmo resultado ?

a-) for ( i = 0; i < 10; i ++) for (j = 0; j < 10; j ++) cout<<i + j;

b-) for ( i = 0, j = 0; i < 10; i ++) for ( ; j < 10; j ++) cout<<i + j;4-) O programa seguinte imprime uma letra I bem grande na tela.

main(){

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

93

Page 37: apostila de programação.doc

int j = 0; cout<<”\n\nIIIIIIIIIIIIIIIIIII\n”; while (j < 10) { cout<<” IIIIIII\n”; j++; } cout<<” IIIIIIIIIIIIIIIIIII\n”;}

a-) Modifique o programa para que utilize um laço FOR no lugar de um laço WHILE.

b-) Responda: qual dos laços se adapta melhor no programa? Por quê ?

5-) Qual os valores de cont, x, y e z no final da execução do trecho de programa abaixo:

int x = 1, y = 2, z = 3;if (z < 2) for (int cont = 0; cont < 3; cont ++) y++;if (y ==5) for ( ;x < 3; x++) z++; 6-) Qual os valores de cont, x, y e z no final da execução do trecho de programa abaixo:

int x = 1, y = 2, z = 3;if (z < 2) for (int cont = 0; cont < 3; cont ++) y++;if (y ==5) for ( x = 4 ; x < 3; x++) z++; 7-) Quais os valores de a, b e c no final da execução do trecho de programa abaixo:

int a=1, b=1, c=1;

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

94

Page 38: apostila de programação.doc

if (a ==1) { b++; for (int i = 0; i < 3; i++) a++; b--; }if (b == 1) a--;else c++;}

8-) Quais os valores de x, y e z no final da execução do programa abaixo:

int k=0, x = 1, y = 2, z = 1;for (int cont = 1; cont <=2; cont ++) { if (x ==1) do { y++; k++; } while (k < 2); if (x == 2) k++; else if (x < 2) x++; k = 4; for (k = 4; k > 1; k--) { y +=2; x--; z++; } if (k ==1) z++; else x++; z--; }Exercícios Propostos

1-) Faça um programa que, dado um conjunto de valores inteiros e positivos (fornecidos um a um pelo usuário), determine qual o menor _________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

95

Page 39: apostila de programação.doc

valor do conjunto. O final do conjunto de valores é conhecido através do valor zero, que não deve ser considerado.

2-) Construa um programa que, dado um conjunto de valores inteiros e positivos (fornecidos um a um pelo usuário), determine qual o menor e o maior valor do conjunto. O final do conjunto de valores é conhecido através do valor –5, que não deve ser considerado.

3-) A conversão de graus Fahrenheit para Centígrados é obtida pela fórmula C = 5/9(F – 32). Escreva um programa que calcule e escreva uma tabela de graus centígrados em função de graus Fahrenheit que variem de 50 a 150 de 1 em 1.

4-) Faça um programa para cada cálculo abaixo: a-) soma dos N primeiros números inteiros positivos;b-) soma dos N primeiros números pares;O número N é fornecido pelo usuário para os dois programas.

5-) Sendo H = 1 + 1/2 + 1/3 + 1/4 +...+ 1/N, construa um programa para gerar o número H. O número N é fornecido pelo usuário.

6-) Escreva um programa para calcular com 20 parcelas:

Y = x/1 + x2/2 + x3/3 + x4/4 + ...

O número x é fornecido pelo usuário.

7-) Faça um programa para gerar o número Z = x/2 + x2/3 + x3/4 + x4/5 +...+ xN-1/N. Os números N e x são fornecidos pelo usuário.

8-) Escreva um programa para calcular com 30 parcelas:

Y = x/1 + x3/3 + x5/5 + x7/7 + ...

O número x é fornecido pelo usuário.

9-) Escreva um programa para calcular com 10 parcelas:

Y = - x/1 + x2/4 - x3/9 + x4/16 – x5/25...

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

96

Page 40: apostila de programação.doc

O número x é fornecido pelo usuário.

10-) Escreva um programa para calcular com 15 parcelas:

Y = x/1 - x2/8 + x3/27 - x4/64 + x5/125...

O número x é fornecido pelo usuário.

11-) Faça um programa para calcular o produto dos N primeiros números inteiros positivos.

12-) Elabore um programa que calcule N! (fatorial de N), sendo que o valor inteiro de N é fornecido pelo usuário.Sabendo que: N! = N x (N-1) x (N-2) x ... x 3 x 2 x 1; 0! = 1, por definição.

13-) Construa um programa que verifique se um número inteiro positivo fornecido pelo usuário é primo ou não.

14-) Fazer um programa para calcular e mostrar os N primeiros termos da série de Fibonacci. O número N é fornecido pelo usuário. A série de Fibonacci é gerada da seguinte forma:

f1 = f2 = 1;f3 = f1 + f2 = 2;f4 = f2 + f3 = 3;f5 = f3 + f4 = 5;f6 = f4 + f5 = 8; ...

O primeiro e segundo termos valem 1 e os seguintes são calculados somando os dois termos anteriores.

15-) Faça um programa para calcular a média aritmética dos N primeiros números inteiros positivos. O número N é fornecido pelo usuário.

16-) Fazer um programa para calcular a nota final (NF) de uma turma de 60 alunos e determinar a maior e a menor nota. A nota final

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

97

Page 41: apostila de programação.doc

corresponde a soma de 4 notas (Prova1,Prova2, Nota_de_Trabalhos e Exame_Final).

17-) Idem ao exercício 17 determinando ainda se cada aluno foi aprovado ( nota final maior ou igual a 60) ou reprovado.

18-) Em uma eleição presidencial, existem quatro candidatos. Os votos são informados através de códigos. Os dados utilizados para a apuração obedecem a seguinte codificação:

1,2,3,4 = voto para os respectivos candidatos; 5 = voto nulo; 6 = voto em branco;

Elabore um programa que determine:

candidato vencedor; situação do candidato vencedor sobre os outros, no caso, se ele

obteve ou não mais votos que os outros somados; total de votos para cada candidato; total de votos nulos; total de votos em branco.

O número de eleitores é definido pelo usuário.

19-) Construa um programa que leia um conjunto de dados contendo altura e sexo (masculino e feminino) de 50 pessoas e depois calcule e escreva:

a maior e a menor altura do grupo; a média de altura das mulheres; a média de altura dos homens;

20-) Fulano tem 1,50 metros e cresce 2 centímetros por ano, enquanto Ciclano tem 1,10 metros e cresce 3 centímetros por ano. Construa um programa que calcule e imprima quantos anos serão necessários para que Ciclano seja maior que Fulano.

21-) Calcule o imposto de renda de um grupo de contribuintes considerando que os dados de cada contribuinte: número do CPF, _________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

98

Page 42: apostila de programação.doc

número de dependentes e renda mensal são valores fornecidos pelo usuário. Para cada contribuinte será feito um desconto de 5% de salário mínimo por dependente. Os valores da alíquota para cálculo do imposto são:

Renda Líquida Alíquotaaté 2 salários mínimos isento2 a 3 salários mínimos 5%3 a 5 salários 10%5 a 7 salários mínimos 15%acima de 7 salários mínimos 20%

O último valor, que não será considerado, terá o CPF igual a zero. Deve ser fornecido o valor atual do salário mínimo.

22-) Foi realizada uma pesquisa de algumas características físicas da população de uma certa região, a qual coletou os seguintes dados referentes a cada habitante para serem analisados:

sexo (masculino ou feminino); cor dos olhos (azuis, verdes, castanhos); cor dos cabelos (louros, castanhos, pretos); idade.

Faça um programa que determine:

qual quantidade é maior: de homens ou de mulheres; a média das idades dos habitantes; a quantidade de indivíduos de sexo feminino cuja idade está entre

18 e 35 anos e que tenham olhos verdes e cabelos louros;

O final do conjunto de habitantes é reconhecido pelo valor –1 entrada como idade.

23-) Realizou-se um pesquisa para determinar o índice de mortalidade infantil em um certo período. Construa um programa que leia o número de crianças nascidas no período e, depois, num número indeterminado

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

99

Page 43: apostila de programação.doc

de vezes, o sexo de uma criança morta (masculino, feminino), e o número de meses de vida da criança.Como finalizador tem-se a letra “x” no lugar do sexo da criança. Determine:

a porcentagem de crianças mortas no período; a porcentagem de crianças do sexo masculino mortas no período; a porcentagem de crianças que viveram dois anos ou menos no

período.

24-) Um cinema que possui capacidade de 100 lugares está com ocupação total. Certo dia cada espectador respondeu a um questionário, no qual constava:

sua idade; sua opinião em relação ao filme, segundo:

- ótimo = 5;- bom = 4;- regular = 3;- ruim = 2;- péssimo = 1;

Construa um programa que, lendo estes dados, calcule:

a quantidade de respostas ótimo; a diferença entre repostas bom e regular; a média de idade das pessoas que responderam ruim; a porcentagem de respostas péssimo.

_________________________________________________________________________________Algoritmos e Técnicas de Programação I Professor: Luciano

100