programação ii aula 1 - inf.ufes.brmberger/disciplinas/2011_2/progii/slides/... · programação...

21
Programação II Aula 1

Upload: leque

Post on 22-Jan-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Programação II

Aula 1

Page 2: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Programação II

Objetivo: O aluno deverá ser capaz de construir algoritmos de forma organizada segundo o programação procedural utilizando a linguagem de programação C.

Page 3: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Introdução

John Von Neumann, pesquisador envolvido no projeto do ENIAC, construiu para o Instituto de Estudos Avançado de Princeton (Princeton Institute of Advanced Studies – IAS) a máquina IAS.

Ele imaginou que os programas poderiam ser representados em formato digital na memória, junto com os dados.

Arquitetura de Von Neumann:

Page 4: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Introdução

Para que serve programação?

Resolver problemas computacionalmente.

Desenvolver um programa de computador (solução) cuja execução leve a um resultado (aceitável) de um dado problema.

Nem todos os problemas têm solução computacional viável.

Entender a natureza do problema e estar atento aos requisitos da solução desejada

Escolha do paradigma de programação;

Escolha do método/estrutura de dados (procedural);

Escolha da linguagem de programação;

Page 5: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Paradigmas de Programação

Visões sobre a estruturação da solução do problema.

Prog. Funcional: consiste em representar a solução em forma de funções (matemáticas).

Prog. Procedural: consiste em representar a solução em forma de uma série de ações/procedimentos que são executados sequencialmente para produzir a solução.

Prog. Orientada a Objetos: consiste em representar a solução em forma de objetos que enviam e recebem mensagens entre si e assim produzem a solução.

Prog. em Lógica: consiste em representar o problema em forma de lógica simbólica e usar um processo de inferência para produzir resultados.

Page 6: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Prog. Procedural X Funcional

Descreve como computar (manipulando variáveis)

Fatorial(n)

begin

a := 1;

while n>0 do

begin a := a*n;

n := n-l

end;

return n;

end;

Descreve o que está sendo computado.

fatorial :: Int → Int

fatorial 0 = 1

fatorial n = n * fatorial (n-1)

Page 7: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Prog. Procedural - Conceitos Básicos

Programa: solução computacional para um dado problema.

Programa correto: implementação (correta) de um algoritmo (correto) em uma dada linguagem de programação (adequada).

Algoritmo: qualquer procedimento computacional bem definido que toma algum valor como entrada e produz algum valor como saída. [Cormen]

Algoritmo correto é tal que para cada instância de entrada ele termina e produz a saída esperada (no tempo esperado) para um dado problema.

Análise de algoritmos (antes de implementar):

Corretude: mostrar que o algoritmo sempre produz a saída esperada.

Complexidade: envolve prever os recursos necessários como tempo, espaço (memória), hardware, largura de banda.

Testes (alternativa** à análise – depois de implementar)

Page 8: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Algoritmo para escovar dentes

1.Pegar a escova e a pasta de dentes;

2.Colocar um pouco de pasta sobre as cerdas da escova;

3.Escovar os dentes do maxilar inferior;

4.Escovar os dentes do maxilar superior;

5.Expelir da boca o excesso de espuma;

6.Bochechar um pouco de água;

7.Lavar a escova e guardá-la;

8.Enxugar o rosto.

Page 9: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Algoritmo para escovar dentes

• Onde está a escova a ser usada?

• Quanto, exatamente, se deve colocar de pasta sobre as cerdas?

• O que fazer se não houver pasta? Escovar mesmo sem a pasta ou interromper o processo de escovação?

Page 10: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Melhorando o Algoritmo para escovar dentesAlgoritmo:

qualquer procedimento bem definido que toma algum valor como entrada e produz algum valor como saída.

Entrada: Dentes sujos com restos de alimentos, uma escova dental em condições de uso, 90 gramas de creme dental e 300 mililitros de água tratada.

Saída: Dentes limpos (sem restos de alimentos visíveis), uma escova dental em condições de uso e 85 gramas de creme dental. Toda a quantidade de água deve ser utilizada.

Page 11: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Melhorando o Algoritmo para escovar dentesTécnica de refinamentos sucessivos: dividir um

processo complexo em processos-componentes menores, especificando-se a entrada e a saída de cada um deles.

Processo-componente “pegar a escova e a pasta de dentes”:

1. Enquanto não encontrar a escova e o tubo de pasta, continuar procurando por cada gaveta do armário;

2. Caso tenham acabado as gavetas e não tenha encontrado a escova e o tubo, interromper a tarefa.

Page 12: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Etapas de programação

Entendimento do problema a ser resolvido;

Planejamento de uma solução => algoritmo;

Formalização da solução usando uma linguagem de programação;

Verificação da conformidade da solução obtida com o problema proposto.

Page 13: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Algoritmo para ordenar lista de números

Construir uma lista ordenada à partir de uma lista original

Entrada: lista qualquer

Saída: lista ordenada

1. Se a lista tem menos de 2 elementos, termina;

2. Senão, para cada posição da lista,

Percorre-se a lista do final até a posição atual, efetuando a troca dos elementos quando o valor da posição à frente for menor que o valor da posição atual.

Page 14: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Linguagem C

Histórico

Algol (60) → CPL (67) → BCPL (67) → B (70) → C (72).

Criada por Dennis Ritchie e Ken Thompson.

Em 1985 estabeleceu-se uma padrão oficial “C ANSI”

Características Principais

Eficiência

Flexibilidade (permissiva)

Portabilidade

Page 15: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Linguagem C

Código fonte Compilador Montador Ligador

Código Assembly

Código Objeto

ProgramaExecutável

Manipulação de variáveis → manipulação de memória

Page 16: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Linguagem C

Erros comuns de implementação:

Loop infinito – problema na condição de parada de alguma estrutura de repetição;

Segmentation fault – tentativa de acesso não permitido à uma área de memória;

Memory overflow – tentativa de utilizar mais memória do que há disponível no momento.

Má previsão da quantidade de memória necessária

Utilização de técnica apropriada.

Má utilização da memória

Memory leak (vazamento de memória)

Page 17: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Partes de um Programa

Nome da receita;

Ingredientes: descreve todo o material necessário para o preparo da receita;

Modo de preparo: descreve a forma de trabalhar com os ingredientes para que se obtenha o resultado esperado;

Comentários sobre certos procedimentos ou ingredientes a fim de detalhar alguma peculiaridade que o cozinheiro poderia não conhecer previamente.

Page 18: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Partes de um Programa

Cabeçalho: contém informações sobre o programa, como o seu nome;

Dicionário de dados: define quais são os dados manipulados pelo programa;

Corpo: define os procedimentos que o programa deve executar;

Documentação: explica certos aspectos não muito claros do programa, tanto no corpo do programa quanto no cabeçalho ou no dicionário de dados.

Page 19: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Partes de um Programa

Page 20: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência
Page 21: Programação II Aula 1 - inf.ufes.brmberger/Disciplinas/2011_2/ProgII/Slides/... · Programação II Objetivo: O aluno ... de lógica simbólica e usar um processo de inferência

Exercícios

Use o conceito de algoritmos e a técnica de refinamentos sucessivos para detalhar as seguintes atividades:

Trocar o pneu de um carro

Preparação de um bolo de aniversário

Cálculo da distância entre dois pontos no plano cartesiano.