Você está na página 1de 72

APLICAÇÕES INFORMÁTICAS B

Unidade n.º 1
Algoritmia e programação em C – ciclos e decisões
- 2.ª Parte -
João Silva • 2021/22 1
SÍNTESE DE CONTEÚDOS

I. Conceitos básicos sobre estruturas de controlo.

II. Conceitos sobre lógica em programação.

III. Estruturas de decisão em algoritmia e na linguagem C.

IV. Estruturas de repetição em algoritmia e na linguagem C.

V. Noções de contador e acumulador. Palavras reservadas em


estruturas de controlo.

VI. Conceitos e normas de organização de código.


João Silva • 2021/22 2
7. NOÇÕES SOBRE ESTRUTURAS DE CONTROLO

➢Estruturas sequenciais

Classificação
das
estruturas ➢Estruturas de decisão ou seleção
básicas de
programação
Estruturas de
controlo

➢Estruturas de repetição ou ciclos (loops)

João Silva • 2021/22 3


7.1. ESTRUTURAS SEQUENCIAIS

Nas estruturas sequenciais de instruções, os Início

As operações são executadas na ordem


programas resultantes são executados segundo uma

exata em que estão indicadas


sequência rígida de ações, sem que esta possa ser Ação 1
alterada em função dos dados de entrada.
Ação 2
Nos programas muito simples, apenas se
utilizam instruções básicas (leitura, atribuição e
escrita), delimitadas pelos caracteres de início
( { ) e de fim ( } ) . Por exemplo, programas que
Ação N
devolvem o resultado de fórmulas ou de
expressões matemáticas simples.
Fim

João Silva • 2021/22 4


7.1. ESTRUTURAS SEQUENCIAIS (CONTINUAÇÃO)

Estrutura sequencial de instruções

Pseudocódigo Linguagem C
#include <stdio.h>
#include <stdlib.h>
Algoritmo soma; #include <conio.h>
Variáveis a, b, y : Inteiros; main( )
{
Início int a, b, y;
Ler (a, b); printf("O valor de A = ");
scanf("%d", &a);
y  a + b;
printf("O valor de B = ");
Escrever (y); scanf("%d", &b);
Fim. y = a + b;
printf("O valor de Y = A + B = %d", y);
printf ("\nPrima uma tecla para terminar...");
getch();
}

FIM de
João Silva • 2021/22 Tópico 5
7.2. ESTRUTURAS DE CONTROLO EM C – VISÃO GERAL

As Estruturas de Controlo…
permitem dirigir o fluxo das ações de um programa, o que aumenta as
potencialidades para resolver problemas mais complexos.
Instruções básicas

Instruções de input Instruções de atribuição Instruções de output

Estruturas de controlo

Estruturas de decisão Estruturas de repetição


if (condição) for (início, condição, contador) while (condição) {
{<instruções> } <instruções>
[else <instruções>] { }
switch (expressão_variável) <instruções> do
case {<instruções> break;} { <instruções> }
[default <instruções>] } while (condição);

João Silva • 2021/22 6


7.2. ESTRUTURAS DE CONTROLO EM C – VISÃO GERAL

➢Operadores relacionais e lógicos

➢Precedências dos operadores

Conceitos
sobre lógica
em
➢Operadores de incremento e de decremento
programação

➢Expressões booleanas/lógicas

➢Representação dos valores lógicos em C


João Silva • 2021/22 7
7.2.1. OPERADORES RELACIONAIS E LÓGICOS EM C

As estruturas de controlo fazem o encaminhamento do fluxo de instruções de um


programa. Utilizam condições ou expressões booleanas (assumem um de dois valores:
verdadeiro/falso), compostas pelos operadores relacionais e/ou lógicos.

OPERADORES RELACIONAIS OU COMPARATIVOS


EXEMPLO
OPERADOR SIGNIFICADO RESULTADO
(a=10 e b=5)
== Igual a a == b False
!= diferente de a != b True
< menor que a<b False
> maior que a>b True
<= menor ou igual a a<=b False
>= maior ou igual a a>=b True
João Silva • 2021/22 8
7.2.1. OPERADORES RELACIONAIS E LÓGICOS EM C (CONTINUAÇÃO)

OPERADORES LÓGICOS
EXEMPLO
OPERADOR SIGNIFICADO RESULTADO
(a=10, b=5 e c=2)
! Negação ! (a > b) False
&& Conjunção (E) (a > b) && (b > c) True
|| Disjunção inclusiva (OU) (c > a) || (b > c) True

EXEMPLOS
A expressão devolve o valor ‘verdadeiro’ quando a variável ‘Idade’ for igual
Idade == 20
a 20, caso contrário o valor será ‘falso’.
A expressão devolve o valor ‘verdadeiro’ quando a variável ‘Peso 1’ for
Peso 1 < Peso 2
menor que ‘Peso 2’, caso contrário será ‘falso’.

João Silva • 2021/22 9


7.2.1. OPERADORES RELACIONAIS E LÓGICOS EM C (CONTINUAÇÃO)

Tabelas de verdade

NEGAÇÃO CONJUNÇÃO DISJUNÇÃO


p !p p q p && q p q p || q
V F V V V V V V
F V V F F V F V
F V F F V V
F F F F F F

EXEMPLO

(Idade >= 10) && (Idade <= 20) A expressão será verdadeira para valores da variável ‘Idade’
pertencentes ao intervalo [10, 20], caso contrário será falsa.

João Silva • 2021/22 10


7.2.2. ORDEM DE PRIORIDADE DOS OPERADORES EM C

Prioridade
 / OPERADORES UNÁRIOS EXEMPLO
Maior ! (negação lógica)
! ((6 >= 3) && (5 != 6)) || (10 * 2 > 22)
 / OPERADORES MULTIPLICATIVOS
* (Multiplicação)
/ (Divisão)
% (Resto da divisão inteira)
RESULTADO
&& (Conjunção lógica)
! (True && True) || False
 / OPERADORES ADITIVOS ! (True) || False
+ (Adição)
- (Subtração)
|| (Disjunção inclusiva) False || False

 / OPERADORES RELACIONAIS False


Menor ==, <, >, != , <=, >=

FIM de
João Silva • 2021/22 Tópico 11
7.2.3. OPERADORES DE AUTO INCREMENTO / AUTO DECREMENTO

Os operadores incrementais/decrementais agilizam a escrita de código, uma


vez que têm a finalidade de aumentar/diminuir exatamente de 1 o valor de
uma variável. São usualmente utilizados para implementar contadores.
EXEMPLO
OPERADOR EQUIVALÊNCIA SAÍDA
(considere X=10)
printf(“%d”, X++);
X++; //Retorna o valor de X e depois incrementa
++
Output: 10
X = X + 1;
printf(“%d”, ++X);
++X; //Incrementa a variável X e depois retorna o valor Output: 11
printf(“%d”, X--);
X--; //Retorna o valor de X e depois decrementa
--
Output: 10
X = X – 1;
printf(“%d”, --X);
--X; //Decrementa a variável X e depois retorna o valor Output: 9
FIM de
João Silva • 2021/22 Tópico 12
7.2.4. EXPRESSÕES LÓGICAS

Aplicação das regras do cálculo booleano e dos operadores incrementais/


decrementais

Calcule o resultado das expressões seguintes. Admita que:


A = 20 B = 24 C=4 D=9
i = 10 j=2
Calcule:
a) B <= A && D > C || B == 12
b) A != B && (! (D == 9 || C >= 10 && A < B))
c) i++
d) j--
João Silva • 2021/22 13
7.2.5. REPRESENTAÇÃO DE VALORES LÓGICOS EM C

[A linguagem C apenas disponibiliza 4 tipos de dados (int, float, double,


char). Não existe nenhum tipo específico de dados para armazenar valores
lógicos.

➔ O valor lógico ‘FALSO’ é  O valor lógico ‘VERDADEIRO’ não é o valor 1,


representado por 0 (zero). mas sim qualquer valor diferente de 0 (zero).
 O valor 1 é apenas um dos valores possíveis
para representar o ‘VERDADEIRO’.
EXEMPLO
Falso: 0 EXEMPLO
Verdadeiro: 2, -3, 123.45, 0.000001
FIM de
João Silva • 2021/22 Tópico 14
8. ESTRUTURAS DE DECISÃO

➢Com base numa condição


▪ SE… ENTÃO… [SENÃO…]

If… [Else]  linguagem C

Estruturas de
decisão

➢Com base numa seleção


▪ SELECIONAR CASO… [SENÃO…]

Switch… [Default]  linguagem C


João Silva • 2021/22 15
8.1. ESTRUTURAS DE DECISÃO EM ALGORITMIA

A estrutura “SE… ENTÃO… [SENÃO…]” …


começa por avaliar uma condição (expressão que pode ser verdadeira ou falsa) e decide
que instrução ou conjunto de instruções executar em conformidade com essa condição.

Em pseudocódigo Em fluxograma

SE <condição> ENTÃO SE
Falso
Condição
<bloco de instruções>
Verdadeiro

[ SENÃO ENTÃO SENÃO


Bloco de Bloco de
<bloco de instruções> ] Instruções Instruções

FimSe

João Silva • 2021/22 16


8.1. ESTRUTURAS DE DECISÃO EM ALGORITMIA (CONTINUAÇÃO)

Início Inserir a nota de um exame e exibir o


respetivo aproveitamento.
Escrever Qual a nota do exame?
Algoritmo classifica_1;
Ler (nota) Variável nota: Real;
Início
nota >= 9.5 Falso Escrever (“Qual a nota do exame?”);
Ler (nota);
Verdadeiro Se (nota >= 9.5) Então
Escrever (“Aprovado.”);
Escrever Aprovado. Escrever Reprovado.
Senão
Escrever (“Reprovado.”);
FimSe
Escrever Término do algoritmo.
Escrever (“Término do algoritmo.”);
Fim Fim.

João Silva • 2021/22 17


8.1. ESTRUTURAS DE DECISÃO EM ALGORITMIA (CONTINUAÇÃO)

I. Estrutura sem a cláusula SENÃO, que executa


SE (condição) ENTÃO
as instruções subordinadas apenas se a <bloco de instruções>
<condição> for verdadeira FimSe

VARIANTES DA
ESTRUTURA
DE DECISÃO SE (condição1) ENTÃO
“SE…” <bloco de instruções1>
SENÃO
SE (condição2) ENTÃO
<bloco de instruções 2>
II. Estruturas encadeadas SENÃO {
<bloco de instruções 3>
FimSe
FimSe

João Silva • 2021/22 18


8.1.1. ESTRUTURA “SE…” SEM A CLÁUSULA “[SENÃO…]”

Início Inserir a nota de um exame e exibir o


aproveitamento apenas se o valor for positivo.
Escrever Qual a nota do exame?
Algoritmo classifica_2;
Ler (nota) Variável nota: Real;
Início
nota >= 9.5
Escrever (“Qual a nota do exame?”);
Verdadeiro
Ler (nota);
Se (nota >= 9.5) Então
Escrever Aprovado. Falso
Escrever (“Aprovado”);
FimSe
Escrever Término do algoritmo. Escrever (“Término do algoritmo”);
Fim.
Fim

João Silva • 2021/22 19


8.1.2. ESTRUTURAS “SE…” ENCADEADAS / ANINHADAS

Início Inserir a nota de um exame e exibir o respetivo aproveitamento.


Mostrar mensagem de erro para valores não pertencentes a [0; 20].
Escrever Qual a nota do exame?

Ler (nota)

nota >= 0 AND nota < 9.5 Falso

Verdadeiro

Escrever Reprovado. nota >= 9.5 AND nota <= 20 Falso

Verdadeiro

Escrever Aprovado. Escrever ERRO! Nota inválida.

Escrever Término do algoritmo.

Fim Fluxograma
João Silva • 2021/22 20
8.1.2. ESTRUTURAS “SE…” ENCADEADAS / ANINHADAS (CONTINUAÇÃO)

Algoritmo classifica_3; Continuação


Variável nota: Real;
Início
Escrever (“Qual a nota do exame?”);
Escrever (“Término do algoritmo.”);
Ler (nota);
Fim.
Se (nota >= 0 AND nota < 9.5) Então
Escrever (“Reprovado.”);
Senão
Se (nota >= 9.5 AND nota <= 20) Então
Escrever (“Aprovado.”);
Senão
Escrever (“ERRO! Nota inválida. “);
FimSe
FimSe Pseudocódigo
João Silva • 2021/22 21
8.1.3. EXERCÍCIOS DE APLICAÇÃO

Algoritmos com sequência não linear de ações. Estrutura de decisão.

Elaborar o fluxograma e o pseudocódigo para apresentar a mensagem “Dividir a


turma” se o número de alunos, a introduzir pelo utilizador, for superior a 20.

João Silva • 2021/22 22


8.1.3. EXERCÍCIOS DE APLICAÇÃO (CONTINUAÇÃO)

Algoritmos com sequência não linear de ações. Estruturas de decisão.

Construa um algoritmo, em pseudocódigo, que permita ler um número inteiro.


Se o número introduzido for igual a zero deve aparecer no ecrã “ O número é
zero”, se for maior que zero “O número é positivo”, caso contrário “O número é
negativo”.

João Silva • 2021/22 23


8.2. ESTRUTURAS DE DECISÃO EM C

A estrutura “IF… [ELSE…]”


começa por avaliar uma condição (expressão que pode ser verdadeira ou falsa). Se o
valor lógico da condição for ‘VERDADEIRO’ são executadas as instruções subordinadas
ao IF, senão, quando a condição retorna o valor lógico ‘FALSO’, são executadas as
instruções da cláusula ELSE. Assim, esta estrutura, na forma simples, permite decidir
pela execução de duas alternativas possíveis de instruções.
IF (condição)
SINTAXE SIMPLIFICADA

IF
{ (Condição)
FALSO

<instruções>
}
VERDADEIRO

ELSE (condição) <Instruções>


ELSE
<Instruções>
{
<instruções>
}
João Silva • 2021/22 24
8.2. ESTRUTURAS DE DECISÃO EM C (CONTINUAÇÃO)

Programa que indica se um número inteiro é ≥ 0 ou < 0.

#include <stdio.h> //ENTRADA, PROCESSAMENTO E SAÍDA


#include <stdlib.h> printf("Digite um número inteiro: ");
#include <locale.h> scanf("%d", &num);
#include <conio.h>
if (num>=0)
main() printf("\n O número %d é maior ou igual a zero. \n", num);
{ else
//DEFINIÇÃO DO IDIOMA printf("\n O número %d é menor do que zero. \n", num);
setlocale (LC_ALL, "Portuguese");
//FINALIZAÇÃO
//DECLARAÇÃO DE VARIÁVEL printf("\n Prima uma tecla para terminar...");
int num; getch();
}

João Silva • 2021/22 25


8.2. ESTRUTURAS DE DECISÃO EM C (CONTINUAÇÃO)

I. Estrutura sem a cláusula ELSE, que executa as


instruções subordinadas se a <condição> for IF (condição) {
<bloco de instruções> }
verdadeira
Executa 1 alternativa de instruções

IF (condição) {
OPÇÕES DA <bloco de instruções1> }
ESTRUTURA II. Estrutura simples com a cláusula ELSE ELSE {
DE DECISÃO Executa 2 alternativas de instruções <bloco de instruções 2> }
“IF…”

IF <condição1> {
<bloco de instruções1> }
III. Estruturas encadeadas ELSE IF (condição2) {
Executa 3 ou mais alternativas de instruções <bloco de instruções 2> }
ELSE {
<bloco de instruções3> }

João Silva • 2021/22 26


8.2.1. ESTRUTURA “IF…” SEM CLÁUSULA “ELSE”


main() IF sem ELSE
{
IF
float nota; (Condição)

VERDADEIRO

printf ("Digite a classificação do exame: "); <Instrução>


FALSO

scanf ("%f", &nota);


if (nota>=9.5 && nota<=20)
printf ("\n Aprovado. ");
Neste caso, se a condição for falsa,
printf ("\n\n Chegou ao fim! Prima uma tecla para terminar...");
a estrutura IF não é processada,
getch(); sendo a executada a instrução que
} se segue.

João Silva • 2021/22 27


8.2.2. ESTRUTURA “IF…ELSE…” SIMPLES


main()
IF com ELSE
{ IF FALSO

float nota; (Condição)

VERDADEIRO

printf ("Digite a classificação do exame: ");


ELSE
scanf ("%f", &nota); <Instrução_1>
<Instrução_2>

if (nota>=9.5 && nota<=20)


printf ("\n Aprovado. ");
else
printf ("\n Reprovado"); Se a condição da estrutura IF… for
falsa é executada a instrução da
printf ("\n\n Chegou ao fim! Prima uma tecla para terminar..."); cláusula ELSE. A estrutura processa
getch(); valores que não pertencem ao
} intervalo [0, 20]

João Silva • 2021/22 28


8.2.3. ESTRUTURAS “IF…ELSE…” ENCADEADAS

main()
{
IFs encadeados
float nota;
IF
printf ("Digite a classificação do exame: "); (Condição)

scanf ("%f", &nota); ELSE IF


(Condição)
if (nota>=0 && nota<9.5) ELSE IF

printf ("\n Reprovado."); (Condição)

else if (nota>=9.5 && nota<17.5)


ELSE
printf ("\n Aprovado."); <Instrução_1> <Instrução_2> <Instrução_3>
<Instrução_4>

else if (nota>=17.5 && nota<=20)


printf ("\n Parabéns!! Aprovado.");
else
printf ("\n ERRO! Nota inválida."); Quando for necessário avaliar mais do que
printf ("\n\n Chegou ao fim! Prima uma tecla para terminar..."); uma condição, utilizam-se estruturas
getch(); IF…ELSE… encadeadas
}

João Silva • 2021/22 29


8.2.4. ESTRUTURAS “IF…ELSE…” – CASO GERAL

Caso geral da estrutura “IF… [ELSE…]”


Começa pela avaliação do valor lógico de uma ou mais condições para decidir que instrução
ou conjunto de instruções executar.
Sempre que for necessário executar mais do que uma instrução em cada ramo da estrutura
IF, esse bloco de instruções deve estar delimitado com os caracteres { e }.
IF (condição) (3) (2) (1)
{ IF
(Condição)
<Bloco_de_instruções_1>
SINTAXE GERAL

} [ELSE IF
[ELSE IF (condição) (Condição)

{
<Bloco_de_instruções_2>
[ELSE
}] <Instruções> <Instruções>]
<Instruções>]
...
[ELSE
{
<Bloco_de_instruções_3>
}] As partes incluídas dentro de parênteses retos são opcionais.
João Silva • 2021/22 30
8.2.4. ESTRUTURAS “IF…ELSE…” – CASO GERAL (CONTINUAÇÃO)
… Programa que avalia se um número
main() é par ou ímpar
{
int num, resto;
Como averiguar se um número é par ou ímpar?
printf ("Número inteiro? "); ✓Através do resto da divisão inteira por 2 – operador %
scanf ("%d", &num);
resto = num % 2; EXEMPLOS
if (resto == 0) Bloco de
{ instruções do
printf ("\n O número é par."); IF Todos os
printf ("\n Resto = %d", resto); números ímpares
19 2
} entre { e }
têm resto da
else
{ Bloco de divisão inteira = 1  9
printf ("\n O número é ímpar.");
instruções do
printf ("\n Resto = %d", resto); Todos os
} ELSE 20 2
printf ("\n\n Prima uma tecla para terminar..."); entre { e } números pares
têm resto da
}
getch();
divisão inteira = 0  10
FIM de
João Silva • 2021/22 Tópico 31
8.3. ESTRUTURA “SELECIONAR CASO… [SENÃO…]” - ALGORITMIA

A estrutura “SELECIONAR CASO… [SENÃO…]” …


permite selecionar uma de múltiplas opções possíveis, a partir de uma expressão ou
variável de controlo.
Em pseudocódigo Em fluxograma

Selecionar Caso <variável> CASO


Variável

<lista de valores> : <bloco de instruções>


<lista de valores> : <bloco de instruções> Valor 1 Valor 2 Valor N Valor N


Bloco de Bloco de Bloco de [Bloco de
[ Senão <bloco de instruções> ] Instruções 1 Instruções 2 Instruções N Instruções Z]

FimSelecionar

João Silva • 2021/22 32


8.3. ESTRUTURA “SELECIONAR CASO… [SENÃO…]” – ALGORITMIA
(CONTINUAÇÃO)

Início Inserir a nota de uma avaliação (de 0 a 20) e converter a mesma


Escrever Qual a nota ?
na respetiva mensagem qualitativa.

Ler (nota) Algoritmo classifica_4;


Variável nota: Inteiro;
CASO
nota = Início
Escrever (“Qual a nota numérica?”);
0, 1, 2, 3, 4 Escrever Mau
Ler (nota);
Escrever Medíocre
5, 6, 7, 8, 9
Selecionar Caso nota
10, 11, 12, 13 Escrever Suficiente 0, 1, 2, 3, 4 : Escrever (“Mau”);
14, 15, 16, 17 Escrever Bom 5, 6, 7, 8, 9 : Escrever (“Medíocre”);
10, 11, 12, 13 : Escrever (“Suficiente”);
18, 19, 20 Escrever Muito Bom
14, 15, 16, 17 : Escrever (“Bom”);
Senão for
nenhum dos
Escrever Nota inválida
18, 19, 20 : Escrever (“Muito Bom”);
valores
anteriores Senão Escrever (“Nota inválida”);
FimSelecionar
Fim Fim.

João Silva • 2021/22 33


8.3. ESTRUTURA “SELECIONAR CASO… [SENÃO…]” – ALGORITMIA
(CONTINUAÇÃO)

Algoritmos com sequência não linear de ações. Estrutura de seleção múltipla.

Elaborar o pseudocódigo para apresentar a estação do ano correspondente ao


mês, em número inteiro, introduzido pelo utilizador. Utilizar uma estrutura de
seleção.
Considerar o seguinte:
1, 2, 3 – Inverno
4, 5, 6 – Primavera
7, 8, 9 – Verão
10, 11, 12 – Outono

João Silva • 2021/22 34


8.3. ESTRUTURA “SELECIONAR CASO… [SENÃO…]” – ALGORITMIA
(CONTINUAÇÃO)

Algoritmos com sequência não linear de ações. Estrutura de seleção múltipla.

Elaborar o pseudocódigo que receba do utilizador um número inteiro e uma


opção de acordo com:
 Caso a opção seja igual a 1 deve calcular e mostrar o quadrado do número,
caso seja igual a 2 deve calcular e mostrar o dobro do número, caso seja igual
a 3 deve calcular e mostrar o triplo do número.
 Caso a opção for diferente das opções 1,2 e 3 deve aparecer no ecrã, “A
opção introduzida é incorreta”.

João Silva • 2021/22 35


8.4. ESTRUTURA “SWITCH… [DEFAULT]” – EM C

A estrutura “SWITCH… [DEFAULT…]”


permite selecionar uma de múltiplas opções possíveis, a partir de uma
expressão ou variável de controlo.
SINTAXE GERAL
SWITCH
SWITCH (variável) <variável>

CASE valor1:
<1º Bloco de Instruções> CASE CASE
break; <valor 1> <valor 2>

CASE valor2:
[DEFAULT
<bloco de <bloco de
<2º Bloco de Instruções> instruções 1> instruções 2>
<bloco de
instruções_N>]
break;
...
[DEFAULT<bloco_de_instruções_N>
break;] As partes incluídas dentro de parênteses retos são opcionais.
João Silva • 2021/22 36
8.4. ESTRUTURA “SWITCH… [DEFAULT]” – EM C (CONTINUAÇÃO)

Entre outras vantagens, a utilização da estrutura SWITCH [DEFAULT] é útil para a


implementação de menus.

Instrução ‘break’
Serve para terminar a execução da
EXEMPLO

estrutura SWITCH, continuando o


programa na instrução imediatamente a
seguir ao SWITCH.

João Silva • 2021/22 37


8.4. ESTRUTURA “SWITCH… [DEFAULT]” – EM C (CONTINUAÇÃO)

Algoritmo calculadora;
Variáveis a,b : inteiros;
y : real; Pseudocódigo
op : caracter;
Inicio
Ler(a); Exercício da calculadora
Ler(op);
Ler(b); Pretende-se calcular Y sabendo que:
Selecionar caso op
 Y = A operação B, e que a operação
‘+’ : y = a + b;
‘-’ : y = a - b;
pode ser a soma, a subtração, a
‘*’ : y = a * b; multiplicação e a divisão.
‘/’ : y = a / b;
FimSelecionar
Escrever(y);
Fim.

João Silva • 2021/22 38


8.4. ESTRUTURA “SWITCH… [DEFAULT]” – EM C (CONTINUAÇÃO)

// Programa C - Calculadora
// Este Programa calcula y = A operação B
#include <stdio.h> Linguagem C
#include <stdlib.h>
switch (op)
#include <conio.h>
{
main()
case '+': y=a+b; break;
{
case '-': y=a-b; break;
float a,b,y;
case '*': y=a*b; break;
char op;
case '/': y=a/b; break;
printf(" A = ");
}
scanf("%f", &a);
printf("\n %f %c %f", a, op, b);
printf("\n Operacao: "); printf(" = %.2f",y);
scanf(" %c", &op); printf ("\n\n Prima uma tecla para terminar...");
printf("\n B = "); getch();
scanf("%f", &b); }

FIM de
João Silva • 2021/22 Tópico 39
8.5. COMPARAÇÃO ENTRE SWITCH…[DEFAULT] E IF…[ELSE]

A estrutura SWITCH pode ser transformada em estruturas IF encaixadas. No entanto, o


código do SWITCH é mais compacto e legível, quando se trata de múltiplas opções de
processamento de código. Por exemplo, o SWITCH é a estrutura mais indicada para
implementar menus, com uma série de opções de processamento para o utilizador.

if (expressão == constante_1)
switch (expressão)
instruções_1;
{
else if (expressão == constante_2)
case constante_1: instruções_1; break;
instruções_2;
case constante_2: instruções_2; break;


else if (expressão == constante_n)
case constante_n: instruções_n; break;
instruções_n;
[default: instruções;]
else
}
instruções; /* default do switch */

FIM de
João Silva • 2021/22 Tópico 40
9. ESTRUTURAS DE REPETIÇÃO OU CICLOS (LOOPS)

➢ Controladas por uma variável que


desempenha a função de contador
▪ PARA… ATÉ… FAZER…
FOR…  Linguagem C
Estruturas de
repetição

➢ Controladas por uma condição


▪ ENQUANTO… FAZER…
WHILE…  Linguagem C

João Silva • 2021/22 41


9.1. ESTRUTURA “PARA… ATÉ… FAZER…” – ALGORITMIA

A estrutura de repetição “PARA… ATÉ… FAZER…” …


baseia-se num contador automático implementado através de uma variável de tipo
inteiro. Esta variável parte de um valor inicial e é incrementada (ou decrementada) até
um valor final. A diferença entre estes valores determina o número de iterações do ciclo,
logo o número de vezes que bloco de instruções será repetido.

Contador Valor_Inicial

Em pseudocódigo
Para Contador de <ValorInicial> Até <ValorFinal>

Em fluxograma
Contador <= Valor_Final

Fazer Verdadeiro

Instrução ou bloco de
<bloco de instruções> instruções

FimFazer Contador Contador + 1


Falso

João Silva • 2021/22 42


9.1. ESTRUTURA “PARA… ATÉ… FAZER…” – ALGORITMIA (CONTINUAÇÃO)

Início
Utilizar a estrutura de repetição com contador automático
para apresentar os dez primeiros múltiplos do número 2.
Escrever TABUADA DO 2
Algoritmo tabuada_do_2;
i
Variável i: Inteiro;
Início
Escrever (“TABUADA DO 2”);
i <= 10
Para i  1 Até 10
Verdadeiro
Fazer
Escrever ( i , i*2) Escrever ( i , “ * 2 = “, i * 2 );
i i+1 Falso i  i + 1;
FimFazer
Fim Fim.

João Silva • 2021/22 43


9.1. ESTRUTURA “PARA… ATÉ… FAZER…” – ALGORITMIA (CONTINUAÇÃO)

Algoritmos com sequência não linear de ações. Estrutura de repetição com


contador automático.

Elaborar o fluxograma e o pseudocódigo para calcular a média dos números


inteiros entre 5 e 15. Utilize uma estrutura de repetição com contador automático.

João Silva • 2021/22 44


9.1. ESTRUTURA “PARA… ATÉ… FAZER…” – ALGORITMIA (CONTINUAÇÃO)

Algoritmos com sequência não linear de ações. Estrutura de repetição com


contador automático. Estrutura de decisão.

Elaborar o pseudocódigo para calcular a soma dos números inteiros entre 1 e


um número introduzido pelo utilizador. O número introduzido deverá ser superior
a 1.

João Silva • 2021/22 45


9.1. ESTRUTURA “PARA… ATÉ… FAZER…” – ALGORITMIA (CONTINUAÇÃO)

Algoritmos com sequência não linear de ações. Estrutura de repetição com


contador automático.

Elaborar o pseudocódigo que mostre o quadrado dos números de 1 a 25


(inclusive).

João Silva • 2021/22 46


9.1. ESTRUTURA “PARA… ATÉ… FAZER…” – ALGORITMIA (CONTINUAÇÃO)

Algoritmos com sequência não linear de ações. Estrutura de repetição com


contador automático.

Elaborar o pseudocódigo que permita ao utilizador introduzir dez números


inteiros, calculando a média apenas dos números positivos.

João Silva • 2021/22 47


9.2. CICLO “FOR…” – EM C

A estrutura de repetição “FOR”…


é controlada por uma variável que exerce a função de contador automático. O bloco
de instruções subordinado ao ciclo será executado o número de vezes dado pelo
valor inicial até ao valor final.

FOR contador = V_Inicial


SINTAXE GERAL
FOR (Início; Condição de fim; incremento/decremento) contador <= V_Final
{
<Instrução ou bloco de instruções> Verdadeiro

} Instrução ou bloco de
instruções

Falso
contador = contador + 1
Estrutura adequada a situações em que o número de
iterações (repetições) é conhecido à partida.

João Silva • 2021/22 48


9.2. CICLO “FOR…” – EM C (CONTINUAÇÃO)

Programa que exibe os 10 primeiros múltiplos de um número inteiro.


main()
{
int num;
printf ("Número inteiro --> ");
scanf ("%d", &num);
printf ("\n");
for (int i=1; i<=10; i++)
printf ("%d X %d = %d \n", num, i, num*i);
printf ("\n Prima uma tecla para terminar...");
getch();
}

João Silva • 2021/22 49


9.2. CICLO “FOR…” – EM C (CONTINUAÇÃO)

Programa que exibe os 10 primeiros números pares.

...
main()
{
//DECLARAÇÃO DE VARIÁVEL
int i;
//PROCESSAMENTO E SAÍDA
for (i = 1; i <= 20; i++)
{
if(i%2 == 0)
printf("%d \n", i);
}
//FINALIZAÇÃO
printf ("\n Prima uma tecla para terminar...");
getch();
}

João Silva • 2021/22 50


9.2. CICLO “FOR…” – EM C (CONTINUAÇÃO)

Programa que calcula os divisores de um número inteiro (resto igual a zero).


...
main()
{
//DECLARAÇÃO DE VARIÁVEL
int num;
//ENTRADA, PROCESSAMENTO E SAÍDA
printf ("N.º inteiro para cálculo dos divisores ? ");
scanf ("%d", &num);
printf ("\n");
printf ("Divisores de %d : \n", num);
for (int i=1; i<=num; i++)
{
if (num % i == 0)
printf("%d \n", i);
}
//FINALIZAÇÃO
printf ("\n Prima uma tecla para terminar...");
getch();
}

FIM de
João Silva • 2021/22 Tópico 51
9.3. ESTRUTURA “ ENQUANTO… FAZER…”

A estrutura de repetição “ENQUANTO… FAZER…” …


utiliza uma condição (ou expressão lógica) antes da realização das instruções. Assim,
as instruções do ciclo são executadas apenas quando a condição for verdadeira;
logo, podem não ser executadas uma única vez quando a condição de controlo do
ciclo for falsa.

Em pseudocódigo
Enquanto <condição>

Em fluxograma
Condição

Fazer Verdadeiro

<bloco de instruções>
Instrução ou bloco de
FimFazer instruções
Falso

João Silva • 2021/22 52


9.3. ESTRUTURA “ ENQUANTO… FAZER…”

Início Utilizar estrutura de repetição com teste a condição lógica


para somar cumulativamente n números diferentes de zero.
Escrever Introduza um valor. Termine com 0:
Algoritmo soma_parcelas;
Ler (parcela)
Variáveis parcela, soma: Reais;
soma parcela Início
Escrever (“Introduza um valor. Termine com 0: ”);
Ler (parcela);
Enquanto
(parcela < > 0) soma  parcela;
Enquanto (parcela < > 0)
Verdadeiro
Fazer
Escrever Introduza um novo valor:
Escrever (“Introduza um novo valor: “);
Ler (parcela)
Ler (parcela);
Falso
soma soma + parcela soma  soma + parcela;
FimFazer
Escrever Soma = soma ) Escrever (“Soma = “, soma);
Fim Fim.

João Silva • 2021/22 53


9.3. ESTRUTURA “ ENQUANTO… FAZER…”

Algoritmos com sequência não linear de ações. Estrutura de repetição com teste a
condição lógica.

Elaborar o pseudocódigo e o fluxograma para somar os números inteiros entre 3


e 12. Utilize uma estrutura de repetição com a condição de controlo no início do
ciclo.

João Silva • 2021/22 54


9.3. ESTRUTURA “ ENQUANTO… FAZER…”

Algoritmos com sequência não linear de ações. Estrutura de repetição com teste a
condição lógica. Estrutura de decisão.

Elaborar o pseudocódigo e o fluxograma para somar os números ímpares


compreendidos entre 1 e 25. Utilize uma estrutura de repetição com a condição
de controlo no início do ciclo.

João Silva • 2021/22 55


9.4. CICLOS “WHILE…” E “DO…WHILE”

A estrutura de repetição “WHILE”…


utiliza uma condição de controlo antes da realização das instruções. Assim, as
instruções do ciclo são executadas repetidamente enquanto a condição for verdadeira
ou podem não ser executadas uma única vez quando a condição for, à partida, falsa.

SINTAXE GERAL WHILE


(Condição)
Condição a testar no início do ciclo

WHILE (condição) Verdadeiro

{
Instrução ou bloco de
<Bloco de instruções> instruções
} Falso

Estrutura adequada para um número de iterações desconhecido, à partida.

João Silva • 2021/22 56


9.4. CICLOS “WHILE…” E “DO…WHILE” (CONTINUAÇÃO)

Programa que incrementa um número até 10 e que calcula o quadrado desse número.
...
main()
{
//DECLARAÇÃO DE VARIÁVEL
int num;
//ENTRADA, PROCESSAMENTO E SAÍDA
printf ("Qual o número (<10) ? ");
scanf ("%d", &num);
printf ("\n");
while (num <= 10)
{
printf ("Quadrado do nr %d = %d \n", num, num*num);
num = num + 1;
}
//FINALIZAÇÃO
printf ("\n Prima uma tecla para terminar...");
getch();
}

João Silva • 2021/22 57


9.4. CICLOS “WHILE…” E “DO…WHILE” (CONTINUAÇÃO)

A estrutura de repetição “DO…WHILE”…


utiliza uma condição de controlo no fim do bloco de instruções. Assim, as
instruções do ciclo são executadas pelo menos uma vez, se a condição for falsa à
partida, ou repetidamente enquanto a condição for verdadeira.
SINTAXE GERAL
Condição a testar no fim do ciclo Verdadeiro
DO
DO < Instrução ou bloco de
{ instruções >
<Bloco de instruções>
} WHILE
WHILE (condição); (Condição)

Estrutura adequada para um número de iterações desconhecido, à partida. Falso

João Silva • 2021/22 58


9.4. CICLOS “WHILE…” E “DO…WHILE” (CONTINUAÇÃO)

Programa que soma números reais até que seja premida a tecla 0 (zero). O resultado é
exibido com duas casas decimais.
...
main(){
//DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS
double num, soma=0;
//ENTRADA, PROCESSAMENTO E SAÍDA
do {
printf ("N.º a somar (termine com 0) : ");
scanf ("%lf", &num);
soma = soma + num;
} while (num != 0);
printf ("\n Soma = %.2lf", soma);
//FINALIZAÇÃO
printf ("\n\n Prima uma tecla para terminar...");
getch();
}

João Silva • 2021/22 59


9.4. CICLOS “WHILE…” E “DO…WHILE” (CONTINUAÇÃO)

A estrutura DO…WHILE permite implementar a opção de repetir o programa ou terminar o mesmo. A


utilização dos comandos system (“cls”), da biblioteca <stdlib.h>, ou clrscr (), da biblioteca
<conio.h>, no início desta estrutura, limpa o ecrã para que novas informações sejam apresentadas.
main( ) {
//DECLARAÇÃO DE VARIÁVEIS
...
char opcao;
//ENTRADA, PROCESSAMENTO E SAÍDA
do {
system (“cls”);
<Instruções_do_programa_principal>
printf (“\n Repetir o programa (S/s) ? “);
scanf (“ %c”, &opcao);
} while (opcao == ‘s’ || opcao == ‘S’);
//FINALIZAÇÃO
printf (“\n\n Prima uma tecla para terminar...”);
getch( );
}
FIM de
João Silva • 2021/22 Tópico 60
9.5. COMPARAÇÃO ENTRE CICLOS FOR E WHILE

Qualquer ciclo FOR pode ser substituído por um WHILE, contudo, o oposto nem sempre se
verifica. O ciclo FOR é mais compacto e legível quando é necessário iterar um número bem
determinado de vezes. Assim, para usar esta estrutura apenas precisamos de saber quantas
repetições serão feitas, ou seja, precisamos de saber as condições de início e de fim.

inicialização;
for (inicialização; condição; contador) while (condição)
{ {
<bloco de instruções>; contador;
} <bloco de instruções>;
}

FIM de
João Silva • 2021/22 Tópico 61
10. ORGANIZAÇÃO E ESTRUTURAÇÃO DE CÓDIGO

➢Apresentação do código: Indentação e


comentários

Organização ➢Mensagens de erro básicas nos dados de entrada


de código.

➢Palavras reservadas, comandos e noções de


contador e acumulador

João Silva • 2021/22 62


10.1. APRESENTAÇÃO DO CÓDIGO

Os programadores
profissionais usam
regras de indentação/
comentários/
organização de código
no seu trabalho de
equipa.
Um mesmo produto de
software pode ser
desenvolvido por vários
programadores,
inclusive, separados
geograficamente.
João Silva • 2021/22 63
10.1. APRESENTAÇÃO DO CÓDIGO (CONTINUAÇÃO)

» INDENTAÇÃO DE CÓDIGO

O termo indentar significa main( )


{
escrever código de forma bloco_instruções_1;
hierárquica com o intuito de if (condição)
{
facilitar a visualização e o bloco_instruções_2;
Cada nível de
entendimento do programa. while (condição)
{ indentação
Os blocos de instruções bloco_instruções_3;
corresponde a
}
dependentes de estruturas de } um
programação (IF, SWITCH, else
{
espaçamento
FOR, WHILE, entre outros) bloco_instruções_4;
feito com a
tecla TAB.
são facilmente identificados for (inicialização; condição; contador)
{
quando o programador bloco_instruções_5;
}
indenta as instruções à }
medida que escreve o código. }

João Silva • 2021/22 64


10.1. APRESENTAÇÃO DO CÓDIGO (CONTINUAÇÃO)

» COMENTÁRIOS AO CÓDIGO

Comentar o código significa /* Avalia se um número é positivo ou negativo


incluir mensagens de autoria, @joao.silva
dezembro.2021
notas explicativas ou */
identificação de erros que #include <stdio.h> //Manipulação da entrada e da saída
precisam de ser corrigidos. #include <stdlib.h> //Gestão da memória. Funções de sistema.

Essas mensagens são main()


ignoradas pelo compilador. {
int num; //única variável de entrada, do tipo inteiro
Trata-se de um importante printf(“Digite um número: “); //mostra mensagem no ecrã
hábito de programação para scanf (“%d”, &num); //leitura do valor inteiro
if (num>=0) //ERRO. Zero não é positivo. Corrigir código
o próprio programador e para printf (“Número positivo.”); //output se condição verdadeira
os outros programadores de else
printf (“Número negativo.”); //output se condição falsa
uma equipa. }

FIM de
João Silva • 2021/22 Tópico 65
10.2. MENSAGENS DE ERRO BÁSICAS NOS DADOS DE ENTRADA

A estrutura IF…ELSE possibilita que os dados de entrada sejam validados e o


programa é executado, senão exibe uma mensagem de erro e o programa
termina.

Trecho de código

printf (“Número inteiro [1 a 100] ? “);


scanf (“%d”,&num); Se o utilizador digita um
if (num < 1 || num > 100) número que não pertence ao
intervalo [1, 100] é exibida
printf (“ERRO. Digite um número de 1 a 100, inclusive.”);
uma mensagem de erro e o
else programa termina, se o
{ número pertencer ao intervalo
<instruções_do_programa>; o programa é executado.
}

João Silva • 2021/22 66


10.2. MENSAGENS DE ERRO BÁSICAS NOS DADOS DE ENTRADA (CONTINUAÇÃO)

Com a estrutura DO…WHILE, é possível solicitar repetidamente um valor de entrada até


que este seja válido e, assim, a execução programa prossegue. Com dados errados, o
programa não termina, fica em ciclo num determinado ponto de execução, até que seja
digitado um valor correto.
Trecho de código

do {
printf (“Número inteiro [1 a 100] ? “);
Se o utilizador digita um
scanf (“%d”,&num); número que não pertence ao
if (num < 1 || num > 100) intervalo [1, 100] o programa
printf (“ERRO. Tente novamente. \n\n”); entra em ciclo até que seja
digitado um valor correto.
} while (num < 1 || num > 100);
<instruções_do_programa>;
FIM de
João Silva • 2021/22 Tópico 67
10.3. NOÇÕES DE CONTADOR E ACUMULADOR & PALAVRAS RESERVADAS

» DIFERENÇA ENTRE CONTADOR E ACUMULADOR

Cada uma das vezes que as instruções dento de um ciclo são


Iteração executadas.

Trata-se de uma variável que conta o número de iterações


Contador (repetições) de um ciclo.
EXEMPLO
i = i + 1;  i += 1;  i++;

João Silva • 2021/22 68


10.3. NOÇÕES DE CONTADOR E ACUMULADOR & PALAVRAS RESERVADAS

» DIFERENÇA ENTRE CONTADOR E ACUMULADOR

Trata-se de uma variável que vai acumulando vários


Acumulador valores ao longo de um ciclo (somas sucessivas ou
outro conjunto de cálculos).
EXEMPLO
soma = soma + num;  soma += num;

João Silva • 2021/22 69


10.3. NOÇÕES DE CONTADOR E ACUMULADOR & PALAVRAS RESERVADAS (CONTINUAÇÃO)

» COMANDOS UTILIZADOS EM ESTRUTURAS DE REPETIÇÃO

Comando Serve para terminar a sequência de instruções dentro de um


’SWITCH’ ou para terminar um ciclo. A execução do programa
‘break’
continua na instrução imediatamente a seguir à respetiva
estrutura de controlo.

Comando Apenas se utiliza em ciclos. Este comando quando inserido


dentro de um ciclo faz com que a execução das instruções
‘continue’
termine e o ciclo prossegue na próxima iteração.

João Silva • 2021/22 70


10.3. NOÇÕES DE CONTADOR E ACUMULADOR & PALAVRAS RESERVADAS (CONTINUAÇÃO)

» COMANDOS UTILIZADOS EM ESTRUTURAS DE REPETIÇÃO

Trata-se de um comando da função system que pertence à


system (“cls”) biblioteca <stdlib.h>. Serve para limpar o ecrã. Pode ser
incluído no início de uma estrutura WHILE, de forma que
utilizador tenha a opção de repetir o programa e limpar o ecrã de
informações anteriores.

Função que pertence à biblioteca <stdlib.h>. Serve que


exit( ) encerrar, de forma imediata, a execução do programa.

João Silva • 2021/22 71


10.3. NOÇÕES DE CONTADOR E ACUMULADOR & PALAVRAS RESERVADAS (CONTINUAÇÃO)

Utilização de contador e acumulador. Trecho de código que faz a média de sucessivos


números reais até que seja premida a tecla 0 (zero).
...
//DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS
float num, soma = 0;
int i = 0;

//ENTRADA, PROCESSAMENTO E SAÍDA


do {
i = i + 1;
printf ("%d.º número (termine com 0) --> ", i);
scanf ("%f", &num);
soma = soma + num;
} while (num != 0);

printf ("\n Média das %d parcelas = %.2f", i - 1, soma / (i - 1));


...

João Silva • 2021/22 FIM 72

Você também pode gostar