Escolar Documentos
Profissional Documentos
Cultura Documentos
Capítulo
5 Estruturas de Decisão
“Há sómente duas coisas que são infinitas: o universo e a estupidez humana. Mas a respeito do universo
tenho as minhas dúvidas”
- Albert Einstein -
if (expressão)
Bloco de comandos;
e caracteriza-se por:
Versão 1
Versão 2
1- declarar nota1, nota2, nota3, mediaAluno;
2- ler (nota1, nota2, nota3);
3- calcular a média do aluno;
4- imprimir a média do aluno e a mensagem;
No próximo passo, vamos escrever com mais rigor, a fórmula para calcular a
média, a impressão do seu valor, e as acções necessárias para mostrar na tela
a mensagem "aprovado".
Versão 3
1- declarar nota1, nota2, nota3, mediaAluno;
2- ler (nota1, nota2, nota3);
3- calcular mediaAluno = (nota1 + nota2 + nota3)/3;
4- imprimir(mediaAluno);
5- se mediaAluno >= 10.0 então
6- imprimir ("aprovado");
Sempre que tivermos de executar mais do que uma instrução devemos utilizar
os delimitadores de bloco.
Versão 1
1- ler os números;
2- determinar o maior elemento;
3- imprimir o resultado;
int a, b;
Versão 2
1- declarar a, b;
2- ler (a, b);
3- comparar a com b para definir o maior;
4- imprimir o maior;
se a > b então
armazenar na variável max o valor de a;
se b > a então
armazenar na variável max o valor de b;
onde max é uma variável auxiliar do tipo inteiro. Então o algoritmo será descrito
pelos seguintes passos.
Versão 3
1- declarar a, b, max;
2- ler (a, b);
3- se a > b então
4- armazenar na variável max o valor a;
5- se b > a então
6- armazenar na variável max o valor b;
4- imprimir (max);
Exemplo 3: desenvolva um programa para ler dois números inteiros, que podem
ser iguais, e mostrar o maior.
Versão 1
1- ler o numero inteiro;
2- separar unidades, dezenas e centenas;
3- imprimir o resultado;
Versão 2
1-declarar n, unidade, dezena, centena;
2-ler (n);
3-separar unidades, dezenas e centenas;
4-imprimir o resultado;
Versão 3
1- declarar n, unidade, dezena, centena;
2- ler (n);
3- se n < 0 então
4- início
5- imprimir mensagem de erro;
6- terminar o programa;
7- fim
8- se n > 999 então
9- início
10- imprimir mensagem de erro;
11- terminar o programa;
12- fim
13- separar unidades, dezenas e centenas;
14- imprimir o resultado;
495%10 = 5
495/10 = 49 e 49% 10 = 9
49 / 10 = 4
Versão 4
1- declarar n, unidade, dezena, centena;
2- ler (n);
3- se n < 0 então
4- início
5- imprimir mensagem de erro;
6- sair do programa;
7- fim
8- se n > 999 então
9- início
10- imprimir mensagem de erro;
11- sair do programa;
12 fim
13-calcular unidade = n % 10;
14-calcular n = n/10;
15-calcular dezena = n% 10;
16-calcular centena = n/10;
17-imprimir(unidade, centena, dezena);
if (expressão)
Bloco de comandos1;
else
Blocos de comandos2;
e carateriza-se por:
Versão 2
1- declarar nota1, nota2, nota3, mediaAluno;
Manuel Menezes- Faculdade de Engenharia da Universidade Católica de Angola 50
Fundamentos de Programação em C: Uma Abordagem Algorítmica
2- ler (nota1, nota2, nota3);
3- calcular a média do aluno;
4- imprimir média do aluno e a mensagem;
No próximo passo, vamos descrever com mais rigor, o cálculo da média, a sua
impressão, e as acções necessárias para mostrar a mensagem "Aprovado" ou
"Reprovado". Como essas acções são mutuamente exclusivas, se uma for
realizada a outra não será, elas podem ser modeladas pelo comando condicional
composto.
Versão 3
1- declarar nota1, nota2, nota3, mediaAluno;
2- ler (nota1, nota2, nota3);
3- calcular mediaAluno = (nota1 + nota2 + nota3)/3.0;
4- imprimir (mediaAluno)
5- se mediaAluno >= 10.0 então
6- imprimir ("aprovado");
7- senão
8- imprimir ("reprovado");
Versão 1
1- ler os três números;
2- calcular o maior;
3- imprimir o maior;
Pelo enunciado fazem parte dos dados de entradas três números inteiros
diferentes e da informação de saída o maior deles. Vamos associar as variáveis
que representam esses números aos teus tipos de dados:
Versão 2
1- declarar a, b, c, max;
2- ler (a, b, c);
3- armazenar o maior valor na variável max;
4- imprimir (max);
Versão 3
1- declarar a, b, c, max;
2- ler (a, b, c);
3- se a > b então
4- armazenar na variável max o conteudo de a;
5- senão
6- armazenar na variável max o conteudo de b;
7- se c > max então
8- armazenar na variável max o conteudo de c;
9- imprimir(max);
Numa primeira abordagem, uma possível solução para este problema pode ser
descrita pelos seguintes passos:
Versão 1
1- ler os lados do triângulo;
2- verificar se é triangulo retângulo;
3- imprimir o resultado;
Versão 2
1- declarar lado1, lado2, lado3;
Manuel Menezes- Faculdade de Engenharia da Universidade Católica de Angola 56
Fundamentos de Programação em C: Uma Abordagem Algorítmica
2- ler (lado1, lado2, lado3);
3- verificar se é triângulo rectângulo;
4- imprimir mensagem;
No próximo passo, vamos expandir a acção para verificar se temos pelo menos
um lado, cujo quadrado é igual a soma dos quadrados dos restantes, ou seja, se
temos um triângulo retângulo.
Versão 3
1- declarar lado1, lado2, lado3;
2- ler (lado1, lado2, lado3);
3- se lado1*lado1 = lado2*lado2 + lado3*lado3 então
4- imprimir (“É triângulo rectângulo”);
5- senão se lado2*lado2 = lado1*lado1 + lado3*lado3 então
6- imprimir (“É triângulo rectangulo”);
7- senão se lado3*lado3 = lado1*lado1 + lado2*lado2 então
8- imprimir (“É triângulo rectângulo”);
9- senão imprimir (“Não é triângulo retângulo”);
−𝑏 ∓ √𝑏𝑏−4𝑎𝑐
X=
2𝑎
para
Numa primeira abordagem, uma possível solução para este problema pode ser
descrita pelos seguintes passos:
Versão 1
1- ler os dados;
2- calcular as raízes da solução;
3- imprimir os resultados;
Pelo enunciado, temos como variáveis de entrada três números inteiros que
podem ser declarados pelas variáveis a, b e c. Como Informação de saída temos
as raízes da solução, que podem ser declaradas pelas variáveis x1 e x2. Mas,
necessitamos de uma variável auxiliar para calcular o valor do descriminante.
Vamos associar essas variáveis aos seus tipos de dados com a seguinte
declaração.
int a, b, c;
float x1, x2, descri;
Versão 2
1- declarar a, b, c, x1, x2, descri;
2- ler (a, b, c);
3- calcular o valor do discriminante;
4- se discri ≥ 0 então
5- calcular as raízes reais;
6- senão
7- imprimir ("O problema não tem solução");
8- imprimir (x1, x2);
Versão 3
1- declarar a, b, c, x1, x2, descri;
2- ler (a, b, c);
3- calcular o valor do discriminante;
4- se discri ≥ 0 então
5- início
6- calcular as raízes reais;
7- imprimir os resultados;
8- fim
9- senão
10- imprimir (" Erro: Raizes complexas ");
Mas as raízes reais podem ser iguais se o descriminante for igual a zeros e
diferentes se este for positivo. Isso leva-nos ao seguinte refinamento
Versão 4
1- declarar a, b, c, x1, x2, descri;
2- ler (a, b, c);
3- calcular o valor do discriminante;
4- se discri = 0 então
5- início
6- calcular as raízes reais iguais;
7- imprimir os resultados;
8- fim
9- senão se discri > 0 então
10- início
11- calcular as raízes reais diferentes;
12- imprimir os resultados;
13- fim
14- senão
15- imprimir(" Erro: Raizes complexas ");
Média Classificação
≤8 Reprovado
> 8 e ≤ 12 Vai a Exame
> 12 e ≤ 14 Dispensado ao Exame
> 14 Defesa de Nota
Esta solução, apesar de funcionar não é eficiente. Para provar essa afirmação,
vamos analisar o comportamento do programa com um exemplo. Suponhamos
que o estudante tenha uma média igual a dezaseis valores. Inicialmente o
programa verifica se a média é superior a catorze. Como o resultado dessa
comparação é verdadeiro o programa mostra a classificação na tela. Mas, em
seguida volta a executar as restantes comparações. Isso é um absurdo e
inaceitável em programação.
Este programa também não é eficiente, pois vejamos: suponhamos sem perda
da generalidade, que o estudante tenha uma média igual a treze valores.
Inicialmente o programa verifica se a média é superior a catorze valores. Como
essa comparação é falsa, o programa vai verificar se a média é superior a doze
valores e inferior ou igual a catorze valores. Mas nessa altura já sabemos que a
média é inferior ou igual a catorze valores, logo esta comparação é
desnecessária. Com base nesse raciocínio podemos concluir que quanto menor
for a nota mais operações desnecessárias são realizadas, e isso é uma prova
irrefutável da ineficiência do programa.
if (x > 0) if ( x > 0 )
printf("x eh positivo"); printf (" x eh positivo");
else else
printf("x eh negativo"); printf ("x eh negativo");
O segmento de código.
int a, b;
printf ("Digite a temperatura:");
scanf ("%d", &temp);
if ( temp < 30 )
if ( temp > 20 )
printf ("\nTemperatura agradavel");
else
printf ("\n Temperatura muito quente");
int a, b;
printf ("Digite a temperatura:");
scanf ("%d", &temp);
if ( temp < 30 )
{
if ( temp > 20 )
printf ("\nTemperatura agradavel");
}
else
printf ("\n Temperatura muito quente");
Uma indentação correcta ajuda a tornar o código mais claro e legível, mas não
determina como o ele será executado.