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 cor-respondente 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 Área que estuda os computadores e o que eles podem fazer.
INTRODUÇÃO Programação software Equipamento hardware
INTRODUÇÃO Hardware Software São os equipamentos e dispositivos eletrônicos, elétricos e mecânicos que compõem o computador Software 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ÇÃO Programação software hardware
INTRODUÇÃO processamento Entrada Saída
INTRODUÇÃO Exemplo: Cálculo da média entre 3 números Entradas: ??? Saídas: ??? 20 10 20 30
Unidade de processamento INTRODUÇÃO Teclado Mouse Modem MODELO DE COMPUTADOR Pentium Athlon Motorola + Co-proces-sador Unidade de processamento Entrada Saída Memória Monitor Impressora Modem Primária Secundária
Unidade de processamento Modelo de computador Endereçamento Identificação de onde as informações estão Capacidade Quantidade de informação que pode ser armazenada Volatilidade Exigência de eletricidade Velocidade Taxa de transferência dos dados para processamento Memória Armazenamento de dados e programas Unidade de processamento Memória Entrada Saída
Tipos básicos Memória Não existem posições vazias Nunca conte com isso!!! 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
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 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 Algoritmo Aplicativos Linguagem de Programação Instruções em 0s e 1s Linguagem de Programação Tradutor ou Compilador Algoritmo Aplicativos
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 Remoção de ambiguidade 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 Algoritmo Aplicativos Linguagem de Programação Instruções em 0s e 1s Linguagem de Programação Tradutor ou Compilador Algoritmo Aplicativos
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: Depois: Trabalhos: 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 Vantagens 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
Copia o conteúdo da posição de memória chamada A para B 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 posição de memória chamada A para B B = A
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 10010100 00110101 11001101 11001001 00111101 00001101 11101010 00101001 11001010 01010101 10101010 ... 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
Compiladores e Interpretadores Instruções em 0s e 1s Linguagem de Programação Tradutor ou Compilador Algoritmo Aplicativos
Compiladores e Interpretadores 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 Tradução Algoritmo Programa em uma linguagem Lisp C# Java Executável C C++ Pascal PL/I Cobol
Aplicativos Algoritmo Linguagem de Programação Tradutor ou Compilador Instruções em 0s e 1s Linguagem de Programação Tradutor ou Compilador Algoritmo Aplicativos
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 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 61 2 1 30 2 0 15 2 1 7 2 1 3 2 1 1 2 1 0 1 1 1 1 0 1
Bases 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 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 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 1 1 1 1 1
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 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) 1 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 DDDDD
PROBLEMA SIMPLES SOLUÇÃO 2 D2 F3 D3 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 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 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: h – altura g – aceleração gravitacional
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
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
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 { Calcula a velocidade de uma partícula ao atingir o solo após ser largada do repouso a uma dada altura } declare Altura: real início leia (altura) escreva (4,43 * raiz(altura)) fim 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