Vous êtes sur la page 1sur 50

PROGRAMAÇÃO I

Prof. Claudio Coutinho

Turma EC/SI
2016
Aula 00

Conceitos básicos de
Computação e Lógica de
Algoritmos
Diretrizes
 Disciplina de caráter obrigatório;
 Módulo I
 CH: 102 h/a (68h/a teoria, 34h/a prática)
Avaliação
1A: ?
2A: ?
3A: ?
4A: ?

1𝐴+2𝐴+3𝐴+4𝐴
 𝑁𝐹 = 4

 𝐸𝑋𝐶 = 𝑁𝐹 ≥ 9,0
 𝐵𝑂𝑀 = 7,00 ≤ 𝑁𝐹 < 9,0
 𝑅𝐸𝐺 = 5,00 ≤ 𝑁𝐹 < 7,00
 𝐼𝑁𝑆 = 𝑁𝐹 < 5,00
Tópicos abordados
 Conceitos básicos de organização de computadores
 Construção de algoritmos e sua representação em pseudocódigo
 Noções fundamentais: algoritmos, notação e programas
 Identificadores, constantes, variáveis e atribuição
 Tipos primitivos de dados
 Operadores, funções e expressões
 Instruções condicionais, incondicionais e de repetição
 Modularização de programas: funções e procedimentos definidos pelo usuário
 Estruturas compostas de dados: vetores, matrizes e registros
 Tipos definidos pelo programador e tipos abstratos de dados
 Noções de arquivos em linguagem de programação.
 Aplicações
Objetivos
 Desenvolver o raciocínio lógico de forma que, usando uma
metalinguagem (pseudocódigo) que possa servir de modelo para
qualquer linguagem de programação procedural, os alunos possam
desenvolver um algoritmo estruturado para resolução de problemas
computacionais
 Capacitar o aluno a interpretar esta solução utilizando uma
linguagem de programação com paradigma imperativo
(procedimental) para resolução de problemas
Por que aprender a programar?
• A possibilidade de criar algo totalmente novo e original;
• Dos sistemas mais simples até o mais complexo dos programas (um
SO?)
Um mundo de programação
Onde Aprender?
É difícil?
• Programar não é difícil...
• O problema é aprender LÓGICA!

• É simples:
• 1. SE estiver chovendo, ENTÃO fico em casa, SENÃO vou ao cinema
• 2. ENQUANTO estiver com fome, eu como
• 3. SE fizer sol E tiver dinheiro, ENTÃO vou ao cinema
• 4. SE passar Faustão OU Gugu, ENTÃO desligo a TV
Introdução
• Técnicas de resolução de problemas
remontam aos primórdios;
• Com a tecnologia, foi possível
desenvolver um sistema
automatizado: o computador.
Primeira geração (1945-55)
• Até meados do Século XX, os
computadores utilizavam válvulas
e circuitos eletromecânicos.
• Eram de grandes dimensões e
custavam muito dinheiro.
• Utilizados principalmente por
governos
Segunda geração (1955-65)
• Desenvolvidos a partir do
surgimento do transistor
• Relativamente menores
• Maior poder de processamento
Terceira geração (1965-80)
• Surgiram juntamente com os
Circuitos Integrados (ou
microchips)
• Substancialmente menores
• Determinaram o fim da produção
das gerações anteriores
• Acessíveis ao público
• Primeira utilização de discos
flexíveis.
Quarta geração (1980-)
• Desenvolvidos com tecnologia
VLSI (milhares de transistores em
um chip)
• Incorporação da Unidade central
de processamento em um único
dispositivo (microprocessador)
• Computador multiprogramável
• Introdução da Internet
• Computadores facilmente
acessíveis (Personal Computer) Intel 4004
Quinta geração (?-)
• VLSI tornou-se ULSI (milhões de
transistores)
• Avanço na área de processamento
paralelo
• Avanços na área de Inteligência
artificial
• Reconhecimento de voz
Arquitetura básica (von Neumann)
• A arquitetura criada por John Von
Neumann em 1952 para o
computador IAS (Institute for
Advanced Study - EUA)
• Inovações:
• Aritmética binário e não decimal
• Programas e dados armazenados em
memória (sem chaves ou cabos)
• Arquitetura mais difundida nos
dias atuais.
Arquitetura básica (von Neumann)
• UCP (ou CPU): Unidade Central de
Processamento Memória
• Busca de Instruções;
• Interpretação e execução;
• ULA (Unidade Lógica e Aritmética)
• Cálculos matemáticos
• Registradores Unidade Unidade Lógica e
• Dados de memória, Acumulador etc. de Aritmética

• Unidade de Controle Controle


Acumulador
• Controle de fluxo

CPU E/S
Arquitetura básica (von Neumann)
• Dispositivos de E/S:
• Interação com o mundo exterior
Memória
• Inserção e recuperação de dados
• Entrada padrão: Teclado
• Saída padrão: Monitor
• Outros exemplos:
Unidade Unidade Lógica e
• Impressora
• Caixa de som
de Aritmética
• Caneta Controle
Acumulador

CPU E/S
Arquitetura básica (von Neumann)
• Memória
• Armazena dados Memória
• RAM (Random Access Memory):
• Acesso mais rápido
• Volátil
• Memória Principal
• ROM (Read-Only Memory)
• Somente leitura Unidade Unidade Lógica e
• Dados do fabricante de Aritmética
• Secundária Controle
Acumulador
• Acesso lento
• Não-volátil
• Ex: Disco Rígido E/S
CPU
Memória Endereço Valor
0x62fe40 10
0x62fe44 1
• A memória dinâmica contém 0x62fe48 6487624
inúmeros endereços para 0x62fe4c 0
armazenar valores de
0x62fe50 4199400
programas
0x62fe54 0
• Esses valores são 0x62fe58 0
armazenados no chamado 0x62fe5c 0
mapa de memória 0x62fe60 31
• Os programas “deixam” seus 0x62fe64 0
valores lá para posterior uso 0x62fe68 4225568
de fácil acesso, como uma 0x62fe6c 0
prateleira
Linguagens de programação - Histórico
• O primeiro programa computacional foi
escrito por Ada Lovelace no século XIX
• LP: ADA
• No século XX, uma das primeiras
linguagens de programação surgiu na
Alemanha Nazista, o Plankalkül
• Z1
• Sistema de código ENIAC
• C-10
Linguagens de programação - Histórico
1940 1950 1960 1970 1980 1990 2000

Plankalkül FORTRAN APL Pascal C++ Haskell C#

ENIAC Coding LISP Simula Forth Ada Python Visual BASIC


System .NET
C-10 ALGOL 58 BASIC C Eiffel Java F#

COBOL PL/I Smalltalk Perl Ruby Scala

Prolog Lua Go

ML JavaScript

SQL PHP
Tipos de linguagem
Linguagens
de
Programação

Linguagens Linguagens Linguagens


compiladas interpretadas de scripting
Linguagens compiladas
• O programa (código fonte) é traduzido para o “idioma” do
processador e o programa de saída é executado diretamente por
chamadas do SO.
• Dependente de plataforma
• Ex: C/C++, Delphi, Visual Basic etc.
Linguagens compiladas - C
Código Fonte Compilação

Código
Objeto

Binário
(Executável)
Linker
Linguagens interpretadas
• Existe uma etapa intermediária, o Interpretador, que lê o Código
Fonte e o executa após a compilação do mesmo
• Livre de plataforma
• Ex: Java, Python, C#, Ruby Livres de plataforma
Linguagens interpretadas - Java

Código Fonte

Execução
Compilação

Interpretador

ByteCodes
Linguagens de script (scripting)
• Linguagens de programação
executadas do interior de um
programa
• Não restrito ao ambiente
• Estendem a funcionalidade do
programa ou controlam sua API
Linguagens de script (scripting) – SQL e PHP

Dados
Página dinâmica
obtidos
MySQL PHP
Navegador

Requisição
Algoritmos - Introdução
• Base pra desenvolvimento de
programas
• Simplificadamente: uma sequência de
passos
• “Ação é um acontecimento que, a
partir de um estado inicial, após um
período de tempo finito, produz um
estado final previsível e bem definido”
(Farrer et al).
Algoritmos - Histórico
• Sua origem remonta ao século IX
• Abdullah Mudammad Bin Musa al-Khwarizmi;
• Traduzido para o Latim no século XII (“Algorithmi”)
• Adelardo de Bath
• Definia apenas as regras aritméticas
• Leibiniz trouxe a definição para a lógica
• “Calculus ratiocinator”
• Turing formalizou algoritmos computacionais em 1936
Algoritmos - Exemplo
• Receita de pão
• Obter farinha (2 xícaras);
• Obter ovos (2 unidades);
• Obter leite (1 xícara);
• Obter fermento (1 colher de sopa);
• Misturar os ingredientes e fazer a massa;
• Aguardar o crescimento da massa;
• Colocar no forno por 35 minutos;
• Retirar do forno.
Algoritmo euclidiano (MDC)
1. Dividir um número a por b, o resto é r
2. Substituir a por b
3. Substituir b por r
4. Continuar a divisão de a por b até que um não possa ser mais
dividido
• Neste caso, a é o MDC.
Algoritmo euclidiano (MDC)
• Exemplo: Calcule o MDC entre 480 e 130

480(𝑎) 40(𝑎)
1. 130(𝑏)
= 3 × 130 + 90 𝑟 4. 10(𝑏)
= 4 × 10 + 0(𝑟)

130(𝑎) 10(𝑎)
2. 90(𝑏)
= 1 × 90 + 40 𝑟 5. 0(𝑏)
= 𝑖𝑚𝑝𝑜𝑠𝑠í𝑣𝑒𝑙

90(𝑎) 6. 𝑀𝐷𝐶 = 𝑎 = 10
3. 40(𝑏)
= 2 × 40 + 10 𝑟
Algoritmos famosos
• Arquimedes: aproximação de 𝜋
• Eratóstenes: cálculo de números primos
• Algoritmos de ordenação (alfabética, numérica etc.)
Algumas citações
• “Um bom algoritmo é como uma faca afiada: faz o que deveria fazer
com o mínimo de esforço empregado.” (Cormen et al)
• “Um conjunto de regras que nos diz, de momento a momento,
precisamente como se comportar”. (Minsky et al)
• “Algoritmo é a descrição de um conjunto de comandos que,
obedecidos, resultam numa sucessão finita de ações.” (Farrer et al)
Algoritmo
• O importante é compreender que algoritmo é uma sequência lógica
com começo, meio e fim
• É uma estrutura sem qualquer ambiguidade

Dados de Dados de
entrada saída
Requisitos
• Knuth (1968, 1973) definiu 5 propriedades amplamente aceitas como
requisitos de um algoritmo
1. Finitude: número finito de etapas
2. Definição: sem ambiguidades
3. Entrada: valores dados ao algoritmo
4. Saída: valores resultantes
5. Eficácia: operações básicas, realizáveis por uma pessoa
Algoritmo ≠ Solução
• Não confundir algoritmo com solução do problema
• Há problemas com solução de apenas um algoritmo
• Uma solução pode ser formada por diversos algoritmos
• Ex:
• Problema: Um carro se desloca do Km 10 até o Km 25 em 15 minutos. Qual sua
velocidade média?
1. Algoritmo para calcular a distância (Δ𝑆 = 25𝑘𝑚 − 10𝑘𝑚 = 15𝑘𝑚);
2. Algoritmo para converter minutos em hora (𝑡ℎ𝑜𝑟𝑎 = 15 60 = 0,25)
3. Algoritmo para calcular a velocidade (𝑣 = Δ𝑆 Δ𝑡 = 15 0,25 = 60)
Sequência lógica
• “Uma forma coerente de encadear ações, seguindo uma determinada
convenção ou regra” (Piva Jr. et al);
• Uma parte da filosofia que estuda os fundamentos, as estruturas e as
expressões humanas do conhecimento.
• Em informática: “organização e planejamento das instruções,
assertivas etc. em um algoritmo, a fim de viabilizar a implantação de
um programa”. (Houaiss)
Algoritmo
Sequência lógica

2187

1536
729

35
Sequência lógica
• A “lógica” de um algoritmo bem estruturado é:
• Obedecer a uma determinada ordem
• Possuir um estado inicial
• Ser realizado em um período de tempo finito
• Produzir resultados bem definidos
Algoritmo simbólico
• É possível representar um algoritmo através da combinação de
símbolos e operadores matemáticos
• Essa união possibilita a criação de uma sequência lógica e gera uma
visualização simbólica do que seria um algoritmo em linguagem de
programação.
Algoritmo simbólico
• Algoritmo para soma de dois números
• As letras representam variáveis, que guardam valores
• Cada símbolo possui uma função específica

1. 𝑋←5
2. 𝑌←4
3. 𝑆 ←𝑋+𝑌
4. 𝑆=9
Algoritmo simbólico
• Com pseudocódigo, podemos representar um programa que recebe
dados do usuário e realiza a soma entre eles.

1. LEIA(X)
2. LEIA(Y)
3. S ← X + Y
4. ESCREVA(S)
Algoritmo simbólico
• Algoritmo que identifica se a soma de dois números é maior que 5

1. LEIA(X)
2. LEIA(Y)
3. S ← X + Y
4. SE (S > 5) ENTAO
5. ESCREVA(S)
Lógica formal
• E pra encontrar o maior?

1. LEIA(X)
2. LEIA(Y)
3. SE (X > Y) ENTAO
4. ESCREVA(X)
5. SENAO
6. ESCREVA(Y)

Vous aimerez peut-être aussi