DSC/CCT/UFCG
[email protected]
Profs.: José Eustáquio Rangel de Queiroz
Roberto Medeiros de Farias
Carga Horária: 60 h
DSC/CCT/UFCG
Introdução à Programação
[email protected] [email protected]
Tópicos
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
Introdução
Fundamentos da Repetição
Repetição Controlada por Contador
Estrutura de Repetição For
Estrutura For : Notas e Observações
Exemplos de Uso da Estrutura For
Estrutura de Seleção Múltipla Switch
Estrutura de Repetição Do/While
Instruções Break e Continue
Operadores Lógicos
Confusão entre os Operadores de Igualdade
(==) e de Atribuição (=)
Operadores Bit-a-Bit
Resumo de Programação Estruturada
2
4.1 Introdução
DSC/CCT/UFCG
 Tópicos abordados
[email protected] [email protected]

Estruturas adicionais de controle de repetição
 For
 Do/while

Estrutura de seleção múltipla switch

Instrução break


Usada para sair imediata e rapidamente de certas
estruturas de controle
Instrução continue

Usada para saltar o restante do corpo de uma
estrutura de repetição, procedendo com a
próxima iteração do laço
3
4.2 Fundamentos
Repetição I
DSC/CCT/UFCG
da
 Laço
[email protected] [email protected]

Grupo de instruções que o computador executa
repetidamente
enquanto
alguma
condição
permanece verdadeira
 Repetição controlada por contador

Repetição definida  Conhecimento do número de
vezes de execução do laço

Uso de variável de controle  Contagem do
número de repetições
4
DSC/CCT/UFCG
4.2 Fundamentos
Repetição II
da
[email protected] [email protected]
 Repetição controlada por sentinela

Repetição indefinida

Uso  Falta de conhecimento prévio do número de
repetições

Valor da sentinela  Término dos dados
5
DSC/CCT/UFCG
4.3 Fundamentos
da
Repetição Controlada por
Contador I
 Exigências
da
repetição
controlada
por
[email protected] [email protected]
contador

Nome de uma variável de controle (ou contador de
laço)

Valor inicial da variável de controle

Condição de teste do valor final da variável de
controle (i.e. se o laço deve continuar)

Incremento (ou decremento) para a alteração da
variável de controle a execução do laço (iteração)
6
DSC/CCT/UFCG
4.3 Fundamentos
da
Repetição Controlada por
Contador II
 Exemplo
[email protected] [email protected]
int contador = 1;
// inicialização
while (contador <= 10) { // condição de repetição
printf( "%d\n", contador );
++contador;
// incremento
}

Declaração int contador = 1;
 Fornecimento do nome contador para a variável

Declaração de um tipo (inteiro) para a variável

Reserva de espaço para armazenamento da
variável na memória

Definição do valor inicial da variável como 1
7
DSC/CCT/UFCG
4.4 Estrutura
for I
de
Repetição
 Formato geral dos laços for
for (inicialização; teste_de_continuação_do_laço; incremento)
instrução
[email protected] [email protected]
 Exemplo
for (contador = 1; contador <= 10; contador++)
printf("%d\n", contador);

Impressão dos inteiros de 1 a 10
Sem ponto-e-vírgula
(;) após a última
expressão
8
DSC/CCT/UFCG
4.4 Estrutura de Repetição for
II
 Possibilidade de eventual substituição de
[email protected] [email protected]
laços for por laços while
inicialização;
while (teste_de_continuação_do_laço){
instrução;
incremento; (ou decremento;)
}
 Inicialização e incremento

Possibilidade de uso de listas separadas por
vírgulas

Exemplo
for (i = 0, j = 0; j + i <= 10; j++, i++)
printf("%d\n", j + i);
Separação por
vírgula (,)
9
DSC/CCT/UFCG
4.5 Estrutura for : Notas e
Observações I
 Expressões Aritméticas
[email protected] [email protected]

Possibilidade de inclusão de expressões
aritméticas
à
inicialização,
condição
de
continuação do laço e ao incremento/decremento
 Se x igual a 2 e y igual a 10
for (j = x; j <= 4 * x * y; j += y / x
é equivalente a
for (j = 2; j <= 80; j += 5
10
4.5 Estrutura for : Notas e
Observações II
DSC/CCT/UFCG
[email protected] [email protected]
 Notas sobre a estrutura for

Incremento pode ser negativo (decremento)

Se a condição de continuação do laço é
inicialmente falsa



O corpo da estrutura for não é realizada
A execução prossegue com a próxima instrução
após a estrutura for
Variável de Controle

Freqüentemente (mas não necessariamente)
impressa ou usada dentro do corpo
11
4.5 Estrutura for : Notas e
Observações III
[email protected] [email protected]
DSC/CCT/UFCG
01
02
03
04
05
06
07
08
09
10
11
12
13
15
/* total com for */
#include <stdio.h>
int main()
{
int total = 0, numero;
for (numero = 2; numero <= 100; numero += 2)
total += numero;
printf( “A total eh %d\n", total );
return 0;
}
A total eh 2550
12
DSC/CCT/UFCG
4.7 Estrutura
de
Múltipla switch I
Seleção
 Switch
[email protected] [email protected]

Uso em contextos de testes separados para cada
um dos valores passíveis de serem assumidos por
uma variável ou expressão  Decisões múltiplas
 Formato

Série de rótulos case e um rótulo opcional default
switch (valor) {
case '1':
ações
case '2':
ações
default:
ações
}

break;  Abandono da estrutura
13
DSC/CCT/UFCG
4.7 Estrutura
de
Seleção
Múltipla switch II
 Fluxograma da estrutura switch
V
break
ações do case a
case a
F
[email protected] [email protected]
break
ações do case b
V
case b
F
break
ações do case z
V
case z
F
ações default
14
[email protected] [email protected]
DSC/CCT/UFCG
4.7 Estrutura
de
Seleção
Múltipla switch III
01 Contagem de conceitos */
02 #include <stdio.h>
03
04 int main()
05 {
06 int conceito;
07 int contaA = 0, contaB = 0, contaC = 0,
08 contaD = 0, contaF = 0;
09
10 printf("Entre com os conceitos.\n" );
11 printf("Entre com o caractere EOF para o final das entradas.\n");
12 while ((conceito = getchar()) != EOF) {
13 switch (conceito) { /* switch aninhado em um while */
14
case 'A': case 'a': /* conceito foi A maiúsculo ou minúsculo */
15
++contaA;
/* incremento do contador de A */
16
break;
17
case 'B': case 'b': /* conceito foi B maiúsculo ou minúsculo */
18
++contaB;
/* incremento do contador de B */
19
break;
20
case 'C': case 'c': /* conceito foi C maiúsculo ou minúsculo */
21
++contaC;
/* incremento do contador de C */
22
break;
23
case 'D': case 'd': /* conceito foi D maiúsculo ou minúsculo */
24
++contaD;
/* incremento do contador de D */
25
break;
15
[email protected] [email protected]
DSC/CCT/UFCG
4.7 Estrutura
de
Seleção
Múltipla switch IV
26
case ‘F': case ‘f': /* conceito foi B maiúsculo ou minúsculo */
27
++contaF;
/* incremento do contador de B */
28
break;
29 default:
/* demais conceitos */
30
printf( “Fornecido um conceito incorreto." );
31
printf( " Entre com um novo conceito.\n" );
32
break;
33 }
34 printf( "\nTotais para cada letra de conceito sao:\n" );
35 printf( "A: %d\n", contaA );
36 printf( "B: %d\n", contaB );
37 printf( "C: %d\n", contaC );
38 printf( "D: %d\n", contaD );
39 printf( "F: %d\n", contaF);
40 return 0;
41 }
16
DSC/CCT/UFCG
4.7 Estrutura
de
Seleção
Múltipla switch V
[email protected] [email protected]
 Resultado
Entre com os conceitos.
Entre com o caractere EOF para o final das entradas.
A
B
C
C
A
D
F
C
E
Fornecido um conceito incorreto. Entre com um novo conceito.
D
A
B
Totais para cada letra de conceito sao:
A: 3
B: 2
C: 3
D: 2
F: 1
17
DSC/CCT/UFCG
4.8 Estrutura
de
Repetição do/while I
 A estrutura de repetição do/while

[email protected] [email protected]

Similar à estrutura do while
Teste da condição para repetição  Após a
execução do corpo do laço
 Realização

das ações  Pelo menos uma vez
Formato
do {
instrução;
} while (condição);
18
DSC/CCT/UFCG
4.8 Estrutura
de
Repetição do/while II
 Exemplo
[email protected] [email protected]
int contador = 1;
do {
printf("%d ", contador);
} while (++contador <= 10);

Resultado  Impressão dos inteiros de 1 a 10
19
DSC/CCT/UFCG
4.8 Estrutura
de
Repetição do/while III
 Fluxograma
do/while
da
estrutura
de
repetição
[email protected] [email protected]
ações
V
condição
F
20
[email protected] [email protected]
DSC/CCT/UFCG
01
02
03
04
05
06
07
08
09
10
14
4.8 Estrutura
Repetição
IV
de
do/while
/* Uso da estrutura de repetição do/while */
#include <stdio.h>
int main()
{
int contador = 1;
do {
printf( "%d ", contador );
} while (++contador <= 10);
return 0;
}
1 2 3 4 5 6 7 8 9 10
21
DSC/CCT/UFCG
4.9 Instruções break e continue
I
 Break

[email protected] [email protected]


Saída imediata de uma estrutura while, for,
do/while ou switch
Continuação da execução do programa a partir da
primeira instrução após a estrutura
Usos comuns da instrução break
 Saída
prematura de um laço
 Desconsideração
switch
do restante de uma estrutura
22
DSC/CCT/UFCG
4.9 Instruções break e continue
II
 Continue

Desconsideração das instruções restantes do
corpo de uma estrutura while, for ou do/while
[email protected] [email protected]


Prosseguimento com a próxima iteração do laço
while e do/while

Avaliação do teste de continuação do laço
imediatamente após a execução da instrução
continue

For

Execução das expressões de incremento, após o
que ocorre a avaliação do teste de continuação
do laço
23
[email protected] [email protected]
DSC/CCT/UFCG
01
02
03
04
05
06
07
08
09
10
11
12
13
14
4.9 Instruções break e continue
III
/*Uso da instrução continue em uma estrutura for */
#include <stdio.h>
int main()
{
int x;
for (x = 1; x <= 10; x++) {
if (x == 5)
continue; /* ignora o código restante em um laço somente se x=5*/
printf("%d ", x);
}
printf("\nContinue eh usado para saltar a impressao do 5\n" );
return 0;
}
12 3 4 5 6 7 8 9 10
Continue eh usado para saltar a impressao do 5
24
4.10 Operadores
Lógicos I
DSC/CCT/UFCG
 && (E lógico)

Retorna verdadeiro se ambas as condições são
verdadeiras
[email protected] [email protected]
 || (OU lógico)

Retorna verdadeiro pelo
condições são verdadeiras
menos
uma
das
 ! (NÃO lógico, negação lógica)

Inverte a verdade/falsidade de sua condição

Operador unário, tem um único operando
25
DSC/CCT/UFCG
4.10 Operadores
Lógicos II
[email protected] [email protected]
 Uso típico como condições em laços
Expressão
Resultado
verdadeiro && falso
verdadeiro || falso
!falso
falso
verdadeiro
verdadeiro
26
DSC/CCT/UFCG
4.10 Operadores Lógicos
III
 Exercício 1 – Uso de operadores lógicos
[email protected] [email protected]

Dado o programa em C a seguir

Analise o código e descreva o funcionamento do
programa em um diagrama de fluxo

Observe que o programa não discrimina a
primeira interação do usuário com as possíveis
interações seguintes, exibindo sempre a
mensagem: Continuar (1 = SIM, 0 = NAO)?
Introduza novas linhas de código de modo a
contornar este problema.
27
[email protected] [email protected]
DSC/CCT/UFCG
4.10 Operadores Lógicos
IV
#include <stdio.h>
#include <conio.h>
main(){
int resp,i,n;
float total;
clrscr();
do {
printf("\nContinuar (1 = SIM, 0 = NAO)? ");
scanf("%d", &resp);
if((resp==0)||(resp==1)){
if (resp) {
printf("Digite o valor de n: ");
scanf("%d", &n);
total = 0.0;
for(i = n; i > 0; i--)
total += 1/((float) i * (float) i);
printf("total = %f\n", total);}
else printf("Programa finalizado!");}
else break;} while (resp);
getch();
return 0;
}
28
4.11 Confusão entre os Operadores
de Igualdade (==) e Atribuição
(=) I
DSC/CCT/UFCG
[email protected] [email protected]
 Erro perigoso!!!

Comumente não causa erro de sintaxe

Qualquer expressão que produz um valor pode ser
usado em estruturas de controle


Valores diferentes de zero são verdadeiros,
valores zero são falsos
Exemplo de uso do operador de igualdade (==)
if (codigo_de_pagamento == 4)
printf(“Você obteve um bônus!\n");
de codigo_de_pagamento, se ele é um
4 então é premiado com um bônus
 Verificação
29
4.11 Confusão entre os Operadores
de Igualdade (==) e Atribuição
(=) II
DSC/CCT/UFCG

Exemplo de substituição de == por =
if (codigo_de_pagamento = 4)
printf(“Voce obteve um bonus!\n");
 Atribuição
do valor 4 a codigo_de_pagamento
[email protected] [email protected]
4
é diferente de zero; Assim, a expressão é
verdadeira e sempre haverá a premiação com o
bônus, não importando qual era o valor de
codigo_de_pagamento

Erro de lógica, não erro de sintaxe
30
4.11
DSC/CCT/UFCG
Confusão entre os Operadores
de Igualdade (==) e Atribuição
(=) III
[email protected] [email protected]
 lvalues (valores esquerdos)

Expressões que podem
esquerdo de uma equação

Seus valores podem ser alterados, assim como
os nomes de variáveis

aparecer
no
lado
x = 4;
31
4.11
DSC/CCT/UFCG
Confusão entre os Operadores
de Igualdade (==) e Atribuição
(=) IV
[email protected] [email protected]
 rvalues (valores direitos)

Expressões que só podem aparecer no lado
direito de uma equação

Constantes, tais como números


Não se pode escrever 4 = x;

Deve-se escrever x = 4;
lvalues podem ser usados como rvalues, mas
não o contrário

y = x;
32
4.12 Operadores Bit-a-Bit I
DSC/CCT/UFCG
 Sistema Binário  Sistema de numeração de
base 2

Disponibilidade de apenas 2 dígitos  0 e 1
[email protected] [email protected]

Exemplo
1011 = 1.23 + 0.22 + 1.21 + 1.20 = 11
 Bit  Dígito Binário

Representação eletrônica a partir de chaves
(ligada/ desligada)
 Byte  Agrupamento de 8 bits
33
4.12 Operadores Bit-a-Bit
II
DSC/CCT/UFCG
 Exercício 2 – Conversão de decimal para
binário ou vice-versa
[email protected] [email protected]

Escrever um programa em C que receba do
usuário
um
número
inteiro
positivo,
representável em até 2 Bytes, e o converta do
sistema decimal para binário ou vice-versa

Deverá ser permitida ao usuário a escolha da
base de referência para a conversão – 10 ou 2

O programa deverá verificar, uma vez selecionada
a base, se o número digitado pode ser convertido

O programa deverá incluir mensagens de erro
elucidativas, a fim de instruir o usuário no
processo de entrada dos dados
34
DSC/CCT/UFCG
4.12 Operadores Bit-a-Bit
III
 Operadores Bit-a-Bit  Operações em nível
de números como padrões de bits
[email protected] [email protected]
 Para cada bit, x e y  AND, OR, XOR e NOT
OR
x|y
XOR
x^y
x
NOT
~y
x
y
AND
x&y
0
0
0
0
0
0
1
0
1
0
1
1
1
0
1
0
0
1
1
1
1
1
1
0
Operador
UNÁRIO
35
4.12 Operadores Bit-a-Bit
IV
DSC/CCT/UFCG
[email protected] [email protected]
 Exemplos
x
0
0
1
0
0
1
0
1
37
y
1
1
1
1
0
1
1
0
246
x&y
0
0
1
0
0
1
0
0
36
x|y
1
1
1
1
0
1
1
1
247
x^y
1
1
0
1
0
0
1
1
211
~x
1
1
0
1
1
0
1
0
218
36
DSC/CCT/UFCG
4.12 Operadores Bit-a-Bit
IV
 Operações Lógicas versus Bit-a-Bit
[email protected] [email protected]

Operações Lógicas
37 && 246  1
37 || 246
1
! 37
0

Operações Bit-a-Bit
37 & 246
37 | 246
~ 37
 36
 247
 218
37
4.12 Operadores Bit-a-Bit
V
DSC/CCT/UFCG
[email protected] [email protected]
 Mascaramento e Configuração
x
b7
b6
b5
b4
b3
b2
b1
b0
28
0
0
0
1
1
1
0
0
x&28
0
0
0
b4 b3 b2
0
0
227
1
1
1
0
0
1
1
x|227
1
1
1
b4 b3 b2
1
1
0
Máscaras
Bits configurados
38
4.12 Operadores Bit-a-Bit
VI
DSC/CCT/UFCG
 Exemplo 1 - Redução de 256 níveis de cinza
para 16 com máscara AND
Nce
0
1
00000000
00000001
00000000
00000000
0
0
15
16
00001111
00010000
00000000
00010000
0
16
⇣
⇣
⇣
⇣
31
32
00011111
00100000
00010000
00100000
16
32
47
48
00101111
00110000
00100000
00110000
32
48
⇣
[email protected] [email protected]
Ncs
Máscara
⇣
⇣
⇣
⇣
⇣
⇣
11110000
⇣
⇣
⇣
⇣
⇣
39
DSC/CCT/UFCG
4.12 Operadores Bit-a-Bit
VI
 Exemplo 1 – Resultado do mascaramento de
bits sobre uma imagem digital
[email protected] [email protected]
256
Imagem original
16
Imagem quantizada para 4 bits
40
4.12 Operadores Bit-a-Bit
VII
DSC/CCT/UFCG
 Operador <<  Movimentação de padrões de
bits para a esquerda

[email protected] [email protected]

Deslocamento de 1 bit para a esquerda ⇒
Multiplicação do valor codificado por 2
Exemplo
x
0
0
0
0
x<<1
0
0
0
x<<2
0
0
x<<3
0
x<<4
1
1
1
1
1
1
1
1
1
1
1
1
1
x<<5
0
1
1
1
1
1
1
1
1
1
1
15
0
30
0
0
60
0
0
0
120
0
0
0
0
240
0
0
0
0
224
Impossibilidade de representação com 1 Byte
41
4.12 Operadores Bit-a-Bit
VIII
DSC/CCT/UFCG
 Operador >>  Movimentação de padrões de
bits para a direita

Deslocamento de 1 bit para a direita ⇒
Divisão do valor codificado por 2
Exemplo
1 1
x
x<<1
0 1
[email protected] [email protected]

x<<2
0
0
1
1
1
x<<3
0
0
0
1
1
1
1
x<<4
0
0
0
0
1
1
1
1
1
x<<5
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
0
254
1
1
1
1
1
127
63
31
15
7
42
4.13
DSC/CCT/UFCG

[email protected] [email protected]
de
Programação Estruturada


Resumo
Programação
Estruturada I
Maior facilidade de compreensão, teste, depuração
e alteração de programas
Regras para programação estruturada

Regras desenvolvidas
programação
pela
comunidade
de

Uso exclusivo de estruturas de controle com única
entrada/única saída
43
4.13
DSC/CCT/UFCG

Resumo
Programação
Estruturada II
de
Regras
1. Ponto de Partida  Fluxograma mais simples
[email protected] [email protected]
2. Substituição de qualquer retângulo (ação) por
dois retângulos (ações) em seqüência
3. Substituição de qualquer retângulo (ação) por
qualquer estrutura de controle (seqüência, if,
if/else, switch, while, do/while ou for)
4. Aplicação das regras 2 e 3 em qualquer ordem
e múltiplas vezes
44
4.13
DSC/CCT/UFCG
Resumo de Programação
Estruturada III
[email protected] [email protected]
 Regra 1
 Início a partir do
fluxograma
mais
simples
Regra 2
Regra 2
 Regra 2
 Substituição
de
qualquer retângulo
por dois retângulos
em seqüência
Regra 2
45
4.13
DSC/CCT/UFCG
Resumo
Programação
Estruturada IV
de
 Regra 3
 Substituição de qualquer retângulo por uma
estrutura de controle
[email protected] [email protected]
Regra 3
Regra 3
Regra 3
46
4.13
DSC/CCT/UFCG
Resumo
Programação
Estruturada V
de
 Formas de controle de programas

Seqüência 
compilador
Seleção
 Repetição
[email protected] [email protected]

Manipulação
pelo
if, if/else ou switch
while, do/while ou for


 Possibilidade
automática
de combinação  Apenas de duas
maneiras
 Aninhamento
(Regra 3)
 Empilhamento
(Regra 2)
47
4.13
DSC/CCT/UFCG
Resumo
Programação
Estruturada VI
de
[email protected] [email protected]
 Formas de controle de programas

Qualquer seleção  Possibilidade de reescrita
como uma instrução if

Qualquer repetição  Possibilidade de reescrita
como uma instrução while
48
DSC/CCT/UFCG
José Eustáquio Rangel de Queiroz
Roberto Medeiros de Faria
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE
CENTRO DE CIÊNCIAS E TECNOLOGIA
[email protected]
DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO
Download

Kein Folientitel - Computação UFCG