Introdução (Informal) à Programação Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2006/2007 26 de Fevereiro de 2007 Introdução (Informal) à Programação 1 Programa e Algoritmo • Um programa é um conjunto de instruções que aplicadas aos dados de entrada (input) e a outros intermédios auxiliares produz um resultado (output). input Programa output • Um programa é a materialização para uma dada máquina (computador e linguagem de programação) de um algoritmo. 26 de Fevereiro de 2007 Introdução (Informal) à Programação 2 Níveis de Abstração • Um programa pode ser entendido a vários níveis de abstracção (detalhe). • Quanto mais “inteligente/conhecedor” for o interlocutor, a mais alto nível podem ser dadas as instruções. Saia da sala Vá para Lisboa Saia do Edifício Dirija-se à portaria Vá para a paragem de autocarro Apanhe o autocarro .... 26 de Fevereiro de 2007 Introdução (Informal) à Programação 3 Níveis de Abstração Nível Máquina e Nível “Humano” • Um computador só executa instruções extremamente simples. Por exemplo: – Transferir palavras entre a memória e os registos – Processar dados nos registos (p.ex. soma binária) • Um programador humano raciocina a um nível mais alto de abstração. LDA 1005 CA+B LDB 22345A91 ADD A,B STA 1234FE88 26 de Fevereiro de 2007 Introdução (Informal) à Programação 4 Linguagens de Programação • As linguagens de programação permitem a um utilizador especificar um programa de uma forma semelhante ao algoritmo. • Um compilador/interpretador da linguagem deverá fazer a tradução das intruções de alto nível para as de nível máquina (por exemplo, manter os endereços de memória onde estão guardadas as variáveis). LDA 11A810A0 CA+B LDB 22345A91 ADD A,B STA 1234FE88 26 de Fevereiro de 2007 Introdução (Informal) à Programação 5 Linguagens de Programação (2) • Existem vários tipos de linguagens de programação baseadas em diferentes paradigmas (estilos) de programação. – Linguagens imperativas:Fortran, Pascal, C, Octave/MATLAB • Controle explícito da execução – Linguagens Orientadas por Objectos: Smalltalk, C++, Java • Controle implícito na manipulação dos dados – Linguagens Funcionais: LISP, Scheme • Baseadas na especificação de funções – Linguagens Lógicas: Prolog • Implementando a Lógica de Predicados 26 de Fevereiro de 2007 Introdução (Informal) à Programação 6 Programação Imperativa • No paradigma de programação imperativa, o programador especifica explicitamente o controle de execução, isto é, a sequenciação das instruções base. • Informalmente podemos considerar as seguintes instruções base, na especificação de algoritmos: – Afectação: A Expressão • A variável A toma o valor da Expressão – Entrada: Entra A • A variável A toma um valor dado do exterior (teclado, ficheiro) – Saída: Sai A • A variável A é passada para o exterior (monitor, ficheiro) 26 de Fevereiro de 2007 Introdução (Informal) à Programação 7 Controle de Execução • A ordem pela qual as várias instruções são executadas é controlada explicitamente por instruções de – Sequência – Execução Condicional – Execução Repetida • Sequência (“;”) – Exemplo: entra A ; % O valor de A é “entrado”. Seja A = 2 B A + 3 ; % A variável B toma o valor 2+3 = 5 C B * 2 ; % A variável C toma o valor 5*2 = 10 sai C ; % O valor de C é passado para o exterior 26 de Fevereiro de 2007 Introdução (Informal) à Programação 8 Controle de Execução • Execução condicional (“se”) – Exemplo: entra A ; se A > 0 então B A senão B - A fim se; sai B ; 26 de Fevereiro de 2007 % o valor de A é “entrado” % à variável B é atribuído % o valor absoluto % da variável A % o valor de B é comunicado Introdução (Informal) à Programação 9 Controle de Execução • Execução Repetida (“enquanto”) – Exemplo: entra A; B 1; enquanto A > 1 fazer B B * A; A A – 1; fim enquanto; sai B; 26 de Fevereiro de 2007 % o valor de A é “entrado” % o valor de B é inicializado a 1 % à variável B é atribuído % o factorial de A % o valor de B é comunicado Introdução (Informal) à Programação 10 Tipos de Dados Simples • Às variáveis usadas têm sido atribuídos valores inteiros. No entanto podem ser considerados outros valores nos algoritmos (e programas). • Os tipos de dados simples habituais são – Booleanos (Verdade/Falso ou 1/0) – Numéricos (Inteiros, Reais e Imaginários) – Não numéricos (caracteres) • Normalmente o contexto torna claro os tipos de dados pretendidos para as variáveis, mas as linguagens de programação típicas (não o Octave) requerem a declaração dos tipos de dados das variáveis. 26 de Fevereiro de 2007 Introdução (Informal) à Programação 11 Estruturas de Dados • Os dados simples podem ser agrupados em estruturas de dados mais complexas. • As estruturas mais vulgares correspondem a matrizes de dimensão arbitrária. • Um caso (vectores). importante são as matrizes unidimensionais • Como o nome indica (MATrix LABoratory), o sistema Octave /MATLAB tem um suporte muito completo dos tipos de dados matriz, permitindo a sua definição e as operações habituais. 26 de Fevereiro de 2007 Introdução (Informal) à Programação 12 Estruturas de Dados • Exemplo 1: 1 2 3 A = [1 2 3 ; 4 5 6 ; 7 8 9] A = 4 5 6 7 8 9 • Exemplo 2: 3 3 3 B = [3 3 3 ; 2 2 2 ; 1 1 0] B = 2 2 2 1 1 0 • Exemplo 3: 4 5 6 C = A + B C = 8 9 9 • Exemplo 4: D = 30 36 42 D = [1 2 3] * A 26 de Fevereiro de 2007 6 7 8 Introdução (Informal) à Programação 13 Algoritmo 1 – Raízes da equação do 2º grau entra A ; entra B ; % Ax2 + Bx + C = 0 entra C ; Disc B^2 – 4 * A * C; se Disc < 0 então sai ‘não há raízes reais’ senão D sqrt(Disc); se D = 0 então sai ‘ 2 raízes iguais’ R -B/(2*A); sai R senão R1 (-B + D)/(2*A); sai R1; R2 (-B - D)/(2*A); sai R2; fim se; fim se; 26 de Fevereiro de 2007 Introdução (Informal) à Programação 14 Algoritmo 2 – Cálculo da Raiz Quadrada X = sqrt(A) U * L = A L = A / U Assumindo Li X Ui, o intervalo [Li, Ui] pode ir sendo reduzido até convergir no valor de X = sqrt(A). L1 A U1 L1 L2 L3 26 de Fevereiro de 2007 U2 U1 Li = 2 / Ui U3 Introdução (Informal) à Programação 15 Algoritmo 2 – Cálculo da Raiz Quadrada Z = sqrt(X) X * X = 2 entra X ; entra P ; % P: precisão pretendida L= 2/U i Li Ui 1 0.04000 50.00000 2 0.07994 25.02000 U 10000000 ; L X / U ; enquanto U-L >= P fazer U (U + L)/2; L X / U; fim enquanto; Sai U ; 3 0.15936 12.54997 4 0.31473 6.35467 5 0.59975 3.33470 6 1.01666 1.96723 7 1.34053 1.49194 8 1.41219 1.41624 % U sqrt(X) 9 1.41421 1.41422 26 de Fevereiro de 2007 Introdução (Informal) à Programação 16 Algoritmo 3 – Maior Divisor Comum” A 56 B 182 X 182 126 70 56 42 28 14 Y 56 56 56 14 14 14 14 26 de Fevereiro de 2007 - = = = = = = = C 126 70 14 42 28 14 0 C X – Y novo X max(Y,C) novo Y min(Y,C) Introdução (Informal) à Programação 17 Algoritmo 3 – Maior Divisor Comum” entra A ; entra B ; Se A > B então X A; Y B; senão X B; Y A; fim se D A - B enquanto D > 0 fazer se D > Y então X D; senão X Y; Y D; fim se D X-Y; fim enquanto sai X 26 de Fevereiro de 2007 A 56 B 182 X 182 126 70 56 42 28 14 Y 56 56 56 14 14 14 14 Introdução (Informal) à Programação - = = = = = = = C 126 70 14 42 28 14 0 18