Escolar Documentos
Profissional Documentos
Cultura Documentos
Sistema Computacional
3 4
5 6
1
Sistemas de Numeração Sistemas de Numeração
Assim, a interpretação de um número composto Observe que um sistema Por exemplo, o número
por 5 dígitos abcde no sistema de numeração de numeração base n, os 110101 na base 2 tem
com base n (n > 0) é: dígitos permitidos di valor decimal igual a 53
a x n4 + b x n3 + c x n2 + d x n1 + e x n0 encontram-se entre zero e 1 x 32 (25) = 32
n-1, ou seja (0 ≤ di < n) + 1 x 16 (24) = 16
Em geral, a interpretação de um número x 8 (23) = 0
composto por k dígitos dk-1dk-2...d1d0 na base n é: Base 10 (decimal): 0, 1, 2, + 0
3, 4, 5, 6, 7, 8, 9 + 1 x 4 (22) = 4
dk-1 x nk-1 + dk-2 x nk-2 + ... + d1 x n1 + d0 x n0 + 0 x 2 (21) = 0
Base 2 (binária): 0, 1
Portanto, em um sistema posicional de + 1 x 1 (20) = 1
numeração a posição de um dígito no número Base 8 (octal): 0, 1, 2, 3, ---
especifica o expoente da base do sistema de 4, 5, 6, 7
53
numeração para se obter a contribuição daquele Base 16 (hexadecimal): 0,
dígito no resultado final 1, 2, 3, 4, 5, 6, 7, 8, 9, A,
B, C, D, E, F
7 8
2
Memória Principal Memória Principal
Pode facilmente observar que o maior valor decimal que Para ilustrar como a informação é armazenada,
se pode representar com n bits é 2n - 1
suponha que a memória seja composta por uma
Na prática, a representação da informação é mais
complicada pois diversos tipos de informação são série de chaves elétricas de duas posições
armazenados: Por convenção, uma chave na posição “ligada”
Para informações não numéricas (caracteres) a representação é
efetuada através de um sistema de codificação no qual, por representa o dígito binário 1 e uma chave na
convenção, certos conjuntos de bits representam certos posição “desligada” o dígito binário 0
caracteres
Exemplos: ASCII e EBCDIC Na figura seguinte, um retângulo hachurado
Para números inteiros o problema do sinal é tratado normalmente
reservando um bit da palavra (geralmente o mais à esquerda)
representa uma chave ligada e um retângulo
para o bit de sinal branco representa uma chave desligada e o
0 indica número positivo tamanho da palavra de memória usado foi de 8
1 indica número negativo
Se a palavra tem k bits, tem-se k-1 bits para o módulo do número bits
A representação de números reais é consideravelmente mais
complicada
13 14
3
Componentes de um
Linguagens de Programação
Computador
Dispositivos de Entrada e Saída (I/O: Linguagem de Máquina
Um programa escrito em linguagem de máquina consiste de uma
Input/Output) série de números binários pois é a linguagem compreendida pela
Fornecem o meio pelo qual os dados são transmitidos CPU
ao computador e o resultado é apresentado Exemplo: 011101010100...
19 20
CPU executado
Memória
Principal
21 22
4
Ambiente de Programação Ambiente de Programação
C/C++ C/C++
Diretivas mais utilizadas em C A próxima fase é chamada de link-edição (ou
#include <stdio.h> edição de ligações)
funções de entrada e saída Programas C/C++ tipicamente contém chamadas a
#include <math.h> funções definidas em outros locais, tais como as
funções matemáticas bibliotecas padrões ou bibliotecas de um projeto
Diretivas mais utilizadas em C++: particular
#include <iostream> O código-objeto produzido contém “buracos” devido a
essas chamadas
funções de entrada e saída
#include <iomanip> O linker liga o código-objeto com o código dessas
chamadas para produzir o código executável (sem
funções de formatação de entrada e saída
“buracos”)
#include <cmath> Ambientes DOS/Windows: extensão .exe
funções matemáticas Ambientes Unix: arquivo a.out
25 26
Ambiente de Programação
Exemplo: Programa em C++
C/C++
Antes que um programa possa ser executado, ele #include <iostream>
deve ser colocado na memória principal using namespace std;
Esta tarefa é realizada pelo loader que transfere o
código-executável do disco para a memória int main()
Finalmente, o computador, sob o controle da {
CPU, executa o programa, instrução por
cout << "Bem vindo a linguagem C++\n";
instrução
return 0;
Para carregar e executar um programa, basta digitar o
nome do código-executável e pressionar Enter }
Bem vindo a linguagem C++
27 28
5
Algoritmo: Exemplos Algoritmo: Trocar uma Lâmpada
31 32
33 34
6
Algoritmo: Trocar uma Lâmpada Algoritmo: Trocar uma Lâmpada
Posicione a escada debaixo da lâmpada queimada Posicione a escada debaixo da lâmpada queimada
Escolha uma nova lâmpada da mesma potência da queimada Escolha uma nova lâmpada da mesma potência da queimada
• Selecione uma candidata à substituição • Selecione uma candidata à substituição
• Se a potência não é a mesma da queimada, repita o processo até • Se a potência não é a mesma da queimada, repita o processo até
encontrar uma que sirva encontrar uma que sirva
Descarte a lâmpada selecionada Descarte a lâmpada selecionada
Selecione uma nova Selecione uma nova
Repita até que a lâmpada possa ser alcançada Repita até que a lâmpada possa ser alcançada
• Suba um degrau da escada • Você pode estar pensando: “Eu realizo essa
Suba um degrau da escada
atividade de maneira diferente”.
Repita até que a lâmpada fique livre do soquete Repita até que a lâmpada
Issofique
podelivre do soquete
acontecer, pois um mesmo problema
• Gire a lâmpada queimada no sentido anti-horário • Gire a lâmpada queimada no solucionado
pode ser sentido anti-horário
de maneiras diferentes,
Posicione a nova lâmpada no soquete Posicione a nova lâmpada noporém gerando a mesma resposta.
soquete
Assim, podem existir vários algoritmos para
Repita até que a nova lâmpada esteja firme no soquete Repita até que a nova lâmpada esteja firme no soquete
resolver um mesmo problema.
• Gire a lâmpada no sentido horário • Gire a lâmpada no sentido horário
Desça da escada Desça da escada
37 38
41 42
7
Pseudo-código: Exemplo 1 Fluxograma
Faça um algoritmo para mostrar o Consiste em analisar o enunciado do
resultado da multiplicação de dois números problema e escrever, utilizando símbolos
Algoritmo em pseudo-código gráficos pré-definidos, os passos a serem
Algoritmo Multiplicar
executados para a resolução do problema
Início
declare N1, N2, M : inteiro
O entendimento de símbolos gráficos é
mais fácil que o de textos
Escreva(”Digite dois números”)
Leia(N1,N2) Para algoritmos complexos, pode dificultar
M Å N1 * N2
Escreva(M)
a programação de forma estruturada
Fim
43 44
45 46
Fim
47 48
8
Solução Diagrama NS: Símbolos
Início
Cálculos e atribuições de valores,
N1, N2
entrada e saída de dados
Tomada de decisão, com
M Å (N1+N2)/2.0 possibilidade de desvios
M
Laço com teste no início
V
M<5
F (enquanto)
51 52
Questão Solução
Utilize essas idéias para Algoritmo Média
escrever um algoritmo Leia(N1,N2)
utilizando diagrama de NS
M Å (N1+N2)/2.0
para calcular a média
aritmética entre duas notas Escreva(M)
9
Solução: NS e Fluxograma Pseudo-Código & C++
Início
Leia(N1,N2) Nos slides seguintes são fornecidos conceitos
adicionais, inicialmente em pseudo-código
M Å (N1+N2)/2.0 N1, N2
O objetivo da utilização do pseudo-código é tornar
Escreva(M) claro o conceito em questão e que é válido para
M Å (N1+N2)/2.0 qualquer linguagem de programação procedural
M>5
F V É importante lembrar que uma vez escrito um
M algoritmo em pseudo-código, ele pode ser traduzido
Escreva(”Reprovado”) Escreva(”Aprovado”) facilmente para qualquer linguagem de programação
procedural
F V
M>5 Logo após o conceito em pseudo-código é
mostrado como ele é implementado na
“Reprovado” “Aprovado”
linguagem de programação C++ ou algum
detalhe mais específico da linguagem
Fim
55 56
10
Solução Operações Primitivas
Indique o tipo de cada uma das seguintes constantes Adição e subtração são representadas de
10 (inteiro)
10.0 (real)
forma matemática usual
–10 (inteiro) Multiplicação
“10” (string) Para evitar a possível confusão com a letra x,
6.02e23 (real) a multiplicação é indicada por um * (asterisco)
“2 + 3 = 5” (string)
–2e-5 (real)
8
“3e-5” (string) Divisão é representada como 8/2
0.1234 (real) 2
“fim de questão” (string)
true (booleano) Exponenciação 24 é representada por 2^4
61 62
63 64
65 67
11
Operações Primitivas Operações Primitivas
O resultado de uma operação com os dois O resultado de uma operação com os dois
operandos inteiros é inteiro operandos inteiros é inteiro
O resultado de uma operação com um O resultado de uma operação com um
operando real e o outro real ou inteiro é operando real e o outro real ou inteiro é
real
real
Qual o resultado da expressão?
Qual o resultado da expressão?
1
1 × 10
O resultado 0.1 é truncado
× 10 10
para zero pois o resultado
da divisão de dois inteiros
10 deve ser um inteiro
1 / 10 * 10 = 0.1 * 10 = 0 * 10 = 0
68 69
70 71
Solução Variável
Indique o resultado e o tipo de cada uma das seguintes Uma variável é uma entidade que possui um valor, sendo
expressões: conhecida no programa por um nome (ou identificador)
a) 1 + 4 – 2 = 3 (inteiro) Uma variável representa alguma coisa, especificamente
b) 2 + 3 * 4 = 14 (inteiro) um dado em uma expressão
c) 3 * 4.0 – 2 = 10.0 (real) Uma variável pode receber muitos valores diferentes em
d) 3 * 4 - 2.0 = 10.0 (real) um programa, mas em um determinado momento no
e) 29.0 / 9 + 4 = 7.22 (real) tempo ela possui um único valor
f) 1 / 4 + 2 = 2 (inteiro) Como regra geral, assumir que toda variável declarada
g) 1.0 / 4 + 2 = 2.25 (real) que não recebeu um valor (por meio de uma atribuição ou
h) 1 / 4.0 + 2 = 2.25 (real) leitura), contém um valor que é considerado “lixo”, ou
i) 1 / 4 + 2.0 = 2.0 (real) seja, algo que não tem valor semântico para o programa e
j) 5 ^ 10 + 2 = 9765627 (inteiro) esse valor pode mudar a cada execução do programa
k) 3.0 ^ 5.0 + 1 = 244.0 (real)
72 73
12
Variável Variável: Exemplos
Existem algumas regras simples para dar nome a uma Nomes válidos para variáveis
variável, podendo variar dependendo da linguagem de X
programação SOMA
Em geral, o nome de uma variável segue a sintaxe de A123
formação de um identificador: LadoEsquerdo
começa sempre com uma letra; os demais caracteres podem ser CAIXA_AMARELA
letras ou números e alguns símbolos especiais (e.g., sublinhado) Um_Nome_Longo
brancos não são permitidos Note a utilização do símbolo de sublinhado “_” (ou
Na formação de um identificador, algumas linguagens diferenciam underscore) nos exemplos
letras minúsculas de maiúsculas
Nomes inválidos para variáveis
Algumas linguagens de programação requerem que uma 2X (não pode começar com número)
variável seja declarada antes de ser utilizada X+Y (“+” não é permitido)
Duas Palavras (espaço em branco não é permitido)
Sempre escolha nomes significativos para variáveis
74 75
76 77
13
Operação de Atribuição Operação de Atribuição
Algoritmo DeclaraAtribui Algoritmo DeclaraAtribui
Início Início
declare A: inteiro declare A: inteiro
Memória Memória
A Å 3 Endereço Valor
A Å 3 Endereço Valor
Fim Fim
A
80 81
82 83
84 85
14
Operação de Atribuição Operação de Atribuição
Assim, a atribuição é Assim, a atribuição é
uma operação uma operação
destrutiva Memória destrutiva Memória
Endereço Valor Endereço Valor
Se a seqüência de Se a seqüência de
A 10 A -2
atribuições for atribuições for
executada: executada:
A Å 10 A Å 10
A Å -2 A Å -2
AÅ1 AÅ1
Qual o valor da Qual o valor da
variável A no final? variável A no final?
86 87
15
Exemplo 1 C++ Exemplo 1 C++
#include <iostream> #include <iostream>
using namespace std; using namespace std;
int main()
{ int a,b;
int main()
{ int a=3,b=4;
a = 3;
b = 4; cout << ”a = ” << a << endl;
cout << ”a = ” << a << endl; cout << ”b = ” << b << endl;
cout << ”b = ” << b << endl; a=3 return 0; a=3
return 0; b=4 b=4
} }
92 93
Expressões Expressões
Expressão é uma combinação válida de Uma expressão pode conter variáveis, cujos
variáveis, constantes e operadores valores devem ser previamente atribuídos
Ex:
No comando de atribuição, o resultado da
Termo1 Å 14.6 + 6.4
avaliação da expressão é o valor que é
Termo2 Å 0.7 + 19.32
atribuído à variável indicada Resultado Å Termo1 / Termo2
Ex: Então
K Å 3 + 15 + 2 21.0 é atribuído a Termo1
20.02 é atribuído a Termo2
Então 20 é atribuído à variável K 1.048951 é atribuído a Resultado
94 95
Expressões Exemplo 2
Qualquer variável utilizada em uma expressão deve ter Algoritmo Exemplo2
uma valor no momento em que a expressão é avaliada
Início
Ex:
Termo1 Å 14.6 + 6.4 declare a,b : inteiro
Resultado Å Termo1 / Termo2
Termo2 Å 0.7 + 19.32
Há um erro de programação, embora os mesmos comandos estejam
a Å 3
presentes b Å 4
Quando a expressão “Termo1 / Termo2” está para ser avaliada, a
variável Termo2 ainda não recebeu um valor (normalmente, tem um Escreva(”a = ”,a)
valor mas é considerado como “lixo”)
Escreva(”b = ”,b)
É de responsabilidade do programador assegurar que
a=3
todas as variáveis que aparecem em uma expressão Escreva(”a*b = ”,a*b) b=4
tenham valores no momento em que ela é avaliada Fim a*b = 12
96 97
16
Exemplo 2 C++ Exemplo 3
#include <iostream> Algoritmo Exemplo3
using namespace std; Início
declare a,b,x : inteiro
int main()
{ int a,b;
a Å 3
a = 3; b Å 4
b = 4; x Å a * b
cout << ”a = ” << a << endl; Escreva(”a = ”,a)
cout << ”b = ” << b << endl;
Escreva(”b = ”,b)
cout << ”a*b = ” << a*b << endl; a=3 a=3
return 0; b=4 Escreva(”a*b = ”,x) b=4
a*b = 12 a*b = 12
} Fim
98 99
102 103
17
Alterando um Valor Armazenado Alterando um Valor Armazenado
Suponha que X seja uma Suponha que X seja uma variável inteira e que temos um valor
variável inteira e que armazenado nela
temos um valor Memória Se um novo valor for atribuído a X ele substituirá o valor anterior
armazenado nela Seja A uma variável inteira e considere os seguintes comandos:
Endereço Valor
Se um novo valor for XÅ0
X 1
atribuído a X ele AÅ0
substituirá o valor anterior XÅA+1
A 0 X e A recebem o valor zero (nos dois primeiros comandos)
Seja A uma variável
inteira e considere os No terceiro comando X recebe o valor da variável A adicionado em
seguintes comandos: uma unidade
XÅ0 Assim, X Å A + 1 pode ser lido como “tome o valor atual da variável
AÅ0 A (que é zero), adicione 1 a ele e atribua o resultado à variável X”
XÅA+1 Após o terceiro comando, X tem o valor 1 enquanto A mantém o valor
zero
104 105
106 107
108 109
18
Alterando um Valor Armazenado
Alterando um Valor Armazenado
C/C++
Note que X Å X + 1 não significa que X é igual a A linguagem permite que o Pseudo-Código C/C++
X+1 comando
X=X+1 X = X + 1;
O símbolo Å significa atribuição e não também seja representando
igualdade, já que isso não tem sentido como XÅX+1 X++;
matematicamente X += 1
ou como (forma mais comum) ++X;
O aparecimento de uma variável no lado
X++
esquerdo de um comando de atribuição indica X += 1;
Em geral, o comando
que seu valor deve ser alterado X=X+a X = X – 1;
O aparecimento de uma variável no lado direito também pode ser representado
de um comando de atribuição indica que seu como XÅX–1 X--;
valor deve ser utilizado X += a
Analogamente para as demais --X;
X Å X + 1 significa o aumento do valor de X em 1 operações primitivas
X -= 1;
110 111
a = 3; a = 3;
cout << ”a antes = ” << a << endl; cout << ”a antes = ” << a << endl;
a = a + 1; a++;
cout << ”a depois = ” << a << endl; a antes = 3
cout << ”a depois = ” << a << endl; a antes = 3
return 0; a depois = 4 return 0; a depois = 4
} }
114 115
19
Prioridade dos Operadores Prioridade dos Operadores
Considere o seguinte comando Considere o seguinte comando
X Å 3 + 6 * 10 X Å 3 + 6 * 10
Qual o valor recebido pela variável X? Qual o valor recebido pela variável X?
Depende da ordem na qual os operadores
matemáticos (* e +) são processados
Se processarmos da esquerda para a direita, o
resultado é 90; da direita para esquerda é 63
X Å 3 + 6 * 10 X Å 3 + 6 * 10
9 60
90 63
116 117
118 119
21 21 20
120 121
20
Prioridade dos Operadores Prioridade dos Operadores
8 + 7 * 3 + 4 * 5 8 + 7 * 3 + 4 * 5
21 20 21 20
29 29
49
122 123
15
124 125
15 7 15 7
105
126 127
21
Prioridade dos Operadores Prioridade dos Operadores
Parênteses podem ser usados para alterar a Operadores podem ser agrupados em classes
Exponenciação tem maior prioridade; seguida por mais e menos
prioridade nas operações unários; seguidos pela multiplicação, módulo e divisão e finalmente
Operações entre parênteses são processadas adição e subtração
em primeiro lugar Operadores da mesma classe têm a mesma prioridade
2
Note ordem da aplicação da exponenciação: 2 ^3^ 2 = 23 = 29 = 512
(8 + 7) * (3 + 4) * 5
Classe Operador Significado
1 () Parênteses mais internos
15 7
2 sqrt, log... Funções Embutidas
3 ^ Exponenciação (aplicada da direita para a esquerda)
4 -, + Sinal dos operandos (menos e mais unários aplicados da direita para a esquerda)
105
5 *, %, / Multiplicação, módulo e divisão (aplicadas da esquerda para a direita)
Exemplo Exercício
Escreva as seguintes expressões matemáticas Assuma que A, B e C sejam variáveis
como expressões de computador reais com valores e que I, J e K sejam
b variáveis inteiras. Dados A = 2.0, B = 3.0
a+
a a+ b sen(c) e I = 3, indique o valor final dos comandos
seguintes:
bc c+d d− e CÅA*B–I C = _______
a/b/c (a+abs(b))/(c+d) (a+b/sin(c))/(d-sqrt(e))
JÅI/4*6 J = _______
ou C Å B / A + 2.5 C = _______
a/(b*c) K Å I / 2 + 4.7 K = _______
JÅI/A+B J = _______
130 131
Solução Exercício
Assuma que A, B e C sejam variáveis Dada a equação algébrica y = ax3 + 7,
reais com valores e que I, J e K sejam quais dos seguintes comandos
variáveis inteiras. Dados A = 2.0, B = 3.0 representam corretamente a equação?
e I = 3, indique o valor final dos comandos a) y Å a * x * x * x + 7
seguintes: b) y Å a * x * x * (x + 7)
CÅA*B–I C = 3.0
c) y Å (a * x) * x * x + 7
JÅI/4*6 J=0
C Å B / A + 2.5 C = 4.0 d) y Å (a * x) * x * (x + 7)
K Å I / 2 + 4.7 K=5 e) y Å a * (x * x * x) + 7
JÅI/A+B J=4 f) y Å a * x * (x * x + 7)
132 133
22
Solução Entrada e Saída
Dada a equação algébrica y = ax3 + 7, quais Leia(lista de variáveis)
dos seguintes comandos representam Permite ler valores, atribuindo-os à variáveis
corretamente a equação? indicadas
a) y Å a * x * x * x + 7 A entrada pode vir do teclado, de um arquivo,
b) y Å a * x * x * (x + 7) do scanner de código de barras, etc
c) y Å (a * x) * x * x + 7 Escreva(lista de saída)
d) y Å (a * x) * x * (x + 7) Permite mostrar os valores da lista de saída
e) y Å a * (x * x * x) + 7 A saída pode aparecer em terminais de vídeo,
f) y Å a * x * (x * x + 7) ser impressa em papel, armazenada em
Resposta: (a), (c), (e) arquivos, etc
134 135
23
Exemplo 6 Exemplo 7
#include <iostream> #include <iostream>
using namespace std;
using namespace std;
int main()
int main() { int a,b;
{ int a,b;
cout << ”Entre dois valores: ”;
cin >> a >> b;
cout << ”Entre dois valores: ”; cout << ”O dobro de ” << a << ” = ” << 2*a << endl;
cout << ”O tripo de ” << b << ” = ” << 3*b << endl;
cin >> a >> b;
return 0;
cout << ”Valores digitados = ” }
<< a << ” e ” << b << endl;
return 0;
}
141 142
Comentários são textos que podem ser Os comentários podem ocupar uma ou
inseridos nos programas com o objetivo de várias linhas
documentá-los Para delimitar comentários de várias linhas,
Os comentários não são analisados pelo os símbolos /* e */ são utilizados
compilador, ou seja, todo comentário é Para delimitar comentários de uma única
ignorado pelo compilador, não fazendo linha, o símbolo // é utilizado e encerra
parte do código executável automaticamente no final da linha
143 144
147 148
24
Exercício Solução Exercício 1
Algoritmo Conversão. Este algoritmo lê uma temperatura
1. Elabore um algoritmo que leia uma na escala Celsius (oC) e imprime a equivalente em
temperatura na escala Celsius (oC) e Fahrenheit (oF).
152 153
25