Buscar

Programação 1 UTFPR

Prévia do material em texto

CONCEITOS E 
DEFINIÇÕES 
FUNDAMENTAIS 
Profa. Simone Aires – Prof. Saulo Queiroz, UTFPR-PG 
1 
Primeiros passos 
 Você já parou para pensar no que há em comum na 
forma como resolvemos problemas do cotidiano 
tais como: 
 Solicitar parada a um ônibus? 
 Dar um troco ao receber uma nota alta? 
 Vamos descrever breves soluções para esses 
problemas? 
2 
Problema: Solicitando parada ao “80” 
1. Leia (e memorize) 
o número do 
próximo ônibus 
2. O número lido é 
igual a 80? 
a) Sim, solicite 
parada 
b) Não, não solicite 
3 
Problema: Troco para cédula “alta” 
1. Leia (e memorize) o 
valor da nota 
2. Subtraia o valor da 
nota pelo valor do preço 
do produto (memorize 
esse valor resultante) 
3. Apresente o troco 
conforme o valor 
resultante 
4 
Para resolver problemas costumamos: 
 Estabelecer uma sequência finita de “pequenas” ações 
 Sequência porque 
 não é qualquer ordem de ações que resolve o problema 
 Finita porque 
 uma solução que requer infinitos passos não nos interessa 
 Pequenas ações (ou mais formalmente, instruções) 
 Fácil execução pelo executor da solução 
 Essas características são a base para a definição de 
“algoritmos” 
5 
Algoritmo: uma primeira definição 
 Uma sequência finita de passos (instruções) 
visando resolver um problema 
 Mas como se define “problema”? 
6 
Problema (Computacional) 
 Enunciado que especifica de forma geral a relação entre uma 
condição inicial (“entrada”) e uma resposta (“saída”) 
 Ex.: Problema de Solicitar Parada ao Ônibus Nº 80 
 Entrada: Número do próximo ônibus 
 Saída: Solicitação/Não solicita 
 Ex.: Problema do troco 
 Entrada: Valor Pago (VP), Preço do Produto (PP) 
 Assumindo VP> PP 
 Saída: Valor do troco 
7 
Algoritmo: Definição Complementar 
 
 
 “Procedimento que produz uma saída correspondente 
a uma entrada” 
Cormen et al. Introduction to Algorithms. 
8 
Algoritmos: Ensino antes da universidade 
 Você consegue identificar algoritmos com (entradas 
e saída) que você aprendeu antes de entrar neste 
curso? 
9 
Algoritmos: Ensino antes da faculdade 
 Você consegue identificar algoritmos com (entradas 
e saída) que você aprendeu antes de entrar neste 
curso? 
Algoritmo/Solução Entrada Saída 
Equação de Bhaskara Equação do 2º grau Raízes da equação dada 
Teorema de pitágoras Catetos de um triângulo retângulo Valor da hipotenusa 
Análise sintática Frase Sujeito, predicado, ... 
 
10 
Algoritmos: Ensino antes da faculdade 
 Você consegue identificar algoritmos com (entradas 
e saída) que você aprendeu antes de entrar neste 
curso? 
Algoritmo/Solução Entrada Saída 
Equação de Bhaskara Equação do 2º grau Raízes da equação dada 
Teorema de pitágoras Catetos de um triângulo retângulo Valor da hipotenusa 
Análise sintática Frase Sujeito, predicado, ... 
 
11 
Algoritmos: Ensino antes da faculdade 
 Você consegue identificar algoritmos com (entradas 
e saída) que você aprendeu antes de entrar neste 
curso? 
Algoritmo/Solução Entrada Saída 
Equação de Bhaskara Equação do 2º grau Raízes da equação dada 
Teorema de pitágoras Catetos de um triângulo retângulo Valor da hipotenusa 
Análise sintática Frase Sujeito, predicado, ... 
 
12 
Algoritmos: Ensino antes da faculdade 
 Você consegue identificar algoritmos com (entradas 
e saída) que você aprendeu antes de entrar neste 
curso? 
Algoritmo/Solução Entrada Saída 
Equação de Bhaskara Equação do 2º grau Raízes da equação dada 
Teorema de pitágoras Catetos de um triângulo retângulo Valor da hipotenusa 
Análise sintática Frase Sujeito, predicado, ... 
 Conclusão? 
13 
Algoritmos: Ensino antes da faculdade 
 Você consegue identificar algoritmos com (entradas 
e saída) que você aprendeu antes de entrar neste 
curso? 
Algoritmo/Solução Entrada Saída 
Equação de Bhaskara Equação do 2º grau Raízes da equação dada 
Teorema de pitágoras Catetos de um triângulo retângulo Valor da hipotenusa 
Análise sintática Frase Sujeito, predicado, ... 
 Conclusão? A noção de algoritmo é tão antiga 
quanto a vontade humana de resolver problemas! 
14 
Computação 
 E onde entram os computadores nessa história? 
15 
Computação 
 Um computador nada mais é que um aparato capaz de executar 
um algoritmo 
 Ele não sabe criar algoritmos. Apenas executa instruções elementares 
sequencialmente tais como leia, apresente, subtraia 
 Em todos os exemplos de algoritmos, quem era o executor do 
algoritmo? 
 O ser humaninho! :D 
 Ao longo de anos, o homem cumpriu o papel do computador 
 Até que ele se deparou com problemas que exigiam algoritmos que 
a paciência humana não suporta executar 
16 
Computação 
 Um computador nada mais é que um mecanismo capaz de 
executar um algoritmo 
 Ele não sabe criar algoritmos. Apenas executa instruções elementares 
sequencialmente tais como leia, apresente, subtraia 
 Em todos os exemplos de algoritmos, quem era o executor do 
algoritmo? 
 O ser humaninho! :D 
 Ao longo de anos, o homem cumpriu o papel do computador 
 Até que ele se deparou com problemas que exigiam algoritmos que 
a paciência humana não suporta executar 
17 
Algoritmo para multiplicar duas matrizes 
18 
Entenderam o algoritmo 
queridos aluninhos? 
Sim! 
Sim! 
Exemplo em Sala de aula: Matrizes 2x2 
Que lindo! 
Sim! 
Nem preciso fazer 
exercícios 
Algoritmo para multiplicar duas matrizes 
19 
Questão de prova: matrizes 7x7 
2 0 9 1 9 4 8 
5 8 1 0 1 9 5 
2 0 9 1 9 4 8 
7 8 1 0 1 9 5 
9 0 9 1 9 4 8 
4 8 1 0 1 9 5 
3 0 9 1 9 4 8 
2 0 9 1 9 4 8 
5 8 1 0 1 9 5 
2 0 9 1 9 4 8 
7 8 1 0 1 9 5 
1 0 9 1 9 4 8 
4 8 1 0 1 9 5 
3 0 9 1 9 4 8 
Torre de Hanoi 
 Mover todos os discos do primeiro para o 
terceiro pino com auxílio do segundo 
 Disco maior não pode sobrepor-se a disco menor 
 Quantos instruções de “mover” são 
aproximadamente necessárias para n discos? 
 2T(n-1) + 1 = Θ(2n) 
 Gerações de tibetanos revesavam-se para 
mover n=64. Eles acreditavam que o mundo 
acabaria ao término do jogo. Porque? 
 264=18446744073709551616 instruçõesde 
mover 
 Movimentando 1 disco por segundo, a 
brincadeira terminaria em 500.000 anos! 
 
20 
Torre de Hanoi 
 Mover todos os discos (um por vez) do primeiro 
para o terceiro pino com auxílio do segundo 
 Disco maior não pode sobrepor-se a disco menor 
 Quantos instruções de “mover” são 
aproximadamente necessárias para n discos? 
 2T(n-1) + 1 = Θ(2n) 
 Gerações de tibetanos revesavam-se para 
mover n=64. Eles acreditavam que o mundo 
acabaria ao término do jogo. Porque? 
 264=18446744073709551616 instruçõesde 
mover 
 Movimentando 1 disco por segundo, a 
brincadeira terminaria em 500.000 anos! 
 
21 
Torre de Hanoi 
 Mover todos os discos (um por vez) do primeiro 
para o terceiro pino com auxílio do segundo 
 Disco maior não pode sobrepor-se a disco menor 
 Quantos instruções de “mover” são 
aproximadamente necessárias para n discos? 
 2T(n-1) + 1 = Θ(2n) (matemática discreta) 
 Diz a lenda que os tibetanos revesavam-se 
para mover n=64. Eles acreditavam que o 
mundo acabaria ao término do jogo. Porque? 
 264=18446744073709551616 instruções tipo 
de mover 
 Movimentando 1 disco por segundo, a 
brincadeira terminaria em 500.000 anos! 
 
22 
Torre de Hanoi 
 Mover todos os discos (um por vez) do primeiro 
para o terceiro pino com auxílio do segundo 
 Disco maior não pode sobrepor-se a disco menor 
 Quantos instruções de “mover” são 
aproximadamente necessárias para n discos? 2T(n-1) + 1 = Θ(2n) (matemática discreta) 
 Diz a lenda que os tibetanos revesavam-se 
para mover n=64. Eles acreditavam que o 
mundo acabaria ao término do jogo. Porque? 
 264=18.446.744.073.709.551.616 instruções 
do tipo “mover” 
 Movimentando 1 disco por segundo, a 
brincadeira terminaria em 500.000 anos! 
 
23 
Outros exemplos 
 Calcular determinante de grandes matrizes 
 Desembaralhar uma grande mensagem pelo sistema de criptografia 
zenit/polar 
 Cálcular trajetória de projéteis 
 Para executar algoritmos de forma rápida, novos computadores 
não-humanos foram sendo propostos pelo homem 
 NOTA: O homem continua sendo o principal responsável pela invenção 
dos algoritmos e projeto de computadores 
 Os computadores só executam algoritmos 
 
24 
Ábaco 
 Origem: Mesopotâmia, 
2700 aC (?) 
 Só trabalha com soma e 
subtração 
 Não consegue computar o 
algoritmo da parada de 
ônibus, por exemplo 
 
25 
Máquina de Turing 
 Poderoso modelo teórico de um computador genérico 
apresentado pelo matemático Alan Turing em 1936 
 Turing também criou aparato mecânico de sua máquina para 
decifrar mensagens dos nazistas durante a 2ª grande guerra 
 Filme: O Jogo da imitação 
 Acredita-se que um algoritmo só pode ser computável se a 
máquina de Turing consegue computá-lo (tese de Church-
Turing) 
 Linguagens formais e autômatos 
26 
 
ENIAC, 1943 
 Electronic Numerical Integrator 
and Computer 
 Execução de 5000 instruções 
por segundo 
 Como os computadores atuais, 
obedece modelo teórico de 
Turing 
 é mais rápido que o aparato 
mecânico de Turing 
27 
Computadores hoje em dia 
 Há muitos outros computadores mecânicos na 
história. Hoje predominam os eletrônicos! 
28 
Relação Algoritmo x Computador 
 O conjunto de instruções que um computador reconhece 
é chamado de linguagem de máquina 
 Em “Arquitetura de computadores” estudamos a linguagem de 
máquina dos computadores modernos 
 Um programa é uma forma de apresentar um 
algoritmo numa dada linguagem de máquina 
 Computadores executam algoritmos por meio de programas 
29 
Tentando relacionar tudo 
Computador 
Criador e 
programador 
do algoritmo 
1. Linguagem 
da Máquina 
3. Execução do 
programa 
Programa 
2. Programação 
30 
Tentando relacionar tudo 
Computador 
Criador e 
programador 
do algoritmo 
1. Linguagem 
da Máquina 
3. Execução do 
programa 
Programa 
2. Programação 
 Programar em linguagem de máquina é tarefa tediosa (o que queríamos 
evitar) 
 Ex.: Programar no ENIAC exigia conhecimentos de níveis de tensão e voltagem pois 
as instruções eram representadas por variáveis da física/eletrônica 
31 
Abstração 
 Técnica para remover a complexidade de um 
objeto de estudo: sistema, cenário, programa 
 Representa o objeto de estudo da forma mais 
simplificada possível porém preservando 
informações relevantes a um dado contexto 
 Diferentes contextos podem requerer diferentes 
níveis de abstração 
32 
Exemplo: Mapa Metro de Lisboa 
 Nível de abstração 
do usuário 
 Contexto: facilitar 
o deslocamento 
entre estações 
É irrelevante saber 
se há curvas 
entre “Odivelas” e 
“Ameixoeira”! 
33 
Exemplo: Mapa Metro de Lisboa 
 Nível de abstração 
do usuário 
Contexto: facilitar o 
deslocamento 
entre estações 
É irrelevante saber 
se há curvas 
entre “Odivelas” e 
“Ameixoeira”! 
 É irrelevante 
saber se há 
curvas entre 
“Odivelas” e 
“Ameixoeira”! 
34 
 Nível de 
abstração do 
engenheiro 
 Contexto: 
facilitar o 
projeto de 
expansão da 
malha! 
Exemplo: Mapa Metro de Lisboa 
35 
Linguagens de programação 
 Apresentam ao programador instruções mais parecidas com o 
vocabulário humano 
 Escondem (abstraem) a complexidade da linguagem de máquina. Por 
isso são chamadas de linguagem de “alto-nível” 
 Um compilador é um programa especial que faz a tradução entre 
linguagem de alto nível e linguagem de máquina 
 Em “compiladores” aprenderemos a construir um compilador 
 Um algoritmo pode ser visto em diferentes níveis de abstração 
 Considere um algoritmo para adicionar um amigo no Facebook 
36 
Exemplo: Adicionar amigo no Facebook 
 Como aceitar um amigo no 
Facebook? 
 Algoritmo para o nível de 
abstração do usuário 
37 
Exemplo: Adicionar amigo no Facebook 
 Como aceitar um amigo no 
Facebook? 
 Exemplo de solução para o nível de 
abstração do analista de banco de 
dados 
 Aprenderemos isso nas disciplinas de 
banco de dados 
Ami-
za-
de 
Usuário 
Nome Email Aniversário Sexo Senha 
Data 
38 
Exemplo: Adicionar amigo no Facebook 
 Como aceitar um amigo no 
Facebook? 
 Exemplo de solução para o nível 
de abstração do programador 
do sistema gerenciador de 
banco de dados 
 Aprenderemos nas disciplinas de 
algoritmos e estruturas de dados 
typedef struct TUsuario 
{ 
 char nome[500], email[50], 
senha[50]; 
 int dia, mes, ano; //data 
 char sexo; 
} TUsuario; 
typedef struct TAmizade 
{ 
 char nome[500], email[50], 
senha[50]; 
 int dia, mes, ano; //data 
} TAmizade; void main(){ ... } 
39 
Exemplo: Adicionar amigo no Facebook 
 Como aceitar um amigo no 
Facebook? 
 Trecho de solução para o 
nível de abstração do 
programador de baixo nível 
(linguagem de montagem) 
.LFB0: 
 .cfi_startproc 
 pushl %ebp 
 .cfi_def_cfa_offset 8 
 .cfi_offset 5, -8 
 movl %esp, %ebp 
 .cfi_def_cfa_register 5 
 nop 
 popl %ebp 
 .cfi_restore 5 
 .cfi_def_cfa 4, 4 
 ret 
 .cfi_endproc 
40 
Exemplo: Adicionar amigo no Facebook 
 Como aceitar um amigo no 
Facebook? 
 Trecho de solução para o 
nível de abstração do 
programador de baixo nível 
(linguagem de montagem) 
.LFB0: 
 .cfi_startproc 
 pushl %ebp 
 .cfi_def_cfa_offset 8 
 .cfi_offset 5, -8 
 movl %esp, %ebp 
 .cfi_def_cfa_register 5 
 nop 
 popl %ebp 
 .cfi_restore 5 
 .cfi_def_cfa 4, 4 
 ret 
 .cfi_endproc 
41 
Linguagem de Programação próxima aos códigos binários, 
de forma que um processador conseguiria decodificar 
imediatamente sem recorrer a um compilador. 
Exemplo: Adicionar amigo no Facebook 
 Como aceitar um amigo no 
Facebook? 
 Exemplo de solução para o 
nível de abstração do 
projetista de 
processador/arquitetura de 
computadores (linguagem 
de máquina) 
42 
Exemplo: Adicionar amigo no Facebook 
 Como aceitar um amigo no 
Facebook? 
 Exemplo de solução para o 
nível de abstração do 
programador de 
drivers/engenheiro de 
hardware (placa WiFi) 
 Solução para enviar o 
pedido de amizade via Wi-
Fi: Modulação QAM 
43 
O código-fonte 
Linguagem de 
Programação 
Criador e 
programador 
do algoritmo 
1. Instruções de 
alto-nível 
5. Execução do 
programa 
Código-Fonte 
2. Programação 
44 
Compilador 
Programa 
(Linguagem de 
Máquina) 
3. Compilação 
(Entrada) 
4. Compilação 
(Saída) 
Computador 
Síntese 
 Ser humano cria algoritmos e computadores (cientista da computação) 
 Um ser humano pode exercer papel de computador 
 Podemos criar algoritmos sem ter em mente o computador que o executará 
 Para executar nosso algoritmo em um dado computador, precisamos 
programá-lo na linguagem de máquina do computador 
 Linguagem de máquina é algo muito complexo, exige muito tempo e 
atenção 
 Linguagens de programação têm comandos mais próximos do vocabulário 
humano 
 Compiladores traduzem o código-fonte feitoem uma linguagem de 
programação para um programa em linguagem de máquina 
45 
Conceitos-chave 
 Algoritmo 
 Problema 
 Computador; Computar; Computação 
 Ciência da Computação 
 Abstração 
 Linguagem de Máquina 
 Linguagem de Programação 
 Programa e Código Fonte 
 Compilador 
46 
O que é ciência da computação? 
 "Ciência da computação tem tanto a ver com o 
computador como a Astronomia com o telescópio, a 
Biologia com o microscópio, ou a Química com os 
tubos de ensaio. A Ciência não estuda ferramentas, 
mas o que fazemos e o que descobrimos com elas.“ 
Edsger Dijkstra 
47

Continue navegando