Buscar

Introdução à Programação Conceitos e Práticas

Prévia do material em texto

Este material aborda o conteúdo de uma 
disciplina de introdução à programação 
para cursos de Ciência da Computação e 
Engenharias. A linguagem de 
programação utilizada é a Linguagem C. 
A primeira parte engloba o histórico da 
computação e os fundamentos 
necessários à compreensão do mundo 
digital. A segunda parte contempla os 
principais elementos de programação do 
paradigma imperativo e procedural. 
Introdução à 
Programação: 
Conceitos e Práticas. 
Jorge Habib Hanna El Khouri 
 
Introdução à Programação: Conceitos e Práticas. Página 1 
 
 
 
Introdução à Programação: 
Conceitos e Práticas. 
(notas de aulas) 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 2 
 
 
Introdução à Programação: 
Conceitos e Práticas. 
(notas de aulas) 
 
 
 
Jorge Habib Hanna El Khouri 
 
 
 
 
Professor Assistente do Centro de Engenharias e Ciências Exatas 
Universidade Estadual do Oeste do Paraná 
Campus de Foz do Iguaçu 
 
 
 
Revisão Técnica: 
 
 
 
 
 
 
 
 
 
Fev-2019 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 3 
 
 
 
 
 
CONTEÚDO 
 
 
 
 
1. História da Computação ................................................................................. 11 
1.1. Principais Eventos .......................................................................................... 11 
1.2. Gerações de Computadores ........................................................................... 17 
1.2.1. Primeira Geração (1938 - 1953) ...................................................................... 17 
1.2.2. Segunda Geração (1952 - 1963) ..................................................................... 19 
1.2.3. Terceira Geração (1962 - 1975) ...................................................................... 22 
1.2.4. Quarta Geração (1972 - ...) ............................................................................. 23 
2. Sistemas de Numeração................................................................................. 26 
2.1. Sistema de Numeração Egípcio ..................................................................... 26 
2.2. Sistema de Numeração Romano .................................................................... 27 
2.3. Sistema de Numeração Maia .......................................................................... 27 
2.4. Sistema de Numeração Decimal .................................................................... 29 
3. Conceito de Bases .......................................................................................... 33 
3.1. Sistema Decimal ............................................................................................. 33 
3.2. Sistema Hexadecimal ..................................................................................... 34 
3.3. Sistema Binário ............................................................................................... 35 
3.4. Base Qualquer ................................................................................................ 36 
3.5. Conversão entre Bases .................................................................................. 37 
3.5.1. Conversão de Qualquer Base para a Base 10 ................................................ 37 
3.5.2. Conversão da Base 10 para Qualquer Base ................................................... 39 
3.6. Exercícios ....................................................................................................... 42 
3.6.1. Conversão da Base 2n para a Base 2 ............................................................. 42 
3.6.2. Conversão da Base 4 para a Base 2............................................................... 43 
3.6.3. Conversão da Base 8 para a Base 2............................................................... 43 
3.6.4. Conversão da Base 16 para a Base 2 ............................................................. 44 
3.7. Exercícios ....................................................................................................... 45 
4. Operações com Números Binários ................................................................. 46 
4.1. Operações Aritméticas ................................................................................... 46 
4.1.1. Soma ............................................................................................................... 46 
4.1.2. Subtração ........................................................................................................ 47 
4.1.3. Multiplicação ................................................................................................... 48 
 
Introdução à Programação: Conceitos e Práticas. Página 4 
4.1.4. Divisão ............................................................................................................ 48 
4.1.5. Exercícios ........................................................................................................ 49 
4.2. Operações Lógicas ......................................................................................... 50 
4.2.1. NOT (NÃO) ..................................................................................................... 51 
4.2.2. AND (E) ........................................................................................................... 52 
4.2.3. OR (OU) .......................................................................................................... 55 
4.2.4. XOR / OU EXCLUSIVO ................................................................................... 57 
4.2.5. Exemplos ........................................................................................................ 58 
4.2.6. Exercícios ........................................................................................................ 60 
4.3. Operações Aritméticas Binárias com Circuitos Lógicos .................................. 60 
4.3.1. Somador Completo ......................................................................................... 61 
4.3.2. Subtrator Completo ......................................................................................... 62 
5. Representação de Dados ............................................................................... 65 
5.1. Representação de Números Inteiros .............................................................. 66 
5.1.1. Inteiros Sem Sinal – Binário Puro.................................................................... 66 
5.1.2. Inteiro Com Sinal ............................................................................................. 66 
5.1.2.1. Módulo Sinal ................................................................................................... 66 
5.1.2.2. Complemento de 1 ......................................................................................... 67 
5.1.2.3. Complemento de 2 ......................................................................................... 68 
5.1.2.4. Excesso de 2N-1 .............................................................................................. 69 
5.1.2.5. Visualização .................................................................................................... 70 
5.1.3. Soma em Complemento de 2 .......................................................................... 72 
5.1.4. Exercícios ........................................................................................................ 73 
5.2. Representação de Números Reais ................................................................. 74 
5.2.1. Formato IEEE 754 ........................................................................................... 78 
5.2.2. Exercícios ........................................................................................................ 79 
5.3. Representação de Informações Textuais ....................................................... 81 
6. Introdução a Arquitetura ................................................................................. 84 
6.1. Processador- CPU ......................................................................................... 86 
6.1.1. Seção de Controle ........................................................................................... 87 
6.1.2. Seção de Processamento ............................................................................... 88 
6.1.3. Barramentos .................................................................................................... 88 
6.1.4. O sinal de Clock .............................................................................................. 91 
6.1.5. Organização do Computador .......................................................................... 91 
6.1.5.1. Pipeline ........................................................................................................... 92 
6.1.5.2. Cache ............................................................................................................. 92 
6.1.5.3. Outras Técnicas .............................................................................................. 94 
7. Introdução à Programação ............................................................................. 95 
8. O Processo de Tradução ................................................................................ 98 
9. A Linguagem C ............................................................................................... 99 
10. Estrutura de um Programa C ........................................................................ 102 
11. Identificadores .............................................................................................. 102 
12. Variáveis e Tipos de Dados .......................................................................... 103 
13. Operador Atribuição ...................................................................................... 104 
14. Expressões Numéricas ................................................................................. 106 
14.1. Tipos Numéricos ........................................................................................... 106 
14.2. Constantes .................................................................................................... 108 
 
Introdução à Programação: Conceitos e Práticas. Página 5 
14.3. Operadores Matemáticos .............................................................................. 111 
14.4. Funções Matemáticas ................................................................................... 114 
14.5. Exemplos ...................................................................................................... 127 
15. Comandos de Entrada e Saída ..................................................................... 129 
15.1. Entrada de Dados ......................................................................................... 129 
15.2. Saída de Dados............................................................................................. 133 
15.3. Exemplos ...................................................................................................... 138 
16. Implementando Funções .............................................................................. 140 
16.1. Exemplos ...................................................................................................... 141 
16.2. Exercícios ...................................................................................................... 144 
17. O Tipo Ponteiro ............................................................................................. 151 
18. Passagem de Parâmetros ............................................................................ 155 
18.1. Passagem de Parâmetro por Cópia .............................................................. 155 
18.2. Passagem de Endereço como Parâmetro ..................................................... 158 
18.3. Exemplo ........................................................................................................ 161 
19. Expressões Lógicas ...................................................................................... 165 
19.1. Tipo de Dado Boolean ................................................................................... 165 
19.2. Operadores Lógicos ...................................................................................... 166 
19.3. Operadores Relacionais ................................................................................ 167 
19.4. Exemplos ...................................................................................................... 169 
20. Instruções de Controle .................................................................................. 172 
20.1. Seleção – IF-THEN-ELSE ............................................................................. 173 
20.1.1. Sintaxe e Semântica ..................................................................................... 173 
20.1.2. Exemplos ...................................................................................................... 175 
20.2. Seleção – CASE............................................................................................ 183 
20.2.1. Sintaxe e Semântica ..................................................................................... 183 
20.2.2. Exemplos ...................................................................................................... 185 
20.3. Repetição – FOR⋯DO .................................................................................. 190 
20.3.1. Sintaxe e Semântica ..................................................................................... 190 
20.3.2. Exemplos ...................................................................................................... 192 
20.4. Repetição – WHILE⋯DO .............................................................................. 209 
20.4.1. Sintaxe e Semântica ..................................................................................... 209 
20.4.2. Exemplos ...................................................................................................... 211 
20.5. Repetição – REPEAT⋯UNTIL ...................................................................... 223 
20.5.1. Sintaxe e Semântica ..................................................................................... 223 
20.5.2. Exemplos ...................................................................................................... 224 
21. Array ............................................................................................................. 228 
21.1. Vetor .............................................................................................................. 229 
21.2. Sintaxe e Semântica ..................................................................................... 230 
21.3. Exemplos ...................................................................................................... 232 
22. Expressões Textuais .................................................................................... 254 
22.1. Tipos Textuais ............................................................................................... 254 
22.2. Constantes .................................................................................................... 254 
22.3. Operadores ................................................................................................... 259 
22.4. Funções ........................................................................................................ 260 
22.5. Exemplos ...................................................................................................... 265 
22.6. Matriz ............................................................................................................ 268 
 
Introdução à Programação: Conceitos e Práticas. Página 6 
22.7. Sintaxe e Semântica ..................................................................................... 268 
22.8. Exemplos...................................................................................................... 271 
23. Arquivos ........................................................................................................ 292 
23.1. Arquivo Texto: Funções e Procedimentos ..................................................... 296 
23.2. Exemplos ...................................................................................................... 303 
24. Conjuntos ...................................................................................................... 324 
24.1. Operadores ................................................................................................... 324 
24.2. Exemplos ...................................................................................................... 326 
25. Registro ........................................................................................................ 331 
25.1. Sintaxe .......................................................................................................... 333 
25.2. Exemplos ...................................................................................................... 336 
26. Tipos Ordinais Definidos pelo Usuário .......................................................... 341 
26.1. Enumerados .................................................................................................. 341 
26.2. Subdomínio ................................................................................................... 344 
27. Expressões Binárias ..................................................................................... 347 
27.1. Operadores Binários ..................................................................................... 347 
27.2. Operadores de Deslocamento de Bits ........................................................... 348 
27.3. Exemplos ...................................................................................................... 350 
28. Ponteiros ....................................................................................................... 356 
28.1. Sintaxe .......................................................................................................... 356 
28.2. Operação com Ponteiros ............................................................................... 357 
28.3. Exemplos ...................................................................................................... 358 
29. Estrutura de dados dinâmica ........................................................................ 368 
29.1. Organização da memória de um programa em execução ............................. 368 
29.2. Alocação dinâmica ........................................................................................ 370 
29.3. Exemplos ...................................................................................................... 372 
30. Interpretador da Linha Comando .................................................................. 381 
31. Recursividade ............................................................................................... 383 
31.1. Conceito ........................................................................................................ 383 
31.2. Exemplos ...................................................................................................... 385 
32. Referências Bibliográficas ............................................................................ 390 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 7 
 
 
 
 
 
FIGURAS 
 
 
 
 
Figura 1: Ábaco. ............................................................................................................ 11 
Figura 2: Ábaco e o seu uso. ......................................................................................... 11 
Figura 3: O mecanismo de Anticítera. ........................................................................... 12 
Figura 4: Réplica do mecanismo de Anticítera. ............................................................. 12 
Figura 5: Esquema da máquina de Anticítera................................................................ 12 
Figura 6: Tabela de Logaritmo de Napier ...................................................................... 12 
Figura 7: Manuscrito Original de Schickard. .................................................................. 13 
Figura 8: Réplica da Calculadora de Schickard. ............................................................ 13 
Figura 9: La Pascaline. .................................................................................................. 13 
Figura 10: La Pascaline. ................................................................................................ 13 
Figura 11: Régua de Cálculo. ........................................................................................ 14 
Figura 12: Máquina de Leibniz. ..................................................................................... 14 
Figura 13: Tear Automático de Jacquard. ..................................................................... 15 
Figura 14: Máquina Analítica de Babbage. .................................................................... 15 
Figura 15: Formulário: Primeiro algoritmo de Ada. ........................................................ 16 
Figura 16: Detalhe de parte do Formulário. ................................................................... 16 
Figura 17: Cartão perfurado de Hollerith. ...................................................................... 16 
Figura 18: Máquina de Tabulação. ................................................................................ 16 
Figura 19: ENIAC. ......................................................................................................... 18 
Figura 20: Memória de Núcleo. ..................................................................................... 20 
Figura 21: Ambiente de Programação da Segunda Geração. ....................................... 21 
Figura 22: Evolução no nível de Programação. ............................................................. 22 
Figura 23: Principais características de Software e Hardware por geração. ................. 25 
Figura 24: Circuitos Digitais: Contribuições ................................................................... 46 
Figura 25: Circuito Somador Completo de 1 bit. ............................................................ 62 
Figura 26: Circuito da Soma de N bits. .......................................................................... 62 
Figura 27: Circuito Subtrator Completo de 1 bit. ............................................................ 64 
Figura 28: Mundo Real x Mundo Digital. ....................................................................... 65 
Figura 29: Métodos de Representação de Dados ......................................................... 65 
Figura 30: Representação em Módulo-Sinal ................................................................. 67 
Figura 31: Faixa de Representação de Números Reais. ............................................... 77 
file:///C:/Dados/TP6/HABIB/COMPUTA/Material/Computacao%20I/Notas%20de%20Aula%20-%20Computacao%20I%20-%20Ling%20C%20R03.docx%23_Toc3139190
file:///C:/Dados/TP6/HABIB/COMPUTA/Material/Computacao%20I/Notas%20de%20Aula%20-%20Computacao%20I%20-%20Ling%20C%20R03.docx%23_Toc3139196
 
Introdução à Programação: Conceitos e Práticas. Página 8 
Figura 32: Organização típica de um computador. ........................................................ 84 
Figura 33: Programa na Memória RAM: Código + Dados. ............................................ 85 
Figura 34: Unidade Central de Processamento típica. .................................................. 86 
Figura 35: Passos na execução de uma instrução. ....................................................... 87 
Figura 36: A sincronização da execução de uma instrução com o sinal de clock. ........ 91Figura 37: Execução e Pipeline. .................................................................................... 92 
Figura 38: Memória Cache. ........................................................................................... 93 
Figura 39: Genealogia das Linguagens – Base FORTRAN. ......................................... 95 
Figura 40: Genealogia das Linguagens. ........................................................................ 96 
Figura 41: Níveis de Programação. ............................................................................... 96 
Figura 42: Ciclo de Desenvolvimento de Software. ....................................................... 97 
Figura 43: Processo de Tradução ................................................................................. 98 
Figura 44: Estilo de Programação Spaghetti. ................................................................ 99 
Figura 45: Evolução no estilo de programação. .......................................................... 100 
Figura 46: Analogia variável vs cadeira. ...................................................................... 104 
Figura 47: Precedência de Operadores,. ..................................................................... 112 
Figura 48: Estrutura de uma função. ........................................................................... 140 
Figura 49: Estrutura da função getimc. ........................................................................ 143 
Figura 50: Contexto da chamada da função foo. ......................................................... 156 
Figura 51: Ponto 1 – Passagem por Cópia. ................................................................. 157 
Figura 52: Ponto 2 – Passagem por Cópia. ................................................................. 157 
Figura 53: Ponto 3 – Passagem por Cópia. ................................................................. 157 
Figura 54: Ponto 1 – Passagem por ―Referência‖. ...................................................... 159 
Figura 55: Ponto 2 – Passagem por ―Referência‖. ...................................................... 159 
Figura 56: Ponto 3 – Passagem por ―Referência‖. ...................................................... 160 
Figura 57: Ponto 1 – Calculo Raizes. .......................................................................... 162 
Figura 58: Ponto 2 – Calculo Raizes. .......................................................................... 163 
Figura 59: Ponto 3 – Calculo Raizes. .......................................................................... 163 
Figura 60: Diagrama lógico para o cálculo das raízes de uma equação do 2º grau. ... 177 
Figura 61: Instrução CASE .......................................................................................... 184 
Figura 62: Repetição do tipo FOR. .............................................................................. 191 
Figura 63: Estrutura de Controle do tipo FOR ............................................................. 191 
Figura 64: Instrução BREAK. ....................................................................................... 204 
Figura 65: Conversão Decimal - Binário ...................................................................... 212 
Figura 66: Correspondência entre Definição do Vetor e a Atribuição. ......................... 232 
Figura 67: Cópia de Sub-Vetor. ................................................................................... 248 
Figura 68: Posição de Sub-Vetor. ................................................................................ 248 
Figura 69: Eliminação de um Sub-Vetor. ..................................................................... 249 
Figura 70: Comparação Escalar, Vetor e Matriz .......................................................... 268 
Figura 71: Entrada/Saída de grande volume de dados sem o uso de arquivos .......... 292 
Figura 72: Entrada/Saída de grande volume de dados com o uso de arquivos .......... 293 
Figura 73: Visualização de um arquivo texto como sequência de caracteres. ............ 294 
Figura 74: Visualização de um arquivo executável como sequência de caracteres. ... 294 
Figura 75: Dado em Memória gravado em arquivo como binário ................................ 295 
Figura 76: Dado em Memória gravado em arquivo como texto ................................... 295 
Figura 77: Manipulação de Arquivo por um programa ................................................. 296 
Figura 78: Organização dos dados da disciplina na memória ..................................... 311 
 
Introdução à Programação: Conceitos e Práticas. Página 9 
Figura 79: Abstrações típicas de uma linguagem procedural ...................................... 332 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 10 
 
 
 
 
 
PREFÁCIO 
 
 
 
 
O conteúdo deste material é fruto de um conjunto de notas de aulas preparadas para a 
disciplina introdutória à programação da grade do curso de Ciência da Computação e 
posteriormente estendido para cursos de engenharias, principalmente Engenharia Elétrica 
e Mecânica. A estrutura do material não está centrada em uma linguagem de 
programação, mas sim no estabelecimento de uma sequência natural de conteúdos que 
proporcione, desde o seu princípio, o suporte logico para a construção de programas 
elementares. No avançar das temáticas o conhecimento vai sendo refinado e ao mesmo 
tempo testado com problemas mais elaborados. 
 
Antecedendo o conteúdo de programação são apresentados tópicos que ilustram os 
pontos na história que marcaram a evolução da computação, onde conhecimentos das 
mais diversas áreas foram combinados a fim de delinear o estado atual da tecnologia da 
informação. Uma parte fundamental da computação está na compreensão da natureza 
dos dados e como eles circulam no ambiente computacional. Assim, os sistemas de 
numeração são abordados visando alcançar um entendimento sobre a notação binária 
que predomina no mundo digital. Uma breve exposição sobre a destaca 
o trânsito da informação entre as camadas de e de , e expõe a 
importância de se compreender toda a transformação a que é submetido um determinado 
problema até se transformar efetivamente em um programa ativo na arquitetura do 
computador. Um estudante de computação ou de engenharia (relacionada ao tema) deve 
ter a clara noção de todas as camadas de abstração que formam o contexto 
computacional. Os principais métodos de representação de dados elementares são 
expostos e proporcionam conhecimentos essenciais ao entendimento dos seus impactos 
nos algoritmos. 
 
A parte de programação estabelece uma sequência de exposição do conteúdo tanto nos 
aspectos conceituais quanto nas aplicações práticas. Os recursos de programação 
apresentados são os típicos da família de linguagens denominada imperativa ou 
procedural, e a linguagem é a escolhida para concretizar os ensinamentos. A 
grande similaridade entre as linguagens procedurais atuais faz com que a transposição 
dos conhecimentos apresentados para outras linguagens seja muito facilitada. 
 
Introdução à Programação: Conceitos e Práticas. Página 11 
 
 1. História da Computação 
 
Este capítulo resume os principais eventos históricos que culminaram com o estágio 
atual da tecnologia digital. Os desenvolvimentos ocorreram nas mais variadas áreas da 
Ciência e o processo de evolução tecnológica foi gerado em grande parte pelo 
cruzamento destes conhecimentos. Destaca-se como fonte de consulta para 
aprofundamento dos temas aqui citados a publicação [ ] . Além disso, o 
acervo do e do site , principalmente as 
fotos, também serviram de fonte de consulta. 
 
 
 1.1. Principais Eventos 
 
O uso de ferramentas para apoiar as atividades do homem não é recente, e desde os 
primórdios de nossa história tem-se observado um constante aumento no uso de 
equipamentos e instrumentos que auxiliam nastarefas normalmente realizadas por seres 
humanos. 
 
No campo da informática, o processo de evolução se deu de forma lenta durante séculos, 
experimentando uma explosão tecnológica acentuada na segunda metade do século 
passado. 
 
Na busca por alternativas para o trabalho realizado pelo homem, principalmente na 
mecanização do processo de contagem e na realização de trabalhos exaustivos, 
obstáculos importantes foram sendo superados, a saber: 
 
a) a.C. - uso do ábaco no vale entre os rios Tigre e Eufrates; 
b) a.C. - aparecimento do ábaco chinês, chamado Suan-Pan, e do Soroban no 
Japão; 
 
 
Figura 1: Ábaco. 
 
Figura 2: Ábaco e o seu uso. 
 
c) a.C. – Alfabeto Fenício; 
 
Introdução à Programação: Conceitos e Práticas. Página 12 
d) a.C. – uso de um mecanismo denominado Anticítera1 com um complexo sistema 
de engrenagens provavelmente aplicado à navegação. Foi resgatado em na 
costa da ilha grega de Anticítera. O sistema de engrenagens simulava as órbitas da 
lua, sol e de mais cinco planetas, além de prever eclipses da lua e do sol. 
 
Figura 3: O mecanismo de 
Anticítera. 
 
 
Figura 4: Réplica do 
mecanismo de Anticítera
2
. 
 
Figura 5: Esquema da máquina de 
Anticítera. 
 
e) - Johannes Gutenberg (Mainz – Sacro Império Romano Germânico, — 
de fevereiro de ), inventou a Prensa Móvel. 
f) séc. - John Napier (Edimburgo – Escócia, — de abril de ) inventou o 
logaritmo e uma máquina capaz de multiplicar e dividir automaticamente; 
 
 
Figura 6: Tabela de Logaritmo de Napier 
 
1
 http://pt.wikipedia.org/wiki/Máquina_de_Anticítera 
2
 Disponível no Museu Arqueológico Nacional de Atenas (feita por Robert J. Deroski, com base em Derek J. de Solla 
Price. http://pt.wikipedia.org/wiki/Máquina_de_Anticítera 
http://pt.wikipedia.org/wiki/Museu_Arqueol%C3%B3gico_Nacional_de_Atenas
http://pt.wikipedia.org/w/index.php?title=Robert_J._Deroski&action=edit&redlink=1
http://pt.wikipedia.org/w/index.php?title=Derek_J._de_Solla_Price&action=edit&redlink=1
http://pt.wikipedia.org/w/index.php?title=Derek_J._de_Solla_Price&action=edit&redlink=1
 
Introdução à Programação: Conceitos e Práticas. Página 13 
g) - Wilhelm Schickard ( de abril de , Herrenberg, Alemanha — de 
outubro de , Tübingen) construiu uma calculadora mecânica, baseada em rodas 
dentadas, capaz de realizar as operações básicas com números de seis dígitos e 
indicar um overflow através do toque de um sino. 
 
 
Figura 7: Manuscrito Original de Schickard. 
 
Figura 8: Réplica da Calculadora de Schickard. 
 
h) - Blaise Pascal (Clermont-Ferrand - França, de Junho de — Paris, de 
Agosto de ) utilizando o princípio do ábaco, implementou uma máquina 
automática de calcular - La pascaline. Efetuava somas e subtrações; 
 
 
Figura 9: La Pascaline. 
 
Figura 10: La Pascaline. 
 
i) – Padre Willian Oughtred (Eton-Inglaterra, de Março de — Albury, de 
Junho de ) inventou a régua de cálculo (Slide rule/ slipstick) baseada nos 
logaritmos de Napier e divulgou o uso do sinal para multiplicação, tendo 
introduzido os termos , e . 
 
 
Introdução à Programação: Conceitos e Práticas. Página 14 
j) – Seth Patridge, Inglês, desenvolveu a régua de cálculo deslizante. Este 
dispositivo foi muito utilizado até os anos setenta; 
 
Figura 11: Régua de Cálculo. 
k) - Gottfried Wilhelm von Leibniz (Leipzig - Alemanha, de julho de — 
Hanover, de novembro de ) aprimorou a máquina de Pascal e obteve uma 
calculadora que somava, subtraía, multiplicava e dividia; 
 
 
Figura 12: Máquina de Leibniz. 
l) - Gottfried Wilhelm von Leibniz (Leipzig - Alemanha, de julho de — 
Hanover, de novembro de ) publica o artigo "Explication de l'Arithmétique 
Binaire" organizando o conhecimento sobre o sistema numérico binário; 
m) - James Watt (Greenock, Reino Unido, 19 de Janeiro de 1736 — Heathfield Hall, 
Reino Unido, 25 de Agosto de 1819) – Máquina a Vapor – Revolução Industrial – 
Indústria 1.0. 
n) – Joseph Marie Charles - apelido Jacquard (Lyon – França, de Julho de – 
 de Agosto de ), mecânico, construiu um tear automático com entrada de dados 
via cartões perfurados para controlar a confecção dos tecidos e seus desenhos; 
 
Introdução à Programação: Conceitos e Práticas. Página 15 
 
Figura 13: Tear Automático de Jacquard. 
o) – Charles Babbage (Londres - Inglaterra, de Dezembro de — Londres, 
 de Outubro de ) projetou a sua Máquina Analítica ou Diferencial, que possuía 
memória, programa, unidade de controle e periféricos; 
 
 
Figura 14: Máquina Analítica de Babbage. 
 
p) - Ada Augusta Byron King, Condessa de Lovelace (Londres – Inglaterra, de 
Dezembro de - de Novembro de ), conhecida como Ada Lovelace, fez os 
primeiros estudos sobre aritmética binária. Escreveu o primeiro algoritmo para ser 
processado por uma máquina, a máquina analítica de Charles Babbage. 
 
 
Introdução à Programação: Conceitos e Práticas. Página 16 
 
Figura 15: Formulário: Primeiro algoritmo 
de Ada. 
 
Figura 16: Detalhe de parte do Formulário. 
 
q) - George Boole (Lincoln - Inglaterra, de Novembro de — Ballintemple, 
de Dezembro de ) desenvolveu a teoria da Álgebra de Boole (livro: An 
Investigation of the Laws of Thought), que permitiu o desenvolvimento da Teoria dos 
Circuitos Lógicos; 
r) - Herman Hollerith (Buffalo - EUA, de Fevereiro de — Washington, D.C., 
 de Novembro de ) empresário norte-americano, construiu a Máquina de 
recenseamento utilizada no censo de dos EUA. A máquina efetuava a leitura dos 
cartões de papel perfurados com as informações em código (Decimal Codificado 
em Binário). Os dados do censo de foram tabulados em apenas um ano. O 
censo de levou oito anos para ser tabulado; 
 
 
Figura 17: Cartão perfurado de 
Hollerith. 
 
Figura 18: Máquina de Tabulação. 
 
s) - Hollerith e Watson fundam a IBM; 
 
Introdução à Programação: Conceitos e Práticas. Página 17 
t) - Alan Mathison Turing (Londres – Inglaterra, de Junho de — de Junho 
de ) desenvolveu a teoria de uma capaz de resolver qualquer problema 
computável. Foi denominada de ; 
u) - Claude Elwood Shannon (Petoskey, Michigan – EUA, de Abril de — 
 de Fevereiro de ) escreve sua tese de mestrado “A Symbolic Analysis of Relay 
and Switching Circuits” onde utiliza aritmética binária e Álgebra de Boole para 
implementar lógicas através de circuitos com chaves e relés, tornando-se um marco 
para os circuitos digitais; 
v) - sob a liderança de Alan Turing foi projetado o , computador inglês 
utilizado na Segunda Guerra Mundial para quebrar o segredo alemão codificado pela 
máquina . 
 
Este processo evolutivo culminou com o surgimento das primeiras máquinas capazes de 
realizar cálculos mais complexos do que as operações básicas. A partir de então, várias 
gerações de computadores foram surgindo até os dias atuais. 
 
 
 1.2. Gerações de Computadores 
 
Na sequência são listadas as principais contribuições em cada geração de 
computadores, enfatizando-se a tecnologia utilizada para a construção do hardware e a 
forma de programação. Trata-se apenas de um sumário bastante resumido, que serve 
como referência de termos para pesquisas mais detalhadas. 
 
 
 1.2.1. Primeira Geração (1938 - 1953) 
 
A primeira geração foi marcada pela construção do primeiro computador eletrônico, o 
 V (Electronic Numerical Integrator and Computer), em , tornando-se um marco 
na evolução da computação. O começou a operar em , sendo concluído 
totalmente em e encerrando suas operações em . 
 
O desenvolvimento do se deu na Universidade da Pensilvânia (Filadélfia, EUA),e 
contou com o apoio de John von Neumann. 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 18 
 
Figura 19: ENIAC. 
 
O continha válvulas, relés, resistores, capacitores o 
que resultava em mais de toneladas de equipamentos distribuídos em . Seu 
consumo chegava a . A entrada e saída de dados eram feitas por meio de leitora 
de cartões de perfurados, enquanto que a programação se dava pela construção de 
circuitos específicos para tratar o problema por ajustes manuais de chaves e conexões de 
cabos. 
 
A unidade de sincronização trabalhava com ciclos de microsegundos ( ciclos de 
clock de ), sendo capaz de executar adições/subtrações ou 
multiplicações ou divisões ou raiz quadrada por segundo. A memória era capaz de 
conter números ( bytes). 
 
Sua utilização inicial foi em trabalhos com soluções numéricas de problemas relacionados 
com trajetórias balísticas e no desenvolvimento da bomba de hidrogênio. 
 
Em junho de , von Neumann publicou o trabalho sobre o (Electronic Discrete 
Variable Automatic Computer), e estabeleceu as bases para as arquiteturas de 
computadores das gerações seguintes, atualmente conhecida como ―arquitetura de von 
Neumann‖, que trazia o conceito de programa armazenado. 
 
O esforço de guerra levou à construção, em , pelos ingleses da máquina , 
concebida para quebrar o código da máquina alemã , utilizada na transmissão de 
mensagens. Pelo fato de ser uma máquina estratégica no campo militar, a sua divulgação 
foi bastante limitada, o que restringiu o reconhecimento da sua importância no 
desenvolvimento da computação. Os trabalhos de Alan Turing sobre computabilidade 
foram consideravelmente relevantes na construção dos algoritmos da máquina 
 . 
 
 
Introdução à Programação: Conceitos e Práticas. Página 19 
Nesta geração, a programação era em linguagem de máquina composta da codificação 
binária das instruções da máquina. Por exemplo, a soma de dois números produzindo um 
resultado na memória tinha um código semelhante à: 
 
 
 
O entendimento desta lógica era restrito aos profissionais com conhecimento da 
arquitetura do computador. 
 
Em resumo, a primeira geração se caracterizou por: 
 
 Surgimento do ; 
 Utilização de relés como dispositivos de chaveamento; 
 Utilização de válvulas a vácuo; 
 Hardware caro, grande e de difícil manutenção; 
 Programação em linguagem de máquina; 
 permitiu o uso de software. 
 
 
 1.2.2. Segunda Geração (1952 - 1963) 
 
A segunda geração foi caracterizada pela invenção do por John Bardeen, 
Walter Brattain e William Shockley. Em dezembro de Brattain e Moore apresentaram 
o dispositivo para um grupo da Bell Labs. 
 
Em a Bell Labs conclui o , tido como o primeiro computador totalmente 
transistorizado. As vantagens dos transistores em relação às válvulas a vácuo são 
principalmente: menos consumo de energia, peso e tamanho menores, reduzida perda de 
calor e aquecimento, maior confiabilidade e robustez, maior duração e resistência a 
impacto e vibração. 
 
Também nesta geração foram consolidados dispositivos como as impressoras, as fitas 
magnéticas e os discos para armazenamento, dentre outros. 
 
A memória do computador passou a utilizar tecnologia de núcleo magnético, também 
denominada , composta por diminutos anéis magnéticos conectados por fios 
que permitiam a leitura e gravação de informação. Os valores e eram associados 
ao sentido de magnetização deste núcleo. 
 
 
Introdução à Programação: Conceitos e Práticas. Página 20 
 
Figura 20: Memória de Núcleo. 
 
O surgimento dos sistemas operacionais e das linguagens de programação acelerou o 
desenvolvimento dos computadores. 
 
A forma de programação evoluiu da para , 
onde os códigos binários eram associados a mnemônicos que indicavam o tipo de 
operação realizada. Assim, a soma de dois números produzindo um resultado na memória 
tinha um código semelhante à: 
 
LINGUAGEM ASSEMBLY LINGUAGEM DE MÁQUINA 
 
 
 
 
 
 
 
A percepção do poder de codificação em linguagens mais acessíveis levou a um 
importante salto das linguagens de alto nível com a criação do FORTRAN em e 
COBOL em , iniciando assim um forte ciclo de desenvolvimento de novas linguagens. 
 
O mesmo problema podia agora ser codificado em uma de forma 
muito semelhante à sua notação matemática: 
 
LINGUAGEM DE ALTO NÍVEL LINGUAGEM ASSEMBLY LINGUAGEM DE MÁQUINA 
 
 
 
 
 
 
 
 
A forma de utilização dos computadores era semelhante a de uma calculadora, onde o 
programa e dados eram introduzidos via cartões perfurados, fita de papel perfurado ou fita 
magnética e os resultados eram gerados para estes mesmos dispositivos. Em a 
primeira impressoraVI, fabricada pela Remington-Rand, foi utilizada como dispositivo de 
saída integrado ao computador , dos mesmos criadores do . 
 
Neste período, os computadores ocupavam salas específicas que acomodavam toda a 
estrutura de equipamentos e sua operação demandava técnicos especializados. É 
importante lembrar que os computadores eram caros e de uso restrito a governos, 
universidades e grandes corporações. Os programas eram produzidos e escritos em 
formulário próprio e levados à sala de perfuração de cartão. O maço de cartões era levado 
á sala com a leitora, onde um operador procedia a leitura e processamento do pacote com 
 
Introdução à Programação: Conceitos e Práticas. Página 21 
o programa. Ao encerrar o processamento deste lote de cartões então o operador se 
dirigia a sala de impressora para retirar o relatório para entrega ao usuário. A seguinte 
figura esboça este fluxo: 
 
 
Figura 21: Ambiente de Programação da Segunda Geração. 
 
Cada programa que necessitava de processamento tinha que seguir este fluxo. A 
necessidade de melhores mecanismos de interação entre usuário e o computador, 
facilidades para administrar o processamento dos programas e formas de gerenciar o 
computador e seus periféricos levou ao desenvolvimento de um conjunto de programas 
que foi denominado de . 
 
Assim, surgiu a ideia de processamento em lote onde grupos de programas (maços de 
cartões) eram lidos e gravados em uma fita. A fita era levada à sala de processamento e 
lida para o computador, que processava toda a sequência e gerava uma saída também 
em fita, cuja impressão acontecia em uma unidade separada (impressão off-line). 
 
Em resumo, a segunda geração se caracterizou por: 
 
 invenção do transistor; 
 1º computador a transistor ( ) pela BELL Labs; 
 uso de transistores e diodos; 
 uso de memória de núcleo; 
 uso de linguagem Assembly até , e de FORTRAN e COBOL a partir daí; 
 surgimento dos Sistemas Operacionais para Processamento em (Lote) de 
programas. 
 
 
Introdução à Programação: Conceitos e Práticas. Página 22 
 
 1.2.3. Terceira Geração (1962 - 1975) 
 
Na geração anterior, o elemento básico para construção dos processadores evoluiu da 
válvula a vácuo para os transistores. Na terceira geração, o transistor continuou a ser o 
dispositivo de construção elementar, porém surgiu o circuito integrado ( ou chip) em 
pequena ( componentes eletrônicos por ) e média escala ( componentes 
eletrônicos por ), que são circuitos eletrônicos em miniatura compostos principalmente 
por dispositivos semicondutores. 
 
A invenção do circuito integrado ou ( ) é atribuída a Jack Kilby da Texas 
Instruments e Robert Noyce, da Fairchild Semiconductor, cabendo a Kilby o Prêmio Nobel 
de Física no ano 2000 pela participação na criação. 
 
O uso de circuitos integrados permitiu maior compactaçãoe confiabilidade dos 
computadores com expressiva redução de custos. A tecnologia de fabricação da memória 
de acesso aleatório (RAM) evolui da para dispositivos de estado sólido. 
 
O tinha as maiores atenções no projeto de um computador, porém o 
estava ganhando importância rapidamente. Foram criadas várias linguagens de 
programação, entre elas , , , , , dentre outras. O processo 
de produção de programas começou a ser visto como atividade de engenharia, com todo 
o rigor que isto significa. 
 
A figura a seguir ilustra como o programador foi se afastando da necessidade de 
codificar diretamente em binário na medida em que surgiam novas linguagens de 
programação. Inicialmente a permitiu maior produtividade na 
programação, e a tradução para a era feita por um software 
tradutor denominado . Em seguida, com o surgimento da 
 , como o , o programador codificava de forma mais 
adequada aos problemas matemáticos, sendo que a tradução para o era feita 
por um software denominado . 
 
 
Figura 22: Evolução no nível de Programação. 
 
 
Introdução à Programação: Conceitos e Práticas. Página 23 
Houve importante melhoria nos compiladores, que passaram a produzir códigos tão 
eficientes quanto um bom programador de linguagem assembly. 
 
O mercado de computadores era majoritariamente dominado pelos produtos da IBM, com 
destaque para os ou computadores de grande porte. Os sistemas 
operacionais apresentaram significativa melhora e incorporaram recursos de 
multiprogramação, time-sharing e memória-virtual. A multiprogramação permitia que o 
sistema operacional trabalhasse com vários programas ativos. Neste caso, se um 
determinado programa demandava dados armazenados em fita, então outro programa 
entrava em processamento, até que o recurso do programa anterior fosse disponibilizado. 
O , similar ao multiprocessamento, permitiu que um único computador tivesse 
seu uso compartilhado por múltiplos usuários com acesso via terminal on-line. A memória 
virtual é um técnica que permite que programas utilizem mais memória do que o 
disponível fisicamente na memória principal. A memória secundária (em disco, fita ou 
outro meio de armazenamento) é utilizada como suporte para esta técnica de 
gerenciamento de memória. 
 
Outro recurso típico da terceira geração permitiu que programas fossem carregados 
diretamente dos cartões para discos. Assim, logo que um determinado programa tivesse 
sua execução encerrada, o sistema operacional iria carregar um dos programas do disco 
para a partição de memória destinada aos serviços em execução. Este recurso recebeu o 
nome de ( ). 
 
Em resumo, a terceira geração se caracterizou por: 
 
 uso de circuitos integrados em pequena (SSI) e média escala (MSI); 
 uso de circuitos impressos em multicamadas; 
 uso de memória de estado sólido; 
 linguagens de alto nível com compiladores inteligentes; 
 uso de multiprogramação 
 sistemas operacionais para uso em (tempo-compartilhado); 
 utilização de memória virtual. 
 
 1.2.4. Quarta Geração (1972 - ...) 
 
Os circuitos integrados apresentaram um aumento significante na quantidade de 
transistores. A tecnologia foi denominada de Integração em Escala Muito Grande 
( – ), incorporando de a transistores. 
As escalas seguintes de integração, ultra e super, comportam a e a 
dispositivos semicondutores respectivamente. 
 
Este nível de integração e compactação permitiu que os CI´s incorporassem cada vez 
mais blocos funcionais da arquitetura do computador, ao ponto que todos os elementos 
básicos de uma CPU (Central Processing Unit) coubessem em um único chip, surgindo o 
microprocessador. 
 
 
Introdução à Programação: Conceitos e Práticas. Página 24 
A Intel teve importante papel no desenvolvimento dos microprocessadores, tendo iniciado 
com o modelo Intel produzido em . Este processador era um dispositivo de 
bits que continha uma ALU (Aritmetic and Logic Unit), uma unidade de controle e alguns 
registradores. O marco importante foi o lançamento em , do seu primeiro 
processador de bits, o . 
 
Logo em seguida, a IBM lança em o IBM PC que se tornou padrão para 
microcomputadores. O respaldo da IBM foi essencial para a aceitação e o crescimento 
deste equipamento. Uma série de fabricantes passou a produzir componentes para esta 
arquitetura, enquanto que a própria IBM se manteve na linha dos computadores de grande 
porte, os . 
 
Os meios de armazenamentos tais como unidades de disco e fita ocupavam espaços 
consideráveis nos CPD´s (Centro de Processamento de Dados), tornando assim um 
desafio produzir uma unidade que fosse compatível com uso pessoal. Neste ponto, as 
unidades de discos flexíveis (floppy disk) foram fundamentais para a viabilização dos 
PC´s. 
 
Os sistemas operacionais incorporavam cada vez mais facilidades de gerenciamento dos 
recursos computacionais, tais como CPU, memória, processos e arquivos. Os sistemas 
operacionais DOS e Unix tiveram seu período de consolidação, sendo o DOS no ambiente 
PC Intel e o UNIX basicamente nas RISC. A Microsoft iniciou sua trajetória 
com o DOS, e esta plataforma estimulou o surgimento de um novo mercado de 
desenvolvimento de softwares. 
 
A necessidade de compartilhar informações e itens de impulsionou o 
surgimento das redes de computador e do processamento distribuído. E os sistemas 
operacionais tiveram que ampliar suas capacidades para incluir o gerenciamento de mais 
estes recursos, fazendo que toda esta complexidade fosse transparente ao usuário. 
 
O nível de integração dos circuitos integrados alavancou arquiteturas de computadores 
com múltiplos processadores permitindo o processamento paralelo. 
 
Em resumo, a quarta geração se caracterizou por: 
 
 uso de circuitos integrados em escala muito grande (VLSI); 
 compactação em alta densidade (computadores menores); 
 Linguagens de alto nível que manuseiam tanto dados escalares como vetores; 
 sistema operacionais em Time-sharing e Memória Virtual; 
 sistemas com multiprocessadores; 
 Processadores paralelos; 
 aparecimento dos microprocessadores; 
 uso de disquetes (floppy disk) como meio de armazenamento; 
 
Algumas literaturas qualificam o estágio atual como sendo , principalmente pelo 
forte emprego da tecnologia de . Porém, é difícil classificar uma 
 
Introdução à Programação: Conceitos e Práticas. Página 25 
geração fazendo parte dela, pois o avanço tecnológico atual traz inovações a todo o 
momento. Por exemplo, poderíamos qualificar como marco extraordinário a abertura da 
internet e o surgimento da e do primeiro browser em , por Tim 
Berners-Lee. O interessante é que seria uma geração caracterizada principalmente por 
criações de . 
 
O quadro a seguir destaca os principais elementos de e de que 
caracterizaram as gerações: 
 
Sistemas Operacionais 
Compiladores Inteligentes 
Circuitos Integrados VLSI 
Microprocessadores 
1935 1975 1945 1955 1965 
 
Linguagem de Máquina 
Válvulas e Relés 
Linguagem Assembly 
Diodo e Transistor 
Linguagem de Alto Nível 
Circuitos Integrados 
Software 
Hardware 
1ª geração 2ª geração 3ª geração 4ª geração 
Figura 23: Principais características de Software e Hardware por geração. 
 
Introdução à Programação: Conceitos e Práticas. Página 26 
 2. Sistemas de Numeração 
 
Há cerca de anos o homem começou a ter necessidade de contar (agricultura e 
pastoreio), onde os pastores de ovelhas tinham necessidades de controlar os rebanhos. 
Precisavam saber se não faltavam ovelhas. (III) 
Alguns vestígios indicam que os pastores faziam o controle de seu rebanho usandoconjuntos de pedras. Ao soltar as ovelhas, o pastor separava uma pedra para cada 
animal que passava e guardava o monte de pedras. 
Quando os animais voltavam, o pastor retirava do monte uma pedra para cada ovelha 
que passava. Se sobrassem pedras, ficaria sabendo que havia perdido ovelhas. Se 
faltassem pedras, saberia que o rebanho havia aumentado. Desta forma mantinha tudo 
sob controle. 
Uma ligação do tipo: para cada ovelha, uma pedra chama-se, em Matemática, 
correspondência um a um. Provavelmente passou a utilizar o dedo como apoio à 
contagem, sem, no entanto poder guardar a informação. 
O processo de contagem evoluiu para o agrupamento quando tratava de grandes 
quantidades, p. ex: João fez pontos ( pontos). 
 
 2.1. Sistema de Numeração Egípcio 
 
Essa ideia de agrupar marcas foi utilizada nos sistemas mais antigos de numeração. Os 
egípcios da antiguidade criaram um sistema muito interessante para escrever números, 
baseado em agrupamentos. 
 era representado por uma marca que se parecia com um bastão | 
 por duas marcas || 
 E assim por diante. 
 
Símbolo descrição valor 
 
bastão 
 
calcanhar 
 
rolo de corda 
 
flor de lótus 
 
dedo apontando 
 peixe 
 
homem 
 
Introdução à Programação: Conceitos e Práticas. Página 27 
 
Os números eram compostos pela associação destes símbolos e a quantidade 
representada era obtida pela soma dos valores individuais. Por exemplo, é 
representado por: 
 
 2.2. Sistema de Numeração Romano 
 
O sistema de numeração romano possui um conjunto símbolos, conforme tabela 
abaixo, sendo que um número é representado pela combinação destes símbolos e o 
valor é a soma de cada uma das parcelas. 
 
 
 
 
 
A fim de evitar representações muito extensas, um determinado valor pode ser 
representado a partir de um símbolo de referência acompanhado de símbolos a 
esquerda (subtração do valor principal) ou a direita (soma ao valor principal). Por 
exemplo, ( ) e ( – ). 
 
Este sistema é bastante limitado para aplicações da matemática que vão além da 
representação de números, onde mesmo as operações básicas são difíceis de serem 
efetuadas. 
 
 2.3. Sistema de Numeração Maia 
 
A cultura teve destaque nos últimos anos principalmente pelas questões relativas 
ao calendário e o suposto fim dos tempos. Porém, os também dispunham de um 
sistema de numeração bem estruturado que se caracterizava como posicional, 
vigesimal e símbolo para o . Os valores dos símbolos vão de a , 
sendo eles: 
 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 28 
 
 
Os números são estruturados pela combinação destes símbolos, sendo cada símbolo 
contribuindo com o seu valor multiplicado por elevado a sua posição. A soma destas 
parcelas fornece o valor do número. Por exemplo, o número , 
que no sistema fica: 
 
 
Este sistema permite a execução das operações básicas com a mesma facilidade que 
fazemos no nosso sistema decimal. Vejamos o exemplo que segue: 
 
 
 
 
 
A coluna indica a operação desejada. As colunas e indicam a decomposição do 
 e no sistema vigesimal. As colunas e 
 contém o e no sistema . A coluna indica a soma provisória que se 
●●●● 
●●● 
●● 
● 
●●●● 
●●● 
●● 
● 
●●●● 
●●● 
●● 
● 
●●●● 
●●● 
●● 
● 
𝟐 
𝟗 
●● 
●●●● 
 
Introdução à Programação: Conceitos e Práticas. Página 29 
obtém juntando as parcelas. Na sequência vêm os ajustes necessários, transferindo os 
excedentes a , ou seja, cada unidades excedentes em uma casa equivale a uma 
unidade na casa superior. Como o símbolo equivale a ●●●●●, então na coluna 
são transferidas unidades ( e ●) da posição para a posição . Isto 
faz surgir um símbolo ● a mais na posição . Na coluna tem-se os ●●●●● da 
posição substituídos por um . Na coluna tem-se a notação convertida 
para uma expressão convencional e o resultado da soma destas parcelas é indicado na 
coluna , tal como se esperava da soma . 
 
 2.4. Sistema de Numeração Decimal 
 
Os sistemas numéricos egípcio, romano e maia apresentados são apenas parte dos 
muitos sistemas adotados por diferentes civilizações da antiguidade, tais como os 
babilônios, gregos, chineses, hindus entre outros. Cabe destacar, que com exceção dos 
maias, que habitavam a América, as civilizações da Europa, Oriente e Oriente Médio 
mantinham um sistema de troca de mercadorias e comumente impérios que se 
sucediam, onde um dos efeitos era a difusão de conhecimentos. 
A ciência dos gregos atingiu grande desenvolvimento no século com Euclides, 
cuja obra sobre Geometria (Os Elementos) é importante até hoje no ensino dessa 
matemática. Os gregos tinham seu próprio sistema de numeração, com base , 
utilizando letras para representar os números, o que não facilitava os cálculos. 
Os romanos, que expandiram seus domínios a partir do século ., foram aos 
poucos ocupando o espaço do império deixado por Alexandre, ao mesmo tempo que 
foram assimilando parte da ciência grega. O interesse dos romanos foi pelas aplicações 
práticas na engenharia (construção de estradas e aquedutos) e na medicina, com 
pouca contribuição na matemática. 
As invasões bárbaras, nos séculos e , colocaram fim ao Império Romano no 
ocidente e conduziu a Europa a um período de trevas no campo da Ciência. 
Entretanto, enquanto o Império Romano declinava, uma grande civilização florescia no 
Oriente, no vale do rio Indo, entre as regiões que atualmente constituem o Paquistão e 
a Índia. 
É importante destacar que os sistemas de numeração egípcio e romano não eram 
propícios para efetuar cálculos. As dificuldades destes sistemas foram superadas pelos 
hindus, que desenvolveram as bases do moderno sistema de numeração. Eles 
souberam reunir três características que estavam dispersos em outros sistemas 
numéricos da antiguidade, a saber: 
 Decimal: uso de dez símbolos para representar os dígitos de zero a nove (o 
egípcio, o romano e o chinês também o eram); 
 Posicional: os símbolos assumem diferentes valores de acordo com a posição 
que ocupa na formação do número (o babilônio e o maia também eram); 
 Presença do Zero: Foi um importante avanço a adoção de um símbolo para o 
nada. 
 
Introdução à Programação: Conceitos e Práticas. Página 30 
Estas três características, reunidas, tornaram o sistema de numeração hindu o mais 
prático de todos. Não é sem motivo que hoje ele é usado quase no mundo todo. 
Enquanto os hindus, que habitavam o vale do rio Indo, desenvolviam seu sistema de 
numeração, grandes acontecimentos tiveram início na Península Arábica. 
No século floresce o Islamismo, e estabelece um grande império que abrangia a 
região do rio Indo, a leste, o norte da África e a Península Ibérica. 
A expansão Islâmica através da conquista veio na sequência de grandes impérios, tais 
como o babilônio, persa, grego (macedônio) e romano. A matemática era uma das 
áreas de interesse dos estudiosos árabes e o contato com o saber oriental e toda a 
história de conhecimento dos impérios que o antecedeu permitiu um salto importante na 
ciência. 
Um grande passo foi dado na direção do extremo oriente, quando os árabes entraram 
em contato com a cultura hindu e logo manifestaram particular interesse pelo seu 
sistema numérico, reconhecendo sua simplicidade e praticidade. 
Em outra frente, os árabes haviam ocupado parte da Península Ibérica, o que serviu de 
ponte para a ciência oriental ser introduzida na Europa medieval. A expansão árabe 
resultou também no surgimento, entre os séculos e , de várias universidades e 
bibliotecas, desde Bagdá, no atual Iraque, até Granada e Córdoba, na atual Espanha. 
Um marco relevante na tentativa de introduzir o sistema hindu-arábico na Europa foi a 
publicação de Leonardode Pisa (também conhecido por ), intitulada 
 (O Livro do Ábaco). O pai de Fibonacci era dono de casas de comércio 
ultramarino, sendo uma no norte da África. Ainda jovem Fibonacci mudou-se para esta 
região e conviveu com esta nova matemática e aprofundou seus conhecimentos no 
sistema árabe de numerais e cálculo. Ao retornar a Pisa, Leonardo deu sequência a 
seus estudos e publicou pela primeira vez em o destacado livro, cujo conteúdo 
introduzia a notação árabe, as operações fundamentais com números inteiros, cálculo 
envolvendo séries, proporções, raízes quadradas e cúbicas, e uma breve abordagem 
sobre geometria e álgebra. Neste livro foi apresentado o problema de crescimento da 
população de coelhos de acordo com uma série que levou o nome de 
 . As páginas do livro tornavam difíceis a reprodução de 
exemplares dado que este processo era totalmente manual, o que limitou sua difusão.IV 
O início da retomada, em , do território ibérico dos mouros pelo rei da Espanha, 
permitiu que populações árabes passassem ao domínio europeu, facilitando a absorção 
do conhecimento escrito em árabe, principalmente os trabalhos de . 
Entretanto, foram necessários vários séculos para que o sistema hindu-arábico fosse 
aceito de fato na Europa. O intervalo entre a queda do império romano e a era dos 
descobrimentos se caracterizou como período das trevas em função da pouca 
produção de conhecimento. Não foi diferente em relação ao sistema de numeração 
hindu e da nova forma de realizar as operações aritméticas, que enfrentou resistência 
frente aos métodos baseados no ábaco, herança dos romanos. 
Uma parte do espaço deixado pela queda do império romano no ocidente no século 
foi ocupada pela Igreja, que praticamente deu continuidade a utilização do sistema 
numérico criado pelos romanos. A chegada dos árabes à Europa no século trouxe 
 
Introdução à Programação: Conceitos e Práticas. Página 31 
consigo o sistema de numeração hindu, que certamente em algum momento iria levar à 
confrontação de sistemas. 
Basta efetuar algumas operações aritméticas utilizando algarismos romanos, para 
perceber as inegáveis vantagens que o sistema numérico hindu-arábico tem sobre o 
sistema romano. Mesmo assim, o novo sistema de numeração acabou prevalecendo na 
Europa somente no século . 
Atualmente quando comparamos as representações dos dígitos numéricos em árabe e 
a forma ocidental observamos uma diferença sensível, e muitas vezes não atentamos 
que possuem a mesma raiz. Porém, as grandes distâncias entre o Oriente Médio, 
Península Ibérica e o extremo oriente combinadas com os séculos de história fizeram 
que sequências de pequenas alterações na forma de representar os dígitos 
resultassem em diferenças significativas na configuração final. Até o século todo o 
material produzido era escrito a mão, e diferentes copistas possuíam diferentes 
caligrafias que associadas á direção da escrita (direita para a esquerda ou esquerda 
para a direita) contribuíram para as sucessivas alterações nas aparências dos dígitos 
numéricos. 
A invenção da imprensa por Gutenberg no século permitiu que tanto as letras 
quanto os símbolos utilizados para representar os dígitos numéricos adquirissem uma 
forma mais estável e definitiva. 
A seguinte tabela ilustra as modificações sofridas na forma de representação dos 
dígitos utilizados no sistema de numeração criado pelos hindus, adotado pelos árabes e 
passado aos europeus: 
 
Por volta do século , os hindus 
representavam os algarismos assim, ainda 
sem um símbolo para o nada: 
 
No século , já com o , a 
representação evoluiu para: 
No século os hindus representavam os 
dez dígitos assim: 
 
No mesmo século , os árabes que 
estavam no Ocidente representaram assim: 
 
No século os árabes orientais 
empregavam esta representação: 
 
 
Introdução à Programação: Conceitos e Práticas. Página 32 
As formas usadas pelos europeus nos 
séculos e : 
 
 
 
A representação ocidental atual: 
 
1 2 3 4 5 6 7 8 9 0 
 
A representação árabe escrita da esquerda 
para a direita: 
 
۱ ۲ ۳ ۴ ۵ ۶ ٩ ٨ ٧ ۰ 
 
 
Introdução à Programação: Conceitos e Práticas. Página 33 
 3. Conceito de Bases 
 
Em nosso cotidiano lidamos com números representados na base decimal. Isto se deve a 
razões e históricas, talvez fundamentadas na quantidade de dedos nas mãos. Porém, os 
computadores consolidaram o sistema binário como elemento de referência no projeto dos 
circuitos. A utilização da base proporciona grande facilidade na representação eletrônica 
e digital dos números e . A possibilidade de representar os dígitos binários através de 
valores de tensões ou correntes, por exemplo, e , simplifica a construção dos 
processadores e demais elementos de uma arquitetura. Combinado com este fato há toda 
uma álgebra desenvolvida no contexto da informação binária/digital, que inclui uma série 
de operações sobre dados binários/lógicos que serviu de base para a construção das 
principais funcionalidades computacionais (memória, circuitos aritméticos, ...). 
 
Um sistema de numeração é determinado fundamentalmente pela base, que é o número 
de símbolos utilizados. 
 
Na notação posicional os dígitos assumem valores diferentes para cada posição que 
ocupa na representação do número. 
 
Tomando o ponto como separador para a parte inteira e a parte fracionária, temos que 
a cada posição que se desloca o dígito a esquerda do ponto o seu valor é multiplicado 
cumulativamente pela base. Da mesma forma, a cada posição que se desloca o dígito a 
direita do ponto o seu valor é dividido cumulativamente pela base. 
 
 
 3.1. Sistema Decimal 
 
O sistema decimal é o mais comumente utilizado nas operações do dia a dia. O conjunto 
de dígitos utilizado é: 
 
 
 { } → Base → Símbolos. 
 
 
Por exemplo, partindo do número decimal , observa-se que cada dígito 
possui um valor diferente dependendo da posição que ocupa no número, a saber: 
 
 
 
 
 
 
 
 
 
Posição 2 Posição 0 Posição 1 Posição -1 
 
Introdução à Programação: Conceitos e Práticas. Página 34 
Esta característica é um dos pilares do sistema decimal utilizado, dando-lhe o aspecto 
 , que atribui a cada posição do número um peso distinto. Decompondo 
em uma somatória, levando em conta o peso da posição, tem-se: 
 
 
 
As parcelas mostram claramente, através da sua forma geral 
 , a contribuição de cada elemento do 
sistema de numeração utilizado. 
 
 
EXERCÍCIOS: Representar na forma de polinômio os seguintes números na base : 
 
i. 
ii. 
iii. 
 
 3.2. Sistema Hexadecimal 
 
O sistema hexadecimal tem todas as características do sistema decimal, porém utiliza 
símbolos para a representação dos dígitos. Logo: 
 
 { } → Base → Símbolos. 
 
Os símbolos utilizados são os do sistema decimal, acrescidos dos seguintes símbolos, 
com seus respectivos valores: 
 
Símbolo 
Valor 
Absoluto 
 
 
 
 
 
 
 
 
EXERCÍCIOS: Representar na forma de polinômio os seguintes números na base : 
 
i. 
ii. 
iii. 
 
Introdução à Programação: Conceitos e Práticas. Página 35 
 
 3.3. Sistema Binário 
 
O sistema binário também tem todas as características do sistema decimal porém 
utilizando dois dígitos: 
 
 { } → Base → Símbolos. 
 
É o sistema de numeração utilizado internamente pelos computadores modernos. Em 
informática, cada dígito de um número representado neste sistema é denominado de bit 
(binary digit). Além disso, alguns conjuntos destes bits recebem denominação específica, 
a saber: 
 
 = conjunto de (exemplo: ); 
 ( ) = conjunto de , ou mais bytes, que determina a 
capacidadede processamento do computador (exemplo: palavra = 
bits, palavra = , Arquitetura Pentium = ); 
 = conjunto de (KBytes); 
 = conjunto de (MBytes); 
 = conjunto de (GBytes); 
De acordo com a norma : Quantities and units – Part 13: Information 
science and technology, de , foram estabelecidos os seguintes prefixos: 
Potência de 10 Potência de 2 
Potência Valor 
Nome Símbolo Nome Símbolo 
quilo k kibi Ki 1024 
mega M mebi Mi 1 048 576 
giga G gibi Gi 1 073 741 824 
tera T tebi Ti 1 099 511 627 776 
peta P pebi Pi 1 125 899 906 842 624 
exa E exbi Ei 1 152 921 504 606 846 976 
zetta Z zebi Zi 1 180 591 620 717 411 303 424 
yotta Y yobi Yi 1 208 925 819 614 629 174 706 176 
Apesar de diferentes, é comum utilizar os termos das potências de para se referir às 
potências de . 
 
Introdução à Programação: Conceitos e Práticas. Página 36 
EXERCÍCIOS: Representar na forma de polinômio os seguintes números na base : 
 
i. 
ii. 
iii. 
 
 3.4. Base Qualquer 
É possível generalizar os conceitos anteriores para números em qualquer base, bastando 
selecionar a quantidade de símbolos adequada, e seguir os princípios do sistema de 
numeração, cuja essência é a . Assim, uma base qualquer, pode ser 
estabelecida da seguinte forma: 
 { } → Base → Símbolos, onde o último símbolo 
representa o valor . 
Denotando um número na base com seus dígitos, temos: 
 , 
sendo a parte inteira com dígitos e a parte fracionária com dígitos, sendo que 
 . Expandindo na forma de polinômio, tem-se: 
 
 ⋯ 
 
 
 ⋯ 
 
Ou, colocando este sob a forma de 
somatório, tem-se: 
 ∑ 
 
 
 
 
 
Desta forma, temos todos os elementos para formar um sistema em qualquer base: os 
dígitos a base e as posições em . Por exemplo, para a , teria: 
 
 
 { } → Base → Símbolos/Dígitos. 
 
 
Uma determinada quantidade pode ser representada por diferentes números em 
qualquer base. Quanto menor a base mais dígitos são necessários para representar a 
mesma quantidade. 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 37 
 3.5. Conversão entre Bases 
 
Uma determinada quantidade pode ser representada de forma distinta dependendo da 
base utilizada. Por exemplo, a quantidade pode ser representada na base 
como , enquanto que em outras bases sua representação será diferente. Mais 
especificamente, no mundo computacional é muito comum sermos requisitados a 
interpretar informações codificadas em binário ( ). Porém, estarmos habituados 
ao sistema decimal, o que frequentemente demandará o uso de metodos de conversão 
nos dois sentidos. 
 
Além disso, é fundamental que um profissional da área de computação ou engenharia 
relacionada, compreenda as transformações aplicadas a uma informação em todo o 
seu trajeto, desde a forma natural no mundo real até a completa representação no 
ambiente digital, tanto por software quanto pelo hardware. 
 
Desta forma, serão apresentados métodos para realizar as seguintes conversões de 
quantidades: 
 
i. 
ii. 
iii. 
 
 3.5.1. Conversão de Qualquer Base para a Base 10 
Para converter de uma base qualquer para a base , basta aplicar o 
 de um número na base : 
∑ 
 
 , e efetuar as operações tal como estamos habituados na base , e o 
resultado obtido será nesta base . 
Exemplos: 
 
 O número com as posições dos dígitos: ( 
 
)
 
 
 
 
 
 
 O número com as posições dos dígitos: ( 
 
)
 
 
 
 
 
 
 O número com as posições dos dígitos: ( 
 
)
 
 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 38 
 
 
 
É importante conhecer os limites estabelecidos em termos de quantidade de dígitos em 
uma determinada base. Por exemplo, sabemos que com três dígitos decimais é possível 
representar quantidades distintas, que vão do número ao número . 
Depreende-se que a maior quantidade representável é quando todas as posições forem 
ocupadas pelo dígito de maior valor. Assim, para o sistema binário e para o tamanho de 
um , a maior quantidade possível de ser representada é obtida quando todos os bits 
forem iguais a . A questão é: ―Quanto é este valor em decimal ?‖. A resposta vem da 
conversão deste binário para decimal, conforme segue: 
 
 
 
 
 
 
De uma forma geral, o equivalente decimal do maior número possível de ser 
representado por bits é obtido através da fórmula: 
 
 
 ⋯ 
 
 ⋯ 
 
 
Observa-se que temos o somatório de uma Progressão Geométrica de termos: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Para o caso em que (1 ) temos: 
 
 
 . 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 39 
 3.5.2. Conversão da Base 10 para Qualquer Base 
A conversão da base para uma base qualquer é feita de forma distinta para a Parte 
inteira e para a Parte fracionária: 
i. Parte inteira: 
 
 Divide-se a parte inteira pela base desejada, obtendo-se assim um quociente 
e um resto. Repita esta divisão com o quociente, e assim sucessivamente 
com os demais quocientes até obter quociente zero. Agrupe os restos, 
conforme exemplo a seguir, para obter o número convertido para a base 
desejada, sabendo que o primeiro resto é o dígito menos significativo; 
Exemplos: 
 
 
47 
 
2 
 1 
 
23 
 
2 
 
 
1 
 
11 
 
2 
 
 
1 
 
5 
 
2 
 
 
1 
 
2 
 
2 
 
 
0 
 
1 
 
2 
 
1 
 
0 
 
33 
 
2 
 1 
 
16 
 
2 
 
 
0 
 
8 
 
2 
 
 
0 
 
4 
 
2 
 
 
0 
 
2 
 
2 
 
 
0 
 
1 
 
2 
 
1 
 
0 
 
 
 
O dígito menos significativo de um número inteiro é aquele que ocupa a posição , 
sendo que o dígito mais significativo é aquele que ocupa a posição de maior ordem 
 . Quando se trata de um número binário, os termos utilizado são 
 e , ou seus equivalentes em inglês: 
 e . Também podem ser 
encontrados os termos bit de mais baixa ou alta ordem. 
 
 
 
235 
 
8 
 3 
 
29 
 
8 
 
 
5 
 
3 
 
8 
 
3 
 
0 
 
2030 
 
16 
 14 
 
126 
 
16 
 
 
14 
 
7 
 
16 
 
7 
 
0 
 
 
 
Introdução à Programação: Conceitos e Práticas. Página 40 
 
Vamos comprovar este processo utilizando a forma polinomial de representação do 
número inteiro. 
 
 ⋯ 
 
 
Efetuando a divisão deste polinômio por , temos: 
 
 
 ⋯ 
 
 
 ⋯ 
 
 ⋯ 
 
 
 
Esta primeira divisão de inteiros produziu como resto o dígito . O quociente obtido foi 
 
 ⋯ 
 , que é um polinômio que representa um número composto 
pelos demais dígitos, deslocados uma posição à direita 
 . De fato, a divisão por faz com que todos os dígitos sejam 
deslocados uma posição à direita e elimina o dígito mais a

Continue navegando