PROGRAMAÇÃO Engª Mecânica 2007-2008 Sérgio Rodrigues sergio.rodrigues@ipt.pt OBJECTIVOS DA CADEIRA Fornecer aos alunos os conhecimentos básicos de algoritmia, capacitando-os para o desenho e documentação dos algoritmos de suporte a programas informáticos e/ou procedimentos genéricos que venham a ser necessários. Adicionalmente os alunos ficarão capacitados com conhecimentos gerais de programação conducentes à implementação de algoritmos simples recorrendo à linguagem de programação. Aprendizagem e utilização do ambiente Matlab para apoio prático, ao programa da cadeira. 1
PROGRAMA DA CADEIRA Algoritmia Identificação e definição do problema Estruturação e especialização do algoritmo Representação gráfica de algoritmos Fluxogramas Pseudo-linguagem Outras Representações Noções Matemáticas Bases de representação numérica: decimal, binária, octal e hexadecimal Conversões entre bases Operações aritméticas de soma e diminuição na base binária Operações lógicas de AND, OR e XOR na base binária PROGRAMA DA CADEIRA Paradigmas da Programação Estrutura básica de programa Código fonte, Compilação e Linkagem Tipos de dados, operadores e expressões Instruções de controlo de fluxo Tipos de dados derivados Funções e procedimentos Regras de alcance dos nomes e tempo de vida dos objectos Indentação do código fonte Normalização das nomenclaturas utilizadas 2
PROGRAMA DA CADEIRA Ambiente Aplicacional Matlab Ambiente de Trabalho Matlab Variáveis Funções matemáticas elementares Matrizes Operadores Gráficos 2D e 3D Elementos de Controlo de Fluxo Tratamento de Erros Strings e Funções Ficheiros-M BIBLIOGRAFIA Disponíveis na sessão de cópias Apontamentos da cadeira; Carlos Mora, 2006/2007 Frequências e exames efectuados nos anos anteriores Disponível na Biblioteca do IPT-ESTA Dirceu Douglas Salvetti, Lisbete Madsen Barbosa, Algoritmos, Makron Books Sara Baase, Allen Van Gelder, Computer Algorithms Introduction to Design & Analysis, Addison-Wesley Vagner Morais e Cláudio Vieira, MATLAB 7&6, FCA Editora 3
SISTEMAS DE INFORMAÇÃO Sistema de Informação é um sistema que reúne, guarda, processa e faculta informação relevante para a organização (...), de modo que a informação é acessível e útil para aqueles que a querem utilizar, incluíndo gestores, funcionários, clientes, (...). Um Sistema de Informação é um sistema de actividade humana (social) que pode envolver ou não, a utilização de computadores. [Buckingham, et al. 1978] Sistema de Informação é uma combinação de procedimentos, informação, pessoas e Tecnologias de Informação, organizadas para o alcance de objectivos de uma organização. [Alter 1992] TI-TECNOLOGIAS DE INFORMAÇÃO Tecnologias de Informação, são o conjunto de equipamentos e suportes lógicos (hardware e software) que permitem executar tarefas como aquisição, transmissão, armazenamento, recuperação e exposição de dados. Exemplos de T I Hardware Software de sistema Software aplicacional Comunicações Ferramentas de desenvolvimento [Alter 1992] 4
DADOS VS. INFORMAÇÃO Dados, são elementos primitivos, com os quais e através de algum tipo de processamento, se obtém a informação. DADOS PROCESSAMENTO INFORMAÇÃO GESTÃO DO SISTEMA DE INFORMAÇÃO DADOS T I INFORMAÇÃO GESTÃO DA INFORMAÇÃO OUTROS RECURSOS GESTÃO DO SISTEMA DE INFORMAÇÃO 5
GESTÃO DO SISTEMA DE INFORMAÇÃO Gestão de Sistemas de Informação é a gestão do recurso informação e de todos os recursos envolvidos no planeamento, desenvolvimento, exploração e manutenção do SI. [Amaral, Varajão 2000] Investir em TI não significa investir nos Sistemas de Informação ARQUITECTURA GERAL DE UM COMPUTADOR 6
ORGANIZAÇÃO DE UM COMPUTADOR ENTRADA CPU MEMÓRIA SAÍDA Memória Programas Problemas Computacionais TIPOS DE DADOS Tipos Abstractos de Dados Um tipo abstracto de dados, é uma abstracção de uma Estrutura de Dados associado a operações e relações entre os varios elementos e dando enfoque ao seu comportamento em detrimento de qualquer detalhe de representação (e.g.: Pilha ou Stack) Tipos de Dados Programas vs Linguagens de Programação Cada Linguagem tem o seu tipo de Dados (Valores, Operações e Relações) 7
ESTRUTURAS DE DADOS Estruturas de Dados Localizações da memória onde os dados são armazenados. São organizadas conforme o tipo de dados disponiveis na LP, de forma a representar fielmente os tipos abstractos de dados em causa. TÉCNICAS DE PROGRAMAÇÃO Metodologia Genérica Análise do Problema Projecto do Programa: Algoritmo e estrutura de dados Implementação e teste do programa Verificação/Execução do programa 8
ALGORITMOS Algoritmo é uma sequência ordenada e finita de operações bem definidas, que partido de informação fornecida previamente, produz, num tempo finito, um resultado que é a solução de um determinado problema, ou em alternativa a indicação de que a solução não pode ser obtida. Caracteristicas Principais [Horowitz e Sahni 82]: Limitação Definição Entradas Saídas Eficiencia ALGORITMOS-ESTRUTURAS LÓGICAS Um algoritmo pode ser constítuido por qualquer combinação das seguintes estruturas lógicas: Sequêncial Uma acção executa a seguir à outra numa ordem pré estabelecida Repetitiva A execução de uma ou mais acções repete-se cíclicamente de forma finita Selectiva Uma ou mais acções são executadas em detrimento de uma ou mais conjuntos de acções. 9
FORMAS DE Vantagens De universal entendimento Desvantagens Pode gerar Ambiguidades Exemplo: Máquina de calcular simples para a execução das operações de x, :, + e Verificar se a máquina está ligada, senão ligar Limpar memória do visor Recolher 1º operando Recolher operação Recolher 2º operando Efectuar cálculo Apresentar Resultado FORMAS DE Vantagens Visual e Simples Desvantagens Inadequado para problemas complexos 10
FORMAS DE Primitivas: Início de fluxograma Acção Acção Estado com espera Estado sem espera N S Condição Decisão Fluxo Fim de fluxograma n Elemento de ligação FORMAS DE Exemplo: Ex.: Implentar calculadora com as operações +, -, /, x 1. Diagrama de Chapin 2. Pseudo-Código Recolher 1º Operando Recolher Operação Recolher 2º Operando Efectuar Cálculo Apres. Resultado 11
EXERCÍCIO: FACTORIAL Desenvolver um programa que dado um determinado número calcule o seu factorial F = N! = N x (N-1) x (N-2) x... x(n-(n-1) FORMAS DE (Nassi-Schneiderman) 1. Pseudo-Código Vantagens Visual e simples, pelo que facilita o entendimento global do algoritmo Facilita a representação do encapsulamento e da recursividade em relação ao fluxograma Desvantagens Inadequado para problemas complexos Ocupa muito espaço. 12
FORMAS DE Primitivas (mais comuns): Processo Decisão Iteração FORMAS DE Primitivas (mais comuns): Iteração Decisão Múltipla 13
FORMAS DE Exemplo: Ligada? SIM NÃO Ligar Limpar Visor Recolher 1º Operando Recolher Operação Recolher 2º Operando Efectuar Cálculo Apresentar Resultado FORMAS DE Vantagens Permite a representação de um algoritmo, tanto ao seu nível mais abstracto ou ao seu nível mais específico. Simplicidade, Legibilidade e Exactidão. Desvantagens Pode esconder os problemas de eficiência face a linguagem de mais baixo nível. 14
FORMAS DE Primitivas: SEQUÊNCIAIS START Identificação do ponto inicial do algoritmo END Identificação do ponto final do algoritmo INPUT <string>, <variável> Primitiva para recolha de dados do utilizador OUTPUT <string>, <variável> Primitiva para apresentação de dados ao utilizador <variável> <expressão> Atribuição do resultado da expressão à variável indicada FORMAS DE Primitivas (continuação): SELECTIVAS IF <condição> THEN <instruções a executar se condição verdadeira> ELSE <instruções a executar se condição falsa> END IF 15
FORMAS DE Primitivas (continuação): REPETITIVAS FOR <valor inicial> TO <valor controlo> [STEP <incremento>] <instruções a executar enquanto não for atingida a condição limite> END FOR WHILE <condição> <instruções a executar enquanto a condição for verdadeira> END WHILE DO <instruções a executar enquanto a condição for verdadeira> WHILE <condição> FORMAS DE Primitivas (continuação): FUNÇÕES FUNCTION <nome da função> (parâmetros da função[,]) <instruções da função> [RETURN <variável da função>] END FUNCTION CALL <nome da função> (parâmetros da função) 16
FORMAS DE Primitivas (continuação): DECLARAÇÕES VAR <tipo da variável> <nome da variável> [,] <nome da variável> CONST <tipo da const.> <nome da const.> [,] <nome da const.> STRUCT <struct name> <tipo da variável> <nome da variável> [,] <tipo da variável> <nome da variável> END STRUCT FORMAS DE Ex. Implentar calculadora com as operações +, -, /, x, n 2 e n FUNCTION EfectuarCalculo(Op1, Oper, Op2) START VAR Op1 DECIMAL (10,2) Op2 DECIMAL (10,2) Oper Char R DECIMAL (10,2) OUTPUT Introduza o 1º operando INPUT Op1 OUTPUT Introduza o operador INPUT Oper IF Oper necessita 2º operando THEN OUTPUT Introduza o 2º operando INPUT Op2 R = Op1 Oper Op2 ELSE R = Op1 Oper END IF RETURN R END FUNCTION 17
FORMAS DE (...) CALL EfectuarCalculo (Op1, Oper, Op2) OUTPUT O RES. da operação é:, R (...) Ex.: Chamar função EfectuarCalculo OUTRAS NOTAÇÕES for i := 1,..., n do for j := 1,..., n do cij := 0 for k := 1,..., n do cij := cij + aik bkj Szwarcfiter e Markenzon ( [SM94] ) for i 1 até n do for j 1 até n do cij 0 for k 1 até n do cij cij + aik bkj Terada ( [TER91] ) 18
OUTRAS NOTAÇÕES for i 1 to n by 1 do for j 1 to n by 1 do c(i,j) 0 for k 1 to n by 1 do c(i,j) c(i,j) + a(i,k) b(k,j) 1 set i 1 2 set j 1 set c[i,j] 0 3 set k 1 c[i,j] c[i,j] + a[i,k] b[ if k <= n then go to 3 if j <= n then go to 2 if i <= n then go to 1 Horowitz e Sahni ( [HS82] ) Knuth ( [KNU73] ) EXERCÍCIOS ESTRUTURAS DE REPETIÇÃO COM VARIÁVEL DE CONTROLO < FOR > Somatório de Inteiros Calcular a soma dos n primeiros números inteiros pares positivos n = 2 => S = 2 + 4 = 6 n = 3 => S = 2 + 4 + 6 = 12 n = 4 => S = 2 + 4 + 6 + 8 = 20 n = n => S = 2 + 4 + 6 +... + n = 2i n i 1 19
FLUXOGRAMA: SOMATÓRIO DE INTEIROS Esboço do Algoritmo 1. Recolher número de inteiros pares a somar 2. Repetir n vezes calcular número par acumular soma 3. Apresentar resultado (Soma) PSEUDO CÓDIGO: SOMATÓRIO DE INTEIROS PARES START VAR INT i, S INPUT Introduza o número de inteiros que pretende somar, n END S 0 FOR i 1 TO n S = S + 2 x i END FOR OUTPUT O somatório dos, n, primeiros inteiros pares positivos é:, S 20