Você está na página 1de 20

Conceitos Básicos Sistema Computacional

• Esta aula introduz alguns • Componentes Físicos: dispositivos


conceitos básicos sobre mecânicos, magnéticos, elétricos ou
programação de eletrônicos
computadores
• Componentes Lógicos: Programas, métodos
• Serão abordados alguns
conceitos sobre sistemas
e procedimentos, regras e documentação
computacionais e algoritmos

P
D 1 2

Sistema Computacional Sistema Computacional


• Sistema Operacional
Aplicações
Responsável pelo processamento dos programas
Assegura que recursos físicos estejam disponíveis
quando necessários Software
Sistema Operacional
Assegura que recursos de software sejam fornecidos
quando exigidos
Cria um ambiente onde os usuários podem preparar e
executar seus programas sem se preocuparem com Hardware

detalhes de hardware
Diversos usuários pode usar simultaneamente o sistema;
É função do sistema operacional coordenar o
compartilhamento dos recursos exigidos pelos usuários
3 4

Componentes de um Computador Componentes de um Computador


UCP (ou CPU) • Unidade Central de Processamento
Unidade A CPU é o "cérebro" do computador;
de Controle
Comanda o fluxo de dados no sistema e realiza
operações com esses dados
ULA
Unidade de
Lógica e Aritmética • responsável pelos cálculos
UC
• Transfere dados dos dispositivos de entrada, transfere
Dispositivo dados da memória principal para a secundária e vice-
Dispositivo Armazenamento de Saída
de Entrada versa, envia resultados para os dispositivos de saída

5 6

1
Componentes de um Computador Componentes de um Computador
• Memória Principal • Memória Secundária ou Auxiliar
ROM (Read Only Memory) Os tipos de mídia mais utilizados são:
• Armazena as informações básicas para a inicio e • os Floppy Disks (disquetes);
operação do computador • os Hard Disks (discos rígidos ou winchester);
• É permanente, não podendo ser apagada ou alterada • os discos de mídia removível (Zip disks ou similares);
RAM (Random Access Memory) • discos ópticos (CD-ROM, CD-R, CD-RW, DVD e
• “Espaço de trabalho” similares).
• Volátil: os dados mantidos enquanto a máquina estiver São mais lentas que a Memória RAM, mas são
ligada, ou seja, a RAM é mantida apenas se tiver muito maiores e mais baratas e podem
energia disponível armazenar grandes quantidades de dados

7 8

Componentes de um Computador Ambiente de Programação


O código-fonte é criado no editor e
• Dispositivos de Entrada e Saída (I/O: Input/Output) Editor armazenado em disco

Fornecem o meio pelo qual os dados são transmitidos ao Pré-processador processa o


Disco Pré-processador código-fonte
computador e o resultado é apresentado
Compilador gera código-objeto e
Os principais dispositivos de entrada são teclado, mouse, Compilador armazena-o em disco
leitora de código de barras, scanner, microfone
Linker liga o código-objeto com as
O principal dispositivo de saída é o Monitor. Além do Link Editor bibliotecas, cria código-executável e
monitor existe a impressora, caixas de som, plotters armazena-o em disco

Existem também dispositivos de entrada e saída ao Loader carrega o código-executável


na memória principal
mesmo tempo, como os Fax-Modem, que recebem e Loader
transmitem dados CPU executa cada instrução,
.
possivelmente armazenando novos
.
. dados à medida que o programa é
CPU executado
Memória
Principal
9 10

Ambiente de Programação C/C++ Ambiente de Programação C/C++


• O código-fonte é editado e armazenado em um • Em um sistema C/C++, o pré-processador é
arquivo com extensões: executado automaticamente antes do
Código-fonte em C: extensão .c (letra “c” minúscula) compilador
Código-fonte em C++: extensões .cpp, .cxx ou .C
(letra “C” maiúscula) O pré-processador obedece comandos especiais
chamados de diretivas do pré-processador, que
• No código-fonte, todo comando C++ termina com ;
indicam que manipulações devem ser realizadas
• Em seguida, o programador executa o comando no programa antes da compilação, tais como a
para compilar o código-fonte inclusão de outros arquivos no código-fonte a ser
O compilador traduz o programa C++ para linguagem de compilado e a substituição de textos
máquina (código-objeto), com extensão .obj ou .o
Todas diretivas começam com #
Em um sistema C++, o pré-processador é executado
automaticamente antes do compilador Diretivas do pré-processador não são comandos
C/C++, assim elas não terminam com ;
11 12

2
Ambiente de Programação C/C++ Ambiente de Programação 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

13 14

Ambiente de Programação C/C++ Exemplo: Programa em C++


• Antes que um programa possa ser #include <iostream>
executado, ele deve ser colocado na using namespace std;
memória principal
Esta tarefa é realizada pelo loader que transfere int main()
o código-executável do disco para a memória {
cout << "Bem vindo a linguagem C++\n";
• Finalmente, o computador, sob o controle da
return 0;
CPU, executa o programa, instrução por
}
instrução
Para carregar e executar um programa, basta Bem vindo a linguagem C++
digitar o nome do código-executável e pressionar
Enter
15 16

Algoritmo Algoritmo
• Qualquer problema computacional pode ser • Uma receita de cozinha
solucionado executando uma série de ações em • No Natal, muitos pais passam horas seguindo
uma ordem específica algoritmos para montar os novos brinquedos de
• Uma especificação para solucionar um problema seus filhos
em termos de • Como outro exemplo, considere o algoritmo de
ações a serem executadas e levantar-para-trabalhar de um jovem executivo: (1)
a ordem nas quais essas ações devem ser executadas levantar da cama; (2) tirar pijamas; (3) tomar
é denominada um algoritmo banho; (4) vestir-se; (5) tomar café; (6) ir par o
• Em outras palavras, um algoritmo é uma seqüência trabalho
ordenada e sem ambigüidade de passos que • Suponha, entretanto, que os mesmos passos sema
levam à solução de um dado problema executados em uma ordem ligeiramente diferente:
(1) levantar da cama; (2) tirar pijamas; (3) vestir-se
17
(4) tomar banho; (5) tomar café; (6) ir par o trabalho 18

3
Algoritmo Algoritmo: Trocar uma Lâmpada
• Considere o algoritmo de levantar-para-trabalhar de 1. Remova a lâmpada queimada
um jovem executivo: (1) levantar da cama; (2) tirar
pijamas; (3) tomar banho; (4) vestir-se; (5) tomar 2. Coloque a nova lâmpada
café; (6) ir para o trabalho
• Suponha, entretanto, que os mesmos passos sema
executados em uma ordem ligeiramente diferente:
(1) levantar da cama; (2) tirar pijamas; (3) vestir-se
(4) tomar banho; (5) tomar café; (6) ir para o
trabalho
• No segundo caso, o executivo chegará no trabalho
ensopado
• Assim, a ordem na qual os passos são executados
em um algoritmo é importante 19 20

Algoritmo: Trocar uma Lâmpada Algoritmo: Trocar uma Lâmpada


1. Remova a lâmpada queimada 1. Remova a lâmpada queimada
• Posicione a escada debaixo da lâmpada queimada
• Posicione a escada debaixo da lâmpada
• Escolha uma nova lâmpada da mesma potência da
queimada queimada
• Escolha uma nova lâmpada da mesma • Suba na escada até que a lâmpada possa ser
potência da queimada alcançada
• Gire a lâmpada queimada no sentido anti-horário até
• Suba na escada até que a lâmpada possa ser que se solte
alcançada 2. Coloque a nova lâmpada
• Gire a lâmpada queimada no sentido anti- • Posicione a nova lâmpada no soquete
horário até que se solte • Gire-a no sentido horário até que ela se firme
2. Coloque a nova lâmpada • Desça da escada

21 22

Algoritmo: Trocar uma Lâmpada Algoritmo: Trocar uma Lâmpada


1. Remova a lâmpada queimada 1. Remova a lâmpada queimada
• 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 • Escolha uma nova lâmpada da mesma potência da queimada
• Selecione uma candidata à substituição
queimada
• Se a potência não é a mesma da queimada, repita o processo até encontrar
• Suba na escada até que a lâmpada possa ser uma que sirva
alcançada • Descarte a lâmpada selecionada
• Selecione uma nova
• Gire a lâmpada queimada no sentido anti-horário até
que se solte • Suba na escada até que a lâmpada possa ser alcançada
• Gire a lâmpada queimada no sentido anti-horário até que se solte
2. Coloque a nova lâmpada
2. Coloque a nova lâmpada
• Posicione a nova lâmpada no soquete
• Posicione a nova lâmpada no soquete
• Gire-a no sentido horário até que ela se firme
• Gire-a no sentido horário até que ela se firme
• Desça da escada • Desça da escada

23 24

4
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é encontrar • Se a potência não é a mesma da queimada, repita o processo até encontrar
uma que sirva 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 • Suba um degrau da escada
Você pode estar pensando: “Eu realizo essa
• Repita até que a lâmpada fique livre do soquete • atividade
Repita até que a lâmpada fique livre de maneira diferente”.
do soquete
• Gire a lâmpada queimada no sentido anti-horário •
Isso pode
Gire a lâmpada queimada acontecer,
no sentido pois um mesmo problema
anti-horário
pode ser solucionado de maneiras diferentes,
• Posicione a nova lâmpada no soquete • Posicione a nova lâmpada no soquete
porém gerando a mesma resposta.
• Repita até que a nova lâmpada esteja firme no soquete • Repita até que a nova lâmpada esteja
Assim, podemfirme novários
existir soquete
algoritmos para
• Gire a lâmpada no sentido horário • resolver um mesmo problema.
Gire a lâmpada no sentido horário
• Desça da escada • Desça da escada
25 26

Algoritmo: Trocar uma Lâmpada Representação de Algoritmos


• Esse processo de aumentar o detalhamento • Pseudo-código (ou português estruturado)
de um algoritmo pode continuar quase que • Fluxograma
indefinidamente • Diagrama de Nassi-Shneiderman
• O algoritmo para trocar uma lâmpada mostra • Diagrama de Booch Programas escritos em uma
como os algoritmos podem ser expressos: das representações não são
operações simples e sem ambigüidade; a • Diagrama UML executados diretamente em
ordem na qual os passos devem ser • ... computadores; eles auxiliam os
programadores a pensarem
seguidos é claramente expressa sobre um programa antes de
tentar escrevê-lo em uma
linguagem de programação
como C, C++ ou Pascal.
27 28

Pseudo-código Pseudo-código: Exemplo 1


• É uma linguagem artificial que auxilia os • Faça um algoritmo para mostrar o resultado
programadores no desenvolvimento de da multiplicação de dois números
algoritmos • Algoritmo em pseudo-código
• É similar ao português; é conveniente e Algoritmo Multiplicar
Início
amigável, embora não seja uma linguagem declare N1, N2, M : inteiro
de programação de computadores
Escreva(”Digite dois números”)
Leia(N1,N2)
M N1 * N2
Escreva(M)
Fim

29 30

5
Fluxograma Fluxograma: Principais Símbolos
• Consiste em analisar o enunciado do • Indica o início e o fim do algoritmo
• Indica o sentido do fluxo de dados e
problema e escrever, utilizando símbolos é utilizado para conectar os demais
gráficos pré-definidos, os passos a serem símbolos entre si
executados para a resolução do problema
• Cálculos e atribuições de valores
• O entendimento de símbolos gráficos é mais
fácil que o de textos • Entrada de dados
• Para algoritmos complexos, pode dificultar a
• Saída de dados
programação de forma estruturada
• Tomada de decisão, com
possibilidade de desvios
31 32

Fluxograma: Exemplo 1 Fluxograma: Exemplo 2


• Faça um algoritmo para mostrar o Início
• Faça um algoritmo para Início
resultado da divisão de dois
mostrar o resultado da números Digite dois
multiplicação de dois números Digite dois
• Algoritmo em pseudo-código números
números
• Algoritmo em pseudo-código
Algoritmo Dividir
Início N1, N2
Algoritmo Multiplicar N1, N2 declare N1, N2, D : inteiro
Início F V
Escreva(”Digite dois números”) N2 = 0
declare N1, N2, M : inteiro Leia(N1,N2)
M N1*N2
Se N2 = 0 Então
Escreva(”Digite dois números”) Escreva(”Impossível dividir”)
senão D N1/N2 Impossível
Leia(N1,N2) M D N1 / N2 dividir
M N1 * N2 Escreva(D)
Escreva(M) Fim se D
Fim Fim Fim

33
Fim 34

Questão Solução
Início
• Utilize essas idéias para
escrever um algoritmo N1, N2
utilizando fluxograma para
calcular a média aritmética M (N1+N2)/2
entre duas notas de um aluno
M
e mostrar a média e a situação
do aluno, que pode ser F V
aprovado ou reprovado M>5

• Você tem 5 minutos para


Reprovado Aprovado
escrever o algoritmo
Fim
35 36

6
Diagrama NS: Símbolos Diagrama NS: Exemplo 1
• Cálculos e atribuições de valores, • Faça um algoritmo para
entrada e saída de dados mostrar o resultado da
multiplicação de dois números
• Tomada de decisão, com
possibilidade de desvios • Algoritmo em pseudo-código

Algoritmo Multiplicar Algoritmo Multiplicar


• Laço com teste no início Início
Escreva(”Digite 2 números”)
declare N1, N2, M : inteiro
(enquanto) Leia(N1,N2)
Escreva(”Digite dois números”)
Leia(N1,N2) M N1 * N2
• Laço com teste no final (repita ... M N1 * N2
Escreva(M) Escreva(M)
até) Fim

37 38

Diagrama NS: Exemplo 2 Questão


• Faça um algoritmo para mostrar o • Utilize essas idéias para
resultado da divisão de dois
números escrever um algoritmo
• Algoritmo em pseudo-código utilizando diagrama de NS
Algoritmo Dividir
para calcular a média
Início
declare N1, N2, D : inteiro
aritmética entre duas notas de
Algoritmo Dividir
um aluno e mostrar a média e
Escreva(”Digite dois números”) Escreva(”Digite 2 números”)
Leia(N1,N2) a situação do aluno, que pode
Se N2 = 0 Então
Escreva(”Impossível dividir”)
Leia(N1,N2) ser aprovado ou reprovado
senão N2 = 0
D N1 / N2 F V • Você tem 5 minutos para
Escreva(D)
Fim se
D N1 / N2 Escreva(”Im
possível
escrever o algoritmo
Fim Escreva(D) dividir”)

39 40

Solução Solução: NS e Fluxograma


Início
Leia(N1,N2)
Algoritmo Média
M (N1+N2)/2 N1, N2
Leia(N1,N2)
Escreva(M)
M (N1+N2)/2 M (N1+N2)/2
F M>5
Escreva(M) V
M
F M>5 Escreva(”Reprovado”) Escreva(”Aprovado”)
V
F V
Escreva(”Reprovado”) Escreva(”Aprovado”) M>5

Reprovado Aprovado

Fim
41 42

7
Tipos de Dados Tipos de Dados em C/C++
• A quantidade de bits e intervalos podem variar de compilador para compilador
• Numérico • Inteiro
unsigned char (8 bits) 0 até 255
Inteiro (3, 7, -6, 7829) char (8 bits) -128 até 127
enum (16 bits) -32,768 to 32,767
Real (23.8, 3.683, -6281.232, 2.71e10) unsigned int (16 bits) 0 até 65,535

• Cadeia de caracteres ou string (“abc”, short int (16 bits)


int (16 bits)
-32,768 até 32,767
-32,768 até 32,767
“ana paula”, “3 + 4 = 7”) unsigned long (32 bits)
long (32 bits)
0 até 4,294,967,295
-2,147,483,648 até 2,147,483,647

• Lógico ou booleano (verdadeiro/falso; true/ • Real


float 32 bits: 3.4 * (10^-38) até 3.4 * (10+38)
false) double 64 bits: 1.7 * (10^-308) até 1.7 * (10^+308)
long double 80 bits: 3.4 * (10^-4932) até 1.1 * (10^+4932)
• Ponteiro • Cadeia de caracteres ou string
• Lógico ou booleano (true, false)
bool somente em C++
Em C é necessário definir: enum bool {false, true};
43 • Ponteiro 44

Exercício Solução
Indique o tipo de cada uma das seguintes constantes Indique o tipo de cada uma das seguintes constantes
• 10 • 10 (inteiro)
• 10.0 • 10.0 (real)
• –10 • –10 (inteiro)
• “10” • “10” (string)
• 6.02e23 • 6.02e23 (real)
• “2 + 3 = 5” • “2 + 3 = 5” (string)
• –2e-5 • –2e-5 (real)
• “3e-5” • “3e-5” (string)
• 0.1234 • 0.1234 (real)
• “fim de questão” • “fim de questão” (string)
• true • true (booleano)
45 46

Operações Primitivas Operações Primitivas: Exemplos


• Adição e subtração são representadas de • Adição: 2 + 3 + 4
forma usual matemática • Subtração: 10 – 4 – 1
• Multiplicação • Multiplicação: 2 * 3 * 4
Para evitar a possível confusão com a letra x, a • Divisão: 10.0 / 4
multiplicação é indicada por um * (asterisco) • Exponenciação: 3^2
• Divisão 8 é representado como 8/2 Em C/C++ não existe este operador
Ele pode ser substituído pela função embutida pow(x,y)
2
C: #include <math.h>
• Exponenciação 24 é representada por 2^4 C++: #include <cmath>
3^2 é equivalente a pow(3,2)

47 48

8
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 é real operando real e o outro real ou inteiro é real
• Qual o resultado da expressão?
• Qual o resultado da expressão?
O resultado 0.1 é truncado
1 1 para zero pois o resultado
10 10 da divisão de dois inteiros
10 10 deve ser um inteiro

• 1 / 10 * 10 = 0.1 * 10 = 0 * 10 = 0

49 50

Operações Primitivas Operações Primitivas


• Para solucionar esta questão, é necessário • Além dos operadores aritméticos convencionais,
transformar um dos operando em real existem outros operadores ou funções embutidas:
• Resto da divisão
1.0 1 Em C/C++: representado por %
10 ou 10 Em Pascal: representado por mod
10 10.0
Ex: 9 % 4 resulta em 1; 27 % 5 resulta em 2
• Raíz quadrada
Em C/C++/Pascal: representado por sqrt(expressão)
Ex: sqrt(16) resulta em 4; sqrt(25) resulta em 5;
sqrt(25 + 11) resulta em 6

51 52

Exercício Solução
• Indique o resultado e o tipo de cada uma das seguintes • Indique o resultado e o tipo de cada uma das seguintes
expressões: expressões:
a) 1+4–2 a) 1 + 4 – 2 = 3 (inteiro)
b) 2+3*4 b) 2 + 3 * 4 = 14 (inteiro)
c) 3 * 4.0 - 2 c) 3 * 4.0 – 2 = 10.0 (real)
d) 3 * 4 - 2.0 d) 3 * 4 - 2.0 = 10.0 (real)
e) 29.0 / 9 + 4 e) 29.0 / 9 + 4 = 7.22 (real)
f) 1/4+2 f) 1 / 4 + 2 = 2 (inteiro)
g) 1.0 / 4 + 2 g) 1.0 / 4 + 2 = 2.25 (real)
h) 1 / 4.0 + 2 h) 1 / 4.0 + 2 = 2.25 (real)
i) 1 / 4 + 2.0 i) 1 / 4 + 2.0 = 2.0 (real)
j) 5 ^ 10 + 2 j) 5 ^ 10 + 2 = 9765627 (inteiro)
k) 3.0 ^ 5.0 + 1 k) 3.0 ^ 5.0 + 1 = 244.0 (real)

53 54

9
Variável Variável
• Uma variável é uma entidade que possui um valor, sendo • Existem algumas regras simples para dar nome a uma
conhecida no programa por um nome ou identificador variável, podendo variar dependendo da linguagem de
• Uma variável representa alguma coisa, especificamente um programação
dado em uma expressão • Em geral, o nome de uma variável segue a sintaxe de
• Uma variável pode receber muitos valores diferentes em um formação de um identificador:
programa, mas em um determinado momento no tempo ela
começa sempre com uma letra; os demais caracteres podem ser
possui um único valor letras ou números e alguns símbolos especiais
• Toda variável deve ser declarada antes de ser utilizada em brancos não são permitidos
C/C++
• Algumas linguagens de programação diferenciam letras
• Como regra geral, assumir que toda variável declarada que
minúsculas de maiúsculas (C/C++) outras não (Pascal)
não recebeu um valor, contém um valor que é considerado
“lixo”, ou seja, algo que não tem valor semântico para o Em C/C++ a variável X é diferente da variável x, ou seja, X
representa uma variável e x representa outra variável que é distinta
programa e esse valor pode mudar a cada execução do
de X
programa
55 56

Variável: Exemplos Exemplo


• Nomes válidos para variáveis #include <iostream>
using namespace std;
X
SOMA int main()
A123 { // declaração da variável “a” inteira
LadoEsquerdo int a;
CAIXA_AMARELA
// declaração das variáveis “b” e “c” inteiras
Um_Nome_Longo int b,c;
• Note a utilização do símbolo de sublinhado “_” (ou
underscore) nos exemplos // declaração das variável inteira “Quantidade”
int Quantidade;
• Nomes inválidos para variáveis
2X (não pode começar com número) // declaração de 4 variáveis reais
X+Y (“+” não é permitido) float X,Y,Z,Hipotenusa;
Duas Palavras (espaço em branco não é permitido)
return 0;
• Sempre escolha nomes significativos para variáveis }
57 58

Operação de Atribuição Operação de Atribuição


• É a forma de especificar que a uma variável será dado um • Assim, a atribuição é uma operação
valor
• Forma geral: <variável> <expressão> destrutiva
• Em C/C++ é indicada pelo símbolo “=“ • Se a seqüência de atribuições for executada:
• O comando
A 10
A 3
Indica que à variável A é atribuído o valor 3 A -2
• A variável A pode ser vista como uma palavra na memória A 1
do computador
• Após a execução do comando de atribuição, a variável de • Qual o valor da variável A no final?
nome A conterá o número 3
• Desde que a memória só pode conter um único valor por
vez, o número 3 substitui qualquer valor que a variável
possuía anteriormente
59 60

10
Operação de Atribuição Operação de Atribuição
• Assim, a atribuição é uma operação • Assim, a atribuição é uma operação
destrutiva destrutiva
• Se a seqüência de atribuições for executada: • Se a seqüência de atribuições for executada:
A 10 A 10
A 10 A -2
A -2 A -2
A 1 A 1

61 62

Operação de Atribuição Operação de Atribuição


• Assim, a atribuição é uma operação • Assim, a atribuição é uma operação
destrutiva destrutiva
• Se a seqüência de atribuições for executada: • Se a seqüência de atribuições for executada:
A 10 A 10
A 1 A 1
A -2 A -2
A 1 A 1
• O valor da variável A após as três operações
é1
• Os valores 10 e –2 foram destruídos
63 64

Exemplo 1 Exemplo 2
#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 a=3
b=4 return 0; b=4
return 0;
} }

65 66

11
Expressões Expressões
• Atribuição: <variável> <expressão>; • Uma expressão pode conter variáveis, cujos
• Expressão é uma combinação válida de valores devem ser previamente atribuídos
variáveis, constantes e operadores • 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
• 21.0 é atribuído a Termo1
K 3 + 15 + 2
• 20.02 é atribuído a Termo2
Então 20 é atribuído à variável K
• 1.048951 é atribuído a Resultado
67 68

Expressões Exemplo 1
• Qualquer variável utilizada em uma expressão deve ter uma #include <iostream>
valor no momento em que a expressão é avaliada using namespace std;
• Ex:
Termo1 14.6 + 6.4 int main()
Resultado Termo1 / Termo2 { int a,b;
Termo2 0.7 + 19.32
Então haveria um erro, embora os mesmo 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 cout << ”a = ” << a << endl;
valor mas é considerado como “lixo”) cout << ”b = ” << b << endl;
• É de responsabilidade do programador assegurar que todas cout << ”a*b = ” << a*b << endl; a=3
as variáveis que aparecem em uma expressão tenham return 0; b=4
valores no momento em que ela é avaliada } a*b = 12

69 70

Exemplo 2 Alterando um Valor Armazenado


#include <iostream> • Suponha que X seja uma variável inteira e que temos um valor
using namespace std; armazenado nela
• Se um novo valor for atribuído a X ele substituirá o valor anterior
int main()
{ int a,b,x; • Seja A uma variável inteira
X 0
a = 3; A 0
b = 4; X A+1
x = a * b; • X e A recebem o valor zero (nos dois primeiros comandos)
cout << ”a = ” << a << endl; • Após isso X recebe o valor da variável A adicionado em uma unidade
cout << ”b = ” << b << endl;
• Assim, X A + 1 pode ser lido como “tome o valor atual da variável A
cout << ”a*b = ” << x << endl;
(que é zero), adicione 1 a ele e atribua o resultado à variável X”
return 0;
}
a=3 • Após o terceiro comando, X tem o valor 1 enquanto A mantém o valor 0
b=4
a*b = 12

71 72

12
Alterando um Valor Armazenado Alterando um Valor Armazenado
• Suponha que tivéssemos escrito • Note que X X + 1 não significa que X é igual a X+1
X 0 • “ “ significa “atribuição” e não “igualdade”, já que isso não
X X+1 tem sentido matematicamente
• X recebe o valor zero no primeiro comando • O aparecimento de uma variável no lado esquerdo de uma
atribuição indica que seu valor deve ser alterado
• Após isso X recebe o valor da variável X adicionado em
uma unidade • O aparecimento de uma variável no lado direito de uma
atribuição indica que seu valor deve ser utilizado
• Assim, X X + 1 também é lido como “tome o valor atual
• Nas linguagens Basic, Fortran, C/C++ o símbolo “=“ é
da variável X (que é zero), adicione 1 a ele e atribua o utilizado para representar a atribuição; em Pascal o símbolo
resultado à variável X” “:=“ é utilizado
• Após o segundo comando, X tem o valor 1 • X X + 1 significa o aumento do valor de X em 1
• Modificamos o valor da variável X adicionando 1 a ela • Em C/C++
X = X + 1 pode ser também representando como X++

73 74

Exemplo 1 Exemplo 2
#include <iostream> #include <iostream>
using namespace std; using namespace std;

int main() int main()


{ int a; { int a;

a = 3; a = 3;
cout << ”a antes = ” << a << endl; cout << ”a antes = ” << a << endl;
a = a + 1; a++;
cout << ”a depois = ” << a << endl; cout << ”a depois = ” << a << endl;
return 0; return 0;
a antes = 3 a antes = 3
} a depois = 4
} a depois = 4

75 76

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
77 78

13
Prioridade dos Operadores Prioridade dos Operadores
• Para eliminar essa ambigüidade, a matemática definiu 8 + 7 * 3 + 4 * 5
regras adicionais para a avaliação de expressões
• À cada operador é associada uma prioridade
• Operadores com maior prioridade são processados em
primeiro lugar, da esquerda para a direita
• Por exemplo, a multiplicação tem maior prioridade que a
adição
• Então na expressão 3 + 6 * 10, o termo 6 * 10 é processado
em primeiro lugar, resultando em 60; a seguir, o operador
de adição é processado, somando 3 com 60, resultando em
63

79 80

Prioridade dos Operadores Prioridade dos Operadores


8 + 7 * 3 + 4 * 5 8 + 7 * 3 + 4 * 5

21 21 20

81 82

Prioridade dos Operadores Prioridade dos Operadores


8 + 7 * 3 + 4 * 5 8 + 7 * 3 + 4 * 5

21 20 21 20

29 29

49

83 84

14
Prioridade dos Operadores Prioridade dos Operadores
• Parênteses podem ser usados para alterar a • Parênteses podem ser usados para alterar a
prioridade nas operações prioridade nas operações
• Operações entre parênteses são processadas em • Operações entre parênteses são processadas em
primeiro lugar primeiro lugar
(8 + 7) * (3 + 4) * 5 (8 + 7) * (3 + 4) * 5

15

85 86

Prioridade dos Operadores Prioridade dos Operadores


• Parênteses podem ser usados para alterar a • Parênteses podem ser usados para alterar a
prioridade nas operações prioridade nas operações
• Operações entre parênteses são processadas em • Operações entre parênteses são processadas em
primeiro lugar primeiro lugar
(8 + 7) * (3 + 4) * 5 (8 + 7) * (3 + 4) * 5

15 7 15 7

105

87 88

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 em adição e subtração
primeiro lugar • Operadores da mesma classe têm a mesma prioridade
32
• Note ordem da aplicação da exponenciação: 2 ^ 3^ 2 2 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)
105 4 Sinal dos operandos (menos e mais unários aplicados da direita para a
-, +
esquerda)
5 *, %, / Multiplicação, módulo e divisão (aplicadas da esquerda para a direita)
525 6 +, - Adição e subtração (aplicadas da esquerda para a direita)
89 90

15
Funções Embutidas Funções Embutidas
Função Significado
• Funções embutidas são rotinas pré-escritas,
abs(x) Valor absoluto de x
fornecidas pelos projetistas da linguagem de sqrt(x) Raíz quadrada de x
programação ln(x) Logaritmo base e (logaritmo neperiano ou natural)
• O conjunto de funções embutidas pode variar log10(x) Logaritmo base 10

para cada linguagem de programação exp(x) Exponencial, o resultado é ex


sin(x) Seno de x
• Por exemplo, a função sqrt denomina a
cos(x) Co-seno de x
operação de raiz quadrada tan(x) Tangente de x
hipotenusa sqrt(lado1 ^ 2 + lado2 ^ 2) trunc(x) Valor truncado: resultado é o maior inteiro <= |x|
round(x) Valor arredondado: resultado é o maior inteiro <= |x+0.5|

91 92

Funções Embutidas em C/C++ Exercício


• C: #include <math.h> • Escreva as seguintes expressões matemáticas
• C++: #include <cmath> como expressões de computador, evitando, quando
Função Significado
possível, o uso de parênteses:
abs(x) Valor absoluto de x
sqrt(x) Raíz quadrada de x b
log(x) Logaritmo base e (logaritmo neperiano ou natural) a
log10(x) Logaritmo base 10 a a b sen(c)
exp(x) Exponencial, o resultado é ex
sin(x) Seno de x; x em radianos bc c d d e
cos(x) Co-seno de x; x em radianos
tan(x) Tangente de x; x em radianos
floor(x) Valor truncado para o maior inteiro menor ou igual a x
ceil(x) Valor arredondado para o menor inteiro menor ou igual a x
pow(x,y) x elevado a y: xy
93 94

Solução Exercício
• Escreva as seguintes expressões matemáticas • Assuma que A, B e C sejam variáveis reais
como expressões de computador, evitando, quando com valores e que I, J e K sejam variáveis
possível, o uso de parênteses: inteiras. Dados A = 2.0, B = 3.0 e I = 3,
b indique o valor final dos comandos
a seguintes:
a a b sen(c) C A*B–I C = _______
bc c d J I/4*6 J = _______
d e
C B / A + 2.5 C = _______
a/b/c (a+abs(b))/(c+d) (a+b/sin(c))/(d-sqrt(e))
K I / 2 + 4.7 K = _______
ou
J I/A+B J = _______
a/(b*c)
95 96

16
Solução Exercício
• Assuma que A, B e C sejam variáveis reais • Dada a equação algébrica y = ax3 + 7,
com valores e que I, J e K sejam variáveis quais dos seguintes comandos
inteiras. Dados A = 2.0, B = 3.0 e I = 3, representam corretamente a equação?
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)

97 98

Solução Entrada e Saída


• Dada a equação algébrica y = ax3 + 7, quais dos • Leia(lista de variáveis)
seguintes comandos representam corretamente a Permite ler valores, atribuindo-os à variáveis
equação? indicadas
a) y a*x*x*x+7 A entrada pode vir do teclado, de um arquivo, do
b) y a * x * x * (x + 7) 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
99 100

Entrada e Saída Entrada e Saída


• Leia(lista de variáveis) • Escreva(lista de saída)
A lista de entrada fornece os nomes das A lista de saída fornece as expressões (incluídas
variáveis às quais os valores lidos devem ser variáveis e constantes) que devem ser impressas
atribuídos na mesma ordem em que são Ex:
encontrados no fluxo de entrada A 2
Ex: Leia(A,B,C) B 3
Os próximos três valores lidos serão atribuídos Escreva(A,” multiplicado por ”,B,” = “,A*B)
às variáveis A, B e C: o primeiro valor para A, o Saída impressa:
segundo valor para B e o terceiro valor para C 2 multiplicado por 3 = 6

101 102

17
Entrada e Saída em C++ Exemplo 1
#include <iostream>
• #include <iostream>
using namespace std;
• Leia(A,B,C)
cin >> A >> B >> C; int main()
{ int a;
• Escreva(A,B,C)
cout << A << B << C; cout << ”Entre um valor: ”;
cout << A << B << C << endl; cin >> a;
cout << ”Valor digitado = ” << a << endl;
• São equivalentes: return 0;
cout << A << “\n”; }
cout << A << endl;
104 105

Exemplo 2 Exemplo 3
#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;
}

106 107

Comentários Comentários em C/C++


• Comentários são textos que podem ser • Os comentários podem ocupar uma ou várias
inseridos nos programas com o objetivo de 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 parte linha, o símbolo // é utilizado e encerra
do código executável automaticamente no final da linha

108 109

18
Exercício em C++ Solução em C++
• Indique, quando aplicável, o que cada um dos comandos • Indique, quando aplicável, o que cada um dos comandos imprime. Se nada é
impresso, então responda "nada". Assuma x = 2 e y = 3
imprime. Se nada é impresso, então responda "nada". a) cout << x; 2
Assuma x = 2 e y = 3 b) cout << x + x; 4
a) cout << x; c) cout << "x ="; x=
b) cout << x + x; d) cout << "x = “ << x; x=2
e) cout << x + y << “ = ” << y + x; 5=5
c) cout << "x ="; f) z = x + y; (nada)
d) cout << "x = “ << x; g) cout << “”; (imprime nulo)
e) cout << x+y << “ = ” << y + x; h) /* cout << "x + y = " << x + y; */ (nada)
i) cout << "\n"; (pula 1 linha)
f) z = x + y; j) cout << "*\n**\n***\n****\n*****\n"; *
g) cout << “”; **
h) /* cout << "x + y = " << x + y; */ ***
****
i) cout << "\n"; *****
j) cout << "*\n**\n***\n****\n*****\n";

112 113

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).

imprima a equivalente em Fahrenheit (oF). Início


A fórmula de conversão é F 9 C 32 declare C,F : real
5
2. As raízes de uma equação quadrática da Escreva(”Temperatura em graus Celsius?”)
2
forma ax +bx+c=0 são reais se e somente Leia(C)
F 9.0 / 5.0 * C + 32
se o discriminante dado por b2-4ac for Escreva(”Temperatura em graus Fahrenheit = ”,F)
maior ou igual a zero. Preparar um Fim

algoritmo para ler os valores dos


coeficientes a, b e c e imprimir o valor do
discriminante.
114 115

Solução Exercício 1 em C++ Solução Exercício 2


#include <iostream> Algoritmo Discriminante. Este algoritmo lê os
using namespace std; coeficientes da equação quadrática da forma
/* Algoritmo Conversão. Este algoritmo lê uma a*x^2+b*x+c=0, calcula e imprime o valor do
temperatura na escala Celsius (oC) e imprime a discriminante dado por b^2-4*a*c.
equivalente em Fahrenheit (oF).
*/ Início
int main() declare a,b,c,delta : real
{ float C, F;
Escreva(”Coeficientes a,b,c da equação ax2+bx+c=0?”)
cout << ”Temperatura em graus Celsius?”; Leia(a,b,c)
cin >> C; delta b^2 – 4 * a * c
F = 9.0 / 5.0 * C + 32; Escreva(”Discriminante = ”,delta)
cout << ”\nTemperatura em graus Fahrenheit = ” Fim
<< F << endl;
return 0;
}

117 118

19
Solução Exercício 2 em C++ Resumo
#include <iostream>
using namespace std; • Nesta aula foram vistos alguns conceitos
/* Algoritmo Discriminante. Este algoritmo lê os coeficientes
da equação quadrática da forma a*x^2+b*x+c=0, calcula e
básicos sobre programação de
*/
imprime o valor do discriminante dado por b^2-4*a*c. computadores: tipos de dados, expressões,
comando de atribuição, entrada e saída de
int main()
{ float a,b,c,delta;
dados
cout << ”Coeficientes a,b,c da equação ax2+bx+c=0?”;
• Esses conceitos permitem escrever
cin >> a >> b >> c; programas simples
delta = b * b – 4 * a * c;
cout << ”\nDiscriminante = ” << delta << endl; • Programas mais complexos requerem
return 0;
}
estruturas de controle mais complexas, que
serão vistas nas próximas aulas
120 121

20

Você também pode gostar