Programação I Apresentação Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br
Referências JUNIOR, D. P.; NAKAMITI, G. S.; ENGELBRECHT, A. de M. E.; BIANCHI, F. Algoritmos e Programação de Computadores. Editora Campus/Elsevier, 2012.
Referências MEDINA, M.; FERTIG, C. Algoritmos e programação: teoria e prática. São Paulo: Novatec, 2006.
Referências SCHILDT, Herbert. C Completo e Total. São Paulo: Makron Books, 1996.
5 Vamos começar?
6 O que é um algoritmo?
7 O que é um algoritmo? Sequência finita de operações que, quando executadas na ordem estabelecida, atingem um objetivo determinado em um tempo finito.
8 O que é um algoritmo? Sequência finita de operações que, quando executadas na ordem estabelecida, atingem um objetivo determinado em um tempo finito. Um algoritmo deve atender aos seguintes requisitos: Posuir um estado inicial; Consistir de uma sequência lógica finita de ações claras e precisas; Produzir dados de saída corretos; Possuir estado final previsível (deve sempre terminar).
9 Podemos definir algoritmos para resolver problemas do dia a dia; Mas, podemos também desenvolver algoritmos que podem ser transformados em programas executados em computadores.
10 Podemos definir algoritmos para resolver problemas do dia a dia; Mas, podemos também desenvolver algoritmos que podem ser transformados em programas executados em computadores. Objetivo da disciplina
11 Para que um algoritmo possa ser executado por um computador é necessário identificar quais as ações que essa máquina pode executar;
12 Para que um algoritmo possa ser executado por um computador é necessário identificar quais as ações que essa máquina pode executar; Exemplo: Algoritmo média Var nota1, nota2, media : real Inicio leia(nota1, nota2) media := (nota1 + nota2)/2 escreva(media) fimalgoritmo
13 Analisando o exemplo, identificamos ações que podem ser executadas por um computador: Obter um dado de uma unidade de entrada de dados, também chamada de leitura de um dado; Resolver expressões aritméticas e lógicas; Colocar o resultado de uma expressão em uma variável. Informar um resultado através de uma unidade de saída, também chamada de escrita de uma informação ou saída de um dado;
14 Essas ações são denominadas instruções ou comandos Obter um dado de uma unidade de entrada de dados, também chamada de leitura de um dado; Resolver expressões aritméticas e lógicas; Colocar o resultado de uma expressão em uma variável. Informar um resultado através de uma unidade de saída, também chamada de escrita de uma informação ou saída de um dado;
15 Formas de expressar um algoritmo Linguagem textual Pseudolinguagem fluxograma
16 Linguagem textual. Utiliza a linguagem natural. Exemplo: soma dois valores 1. Obter os dois valores 2. Realizar a soma 3. Informar o resultado
17 Pseudolinguagem. Semelhante a uma linguagem de programação, sem entrar em detalhes como, por exemplo, formatação de informações de entrada e de saída. Exemplo: soma dois valores Algoritmo Soma Entradas: valor1, valor2 (real) Saídas: soma (real) Inicio Fim ler(valor1, valor2) soma valor1 + valor2 escrever (soma)
18 Fluxograma. Representação gráfica que possibilita uma interpretação visual do algoritmo. Não é adequada para algoritmos muito extensos. Exemplo: soma dois valores
19 Dois aspectos devem ser analisados quando se constrói um algoritmo para ser executado em um computador: Eficácia (corretude). Um algoritmo deve realizar corretamente a tarefa para a qual foi construído. Eficiência. A solução de um problema através de um algoritmo não é necessariamente única. Pode-se calcular a forma mais eficiente com base em dois critérios: tempo de execução e espaço de memória ocupado. Exemplos: Algoritmos de Busca e Algoritmos de Ordenação
Introdução Programa Formalização de um algoritmo em uma determinada linguagem de programação, segundo suas regras de sintaxe e semântica, de forma que o computador possa entender a sequência de ações. Linguagem de programação Conjunto de símbolos (comandos, identificadores, operadores, etc.) e regras que permitem a construção de sentenças que descrevem de forma precisa ações compreensíveis e executáveis para o computador. É definida por uma notação formal, através de dois componentes: sintaxe e semântica.
Introdução Sintaxe Estabelece a forma como as instruções da linguagem são escritas, mas sem especificar seu significado. Conjunto de regras que determinam que construções estão corretas e quais não estão. Por exemplo, na linguagem C, os blocos de códigos são limitados por {}, enquanto em Pascal, são limitados por BEGIN END.
Introdução Semântica Complementa a sintaxe. Corresponde à descrição do significado das instruções válidas de uma linguagem. Por exemplo, a sintaxe da instrução IF (se) da linguagem PASCAL é: IF <condição> THEN BEGIN END; <instruções> Sua semântica é: se o valor da expressão for verdadeira, as instruções incorporadas serão executadas pelo programa.
Introdução Diferença entre SINTAXE e SEMÂNTICA Sintaxe: descreve as estruturas de uma linguagem; Semântica: descreve o significado dessas estruturas.
Introdução Tipos de linguagens
25 Etapas de construção de um programa Programar não é uma atividade trivial, pelo contrário, requer muito cuidado e atenção; A dificuldade em gerar bons programas levou à definição de técnicas específicas que iniciam frequentemente com a construção de um algoritmo. A forma mais simples de garantir a qualidade de um programa é construí-lo seguindo uma série de etapas.
26 Etapas de construção de um programa Análise detalhada do problema. Identifica os aspectos que são relevantes para a solução do problema. Especificação dos requisitos do problema. Identifica e especifica os resultados que deverão ser produzidos (saídas) e os dados que serão necessários para a execução da tarfefa (entradas). Construção de um algoritmo. Projeto de um algoritmo que solucione o problema. Normalmente existem diversas soluções possíveis, esta etapa determina qual será adotada.
27 Etapas de construção de um programa Validação do algoritmo. Nessa etapa é feita a validação lógica do algoritmo, através de testes de mesa, simulando sua execução com dados virtuais. O objetivo é verificar se a solução proposta atinge o objetivo. Codificação do programa. Tradução do algorimo para uma linguagem de programação.
28 Etapas de construção de um programa Verificação do programa. Compilação, teste e depuração do programa gerado. Os mesmos valores utilizados no teste de mesa podem ser utilizados para testar o programa. Manutenção. Essa etapa acompanha o tempo de vida útil do programa, após ele ser disponibilizado para os usuários. A finalidade é corrigir eventuais erros detectados e/ou adicionar novas funcionalidades.
29 Etapas de construção de um programa
30 Paradigmas de programação Paradigma. Modelo ou padrão de como uma realidade é entendida e de como se interage com essa realidade. Paradigma de programação. Forma como a solução está estruturada e será executada no programa gerado, incluindo técnicas e conceitos específicos, bem como os recursos disponibilizados.
31 Principais paradigmas das linguagens de programação Imperativo ou procedural. Funcional. Lógico. Orientação a objetos.
32 Imperativo ou procedural. O programa é composto por uma sequência de comandos a serem executados pelo computador em uma determinada ordem. Ex.: Pascal, C, Fortran, Cobol, Basic; Funcional. O programa é composto pela declaração de funções que transformam a(s) entrada(s) na(s) saída(s) desejada(a). Ex.: Lisp, Haskell;
33 Lógico. Utilza a avaliação de condições lógicas como base para a escrita dos programas. Um programa é composto por regras que disparam ações a partir da identificação de premissas. Ex.: Prolog; Orientação a objetos. O mundo real é representado por meio de classes de objetos e das operações que podem ser realizadas sobre eles, as quais definem seu comportamento. Conceitos básicos adotados nesse paradigma: herança e polimorfismo. Ex.: Java, C++, C#, Smalltalk.
34 Nessa disciplina será utilizado o paradigma imperativo ou procedural, pelas seguintes razões: O paradigma imperativo permite representar de uma forma intuitiva os problemas do dia a dia, que geralmente são executados através de sequências de ações; Historicamente, os primeiros programas foram desenvolvidos em linguagens imperativas, sendo esse paradigma dominante e bem estabelecido; Existe um grande número de algoritmos e de sistemas implementados em linguagens que seguem esse paradigma, os quais podem ser utilizados como base para o desenvolvimento de novos programas.
35 Programação estuturada A programação estruturada pode ser vista como um subconjunto do paradigma imperativo. Princípio da programação estruturada O fluxo do programa deve ser estruturado, devendo esse fluxo ficar evidente a partir da estrutura sintática do programa. A estruturação deve ser garantida em dois níveis: Nível de comandos Nível de unidades.
36 Nível de comandos O programa deve ter um único ponto de entrada e um único ponto de saída; Deve exisitir de 1 a n caminhos definidos do princípio ate o fim do programa, sendo todas as instruções executáveis; Não podem aparecer loops infinitos de alguns comandos;
37 Nível de comandos O programa deve ser composto por blocos elementares de instruções (comandos), interconectados apenas pelos três fluxos de execução: sequência, seleção e iteração; Cada bloco elementar deve ser delimitado por um ponto de início e por um ponto de término. É totalmente proibido o uso de desvios incondicionais, implementado pelo comando GOTO (vá para).
38 Nível de comandos
39 Nível de unidades A programação estruturada baseia-se na ideia proposta em 1972 por Dijkstra: A arte de programar consiste na arte de organizar e dominar a complexidade dos sistemas. Deve-se enfatizar a utilização de unidades separadas de programas (módulos), que são ativadas através de comandos especiais; Deve-se utilizar a tática de dividir para conquistar ;
40 Nível de unidades O programa deve ser feito de forma descendente, decompondo o problema inicial em módulos ou estruturas hierárquicas (programação modular).
41 Em resumo, a programação estruturada consiste em: Uso de um número muito limitado de estruturas de controle; Desenvolvimento de algoritmos por fases ou refinamentos sucessivos; Decomposição do algoritmo total em módulos.
42 A programação estruturada visa à: Corretude da solução desenvolvida; Simplicidade da solução, garantindo fácil compreensão do código; Fácil manutenção dos programas, inclusive por outras pessoas além do desenvolvedor inicial.
43 Nessa disciplina será utilizada a programação estruturada, incentivando a modularização, de forma a garantir a qualidade dos programas construídos;
Obrigado!!!