Programação Computacional Aula 2: Introdução -Algoritmos Profa. Madeleine Medrano [email protected] Roteiro Termos técnicos Algoritmos Conceito de Algoritmo Partes de um algoritmo Representação de um algoritmo Fluxograma Programas de computador Linguagens Linguagem Natural Linguagem de Maquina e Assembler Linguagem de Programação Pseudocódigo Alguns Termos Técnicos Hardware Componentes mecânicos e eletroeletrônicos que compõem o computador. Parte dura do computador. Software Sequencia de instruções e comandos que fazem o computador realizar determinada tarefa. Também chamados de programas de computador. Devem estar armazenados em algum tipo de memória. Exemplos: contabilidade, folha de pagamento, correção de provas. Alguns Termos Técnicos Periférico É qualquer componente do computador (hardware) que não seja a CPU. Exemplos: leitoras de disquete, CDs, monitores, teclados, vídeo, impressoras, etc. Alguns Termos Técnicos Sistema Operacional Coleção de programas que gerencia e aloca recursos de hardware e software. Exemplos de tarefas que um sistema operacional realiza são: leitura de dados pelo teclado, impressão de informações no monitor, gerenciamento da execução de vários programas pela CPU, gerenciamento da memória principal e da memória secundária para uso dos programas em execução, etc. Exemplos: Linux,Unix, Windows98, OS2, MS-DOS, etc. Alguns Termos Técnicos Linguagens de Programação Conjunto de instruções que podem ser interpretados e executados diretamente pela CPU de um dado computador. É específica para cada computador. Serve como meio de comunicação entre o individuo que deseja resolver um determinado problema e o computador Gerações de linguagens 1ª geração: linguagens em nível de maquina 2ª geração: linguagens de montagem (Assembly) 3ª geração: linguagens orientadas à aplicações 4ª geração: linguagens orientadas à modularização 5ª geração: linguagens de conhecimento 1ª Geração: Linguagens em nível de máquina Instrução 0010 0001 0110 1100 realiza a soma (código de operação 0010) do dado armazenado no registrador 0001, com o dado armazenado na posição de memória 108 (0110 1100) Programa: sequência de zeros e uns programação trabalhosa, cansativa e fortemente sujeita a erros •2ª geração: Linguagens de Montagem (Assembly) (Linguagem de Baixo Nível) Representação da linguagem de máquina através de códigos mnemônicos. Também é específica de cada máquina. minimizar as dificuldades da programação em notação binária Códigos de operação e endereços binários foram substituídos por mnemônicos¹ ADD R1, TOTAL R1 representa o registrador 1 e TOTAL é o nome atribuído ao endereço de memória 108 processamento requer tradução para linguagem de máquina ¹ Conjunto de técnicas utilizadas para auxiliar o processo de memorização 3ª geração: Linguagens Orientadas à Aplicação Surgiram na década de 60 FORTRAN, Pascal, COBOL O foco deixa de ser no processador / instruções Programa em C: if (a>b) printf (“O valor de A é maior que o valor de B”); else printf (“O valor de A é menor que o valor de B”); 4ª geração: Linguagens Orientadas à Módulos Esta geração é essencialmente o sinônimo para linguagens com abstração de dados. A maioria das linguagens desta geração focam na modularização e no encapsulamento Ada • 5ª geração: Linguagens de Conhecimento mecanismos da área de inteligência artificial Sistemas especialistas, processadores de língua natural e sistemas com bases de conhecimento Um sistema de 5ª geração armazena conhecimento complexo de modo que a máquina pode obter inferências a partir da informação codificada PROLOG, LISP http://www.pandorabots.com/pandora/talk?botid=f5d922d97e345 aa1 Níveis de linguagem linguagens de baixo nível primeira e segunda geração linguagens de alto nível terceira geração em diante Linguagem de alto nível Linguagem que independe do conjunto de instruções da linguagem de máquina do computador. Cada instrução de alto nível equivale a várias instruções da linguagem de máquina, sendo assim mais produtiva. Ex.: Pascal, C, Algol, BASIC, Lisp, Prolog, etc. PS: no site http://www2.latech.edu/~acm/HelloWorld.shtml, você pode encontrar o programa ‘Hello World’ implementado em dezenas de linguagens Tradutores de linguagens de programação Tradutores de linguagens de programação Tradutores de linguagens de programação Tradutor programa que recebe como entrada um programa escrito em uma linguagem de programação (dita linguagem fonte) e produz como resultado as instruções deste programa traduzidas para linguagem de máquina (chamada linguagem objeto). Se a linguagem do programa fonte é uma linguagem de montagem (Assembly) tradutor é chamado de Montador (Assembler) Tradutores que traduzem os programas escritos em linguagem de alto nível compiladores e os interpretadores Tradutores de linguagens de programação Compilador Tradutor de programas escritos em uma linguagem de programação de alto nível para programas em linguagem de máquina ou linguagem executável. pode ser executado uma ou mais vezes no futuro enquanto o código fonte do programa não for alterado, ele poderá ser executado sucessivas vezes, sem necessidade de nova compilação Compilador Interpretador É um programa que executa outros programas escritos em alguma linguagem de programação, instrução a instrução, enquanto ele vai sendo executado A execução de um programa interpretado é em geral mais lenta que o programa compilado. Por outro lado, o uso de programas interpretados permite que trechos de códigos possam ser trocados por novos facilmente, fazendo com que o programa fonte possa mudar durante sua execução. Este é um dos grandes motivos de se usar programas interpretados em sistemas especialistas. Duas linguagens para as quais podemos encontrar interpretadores são Lisp e Prolog. Interpretador Cada vez que um programa interpretado tiver que ser re-executado, todo o processo de interpretação deverá ser refeito. Independentemente de ter havido ou não modificações no código fonte do programa desde sua última execução Software básico Utilitários Softwares de apoio à solução de problemas de disco, memória, etc Desfragmentador, limpeza de disco... Compactadores e descompactadores de arquivos, programas anti-virus Vírus Programas capazes de se instalar de forma clandestina nos sistemas Podem adotar procedimentos perturbadores » fazer uma bolinha pular na tela » declaradamente destrutivos (apagar informações) Algoritmo É a descrição de uma sequencia finita de ações para realizar alguma tarefa. Nesta aula estaremos interessados em algoritmos computacionais, que escrevem uma sequencia de ações que podem ser traduzidos para alguma linguagem de programação Algoritmos Algoritmos usam dados e produzem um resultado. - uma sequência de instruções para solucionar um problema Um passo de um algoritmo: Lê dados armazenados no computador. Executa operações matemáticas e lógicas sobre dados. Armazena resultados. Algoritmo: Bolo de Chocolate Aqueça o forno a 180o C Unte uma forma redonda Numa taça Bata até ficar cremoso Junte 75g de manteiga 250g de açúcar 4ovos, um a um 100g de chocolate derretido Adicione aos poucos 250g de farinha peneirada Ponha a massa na forma Leve ao forno durante 40 minutos Pseudo-código e Fluxograma Ex.: imprimir maior valor Início Leia A; Leia B; Se A > B então Imprima A; Senão Imprima B; Fim Se Leia A e B Não A > B? Sim A recebe B Imprima A Algoritmo de Euclides Um exemplo é o algoritmo de Euclides para calcular o máximo divisor comum de dois números inteiros positivos. Passo 1: Adote x = m e y = n; Passo 2: Adote r =(resto de x dividido por y); Passo 3: Adote novos valores x = y e y = r; Passo 4: Se r é diferente de 0, volte ao passo 2; senão pare com a resposta x. Algoritmo de Euclides Estilizado Passo1: Dados: m e n. Passo2: x ← m. Passo3: y ← n. Passo4: Repita Passo4.1: r ← resto(x, y); Passo4.2: x ← y; Passo4.3: y ← r; Passo4.4: Até que r = 0. Passo5: Imprima o resultado x. Um programa em C Algoritmo de Euclides em Linguagem C Fim da apresentação Obrigada pela atenção