Construção de Algoritmos
e Programação
Prof. Dr. Ednaldo Pizzolato
DC - UFSCar
Apresentação
Disciplina
que
fornecerá
instrumentos para que o aluno
aprenda a desenvolver soluções
computacionais para problemas bem
determinados.
Fazem parte do escopo da disciplina
o aprendizado de fluxogramas,
algoritmo e linguagem C.
Apresentação
Avaliação:
Existem atividades práticas (AP) que
auxiliam o aprendizado. A média das
avaliações práticas terá peso correspondente a 20% das avaliações na
média final.
Apresentação
Avaliação:
Existem também as avaliações
teóricas cuja média corresponderá a
80% da média final.
Assim, a média final (MF) será:
MF = 20% MAP + 80% MAT
Apresentação
Avaliação:
Se o aluno não obtiver média igual
ou superior a 6, tal aluno deverá
fazer uma prova extra chamada de
prova substitutiva que substituirá
(em benefício do aluno) sua pior
nota.
Apresentação
Avaliação:
A SUB não poderá ser feita para
aumentar a nota final.
Caso o aluno tenha feito a SUB, sua
média nunca será superior a 7.
Apresentação
Avaliação:
Caso o aluno mesmo com a sub não tenha
conseguido obter média de aprovação (igual ou
superior a 6), e caso o mesmo aluno tenha obtido
média igual ou superior a 5, poderá realizar uma
prova de recuperação no início do próximo
semestre. Tal prova versará sobre todo o conteúdo e
a média final será a média aritmética entre a média
final obtida com a sub e a nota da prova de
recuperação. Quem fizer a recuperação e conseguir
aprovação terá média final 6.
Apresentação
Aulas:
As aulas acontecerão no laboratório
(com computadores). Assim, será
possível testar as informações
imediatamente (bem como tirar
dúvidas e fazer experimentos
diferentes).
Apresentação
Aulas:
As provas práticas acontecerão também
no laboratório. Elas serão questões
relativas às atividades práticas que os
alunos deverão fazer em casa. Ou seja,
as atividades práticas terão suas notas
através das provas práticas.
Apresentação
Aulas:
As provas teóricas acontecerão na
sala oficial divulgada pela UFSCar.
Elas terão questões relativas ao
conteúdo ministrado durante o
período.
Apresentação
Datas:
Serão 3 provas e uma substitutiva.
Acontecerão nos seguintes dias:
P1 – 14/04
P2 – 12/05
P3 – 23/06
Sub – 30/06
Apresentação
Material de Apoio:
Haverá uma área de apoio no
MOODLE que permitirá que o
aluno faça downloads de slides.
Essa área, na verdade, servirá de
apoio para a disciplina.
www.moodle.ufscar.br
Apresentação
Bibliografia:
Senne, E.L.F. – Primeiro curso de programação
em C, Visual Books, 2003.
Kernighan, B.W. & Ritch, D.M. – C: A
linguagem de Programação, Rio de Janeiro,
Campus, 1986.
Mizrahi, V. – Treinamento em Liguagem C –
Módulo 1 e 2, São Paulo, McGraw-Hill, 1990.
Apresentação
Bibliografia:
Medina, M. & Fertig, C. - Algoritmos e
Programação – Teoria e Prática, Novatec, 2005.
Tremblay, J-P. & Bunt, R. - Ciência dos
Computadores – Uma Abordagem Algoritmica,
McGraw-Hill, 1981.
INTRODUÇÃO
Área que estuda os computadores
e o que eles podem fazer.
COMPUTAÇÃO
INTRODUÇÃO
Programação
software
Equipamento
hardware
INTRODUÇÃO
• Hardware
É a parte que você chuta
– São os equipamentos e
dispositivos eletrônicos, elétricos
e mecânicos que compõem o
computador
• Software
É a parte que você xinga
– São os programas e aplicativos
que contêm instruções para
comandar o hardware
INTRODUÇÃO
Programação
software
hardware
INTRODUÇÃO
Entrada
processamento
Saída
INTRODUÇÃO
Exemplo: Cálculo da média entre 3 números
Entradas: ???
Saídas: ???
10 20 30
20
INTRODUÇÃO
Teclado
Mouse
Modem
MODELO DE COMPUTADOR
Entrada
Saída
Monitor
Impressora
Modem
Unidade de
processamento
Memória
Primária
Secundária
Pentium
Athlon
Motorola
+
Co-processador
Modelo de computador
• Memória
•Endereçamento
Identificação de onde as
informações estão
•Capacidade
Quantidade de
informação que pode ser
armazenada
– Armazenamento de dados e
programas
•Volatilidade
Exigência de eletricidade
Entrada
Saída
Unidade de
processamento
Memória
•Velocidade
Taxa de transferência dos
dados para
processamento
Tipos básicos
• Memória
Nunca conte
com isso!!!
– Não existem posições vazias
– Há sempre bits em posições de
memória
• Pode-se não saber o que está lá
• Em posições com conteúdo
desconhecido, diz-se que existe “lixo”
– Alguns compiladores mais modernos, mas
não todos, tendem a ter bits zero nas áreas de
dados
INTRODUÇÃO
• Hardware e periféricos executam operações
sob controle da UCP (unidade central de
processamento)
• UCP segue os comandos armazenados na
memória primária
• O sistema operacional é o conjunto básico de
comandos que gerenciam o computador
– Gerencia também o uso de outros
programas
•
•
•
•
Editores de texto
Planilhas de cálculo
Jogos
Programas em geral... feitos pelo usuário
INTRODUÇÃO
Aplicativos
S.O.
Hardware
Periféricos
Sistemas operacionais
• Exemplos de S.O.
(principais)
–
–
–
–
–
–
–
–
–
–
–
–
–
–
1961 – CTSS
1966 – DOS/360 (IBM)
1969 – Unix
1970 – DOS/Batch 11
(PDP-11)
1976 – CP/M
1978 – VMS
1981 – MS/DOS
(Microsoft)
1981 – SunOS
1984 – MacOS (McIntosh)
1985 – AmigaOS
1985 – Windows 1.0
1987 – Minix
1987 – IRIX (SGI)
1987 – OS/2 (IBM)
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
1987 – Windows 2.0
1989 – SCO Unix
1991 – Linux
1992 – Windows 3.1
1993 – FreeBSD
1993 – Windows NT
3.1
1995 – Windows 95
1997 – MacOS 7.6
1998 – Windows 98
1999 – MacOS 8
2000 – Windows 2000
2000 – Windows ME
2001 – Windows XP
2001 – MacOS X
2003 – Windows 2003
Server
2005 – Windows Vista
Aplicativos
Aplicativos
Algoritmo
Linguagem de Programação
Tradutor ou Compilador
Instruções em 0s e 1s
SOLUÇÃO
ALGORITMICA
• Algoritmo:
– Definição informal
Conjunto finito de instruções que, em
um tempo também finito, transforma
um conjunto de dados em um
conjunto de dados processados, com o
intuito de resolver um problema. Uma
linguagem de programação permite
que um algoritmo seja “convertido”
em programa.
Algoritmos
• Algoritmos envolvem
– Linguagem algorítmica
• Formalização dos comandos
• Formalização de estruturas de controle
– Ferramental de representação de dados
• Tipos de dados variados
• Composições de tipos de dados
– Metodologia de desenvolvimento
• Abordagem de problemas e proposição de solução
– Objetivo final
• Algoritmos têm como objetivo ser a base para programas
SOLUÇÃO
ALGORITMICA
• Lógica de interpretação
– Sequencia linear
• Remoção de ambiguidade
• Abstração da execução
– Velocidade arbitrária
– Memória infinita
– Sem limitação para a representação de
informação
SOLUÇÃO
ALGORITMICA
• Ciclo de desenvolvimento
– Entendimento do problema
– Entendimento da solução nãoalgorítmica
– Proposição da solução algorítmica
– Depuração da solução: testes,
correções, reavaliação da solução
– Avaliação da solução quanto a
melhorias e desempenho
SOLUÇÃO
ALGORITMICA
• Entendimento do problema
– Avaliação de qual o problema
– Determinação com clareza de quais são os dados de
que se dispõe
– Determinação com clareza de qual a resposta à qual
se precisa chegar
SOLUÇÃO
ALGORITMICA
• Entendimento da solução não-algorítmica
– Aquisição de conhecimento (ou consulta a alguém
que o tenha) para que se tenha uma solução para o
problema
• Proposição da solução algorítmica
– Desenvolvimento do algoritmo
• Estruturação organizada
• Abordagem com enfoque do panorama mais geral para
o mais específico
SOLUÇÃO
ALGORITMICA
• Depuração da solução: testes, correções, reavaliação da
solução
– Avaliação do algoritmo para certificar que as respostas
produzidas são as esperadas
• Checagem para diferentes entradas das saídas produzidas
– Correção e adequação do algoritmo frente às deficiências
encontradas
• Avaliação da solução quanto a melhorias e desempenho
– Reavaliar a solução proposta
• Busca de melhores opções para a solução proposta
• Avaliação das partes do algoritmo para torná-lo mais rápido
(usando um menor número do comandos/operações)
Aplicativos
Algoritmo
Aplicativos
Linguagem de Programação
Tradutor ou Compilador
Instruções em 0s e 1s
Programação
• Máquina programável
– Capacidade de executar instruções a
partir de uma lista de comandos
especificada por um programador
• Cartões perfurados
• Fitas de papel perfurado
• HD, CD, DVD etc.
Programação
• No começo:
– Os programas eram feitos através da mudança física
dos circuitos (chaves).
• Depois:
– Evoluiu para programas armazenados;
– A máquina é capaz de obter a lista de comandos e
armazená-la internamente, em um dispositivo
chamado memória.
• Trabalhos:
–
–
–
–
História dos computadores até 1900
História dos computadores de 1901 a 1960
História dos computadores de 1961 a 2009
História da programação
Trabalho
Trabalhos (em powerpoint):
Título
Número do Trabalho
Nome de cada membro do grupo
Data da Entrega
Conteúdo
Bibliografia
Trabalho
• Perguntas a serem respondidas
–
–
–
–
–
–
O que é um ábaco?
O que é uma régua de cálculo?
O que são os bastões de Napier?
O que são válvulas, relés e transístores?
O que são bugs e por que esta denominação?
Qual foi a participação de Da Vinci, Pascal,
Babbage, Ada Augusta, Hollerith, Von
Neumann entre outros na história dos
computadores e da programação?
Trabalho
• Bibliografia
– Ciência dos Computadores (Livro)
–
–
–
–
–
–
http://www.hitmill.com/computers/history/index.html
http://lecture.eingang.org/toc.html
http://www.islandnet.com/~kpolsson/comphist/
http://www.maxmon.com/history.htm
http://inventors.about.com/library/weekly/aa051599.htm
Outros sites na internet
Programação
• Voltando ao assunto de programação...
Programação
• Como era no início...
– Instruções do processador
• Exigia conhecimento das instruções (em
binário?!?)
• Exigia paciência para identificar e
corrigir erros
• A chance de erros era grande
10001010 11000100
8AC416
Programação
• Linguagem montadora
– Mnemônicos para as instruções do
processador
8AC416
MOV
ADD
SUB
JMP
...
Programação
• Linguagem montadora
– Um programa específico
• Interpreta os mnemônicos
• Gera a instrução adequada para o
processador
– Nome do programa
• Programa montador
• Em inglês: assembler
– Nome da “linguagem” dos
mnemônicos
• Assembly
Programação
• Linguagem montadora
– Dificuldades
• Ainda sujeita a erros
• Ainda exigia atenção do programador
• O assembly era específico para cada processador
– Vantagens
• Documentação
– O texto assembly admitia comentários escritos
pelo programador
– Os comentários eram simplesmente ignorados
pelo programa montador
Programação
• Linguagem de nível alto
– Substitui o assembly por instruções
independentes do processador
– O programador não escreve
diretamente as instruções do
processador, mas um conjunto de
comandos mais abstrato
Copia o conteúdo da
B=A
posição de memória
chamada A para B
Programação
• Linguagem de nível alto
– Um programa interpreta o código escrito na
linguagem
• Equipamentos distintos interpretam o mesmo
código para gerar instruções para seus próprios
processadores
– Vantagens
• Um mesmo código de nível alto pode ser usado
em várias máquinas diferentes
– Desvantagens
• Máquinas diferentes exigem programas
específicos para interpretar a linguagem
• Nem sempre estes programas interpretam
exatamente a mesma linguagem
– Dialetos!!!
Programação
C=A+B
A fica no endereço A0FF0216
B fica no endereço A0FF0616
C fica no endereço A0FF0A16
Carrega o conteúdo de A0FF0216
Carrega o conteúdo de A0FF0616
Soma os valores carregados
Armazena o resultado em A0FF0A16
10010100
00110101
11001101
11001001
00111101
00001101
11101010
00101001
11001010
00111101
00001101
11101010
00101001
11001010
01010101
10101010
00101001
...
Compiladores e Interpretadores
Algoritmo
Linguagem de Programação
Aplicativos
Tradutor ou Compilador
Instruções em 0s e 1s
Compiladores e Interpretadores
• Compilador
– Interpreta o código de nível alto inteiro e gera
todo o conjunto de instruções
– Se houver erro, nenhuma instrução é gerada
- Somente executa se não houver erros
(sintáticos) no programa
• Interpretador
– Interpreta o código de nível alto comando por
comando e o executa na hora
– Se houver erro, o programa executa até o ponto
do erro, então pára
- Resultados parciais podem ser obtidos
antes do erro
Compiladores e Interpretadores
• Um compilador converte um programa
(escrito em uma linguagem de
programação)
em
um
código
compreendido pelo computador.
• Um interpretador também executa tarefa
semelhante à de um compilador, mas a
diferença está no fato de que o
interpretador terá que executar a mesma
tarefa de “tradução” a cada vez que o
usuário executar o programa.
Compiladores e Interpretadores
Bla...
• O interpretador tem
que ouvir “pouco a
pouco” o que o
locutor está falando
e traduzir para todos
os ouvintes. Se o
locutor
for
apresentar
10
palestras iguais, o
intérprete terá que
traduzir 10 vezes...
Compiladores e Interpretadores
Bla...
• O compilador ouve
tudo uma única vez e
cria um “livro” traduzido com o conteúdo
da palestra do locutor.
Assim, o trabalho do
compilador ocorre somente uma vez e as
coisas ficam bem mais
rápidas...
Compiladores e Interpretadores
Programa
em
uma
linguagem
Algoritmo
Tradução
Lisp
C#
Java
C
C++
Pascal
Cobol
PL/I
Executável
Aplicativos
Algoritmo
Linguagem de Programação
Tradutor ou Compilador
Aplicativos
Instruções em 0s e 1s
Bases
• Sistema de base decimal
– Composto de 10 algarismos (0 a 9)
– Algarismo é o termo usado para denominar
os símbolos de zero a nove e é em
homenagem a um matemático chamado alKhowarizmi.
– 5.326 = 5 x 1000 + 3 x 100 + 2 x 10 + 6 x 1
–
= 5 x 103 + 3 x 102 + 2 x 101 + 6 x 100
Bases
• Sistema binário
– Composto de 0s e 1s
– Nro = bn x 2n + bn-1 x 2n-1 + .... + b0 x 20
– Exemplo:
•
•
•
•
01000010
00001101
00001010
01101001
– Bits  0s e 1s
– Byte  agrupamento de 8 bits
– Palavra  agrupamento de 4 bytes
Bases
• Conversão de bases
• 61  base 2 ??
• 61 2
•
1 30 2
•
0 15 2
•
1 7 2
•
1 3 2
•
1 1 2
•
1 0
111101
Bases
•
•
•
•
•
•
•
•
•
•
•
•
111101
1 x 25 = 32
+
1 x 24 = 16
+
1 x 23 = 08
+
1 x 22 = 04
+
0 x 21 = 00
+
1 x 20 = 01
32 + 16 + 08 + 04 + 01 = 61
Bases
• Mudar da base 10 para a base 8
(octal)
– 61
– 120
– 56
Bases
• Base Hexadecimal
– Valores entre 0 e F, onde
•
•
•
•
•
•
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
Portanto, 4A3F16 = 1900710
16.384 + 2.560 + 48 + 15
Bases
• Operações
– Soma de binários
1 1
1 1 1 0
•
•
•
•
0+0=0
0+1=1
1+0=1
1 + 1 = 0 (e vai 1)
0011
1011
Bases
• Operações
– Subtração de binários
•
•
•
•
0-0=0
1-1=0
1-0=1
0 - 1 = 1 (e empresta 1)
Bases
•
Operações
–
Adição de Hexadecimais
1
1
B C 7
3 4 B
F 1 2
7 + 11 = 18 – 16 = 2 (e vai 1)
1 + 12 + 4 = 17 – 16 = 1 (e vai 1)
Representação
• Código ASCII
– Representação interna (computador)
de símbolos em binário
•
•
•
•
A = 0100 0001
B = 0100 0010
C = 0100 0011
...
Motivação - programação
• Vamos brincar um pouco de programar!
PROBLEMA SIMPLES
• COMANDOS
–
–
–
–
F (FRENTE)
T (TRAS)
D (DIREITA)
E (ESQUERDA)
PROBLEMA SIMPLES
• SOLUÇÃO 1
–
–
–
–
–
–
–
–
–
DD
FFF
EE
FF
DDDD
TT
EEEE
FFF
DDDDD
PROBLEMA SIMPLES
• SOLUÇÃO 2
–
–
–
–
D2
F3
D3
F3
PERGUNTA: Pode-se trocar a ordem dos
comandos?
PROBLEMA SIMPLES 2
Siga em frente
até a prefeitura.
Depois vire à
direita e siga em
frente por um
quarteirão
e
meio.
PROBLEMA SIMPLES 2
Siga em frente
significa que
os sinais de
trânsito devem
ser respeitados.
PROBLEMA SIMPLES 3
Um professor de física
necessita de uma solução
computacional
que
resolva o problema de
cálculo da velocidade
final de um objeto, solto
do repouso na direção
vertical a partir de uma
dada altura, quando este
atinge o solo. Este
problema é parte de um
outro problema maior em
que o professor está
trabalhando, em cinética.
v0 = 0
v=?
PROBLEMA SIMPLES 3
v0 = 0
Entendimento do problema
• É um caso de queda livre
Entendimento da solução
não-algorítmica
• Consultando o material do
cursinho
• Fazendo as manipulações
algébricas adequadas
• Solução:
v  2hg
v  4,43 h
h – altura
g – aceleração gravitacional
v  2hg
PROBLEMA SIMPLES 3
– Desenvolvimento do algoritmo
algoritmo quedaLivre
início
Obtenha o valor da altura
Calcule a velocidade
Devolva como resposta a velocidade calculada
fim
Esboço inicial
PROBLEMA SIMPLES 3
– Desenvolvimento do algoritmo
algoritmo quedaLivre
início
Obtenha o valor para “altura”
Calcule “velocidade” pela fórmula “
Devolva o valor de “velocidade”
fim
Esboço mais refinado
velocidade 4,43 altura
”
PROBLEMA SIMPLES 3
• Exemplo
– Desenvolvimento do algoritmo
algoritmo quedaLivre
{ Calcula a velocidade de uma partícula ao atingir o solo
após ser largada do repouso a uma dada altura }
declare altura, velocidade: real
início
leia(altura)
velocidade  4,43 * raiz(altura)
escreva(velocidade)
fim
Versão final
PROBLEMA SIMPLES 3
• Exemplo
– Observações
• O problema proposto foi bastante específico
– A altura deve ser dada em metros e o valor deve
ser positivo
– A velocidade resultante é em m/s
• O algoritmo não é geral
–
–
–
–
–
O valor da gravidade foi estimado em 9,8m/s2
Não se admite outro valor para g
Não se admite velocidade inicial diferente de zero
Não se considera resistência do ar
Etc. etc. etc.
PROBLEMA SIMPLES 3
– Teste do algoritmo
• Acompanhamento dos cálculos
realizados
Valor para h
8,00
9,50
13,73
Valor
esperado
12,52
13,65
16,40
Valor
calculado
12,50
13,62
16,38
PROBLEMA SIMPLES 3
• Exemplo
– Melhorias
• Verificou-se que o cálculo intermediário
da velocidade podia ser omitido
Algoritmo QuedaLivre
{ Calcula a velocidade de uma partícula ao atingir o solo
após ser largada do repouso a uma dada altura }
Declare Altura, Velocidade: real
Início
Leia (Altura)
Velocidade  4,43 * Raiz(Altura)
Escreva (Velocidade)
Fim
Versão final
PROBLEMA SIMPLES 3
• Exemplo
– Melhorias
algoritmo quedaLivre
Algoritmo
QuedaLivre
{ Calcula a velocidade de uma partícula ao atingir o solo
após ser largada do repouso a uma dada altura }
Declare Altura:
declare
Altura, Velocidade:
real
real
Início
início
Leia (altura)
leia
(Altura)
Velocidade
 4,43
* Raiz(Altura)
escreva
(4,43
* raiz(altura))
fim
Escreva (Velocidade)
Fim
Versão final
Download

Construção de Algoritmos e Programação