Você está na página 1de 25

Conceitos Básicos

Sistema Computacional

‰Componentes Físicos: dispositivos


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

José Augusto Baranauskas E-mail: augusto@ffclrp.usp.br


Departamento de Física e Matemática – FFCLRP-USP URL: http://www.fmrp.usp.br/augusto
Sala 222 – Bloco P2 – Fone (16) 3602-4361
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
ƒ Assegura que recursos de software sejam fornecidos quando Sistema Operacional
exigidos
ƒ Cria um ambiente onde os usuários podem preparar e executar
seus programas sem se preocuparem com detalhes de hardware
ƒ Diversos usuários pode usar simultaneamente o sistema; Hardware
ƒ É função do sistema operacional coordenar o compartilhamento
dos recursos exigidos pelos usuários

3 4

Sistemas de Numeração Sistemas de Numeração


‰Há duas formas básicas de armazenamento de ‰ Assim como o sistema de numeração decimal (base 10),
o sistema binário (base 2) é um sistema posicional
dados ‰ Isto significa que o valor de um dígito é dados pela sua
ƒ Analógica: os dados assumem valores contínuos posição no número
ƒ Exemplo: músicas transmitidas por uma estação de ‰ No sistema decimal, o número 3453 tem a seguinte
interpretação
rádio, músicas armazenadas em discos de vinil ƒ 3 x 1000 (103) = 3000
ƒ Digital: os dados assumem (poucos) valores discretos ƒ + 4 x 100 (102) = 400
ƒ + 5 x 10 (101) = 50
ƒ Exemplo: músicas em CD ƒ + 3 x 1 (100) = 3
‰Os computadores atuais utilizam o sistema de ƒ -----
ƒ 3453
numeração binário (base 2) para armazenar e
‰ Note que o dígito 3 tem diferentes interpretações em suas
processar dados duas ocorrências dentro do número

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

Componentes de um Unidade Central de


Computador Processamento
UCP (ou CPU)
‰A CPU é o "cérebro" do computador;
Unidade
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,
Dispositivo
Dispositivo Armazenamento de Saída
transfere dados da memória principal para a
de Entrada secundária e vice-versa, envia resultados para
os dispositivos de saída
9 10

Memória Principal Memória Principal


‰ Os programas em execução devem residir juntamente ‰Em terminologia de memória, diz-se que
com os dados necessários na memória principal
‰ É mais cara (que memória secundária) mas mais rápida
qualquer dispositivo capaz de armazenar
‰ A memória principal é dividida em unidades pequenas e
um dígito binário (apenas dois estados
de mesmo tamanho, chamadas palavras, sendo que possíveis) define um bit de informação
cada palavra de memória tem um único endereço ƒ bit = binary digit = dígito binário
‰ Cada palavra é capaz de armazenar essencialmente uma
única informação, por exemplo, o resultado de uma ‰Por definição 1 byte = 8 bits
operação numérica ‰O tamanho das palavras é normalmente
‰ O tamanho da palavra de memória (número de bits) expresso em bits
determina o maior e o menor número que pode ser
armazenado ƒ palavras de 8 bits (1 byte), 16 bits (2 bytes), 32
bits (4 bytes), ...
11 12

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

Memória Principal Tamanho de Memória


Endereços Acionamento de chaves Dígitos binários Valores decimais
Equivalentes Equivalentes ‰ O tamanho de memória é expresso em número de bytes e
0
1 seus múltiplos
Palavra
0
1
‰ Em computação, os prefixos K (quilo), M (mega), G (giga),
0 91 T (tera), P (peta), E (exa), Z (zeta), Y (yota) ... são
1
(8 bits) 0
1
múltiplos de 1024 (210) e não de 1000 (103)
1 ƒ 1 Kbyte = 1024 bytes ≅ 103 bytes
0
1 ƒ 1 Mbyte = 1024 Kbytes = 10242 bytes
1 = 1.048.576 bytes ≅ 106 bytes
1
0 110 ƒ 1 Gbyte = 1024 Mbytes = 10243 bytes
1
1 = 1.073.741.824 bytes ≅ 109 bytes
1 ƒ 1 Tbyte = 1024 Gbytes = 10244 bytes
0
0
= 1.099.511.627.776 bytes ≅ 1012 bytes
0 ƒ 1 Pbyte = 1024 Tbytes = 10245 bytes
0 = 1.125.899.906.842.624 bytes ≅ 1015 bytes
2
0 1 ƒ ...
0
0
0
1
15 16

Memória Secundária, Auxiliar ou


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

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

ƒ Os principais dispositivos de entrada são teclado, ‰ Linguagem de Montagem


ƒ Mnemônicos são utilizados para representar as instruções
mouse, leitora de código de barras, scanner, microfone
ƒ Exemplo:
ƒ O principal dispositivo de saída é o Monitor. Além do ™ Mnemônico operando significado
monitor existe a impressora, caixas de som, plotters ™ LOAD 10 carrega 10 no acumulador
™ ADD 5 soma 5 ao conteúdo do
ƒ Existem também dispositivos de entrada e saída ao acumulador
mesmo tempo, como os Fax-Modem, que recebem e ƒ Programas montadores são utilizados para traduzir um programa
transmitem dados escrito em linguagem de montagem para linguagem de máquina

19 20

Linguagens de Programação Ambiente de Programação


O código-fonte é criado no editor e
Editor armazenado em disco
‰Linguagem de Alto Nível
Pré-processador processa o
ƒ A linguagem utilizada é mais próxima da Disco Pré-processador código-fonte

linguagem humana (e não da máquina) Compilador gera código-objeto e


Compilador armazena-o em disco
ƒ Exemplo: if (delta > 0) x = a/delta;
Linker liga o código-objeto com as
ƒ Programas compiladores são utilizados para Link Editor bibliotecas, cria código-executável e
armazena-o em disco
traduzir um programa escrito em linguagem de
Loader carrega o código-executável
alto nível (código-fonte) para código-objeto; o na memória principal
Loader
código-objeto então é link-editado com CPU executa cada instrução,
bibliotecas para produzir o programa em .
.
possivelmente armazenando novos
dados à medida que o programa é
linguagem de máquina
.

CPU executado
Memória
Principal
21 22

Ambiente de Programação Ambiente de Programação


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

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

Algoritmo Algoritmo: Exemplos


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

5
Algoritmo: Exemplos Algoritmo: Trocar uma Lâmpada

‰Suponha, entretanto, que os mesmos 1. Remova a lâmpada queimada


passos sema executados em uma ordem 2. Coloque a nova lâmpada
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

31 32

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 que se solte
ser 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

33 34

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
2. Coloque a nova lâmpada solte
• Posicione a nova lâmpada no soquete 2. Coloque a nova lâmpada
• Gire-a no sentido horário até que ela se firme • Posicione a nova lâmpada no soquete
• Desça da escada • Gire-a no sentido horário até que ela se firme
• Desça da escada
35 36

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

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

‰Esse processo de aumentar o ‰Pseudo-código (ou português estruturado)


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

Representação de Algoritmos Pseudo-código (PS)


‰Independentemente da representação utilizada, ‰É uma linguagem artificial que auxilia os
todo algoritmo pode ser escrito por meio do uso
de três estruturas básicas de controle: programadores no desenvolvimento de
ƒ seqüência: um comando é executado após o algoritmos
comando anterior
ƒ seleção: comandos alternativos são executados ‰É similar ao português; é conveniente e
dependendo do valor de uma condição (que assume
valor ou verdadeiro ou falso) e amigável, embora não seja uma linguagem
ƒ repetição: uma seqüência de comandos é executada de programação de computadores
zero, uma ou mais vezes
™dependendo de um número pré-estabelecido de repetições
(laço contado)
™o laço é repetido enquanto uma condição é verdadeira (laço
condicional)

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

Fluxograma: Principais Símbolos Fluxograma: Exemplo 1


‰ Indica o início e o fim do algoritmo ‰Faça um algoritmo para Início
‰ Indica o sentido do fluxo de dados e mostrar o resultado da
é utilizado para conectar os demais multiplicação de dois números “Digite dois
símbolos entre si números”
‰Algoritmo em pseudo-código
‰ Cálculos e atribuições de valores
Algoritmo Multiplicar N1, N2
Início
‰ Entrada de dados declare N1, N2, M : inteiro
M Å N1*N2

Escreva(”Digite dois números”)


‰ Saída de dados Leia(N1,N2) M
M Å N1 * N2
‰ Tomada de decisão, com Escreva(M)
possibilidade de desvios Fim Fim

45 46

Fluxograma: Exemplo 2 Questão


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

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)

“Reprovado” “Aprovado” ‰Laço com teste no final (repita ...


enquanto)
Fim
49 50

Diagrama NS: Exemplo 1 Diagrama NS: Exemplo 2


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

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)

de um aluno e mostrar a V M<5


F
média e a situação do aluno,
Escreva(”Reprovado”) Escreva(”Aprovado”)
que pode ser aprovado ou
reprovado
‰Você tem 5 minutos para
escrever o algoritmo
53 54

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

Tipos de Dados Tipos de Dados C/C++


‰Numérico ‰ Inteiro
ƒ Inteiro (3, 7, -6, 7829) ƒ enum, unsigned int, short int, int, unsigned long, long
ƒ Real (23.8, 3.683, -6281.232, 2.71e15) ‰ Real
™O ponto (e não a vírgula) é utilizado como separador decimal ƒ float, double, long double
™2.71e15 significa 2.71 x 1015 ‰ Caractere
‰Caractere: um único caractere (’a’, ’2’, ’X’) ƒ char, unsigned char
ƒ Apóstrofos ’ são usados como delimitadores ‰ Cadeia de caracteres ou string
‰Cadeia de caracteres ou string (“abc”, ƒ char [] (C/C++)
”ana paula”, ”3 + 4 = 7”) ƒ string (C++)
ƒ Aspas ” são usadas como delimitadores ‰ Lógico ou booleano
‰Lógico ou booleano (verdadeiro/falso; true/false) ƒ bool (C++)
ƒ Em C é necessário definir: enum bool {false, true};
‰Ponteiro
‰ Ponteiro
57 58

Tipos de Dados C/C++ Exercício


A quantidade de bytes e intervalos podem variar de compilador para compilador
Indique o tipo de cada uma das seguintes constantes
Dígitos de
Tipo de Dado Bytes Intervalo de Valores
Precisão ‰ 10
enum 2 -32 768 até 32 767 5 ‰ 10.0
unsigned int 2 0 até 65 535 5
‰ –10
short int 2 -32 768 até 32 767 5
int 2 -32 768 até 32 767 5
‰ “10”
unsigned long 4 0 até 4 294 967 295 10 ‰ 6.02e23
long 4 -2 147 483 648 até 2 147 483 647 10 ‰ “2 + 3 = 5”
float 4 ±3.4e±38 7 ‰ –2e-5
double 8 ±1.7e±308 15
‰ “3e-5”
long double 10 ±1.2e±4932 19
char 1 ‘a’,’b’,...,’z’,’A’,’B’,...,’Z’,’0’,’1’,...,’9’,... -
‰ 0.1234
bool 1 false, true - ‰ “fim de questão”
ponteiro 4 - - ‰ true
59 60

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

Operações Primitivas C/C++ Operações Primitivas C/C++


‰Adição: 2 + 3 + 4 ‰Além dos operadores aritméticos convencionais,
‰Subtração: 10 – 4 – 1 existem outros operadores ou funções
‰Multiplicação: 2 * 3 * 4 embutidas:
‰Divisão: 10.0 / 4 ‰Resto da divisão
ƒ Em C/C++: representado por %
‰Exponenciação: pow(3,2)
ƒ Ex: 9 % 4 resulta em 1; 27 % 5 resulta em 2
ƒ Em C/C++ não existe o operador ^
‰Raiz quadrada
ƒ Ele pode ser substituído pela função embutida
pow(x,y) ƒ Em C/C++: representado por sqrt(expressão)
ƒ pow(3,2) é equivalente a 3^2 ƒ Ex: sqrt(16) resulta em 4; sqrt(25) resulta em 5;
sqrt(25 + 11) resulta em 6

63 64

Funções Embutidas Algumas Funções Embutidas C/C++


x floor(x) ceil(x)
‰ C: #include <math.h>
‰Funções embutidas são rotinas pré- ‰ C++: #include <cmath>
2.00 2.00 2.00

escritas, fornecidas pelos projetistas da Função Significado


2.15
2.30
2.00
2.00
3.00
3.00

linguagem de programação abs(x) Valor absoluto de x 2.45 2.00 3.00


sqrt(x) Raíz quadrada de x 2.60 2.00 3.00
‰O conjunto de funções embutidas pode log(x) Logaritmo base e (logaritmo neperiano ou natural) 2.75 2.00 3.00

variar para cada linguagem de log10(x) Logaritmo base 10


2.90
3.05
2.00
3.00
3.00
4.00
exp(x) Exponencial, o resultado é ex
programação sin(x) Seno de x; x em radianos
3.20 3.00 4.00
3.35 3.00 4.00

‰Por exemplo, a função sqrt denomina a cos(x)


tan(x)
Co-seno de x; x em radianos
Tangente de x; x em radianos
3.50 3.00 4.00
3.65 3.00 4.00
operação de raiz quadrada floor(x) Valor truncado para o maior inteiro menor ou igual a x 3.80 3.00 4.00
ceil(x) Valor arredondado para o menor inteiro maior ou igual a x 3.95 3.00 4.00
pow(x,y) x elevado a y: xy 4.10 4.00 5.00

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

Operações Primitivas Exercício


‰ Indique o resultado e o tipo de cada uma das seguintes
‰Para solucionar esta questão, é necessário expressões:
transformar um dos operando em real a) 1+4–2
b) 2+3*4
1 .0 1 c) 3 * 4.0 - 2
× 10 ou × 10 d) 3 * 4 - 2.0
10 10.0 e) 29.0 / 9 + 4
f) 1/4+2
g) 1.0 / 4 + 2
h) 1 / 4.0 + 2
i) 1 / 4 + 2.0
j) 5 ^ 10 + 2
k) 3.0 ^ 5.0 + 1

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

Variável Variável C/C++


Algoritmo DeclaraVariaveis
Início ‰Toda variável deve ser declarada antes de
// declaração da variável “a” inteira ser utilizada
declare a : inteiro
‰Há diferença entre letras minúsculas de
// declaração das variáveis “b” e “c” inteiras
declare b,c : inteiro maiúsculas
// declaração das variável inteira “Quantidade”
ƒ Em C/C++ a variável X é diferente da variável
declare Quantidade : inteiro x, ou seja, X representa uma variável e x
representa outra variável que é distinta de X
// declaração de 5 variáveis reais
declare X,Y,Z,Hipotenusa,A : real
Fim

76 77

Exemplo C++ Operação de Atribuição


#include <iostream>
using namespace std; ‰É a forma de especificar que a uma variável será
dado um valor
int main()
{ // declaração da variável “a” inteira ‰O comando de atribuição é indicado pelo símbolo
int a;
Å cuja forma geral é:
// declaração das variáveis “b” e “c” inteiras ƒ <variável> Å <expressão>
int b,c;
‰O operador Å separa os componentes em dois
// declaração das variável inteira “Quantidade”
int Quantidade; lados: esquerdo e direito
ƒ O lado esquerdo (do operador Å) deve ser sempre
// declaração de 5 variáveis reais
float X,Y,Z,Hipotenusa,A; uma variável
ƒ O lado direito (do operador Å) é uma expressão
return 0;
}
78 79

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

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 3

82 83

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


‰O comando ‰Assim, a atribuição é uma operação
ƒ AÅ3 destrutiva
ƒ Indica que à variável A é atribuído o valor 3
‰Se a seqüência de atribuições for
‰A variável A pode ser vista como uma palavra na
executada:
memória do computador
ƒ A Å 10
‰Após a execução do comando de atribuição, a
variável de nome A conterá o número 3 ƒ A Å -2
‰Desde que a memória só pode conter um único ƒAÅ1
valor por vez, o número 3 substitui qualquer valor ‰Qual o valor da variável A no final?
que a variável possuía anteriormente

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

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


‰Assim, a atribuição é ‰ Assim, a atribuição é uma
uma operação operação destrutiva
destrutiva Memória ‰ Se a seqüência de Memória

‰Se a seqüência de Endereço Valor atribuições for executada: Endereço Valor


A 1 ƒ A Å 10 A 1
atribuições for
executada: ƒ A Å -2
ƒ AÅ1
ƒ A Å 10
ƒ A Å -2 ‰ Qual o valor da variável A
no final?
ƒ AÅ1
ƒ O valor da variável A após
‰Qual o valor da as três operações é 1
variável A no final? ƒ Os valores 10 e –2 foram
destruídos
88 89

Operação de Atribuição C/C++ Exemplo 1


‰Em C/C++, o operador de atribuição é o símbolo Algoritmo Exemplo1
=
‰A linguagem permite atribuições sucessivas. Por
Início
exemplo, o comando declare a,b : inteiro
ƒ a = b = c = 15;
™atribui o valor 15 às variáveis a, b e c
‰A linguagem também permite declarar e atribuir a Å 3
um valor inicial simultaneamente
ƒ int x = 0;
b Å 4
™declara variável x inteira e atribui o valor 0 à x Escreva(”a = ”,a)
ƒ float a,b=2;
™declara variáveis a e b reais e atribui valor 2 somente à Escreva(”b = ”,b) a=3
b=4
variável b (a variável a possui um valor indefinido ou “lixo”)
Fim
90 91

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

Exemplo 3 C++ Alterando um Valor Armazenado


#include <iostream> ‰ Suponha que X seja uma
using namespace std; variável inteira e que
temos um valor Memória
int main() armazenado nela
Endereço Valor
{ int a,b,x; ‰ Se um novo valor for
X
atribuído a X ele
a = 3; substituirá o valor anterior
A
b = 4; ‰ Seja A uma variável
x = a * b; inteira e considere os
cout << ”a = ” << a << endl; seguintes comandos:
ƒ XÅ0
cout << ”b = ” << b << endl; a=3
b=4
ƒ AÅ0
cout << ”a*b = ” << x << endl;
a*b = 12 ƒ XÅA+1
return 0;
}
100 101

Alterando um Valor Armazenado Alterando um Valor Armazenado


‰ Suponha que X seja uma ‰ Suponha que X seja uma
variável inteira e que variável inteira e que
temos um valor Memória temos um valor Memória
armazenado nela armazenado nela
Endereço Valor Endereço Valor
‰ Se um novo valor for ‰ Se um novo valor for
X 0 X 0
atribuído a X ele atribuído a X ele
substituirá o valor anterior substituirá o valor anterior
A A 0
‰ Seja A uma variável ‰ Seja A uma variável
inteira e considere os inteira e considere os
seguintes comandos: seguintes comandos:
ƒ XÅ0 ƒ XÅ0
ƒ AÅ0 ƒ AÅ0
ƒ XÅA+1 ƒ XÅA+1

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

Alterando um Valor Armazenado Alterando um Valor Armazenado


‰Suponha que ‰Suponha que
tivéssemos escrito tivéssemos escrito
Memória Memória
ƒ XÅ0 ƒ XÅ0
Endereço Valor Endereço Valor
ƒ XÅX+1 X
ƒ XÅX+1 X 0

106 107

Alterando um Valor Armazenado Alterando um Valor Armazenado


‰Suponha que ‰ Suponha que tivéssemos escrito
tivéssemos escrito ƒ XÅ0
Memória ƒ XÅX+1
ƒ XÅ0
Endereço Valor ‰ X recebe o valor zero no primeiro comando
ƒ XÅX+1 X 1 ‰ No segundo comando, a variável X recebe o valor da
variável X adicionado em uma unidade
‰ Assim, X Å X + 1 também é lido como “tome o valor atual
da variável X (que é zero), adicione 1 a ele e atribua o
resultado à variável X”
‰ Após o segundo comando, X tem o valor 1
‰ Modificamos o valor da variável X adicionando 1 a ela

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

Alterando um Valor Armazenado


Exemplo 4
C/C++
‰ A linguagem permite que o
comando
Pseudo-Código C/C++ Algoritmo Exemplo4
X = X + a;
ƒ X=X+1
XÅX+a Início
‰ também seja representando X += a;
como
X = X - a;
declare a : inteiro
ƒ X += 1 XÅX-a
‰ ou como (forma mais comum) X -= a;
ƒ X++ X = X * a; a Å 3
‰ Em geral, o comando XÅX*a
ƒ X=X+a X *= a; Escreva(”a antes = ”,a)
‰ também pode ser representado X = X / a;
como XÅX/a a Å a + 1
ƒ X += a X /= a;
‰ Analogamente para as demais X = X % a;
Escreva(”a depois = ”,a) a antes = 3
a depois = 4
operações primitivas XÅX%a
X %= a; Fim
112 113

Exemplo 4 C++ Exemplo 4 C++


#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; 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

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

118 119

Prioridade dos Operadores Prioridade dos Operadores


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

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

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 ‰Operações entre parênteses são processadas
em primeiro lugar em primeiro lugar
(8 + 7) * (3 + 4) * 5 (8 + 7) * (3 + 4) * 5

15

124 125

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 ‰Operações entre parênteses são processadas
em primeiro lugar em primeiro lugar
(8 + 7) * (3 + 4) * 5 (8 + 7) * (3 + 4) * 5

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)

6 +, - Adição e subtração (aplicadas da esquerda para a direita)


525
128 129

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

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
variáveis às quais os valores lidos devem ser (incluídas variáveis e constantes) que devem
atribuídos na mesma ordem em que são ser impressas
encontrados no fluxo de entrada ƒ Ex:
ƒ Ex: Leia(A,B,C) AÅ2
Os próximos três valores lidos serão atribuídos BÅ3
às variáveis A, B e C: o primeiro valor para A, o Escreva(A,” multiplicado por ”,B,” = “,A*B)
segundo valor para B e o terceiro valor para C ƒ Saída impressa:
2 multiplicado por 3 = 6
136 137

Entrada e Saída em C++ Exemplo 5


‰#include <iostream> #include <iostream>
using namespace std;
‰using namespace std;
‰Leia(A,B,C) int main()
ƒ cin >> A >> B >> C; { int a;
‰Escreva(A,B,C)
ƒ cout << A << B << C; cout << ”Entre um valor: ”;
cin >> a;
ƒ cout << A << B << C << endl;
cout << ”Valor digitado = ” << a << endl;
‰São equivalentes: return 0;
ƒ cout << A << “\n”; }
ƒ cout << A << endl;
139 140

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 Comentários em C/C++

‰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

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


‰ Indique, quando aplicável, o que cada um dos ‰ Indique, quando aplicável, o que cada um dos comandos imprime. Se nada
é impresso, então responda "nada". Assuma x = 2 e y = 3
comandos imprime. Se nada é impresso, então a) cout << x; 2
responda "nada". 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 << “”; (string vazia)
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";

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

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?”)
forma ax2+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.
149 150

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;
}

152 153

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
básicos sobre programação de
a*x^2+b*x+c=0, calcula e 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() dados
{ float a,b,c,delta;
‰Esses conceitos permitem escrever
cout << ”Coeficientes a,b,c da equação ax2+bx+c=0?”; programas simples
cin >> a >> b >> c;
delta = b * b – 4 * a * c; ‰Programas mais complexos requerem
cout << ”\nDiscriminante = ” << delta << endl;
return 0; estruturas de controle mais complexas, que
} serão vistas nas próximas aulas
155 156

25

Você também pode gostar