Sei sulla pagina 1di 147

UNIVERSIDADE FEDERAL DO MARANHÃO – UFMA

COORDENAÇÃO DE ENGENHARIA DE ALIMENTOS


DISCIPLINA: INTRODUÇÃO A CIENCIA DA COMPUTAÇÃO
PROF. DR. DANIEL DUARTE COSTA

APOSTILA DE INTRODUÇÃO A CIÊNCIA DA COMPUTAÇÃO


(COEA0073)

IMPERATRIZ – MA
2014
Sumário
1. Sobre a disciplina .......................................................................................................... 10
1.1. Sobre o professor ................................................................................................... 10
1.2. Plano de Ensino ..................................................................................................... 10
2. Introdução a Ciência da Computação .......................................................................... 13
2.1. Computadores ........................................................................................................ 14
2.1.1. Hardware ....................................................................................................... 14
2.1.2. Software ......................................................................................................... 32
2.2. Smartphones .......................................................................................................... 38
2.3. Necessidade Social e o Uso de Computadores ....................................................... 40
2.4. Sistema Computacional ......................................................................................... 40
2.5. Questões de Revisão ............................................................................................... 41
3. Álgebra Booleana .......................................................................................................... 42
3.1. Logica Binária ....................................................................................................... 43
3.1.1. Conversões Binário – Decimal ....................................................................... 44
3.1.2. Conversões Decimal – Binário ....................................................................... 44
3.1.3. Faixa de contagem.......................................................................................... 45
3.2. Sistema de Numeração Octal ................................................................................. 45
3.2.1. Conversão Octal – Decimal ............................................................................ 45
3.2.2. Conversão Decimal – Octal ............................................................................ 45
3.2.3. Conversão Octal - Binário ............................................................................. 46
3.2.4. Conversão Binário – Octal ............................................................................. 46
3.2.5. Contando em Octal ........................................................................................ 46
3.2.6. Utilidade do Sistema Octal............................................................................. 47
3.3. Sistema de Numeração Hexadecimal .................................................................... 47
3.3.1. Conversão Hexadecimal – Decimal ............................................................... 47
3.3.2. Conversão Decimal – Hexadecimal ............................................................... 48
3.3.3. Conversão Hexadecimal – Binário ................................................................ 48
3.3.4. Conversão Binário – Hexadecimal ................................................................ 49
3.3.5. Contando em Hexadecimal ............................................................................ 49
3.4. Códigos Alfanuméricos .......................................................................................... 49
3.5. Tabelas – Verdade ................................................................................................. 52
3.5.1. Operador OR (OU) ........................................................................................ 52
3.5.2. Operador AND (E) ......................................................................................... 53
3.5.3. Operador NOT (NÃO) ................................................................................... 53
3.5.4. Teoremas da Álgebra Booleana ..................................................................... 53
3.6. Questões de Revisão ............................................................................................... 55
4. Lógica de Programação................................................................................................. 56
4.1. Formas de Representação Gráfica ........................................................................ 56
4.2. Princípios de Resolução de Problemas .................................................................. 57
4.3. Português Estruturado .......................................................................................... 60
4.4. Conceito de Variável .............................................................................................. 60
4.4.1. Tipo de dados ................................................................................................. 61
4.5. O Uso de Variáveis................................................................................................. 61
4.6. Operadores Aritméticos ........................................................................................ 62
4.7. As Expressões Aritméticas..................................................................................... 63
4.8. Entrada e Saída de Dados...................................................................................... 63
4.9. VisuAlg ................................................................................................................... 66
5. Estrutura de Controle – Tomada de Decisões .............................................................. 71
5.1. Operadores Relacionais ......................................................................................... 73
5.2. Desvio Condicional Composto ............................................................................... 73
5.3. Desvios Condicionais Encadeados ......................................................................... 76
5.4. Operadores Lógicos ............................................................................................... 78
5.5. Exercícios ............................................................................................................... 79
6. Estruturas de Controle – Laços ou Malhas de Repetição ............................................ 83
6.2. Repetição do Tipo: Variável de Controle .............................................................. 89
6.3. Estrutura de Controle Encadeadas ....................................................................... 91
6.3.1. Encadeamento de Estruturas Enquanto com Enquanto ............................... 91
6.3.2. Estrutura Enquanto com Para ...................................................................... 92
6.3.3. Encadeamento de Estrutura Para com Para ................................................. 93
6.3.4. Encadeamento de Estrutura Para com Enquanto ........................................ 94
6.4. Exercícios ............................................................................................................... 97
7. Linguagem de Programação ......................................................................................... 99
7.1. Linguagem C/C++ ................................................................................................. 99
7.2. Compilador de C.................................................................................................. 100
7.3. Estrutura Sequencial em C/C++ ......................................................................... 102
7.3.1. Declaração de variáveis................................................................................ 103
7.3.2. Comando de atribuição ................................................................................ 104
7.3.3. Comandos de entrada em C/C++................................................................. 104
7.3.4. Comando de Saída em C/C++ ...................................................................... 106
7.3.6. Operadores e funções predefinidas em C/C++ ............................................ 110
7.4. Exercícios ............................................................................................................. 112
8. Estrutura Condicional................................................................................................. 113
8.1. Estrutura Condicional Simples ........................................................................... 113
8.2. Estrutura Condicional Composta ....................................................................... 113
8.3. Operadores Lógicos ............................................................................................. 114
8.4. Exercícios ............................................................................................................. 114
9. Estrutura de Repetição. .............................................................................................. 116
9.1. Estrutura de Repetição For ................................................................................. 116
9.2. Estrutura de Repetição While.............................................................................. 117
9.3. Exercícios ............................................................................................................. 117
10. Estrutura de Dados Homogêneas ............................................................................ 119
10.1. Matrizes de uma Dimensão ou Vetores ........................................................... 119
10.2. Operações Básicas com Matrizes do Tipo Vetor ............................................. 120
10.2.1. Atribuição de uma Matriz ........................................................................... 120
10.2.2. Leitura dos Dados de uma Matriz ............................................................... 120
10.2.3. Escrita dos Dados de uma Matriz ................................................................ 122
10.3. Exercício de Aprendizagem ............................................................................. 124
10.4. Vetor em C/C++ ............................................................................................... 128
10.4.1. Declaração de Vetor ..................................................................................... 128
10.4.2. Atribuindo Valores ao Vetor ....................................................................... 128
10.4.3. Carregando um Vetor .................................................................................. 128
10.4.4. Imprimindo um Vetor .................................................................................. 128
10.4.5. Exercícios ..................................................................................................... 129
11. Estruturas de Dados Homogêneas II ...................................................................... 130
11.1. Matrizes com Mais de uma Dimensão ............................................................. 130
11.2. Operações Básicas com Matrizes de Duas Dimensões .................................... 130
11.2.1. Atribuição de uma Matriz ........................................................................... 131
11.2.2. Leitura dos Dados de uma Matriz ............................................................... 131
11.3. Exercício de Aprendizagem ............................................................................. 134
11.4. Matriz em C/C++ ............................................................................................. 143
11.4.1. Declaração de Matriz ................................................................................... 143
11.4.2. Atribuindo Valores à Matriz ....................................................................... 144
11.4.3. Carregando uma Matriz .............................................................................. 144
11.4.4. Mostrando os Elementos de uma Matriz ..................................................... 144
11.5. Exercícios ......................................................................................................... 145
12. Referências Bibliográficas ....................................................................................... 147
Lista de Figuras
Figura 1: Periféricos de Entradas. (a) Teclado. (b) Mouse. (c) Webcam. .................................. 15
Figura 2: Periféricos de Saída. (a) Monitor. (b) Impressora 3D. (c) Impressora 2D. ................. 15
Figura 3: Placa Mãe. ............................................................................................................... 16
Figura 4: Placas de Vídeo ........................................................................................................ 17
Figura 5: Placas de Som .......................................................................................................... 17
Figura 6: Placas de rede. (a) Placa ethernet com um cabo de par trançado e o conector RJ-45. (b)
Placa ethernet wireless. ........................................................................................................... 18
Figura 7: Dispositivos de Armazenamentos. Disquetes, cartões de memória, pendrives, CDs e
HDs. ....................................................................................................................................... 21
Figura 8: MROM utilizada para jogos de vídeo game como “Garfield”, "Virtual Fighter" e
"Sonic" no Game Gear da Sega. .............................................................................................. 22
Figura 9: Memória PROM. A memória foi criada a pedido da Força Aérea dos Estados Unidos,
que procurava uma maneira mais flexível e segura de armazenar as constantes de alvo no
computador digital do Atlas E/F ICBM. .................................................................................. 22
Figura 10: Memória EPROM. Alguns micro controladores, frequentemente aqueles de antes da
era da memória flash, usam EPROM interna para armazenar seus programas. Isto é útil para
desenvolvimentos, pois usar dispositivos programáveis apenas uma vez seria terrivelmente
difícil de depurar. .................................................................................................................... 23
Figura 11: Memória EEPROM. Muito utilizada em alguns micro controladores devido ao seu
baixo custo em relação as memórias flash. .............................................................................. 23
Figura 12: Memória flash. É uma variação moderna da EEPROM, mas existe na indústria uma
convenção para reservar o termo EEPROM para as memórias de escrita bit a bit, não incluindo
as memórias de escrita bloco a bloco, como as memórias flash. Pen drivers e cartões de
memórias são exemplos deste tipo de memória. ....................................................................... 24
Figura 13: Resumo das Memórias ROM. ................................................................................. 24
Figura 14:Memórias DDR1, DDR2 e DDR3. Esta útlima mais comum nos computadores atuais.
............................................................................................................................................... 27
Figura 15: Comunicação unidade central de processamento e as memórias RAM. A memória
cache (SRAM) serve de intermediário entre um operador de um processo e o dispositivo de
armazenamento ao qual esse operador acede. A vantagem principal na utilização de um cache
consiste em evitar o acesso ao dispositivo de armazenamento - que pode ser demorado -
armazenando os dados em meios de acesso mais rápidos. A memória principal (DRAM) tem
uma velocidade inferior comparada a memória cache mas consegue armazenar uma quantidade
maior de informação a um custo menor. .................................................................................. 27
Figura 16: Unidade Central de Processamento com seus respectivos barramentos de
comunicação. .......................................................................................................................... 28
Figura 17: Evolução dos microprocessadores no decorrer do tempo. ........................................ 30
Figura 18: Gabinetes Slim e Gabinete torre são alguns exemplos de case. ................................ 32
Figura 19:Exemplos da parte traseira de gabinetes. Pode-se observar as diferentes conexões para
periféricos. .............................................................................................................................. 32
Figura 20: Logos dos principais sistemas operacionais. (a) Windows. (b) Linux. (c) MAC OS
(chamado atualmente de OS X). .............................................................................................. 33
Figura 21: (a) MS-DOS. Sistema operacional que não tem uma interface gráfica amigável,
funcionando exclusivamente através de comandos. (b) Windows 1.0. Nesta versão ele ainda não
era considerado um sistema operacional pois funcionava apenas como uma interface gráfica do
MS-DOS................................................................................................................................. 34
Figura 22: Windows 8.1. Interface da mais nova versão do windows. ...................................... 34
Figura 23: (a) Logo do SO Ubuntu com o seu lema: "Linux para seres humanos". (b) Interface
gráfica do Ubuntu. .................................................................................................................. 35
Figura 24: Interface gráfica do OS X. ...................................................................................... 36
Figura 25: Logos de Softwares Aplicativos. Microsoft Office, Flash Player, Adobe Reader e os
browsers de internet são alguns exemplos de softwares aplicativos. ......................................... 37
Figura 26: Tela inicial de um smartphone com o Android. ....................................................... 38
Figura 27: iOS7 em um Iphone. .............................................................................................. 39
Figura 28: Windows mobile 8 embarcado em smartphone da Nokia. ....................................... 39
Figura 29: O Sistema computacional é formado por hardware, software e peopleware. ............ 40
Figura 30: George Simon Boole. ............................................................................................. 42
Figura 31: Claude B. Shannon. ................................................................................................ 42
Figura 32: Conversão do número binário 11011 no seu equivalente 27 em decimal.................. 44
Figura 33: Conversão do número binário 10110101 no seu equivalente 181 em decimal. ......... 44
Figura 34: Conversão do número decimal 25 para o seu equivalente 11001 em binário. ........... 44
Figura 35: Conversão do número octal 372 para o seu equivalente 250 em dicimal. ................. 45
Figura 36: Conversão do número decimal 266 no seu equivalente 412 octal. ........................... 45
Figura 37: Conversão do número octal 472 no seu equivalente binário 100111010. ................. 46
Figura 38: Conversão do binário 100111010 para o seu equivalente 472 em octal. ................... 46
Figura 39: Conversão dos números hexadecimais 356 e 2AF nos seus respectivos equivalentes
em decimais 854 e 687. ........................................................................................................... 48
Figura 40: Conversão do número decimal 423 no seu equivalente em hexadecimal 1A7. ......... 48
Figura 41: Conversão do número hexadecimal 9F2 no seu equivalente em binário
100111110010. ....................................................................................................................... 49
Figura 42: Conversão do binário 1110100110 para o seu equivalente em hexadecimal 3A6. .... 49
Figura 43: Exemplos de tabelas verdade. (a) Tabela com duas variáveis de entrada (A e B). (b)
Tabela com 3 variáveis de entrada (A, B e C). (c) Tabela com 4 variáveis de entrada (A, B, C e
D). Todas as tabelas têm uma única saída x. ............................................................................ 52
Figura 44: Teoremas da Álgebra Booleana com uma variável. ................................................. 54
Figura 45: Equações dos teoremas da Álgebra Booleana com mais de uma variável. ............... 54
Figura 46: Teoremas de DeMorgan. ........................................................................................ 54
Figura 47: Diagrama de bloco para o cálculo da média escolar. ............................................... 58
Figura 48: Diagramas apresentando a entrada das notas e saída se houve aprovação. ............... 58
Figura 49: Uso de uma condição em um diagrama de blocos. .................................................. 59
Figura 50: Exemplo da utilização das variáveis. ...................................................................... 59
Figura 51: Estruturas dos símbolos para as instruções leia e escreva. ....................................... 64
Figura 52: Diagrama de blocos para a leitura, soma de dois valores e apresentação dos
resultados. ............................................................................................................................... 65
Figura 53: Tela Inicial do VisuAlg. ......................................................................................... 67
Figura 54: Estrutura do símbolo para a instrução se...então...fimse. ......................................... 71
Figura 55: Fluxograma para a resolução deste problema. ......................................................... 72
Figura 56: Estrutura do símbolo para a instrução se...entao...senao...fimse. ............................. 74
Figura 57: Fluxograma para a resolução deste problema. ......................................................... 75
Figura 58: Estrutura condicional composta ou encadeada. ....................................................... 76
Figura 59: Exemplo de utilização de uma estrutura condicional encadeada. ............................. 77
Figura 60: Diagrama de Blocos. .............................................................................................. 84
Figura 61: Diagrama de blocos para a solução do problema. .................................................... 85
Figura 62: Diagrama de blocos para a solução deste problema. ................................................ 87
Figura 63: Estrutura do símbolo da instrução para...fim_para. ............................................... 89
Figura 64: Exemplo da utilização da estrutura para..de...até...passo...faça...fim_para. ........... 90
Figura 65: Encadeamento Enquanto com Enquanto. ................................................................ 91
Figura 66: Encadeamento Enquanto com Para. ........................................................................ 92
Figura 67: Encadeamento de Para com Para. ........................................................................... 93
Figura 68: Encadeamento de Para com Enquanto. ................................................................... 94
Figura 69: Fatorial com estrutura Enquanto. ............................................................................ 95
Figura 70: Fatorial com estrutura Para. .................................................................................... 97
Figura 71: Dennis Ritchie. Criador da linguagem C. ................................................................ 99
Figura 72: Bjarne Stroustrup. Criador da linguagem C++. ..................................................... 100
Figura 73: Tela do compilador Dev C++. .............................................................................. 101
Figura 74: Tela do compilador Code::Blocks. ........................................................................ 102
Figura 75: Saída após executar o programa acima. ................................................................ 108
Figura 76: Saída após executar o programa acima. ................................................................ 109
Figura 77: Diagrama de blocos para leitura dos elementos de uma matriz tipo vetor. ............. 121
Figura 78: Diagrama de bloco para escrita dos elementos de uma matriz tipo vetor. ............... 123
Figura 79: Diagrama de blocos para o 1º Exemplo. ................................................................ 125
Figura 80: Diagrama de blocos para o 2º exemplo. ................................................................ 127
Lista de Tabelas
Tabela 1: Tabela comparativa entre DRAM e SRAM. Em vermelho características negativas e
em verde características positivas. ........................................................................................... 26
Tabela 2: Evolução dos microprocessadores com as informações detalhadas de alguns modelos.
............................................................................................................................................... 31
Tabela 3: Evolução dos microprocessadores em um mesmo modelo e os seus respectivos
valores em dólares americanos. ............................................................................................... 31
Tabela 4: Múltiplos do Byte. Pode-se observar os prefixos binários da IEC (Comissão
Eletrotécnica Internacional) onde 1 kibibyte = 1024 bytes. Nos múltiplos utilizandos pelo SI 1
Kilobyte = 1000 Bytes. ........................................................................................................... 43
Tabela 5: Equivalência da numeração octal com o sistema binário. .......................................... 46
Tabela 6: Relação entre os número Hexadecimais, Decimais e Binários. ................................. 47
Tabela 7: Listagem parcial do código ASCII. .......................................................................... 51
Tabela 8: Tabela verdade do operador booleano OR (OU). ...................................................... 52
Tabela 9: Tabela verdade do operador booleano AND (E). ...................................................... 53
Tabela 10: Tabela verdade do operador booleano NOT (NÃO). ............................................... 53
Tabela 11: Prioridades nas operações matemáticas. ................................................................. 63
Tabela 12: Valores das variáveis antes e durante a execução do looping. ................................. 96
Tabela 13: Tabela constando os tipos de dados, suas faixas de valores e o seu tamanho
aproximado. .......................................................................................................................... 104
Tabela 14: Especificadores para a função scanf..................................................................... 105
Tabela 15: Parâmetros para especificar o tipo de dados que será impresso. ............................ 107
Tabela 16: Operador de atribuição. ....................................................................................... 110
Tabela 17: Operadores matemáticos. .................................................................................... 110
Tabela 18: Operadores matemáticos de atribuição. ................................................................ 110
Tabela 19: Operadores Relacionais........................................................................................ 111
Tabela 20: Funções matemáticas. .......................................................................................... 111
Tabela 21: Palavras reservadas de C/C++. ............................................................................. 111
Tabela 22: Tabela verdade. ................................................................................................... 114
Tabela 23: Exemplo para o aprendizado de vetores e matrizes. Notas e médias dos alunos..... 119
Tabela 24: Valores armazenados dentro do vetor MD em seus respectivos índices. ................ 122
Lista de Equações
Equação 1: Exemplo de simplificação utilizando os Teoremas de DeMorgan. .......................... 54
Equação 2: Exemplo de simplificação utilizando os teoremas (13a), (8) e (6). ......................... 54
1. Sobre a disciplina

A disciplina de Introdução a Ciência da Computação é uma disciplina


obrigatório do 1º período do curso de Engenharia de Alimentos. Ela consta de uma carga
horária de 60 horas sendo 30 horas de aulas teóricas e 30 horas de aulas práticas.

Ela também é pré-requisito para poder cursar a disciplina de Cálculo


Numérico no 7º período.

1.1. Sobre o professor

O Prof. Dr. Daniel Duarte Costa graduou-se em Tecnologia em Eletrônica


Industrial pelo Centro Federal de Educação Tecnológica do Maranhão (CEFET-MA)
conhecido atualmente como Instituto Federal do Maranhão (IFMA). Formou-se Mestre
em Engenharia Elétrica pela Universidade Federal do Maranhão (UFMA) e Doutor pela
Rede Nordeste de Biotecnologia (RENORBIO).

É professor da UFMA desde 2008 onde leciona as disciplinas de Introdução


a Ciência da Computação, Desenho Técnico, Resistência dos Materiais e Eletrotécnica
para o curso de Engenharia de Alimentos.

1.2. Plano de Ensino


UNIVERSIDADE FEDERAL DO MARANHÃO CENTRO
DE CIENCIAS SOCIAIS, SAÚDE E TECNOLOGIA
CURSO DE ENGENHARIA DE ALIMENTOS

PLANO DE ENSINO

1. IDENTIFICAÇÃO DA DISCIPLINA
NOME DA DISCIPLINA CÓDIGO DA DISCIPLINA
INTRODUÇÃO A CIÊNCIA DA COMPUTAÇÃO COEA0073
Nº. HORAS-AULAS SEMANAIS Nº. HORAS-AULAS SEMESTRAIS
Teóricas Práticas 60h
2h 2h

2. PROFESSOR
Prof. Dr. Daniel Duarte Costa

3. EMENTA
Noções de sistemas de computação. Formulação de algoritmos e sua representação.
Descrição de algumas aplicações típicas.

4. OBJETIVOS
Introduzir o aluno no mundo da informática através do uso teórico e prático do computador
por meio do estudo de algoritmos e da programação em uma linguagem de alto nível.

5. CONTEÚDO PROGRAMÁTICO

INTRODUÇÃO A INFORMÁTICA
Histórico e evolução; Noções de arquitetura de computadores (componentes); Noções de
sistemas operacionais; Linguagens de programação.

NOÇOES DE ALGORITMOS
Definições básicas e exemplos de algoritmos em forma textual; Variáveis e tipos de dados;
Entrada e saída e estruturas de controle de fluxo; Formas de representação de algoritmos:
Pseudocódigo; Fluxogramas; Algoritmos estruturados; Relacionamento entre as diversas
representações de algoritmos; Exemplo de algoritmos.

PROGRAMAÇÃO ESTRUTURADA EM LIGUAGEM C


Noções de ambiente de desenvolvimento de programas em C; Estrutura e estilo de
programas em linguagem C: escopo, estruturação, identação; Tipos e variáveis primitivos;
Entrada e saída de dados: comandos cin e cout; Operadores matemáticos e lógicos;
Estrutura de decisão if-else; Estrutura de decisão mais elaborada: switch-case; Laços de
repetição: for, while e do-while; Funções: passagem de parâmetros por valor e por
referência; Array: strings, vetores e matrizes; Estruturas: struct.
6. METODOLOGIA DE ENSINO
As aulas serão em sua maioria ministradas de forma prática, em laboratório de informática,
de modo a obter uma maior associação entre teoria e prática. Os conceitos serão
apresentados de forma gradual e incremental, e sempre associados com exemplos didáticos.

7. METODOLOGIA DE AVALIAÇÃO
Assiduidade, participação em aulas, Avaliações.

8. BIBLIOGRAFIA BÁSICA
Curso essencial de Lógica de Programação, Marilane Almeida, São Paulo, Digerati Books,
2008.

Fundamentos da Programação de Computadores – Algoritmos, Pascal e C/C++, Ana


Fernanda Gomes Ascênio e Edilene Aparecida Veneruchi de Campos, Pearson Prentice
Hall, São Paulo.

Estudo Dirigido de Linguagem C, José Augusto N. G. Manzano, 13ª Ed., Editora Érica.

Estudo Dirigido de Algoritmos, José Augusto N. G. Manzano e Jayr Figueiredo de


Oliveira, 13ª Ed., Editora Érica.

___________________________ ______________________________
Professor Coordenador de Curso
2. Introdução a Ciência da Computação

Para iniciar o estudo proposto precisa-se definir primeiro alguns termos


utilizados no título deste capítulo:

 Ciência (do latim scientia, traduzido por "conhecimento") refere-se a


qualquer conhecimento ou prática sistemáticos. Em sentido estrito,
ciência refere-se ao sistema de adquirir conhecimento baseado no
método científico bem como ao corpo organizado de conhecimento
conseguido através de tais pesquisas (MERRIAM-WEBSTER
ONLINE DICTIONARY, 2009). A ciência é o conhecimento ou um
sistema de conhecimentos que abarca verdades as mais gerais e
abrangentes possíveis bem como a aplicação das leis científicas
derivadas; ambas especificamente obtidas e testadas através do
método científico.
 Computação pode ser definida como a busca de uma solução para um
problema a partir de entradas (inputs) e tem seus resultados (outputs)
depois de trabalhada através de um algoritmo. É com isto que lida a
teoria da computação, subcampo da ciência da computação e da
matemática. A partir da segunda metade do século XX, com o advento
dos computadores eletrônicos, a Computação passou a ter uma
presença cada vez mais marcante na sociedade, influenciando a vida
diária de parte da população mundial. A partir da década de 1950, a
Computação ganhou o status de Ciência surgindo então o termo
ciência da computação, uma área do conhecimento humano hoje
fortemente ligado à produção de software.

Ciência da computação é a ciência que estuda as técnicas, metodologias e


instrumentos computacionais, que automatiza processos e desenvolve soluções baseadas
no uso do processamento digital. Não se restringe apenas ao estudo dos algoritmos, suas
aplicações e implementação na forma de software, extrapolando para todo e qualquer
conhecimento pautado no computador, que envolve também a telecomunicação, o banco
de dados e as aplicações tecnológicas que possibilitam atingir o tratamento de dados de
entrada e saída, de forma que se transforme em informação. Assim, a Ciência da
Computação também abrange as técnicas de modelagem de dados e os protocolos de
comunicação, além de princípios que abrangem outras especializações da área.

Enquanto ciência, classifica-se como ciência exata, apesar de herdar


elementos da lógica filosófica aristotélica, tendo por isto um papel importante na
formalização matemática de algoritmos, como forma de representar problemas
decidíveis, i.e., os que são susceptíveis de redução a operações elementares básicas,
capazes de serem reproduzidas através de um qualquer dispositivo mecânico/eletrônico
capaz de armazenar e manipular dados. Um destes dispositivos é o computador digital,
de uso generalizado, nos dias de hoje. Também de fundamental importância para a área
de ciência da computação são as metodologias e técnicas ligadas à implementação de
software que abordam a especificação, modelagem, codificação, teste e avaliação de
sistemas de software.

Os estudos oriundos da ciência da computação podem ser aplicados em


qualquer área do conhecimento humano em que seja possível definir métodos de
resolução de problemas baseados em repetições previamente observadas. Avanços
recentes na ciência da computação tem impactado fortemente a sociedade
contemporânea, em particular as aplicações relacionadas às áreas de redes de
computadores, Internet, Web e computação móvel que têm sido utilizadas por bilhões de
pessoas ao redor do globo.

2.1. Computadores

O computador é uma coleção de componentes capaz de variados tipos de


tratamento automático de informações ou processamento de dados (operações lógicas e
aritméticas), mesmo sobre um grande volume de elementos. É uma máquina programável,
capaz de realizar tarefas, seguindo uma sequência de comandos, de acordo com o que foi
especificado e não faz absolutamente nada sem que lhe seja ordenado.

Um computador pode prover-se de inúmeros atributos, dentre eles


armazenamento de dados, processamento de dados, cálculo em grande escala, desenho
industrial, tratamento de imagens gráficas, realidade virtual, entretenimento e cultura.
Com estas qualidades o seu uso foi diversificado em diferentes áreas e aplicações como
por exemplo: negócios, medicina e saúde pública, educação, arqueologia, engenharia,
manufatura, direito, política, uso doméstico, entretenimento.

Os computadores podem ser divididos em dois grandes grupos: Hardware e


Software.

2.1.1. Hardware

Componente físico de um sistema de computação, i.e., todos os equipamentos


utilizados pelo usuário nas ações de entrada, processamento, armazenamento e saída de
dados.
O termo hardware não se refere apenas aos computadores pessoais, mas
também aos equipamentos embarcados em produtos que necessitam de processamento
computacional, como o dispositivos encontrados em equipamentos hospitalares,
automóveis, aparelhos celulares, dentre outros.

2.1.1.1. Unidades de Entrada/Saída (I/O) de dados.

As interfaces de entrada e saída (input/output (I/O), em inglês) são


responsáveis pela conexão entre as várias partes de um sistema computacional baseado
na arquitetura de Von-Neumann.

Os dispositivos de entrada permitem a interação do usuário com o


computador. São exemplos de periféricos de entrada o teclado, mouse e a webcam.
Figura 1: Periféricos de Entradas. (a) Teclado. (b) Mouse. (c) Webcam.

Dispositivo de saída são dispositivos que exibem dados e informações


processadas pelo computador. Em outras palavras, permitem a comunicação no sentido
do computador para o utilizador. Exemplos: projetor de vídeo, impressora e monitor.

Figura 2: Periféricos de Saída. (a) Monitor. (b) Impressora 3D. (c) Impressora 2D.

2.1.1.2. Placa Mãe

A placa mãe (do inglês: mainboard ou motherboard) é a parte do computador


responsável por conectar e interligar todos os componentes do computador, ou seja,
processador com memória RAM, disco rígido, placa gráfica, entre outros. Além de
permitir o tráfego de informação, a placa também alimenta alguns periféricos com a
energia elétrica que recebe da fonte do gabinete.

Existem dois tipos de placas:

 On-board: como o próprio nome diz, o componente on-board vem


diretamente conectado aos circuitos da placa mãe, funcionando em
sincronia e usando capacidade do processador e memória RAM
quando se trata de vídeo, som, modem e rede. Tem como maior
objetivo diminuir o preço das placas ou componentes mas, em caso de
defeito o dispositivo não será recuperável. São exemplos de circuitos
on-board: vídeo, modem, som e rede.
 Off-board: são os componentes ou circuitos que funcionam
independentemente da placa mãe e por isso, são separados, tendo sua
própria forma de trabalhar e não usando o processador, geralmente,
quando vídeo, som, modem ou rede, o dispositivo é "ligado" a placa
mãe usando os slots de expansão para isso, têm um preço mais elevado
que os dispositivos on-board, sendo quase que totalmente o contrário
em todos os aspectos do tipo on-board, ou seja, praticamente todo o
processamento é realizado pelo próprio chipset encontrado na placa
do dispositivo.
Principais fabricantes e respectivos sites:
 ASUS: http://www.asus.com/br/
 ECS: http://www.ecs.com.tw/
 GIGABYTE: http://br.gigabyte.com/
 INTEL: http://www.intel.com.br/

Figura 3: Placa Mãe.

2.1.1.3. Placa de Vídeos

Placa de vídeo, também chamada de adaptador de vídeo ou aceleradora


gráfica, é um componente de um computador que envia sinais deste para o monitor, de
forma que possam ser apresentadas imagens ao utilizador. Normalmente possui memória
própria, com capacidade medida em octetos.

Principais fabricantes e seus respectivos sites:

 ATI Technologies (incorporada à AMD): http://www.amd.com/br/


 nVidia: http://www.nvidia.com.br/
 S3 Graphics: http://www.s3graphics.com/en/index.aspx
Figura 4: Placas de Vídeo

2.1.1.4. Placa de Som

Placa de som é um dispositivo de hardware que envia e recebe sinais sonoros


entre equipamentos de som e um computador executando um processo de conversão entre
a forma digital e analógica para outros periféricos como fones de ouvido ou provendo
interfaces para outros equipamentos digitais (LUCAS SFAIR, 2009).

Principais fabricantes e seus respectivos sites:

 REALTEK: http://www.realtek.com.tw/
 VIA Technologies: http://www.via.com.tw/
 Creative Labs: http://us.creative.com/

Figura 5: Placas de Som


2.1.1.5. Placa de Rede

Uma placa de rede (também chamada adaptador de rede ou NIC, do acrônimo


inglês Network Interface Card) é um dispositivo de hardware responsável pela
comunicação entre os computadores de uma rede.

A placa de rede é o hardware que permite aos computadores conversarem


entre si através da rede. A sua função é controlar todo o envio e recepção de dados através
da rede. Cada arquitetura de rede exige um tipo específico de placa de rede; sendo a
arquitetura mais comum a do tipo Ethernet.

Ethernet é uma arquitetura de interconexão para redes locais - Rede de Área


Local (LAN) - baseada no envio de pacotes. Ela define cabeamento e sinais elétricos para
a camada física, e formato de pacotes e protocolos para a subcamada de controle de acesso
ao meio (Media Access Control - MAC) do modelo ISO. A Ethernet foi padronizada pelo
IEEE como 802.3. A partir dos anos 90, ela vem sendo a tecnologia de LAN mais
amplamente utilizada e tem tomado grande parte do espaço de outros padrões de rede
como Token Ring, FDDI e ARCNET.1

Cabos diferentes exigem encaixes diferentes na placa de rede. O mais comum


em placas Ethernet é para cabos de par trançado.

Figura 6: Placas de rede. (a) Placa ethernet com um cabo de par trançado e o conector RJ-45. (b) Placa
ethernet wireless.

2.1.1.6. Dispositivos de Armazenamento

Dispositivos de armazenamento são unidades capazes de armazenar informações (dados)


para posterior consulta ou uso. Essa gravação de dados pode ser feita praticamente usando
qualquer forma de energia, desde força manual humana como na escrita, passando por
vibrações acústicas em gravações fonográficas até modulação de energia eletromagnética
em fitas magnéticas e discos ópticos.

Existem basicamente três tipos diferentes de dispositivos de armazenamento: por meios


magnéticos, por meios ópticos e por meios eletrônicos.
2.1.1.6.1. Dispositivos de armazenamento por meios
magnéticos

Os dispositivos de armazenamento por meio magnético são os mais antigos e


mais utilizados atualmente, por permitir uma grande densidade de informação, ou seja,
armazenar grande quantidade de dados em um pequeno espaço físico. São mais antigos,
porém foram se aperfeiçoando no decorrer do tempo.

Para a gravação, a cabeça de leitura e gravação do dispositivo gera um campo


magnético que polariza os dipolos magnéticos, representando assim dígitos binários (bits)
de acordo com a polaridade utilizada. Para a leitura, um campo magnético é gerado pela
cabeça de leitura e gravação e, quando em contato com os dipolos magnéticos da mídia
verifica se esta atrai ou repele o campo magnético, sabendo assim se o polo encontrado
na molécula é negativo ou positivo (0 ou 1).

Como exemplo de dispositivos de armazenamento por meio magnético,


podemos citar os Discos Rígidos e os disquetes.

Os dispositivos de armazenamento magnéticos que possuem mídias


removíveis normalmente não possuem capacidade e confiabilidade equivalente aos
dispositivos fixos, pois sua mídia é frágil e possui capacidade de armazenamento muito
pequena se comparada a outros tipos de dispositivos de armazenamento magnéticos.

2.1.1.6.2. Dispositivos de armazenamento por meio óptico

Os dispositivos de armazenamento por meio óptico são os mais utilizados


para o armazenamento de informações multimídia, sendo amplamente aplicados no
armazenamento de filmes, música, etc. Apesar disso também são muito utilizados para o
armazenamento de informações e programas, sendo especialmente utilizados para a
instalação de programas no computador.

Exemplos de dispositivos de armazenamento por meio óptico são os CD-


ROM, DVD-ROM e os discos Blu-Ray.

A leitura das informações em uma mídia óptica se dá por meio de um feixe


laser de alta precisão, que é projetado na superfície da mídia. A superfície da mídia é
gravada com sulcos microscópicos capazes de desviar o laser em diferentes direções,
representando assim diferentes informações, na forma de dígitos binários (bits). A
gravação das informações em uma mídia óptica necessita de uma mídia especial, cuja
superfície é feita de um material que pode ser “queimado” pelo feixe laser do dispositivo
de armazenamento, criando assim os sulcos que representam os dígitos binários (bits).

2.1.1.6.3. Dispositivos de armazenamento por meio


eletrônico

Este tipo de dispositivos de armazenamento é o mais recente e é o que mais


oferece perspectivas para a evolução do desempenho na tarefa de armazenamento de
informação. Esta tecnologia também é conhecida como memórias de estado sólido ou
SSDs (solid state drive) por não possuírem partes móveis, apenas circuitos eletrônicos
que não precisam se movimentar para ler ou gravar informações.

Os dispositivos de armazenamento por meio eletrônico podem ser


encontrados com as mais diversas aplicações, desde Pen Drives, até cartões de memória
para câmeras digitais, e, mesmo os discos rígidos possuem uma certa quantidade desse
tipo de memória funcionando como buffer.

A gravação das informações em um dispositivo de armazenamento por meio


eletrônico se dá através dos materiais utilizados na fabricação dos chips que armazenam
as informações. Para cada dígito binário (bit) a ser armazenado nesse tipo de dispositivo
existem duas portas feitas de material semicondutor, a porta flutuante e a porta de
controle. Entre estas duas portas existe uma pequena camada de óxido, que quando
carregada com elétrons representa um bit 1 e quando descarregada representa um bit 0.
Esta tecnologia é semelhante à tecnologia utilizada nas memórias RAM do tipo dinâmica,
mas pode reter informação por longos períodos de tempo, por isso não é considerada uma
memória RAM propriamente dita.

Os dispositivos de armazenamento por meio eletrônico tem a vantagem de


possuir um tempo de acesso muito menor que os dispositivos por meio magnético, por
não conterem partes móveis. O principal ponto negativo desta tecnologia é o seu custo
ainda muito alto, portanto dispositivos de armazenamento por meio eletrônico ainda são
encontrados com pequenas capacidades de armazenamento e custo muito elevado se
comparados aos dispositivos magnéticos.
Figura 7: Dispositivos de Armazenamentos. Disquetes, cartões de memória, pendrives, CDs e HDs.

2.1.1.7. Memórias ROM

As memória somente de leitura (ROM - Read Only Memory, em inglês) é um


tipo de memória que permite apenas a leitura, ou seja, as suas informações são gravadas
pelo fabricante uma única vez e após isso não podem ser alteradas ou apagadas, somente
acessadas. São memórias não voláteis, ou seja, os dados não são perdidos ao se retirar a
fonte de energia.

Uma memória somente de leitura propriamente dita vem com seu conteúdo
gravado durante a fabricação. Atualmente, o termo Memória ROM é usado
informalmente para indicar uma gama de tipos de memória que são usadas apenas para a
leitura na operação principal de dispositivos eletrônicos digitais, mas possivelmente
podem ser escritas por meio de mecanismos especiais. Entre esses tipos encontramos as
PROM, as EPROM, as EEPROM e as memórias flash. Ainda de forma mais ampla, e de
certa forma imprópria, dispositivos de memória terciária, como CD-ROMs, DVD-ROMs,
BD-ROMs, também são algumas vezes citados como memória ROM.

Os tipos mais comuns de ROM são:

 ROM programada por máscara (MROM – Mask ROM):


o Tem suas posições programadas pelo fabricante de acordo com as
especificações do cliente.
o A principal desvantagem é que ela não pode ser reprogramada.
o É a alternativa mais econômica quando uma grande quantidade de ROMs
com programação idêntica é necessária.

Figura 8: MROM utilizada para jogos de vídeo game como “Garfield”, "Virtual Fighter" e "Sonic" no
Game Gear da Sega.

 ROM Programáveis (PROM – Programmable ROM):


o Tem suas posições programadas pelo usuário de acordo com as suas
necessidades.
o A principal desvantagem é que ela não pode ser reprogramada.
o É a alternativa mais econômica quando uma pequena quantidade de ROMs
com programação idêntica é necessária.

Figura 9: Memória PROM. A memória foi criada a pedido da Força Aérea dos Estados Unidos, que
procurava uma maneira mais flexível e segura de armazenar as constantes de alvo no computador digital
do Atlas E/F ICBM.

 ROM Programável e Apagável (EPROM – Erasable PROM):


o Tem suas posições programadas pelo usuário de acordo com as suas
necessidades.
o Pode ser apagada sendo exposta a luz ultravioleta (UV) aplicada pela
janela do encapsulamento do chip.
o Desvantagem: (1) Devem ser removidas do circuito para serem apagadas
e reprogramadas. (2) Não existe um modo de apagar apenas células
selecionadas; A luz UV apaga todas as células ao mesmo tempo. (3)
Apagar e reprogramar um chip demora cerca de 20 min ou mais.

Figura 10: Memória EPROM. Alguns micro controladores, frequentemente aqueles de antes da era da
memória flash, usam EPROM interna para armazenar seus programas. Isto é útil para desenvolvimentos,
pois usar dispositivos programáveis apenas uma vez seria terrivelmente difícil de depurar.

 PROM Apagável Eletricamente (EEPROM – Electrically EPROM):


o Tem suas posições programadas pelo usuário de acordo com as suas
necessidades. E pode apagar células selecionadas sem a necessidade da
remoção do dispositivo do circuito.
o Velocidade de gravação superior ao das EPROM.
o Desvantagem: Menor densidade e custo superior ao das EPROM.

Figura 11: Memória EEPROM. Muito utilizada em alguns micro controladores devido ao seu baixo
custo em relação as memórias flash.

 Memória Flash
o Memória não-volátil de alta velocidade de acesso e baixo custo.
Figura 12: Memória flash. É uma variação moderna da EEPROM, mas existe na indústria uma
convenção para reservar o termo EEPROM para as memórias de escrita bit a bit, não incluindo as
memórias de escrita bloco a bloco, como as memórias flash. Pen drivers e cartões de memórias são
exemplos deste tipo de memória.

Figura 13: Resumo das Memórias ROM.

A memória ROM está presente em qualquer dispositivo digital, como por


exemplo um relógio. Sempre que um computador é iniciado, ele necessita de informações
existentes em algum lugar para carregar suas funções básicas e/ou principais de uma
forma que elas sempre sejam acessíveis e não se apaguem ao interromper a alimentação.

Satélites, controles remotos, micro-ondas, impressoras, celulares, todos os


aparelhos digitais comportam uma ROM para realizarem suas tarefas básicas.

O uso da memória ROM vêm aumentando conforme surgem novas


tecnologias, além de serem portadores de firmwares, hoje utilizam-se memórias flash
(que também são memórias ROM) para o armazenamento de diversos tipos de dados.

Uma grande perspectiva para as flash ROM é a possibilidade de um dia poder


substituir os discos rígidos, mas isto ainda não é possível, pois as memórias flash podem
comportar diversos dados mas ainda possuem capacidade muito menor do que os HDs
enquanto o preço é bem superior.

A memória ROM de seu micro é responsável pela BIOS do sistema que é


responsável por "acordar" todos seus componentes, pelo auto teste responsável por fazer
testes na memória e em outros componentes do hardware e também pelo Setup
responsável pela configuração de sua máquina. Ou seja, é na memória rom que tudo
começa.

Apesar do nome memória ROM ser usado algumas vezes em contraposição


com o nome memória RAM, deve ficar claro que ambos os tipos de memória são de
acesso aleatório.

Algumas das aplicações mais comum entre das memórias ROM são:

 Firmware
o Disponíveis no processo de inicialização de sistemas microprocessados.
o Ex: Computadores, DVD players, microondas e diversos tipos de
máquinas industriais.
 Tabela de Dados
o Usadas para armazenar valores que não mudam.
o Ex: Tabelas Trigonométricas e tabelas de conversão de código.
 Conversor de Código
o É necessária quando precisamos converter de um código para outro, por
exemplo, um computador está fornecendo uma saída em binário simples e
queremos convertê-lo para BCD para que possa ser mostrado em um
display de 7 segmentos.
 Gerador de funções
o Circuito capaz de formar ondas como senóides, triangulares e quadradas.
o Ex: Gerador de função e sintetizador de voz.
 Armazenamento auxiliar
o Por serem memórias não-voláteis, de alta velocidade, com baixo consumo
e não possuírem partes móveis, módulos de memória flash estão se
tornando alternativas aos discos magnéticos.
o Ex: Cartões de memória, pendrive, SSDs, celulares, câmeras e players de
mídia com armazenamento interno.

2.1.1.8. Memórias RAM

As memórias RAM (Random-Access Memory - Memória de Acesso


Aleatório) constituem uma das partes mais importantes dos computadores, pois são nelas
que o processador armazena os dados com os quais está lidando. Esse tipo de memória
tem um processo de gravação de dados extremamente rápido, se comparado aos vários
tipos de memória ROM. No entanto, as informações gravadas se perdem quando não há
mais energia elétrica, isto é, quando o computador é desligado, sendo, portanto, um tipo
de memória volátil.

Há dois tipos de tecnologia de memória RAM que são muitos utilizados:


estático e dinâmico, isto é, SRAM e DRAM, respectivamente.
 SRAM (Static Random-Access Memory - RAM Estática): É uma memória
baseada em flip-flops. Ela é muito mais rápida que as memórias DRAM, porém
armazena menos dados e possui preço elevado se considerarmos o custo por
megabyte. Memórias SRAM costumam ser utilizadas como cache;
 DRAM (Dynamic Random-Access Memory - RAM Dinâmica): É uma memória
baseada em capacitores. Ela possui alta capacidade, isto é, podem comportar
grandes quantidades de dados. No entanto, o acesso a essas informações costuma
ser mais lento que o acesso às memórias SRAM. Esse tipo também costuma ter
preço bem menor quando comparado ao tipo estático. Para não perder os dados
armazenados as DRAM precisam de constantemente de um refresh (recarga de
suas células de memória);

Para uma melhor compreensão das características de cada memória observe


a Tabela 1:

Tabela 1: Tabela comparativa entre DRAM e SRAM. Em vermelho características negativas e em verde
características positivas.
Comparativo entre as memórias DRAM e SRAM
DRAM SRAM
Maior complexidade Menor complexidade
Maior capacidade de armazenamento Menor capacidade de armazenamento
Maior consumo de energia Menor consumo de energia
Menor custo Maior custo
Menor tamanho Maior tamanho
Menor velocidade Maior velocidade

Atualmente as memórias RAM dos computadores são do tipo DRAM, mais


precisamente uma DDR SDRAM ou double-data-rate synchronous dynamic random
access memory (memória de acesso aleatório dinâmica síncrona de dupla taxa de
transferência ) é um tipo de circuito integrado de memória utilizado em computadores,
derivada das muito conhecidas SDRAM e combinada com a técnica DDR, que consiste
em transferir dois dados por pulso de clock, obtendo assim, teoricamente, o dobro de
desempenho em relação a técnica tradicional de transferência de dados quando operando
sob a mesma frequência de clock.

A DDR3 é considerada o tipo de memória padrão para o mercado de


computadores há muitos anos, mas uma evolução nesse campo está começando a ficar
mais evidente. Apesar de existir desde 2012, a DDR4 tem sido colocada meio de lado
pelas fabricantes de hardware, mas finalmente a Intel parece ter decidido impulsionar a
tecnologia. Com tudo isso, espera-se que os PCs domésticos e gamers já possam ter
módulos DDR4 em algum tempo entre 12 e 18 meses com pelo menos algumas opções
de processadores compatíveis. O preço a ser pago pela novidade naturalmente será alto
num primeiro momento. Analistas estimam valores 30% mais altos para módulos DDR4
até o fim deste ano se comparados aos DDR3. Em 2015, a diferença deve estar em apenas
10% (LEONARDO MÜLLER, 2014).
Figura 14:Memórias DDR1, DDR2 e DDR3. Esta útlima mais comum nos computadores atuais.

Algumas das aplicações mais comuns das memórias RAM são:

 Memória Cache:
o Para computadores pessoais alcançarem maiores desempenhos, são
utilizadas memórias de altas velocidades para acompanhar o processador.
 Memória First-In, First-Out (FIFO)
o Útil como um buffer de transferência de dados, entre sistemas que
transferem dados a taxas diferentes.
o Ex: Computador – Impressora ou Teclado – Computador.

A figura a seguir ilustra a arquitetura básica de um computador em relação a


comunicação do processador e as memórias RAM.

Figura 15: Comunicação unidade central de processamento e as memórias RAM. A memória cache (SRAM) serve de
intermediário entre um operador de um processo e o dispositivo de armazenamento ao qual esse operador acede. A
vantagem principal na utilização de um cache consiste em evitar o acesso ao dispositivo de armazenamento - que
pode ser demorado - armazenando os dados em meios de acesso mais rápidos. A memória principal (DRAM) tem
uma velocidade inferior comparada a memória cache mas consegue armazenar uma quantidade maior de
informação a um custo menor.

2.1.1.9. Unidade Central de Processamento (UCP)


A unidade central de processamento (UCP ou CPU - Central Processing
Unit), também conhecido como processador, é um circuito integrado que realiza as
funções de cálculo e tomada de decisão de um computador. É um dispositivo
multifuncional programável que aceita dados digitais como entrada, processa de acordo
com as instruções armazenadas em sua memória, e fornece resultados como saída.
Processadores operam com números e símbolos representados no sistema binário. Todos
os computadores e equipamentos eletrônicos baseiam-se nele para executar suas funções.
Podemos dizer que o processador é o cérebro do computador por realizar todas estas
funções.

O próprio microprocessador subdivide-se em várias unidades, trabalhando em


altas frequências. A ULA (Unidade Lógica Aritmética), unidade responsável pelos
cálculos aritméticos e lógicos e os registradores, pequenas memórias velozes que
armazenam comandos ou valores que são utilizados no controle e processamento de cada
instrução, são parte integrante do microprocessador na família x86 e x64, por exemplo.

Figura 16: Unidade Central de Processamento com seus respectivos barramentos de comunicação.

Existem dois tipos principais de arquiteturas usadas em processadores:

 A arquitetura de Von Neumann: Esta arquitetura caracteriza-se por apresentar


um barramento externo compartilhado entre dados e endereços. Embora apresente
baixo custo, esta arquitetura apresenta desempenho limitado pelo gargalo do
barramento.
 A arquitetura de Harvard: Nesta arquitetura existem dois barramentos externos
independentes (e normalmente também memórias independentes) para dados e
endereços. Isto reduz de forma sensível o gargalo de barramento, que é uma das
principais barreiras de desempenho, em detrimento do encarecimento do sistema
como um todo.

A diferença entre a arquitetura de Von Neunmann e a Harvard é que a última


separa o armazenamento e o comportamento das instruções do CPU e os dados, enquanto
a anterior utiliza o mesmo espaço de memória para ambos. Nos CPUs atuais, é mais
comum encontrar a arquitetura Von Neunmann, mas algumas coisas da arquitetura
Harvard também são vistas. Nessas distintas arquiteturas, temos vantagens e
desvantagens, como pode-se observar a seguir: Arquitetura tipo Harvard: Caminhos de
dados e de instrução distintos. Já na arquitetura Von-Neumann, é processada uma única
informação por vez, visto que nessa tecnologia, execução e dados percorrem o mesmo
barramento, o que torna o processo lento em relação à arquitetura Harvard. A arquitetura
Harvard é mais utilizada nos microcontroladores, pois proporcionam maior velocidade de
processamento, pois enquanto a CPU processa uma informação, outra nova informação
está sendo buscada, de forma sucessiva.

Sobre a arquitetura de von Neumann a CPU pode ser uma instrução de leitura,
escrita de dados de memória, ou para memória. Ambas as instruções, não podem ocorrer
ao mesmo tempo, uma vez que as instruções e os dados fazem o uso do sistema de
barramento. Em um computador que utiliza a arquitetura Harvard, a CPU pode ler uma
instrução e executar um acesso à memória de dados ao mesmo tempo, mesmo sem cache,
pode assim ser mais rápido para um circuito de complexidade dada porque a instrução
busca o acesso a dados, sem acontecer por uma via única de memória.

Existem dois modelos de computação usados em processadores:

 CISC (em inglês: Complex Instruction Set Computing, Computador com um


Conjunto Complexo de Instruções), usada em processadores Intel e AMD; possui
um grande conjunto de instruções (tipicamente centenas) que são armazenadas em
uma pequena memória não-volátil interna ao processador. Cada posição desta
memória contém as micro instruções, ou seja, os passos a serem realizados para a
execução de cada instrução. Quanto mais complexa a instrução, mais micro
instruções ela possuirá e mais tempo levará para ser executada. Ao conjunto de
todas as micro instruções contidas no processador denominamos microcódigo.
Esta técnica de computação baseada em microcódigo é denominada micro
programação.
 RISC (em inglês: Reduced Instruction Set Computing, Computador com um
Conjunto Reduzido de Instruções) usada em processadores PowerPC (da Apple,
Motorola e IBM) e SPARC (SUN); possui um conjunto pequeno de instruções
(tipicamente algumas dezenas) implementadas diretamente em hardware. Nesta
técnica não é necessário realizar a leitura em uma memória e, por isso, a execução
das instruções é muito rápida (normalmente um ciclo de clock por instrução). Por
outro lado, as instruções são muito simples e para a realização de certas tarefas
são necessárias mais instruções que no modelo RISC.

Analisando a Figura 17 pode-se observar que a evolução nos processadores


foi dada através de diferentes gerações. Cada uma dessas gerações houve uma
significativa evolução conforme pode ser verificado na Tabela 2.
Figura 17: Evolução dos microprocessadores no decorrer do tempo.
Tabela 2: Evolução dos microprocessadores com as informações detalhadas de alguns modelos.

Tabela 3: Evolução dos microprocessadores em um mesmo modelo e os seus respectivos valores em dólares
americanos.
2.1.1.10. Gabinete

Um gabinete de computador (também conhecido como case, caixa, chassis


ou torre) é o compartimento que contém a maioria dos componentes de um computador
(normalmente excluindo o monitor, teclado e mouse). O gabinete de um computador às
vezes é referido metonimicamente como CPU, referindo-se a um componente situado
dentro da caixa. CPU era um termo comum nos primeiros computadores domésticos,
quando outros periféricos da placa mãe normalmente eram alojados em seus próprios
cases separados.

Figura 18: Gabinetes Slim e Gabinete torre são alguns exemplos de case.
Na parte de trás do gabinete é onde encontramos as conexões para os
periféricos de entrada e saída de dados do computador. A Figura 19 ilustra estas conexões
nos gabinetes.

Figura 19:Exemplos da parte traseira de gabinetes. Pode-se observar as diferentes conexões para
periféricos.

2.1.2. Software

Em contraposição ao hardware, o Software é uma sentença escrita em uma


linguagem computável, para a qual existe uma máquina capaz de interpretá-la. A sentença
(o software) é composta por uma sequência de instruções (comandos) e declarações de
dados, armazenável em meio digital. Ao interpretar o software, a máquina é direcionada
à realização de tarefas especificamente planejadas, para as quais o software foi projetado.
É a parte que envolve uma linguagem especifica que é utilizada, pelos programadores na
construção de softwares.

Qualquer computador moderno tem uma variedade de programas que fazem


diversas tarefas. Eles podem ser classificados em duas grandes categorias:
 Software de sistema;
 Software aplicativo.

2.1.2.1. Software de Sistema

Software de sistema: Seu objetivo é separar usuário e programador de


detalhes do computador específico que está sendo usado. O software do sistema lhe dá ao
usuário interfaces de alto nível e ferramentas que permitem a manutenção do sistema.
Inclui, entre outros:

 Sistemas operacionais (SO);


 Drivers;
 Ferramentas de diagnóstico;
 Ferramentas de Correção e Optimização;
 Servidores.

Entre esses vários softwares de sistemas convêm falar um pouco mais sobre
o sistema operacional que é um programa ou um conjunto de programas cuja função é
gerenciar os recursos do sistema (definir qual programa recebe atenção do processador,
gerenciar memória, criar um sistema de arquivos, etc.), fornecendo uma interface entre o
computador e o usuário. Embora possa ser executado imediatamente após a máquina ser
ligada, a maioria dos computadores pessoais de hoje o executa através de outro programa
armazenado em uma memória ROM chamado BIOS (Basic Input/Output System -
Sistema Básico de Entrada/Saída) num processo chamado bootstrapping, conceito em
inglês usado para designar processos autossustentáveis, ou seja, capazes de prosseguirem
sem ajuda externa. Após executar testes e iniciar os componentes da máquina (monitores,
discos, etc), o BIOS procura pelo sistema operacional em alguma unidade de
armazenamento, geralmente o disco rígido, e a partir daí, o sistema operacional assume o
controle da máquina. O sistema operacional reveza sua execução com a de outros
programas, como se estivesse vigiando, controlando e orquestrando todo o processo
computacional.

Figura 20: Logos dos principais sistemas operacionais. (a) Windows. (b) Linux. (c) MAC OS (chamado
atualmente de OS X).
2.1.2.1.1. Windows

Microsoft Windows é uma família de sistemas operacionais criados pela


Microsoft, empresa fundada por Bill Gates e Paul Allen. Antes da versão NT, era uma
interface gráfica para o sistema operacional MS-DOS (SO que não dispõe de interface
gráfica, funciona através de comandos de texto introduzidos no teclado pelo utilizador).
O Windows é um produto comercial, com preços diferenciados para cada uma de suas
versões. É o sistema operacional mais utilizado em computadores pessoais no mundo. O
impacto deste sistema no mundo atual é muito grande devido ao enorme número de cópias
instaladas. Conhecimentos mínimos desse sistema, do seu funcionamento, da sua história
e do seu contexto são, na visão de muitos, indispensáveis, mesmo para os leigos em
informática. A atual versão estável do Windows para desktops é o Windows 8.1, lançado
em 17 de outubro de 2013. Para servidores o Windows Server 2012 é a versão mais
recente e estável.

Figura 21: (a) MS-DOS. Sistema operacional que não tem uma interface gráfica amigável, funcionando
exclusivamente através de comandos. (b) Windows 1.0. Nesta versão ele ainda não era considerado um
sistema operacional pois funcionava apenas como uma interface gráfica do MS-DOS.

Figura 22: Windows 8.1. Interface da mais nova versão do windows.

2.1.2.1.2. Linux

Linux é um termo utilizado para se referir a sistemas operacionais que


utilizem o núcleo Linux. O núcleo Linux foi desenvolvido pelo programador finlandês
Linus Torvalds em 1991. O seu código fonte está disponível sob a licença GPL (versão
2) para que qualquer pessoa o possa utilizar, estudar, modificar e distribuir livremente de
acordo com os termos da licença.

Inicialmente desenvolvido e utilizado por grupos de entusiastas em


computadores pessoais, os SO com núcleo Linux passaram a ter a colaboração de grandes
empresas como IBM, Sun Microsystems, Hewlett-Packard (HP), Red Hat, Novell,
Oracle, Google, Mandriva e Canonical.

Apoiado por pacotes igualmente estáveis e cada vez mais versáteis de


softwares livres para escritório (OpenOffice, por exemplo) ou de uso geral (projeto GNU)
e por programas para micro e pequenas empresas que na maioria dos casos em nada ficam
a dever aos seus concorrentes proprietários, e interfaces gráficas cada vez mais amigáveis
como o KDE e o GNOME, o núcleo Linux, conhecido por sua estabilidade e robustez,
tem gradualmente caído no domínio popular, encontrando-se cada vez mais presente nos
computadores de uso pessoal atuais. Mas já há muito que o Linux destaca-se como o
núcleo preferido em servidores de grandes porte, encontrando-se quase sempre presente
nos mainframes de grandes empresas e até mesmo no computador mais rápido do mundo,
o Tianhe-2, chinês.

O Ubuntu é SO de código aberto, construído a partir do núcleo Linux, baseado


no Debian. É patrocinado pela Canonical Ltd (dirigida por Jane Silber). Provavalmente é
a distribuição mais usada no mundo.

O Ubuntu diferencia-se do Debian por ter versões lançadas semestralmente,


por disponibilizar suporte técnico nos 9 meses seguintes ao lançamento de cada versão
(as versões LTS – Long Term Support – para desktop recebem 5 anos de suporte, e para
servidor recebem 5 anos de suporte), e pela filosofia em torno de sua concepção. A
proposta do Ubuntu é oferecer um sistema que qualquer pessoa possa utilizar sem
dificuldades, independentemente de nacionalidade, nível de conhecimento ou limitações
físicas. O sistema deve ser constituído principalmente por software livre. Deve também
ser isento de qualquer taxa.

Figura 23: (a) Logo do SO Ubuntu com o seu lema: "Linux para seres humanos". (b) Interface gráfica do
Ubuntu.
2.1.2.1.3. Mac OS

O Macintosh Operating System (Mac OS) é a de denominação do sistema


operacional padrão dos computadores Macintosh produzidos pela Apple Inc.. A primeira
versão foi lançada em 1984. Até antes da versão 7.6, era apenas chamado System, da
versão 7.6 em diante passou a ser chamado Mac OS. Até a versão 10.7, denominava-se
Mac OS X. A partir da versão 10.8, removeu-se o "Mac", utilizando-se apenas OS X. A
remoção do "Mac" reflete na tentativa da Apple em aproximar o sistema operacional
desktop de seu SO mobile, o iOS.

Foi o segundo sistema operacional a usar uma GUI (Depois do protótipo


Xerox Alto, desenvolvido na Xerox PARC), e o primeiro sistema gráfico amplamente
usado em computadores a usar ícones para representar os itens do computador, como
programas, pastas e documentos. Também foi pioneiro na disseminação do conceito de
Desktop, com uma Mesa de Trabalho com ícones de documentos, pastas e uma lixeira,
em analogia ao ambiente de escritório.

De início as pastas eram criadas renomeando-se uma "Pasta Vazia" que estava
sempre na raiz do disco. A partir do System 2.0 o sistema foi modificado, com a inclusão
do comando "Nova Pasta" no menu Arquivo do Finder.

O lançamento do Mac OS X foi um marco para o sistema operacional. Na sua


décima versão, o sistema foi remodelado como um todo, inclusive o núcleo que passou a
ser baseado no do Unix BSD.

Figura 24: Interface gráfica do OS X.

2.1.2.2. Software Aplicativo

Programa de computador que tem por objetivo ajudar o usuário a


desempenhar uma tarefa específica, em geral ligada a processamento de dados. Sua
natureza é diferente de outros tipos de software, como sistemas operacionais e
ferramentas a eles ligadas.
Figura 25: Logos de Softwares Aplicativos. Microsoft Office, Flash Player, Adobe Reader e os
browsers de internet são alguns exemplos de softwares aplicativos.

Os softwares aplicativos podem ser divididos em Software Proprietário, Software Livre


e Softwares Comercial:

 Software Proprietário é um software que é licenciado com direitos exclusivos para


o produtor. Para fazer uso ou qualquer alteração no programa (quando possível) é
necessário a compra de uma licença. Alguns dos mais conhecidos softwares
proprietários são o Microsoft Windows, o Microsoft Office, o Real Player, o
Adobe Photoshop, o Mac OS, o WinZip, algumas versões do UNIX, entre outros.
 Software Livre é qualquer programa que possa ser utilizado, copiado, estudado e
redistribuído sem restrições. O Software livre respeita os direitos dos utilizadores
permitindo que partilhem com outros o que aprenderam, já respeitante ao lucro,
não se opõem ao software vendido almejando lucro (software comercial) desde
que respeitem o copyleft.
 Software comercial é um software criado com o objetivo de gerar lucro para a
empresa que o criou seja pela venda de licenças ou pela utilização de anúncios no
programa. Um software comercial muito utilizado é o Windows Live Messenger
(antigo MSN Messenger). O programa é considerado um software comercial pois
embora seja propriedade da Microsoft e consequentemente, de código fechado,
ele gera lucro para a empresa através dos diversos anúncios presentes no
programa.

Existem diferentes tipos de licenças para estes softwares, a mais conhecidas são:

 Freeware: softwares gratuitos, geralmente para pessoas físicas, havendo uma


versão paga para uso corporativo. Geralmente propagandas ou patrocinadores
mantém o projeto vivo.
 Shareware: São softwares que apenas funcionam por um determinado período de
tempo (chamado período de avaliação) e depois o usuário deve decidir se adquire
ou não o produto.
 Demo e Trial: São versões limitadas. As versões demo são relacionadas a jogos e
geralmente são versões incompletas, mais curtas do jogo para que o jogador veja
se gosta do jogo, do seu universo e jogabilidade. Versões trial funcionam quase
da mesma maneira, os programas funcionam mas não de maneira completa,
geralmente não salvando ou exportando os trabalhos realizados por completo.
 Beta: Versões ainda em desenvolvimento ou em desenvolvimento constante
(como o Gmail e outras aplicações do Google). Após a versão beta é lançada uma
versão RC (Release Candidate) que é a última versão antes do lançamento oficial
do software.
 Adware: São programas que vem junto com outros programas, como banners e
barras de pesquisa. O adware pode ser uma limitação de um programa shareware,
exibindo propagandas e outros tipos de anúncio para sustentar o projeto. O banner
é removido depois de comprada a licença.
 Opensource, GPL e GNU: É uma distribuição livre, de código-fonte aberto e
disponível gratuitamente para download.
 Malware: O termo é utilizado para designar programas que tem como objetivo
invadir e danificar sistemas como vírus e cavalos-de-tróia.
 Spyware: Software que tem como objetivo monitorar as atividades do usuário e
coletar suas informações.

2.2. Smartphones

Assim como os computadores os telefones celulares também evoluíram com o decorrer


dos anos. Esses avanços ocorrem tanto em nível de hardware (processadores com maior
desempenho, memórias com maior capacidade e etc.) quanto de software (sistemas
operacionais melhores e uma diversidade maior de softwares aplicativos). Como agregou-
se muitas funcionalidades dos PDAs (Personal digital assistants - assistente pessoal
digital, também conhecido por palmtop) aos celulares foi conveniente chama-lo de
smartphone (telefone inteligente).

Os sistemas operacionais mais comuns nos smartphones atuais são:

 Android
o É um sistema operacional baseado no núcleo do Linux para dispositivos
móveis, desenvolvido pela Open Handset Alliance, liderada pelo Google
Inc.
o Utilizado por vários fabricantes de celulares, como HTC, Samsung, Sony,
Motorola, LG e etc.

Figura 26: Tela inicial de um smartphone com o Android.


 iOS
o É um sistema operacional móvel da Apple Inc. desenvolvido
originalmente para o iPhone, também é usado em iPod touch, iPad e Apple
TV.
o A Apple não permite que o iOS seja executado em hardware de terceiros.
o As versões principais do iOS são lançadas anualmente. Sua versão atual,
iOS 7, foi lançada no dia 18 de setembro de 20132 e ocupa de 1 até 1,5
GB de armazenamento do dispositivo variando para cada modelo
(aproximadamente 64% maior que o seu antecessor iOS 6).

Figura 27: iOS7 em um Iphone.

 Windows Mobile
o É um sistema operacional compacto, desenvolvido para rodar em
dispositivos móveis como Pocket PCs, Smartphones e aparelhos de
multimídia em geral. Projetado para ser capaz de realizar boa parte do que
é possível em uma versão PC do Windows, o sistema vem com um
conjunto de aplicações básicas bem conhecidas no mundo dos PCs, tais
como o Word, Excel, PowerPoint, Windows Media Player Pocket.
o Atualmente os Windows Phone são produzidos pela Samsung e pela
Nokia.

Figura 28: Windows mobile 8 embarcado em smartphone da Nokia.


2.3. Necessidade Social e o Uso de Computadores

Para resolver problemas do cotidiano e facilitar o dia a dia das pessoas, muitas
aplicações computacionais tornaram-se corriqueiras e passam despercebidas por olhos
desatentos. Por exemplo:
 Armazenamento de grandes volumes de informações e sua
recuperação em tempo hábil;
 Computação de cálculos matemáticos complexos em intervalos de
tempo relativamente muito inferiores aos modos convencionais;
 Comunicação segura, rápida e confiável;
 Automação, controle e monitoração de sistemas complexos;
 Computação rápida de cálculos repetitivos envolvendo grandes
volumes de dados;
 Processamento de voz e imagem;
 Jogos e ferramentas para suporte ao ensino/aprendizagem;
 Realidade virtual com aplicações aos fins mais diversos
(entretenimento, medicina, robótica);
 Ferramentas para suporte a projetos (arquitetura, desenho industrial
engenharias);
 Ferramentas para geoprocessamento de dados (engenharia agrícola,
agronomia, planejamento urbano, meio ambiente).

2.4. Sistema Computacional

Um sistema computacional (ou baseado em computador) é aquele que


automatiza ou apoia a realização de atividades humanas através do processamento de
informações. Ele é caracterizado pela relação de software, hardware e peopleware.
Como já foi relatado nesta apostila o software é a parte lógica do sistema, ou
seja, os programas. O hardware é a parte eletrônica e mecânica do computador, ou seja,
a parte física.
Já o peopleware são as pessoas que trabalham diretamente, ou indiretamente,
com a área de tecnologia da informação, ou mesmo com Sistema de Informação. Pode
ser um analista de sistema ou, até mesmo, um simples cliente que faz uma consulta em
um caixa eletrônico da rede bancária, como também uma atendente de um Supermercado.

Figura 29: O Sistema computacional é formado por hardware, software e peopleware.


2.5. Questões de Revisão

2.5.1. Defina hardware e software.


2.5.2. Descreva as funções dos principais componentes físicos de um
computador.
2.5.3. Quais os diferentes tipos de memória e cite as características de cada
uma.
2.5.4. Como podemos classificar os Softwares?
2.5.5. Discurse sobre os diferentes tipos de SO e indique a sua preferência,
tanto para computadores quanto para dispositivos móveis.
3. Álgebra Booleana

George Simon Boole (1815-1864) foi um matemático e filósofo britânico,


criador da álgebra booleana, fundamental para o desenvolvimento da computação
moderna.

Figura 30: George Simon Boole.

Álgebra de Boole é aplicável ao projeto dos circuitos lógicos e funciona


baseada em princípios da lógica formal, uma área de estudo da filosofia. Um dos pioneiros
no estuda da lógica formal foi Aristóteles (384-222 AC).

Boole percebeu que poderia estabelecer um conjunto de símbolos


matemáticos para substituir certas afirmativas da lógica formal. Claude B. Shannnon
(1916-2001) mostrou em 1938 que o trabalho de Boole poderia ser utilizado para
descrever a operação de sistemas de comutação telefônica.

Figura 31: Claude B. Shannon.


3.1. Logica Binária

A lógica binária é a base de todo o cálculo computacional. Na verdade, são


estas operações mais básicas que constituem todo o poderio dos computadores. Qualquer
operação, por mais complexa que pareça, é traduzida internamente pelo processador para
estas operações.

O sistema de numeração binário é o mais importante em sistemas digitais. O


sistema decimal é importante porque é universalmente usado para representar quantidades
externas a um sistema digital. Isto significa que existem situações nas quais valores
decimais devem ser convertidos para valores binários antes de entrarem num sistema
digital. Por exemplo, quando você digita um número decimal na calculadora (ou
computador), os circuitos internos do dispositivo convertem o número decimal num valor
binário.

Neste estudo convém definir as medidas comumente utilizadas na


informática:

 Bit (Binary Digit): é a menor unidade de informação que pode ser armazenada ou
transmitida. Usada na Computação e na Teoria da Informação. Um bit pode
assumir somente 2 valores, por exemplo: 0 ou 1, verdadeiro ou falso.
 Byte (Binary Term): é um dos tipos de dados integrais em computação. É usado
com frequência para especificar o tamanho ou quantidade da memória ou da
capacidade de armazenamento de um certo dispositivo, independentemente do
tipo de dados. A codificação padronizada de byte foi definida como sendo de 8
bits.

Para unidades de muitos bytes, utiliza-se os prefixos da tabela abaixo.

Tabela 4: Múltiplos do Byte. Pode-se observar os prefixos binários da IEC (Comissão Eletrotécnica
Internacional) onde 1 kibibyte = 1024 bytes. Nos múltiplos utilizandos pelo SI 1 Kilobyte = 1000 Bytes.
Múltiplos do Byte
Prefixo Binário (IEC) Prefixo do SI
Nome Símbolo Múltiplo Nome Símbolo Múltiplo
Byte B 20 byte B 100
10
Kibibyte KiB 2 Kilobyte kB 103
20
mebibyte MiB 2 megabyte MB 106
30
Gibibyte GiB 2 gigabyte GB 109
40
Tebibyte TiB 2 terabyte TB 1012
50
Pebibyte PiB 2 petabyte PB 1015
60
Exbibyte EiB 2 exabyte EB 1018
Zebibyte ZiB 270 zettabyte ZB 1021
Yobibyte YiB 280 yottabyte YB 1024

Note que a letra “B” é escrita em maiúscula, caso o símbolo esteja escrito com letra
minúscula trata-se de bit e não Byte.
3.1.1. Conversões Binário – Decimal

O sistema de numeração binário é um sistema posicional em que cada dígito


binário (bit) tem um certo peso de acordo com sua posição relativa ao LSB. Qualquer
número binário pode ser convertido para o seu equivalente decimal simplesmente
somando-se os pesos das várias posições que contiverem 1 no número binário. Para
ilustrar:

Figura 32: Conversão do número binário 11011 no seu equivalente 27 em decimal.

Vejamos outro exemplo com o maior número de bits:

Figura 33: Conversão do número binário 10110101 no seu equivalente 181 em decimal.

Note que o procedimento é determinar os pesos (isto é, as potências de 2) para


cada bit que contém 1, e então somá-los. Note também que o MSB (most significant bit -
bit mais significante) tem um peso de 27, embora seja o oitavo bit; isto acontece porque o
LSB é o primeiro e tem um peso de 20.

3.1.2. Conversões Decimal – Binário

A conversão requer repetidas divisões do número de decimal por 2 e a escrita


do resto de cada divisão até que o quociente 0 seja obtido. Note que o resultado binário é
obtido escrevendo-se o primeiro resto como o LSB e o último resto como o MSB.

Figura 34: Conversão do número decimal 25 para o seu equivalente 11001 em binário.
3.1.3. Faixa de contagem

Lembre-se de que usando N bits podemos contar 2N valores decimais


diferentes variando de 0 até 2N - 1. Por exemplo, para N = 4, podemos contar de 0000 2
até 11112, ou seja, de 010 até 1510, totalizando 16 número diferentes. O maior valor
decimal é 24 -1 = 15, e existem 24 números diferentes.
Portanto, de um modo geral, podemos afirmar: Usando N bits, podemos
representar valores decimais variando de 0 até 2N - 1, num total de 2N valores.

3.2. Sistema de Numeração Octal

O sistema de numeração octal é muito importante no trabalho com


computadores digitais. O sistema de numeração octal tem base oito, significando que tem
oito dígitos possíveis: 0, 1, 2, 3, 4, 5, 6, 7. Assim cada dígito de um número octal pode
ter valores de 0 a 7.

3.2.1. Conversão Octal – Decimal

Um número octal pode ser facilmente convertido para seu equivalente


decimal multiplicando-se cada dígito octal pelo seu peso posicional. Por exemplo:

Figura 35: Conversão do número octal 372 para o seu equivalente 250 em dicimal.

3.2.2. Conversão Decimal – Octal

Um inteiro decimal pode ser convertido para octal utilizando o mesmo


método das divisões sucessivas que foi usado na conversão decimal-binário, mas com o
fator de divisão 8 em vez de 2. Um exemplo é mostrado a seguir.

Figura 36: Conversão do número decimal 266 no seu equivalente 412 octal.
3.2.3. Conversão Octal - Binário

A principal vantagem do sistema de numeração octal é a facilidade com que


conversões podem ser feitas entre número binários e octais. A conversão de octal para
binário é realizada convertendo-se cada dígito octal nos três bits binários equivalentes.
Os oito dígitos possíveis são convertidos conforme Tabela 5.

Tabela 5: Equivalência da numeração octal com o sistema binário.


Dígito Octal 0 1 2 3 4 5 6 7
Equivalente binário 000 001 010 011 100 101 110 111

Usando essas conversões, podemos converter qualquer número octal para


binário convertendo individualmente cada dígito. Por exemplo, podemos converter 4728
para binário como segue:

Figura 37: Conversão do número octal 472 no seu equivalente binário 100111010.

3.2.4. Conversão Binário – Octal

Converter binários inteiros para octais inteiros é simplesmente o inverso do


processo anterior. Os bits do número binário são reunidos em grupos de três bits
iniciando-se pelo LSB. Então cada grupo é convertido para seu equivalente octal (Tabela
5). Para ilustrar, considere a conversão de 1001110102 para octal.

Figura 38: Conversão do binário 100111010 para o seu equivalente 472 em octal.

3.2.5. Contando em Octal

O maior dígito octal é 7, portanto na contagem em octal cada posição de dígito


é incrementada de 0 a 7. Uma vez alcançado o 7, ele retorna para 0 na próxima contagem
e causa o incremento da próxima posição de dígito mais alta. Isto é ilustrado na seguinte
sequência de contagem octal: 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, ..., 17, 20, 21, ..., 27, 30, 31, ...

Com N posições de dígitos octais, podemos contar de 0 até 8 N - 1, para um


total de 8N valores diferentes. Por exemplo, com três posições de dígitos octais podemos
contar de 0008 até 7778, ou seja, de 010 até 51110 para um total de 83 = 51210 números
octais diferentes.
3.2.6. Utilidade do Sistema Octal

A facilidade com que as conversões podem ser feitas entre octal e binário
torna o sistema octal atrativo como um modo compacto de expressar número binários
grandes. No trabalho com computadores, número binários com até 64 bits não são
incomuns e quando lidamos com uma grande quantidade de números binários, de vários
bits, é conveniente e mais eficiente escrevermos os números em octal em vez de binário.
Não devemos esquecer, no entanto, que circuitos e sistemas digitais trabalham
exclusivamente em binário; usamos octal somente por conveniência para os operadores
do sistema.

3.3. Sistema de Numeração Hexadecimal

O sistema de numeração hexadecimal usa a base 16. Assim, ele tem 16


símbolos possíveis. Ele usa os dígitos 0 a 9 mais as letras A, B, C, D, E e F como os 16
símbolos. A tabela mostra as relações entre hexadecimal, decimal e binário. Note que
cada dígito hexadecimal representa um grupo de quatro dígitos binários. É importante
lembrar que os dígitos hexadecimais A até F são equivalentes aos valores decimais 10 até
15.

Tabela 6: Relação entre os número Hexadecimais, Decimais e Binários.


Hexadecimal Decimal Binário
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
A 10 1010
B 11 1011
C 12 1100
D 13 1101
E 14 1110
F 15 1111

3.3.1. Conversão Hexadecimal – Decimal

Um número hexadecimal pode ser convertido para seu equivalente decimal


usando o fato de que cada posição de dígito hexa tem um peso que é uma potência de 16.
O LSB tem um peso de 160 = 1; a próxima posição de dígito mais alta tem um peso de
161 = 16; a próxima tem um peso de 162 = 256; e assim por diante. O processo de
conversão é demonstrado a seguir:
Figura 39: Conversão dos números hexadecimais 356 e 2AF nos seus respectivos equivalentes em
decimais 854 e 687.

Note que no segundo exemplo o valor 10 substituiu o A e o valor 15 o F na


conversão para decimal.

3.3.2. Conversão Decimal – Hexadecimal

Relembre que fizemos conversões decimal-binário usando sucessivas


divisões por 2, e decimal octal usando sucessivas divisões por 8. Do mesmo modo,
conversões decimal-hexadecimal podem ser feitas usando sucessivas divisões por 16. O
exemplo a seguir ilustra o método.

Figura 40: Conversão do número decimal 423 no seu equivalente em hexadecimal 1A7.

3.3.3. Conversão Hexadecimal – Binário

Assim como o sistema de numeração octal, o sistema de numeração


hexadecimal é usado principalmente como um método compacto para representação de
números binários. É relativamente simples converter um número hexadecimal em binário.
Cada dígito hexa é convertido para seu equivalente de quatro bits (Tabela 6). Isto é
ilustrado a seguir.
Figura 41: Conversão do número hexadecimal 9F2 no seu equivalente em binário 100111110010.

3.3.4. Conversão Binário – Hexadecimal

A conversão de binário para hexadecimal é apenas o inverso do processo


anterior. O número binário é reunido em grupos de quatro bits, e cada grupo é convertido
para seu equivalente dígito em hexa. Zeros (a esquerda) são adicionados, se necessário,
para completar um grupo de quatro bits.

Figura 42: Conversão do binário 1110100110 para o seu equivalente em hexadecimal 3A6.

As conversões podem ser realizadas rapidamente sem necessidade de


cálculos. Isto explica por que o hexa (e o octal) são tão úteis na representação de números
binários grandes.

3.3.5. Contando em Hexadecimal

Quando contamos em hexa, cada posição de dígito pode ser incrementada


(aumentada de 1) de 0 até F. Uma vez que uma posição de dígito alcance o valor F, ela
volta a 0, e a próxima posição de dígito é incrementada. Isto é ilustrado na seguinte
sequência de contagem hexadecimal: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11,
12, ..., 18, 19, 1A, ..., 1F, 20, 21, ..., 29, 2A, ..., 2F, 30, 31, ...

Note que quando existe um 9 numa posição de dígito ele se torna um A


quando incrementado.

Com N posições de dígitos hexa podemos contar de 0 a 16 N-1 em decimal,


para um total de 16N valores diferentes. Por exemplo, com três dígitos hexa podemos
contar de 00016 até FFF16, que é de 010 até 409510, para um total de 4096 = 163 valores
diferentes.

3.4. Códigos Alfanuméricos

Além de dados numéricos, um computador deve ser capaz de manipular


informação não numérica. Em outras palavras, um computador deve reconhecer códigos
que representam letras do alfabeto, sinais de pontuação e outros caracteres especiais,
como também os números. Estes códigos são chamados códigos alfanuméricos. Um
código alfanumérico completo deve incluir as 26 letras minúsculas, as 26 letras
maiúsculas, 10 dígitos numéricos, 7 sinais de pontuação, e entre 20 e 40 outros caracteres,
tais como +, /, #, %, *, e assim por diante. Podemos dizer que um código alfanumérico
representa todos os caracteres e funções encontrados num teclado de computador.

O código alfanumérico mais amplamente usado é o American Standard Code


for Information Interchante (ASCII). O código ASCII é um código de sete bits, e portanto
tem 27 = 128 codificações possíveis. Isto é mais do que suficiente para representar todos
os caracteres de um teclado padrão, como também funções de controle. A Tabela 7 mostra
uma listagem parcial do código ASCII. Além do código binário para cada caractere, a
tabela apresenta os equivalentes octal e hexadecimal.
Tabela 7: Listagem parcial do código ASCII.
3.5. Tabelas – Verdade

A tabela - verdade é uma maneira de descrever como será a saída lógica de


uma determinada combinação das entradas dependem da operação a ser realizada. A
tabela relaciona todas as combinações possíveis dos níveis lógicos presentes nas entradas
A e B com o nível correspondente da saída x.

Figura 43: Exemplos de tabelas verdade. (a) Tabela com duas variáveis de entrada (A e B). (b) Tabela
com 3 variáveis de entrada (A, B e C). (c) Tabela com 4 variáveis de entrada (A, B, C e D). Todas as
tabelas têm uma única saída x.

Na computação as operações binárias mais conhecidas são OU (OR), E


(AND) e NÃO (NOT). Estas operações também são conhecidas como operadores
booleanos.

3.5.1. Operador OR (OU)

A operação OR é a primeira das três operações booleanas básicas a ser


estudada. A tabela - verdade mostra o que acontece quando udas entradas lógicas, A e B,
são combinadas através da operação OR para produzir a saída x. A tabela mostra que x é
igual a 1 para todas as combinações dos níveis de entrada onde uma ou mais entradas são
iguais a 1. O único caso onde x é igual a 0 ocorre quando todas as entrdas são iguais a 0.

Tabela 8: Tabela verdade do operador booleano OR (OU).


A expressão booleana para a operação OR é dada por x = A + B. Nesta
expressão o sinal de + não representa a operação de adição ordinária, mas representa a
operação OR.

3.5.2. Operador AND (E)

O operação AND é a segunda operação booleana básica. A tabela verdade


que aparece abaixo mostra o que acontece com duas entradas lógicas, A e B, são
combinadas usando a operando AND para produzir a saída x. A tabela mostra que x está
em nível lógico 1 somente quando tanto A como B estão em nível lógico 1. Para qualquer
outro caso, onde uma das entradas é 0, a saída é 0.

Tabela 9: Tabela verdade do operador booleano AND (E).

A expressão booleana para a operação AND é x = A∙B. Nesta expressão, o


sinal ∙ expressa a operação AND, e não a multiplicação ordinária.

3.5.3. Operador NOT (NÃO)

A operação NOT é realizada, ao contrário das operações AND e OR, sobre


uma única entrada. Por exemplo, se a variável A é sujeita à opera NOT, o resultado x
pode ser expresso como: 𝑥 = 𝐴̅. Onde a barra sobreposta representa a operação NOT.

Tabela 10: Tabela verdade do operador booleano NOT (NÃO).

3.5.4. Teoremas da Álgebra Booleana

Até este ponto observou-se como a álgebra booleana pode ser usada para nos
ajudar a analisar uma combinação lógica e expressar sua operação matematicamente. Em
seguida poderá ser observado os teoremas booleanos que podem nos ajudar a simplificar
expressões e circuitos lógicos.

A Figura 44 ilustra os teoremas da Álgebra Booleana com apenas uma


variável enquanto a Figura 45 demonstra os teoremas para mais de uma variável.
Figura 44: Teoremas da Álgebra Booleana com uma variável.

Figura 45: Equações dos teoremas da Álgebra Booleana com mais de uma variável.

Dois dos mais importantes temoremas da álgebra booleana são atribuídos a


um grande matemático chamado DeMorgan. Os Teoremas de DeMorgan são
extremamente úteis para simplificar expressões nas quais o produto (AND) ou a soma
(OR) das variáveis é invertido. Os dois teoremas são:

Figura 46: Teoremas de DeMorgan.

Pode-se descrever algebricamente as combinações lógicas para que auxilie na


simplificação destas equações. Por exemplo, utilizando os teoremas de DeMorgan
podemos simplificar a equação 𝑍 = ̅̅̅̅̅̅̅̅̅̅
𝐴 ∙ 𝐵 ∙ 𝐶̅ da seguinte forma:

𝑍 = ̅̅̅̅̅̅̅̅̅̅
𝐴 ∙ 𝐵 ∙ 𝐶̅ = 𝐴̅ + 𝐵̅ + 𝐶̅ = 𝐴̅ + 𝐵̅ + 𝐶
Equação 1: Exemplo de simplificação utilizando os Teoremas de DeMorgan.

No próximo exemplo veremos como podemos simplificar expressões utilizando os outros


teoremas:

𝑍 = 𝐴̅𝐵𝐶̅ + 𝐴𝐵𝐶̅ + 𝐵𝐶̅ 𝐷 = 𝐵𝐶̅ (𝐴̅ + 𝐴 + 𝐷) = 𝐵𝐶̅ (1 + 𝐷) = 𝐵𝐶̅ ∙ 1 = B𝐶̅


Equação 2: Exemplo de simplificação utilizando os teoremas (13a), (8) e (6).
3.6. Questões de Revisão

3.6.1. Converta 1000110110112 para seu equivalente decimal.


3.6.2. Qual a faixa de valores decimais que pode ser representada com oito bits?
3.6.3. Quantos bits são necessários para representar valores decimais variando de
0 até 12500?
3.6.4. Converta 8310 para binário.
3.6.5. Converta 72910 para binário.
3.6.6. Quantos bits são necessários para contar até 1 milhão em decimal?
3.6.7. Converta 6148 para decimal.
3.6.8. Converta 14610 para octal, e então de octal para binário.
3.6.9. Converta 100111012 para octal.
3.6.10. Escrever os três próximos números nesta sequência de contagem octal:
624, 625, 626, _____, _____, _____.
3.6.11. Converta 97510 para binário, convertendo-o primeiramente para octal.
3.6.12. Converta o binário 1010111011 para decimal, convertendo-o
primeiramente para octal.
3.6.13. Qual é a faixa de valores decimais que pode ser representada por um
número octal de quatro dígitos?
3.6.14. Converta 1BC216 para decimal.
3.6.15. Converta 24CE16 para decimal.
3.6.16. Converta 311710 para hexa, e depois para binário.
3.6.17. Converta 10010111101101012 para hexa.
3.6.18. Escreva os próximos quatro números nesta sequência de contagem hexa:
E9A, E9B, E9C, E9D, _____, _____, _____, _____.
3.6.19. Converta 35278 para hexa.
3.6.20. Qual é a faixa de valores decimais que pode ser representada por um
número hexa de quatro dígitos.
3.6.21. Quantos bytes existem numa cadeia de 32 bits?
3.6.22. Qual é o maior valor decimal representado em binário usando dois bytes?
3.6.23. Quantos bytes são necessários para representar 23510 em binário?
3.6.24. A mensagem a seguir é uma mensagem codificada em código ASCII. Qual
é a mensagem? 1001000 1000101 1001100 1010000
3.6.25. Quantas linhas deve ter uma tabela para representar um circuito de cinco
entradas?
3.6.26. Qual é a única combinação de valores das entradas que produz um nível
BAIXO na saída de qualquer porta OR?
3.6.27. Qual a única combinação de entrada que irá produzir um nível ALTO na
saída de uma porta AND de cinco entradas?
3.6.28. Falsou ou verdadeiro: A saída de uma porta AND sempre difere da saída
de uma porta OR para as mesmas condições de entrada?
3.6.29. Usando os teoremas booleanos simplifique a expressão y = A𝐵̅D +
A𝐵̅𝐷̅.
3.6.30. Usando os teoremas booleanos simplifique a expressão 𝑧 = (𝐴̅ + 𝐵)(𝐴 +
𝐵).
3.6.31. Usando os teoremas de DeMorgan simplifique a expressão 𝑧 =
̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅
(𝐴̅ + 𝐶) ∙ (𝐵 + 𝐷 ̅ ).
4. Lógica de Programação

Primeiramente, é importante entender a palavra “problema”. Pode-se dizer


que problema é uma proposta duvidosa, que pode ter numerosas soluções, ou questão não
solvida e que é objeto de discussão, segundo definição encontrada no dicionário Aurélio.

Do ponto de vista deste trabalho, problema é uma questão que foge a uma
determinada regra, ou melhor, é o desvio de um percurso, o qual impede de atingir um
determinado objetivo com eficiência e eficácia.

Diferente das diagramações clássicas, que não fornecem grandes subsídios


para análise, os diagramas de blocos são realmente o melhor instrumento para avaliação
do problema do fluxo de informações de um dado sistema. Por esse motivo deve-se
resolver um problema de lógica usando um procedimento de desenvolvimento.

4.1. Formas de Representação Gráfica

As formas de representação gráfica são nada mais do que uma maneira mais
simples e concisa de representar os dados sobre uma superfície plana, por meio de
diferentes formas, de modo a facilitar a visualização completa e imediata de dados ou
fenômenos tabulados.

Sabe-se que existe uma grande variedade de símbolos usados nas mais
diversas áreas administrativas, bem como dentro das áreas técnicas da Tecnologia da
Informação, tais como: programação, teleprocessamento, análise de sistemas, etc.

A seguir alguns dos símbolos mais conhecidos e utilizados ao longo dos anos
pelos profissionais de processamento de dados.
4.2. Princípios de Resolução de Problemas

Para desenvolver um diagrama correto, deve-se considerar como


procedimentos prioritários os itens seguintes:

 Os diagramas devem ser feitos e quebrados em vários níveis. Os primeiros devem


conter apenas as ideias gerais, deixando para as etapas posteriores os
detalhamentos necessários;
 Para o desenvolvimento correto de um fluxograma, sempre que possível, deve ser
desenvolvido de cima para baixo e da esquerda para direita;
 É incorreto e “proibido” ocorrer cruzamento das linhas de fluxo de dados.

Tomando como exemplo uma escola qualquer, cujo cálculo da média é


realizado com as quatro notas bimestrais que determinam a aprovação ou reprovação dos
seus alunos. Considere ainda que o valor da média deve ser maior ou igual a 7 para que
haja aprovação. A primeira etapa deste problema via diagrama de blocos está na figura a
seguir.
Figura 47: Diagrama de bloco para o cálculo da média escolar.

A segunda etapa apresenta um detalhamento no que se refere à entrada e


saída, ou seja, deve-se entrar com as quatro notas bimestrais para se obter, como
resultado, o cálculo da média e assim definir a aprovação ou reprovação do aluno. A
figura a seguir apresenta o diagrama de blocos com mais detalhes.

Figura 48: Diagramas apresentando a entrada das notas e saída se houve aprovação.

A terceira etapa consiste em trabalhar o termo “determinar a aprovação”. Para


ser possível determinar algo, é necessário estabelecer uma condição. Assim sendo, uma
condição envolve uma decisão a ser tomada segundo um determinado resultado. No caso,
a média. Desta forma, a condição de aprovação: média maior ou igual a 7, deve ser
considera no algoritmo.
Figura 49: Uso de uma condição em um diagrama de blocos.

Muitas vezes é preferível construir o diagrama de blocos trabalhando com


variáveis. Este assunto será estudado mais adiante. A figura a seguir apresenta um
exemplo de um algoritmo utilizando variáveis.

Figura 50: Exemplo da utilização das variáveis.


4.3. Português Estruturado

Como foi visto até agora, o diagrama de blocos é a primeira forma de notação
gráfica, mas existe outra, que é uma técnica narrativa denominada pseudocódigo,
também conhecida como português estruturado ou chamada por alguns de portugol.

Esta técnica de algoritmização é baseada em uma PDL – Program Design


Language (Linguagem de Projeto de Programação). A PDL (neste caso, o português
estruturado) é usado como referência genérica para uma linguagem de projeto de
programação, tendo como finalidade mostrar uma notação para elaboração de algoritmos,
os quais serão utilizados na definição, criação e desenvolvimento em uma linguagem
computacional (Cobol, Fortran, C, Pascal, Delphi, Visual-Basic, etc.). A seguir vemos
um exemplo deste tipo de algoritmo.

4.4. Conceito de Variável

Uma variável representa uma posição de memória, possuindo nome e tipo,


cujo conteúdo pode variar ao longo do tempo, durante a execução de um programa.
Embora uma variável possa assumir diferentes valores, ela só pode armazenar um valor
a cada instante.
4.4.1. Tipo de dados

Os dados são representados pelas informações a serem tratadas (processadas)


por um computador. Essas informações estão caracterizadas por três tipos de dados, a
saber: dados numéricos (inteiros e reais), dados caracteres e dados lógicos.

4.4.1.1. Tipos Inteiros

São caracterizados como tipos inteiros os dados numéricos positivos ou


negativos, excluindo-se destes qualquer número fracionário. Como exemplo deste tipo de
dado têm-se os valores: 35, 0, -56, entre outros.

Ocupa 2 bytes de memória, ou seja, 28 × 28 = 216 = 65536 possibilidades


de representação, variando de -32767 a 32768.

4.4.1.2. Tipos Reais

São caracterizados como tipos reais os dados numéricos positivos, negativos


e números fracionários. Como exemplo deste tipo de dado têm-se os valores: 35, 0, -56,
1.2, 45.897, entre outros. (Observe que quando estamos tratando números em programas
devemos utilizar a notação inglesa e substituir a vírgula pelo ponto flutuante).

Ocupa 4 bytes de memória, ou seja, 28 × 28 × 28 × 28 = 232 possibilidades


de representação, possuindo de 6 a 11 dígitos significativos com sinal.

4.4.1.3. Tipos Literais

São caracterizados como tipos literais às sequências contendo letras, números


(não podem ser usados para cálculos) e símbolos especiais. Uma sequência de caracteres
deve ser indicada entre aspas (“ ”). Este tipo de dado é também conhecido como:
alfanumérico, string, caracter ou cadeia. Como exemplo deste tipo de dado, tem-se os
valores: “media”, “Rua Figueiredo Oliveira, 52 Apto 34”, “Fone: 5560-6637”, “0”, “734
48”, “Fernanda”, entre outros.

Este tipo de dado ocupa 1 byte para cada caractere.

4.4.1.4. Tipos Lógicos

São caracterizados como tipos lógicos os dados com valores verdadeiro e


falso, sendo que este tipo de dado poderá representar apenas um dos valores. Ele é
chamado por alguns de tipo booleano, devido à contribuição do filósofo e matemático
inglês George Boole na área da lógica matemática.

Este tipo de dado ocupa um espaço de 1 byte, possuindo apenas duas


possibilidades de representação.

4.5. O Uso de Variáveis


Tem-se como definição de variável tudo aquilo que é sujeito a variações, que
é incerto, instável ou inconstante. E quando se fala de computadores, temos que ter em
mente que o volume de informações a serem tratadas é grande e diversificado. Desta
forma, os dados a serem processados serão bastante variáveis.

Todo dado a ser armazenado na memória de um computador deve ser


previamente identificado, ou seja, primeiro é necessário saber qual o seu tipo para depois
fazer o seu armazenamento adequado. Estando armazenado o dado desejado, ele poderá
ser utilizado e manipulado a qualquer momento.

Para utilizar o conceito de variável, imagine que a memória de um


computador é um grande arquivo com várias gavetas, sendo que cada gaveta pode apenas
armazenar um único valor (seja ele numérico, lógico ou caractere). Se for um grande
arquivo com várias gavetas, você há de concordar que é necessário identificar com um
nome a gaveta que se pretende utilizar. Desta forma o valor armazenado pode ser utilizado
a qualquer momento.

O nome de uma variável é utilizado para sua identificação e posterior uso


dentro de um programa. Sendo assim, é necessário estabelecer algumas regras de
utilização das variáveis:

 Nomes de uma variável poderão ser atribuídos com um ou mais caracteres;


 O primeiro caractere do nome de uma variável não poderá ser, em hipótese
alguma, um número; sempre deverá ser uma letra;
 O nome de uma variável não poderá possuir espaços em branco;
 O nome de uma variável não poderá ser uma palavra reservada (uma instrução ou
comando);
 Não poderão ser utilizados outros caracteres a não ser letras, números e
sublinhado.

São nomes válidos de variáveis: NOMEDOUSUARIO, telefone, x, z,


delta_25, z1, entre outros. São nomes inválidos de variáveis: NOME DO USUARIO,
25_delta, telefone#, escreva (é uma palavra reservada, no caso do Portugol.

Devemos ainda considerar que dentro de um programa uma variável pode


exercer dois papéis. Um de ação, quando é modificada ao longo de um programa para
apresentar um determinado resultado, e o segundo de controle, a qual poderá ser “vigiada”
e controlada durante a execução de um programa.

4.6. Operadores Aritméticos

Tanto variáveis como constantes poderão ser utilizadas na elaboração de


cálculos matemáticos, ou seja, na elaboração de expressões aritméticas, desde que estejam
estabelecidas como do tipo real ou inteira, e para que isto ocorra é necessário à utilização
de operadores aritméticos.

Os operadores aritméticos são classificados em duas categorias, sendo


binários ou unários. São binários quando atuam em operações de exponenciação,
multiplicação, divisão, adição e subtração. São unários quando atuam na inversão de um
valor, atribuindo a este o sinal positivo ou negativo. Veja em seguida, a tabela de
prioridade matemática existente quando da utilização destes operadores:

Tabela 11: Prioridades nas operações matemáticas.

4.7. As Expressões Aritméticas

É muito comum lidarmos com expressões aritméticas, uma vez que a maior
parte do todo trabalho computacional está relacionado e envolve a utilização de cálculos.
Estas expressões são definidas pelo relacionamento existente entre variáveis e constantes
numéricas por meio da utilização dos operadores aritméticos.

As expressões aritméticas escritas em computação seguem um formato um


pouco diferente da forma conhecida em matemática. Por exemplo à expressão 𝑋 = {43 ∙
[55 ÷ (30 + 2)]}: é escrita em Portugol como: 𝑋 < −(43 ∗ (55/(30 + 2))). Perceba
que as chaves e colchetes são abolidos, utilizando-se em seu lugar apenas os parênteses.
É também substituído o sinal de igual (=) pelos símbolos (<-) que estão no sentido de
implicado ou atribuído.

O sinal implicado ou atribuído (<-) é utilizado para indicar que o valor de uma
expressão aritmética ou fórmula matemática está sendo armazenado em uma variável. No
caso da fórmula para o cálculo de área de um circunferência, ela é escrita em Portugol da
seguinte forma: 𝐴𝑅𝐸𝐴 < − 3.14159 ∗ RAIO ∗ RAIO.

E se a fórmula a ser utilizada fosse para efetuar o cálculo da área de um


triângulo, em que é necessário efetuar a multiplicação da base pela altura e em seguida
dividir pela constante 2, ela deveria ser escrita como: AREA < − (BASE ∗ ALTURA) /
2.

4.8. Entrada e Saída de Dados

Para criar um programa que seja executável dentro de um computador, deve-


se ter em mente três pontos de trabalho: a entrada de dados, o seu processamento e a saída
deles. Sendo assim, todo programa estará trabalhando com estes três conceitos. Se os
dados forem entrados de forma errada, serão consequentemente processados de forma
errada e resultarão em respostas erradas.

Uma entrada e uma saída podem ocorrer dentro de um computador de


diversas formas. Por exemplo, uma entrada pode ser feita por teclado, modem, leitores
óticos, disco, entre outras formas. Devido à grande variedade, nossos programas utilizam
as instruções leia( ) (para a entrada de dados) e escreva( ) (para a saída de dados),
considerando que toda entrada vai ser via teclado e a saída via vídeo.

Figura 51: Estruturas dos símbolos para as instruções leia e escreva.

Serão colocados em prática os conceitos estudados até este momento.


Considere o seguinte exemplo de um problema: “Deverá ser criado um programa que
efetue a leitura de dois valores numéricos. Faça a operação de soma entre os dois valores
e apresente o resultado obtido”.

Note que sempre estaremos diante de um problema, o qual deverá ser


resolvido primeiro por nós, para que depois seja resolvido por um computador. O que
queremos dizer é que primeiro você deve entender bem o problema, para depois buscar a
sua solução dentro de um computador, ou seja, você deverá “ensinar” a máquina a
resolver o seu problema, por meio de um programa. Desta forma, o segredo de uma boa
lógica está na compreensão adequada do problema a ser solucionado.

Com relação ao problema proposto, deverá ser primeiro muito bem


interpretado. Isto ocorre com o auxílio de uma ferramenta denominada algoritmo, que
deverá estabelecer todos os passos necessários a serem cumpridos na busca de uma
solução para um problema. Lembre-se de que um algoritmo é na verdade uma “receita”
de como fazer.

Para tanto, observe a estrutura do algoritmo com relação ao problema da


leitura dos dois valores (que não conhecemos e também não precisamos conhecer, pois
neste caso utilizaremos duas variáveis para trabalhar estas incógnitas A e B) e a sua
respectiva soma (consequência dos valores informados, a qual também é uma incógnita
e depende dos valores fornecidos; utilizaremos para esta a variável X).

Algoritmo:

1. Ler dois valores, no caso variáveis A e B;


2. Efetuar a soma das variáveis A e B, implicando o seu resultado na variável
X;
3. Apresentar o valor da variável X após a operação de soma dos dois valores
fornecidos.
Perceba que o algoritmo é transcrição (interpretação) passo a passo de um
determinado problema. É como ter um problema matemático: “João foi à feira com R$
20,00, comprou uma dúzia de laranjas por R$ 5,00. Com quanto João voltou para casa?”.
Na verdade, o que interessa não é o fato ocorrido com João e sim efetuar os cálculos
necessários para se saber quanto sobrou na mão de João. Em processamento de dados é
parecido, pois precisamos somente efetuar o levantamento das variáveis e saber o que
fazer com elas.

Um detalhe a ser observado é que um algoritmo poderá ser feito de várias


formas, não necessariamente como exposto acima, pois ele é a interpretação do problema.
Acima está sendo utilizada a forma mais comum para iniciar o entendimento de um
problema. A seguir, você terá contato com outras formas de estabelecer algoritmos: o
Diagrama de Blocos e o Português Estruturado. Todas esta formas têm em comum buscar
a solução de um problema, separando-o em pequenas partes para facilitar a sua
compreensão.

Figura 52: Diagrama de blocos para a leitura, soma de dois valores e apresentação dos resultados.

Tendo estabelecido os passos anteriores (algoritmos e diagrama de blocos),


será efetuada a fase de codificação. Esta fase obedece ao que está definido no diagrama
de blocos, pois é ele a representação gráfica da lógica de um programam. Porém, sempre
deverá ser relacionado com todas as variáveis que serão utilizadas dentro do programa.
Este relacionamento, além de definir os tipos de dados que serão utilizados, define
também o espaço de memória que será necessário para manipular as informações
fornecidas durante a execução de um programa.

Desta forma, são utilizadas no exemplo três variáveis: A, B e X, sendo que


deverão ser relacionadas antes do seu uso, estabelecendo-se assim o seu respectivo tipo.
Desta forma, são utilizadas no exemplo três variáveis: A, B e X, sendo que
deverão ser declaradas antes do início do algoritmo propriamente dito, estabelecendo-se
assim o seu respectivo tipo.

Tendo relacionado todas as variáveis que serão utilizadas no programa com o


instrução var, passa-se para a fase de montagem do que está estabelecido no diagrama de
bloco, ou seja, de tudo que está relacionado entre os símbolos Terminal (indicação de
início e fim do diagrama de bloco, sendo este, por conseguinte, um bloco de programa).
Observe que o bloco de instruções de programa, indicado entre as instruções início e fim,
é apresentado deslocado um pouco para a direita. Este estilo de escrita deve ser obedecido,
para facilitar a leitura de um bloco de programa, recebendo o nome de endentação.

Após a leitura dos valores para as variáveis A e B, eles serão somados e


implicados (<-) na variável X, a qual será apresentada com o valor da soma processada.

4.9. VisuAlg

O VisuAlg (Visualizador de Algoritmo) é um programa que edita, interpreta


e executa algoritmos com uma linguagem próxima do português estruturado como um
programa normal de computador.

Um bom recurso para quem está iniciando no aprendizado de algoritmos, não


só para praticar a sua criação mas também para melhor entender sua execução, através do
visualizador de variáveis que funciona como um depurador.

O Visualg atualmente encontra-se na versão 2.5 e possui recursos como


simulação da "tela" do computador, visualização de variáveis, breakpoints, ajuda on-line,
impressão dos fontes e outras características que auxiliam o aprendizado das técnicas de
programação.
Figura 53: Tela Inicial do VisuAlg.

Após escrever o algoritmo em portugol pode-se escolher duas formas para


executar o programa: pressionando o botão F9 para executar o programa inteiro ou
pressionando a tecla F8 para executar o programa pausadamente, ou seja, executar uma
linha por vez.

Para mais informações acesse o site oficial do programa:


http://www.apoioinformatica.inf.br/visualg/linguagem.htm.

4.10. Exercícios

4.10.1. Escreva as expressões abaixo na forma da sintaxe do Português


Estruturado.

4.10.2. Classifique os conteúdos das variáveis a seguir de acordo com seu tipo,
assinalando com I para inteiros, R para reais, L para lógicos e C para literais:
4.10.3. Assine com um X os nomes de variáveis válidos:

4.10.4. No seguinte programa em Portugol existe algum erro? Onde?

4.10.5. Qual a diferença existente nas seguintes atribuições?

4.10.6. Desenvolva os algoritmos, seus respectivos diagrama de blocos e sua


codificação em Português Estruturado.

a) Desenvolver a lógica para um programa que efetue o cálculo da área de uma


circunferência, apresentado a medida da área calculada.

b) Construir um programa que efetue o cálculo do salário líquido de um professor.


Para fazer este programa, você deverá possuir alguns dados, tais como: valor da
hora aula, número de horas trabalhadas no mês e percentual de desconto do INSS.
Em primeiro lugar, deve estabelecer qual será o seu salário bruto para efetuar o
desconto a ter o valor do salário líquido.

c) Ler uma temperatura em graus Celsius e apresentá-la convertida em graus


Fahrenheit. A fórmula de conversão é F (9 * C + 160) / 5, sendo F a temperatura
em Fahrenheit e C a temperatura em Celsius.
d) Ler uma temperatura em graus Fahrenheit e apresentá-la convertida em graus
Celsius. A fórmula de conversão é C (F - 32) * (5/9) , sendo F a temperatura em
Fahrenheit e C a temperatura em Celsius.

e) Calcular e apresentar o valor do volume de uma lata de óleo, utilizando a fórmula:


Volume¬p *Raio2 * Altura

f) Efetuar o cálculo da quantidade de litros de combustível gasta em uma viagem,


utilizando um automóvel que faz 12 Km por litro. Para obter o cálculo, o usuário
deve fornecer o tempo gasto (TEMPO) e a velocidade média (VELOCIDADE)
durante a viagem. Desta forma, será possível obter a distância percorrida com a
fórmula DISTANCIA TEMPO * VELOCIDADE. Possuindo o valor da distância,
basta calcular a quantidade de litros de combustível utilizada na viagem com a
fórmula LITROS_USADOS DISTANCIA / 12. Ao final, o programa deve
apresentar os valores da velocidade média (VELOCIDADE), tempo gasto na
viagem (TEMPO), a distancia percorrida (DISTANCIA) e a quantidade de litros
(LITROS_USADOS) utilizada na viagem.

g) Efetuar o cálculo e a apresentação do valor de uma prestação em atraso, utilizando


a fórmula PRESTACAO VALOR + (VALOR * TAXA/100) * TEMPO).

h) Ler dois valores (inteiros, reais ou caracteres) para as variáveis A e B, e efetuar a


troca dos valores de forma que a variável A passe a possuir o valor da variável B
e a variável B passe a possuir o valor da variável A. Apresentar os valores trocados

i) Ler quatro números inteiros e apresentar o resultado da adição e multiplicação,


baseando-se na utilização do conceito da propriedade distributiva. Ou seja, se
forem lidas as variáveis A, B, C, e D, devem ser somadas e multiplicadas A com
B, A com C e A com D. Depois B com C, B com D e por fim C com D. Perceba
que será necessário efetuar seis operações de adição e seis operações de
multiplicação e apresentar doze resultados de saída.

j) h) Elaborar um programa que calcule e apresente o volume de uma caixa


retangular, por meio da fórmula VOLUME COMPRIMENTO * LARGURA *
ALTURA.

k) Ler dois inteiros (variáveis A e B) e imprimir o resultado do quadrado da diferença


do primeiro valor pelo segundo.

l) Elaborar um programa que efetue a apresentação do valor da conversão em real


de um valor lido em dólar. O programa deve solicitar o valor da cotação do dólar
e também a quantidade de dólares disponível com o usuário, para que seja
apresentado o valor em moeda brasileira.

m) Elaborar um programa que efetue a apresentação do valor da conversão em dólar


de um valor lido em real. O programa deve solicitar o valor da cotação do dólar e
também a quantidade de reais disponível com o usuário, para que seja apresentado
o valor em moeda americana. l) Elaborar um programa que efetue a leitura de três
valores (A, B e C) e apresente como resultado final à soma dos quadrados dos três
valores lidos.

n) Elaborar um programa que efetue a leitura de três valores (A,B e C) e apresente


como resultado final o quadrado da soma dos três valores lidos.

o) Elaborar um programa de computador que efetue a leitura de quatro valores


inteiros (variáveis A, B, C e D). Ao final o programa deve apresentar o resultado
do produto (variável P) do primeiro com o terceiro valor, e o resultado do produto
(variável P) do primeiro com o terceiro valor, e o resultado da soma (variável S)
do segundo com o quarto valor.

p) Ler o valor correspondente ao salário mensal (variável SM) de um trabalhador e


também o valor do percentual de reajuste (variável PR) a ser atribuído. Apresentar
o valor do novo salário (variável NS).

q) Em uma eleição sindical concorreram ao cargo de presidente três candidatos (A,


B e C). Durante a apuração dos votos foram computados votos nulos e votos em
branco, além dos votos válidos para cada candidato. Deve ser criado um programa
de computador que efetue a leitura da quantidade de votos válidos para cada
candidato, além de efetuar também a leitura da quantidade de votos nulos e votos
em branco. Ao final o programa deve apresentar o número total de eleitores,
considerando votos válidos, nulos e em branco; o percentual correspondente de
votos válidos em relação à quantidade de eleitores; o percentual correspondente
de votos válidos do candidato A em relação à quantidade de eleitores; o percentual
correspondente de votos válidos do candidato B em relação à quantidade de
eleitores; o percentual correspondente de votos válidos do candidato C em relação
à quantidade de eleitores; o percentual correspondente de votos nulos em relação
à quantidade de eleitores; e por último o percentual correspondente de votos em
branco em relação à quantidade de eleitores.
5. Estrutura de Controle – Tomada de Decisões

Foi visto anteriormente como trabalhar com entradas, processamentos e


saídas com a utilização de variáveis, constantes e operadores aritméticos. Apesar de já se
conseguir solucionar problemas e transforma-los em programas, os recursos até aqui
estudados são limitados, pois haverá momentos em que um determinado valor dentro de
um programa necessitará ser tratado para se efetuar um processamento mais adequado.
Imagine a seguinte situação: um programa que apresente a média escolar de um aluno.
Até aqui, muito simples, mas além de calcular a média, o programa deve apresentar se
ele está aprovado ou reprovado segundo a análise de sua média. Observe que aqui será
necessário verificar a média do aluno para então tomar uma decisão no sentido de
apresentar a sua real situação: aprovado ou reprovado

Para solucionar o problema proposto, é necessário trabalhar uma nova


instrução: se..entao...fimse. A instrução se...entao...fimse tem por finalidade tomar uma
decisão. Sendo a condição verdadeira, serão executadas todas as instruções que estejam
entre a instrução se...entao e a instrução fimse. Sendo a condição falsa, serão executadas
as instruções que estejam após o comando fimse.

Figura 54: Estrutura do símbolo para a instrução se...então...fimse.

No português estruturado esta instrução será representada da seguinte forma:

Como um exemplo, considere o seguinte problema: “Ler dois valores


numéricos, efetuar a adição e apresentar o seu resultado caso o valor somado seja maior
que 10”.
Algoritmo:

1. Conhecer dois valores incógnitos (estabelecer variáveis A e B);


2. Efetuara a soma dos valores incógnitos A e B, implicando o valor da soma
na variável X;
3. Apresentar o valor da soma contido na variável X, caso o valor de X seja
maior que 10.

Figura 55: Fluxograma para a resolução deste problema.

Em portugol a solução deste problema fica da seguinte forma:


Observe que após a definição dos tipos de variáveis, é solicitada a leitura dos
valores para as variáveis A e B, depois esses valores são implicados na variável X, a qual
possui o resultado da adição dos dois valores. Neste ponto, é questionado no programa
uma condição que permitirá imprimir o resultado da soma caso esta seja maior que 10, e
não sendo, o programa é encerrado sem apresentar a referida soma, uma vez que a
condição é falsa.

5.1. Operadores Relacionais

Ao ser utilizada a instrução se...entao...fimse, ela implica na utilização de


condições para verificar o estado de uma determinada variável quando verdadeiro ou
falso. Observe que para a condição do exemplo anterior foi utilizado o sinal > (maior que)
para verificar o estado da variável quanto ao seu valor. Sendo assim, uma condição
também poderá ser verificada como: diferente de, igual a, menor que, maior ou igual a e
menor ou igual ª Estas verificações são efetuadas com a utilização dos chamados
operadores relacionais, conforme tabela seguinte:

5.2. Desvio Condicional Composto

Já foi visto como fazer uso da instrução se...entao...fimse. Agora você


aprenderá a fazer uso da instrução se...entao...senao...fimse, em que sendo a condição
Verdadeira, é executada a instrução que estiver posicionada logo após a instrução entao.
Sendo Falsa, é executada a instrução que estiver posicionada logo após a instrução senao.
Figura 56: Estrutura do símbolo para a instrução se...entao...senao...fimse.

Em português estruturado esta instrução ficará da seguinte forma:

Para um exemplo da utilização desta estrutura considere o seguinte problema:


“Ler dois valores numéricos, efetuar a adição. Caso o valor somado seja maior ou igual a
10, este deve ser apresentado somando-se a ele mais 5. Caso o valor somado não seja
maior ou igual a 10, este deve ser apresentado subtraindo-se 7”.

Algoritmo:

1. Conhecer dois valores (variáveis A e B);


2. Efetuar a soma dos valores A e B e implicar o valor da soma em X;
3. Verificar se X é maior ou igual a 10; caso sim, mostre X + 5, senão, mostre
X – 7.
Figura 57: Fluxograma para a resolução deste problema.

No portugol a solução deste problema devará ser apresentada da seguinte


forma:

Observe que após a definição dos tipos de variáveis, é solicitada a leitura dos
valores para as variáveis A e B, depois esses valores são implicados na variável X, a qual
possui o resultado da adição dos dois valores. Neste ponto, é questionado no programa
uma condição que permitirá imprimir o resultado da soma adicionado de 5, caso esta seja
maior ou igual a 10, e não sendo, o programa apresentará o resultado subtraindo 7.
5.3. Desvios Condicionais Encadeados

Existem casos em que é necessário estabelecer verificação de condições


sucessivas, em que uma determinada ação poderá ser executada se um conjunto anterior
de instruções ou condições for satisfeito. Sendo a ação executada, ela poderá ainda
estabelecer novas condições. Isto significa utilizar uma condição dentro de outra
condição. Este tipo de estrutura poderá possuir diversos níveis de condição, sendo
chamadas de aninhamentos ou encadeamentos.

Figura 58: Estrutura condicional composta ou encadeada.

No português estruturado ele ficará da seguinte forma:

Para um exemplo da utilização desta estrutura considere o seguinte problema:


“Elaborar um programa que efetue o cálculo do reajuste de salário de um funcionário.
Considere que o funcionário deverá receber um reajuste de 15% caso seu salário seja
menor que 500. Se o salário for maior ou igual a 500, mas menor ou igual a 1000, seu
reajuste será de 10%; caso seja inda maior que 1000, o reajuste deverá ser de 5%”. Veja
o algoritmo, diagrama de blocos e a codificação em Português Estruturado.

Algoritmo:
Perceba que o problema em questão estabelece três condições para calcular o
reajuste do salário do funcionário, sendo:
• Salário < 500, reajuste será de 15%
• Salário >= 500, mas <= 1000, reajuste será de 10%
• Salário > 1000, reajusto será de 5%

Estas condições deverão estar encadeadas, pois todas as possibilidades de


reajuste deverão ser cercadas.
1. Definir uma variável para o salário reajustado: NOVO_SALARIO;
2. Ler um valor para a variável SALARIO;
3. Verificar se o valor do SALARIO < 500, se sim reajustar em 15%;
4. Verificar se o valor do SALARIO <= 1000, se sim reajustar em 10%;
5. Verificar se o valor do SALARIO > 1000, se sim reajustar em 5%;
6. Apresentar o valor reajustado, implicando em NOVO_SALARIO.

Figura 59: Exemplo de utilização de uma estrutura condicional encadeada.


Observe que a referência feita na linha 5 do algoritmo não é escrita no
diagrama de bloco e nem em Português Estruturado, uma vez que ela fica subentendida,
ou seja, qualquer valor que não seja menor que 500 ou que não esteja situado na faixa de
500 a 1000 está, consequentemente, acima de 1000.

5.4. Operadores Lógicos

Há ocasiões em que é necessário trabalhar com o relacionamento de duas ou


mais condições ao mesmo tempo na mesma instrução se...entao, e efetuar deste modo
testes múltiplos. Para esses casos é necessário empregar os operadores lógicos, também
conhecidos como operadores booleanos. Os operadores lógicos são três: E, OU e NAO.
Em alguns casos, o uso de operadores lógicos evita a utilização de muitas instruções
se...entao encadeadas.

A seguir observe alguns programas com estes operadores:


5.5. Exercícios

5.5.1. Resolva as expressões lógicas, determinando se a expressão é verdadeira


ou falsa:

5.5.2. Determine o resultado lógico das expressões mencionadas, indicando se


são verdadeiras ou falsas. Considere para as respostas os seguintes valores
x=1, a=3, b=5, c=8 e d=7:
5.5.3. Indique a saída dos trechos de programas em português estruturado,
mostrados abaixo. Para as saídas considere os seguintes valores: a=2, b=3,
c=5 e d=9.
5.5.4. Desenvolva os algoritmos, seus respectivos diagramas de bloco e sua
codificação em Português Estruturado:

(a) Ler dois valores numéricos inteiros e apresentar o resultado da diferença


do maior pelo menor valor.

(b) Efetuar a leitura de um valor inteiro positivo ou negativo e apresentar o


número lido como sendo um valor positivo, ou seja, o programa deverá
apresentar o módulo de um número fornecido. Lembre-se de verificar se
o número fornecido é menor que zero; sendo, multiplique-o por -1.

(c) Ler quatro valores referentes a quatro notas escolares de um aluno e


imprimir uma mensagem dizendo que o aluno foi aprovado, se o valor da
média escolar for maior ou igual a 5. Se o aluno não foi aprovado, indicar
uma mensagem informando esta condição. Apresentar junto das
mensagens o valor da média do aluno para qualquer condição.

(d) Ler quatro valores referentes a quatro notas escolares de um aluno e


imprimir uma mensagem dizendo que o aluno foi aprovado, se o valor da
média escolar for maior ou igual a 7. Se o valor da média for menor que
7, solicitar a nota de exame, somar com o valor da média e obter nova
média. Se a nova média for maior ou igual a 5, apresentar uma mensagem
dizendo que o aluno foi aprovado em exame. Se o aluno não foi aprovado,
indicar uma mensagem informando esta condição. Apresentar com as
mensagens o valor da média do aluno, para qualquer condição.

(e) Efetuar a leitura de três valores (variáveis A, B e C) e efetuar o cálculo da


equação completa de segundo grau, apresentando as duas raízes, se para
os valores informados for possível efetuar o referido cálculo. Lembre-se
de que a variável A deve ser diferente de zero.

(f) Efetuar a leitura de três valores (variáveis A, B e C) e apresentá-los


dispostos em ordem crescente.

(g) Efetuar a leitura de quatro números inteiros e apresentar os números que


são divisíveis por 2 e 3.

(h) Efetuar a leitura de cinco números inteiros e identificar o maior e o menor


valores.

(i) Elaborar um programa que efetue a leitura de um número inteiro e


apresentar uma mensagem informando se o número é par ou ímpar.

(j) Elaborar um programa que efetue a leitura de um valor que esteja entre a
faixa de 1 a 9. Após a leitura do valor fornecido pelo usuário, o programa
deverá indicar uma de duas mensagens: "O valor está na faixa permitida",
caso o usuário forneça o valor nesta faixa, ou a mensagem "O valor está
fora da faixa permitida", caso o usuário forneça valores menores que 1 ou
maiores que 9.

(k) Elaborar um programa que efetue a leitura de um determinado valor


inteiro, e efetue a sua apresentação, caso o valor não seja maior que três.

(l) Elaborar um programa que efetue a leitura do nome e do sexo de uma


pessoa, apresentando com saída uma das seguintes mensagens: "Ilmo Sr.",
se o sexo informado como masculino, ou a mensagem "Ilma Sra.", para o
sexo informado como feminino. Apresente também junto da mensagem de
saudação o nome previamente informado.
6. Estruturas de Controle – Laços ou Malhas de Repetição

Existem ocasiões em que é necessário efetuar a repetição de um trecho de


programa um determinado número de vezes. Neste caso, poderá ser criado um looping
que efetue o processamento de um determinado trecho, tantas vezes quantas forem
nececessárias. Os loopings também são chamados de laços de repetição ou malhas de
repetição.

Supondo um programa que deva executar um determinado trecho de


instruções por cinco vezes. Com o conhecimento adquirido até este momento, o leitor
com toda a certeza iria escrever o mesmo trecho, repetindo-o o número de vezes
necessárias. Por exemplo, imagine um programa que peça a leitura de um valor para a
variável X, multiplique esse valor por 3, implicando-o a variável de resposta R, e
apresente o valor obtido, repetindo esta seqüência por cinco vezes, conforme mostrado
abaixo em português estruturado:

Para estes casos existem comandos apropriados para efetuar a repetição de


determinados trechos de programas o número de vezes que for necessário. A principal
vantagem deste recurso é que o programa passa a ter um tamanho menor, podendo sua
amplitude de processamento ser aumentada sem altera o tamanho do código de
programação. Desta forma, podem-se determinar repetições com números variados de
vezes.

Caracteriza-se por uma estrutura que efetua um teste lógico no início de um


looping, verificando se é permitido executar o trecho de instruções subordinado a esse
looping. A estrutura em questão é denominada de enquanto, sendo conseguida com a
utilização do conjunto de instruções enquanto...faca...fimenquanto.

A estrutura enquanto...faca...fimenquanto tem o seu funcionamento


controlado por decisão. Sendo assim, poderá executar um determinado conjunto de
instruções enquanto a condição verificada for Verdadeira. No momento em que esta
condição se torna Falsa, o processamento da rotina é desviado para fora do looping. Se a
condição for Falsa logo de início, as instruções contidas no looping são ignoradas.

Figura 60: Diagrama de Blocos.

Cuidado para não confundir esta nova estrutura com a estrutura de decisão
usada anteriormente. Aqui existe um retorno à condição após a execução do bloco de
operações, até que a condição se torne falsa.

Algoritmo:

1. Criar uma variável para servir como contador com valor inicial 1;
2. Enquanto o valor do contador for menor ou igual a 5, processar os passos
3, 4 e 5;
3. Ler um valor para a variável X;
4. Efetuar a multiplicação do valor de X por 3, implicando o resultado em R;
5. Apresentar o valor calculado contido na variável R;
6. Acrescentar +1 a variável contador, definida no passo 1;
7. Quando o contador for maior que 5, encerrar o processamento do looping.
Figura 61: Diagrama de blocos para a solução do problema.

Em portugol a solução do problema ficaria assim:

Além da utilização das variáveis X e R, foi necessário criar uma terceira


variável (CONT) para controlar a contagem do número de vezes que o trecho de programa
deverá ser executado.

Logo após o início do programa, a variável contador é atribuída com o valor


1 (CONT <- 1). Em seguida, a instrução enquanto (CONT <= 5) faca efetua a checagem
da condição estabelecida, verificando que a condição seja verdadeira, pois o valor da
variável CONT neste momento é 1, é realmente menor ou igual a 5, e enquanto for deverá
processar o looping.

Sendo assim, tem início a execução da rotina de instruções contidas entre as


instruções enquanto e a instrução fimenquanto. Depois de efetuar a primeira leitura,
cálculo e apresentação do valor calculado, o programa encontra a linha CONT <- CONT
+ 1, sendo assim resultará CONT=2.

Agora que a variável CONT possui o valor 2, o processamento do programa


volta para a instrução enquanto (CONT <= 5) faca, uma vez que o valor da variável
CONT é menor ou igual a 5. Será então executada a rotina de instruções, só que desta vez
a variável CONT passará a possuir o valor 3. Desta forma o programa processará
novamente a rotina de instruções, passando o valor de CONT para 4, que será verificado
e sendo menor ou igual a 5, será executada mais uma vez a mesma rotina de instruções.
Neste ponto, a variável CONT passa a possuir o valor 5. Perceba que a instrução
enquanto (CONT <= 5) faca irá efetuar a checagem do valor da variável CONT que é 5
com a condição CONT <= 5. Veja que 5 não é menor que 5, mas é igual. Sendo esta
condição verdadeira, deverá a rotina ser executada mais uma vez. Neste momento, o valor
da variável CONT passa a ser 6, que resultará para a instrução enquanto uma condição
falsa. E por conseguinte, desviará o processamento para a primeira instrução após a
instrução fimenquanto, que no caso é a instrução fimalgoritmo, dando o encerramento
do programa.

Para ilustrar de forma um pouco diferente, imagine que o problema anterior


deverá ser executado enquanto o usuário queira. Desta forma, em vez de possuir dentro
da rotina um contador de vezes, pode-se possuir uma instrução pedindo que o usuário
informe se deseja continuar ou não. Veja, a seguir, o exemplo desta nova situação.

Algoritmo

1. Criar uma variável para ser utilizada como resposta;


2. Enquanto a resposta for sim, executar os passos 3, 4 e 5;
3. Ler um valor para a variável X;
4. Efetuar a multiplicação do valor de X por 3, implicando o resultado em R;
5. Apresentar o valor calculado contido na variável R;
6. Quando a resposta for diferente de sim, encerrar o processamento.
Figura 62: Diagrama de blocos para a solução deste problema.

Em portugol a solução ficará desta forma:

Veja que o contador foi substituído pela variável RESP, que enquanto for
igual a “sim” executará a rotina existente entre as instruções enquanto e fimenquanto.
Neste caso, o número de vezes que a rotina irá se repetir será controlado pelo usuário e
será encerrada somente quando alguma informação diferente de “sim” for fornecida para
a variável RESP.

6.1. Exercícios: Desenvolva os algoritmos, seus respectivos diagramas de bloco e


codificação em português estruturado. Usar na resolução dos problemas apenas
estruturas de repetição do tipo enquanto.

a) Apresentar os resultados de uma tabuada de multiplicar (de 1 até 10) de um número


qualquer.

b) Apresentar o total da soma obtida dos cem primeiros números inteiros


(1+2+3+4+...+98+99+100).

c) Elaborar um programa que apresente no final o somatório dos valores pares existentes
na faixa de 1 até 500.

d) Apresentar todos os valores numéricos inteiros ímpares situados na faixa de 0 a 20.


Para verificar se o número é ímpar, efetuar dentro da malha a verificação lógica desta
condição com a instrução se, perguntando se o número é ímpar; sendo, mostre-o; não
sendo, passe para o próximo passo.

e) Apresentar os resultados das potências de 3, variando do expoente 0 até o expoente 15.


Deve ser considerado que qualquer número elevado a zero é 1, e elevado a 1 é ele próprio.
Observe que neste exercício não pode ser utilizado o operador de exponenciação do
portuguol (^).

f) Elaborar um programa que apresente como resultado o valor de uma potência de uma
base qualquer elevada a um expoente qualquer, ou seja, de BE, em que B é o valor da
base e E o valor do expoente. Observe que neste exercício não pode ser utilizado o
operador de exponenciação do portuguol (^).

g) Escreva um programa que apresente a série de Fibonacci até o décimo quinto termo. A
série de Fibonacci é formada pela sequência: 1, 1, 2, 3, 5, 8, 13, 21, 34, ..., etc. Esta série
se caracteriza pela soma de um termo atual com o seu anterior subsequente, para que seja
formado o próximo valor da sequência. Portanto começando com os números 1, 1 o
próximo termo é 1+1=2, o próximo é 1+2=3, o próximo é 2+3=5, o próximo 3+5=8, etc.

h) Elaborar um programa que apresente os valores de conversão de graus Celsius em


Fahrenheit, de 10 em 10 graus, iniciando a contagem em 10 graus Celsius e finalizando
em 100 graus Celsius. O programa deve apresentar os valores das duas temperaturas. A
9𝐶+160
fórmula de conversão é 𝐹 = , sendo F a temperatura em Fahrenheit e C a
5
temperatura em Celsius.

i) Elaborar um programa que efetue a leitura de 10 valores numéricos e apresente no final


o total do somatório e a média aritmética dos valores lidos.

j) Elaborar um programa que apresente os resultados da soma e da média aritmética dos


valores pares situados na faixa numérica de 50 a 70.
k) Elaborar um programa que possibilite calcular a área total de uma residência (sala,
cozinha, banheiro, quartos, área de serviço, quintal, garagem, etc.). O programa deve
solicitar a entrada do nome, a largura e o comprimento de um determinado cômodo. Em
seguida, deve apresentar a área do cômodo lido e também uma mensagem solicitando do
usuário a confirmação de continuar calculando novos cômodos. Caso o usuário responda
“NAO”, o programa deve apresentar o valor total acumulado da área residencial.

l) Elaborar um programa que efetue a leitura de valores positivos inteiros até que um valor
negativo seja informado. Ao final devem ser apresentados o maior e o menor valores
informados pelo usuário.

6.2. Repetição do Tipo: Variável de Controle

Anteriormente, foram vistas duas formas de elaborar looping. Uma usando o


conceito enquanto e a outra usando o conceito repita. Foi visto também como elaborar
rotinas que efetuaram a execução de um looping um determinado número de vezes com
a utilização de um contador (por meio de uma variável de controle).

Porém, existe uma possibilidade de facilitar o uso de contadores finitos sem


fazer uso das duas estruturas anteriores, deixando-as para utilização de loopings em que
não se conhece de antemão o número de vezes que uma determinada sequência de
instruções deverá ser executada. Os loopings que possuem um número finito de
execuções poderão ser processados por meio de estrutura de laços contados do tipo para,
sendo conseguida com a utilização do conjunto de instruções
para...de...ate...passo...faca...fimpara.

A estrutura para...de...ate...passo...faca...fimpara tem o seu funcionamento


controlado por uma variável denominada contador. Sendo assim, poderá executar um
determinado conjunto de instruções um determinado número de vezes.

Com relação à apresentação gráfica em um diagrama de blocos, existem


várias formas adotadas por diversos profissionais no mercado, sendo assim, não existe
um padrão de montagem do diagrama.

Figura 63: Estrutura do símbolo da instrução para...fim_para.


Estrutura em portugol:
Para exemplificar, considere o problema anterior: “Pedir a leitura de um valor
para a variável X, multiplicar esse valor por 3, implicando-o à variável de resposta R, e
apresentar o valor obtido, repetindo esta sequência por cinco vezes”.

Algoritmo

1. Definir um contador, variando de 1 a 5;


2. Ler um valor para a variável X;
3. Efetuar a multiplicação do valor de X por 3, implicando o resultado em R;
4. Apresentar o valor calculado, contido na variável R;
5. Repetir os passos 2, 3, 4 e 5 até que o contador seja encerrado.

Figura 64: Exemplo da utilização da estrutura para..de...até...passo...faça...fim_para.

Em português estruturado a solução deste problema fica assim:

Será executado o conjunto de instruções entre para e a instrução fimpara,


sendo a variável CONT (variável de controle) inicializada com valor 1 e incrementada de
mais 1 por meio da instrução passo até o valor 5. Este tipo de estrutura de repetição poderá
ser utilizado todas as vezes que houver a necessidade de repetir trechos finitos, em que se
conhecem os valores inicial e final.

6.3. Estrutura de Controle Encadeadas

6.3.1. Encadeamento de Estruturas Enquanto com Enquanto

Figura 65: Encadeamento Enquanto com Enquanto.


6.3.2. Estrutura Enquanto com Para

Figura 66: Encadeamento Enquanto com Para.


6.3.3. Encadeamento de Estrutura Para com Para

Figura 67: Encadeamento de Para com Para.


6.3.4. Encadeamento de Estrutura Para com Enquanto

Figura 68: Encadeamento de Para com Enquanto.

A seguir, são apresentados alguns exemplos da utilização das estruturas de


repetição. Considere o seguinte problema: “Elaborar o algoritmo, diagrama de blocos e
codificação em português estruturado de um programa que efetue o cálculo do fatorial do
número 5, 5!”. Desta forma, temos que 5! = 5 x 4 x 3 x 2 x 1 ou seja 5! = 120.

Fatorial é o produto dos números naturais desde 1 até o inteiro n. Sendo assim,
o cálculo de um fatorial é conseguido pela multiplicação sucessiva do número de termos.
No caso do cálculo de uma fatorial de número 5, este é o número de termos a ser utilizado.
Desta forma, o programa deverá executar as multiplicações sucessivamente e acumulá-
las a fim de possuir o valor 120 após 5 passos. O número de passos deverá ser controlado
por um contador.

Algoritmo

1. Inicializar as variáveis FATORIAL e CONTADOR com 1;


2. Multiplicar sucessivamente a variável FATORIAL pela variável
CONTADOR;
3. Incrementar 1 a variável CONTADOR, efetuando o controle até 5;
4. Apresentar ao final o valor obtido.

Pelo fato de ter que efetuar o cálculo de uma fatorial de 5 (5!), isto implica
que o contador deverá variar de 1 a 5, e por este motivo deverá ser a variável
CONTADOR inicializada com valor 1. Pelo fato de a variável FATORIAL possuir ao
final o resultado do cálculo da fatorial pretendida, esta deverá ser inicializada com valor
1. Se ela for incializada com zero, não existirá resultado final, pois qualquer valor
multiplicado por zero resulta zero.

Multiplicar sucessivamente implica em efetuar a multiplicação da variável


CONTADOR com o valor atual da variável FATORIAL a cada passo controlado pelo
looping. No caso, por cinco vezes. Abaixo é indicado esta ocorrência na linha 2 do
algoritmo.

1. Inicializar as variáveis FATORIAL e CONTADOR com 1;


2. Repetir a execução dos passos 3 e 4 por cinco vezes;
3. FATORIAL <- FATORIAL * CONTADOR;
4. Incrementar 1 à variável CONTADOR;
5. Apresentar ao final o valor obtido.

A seguir a resolução do problema do cálculo de fatorial, utilizando as


estruturas de repetição, sendo apresentados os diagramas de blocos e a codificação em
português estruturado de cada estrutura.

Exemplo 1: Estrutura Enquanto.

Figura 69: Fatorial com estrutura Enquanto.


Observe dentro do looping a indicação de dois contadores, sendo que o
primeiro funciona como um acumulador, pois ele terá no final o valor do resultado do
fatorial, e o segundo sendo utilizado para controlar a execução do looping a ser a base
para o cálculo do acumulador.

Logo no início do diagrama de blocos, as variáveis CONTADOR e


FATORIAL são igualadas em 1. Na primeira passagem dentro do looping, a variável
FATORIAL é implicada pelo seu valor atual, no caso 1, multiplicado pelo valor da
variável CONTADOR também com valor 1 que resulta 1. Em seguida a variável
CONTADOR é incrementada por mais 1, tendo agora o valor 2. Como 2 é menor ou igual
a cinco, ocorre um novo cálculo. Desta vez a variável FATORIAL que possui o valor 1 é
multiplicada pela variável CONTADOR que possui o valor 2, resultando 2 para o
FATORIAL. Daí a variável CONTADOR é incrementada de mais 1, tendo agora o valor
3. Desta forma, serão executados os outros cálculos até que a condição se torne falsa e
seja então apresentado o valor 120. Veja abaixo, a tabela com os valores das variáveis
antes e durante a execução do looping:

Tabela 12: Valores das variáveis antes e durante a execução do looping.

Perceba que quando a variável CONTADOR está com valor 5, a variável


FATORIAL está com o valor 120. Neste ponto, o looping é encerrado e é apresentado o
valor da variável FATORIAL.

No código acima, estão sendo apresentadas pela instrução escreva() duas


informações, sendo uma mensagem e uma variável. Note que isto é feito utilizando uma
vírgula para separa as duas informações.
Exemplo 2: Estrutura Para

Figura 70: Fatorial com estrutura Para.

6.4. Exercícios

6.4.1. Desenvolva os algoritmos, seus respectivos diagramas de bloco e


codificação em português estruturado. Usar na resolução dos problemas
apenas estruturas de repetição do tipo para.

a) Apresentar os quadrados dos números inteiros de 15 a 200.

b) Apresentar os resultados de uma tabuada de multiplicar (de 1 até 10) de um número


qualquer.
c) Apresentar o total da soma obtida dos cem primeiros números inteiros
(1+2+3+4+...+98+99+100).
d) Elaborar um programa que apresente no final o somatório dos valores pares existentes
na faixa de 1 até 500.

e) Apresentar todos os valores numéricos inteiros ímpares situados na faixa de 0 a 20.


Para verificar se o número é ímpar, efetuar dentro da malha a verificação lógica desta
condição com a instrução se, perguntando se o número é ímpar; sendo, mostre-o; não
sendo, passe para o próximo passo.

f) Apresentar todos os números divisíveis por 4 que sejam menores que 200. Para verificar
se o número é divisível por 4, efetuar dentro da malha a verificação lógica desta condição
com a instrução se, perguntando se o número é divisível; sendo, mostre-o; não sendo,
passe para o próximo passo. A variável que controlará o contador deve ser iniciada com
o valor 1.

g) Apresentar os resultados das potências de 3, variando do expoente 0 até o expoente 15.


Deve ser considerado que qualquer número elevado a zero é 1, e elevado a 1 é ele próprio.
Observe que neste exercício não pode ser utilizado o operador de exponenciação do
portugol (^).

h) Elaborar um programa que apresente como resultado o valor de uma potência de uma
base qualquer elevada a um expoente qualquer, ou seja, de BE, em que B é o valor da base
e E o valor do expoente. Observe que neste exercício não pode ser utilizado o operador
de exponenciação do portuguol (^).

i) Escreva um programa que apresente a série de Fibonacci até o décimo quinto termo. A
série de Fibonacci é formada pela sequência: 1, 1, 2, 3, 5, 8, 13, 21, 34, ..., etc. Esta série
se caracteriza pela soma de um termo atual com o seu anterior subsequente, para que seja
formado o próximo valor da sequência. Portanto começando com os números 1, 1 o
próximo termo é 1+1=2, o próximo é 1+2=3, o próximo é 2+3=5, o próximo 3+5=8, etc.

j) Elaborar um programa que apresente os valores de conversão de graus Celsius em


Fahrenheit, de 10 em 10 graus, iniciando a contagem em 10 graus Celsius e finalizando
em 100 graus Celsius. O programa deve apresentar os valores das duas temperaturas. A
9𝐶+160
fórmula de conversão 𝐹 = 5 .

k) Elaborar um programa que apresente como resultado o valor do fatorial dos valores
ímpares situados na faixa numérica de 1 a 10.
7. Linguagem de Programação

Uma linguagem de programação é um método padronizado para comunicar


instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas
para definir um programa de computador. Permite que um programador especifique
precisamente sobre quais dados um computador vai atuar, como estes dados serão
armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias.

Linguagens de programação podem ser usadas para expressar algoritmos com


precisão. Uma linguagem de programação pode ser convertida, ou traduzida, em código
de máquina por compilação ou interpretada por um processo denominado interpretação.
Em ambas ocorre a tradução do código fonte para código de máquina.

7.1. Linguagem C/C++

A linguagem C evolui a partir da linguagem B em 1970. Após sua


popularização, a ANSI (American National Standards Institute) estabeleceu em 1983 um
comitê para a padronização para as implementações da linguagem C.

A linguagem C++ é uma extensão da linguagem C. Os incrementos foram


feitos para dar suporte a programação orientada a objetos. A sintaxe de C++ é
praticamente a mesma de C.

C é uma linguagem de programação compilada de propósito geral,


estruturada, imperativa, procedural, padronizada pela ISO, criada em 1972, por Dennis
Ritchie, no AT&T Bell Labs, para desenvolver o sistema operacional Unix (que foi
originalmente escrito em Assembly).

Figura 71: Dennis Ritchie. Criador da linguagem C.

Bjarne Stroustrup desenvolveu o C++ (originalmente com o nome C with


Classes, que significa C com classes em português) em 1983 no Bell Labs como um
adicional à linguagem C.
Figura 72: Bjarne Stroustrup. Criador da linguagem C++.

A linguagem de programação C é uma das mais populares e existem poucas


arquiteturas para as quais não existem compiladores para ela.

7.2. Compilador de C

Dev C++ é um ambiente de desenvolvimento integrado livre que utiliza os


compiladores do projeto GNU para compilar programas para o sistema operacional
Microsoft Windows. Suporta as linguagens de programação C e C++, e possui toda a
biblioteca ANSI C. Este compilador não é compatível com o Windows 8.
Figura 73: Tela do compilador Dev C++.

Este compilador tem uma licença freeware e pode ser baixado a partir da
página http://www.bloodshed.net/dev/devcpp.html.

Um outro compilador freeware muito conhecido e compatível com o


Windows 8 é o Code::Blocks. Pode-se fazer o download deste programa através da página
http://www.codeblocks.org/.

O Code::Blocks é um ambiente de desenvolvimento integrado de código


aberto e multiplataforma. Sua arquitetura é orientada a plugin, de forma que suas
funcionalidades são definidas pelos plugins fornecidos a ele. Code::Blocks é voltado para
o desenvolvimento em C/C++, D e Fortran.

O Code::Blocks está sendo desenvolvido sob Windows e Linux. Alguns


usuários compilaram o Code::Blocks com sucesso para FreeBSD e Mac OS X (com
alguns problemas na interface).
Figura 74: Tela do compilador Code::Blocks.

7.3. Estrutura Sequencial em C/C++

Bibliotecas são arquivos contendo várias funções que podem ser incorporadas
aos programas escritos em C/C++. A diretiva #include faz com que o texto contido dentro
da biblioteca especificada seja inserido no programa.

As bibliotecas iostream, stdio.h e conio.h permitem a utilização de diversos


comandos de entrada e saída.

É importante salientar que a linguagem C/C++ é sensível a letras maiúsculas


e minúsculas, ou seja, considera que letras maiúsculas são diferentes de minúsculas.
Sendo assim, todos os comandos devem, obrigatoriamente, ser escritos com letras
minúsculas.
7.3.1. Declaração de variáveis

As variáveis são declaradas após a especificação de seus tipos. Os tipos mais


utilizados são: int (para números inteiros), float (para números reais) e char (para um
caractere). A linguagem C/C++ não possui tipo especial para armazenar cadeias de
caracteres (strings). Deve-se, quando necessário, utilizar um vetor contendo vários
elementos do tipo char. Os vetores serão abordados mais a frente.

Exemplos:

Declara uma variável chamada X, onde pode ser armazenado um número real.

Declara duas variáveis chamadas Y e Z, onde podem ser armazenadas dois


números reais.

Declara uma variável chamada SEXO, onde pode ser armazenado um


caractere.

Declara uma variável chamada NOME, onde podem ser armazenados 40


caracteres.

A linguagem C/C++ possui quatro tipos básicos que podem ser utilizados na
declaração de variáveis. São eles: int, float, double, e char. A partir desses tipos básicos,
podem ser definidos outros, conforme apresentado na tabela a seguir.
Tabela 13: Tabela constando os tipos de dados, suas faixas de valores e o seu tamanho aproximado.

7.3.2. Comando de atribuição

O comando de atribuição é utilizado para atribuir valores ou operações a


variáveis, sendo representado por = (sinal de igualdade).

Exemplo:

Em C/C++ os caracteres são representados entre apóstrofos ('). As cadeias de


caracteres devem ser representadas entre aspas (").

Caso seja necessário armazenar uma cadeia de caracteres dentro de uma


variável, deve-se utilizar uma função para manipulação de caracteres, conforme
apresentado a seguir:

Para que seja possível a utilização da função strcpy deve-se inserir ao


programa, por meio da diretiva include, a biblioteca string.h.

Em C/C++ cada comando é finalizando com o sinal de ponto-e-vírgula.

7.3.3. Comandos de entrada em C/C++

O principal comando de entrada é o scanf. Ele faz parte de uma família de


funções da linguagem de programação C disponibilizada pelo arquivo cabeçalho stdio.h
que permite a leitura de dados a partir de uma fonte de caracteres de acordo com um
formato pré-determinado.

A sintaxe da função é dada da seguinte forma:

O especificador indica qual o tipo dado da variável. Na tabela a seguir


encontrarmos os especificadores para esta função:

Tabela 14: Especificadores para a função scanf.

Exemplos:

Observações: O comando scanf não é o melhor comando para variáveis do


tipo char por isto para que a leitura do comando se dê de forma adequada é obrigatório
um espaço em branco antes do %c. Isto é devido o comando scanf não armazenar espaço
em branco. Outra forma de entrar no variáveis do tipo char no sistema é utilizando a
função getchar();

Este mesmo programa também pode ser feito utilizando apenas uma linha de
comando do scanf.

7.3.4. Comando de Saída em C/C++

O principal comando de saída é o printf (que vem de print formatted). São


uma classe de funções normalmente associadas com linguagens de programação
delimitada por chaves. Elas aceitam um parâmetro string chamado string de formato, que
especifica um método para converter um número arbitrário de parâmetro(s) de tipo
variável em uma string. A string é então impressa por padrão no fluxo de saída padrão,
mas existem variantes que realizam outras tarefas com o resultado. Caracteres no formato
string são normalmente copiados literalmente na saída da função, com os outros
parâmetros sendo transformados no texto resultante nos pontos marcados pelos
especificadores de formato. Os especificadores de formato são normalmente introduzidos
por um caractere % e um sinal literal de porcentagem pode ser copiado na saída padrão
utilizando sequência de escape %%.

O parâmetro da variável a ser impressa pode ser obtido através da seguinte


tabela:
Tabela 15: Parâmetros para especificar o tipo de dados que será impresso.

Exemplos:

Este mesmo programa pode ser reescrito utilizando apenas uma linha para
leitura das variáveis uma linha para a escrita dos dados.
Observe que a saída pode ser personalizada de diferentes formas

Figura 75: Saída após executar o programa acima.

É interessante que exista também mensagens para informar ao usuário o que


deve ser digitado. Por exemplo:
Figura 76: Saída após executar o programa acima.

As casas decimais de um número real também pode ser controlada através da


personalização do parâmetro de entrada. Por exemplo, caso deseja ter duas casas decimais
utiliza-se o parâmetro %.2f. Para cinco casas decimais utiliza-se %.5f. E assim
sucessivamente.

7.3.5. Comentários em C/C++

Os comentários podem ocupar uma ou várias linhas, devendo ser inseridos


nos programas utilizando os símbolos /* ... */ ou //.

Exemplo:

A região de comentários é aberta com os símbolos /* e é encerrada com os


símbolos */.
A região de comentário é aberta pelos símbolos // e é encerrada
automaticamente ao final da linha.

7.3.6. Operadores e funções predefinidas em C/C++

A linguagem C/C++ possui operadores e funções predefinidas destinadas a


cálculos matemáticos e à manipulação de caracteres. Alguns são apresentados a seguir.

Tabela 16: Operador de atribuição.

Tabela 17: Operadores matemáticos.

O operador % só pode ser utilizado com operandos do tipo inteiro.

Tabela 18: Operadores matemáticos de atribuição.

Os operadores matemáticos de atribuição são utilizados para representar de


maneira sintética uma operação aritmética e, posteriormente, uma operação de atribuição.
Tabela 19: Operadores Relacionais.

Tabela 20: Funções matemáticas.

A linguagem C/C++ possui muitas outras funções matemáticas. Todas elas


podem ser observadas detalhadamente na documentação da biblioteca math.h.

Tabela 21: Palavras reservadas de C/C++.


7.4. Exercícios

7.4.1. Faça um programa que receba o preço de um produto, calcule e mostre o


novo preço, sabendo-se que este sofreu um desconto de 10%.

7.4.2. Um funcionário recebe um salário fixo mais 4% de comissão sobre as


vendas. Faça um programa que receba o salário fixo de um funcionário e o
valor de suas vendas, calcule e mostre a comissão e o salário final do
funcionário.

7.4.3. Faça um programa que receba o ano de nascimento de uma pessoa e o ano
atual, calcule e mostre:
a) A idade dessa pessoa em anos;
b) A idade dessa pessoa em meses;
c) A idade dessa pessoa em dias;
d) A idade dessa pessoa em semanas;

7.4.4. Faça um programa que receba uma temperatura em Celsius, calcule e


mostre essa temperatura em Fahrenheit. Sabe-se que F=180(C+32)/100.

7.4.5. Sabe-se que para iluminar de maneira correta os cômodos de uma casa,
para cada m2, deve usar 18W de potência. Faça um programa que receba as
duas dimensões de um cômodo (em metros), calcule e mostre a sua área (em
m2) e a potência de iluminação que deverá ser utilizada.

7.4.6. Faça um programa que receba o número de lados de um polígono convexo,


calcule e mostre o número de diagonais desse polígono, onde N é o número
de lados do polígono. Sabe-se que ND=N(N-3)/2.

7.4.7. Faça um programa que receba a medida de dois ângulos de um triângulo,


calcule e mostre a medida do terceiro. Sabe-se que a soma dos ângulos de
um triângulo é 180.

7.4.8. Faça um programa que receba o valor dos catetos de um triângulo, calcule
e mostre o valor da hipotenusa.

7.4.9. Faça um programa que receba a quantidade de dinheiro em reais que uma
pessoa que vai viajar possui. Essa pessoa vai passar por vários países e
precisa converter seu dinheiro em dólares, marco alemão e libra esterlina.
Sabe-se que a cotação do dólar é de R$ 1,80, do marco alemão é de R$ 2,00
e da libra esterlina é de R$ 1,57. O programa deve fazer as conversões e
mostrá-las.

7.4.10. Faça um programa que receba a quantidade de dinheiro em reais que uma
pessoa que vai viajar possui. Essa pessoa vai passar por vários países e
precisa converter seu dinheiro em dólares, marco alemão e libra esterlina.
Sabe-se que a cotação do dólar é de R$ 1,80, do marco alemão é de R$ 2,00
e da libra esterlina é de R$ 1,57. O programa deve fazer as conversões e
mostra-las.
8. Estrutura Condicional

8.1. Estrutura Condicional Simples

O comando só será executado se a condição for verdadeira. Uma condição é


uma comparação que possui dois valores possíveis: verdadeiro ou falso.

Em C/C++, torna-se obrigatória a utilização de chaves quando houver mais


de um comando a ser executado. Os comandos entre as chaves {} só serão executados se
a condição for verdadeira.

8.2. Estrutura Condicional Composta

Se a condição for verdadeira, será executado o comando1; caso contrário, se


a condição for falsa, será executado o comando2.

Se a condição for verdadeira, o comando1 e o comando2 serão executados;


caso contrário, se a condição for falsa o comando3 e o comando4 serão executados.
8.3. Operadores Lógicos

Os operadores lógicos são &&, || e ! significam e, ou, não e são usados para
conjunção, disjunção e negação respectivamente.

Tabela 22: Tabela verdade.

Quando existe mais de uma condição, essas devem estar entre parênteses
assim como todas as condições.

8.4. Exercícios

8.4.1. Faça um programa que receba quatro notas de um aluno, calcule e mostre
a média aritmética das notas e a mensagem de aprovado ou reprovado,
considerando para aprovação média 7.

8.4.2. Faça um programa que receba dois número e mostre o menor.

8.4.3. Faça um programa que receba três números e mostre o maior.

8.4.4. Faça um programa que receba dois números e execute uma das operações
listadas a seguir de acordo com a escolha do usuário. Se for digitada uma
opção inválida mostrar mensagem de erro e terminar a execução do
programa. As opções são:
1 - Média entre os dois números.
2 - Diferença do maior pelo menor.
3 - O produto entre os dois números.

8.4.5. Uma empresa decide dar um aumento de 30% aos funcionários com
salários inferiores a R$ 500,00. Faça um programa que receba o salário do
funcionário e mostre o valor do salário reajustado ou uma mensagem, caso
o funcionário não tenha direito ao aumento.

8.4.6. Uma agência bancária possui dois tipos de investimentos, conforme o


quadro a seguir. Faça um programa que receba o tipo de investimento e o
valor do investimento e que calcule e mostre o valor corrigido de acordo com
o tipo de investimento:
Tipo Descrição Rendimento Mensal
1 Poupança 0,5 %
2 Fundos de renda fixa 1,0 %

8.4.7. Faça um programa que receba a idade de uma pessoa e mostre a mensagem
de maioridade ou não.
8.4.8. Faça um programa que verifique a validade de uma senha fornecida pelo
usuário. A senha é 4531. O programa deve mostrar uma mensagem de
permissão de acesso ou não.
8.4.9. Faça um programa que receba o preço de um produto e o seu código de
origem e mostre a sua procedência. A procedência obedece à tabela a seguir.

Código de Origem Procedência


1 Sul
2 Norte
3 Leste
4 Oeste
5 ou 6 Nordeste
7 ou 8 ou 9 Sudeste
10 a 20 Centro-Oeste
21 a 30 Nordeste

8.4.10. Uma empresa decidiu dar uma gratificação de natal aos seus funcionários,
baseada no número de horas extras e no número de horas que o funcionário
faltou ao trabalho. O valor do prêmio é obtido pela consulta na tabela a seguir
em que:

𝐻 = (𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 ℎ𝑜𝑟𝑎𝑠 𝑒𝑥𝑡𝑟𝑎𝑠) − 2⁄3 × (𝑛ú𝑚𝑒𝑟𝑜 𝑑𝑒 ℎ𝑜𝑟𝑎𝑠 − 𝑓𝑎𝑙𝑡𝑎)


9. Estrutura de Repetição.

9.1. Estrutura de Repetição For

Essa estrutura de repetição é utilizada quando se sabe o número de vezes em


que um trecho do programa deve ser repetido.

O formato geral do comando for é composto por três partes:

A primeira parte atribui um valor inicial à variável i, que tem como função
controlar o número necessário de repetições.

A segunda parte corresponde a uma expressão relacional que, quando assumir


valor falso, determinará o fim da repetição.

A terceira parte é responsável por alterar o valor da variável i (incremento ou


decremento) com o objetivo de, em algum momento, fazer com que a condição assuma o
valor falso.

Caso seja necessária a repetição de apenas um comando, o compilador


entenderá que a estrutura de repetição terminará quando for encontrado o primeiro ;
(ponto-e-vírgula).

Exemplo:

No exemplo anterior, a variável a é inicializada com o valor 0 e vai sendo


incrementada em uma unidade e, a cada incremento, o comando printf é executado. Esse
processo se repete até o valor da variável a se tornar maior que 20 (quando a condição
a<=20 assumir valor falso).

Caso seja necessária a repetição de mais de um comando, o compilador


entenderá que a estrutura de repetição começara quando for encontrado o símbolo { e
terminará quando for encontrado o símbolo }.

Exemplo:
No exemplo anterior, a variável a é inicializada com o valor 15 e vai sendo
decrementada em duas unidades e, a cada decremento, o bloco de comando que está entre
as chaves { ... } é executado. Esse processo se repete até o valor da variável a se tornar
menor que 1 (quando a condição a>=1 assumir valor falso).

9.2. Estrutura de Repetição While

Trata-se de uma estrutura de repetição que pode ser utilizada quando o


número de repetições necessárias não é fixo. Os comandos serão repetidos até a condição
assumir o valor falso.

Neste tipo de estrutura o teste condicional ocorre no início, isso significa que
existe a possibilidade da repetição não ser executada, quando a condição assumir valor
falso logo na primeira verificação.

Enquanto a condição for verdadeira o comando será executado.

Enquanto a condição for verdadeira, os comandos que estão dentro das chaves
serão executados (comando1, comando2, comando3, ...).

9.3. Exercícios

9.3.1. Faça um programa que verifique e mostre os números entre 1000 e 2000
(inclusive) que, quando divididos por 11, produzam resto igual a 5.

9.3.2. Faça um programa para calcular n! (Fatorial de n), sendo que o valor
inteiro de n é fornecido pelo usuário. Sabe-se que:

𝑛! = 1 ∗ 2 ∗ 3 ∗ ⋯ ∗ (𝑛 − 1) ∗ 𝑛

9.3.3. Faça um programa que receba a idade de dez pessoas e que calcule e
mostre a quantidade de pessoas com idade maior ou igual a 18 anos.

9.3.4. Faça um programa que receba a idade, a altura e o peso de 25 pessoas.


Calcule e mostre:
 A quantidade de pessoas com idade superior a 50 anos;
 A média das alturas das pessoas com idade entre 10 e 20 anos;
 A percentagem de pessoas com peso inferior a 40 quilos entre todas
as pessoas analisadas.

9.3.5. Faça um programa que receba a idade e o sexo de sete pessoas e que calcule
e mostre:
 A idade média do grupo;
 A idade média das mulheres;
 A idade médias dos homens.

9.3.6. Faça um programa que receba várias idades e que calcule e mostre a média
das idades digitadas. Finalize digitando idade igual a zero.

9.3.7. A prefeitura de uma cidade fez uma pesquisa entre seus habitantes,
coletando dados sobre o salário e o número de filhos. A prefeitura deseja
saber:
 A média do salário da população;
 A média do número de filhos;
 O maior salário;
 A percentagem de pessoas com salários até R$ 150,00.
O final da leitura de dados dar-se-á com a entrada de um salário negativo.

9.3.8. Faça um programa que receba como entrada uma lista de números
positivos ou negativos, terminada com o número zero. O programa deve
fornecer como saída a soma dos números positivos, a soma dos números
negativos e a soma das duas somas parciais.

9.3.9. Faça um programa que receba um conjunto de valores inteiros e positivos


e que calcule e mostre o maior e o menor valor do conjunto. Considere que:
 Para encerrar a entrada de dados, deve ser digitado o valor zero;
 Para valores negativos, deve ser enviada uma mensagem;
 Os valores negativos ou iguais a zero não entrarão nos cálculos.

9.3.10. Uma agência bancária possui vários clientes que podem fazer
investimentos com rendimentos mensais, conforme a tabela a seguir:

Rendimento
Tipo Descrição
Mensal
1 Poupança 1,5%
2 Poupança Plus 2%
Fundos de renda
3 4%
fixa

Faça um programa que leia o código do cliente, o tipo de conta e o valor


investido e que calcule e mostre o rendimento mensal de acordo com o tipo
de investimento. Ao final do programa mostre o total investido e o total de
juros pagos.
A leitura terminará quando o código do cliente digitado for menor ou igual
a 0.
10.Estrutura de Dados Homogêneas

Neste capítulo será apresentada uma técnica de programação que permitirá


trabalhar com o agrupamento de várias informações dentro de uma mesma variável. Vale
salientar que esse agrupamento ocorrerá obedecendo sempre ao mesmo tipo de dado.

10.1. Matrizes de uma Dimensão ou Vetores

Uma matriz de uma dimensão ou vetor será representada por seu nome e seu
tamanho (dimensão) entre colchetes. Para ter uma ideia de como utilizar esta estrutura,
considere o seguinte problema: “Calcular a média geral de uma turma de 8 alunos. A
média a ser obtida deve ser a média geral das médias de cada aluno obtida durante o ano
letivo”. Desta forma será necessário somar as médias e dividi-las por 8. A tabela seguinte
apresenta o número de alunos, suas notas bimestrais e respectivas médias anuais. É da
média de cada aluno que será efetuado o cálculo da média da turma.

Tabela 23: Exemplo para o aprendizado de vetores e matrizes. Notas e médias dos alunos

Agora basta escrever um programa para efetuar o cálculo das 8 médias de


cada aluno. Para representar a média do primeiro aluno será utilizada a variável MD1,
para o segundo MD2 e assim por diante.

Com o conhecimento adquirido até este momento, seria então elaborado um


programa que efetuaria a leitura de cada nota, a soma delas e a divisão do valor da soma
por 8, obtendo-se desta forma a média conforme exemplo abaixo em português
estruturado:
Perceba que para receber a média foram utilizadas oito variáveis. Com a
técnica de matrizes poderia ter sido utilizada apenas uma variável com a capacidade de
armazenar oito valores.

10.2. Operações Básicas com Matrizes do Tipo Vetor

No caso do exemplo do cálculo da média dos 8 alunos, ter-se-ia então uma


única variável indexada (a matriz) contendo todos os valores das 8 notas. Isto seria
representado da seguinte forma:

Observe que o nome é um só. O que muda é a informação indicada dentro dos
colchetes. A esta informação dá-se o nome de índice, sendo este o endereço em que o
elemento está armazenado. É necessário que fique bem claro que elemento é o conteúdo
da matriz, neste caso os valores das notas. No caso de MD[1] = 4.5, o número 1 é o índice;
o endereço cujo elemento é 4.5 está armazenado.

10.2.1. Atribuição de uma Matriz

Anteriormente, foram utilizadas várias instruções em português estruturado


para poder definir e montar um programa. No caso da utilização de matrizes, será definida
a instrução vetor que indicará em português estruturado a utilização de uma matriz, tendo
como sintaxe: VARIÁVEL: VETOR[<dimensão>] de <tipo de dado>, sendo que
<dimensão> será a indicação dos valores inicial e final do tamanho do vetor e <tipo de
dado> se o vetor em questão irá utilizar valores reais, inteiros, lógicos ou caracteres.

10.2.2. Leitura dos Dados de uma Matriz

A leitura de uma matriz é processada passo a passo, um elemento por vez. A


instrução de leitura é leia() seguida da variável mais o índice. A seguir, são apresentados
diagramas de blocos e codificação em português estruturado da leitura das notas dos 8
alunos, cálculo da média e a sua apresentação.
Figura 77: Diagrama de blocos para leitura dos elementos de uma matriz tipo vetor.

Veja que o programa ficou mais compacto, além de possibilitar uma


mobilidade maior, pois se houver a necessidade de efetuar o cálculo para um número
maio de alunos, basta dimensionar a matriz e mudar o valor final da instrução para.
Observe que no exemplo anterior, a leitura é processada uma por vez. Desta forma, a
matriz é controlada pelo número do índice que faz com que cada entrada aconteça em
uma posição diferente da outra. Assim sendo, a matriz passa a ter todas as notas. A tabela
seguinte, mostra como ficarão os valores armazenados na matriz.
Tabela 24: Valores armazenados dentro do vetor MD em seus respectivos índices.

Tenha cuidado para não confundir o índice com o elemento. Índice é o


endereço de alocação de uma unidade da matriz, enquanto elemento é o conteúdo
armazenado em um determinado endereço.

10.2.3. Escrita dos Dados de uma Matriz

O processo de escrita de uma matriz é bastante parecido com o processo de


leitura de seus elementos. Para esta ocorrência deverá ser utilizada a instrução escreva()
seguida da indicação da variável e seu índice. Supondo que após a leitura das 8 notas,
houvesse a necessidade de apresenta-las antes da apresentação do valor da média.
Figura 78: Diagrama de bloco para escrita dos elementos de uma matriz tipo vetor.
10.3. Exercício de Aprendizagem

1º Exemplo

Desenvolver um programa que efetue a leitura de dez elementos de uma


matriz A tipo vetor. Construir uma matriz B de mesmo tipo, observando a seguinte lei de
formação: se o valor do índice for par, o valor deverá ser multiplicado por 5, sendo ímpar,
deverá ser somando com 5. Ao final mostrar o conteúdo da matriz B.

Algoritmo

Este exemplo de resolução estará mostrando como fazer o tratamento da


condição do índice.

1. Iniciar o contador de índice, variável I com 1 em um contador até 10;


2. Ler os 10 valores, um a um;
3. Verificar se o índice é par se sim multiplica por 5, se não soma 5. Criar a
matriz B;
4. Apresentar os conteúdos das duas matrizes.

Diagrama de Blocos

Deverá ser perguntado se o valor do índice I em um determinado momento é


para (ele será par quando dividido pro 2 obtiver resto igual a zero). Sendo a condição
verdadeira, será implicada na matriz B[i] a multiplicação do elemento da matriz A[i] por
5. Caso o valor do índice i seja ímpar, será implicada na matriz B[i] a soma do elemento
da matriz A[i] por 5.
Figura 79: Diagrama de blocos para o 1º Exemplo.
2º Exemplo

Desenvolver um programa que efetue a leitura de cinco elementos de uma


matriz A do tipo vetor. No final, apresente o total da soma de todos os elementos que
sejam ímpares.

Algoritmo

Perceba que em relação ao primeiro exemplo, este apresenta uma diferença:


o primeiro pedia para verificar se o índice era par ou ímpar. Neste exemplo, está sendo
solicitado que analise a condição do elemento e não do índice. Já foi alertado
anteriormente para se tomar cuidado para não confundir elemento com índice. Veja a
solução.

1. Iniciar o contador de índice, variável i como 1 em um contador até 5;


2. Ler os 5 valores, um a um;;
3. Verificar se o elemento é ímpar; se sim efetuar a soma dos elementos;
4. Apresentar o total somado de todos os elementos ímpares da matriz.

Diagrama de Blocos

Observe que quando se faz menção ao índice indica-se a variável que controla
o contador de índice, e no caso do exemplo anterior, a variável i. Quando se faz menção
ao elemento, indica-se: A[i], pois desta forma está se pegando o valor armazenado e não
a sua posição de endereço.
Figura 80: Diagrama de blocos para o 2º exemplo.
10.4. Vetor em C/C++

Os índices utilizados na linguagem C/C++ para identificar as posições de um


vetor começam sempre em 0 (zero) e vão até o tamanho do vetor menos uma unidade.

10.4.1. Declaração de Vetor

Os vetores em C/C++ são identificados pela existência de colchetes logo após


o nome da variável no momento da declaração. Dentro dos colchetes deve-se colocar o
número de posições do vetor.

No exemplo acima, o vetor chamado vet possui dez posições, começando pela
posição 0 e indo até a posição 9 (tamanho do vetor – 1). Em cada posição poderão ser
armazenados números inteiros, conforme especificado pelo tipo int na declaração.

No exemplo acima, o vetor chamado x possui cinco posições, começando pela


posição 0 e indo até a posição 4 (tamanho do vetor – 1). Em cada posição poderão ser
armazenados caracteres, conforme especificado pelo tipo char na declaração.

10.4.2. Atribuindo Valores ao Vetor

O comando:

Atribui o valor 1 ao primeiro elemento do vetor. O comando:

Atribui o nome Maria ao vetor nome (um vetor de seis posições, declarado
assim: char nome[6]).

10.4.3. Carregando um Vetor

Para ler dados do teclado e atribuí-los a um vetor:

10.4.4. Imprimindo um Vetor

Para a saída dos dados de um vetor:


10.4.5. Exercícios

10.4.5.1. Desenvolva os algoritmos, seus respectivos


diagramas de bloco, codificação em português estruturado e o
programa em C.
a) Ler 10 elementos de uma matriz tipo vetor e apresentá-los.
b) Ler 8 elementos em uma matriz A tipo vetor. Construir uma matriz B de mesma
dimensão com os elementos da matriz A multiplicados por 3. O elemento B[i]
deverá ser implicado pelo elemento A[i]*3, o elemento B[2] implicado pelo
elemento A[2]*3 e assim por diante, até 8. Apresentar o vetor B.
c) Ler duas matrizes A e B do tipo vetor com 20 elementos. Construir uma matriz C,
onde cada elemento de C é a subtração do elemento correspondente de A com B.
Apresentar a matriz C.
d) Ler 15 elementos de uma matriz tipo vetor. Construir uma matriz B de mesmo
tipo, observando a seguintes lei de formação: “Todo elemento de B deverá ser o
quadrado do elemento de A correspondente”. Apresentar as matrizes A e B.
e) Ler duas matrizes A e B do tipo vetor com 15 elementos cada. Construir uma
matriz C, sendo esta a junção das duas outras matrizes. Desta forma, C deverá ter
o dobro de elementos, ou seja, 30. Apresentar a matriz C.
f) Ler duas matrizes do tipo vetor, sendo A com 20 elementos e B com 30 elementos.
Construir uma matriz C, sendo esta a junção das duas outras matrizes. Desta
forma, C deverá ter a capacidade de armazenar 50 elementos. Apresentar a matriz
C.
g) Ler 20 elementos de uma matriz A tipo vetor e construir uma matriz B de mesma
dimensão com os mesmo elementos da matriz A, sendo que deverão estar
invertidos. Ou seja, o primeiro elemento de A passa a ser o último de B, o segundo
elemento de A passa a ser o penúltimo elemento de B e assim por diante.
Apresentar as matrizes A e B lado a lado.
h) Ler três matrizes (A, B e C) de uma dimensão com 5 elementos cada. Construir
uma matriz D, sendo esta a junção das três outras matrizes. Desta forma D deverá
ter o triplo de elementos, ou seja, 15. Apresentar os elementos da matriz D.
i) Ler 15 elementos reais para uma matriz A de uma dimensão do tipo vetor.
Construir uma matriz B de mesmo tipo e dimensão, observando a seguinte lei de
formação: “Todo elemento da matriz A que possuir índice par deverá ter seu
elemento dividido por 2; caso contrário, o elemento da matriz A deverá ser
multiplicado por 1.5”. Apresentar as matrizes A e B lado a lado.
j) Ler duas matrizes A e B de uma dimensão com 6 elementos. A
matriz A deverá aceitar apenas a entrada de valores pares, enquanto a matriz B
deverá aceitar apenas a entrada de valores ímpares. A entrada das matrizes deverá
ser validada pelo programa e não pelo usuário. Construir uma matriz C de forma
que a matriz C seja a junção das matrizes A e B, de modo que a matriz C contenha
12 elementos. Apresentar a matriz C. A entrada das matrizes deverá ser validada
pelo programa e não pelo usuário. Construir uma matriz
11.Estruturas de Dados Homogêneas II

Neste capítulo, será enfatizado o uso de matrizes com duas dimensões,


conhecidas também por matrizes bidimensionais ou arranjos (arrays). Pelo fato de
utilizar-se de uma estrutura de dados homogênea, todos os elementos de uma matriz
deverão ser do mesmo tipo.

11.1. Matrizes com Mais de uma Dimensão

Anteriormente, houve contato com o uso de uma única variável indexada com
apenas uma dimensão (uma coluna e várias linhas), quando foi utilizado o exemplo para
efetuar o cálculo da média geral das médias dos oito alunos. A partir deste ponto, serão
apresentadas tabelas com mais colunas, sendo assim, teremos variáveis no sentido
horizontal e vertical.

Um importante aspecto a ser considerado é que na manipulação de uma matriz


tipo vetor é utilizado uma única instrução de looping (enquanto, para ou repita). No caso
de matrizes com mais dimensões, deverá ser utilizado o número de loopings relativo ao
tamanho de suas dimensões. Desta forma, uma matriz de duas dimensões deverá ser
controlada com dois loopings, de três dimensões deverá ser controlada por três loopings
e assim por diante.

Em matrizes de mais de uma dimensão os seus elementos são também


manipulados de forma individualizada, sendo a referência feita sempre por meio de dois
índices: o primeiro para indicar a linha e o segundo para indicar a coluna. Desta forma,
TABELA[2,3] indica que está sendo feita uma referência ao elemento armazenado na
linha 2 coluna 3. Pode-se considerara que uma matriz com mais de uma dimensão é
também um vetor, sendo válido para este tipo de matriz tudo o que já foi utilizado
anteriormente para as matrizes de uma dimensão.

11.2. Operações Básicas com Matrizes de Duas Dimensões

Uma matriz de duas dimensões está sempre fazendo menção a linhas e


colunas e é representada por seu nome e seu tamanho (dimensão) entre colchetes. Desta
forma é uma matriz de duas dimensões TABELA[1..8,1..5], onde seu nome é TABELA,
possuindo um tamanho de 8 linhas (de 1 a 8) e 5 colunas (de 1 a 5), ou seja, é uma matriz
de 8 por 5 (8x5). Isto significa que podem ser armazenados em TABELA até 40 elementos
(posições) que podem ser utilizadas para armazenamento de seus elementos.
11.2.1. Atribuição de uma Matriz

Uma matriz de duas dimensões é atribuída pela instrução vetor já utilizada


para definir o uso de uma matriz de uma dimensão, sendo bastante parecidas em sua
referência. A sintaxe é: VARIÁVEL: vetor[<dimensão1>,<dimensão2>] de <tipo de
dado>, em que <dimensão1> e <dimensão2> são a indicação do tamanho da tabela e
<tipo de dado> o tipo da matriz, que poderá ser formada por valores reais, inteiros,
lógicos ou literais.

11.2.2. Leitura dos Dados de uma Matriz

A leitura de uma matriz de duas dimensões, assim como das matrizes de uma
dimensão é processada passo a passo, um elemento por vez, sendo utilizada a instrução
leia() seguida da variável mais os seus índices. A seguir são apresentados o diagrama de
blocos e codificação em português estruturado da leitura das 4 notas bimestrais de 8
alunos, sem considerar o cálculo da média.

Observe que está sendo considerada a leitura das 4 notas de 8 alunos. Assim
sendo, a tabela em questão armazena 32 elementos. Um detalhe a ser considerado é a
utilização de duas variáveis para controlar os dois índices de posicionamento de dados na
tabela. Anteriormente, foi utilizada a variável i para controlar as posições dos elementos
dentro da matriz, ou seja, a posição em nível de linha. Neste exemplo, a variável i continua
tendo o mesmo efeito e a segunda variável, a j, está controlando a posição da coluna.
Analisando o diagrama de blocos, temos a inicialização das variáveis i e j
como 1, ou seja, a leitura será efetuada na primeira linha da primeira coluna. Em seguida
é iniciado em primeiro lugar o looping da variável i para controlar a posição em relação
às linhas e depois é iniciado o looping da variável j para controlar a posição em relação
às colunas.

Veja que, ao serem iniciados os valores para o preenchimento da tabela, eles


são colocados na posição NOTAS[1,1], lembrando que o primeiro valor dentro dos
colchetes representa a linha e o segundo representa a coluna. Assim sendo, será então
digitado para o primeiro aluno a sua primeira nota. Depois é incrementado mais 1 em
relação à coluna, sendo colocada para a entra a posição NOTAS[1,2], linha 1 e coluna 2.
Desta forma, será digitado para o primeiro aluno a sua segunda nota.

Quando o contador de coluna, o looping da variável j, atingir o valor 4, ele


será encerrado. Em seguida o contador da variável i será incrementado com mais 1,
tornando-se 2. Será então inicializado novamente o contador j em 1, permitindo que seja
digitado um novo dado na posição NOTAS[2,1]. O mecanismo de preenchimento
estender-se-á até que o contador de linhas atinja o seu último valor, no caso 8. Esse
looping é o principal, tendo a função de controlar o posicionamento na tabela por aluno.
O segundo looping, mais interno, controla o posicionamento das notas.
11.2.3. Escrita de Dados de uma Matriz

O processo de escrita é bastante parecido com o processo de leitura de seus


elementos. Supondo que após a leitura das notas dos 8 alunos, houvesse a necessidade de
efetuar a apresentação das notas.
11.3. Exercício de Aprendizagem

Para demonstrar a utilização de matrizes de duas dimensões, considere os


exemplos apresentados em seguida:

1º Exemplo

Desenvolver um programa de agenda que cadastre o nome, endereço, CEP e


telefone de 6 pessoas. Ao final, o programa deverá apresentar os seus elementos dispostos
em ordem alfabética, independentemente da forma em que foram digitados.

Algoritmo

Para resolver este problema, você precisa uma tabela com 10 linhas (pessoas)
e 5 colunas (dados pessoais). Assim sendo, imagine esta tabela como sendo:

Em cada coluna é indicado o seu número, sendo 5 colunas, uma para cada
informação pessoal e o número de linha totalizando um conjunto de 10 informações.

Nesta tabela, são utilizados dois elementos numéricos, o CEP e o Telefone,


mas como não são executados cálculos com esses números, eles são armazenados como
caracteres.
Depois de cadastrar todos os elementos, é iniciado o processo de classificação
alfabética pelo nome de cada pessoa. Este método já foi anteriormente estudado, bastando
aplica-lo neste contexto. Porém, após a comparação do primeiro nome com o segundo,
sendo o primeiro maior que o segundo, deverão ser trocados, mas os elementos
relacionados ao nome também deverão ser trocados no mesmo nível de verificação,
ficando para o final o trecho de apresentação de todos os elementos.

Diagrama de Blocos

Neste exemplo, não estão sendo utilizados para a entrada de dados dois
loopings para controlar o posicionamento dos elementos na matriz. Note que as
referências feitas ao endereço das colunas são citadas como constantes, durante a variação
do valor da variável i.

Com relação à ordenação de elementos de uma matriz de duas dimensões, o


processo é o mesmo utilizado para ordenar matrizes de uma dimensão. Se você sabe fazer
a ordenação de um estilo de matriz, sabe fazer a ordenação de qualquer estilo, seja ela da
dimensão que for. Observe no trecho de ordenação, a troca de posição de todos os
elementos assim que os nomes são comparados e verificados que estão fora de ordem.
Perceba que assim que o nome é trocado de posição, os demais elementos relacionados a
ele na mesma linha também o são.
Para a apresentação dos dados ordenados estão sendo utilizados os dois
loopings para controlar linha e coluna.
O trecho de ordenação do programa AGENDA pode ser simplificado com a
inserção de um looping para administrar a troca após a verificação da condição: se
(dado[atual,1]>DADO[próximo,1]) entao.

Diagrama de Blocos
Neste segundo exemplo está sendo levado em consideração apenas para o
diagrama de blocos o trecho correspondente a ordenação.
2º Exemplo

Desenvolver um programa que efetue a leitura dos nomes de 8 alunos e


também de suas 4 notas bimestrais. Ao final, o programa deverá apresentar o nome de
cada aluno classificado em ordem alfabética, bem como suas médias e a média geral dos
8 alunos.

Algoritmo

Neste exemplo é apresentado um problema cuja solução será utilizar duas


matrizes para a entrada de dados. Já é sabido que uma matriz trabalha somente com dados
de mesmo tipo (homogêneos). E neste caso, em particular, será necessário ter uma matriz
tipo vetor para armazenar os nomes e a outra tipo tabela para armazenar as notas, uma
vez que os tipos de dados a serem manipulados são diferentes.

O programa deverá pedir o nome do aluno e em seguida as quatro notas,


calcular a média e armazena-la numa terceira matriz de uma dimensão, para então
apresentar o nome de cada aluno e sua respectiva média, bem como, a média do grupo.

Logo no início, a variável SOMA_MD é incializada com valor zero. Esta


variável será utilizada para armazenar a soma das médias de cada aluno durante a entrada
de dados.

Depois a instrução para i de 1 até 8 faça inicializa o primeiro looping que tem
por finalidade controlar o posicionamento dos elementos no sentido linear. Neste ponto,
a variável SOMA_NT é inicializada com o valor zero pra o primeiro aluno. Esta variável
irá guardar a soma das quatro notas de cada aluno durante a execução do segundo looping.
Neste momento, é solicitado antes do segundo looping o nome do aluno.

Toda vez que o segundo looping é encerrado, a matriz MEDIA é alimentada


com o valor da variável SOMA_NT dividido por 4. Deste modo, tem-se o resultado da
média do aluno cadastrado. Em seguida é efetuado o cálculo da soma das médias de cada
aluno na variável SOMA_MD, que posteriormente servirá para determinar o cálculo da
média do grupo. É neste ponto, que o primeiro looping repete o seu processo para o
próximo aluno, e assim irá transcorrer até o último aluno.

Após a disposição dos alunos por ordem alfabética de nome, é dado início à
apresentação dos nomes de cada aluno e suas respectivas médias. Ao final, a variável
MEDIA_GP determina o cálculo da média do grupo (média das médias), através do valor
armazenado na variável SOMA_MD dividido por 8 (total de alunos).
11.4. Matriz em C/C++

A linguagem C/C++ permite a declaração de matrizes unidimensionais (mais


conhecidas como vetores – descritos no capítulo anterior), bidimensionais e
multidimensionais. O padrão ANSI prevê, no mínimo, 12 dimensões; entretanto, o limite
de dimensões fica por conta da quantidade de recurso disponível ao compilador. Apesar
disso, as matrizes mais utilizadas possuem duas dimensões.

11.4.1. Declaração de Matriz


Da mesma maneira como ocorrer com os vetores, os índices começam sempre
em zero. Sendo assim, com a declaração anterior, criou-se uma variável chamada X
contendo duas linhas (0 e 1) com seis colunas cadas (0 a 5), capazes de armazenar
números reais.

A declaração anterior criou uma variável chamada MAT contendo quatro


linhas (0 a 3) com três colunas cada (0 a 2), capazes de armazenar símbolos.

11.4.2. Atribuindo Valores à Matriz

Atribui o valor 5 à posição referente à linha 1 (2ª linha) coluna 4 (5ª coluna)
da matriz.

Atribui a letra D à posição referente à linha 3 (4ª linha) coluna 2 (3ª coluna)
da matriz.

11.4.3. Carregando uma Matriz

Para ler dados do teclado e atribuir a uma matriz, supondo que a mesma tenha
sido declarada como int MAT [7][3], pode-se executar os comandos a seguir.

Como a matriz possui sete linhas, o for externo deve variar de 0 a 6


(percorrendo, assim, as sete linhas da matriz) e o for interno deve variar de 0 a 2
(percorrendo, assim, as três colunas da matriz).

11.4.4. Mostrando os Elementos de uma Matriz

Para mostrar os valores armazenados dentro de uma matriz, supondo que a


mesma tenha sido declarada como float X[10][6], pode-se executar os comandos a seguir.
Como a matriz possui dez linhas, o for externo deve variar de 0 a 9
(percorrendo, assim, as dez linhas da matriz) e o for interno deve variar de 0 a 5
(percorrendo, assim, as seis colunas da matriz).

11.5. Exercícios

11.5.1. Desenvolva os algoritmos, seus respectivos diagramas de bloco,


codificação em português estruturado e o programa em C.

a) Ler duas matrizes A e B, cada uma de duas dimensões com 5 linhas e 3


colunas. Construir uma matriz C de mesma dimensão, que é formada pela
soma dos elementos da matriz A com os elementos da matriz B.
Apresentar a matriz C.
b) Ler duas matrizes A e B, cada uma com uma dimensão para 7 elementos.
Construir uma matriz C de duas dimensões, em que a primeira coluna
deverá ser formada pelos elementos da matriz A e a segunda coluna
deverá ser formada pelos elementos da matriz B. Apresentar a matriz C.
c) Ler 20 elementos para uma matriz qualquer, considerando que ela tenha
o tamanho de 4 linhas por 5 colunas, em seguida apresentar a matriz.
d) Ler uma matriz A de uma dimensão com 10 elementos. Construir uma
matriz C de duas dimensões com três colunas, em que a primeira coluna
da matriz C é formada pelos elementos da matriz A somados com mais 5,
a segunda coluna é formada pelo valor do cálculo da fatorial de cada
elemento correspondente da matriz A e a terceira e última coluna deverá
ser formada pelos quadrados dos elementos correspondentes da matriz A.
Apresentar a matriz C. (Observe que fatorial de zero é igual a 1.)
e) Ler uma matriz A de duas dimensões com 10 linhas e 10 colunas.
Apresentar o somatório dos elementos situados na diagonal principal
(posições A[1,1], A[2,2], A[3,3], A[4,4] e assim por diante) da referida
matriz. (Claro que não é para efetuar a soma deste modo: SOMA <-
A[1,1] + A[2,2] + A[3,3] + ... + A[10,10])
f) Ler uma matriz A de duas dimensões com 7 linhas e 7 colunas. Construir
uma matriz B de mesma dimensão, sendo que cada elemento da matriz B
deverá ser o somatório de cada elemento correspondente da matriz A com
o os seus índices (ou seja, se A[1,2] possui o valor 8, B[1,2] deverá possuir
o valor 11, correspondente a 8+1+2), com exceção para os valores
situados nos índices ímpares da diagonal principal (B[1,1], B[3,3] , B[5,5]
, B[7,7]), os quais deverão ser o fatorial de cada elemento correspondente
da matriz A. Apresentar ao final a matriz A e B lado a lado.
g) Ler uma matriz A de duas dimensões com 4 linhas e 4 colunas. Ao final
apresentar o total de elementos pares existentes dentro da matriz.
(Observe que é o total de Elementos e não a soma total do conteúdo dos
elementos.)
h) Ler uma matriz A de duas dimensões com 10 linhas e 7 colunas. Ao final
apresentar o total de elementos pares e o total de elementos ímpares
existentes dentro da matriz. Apresentar também o percentual de elementos
pares e ímpares em relação ao total de elementos da matriz. Supondo a
existência de 20 elementos pares e 50 elementos ímpares, ter-se-ia 28.6
% de elementos pares e 71,4% de elementos ímpares.
i) Desenvolver um programa que efetua a leitura dos nomes de 5 alunos e
também de suas duas notas semestrais. Ao final deverá ser apresentado o
nome de cada aluno classificado em ordem numérica crescente de suas
médias anuais.

11.5.2. Desenvolva os algoritmos, seus respectivos diagramas de bloco,


codificação em português estruturado e o programa em C.

a) Ler duas matrizes A e B, cada uma com uma dimensão para 12 elementos.
Construir uma matriz C de duas dimensões, sendo que a primeira coluna
da matriz C deverá ser formada pelos elementos da matriz A
multiplicados por 2 e a segunda coluna deverá ser formada pelos
elementos da matriz B subtraídos de 5. Apresentar a matriz C.
b) Ler uma matriz A de duas dimensões com 8 linhas e 6 colunas. Construir
uma matriz B de uma dimensão que seja formada pela soma de cada linha
da matriz A. Ao final apresentar o somatório dos elementos da matriz B.
c) Elaborar um programa que efetue a leitura de 20 valores inteiros em uma
matriz A de duas dimensões com 4 linhas e 5 colunas. Construir uma
matriz B de uma dimensão para 4 elementos que seja formada pelo
somatório dos elementos correspondentes de cada linha da matriz A.
Construir tam’bem uma matriz C de uma dimensão para 5 elementos que
seja formada pelo somatório dos elementos correspondentes de cada
coluna da matriz A. Ao final o programa deverá apresentar o total do
somatório dos elementos da matriz B com o somatório dos elementos da
matriz C.
d) Ler duas matrizes A e B de duas dimensões com 5 linhas e 5 colunas. A
matriz A deverá ser formada por valores que não seja divisíveis por 3,
enquanto a matriz B deverá ser formada por valores que não sejam
divisíveis por 6. As entradas dos valores nas matrizes deverão ser
validadas pelo programa então pelo usuário. Construir e apresentar uma
matriz C de mesma dimensão e número de elementos que contenha a soma
dos elementos da matrizes A e B.
12.Referências Bibliográficas

ASCENCIO, A. F. G. e CAMPOS, E. A. V. Fundamentos da Programação de


Computadores – Algoritmos, Pascal e C/C++. Editora Pearson – Prentice Hall, São Paulo.

LEONARDO MÜLLER (10 de Janeiro de 2014), Intel se prepara para colocar RAM
DDR4 no mercado até o fim de 2014. Tecmundo. Disponível em <
http://www.tecmundo.com.br/intel/48936-intel-se-prepara-para-colocar-ram-ddr4-no-
mercado-ate-o-fim-de-2014.htm >. Acessado em: 26/02/2014.

LUCAS SFAIR (9 de fevereiro de 2009). Entenda sobre placas de som e saiba escolher a
sua. Tecmundo. Página visitada em 25 de fevereiro de 2014.

MANZANO, José Augusto N. G., Estudo Dirigido: ALGORITMOS - Editora Érica,


2000.

MERRIAM-WEBSTER ONLINE DICTIONARY. science - Definition from the


Merriam-Webster Online Dictionary (em inglês). 2009. Página visitada em 20 de junho
de 2009.

TOCCI, R. J. e WILDMER, N. S. Sistemas Digitais – Princípios e Aplicações. Editora


LTC. 7ª ed. Rio de Janeiro, 1998.

Potrebbero piacerti anche