Hélio Marques Sobrinho hmarx@linuxtech.com.br
- Programa 1. Introdução e Histórico História da computação Funcionamento básico de um computador digital Linguagens de programação Sistemas de numeração Representação de dados no computador 2. Noções de Lógica e Álgebra de Boole Noções de lógica matemática Princípio da dualidade Álgebra de Boole 3. Algoritmos e Programação Representação e Tipos de dados Estruturas de controle básicas Noções de abstração de dados Noções de abstração de controle Desenvolvimento de algoriitmos 4. Linguagem de Programação de Alto Nível 2
Informática definição Ciência da informação ciência da computação teoria da informação processo de cálculo análise numérica métodos teóricos de representação do conhecimento modedlangem dos problemas Origem da palavra 1957 Karl Steinbuch, Alemanha Informatik: Automatische informationsverarbeitung Informática: Processamento automático da informação 3
Histórico da Computação Necessidade de sistema de numeração Associação de posses a pedras Aumento das posses => símbolos para representar certa quantidade Escrita cuneiforme Babilônios e Assírios há mais de 5000 anos Stonehenge, UK, 2600 a 1799AC Primeiro computador? Ábacos : 300 AC Utilizados ainda hoje por chineses e japoneses 4
John Napier (logaritmos) 1617 - Máquina de multiplicar através de cilindros Blaise Pascal 1642 Máquina de somar e subtrair usando engrenagens Willhelm Leibniz 1673 Projeto de máquina para multiplicar usando somas sucessivas Construida somente em 1694 Basile Bouchon 1728 Tear mecânico com folha giratória de papel perfurado Joseph Jacquard 1801 Máquina de tecer com cartões perfurados 5
Charles Babbage 1812 Máquina de cálculos de tabelas matemáticas 1859 Máquina diferencial W. S. Burroughs 1890 Máquina com teclado para somar e imprimir Herman Holerith 1890 Máquina tabuladora com cartões de papel perfurado Censo dos EUA Sua empresa foi transformada na IBM em 1924 6
Howard Aiken 1937 Mark I: Cálculos integrais e diferenciais Alan Turing 1943 Colossus 1800 válvulas quebra de criptografia 7
John von Neumann 1946 ENIAC Electronic Numeric Integrator and Calculator 18800 válvulas 30 ton 3 salas totalizando 72m2 1948 EDVAC Electronic Discrete Variable Automatic Computer IBM International Business Machines 1960 IBM System/360 Marco histórico dos mainframes Padrões: Byte de 8 bits CPU com micro código DEC Digital Equipment Corporation 1970 PDP Programmed Data Processor Minicomputador Influenciou a criação dos primeiros microcomputadores Origem do UNIX - PDP-7 8
Intel 1972 Altair processador 8080 Microcomputadores de 8 bits CP/M-80 1979 8086 e 8088 Microcomputadores de 16 bits IBM PC/DOS 1983 80286 IBM PC/AT 1985 80386 Arquitetura i386 Proteção de memória Paginação e Segmentação Sistemas multiprogramados e multiusuários Unix em microcomputadors! 1992 Pentium 2000 Pentium IV 2008 Quad core 1997 Pentium II 2002 Xeon 2008/20098 i7 1999 Pentium III 2005 Dual core 2010 - i5 9
Evolução do software Computadores mecânicos e eletromecânicos Computadores analógicos alteração do hardware Computadores eletrônicos - digitais Computadores programáveis single job monitores / batch sistemas operacionais monousuário/monoprogramáveis sistemas operacionais monousuário/multiprogramáveis sistemas operacionais multiusuários sistemas multiprocessados sistemas distribuídos clusters e grids Virtualização software simulação hardware emulação 10
Sistemas de Numeração Motivação: Associação de posses a pedras Aumento das posses Números cuneiformes: Babilônia Notação posicional base 60 3400 BC Base 10 3200 BC O zero número 0 36 BC 11
Notação Posicional Conceitos Quantidade : Q Representação numérica : N em uma base β, usando símbolos para valores de 0 a β-1 Nβ =... DCBA.abcd...β Q =... Dβ3 + Cβ2 +Bβ1 +Aβ0 + aβ -1 +bβ-2 +cβ-3 + dβ-4 +... Os símbolos {..., D, C, B, A, a, b. c, d,... } representam quantidades de 0 a β 1 Exemplo: A quantidade cento e vinte e três é representada na base 10 por: N10 = 12310 Q = 1*102 + 2*101 + 1*100 = 12310 (cento e vinte e três unidades). Se fizermos os cálculos de Q em outra base, obteremos o número N nesta base. Exemplo: N4 Q = 1*222 + 2*221 + 3*220 = 1210 + 110 + 3 = 13234 Nota: A repreasentação da quantidade β na base β é sempre 10! 12
Simplificações Conversão de números na base 10 para base β Seja Q representado por N na base 10. 1. Divida N por β, o quer produz um quociente Q0 e um resto R0 2. Divida o quociente Q0 por β produzindo Q1 e R1 3. Continue o processo de divisão até que o quociente Qi seja 0. Isto é Qi-1 < β. 4. O número na base β será RiRi-1Ri-2...R1R0 Conversão de números da base β para a base βn Cada dígito do número na base βn será representado por n dígitos na base β Exemplos: 3548 = 0111011002 4FB916 = 103323214 4FB916 = 01001111101110012 13
Simplificações Parte fracionária: f = 0.abcd... 1. Multiplique f por β produzindo X0.yzkw... 2. Peque a parte fracionária 0.yzkw... e multiplique por β produzindo X 1.mnop... 3. Repita até que o resultado seja 0 ou o número de dígitos seja satisfatório. O resultado será N β= 0.X0X1X2X3... Exemplo: 0.17510 => Y2 0.175 * 2 = 0.35 0.35 * 2 = 0.7 0.7 * 2 = 1.4 0.4 * 2 = 0.8 0.8 * 2 = 1.6 0.6 * 2 = 1.2 0.2 * 2 = 0.4 0.4 * 2 = 0.8 0.8 * 2 = 1.6 0.6 * 2 = 1.2... Repetição dízima periódica Y2 = 0.0010110011001100... 14
Representação de dados em um computador digital Números no mundo real Naturais ℕ 0 Inteiros ℤ - Reais - + ε=1 + ε=1 ℝ + ε 0 Computador digital: N bits N-1 0... N bits => 2N valores 15
Números Naturais N bits : números de 0 a 2N-1 Números inteiros 1. Sinal magnitude 1 bit de sinal e N-1 bits para a magnitude. Exemplo com 8 bits : +1010 = 00001010-1010 = 10001010 2. Complemento de 1 Positivos N, Negativos N Exemplo com 8 bits : +1010 = 00001010-1010 = 11110101 3. Complemento de 2 Positivos N, Negativos N + 1 Exemplo com 8 bits : +1010 = 00001010-1010 = 11110110 [ -127... -0, +0... +127 ] [ -127... -0, +0... +127 ] [ -128... 0... +127 ] 16
Números de ponto flutuante Valor +/- A.bcdef... x 10k Normalização: +/- 0.xyzkw... x 2E N-1 S 1 bit 0...... e bits m bits N=1+e+m mantissa expoente sinal Expoente: excesso de 2e-1-1 Faixa de valores definidos pelo expoente e bits Precisão definida pela mantissa m bits Como x é sempre 1, ele pode ser oculto. A mantissa real terá m+1 bits! 17
Formatos padrão de representação de ponto flutuante - IEEE Números de 32 bits 1 bit para o sinal 8 bits para o expoente, excesso de 127 (-126 a +127) 23 bits para a mantissa Números de 64 bits 1 bit para o sinal 11 bits para o expoente, excesso de 1023 (-1022 a +1023) 52 bits para a mantissa Números de 80 bits 1 bit para o sinal 15 bits para o expoente, excesso de 16383 (-16382 a +16383) 64 bits para a mantissa Números de 128 bits 1 bit para o sinal 15 bits para o expoente, excesso de 16383 (-16382 a +16383) 112 bits para a mantissa NAN : todos os bits do expoente = 1, todos os bits da mantissa = 0 : todos os bits do expoente = 1, mantissa 0 18
Caracteres Códigos numéricos para símbolos gráficos ABCabc1234.,$#({@}_= <>/\ ز ش ق җể Helio Marques Alguns códigos de caracteres ASCII American Standard Code for Information Interchange (ANSI) 7 ou 8 bits EBCDIC Extended Binary Coded Decimal Interchange Code (IBM) 8 bits Unicode UTF ISO/IEC ISO-8859-1 Unicode Transformation Format 8 (utf8) ou 16 (utf16) bits ISO Latin-1 8 bits Strings (cadeias de caracteres) Vetores de bytes ou palavras com contador de caracteres ou byte 00 no final 19
Hieraquia de linguagens Linguagens humana Complexa Ambígua Linguagens de programação Especializadas ou de uso geral Alto nível Algoritmicas e não algoritmicas Baixo nível Instruções, microinstruções Linguagens de montagem ISA Instruction Set Architecture Linguagem de montagem Linguagens de hardware Nível de lógica digital 20
Representação de dados Mapeamento de objetos Objetos do mundo real Entidades abstratas Objetos do mundo computacional Entidades numéricas char float int Mundo computacional Limitações Grandeza e Precisão (limitação de número de dígitos) Problemas de representação (ex. 0.1 x2) 10 Entidades abstratas Sabor, cheiro, amar, gostar, detestar,... 21
Resolução de um problema em um sistema de computação Processo de desenvolvimento Problema: Análise Método de resolução e estruturas de dados Algoritmo Codificação: Linguagem de programação Programa Execução do programa Interpretação: Um programa interpreta o fonte na linguagem diretamente Tradução: O programa é traduzido para outra linguagem que pode ser compilada ou interpretada Compilação : O programa é traduzido para padrões binários correspondentes à linguagem de montagem da família do processador utilizado Linkeditor Compilador / Montador Fonte(s) em linguagem de alto nível Fonte(s) em linguagem de montagem Módulo(s) objeto Executável 22
Elementos de uma linguagem de programação - exemplo C Constantes (números, caracteres e textos) Representação de dados Números Inteiros e de ponto flutuante x ℕ x ℤ x ℝ Conjunto de caracteres ASCII, EBCDIC, UTF-8, ISO-8859-1, Variáveis Identificadores Registradores e posições de memória Declareções Mapeamento em tipos definidos pela linguagem x ℂ ASCII: 'A' = 41h EBCDIC: 'A' = C1h Comandos Sequenciais Atribuições, expressões, chamadas de funções/procedimentos Interativos - entrada e saída (read, write, scanf, printf, ) Condicionais (if/else) Seleção múltiplas (switch) Iterativos (while, for, do,...) 23
A linguagem C Tipos básicos int, unsigned int, long int, unsigned long int, float, double, char,... Macros #define identificador texto #define identificador( argumentos ) texto Inclusão de arquivos #include arquivo #include <arquivo> Declarações tipo lista de variáveis ; vetores e matrizes identificador [ tamanho ] identificador [ tamanho ] [ tamanho ]... Estruturas heterogêneas struct { lista de declarações } Definição de tipo typedef definição identificador; 24
Expressões lógicas Operadores lógicos && Operadores bit a bit & ^ Operadores relacionais ==!= < > <= - % >= Expressões aritméticas Operadores aritméticos * / + Atribuições variável operador expressão = -= += /= *= %= &= = 25
26
Chamada de funções e procedimentos Call Int Trap Utilização comum Utilizado em DOS/Windows (chamadas ao sistema) Tratamento de erros/eventos em alguns sistemas Passagem de parâmetros Tipo Valor Referência Nome Valor de retorno (exemplo: C/C++) (exemplo: C/C++ usando &v) (exemplo: Algol 60) (exemplo: Fortran) Forma Blocos em posições absolutas Registradores Pilha (alguns mainframes - SVC) (compiladores c/ alta otimização) (método mais comum) 27
Chamada de procedimentos e passagem de parâmetros Pilha Função em linguagem C 0000,,,0 int f(int a, int b, int c) { int m; /* código da função */ m = a + b * c; return(m); } /* Funcao f */ FFFF...F Acesso aos argumentos mov AX, mul AX, add AX, ; --- libera mov sp, ret [BP + 4] [BP + 6] [BP + 2] variáveis bp ; b ; c ; a locais 28
Chamada de procedimentos e passagem de parâmetros Chamada da função Pilha e retorno void main() { int r; int x, y, z; push push push call mov /*... z y x f r, ax */ r = f(x, y, z); /*... */ } /* main */ 29