Construção de Algoritmose Programação
Prof. Dr. Ednaldo Pizzolato
DC - UFSCar
ApresentaçãoApresentaçã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çãoApresentação
Avaliação:
Existem atividades práticas (AP) que auxiliam o aprendizado. A média das avaliações práticas terá peso cor-respondente a 20% das avaliações na média final.
ApresentaçãoApresentaçã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çãoApresentaçã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çãoApresentaçã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çãoApresentaçã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çãoApresentaçã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çãoApresentaçã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çãoApresentaçã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çãoApresentação
Datas:
Serão 3 provas e uma substitutiva. Acontecerão nos seguintes dias:
P1 – 14/04P2 – 12/05P3 – 23/06Sub – 30/06
ApresentaçãoApresentaçã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çãoApresentaçã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çãoApresentaçã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
COMPUTAÇÃO
Área que estuda os computadorese o que eles podem fazer.
INTRODUÇÃO
software
hardware
Programação
Equipamento
INTRODUÇÃO• HardwareHardware
– São os equipamentos e dispositivos eletrônicos, elétricos e mecânicos que compõem o computador
• SoftwareSoftware– São os programas e aplicativos
que contêm instruções para comandar o hardware
É a parte que você chuta
É a parte que você xinga
INTRODUÇÃOINTRODUÇÃO
Programação
software
hardware
INTRODUÇÃO
processamentoEntrada Saída
INTRODUÇÃO
10 20 30 20
Exemplo: Cálculo da média entre 3 números
Entradas: ???
Saídas: ???
INTRODUÇÃO
Unidade deprocessamento
Memória
Entrada
Saída
PentiumAthlonMotorola+Co-proces-sador
TecladoMouseModem
MonitorImpressoraModem
MODELO DE COMPUTADOR
Primária Secundária
Modelo de computador
• Memória– Armazenamento de dados e
programas
Unidade deprocessamento
Memória
Entrada
Saída
•EndereçamentoIdentificação de onde as informações estão
•CapacidadeQuantidade de informação que pode ser armazenada
•VolatilidadeExigência de eletricidade
•VelocidadeTaxa de transferência dos dados para processamento
Tipos básicos
• Memória– 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
Nunca conte com isso!!!
INTRODUÇÃO• Hardware e periféricos executam operações Hardware e periféricos executam operações
sob controle da UCP (unidade central de sob controle da UCP (unidade central de processamento)processamento)
• UCP segue os comandos armazenados na UCP segue os comandos armazenados na memória primáriamemória primária
• O sistema operacional é o conjunto básico de O sistema operacional é o conjunto básico de comandos que gerenciam o computadorcomandos 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
Hardware Periféricos
S.O.
Aplicativos
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
Instruções em 0s e 1s
Linguagem de Programação
Tradutor ou Compilador
Algoritmo
• 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.
SOLUÇÃO ALGORITMICA
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ão-
algorí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
Aplicativos
Instruções em 0s e 1s
Linguagem de Programação
Tradutor ou Compilador
Algoritmo
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
• 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
Trabalho
• Voltando ao assunto de programação...
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
• Linguagem montadora– Mnemônicos para as instruções do
processador8AC416 MOV
ADDSUBJMP...
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
B = A
Copia o conteúdo da 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
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 carregadosArmazena o resultado em A0FF0A16
C = A + B
1001010000110101110011011100100100111101000011011110101000101001110010100011110100001101111010100010100111001010010101011010101000101001
...
Programação
Compiladores e Interpretadores
Aplicativos
Instruções em 0s e 1s
Linguagem de Programação
Tradutor ou Compilador
Algoritmo
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
• 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
- Somente executa se não houver erros (sintáticos) no programa
- 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• 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...
Bla...
Compiladores e Interpretadores• O compilador ouve
tudo uma única vez e cria um “livro” tradu-zido com o conteúdo da palestra do locutor. Assim, o trabalho do compilador ocorre so-mente uma vez e as coisas ficam bem mais rápidas...
Bla...
Compiladores e Interpretadores
Algoritmo
Programa em
uma linguagem
Tradução
ExecutávelC
C++Pascal
Cobol
JavaC#
PL/I
Lisp
Aplicativos
Aplicativos Instruções em 0s e 1s
Linguagem de Programação
Tradutor ou Compilador
Algoritmo
• 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 al-Khowarizmi.
– 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
Bases
1 1 1 1 0 1
• 1 1 1 1 0 1• 1 x 25 = 32• + • 1 x 24 = 16• + • 1 x 23 = 08• + • 1 x 22 = 04• + • 0 x 21 = 00• +• 1 x 20 = 01
Bases
32 + 16 + 08 + 04 + 01 = 61
• 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
• 0 + 0 = 0• 0 + 1 = 1• 1 + 0 = 1• 1 + 1 = 0 (e vai 1)
0 0 1 1 1 0 1 1
Bases
0
1
1
1
11
• 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
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)
Bases
11
• Código ASCII– Representação interna (computador)
de símbolos em binário• A = 0100 0001
• B = 0100 0010
• C = 0100 0011
• ...
Representação
• Vamos brincar um pouco de programar!
Motivação - programação
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 2Siga em frente significa que os sinais de trânsito devem ser respeita-dos.
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
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:
hgv 2
h – alturag – aceleração gravitacional
v0 = 0
hgv 2 hv 43,4
PROBLEMA SIMPLES 3
– Desenvolvimento do algoritmoalgoritmo quedaLivreinício Obtenha o valor da altura Calcule a velocidade Devolva como resposta a velocidade calculadafim
Esboço inicial
PROBLEMA SIMPLES 3
– Desenvolvimento do algoritmoalgoritmo quedaLivreinício Obtenha o valor para “altura” Calcule “velocidade” pela fórmula “ ” Devolva o valor de “velocidade”fim
Esboço mais refinado
alturavelocidade 43,4
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: realiní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
realizadosValor para h Valor
esperadoValor
calculado8,00 12,52 12,509,50 13,65 13,6213,73 16,40 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: realInício Leia (Altura) Velocidade 4,43 * Raiz(Altura) Escreva (Velocidade)Fim
Versão final
PROBLEMA SIMPLES 3
• Exemplo– Melhorias
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: realInício Leia (Altura) Velocidade 4,43 * Raiz(Altura) Escreva (Velocidade)Fim
Versão final
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: realinício leia (altura) escreva (4,43 * raiz(altura))fim