• Nenhum resultado encontrado

Bibliografia. Teórico-práticas, Marta Pascoal: 3 a feira ( ) e 5 a feira ( ), sala Gomes Teixeira

N/A
N/A
Protected

Academic year: 2021

Share "Bibliografia. Teórico-práticas, Marta Pascoal: 3 a feira ( ) e 5 a feira ( ), sala Gomes Teixeira"

Copied!
69
0
0

Texto

(1)

M´etodos de Programa¸c˜ao 1

M´etodos de Programa¸c˜ao 1

Marta Pascoal

Departamento de Matem´atica, Universidade de Coimbra

Ano lectivo 2010/11

M´etodos de Programa¸c˜ao 1

Funcionamento da disciplina

Hor´ario

◮ Te´orico-pr´aticas, Marta Pascoal: 3a feira (8.30-10.00) e 5a feira

(8.30-10.00), sala Gomes Teixeira

◮ Pr´aticas:

P1, Marta Pascoal: 2a feira (14.30-16.00), sala 3.4 ou 0.2, e 5a feira

(10.00-11.30), sala 2.2 ou 0.2

P2, Marta Pascoal: 2a feira (16.00-17.30), sala 3.4 ou 0.2, e 5a feira

(11.30-13.00), sala 2.2 ou 0.2

P3, Giuseppe Romanazzi: 2a feira (14.30-16.00), sala 2.2 ou 0.4, e

5a feira (10.00-11.30), sala 3.1 ou 0.4

P4, Giuseppe Romanazzi: 2a feira (16.00-17.30), sala 2.2 ou 0.4, e

5a feira (16.30-18.00), sala 3.1 ou 0.2 ◮ Atendimento:

2a feira (17.30-18.30) e 3afeira (10.00-11.00), Gab. 4.4, DM

3a (16.00-17.00), Sala E.6.1, DEEC

M´etodos de Programa¸c˜ao 1

Funcionamento da disciplina

Bibliografia

Base:

◮ Introdu¸c˜ao `a Programa¸c˜ao usando o Pascal, J. Pav˜ao Martins,

McGraw-Hill, Lisboa, 1994

◮ Introduction to Computer Science - an Algorithmic Approach, J.

Tremblay, J. DeDourek, R. Bunt, Pascal Edition, McGraw-Hill, 1989 Complementar:

◮ Introduction to Pascal, J. Welsh, J. Elder, MPrentice-Hall Inc, 1982 ◮ Introdu¸c˜ao `a programa¸c˜ao em Pascal, W. Findlay, D. A. Watt, Ed.

CETOP, Mem Martins, 1981

◮ How to solve it by computer, R. G. Dromey, Prentice-Hall, 1982 ◮ Programa¸c˜ao Sistem´atica em Pascal, N. Wirth, Campus, 1987 ◮ Algorithms + Data structures = Programs, N. Wirth, Prentice-Hall,

1976 (ou Algoritmos e Estruturas de Dados, 1986)

M´etodos de Programa¸c˜ao 1

Funcionamento da disciplina

Avalia¸c˜ao

◮ Avalia¸c˜aopor exame: nota final dada exclusivamente pelo resultado

do exame.

Exame de ´epoca normal: 17 de Junho de 2011 `as 14.30 Exame de ´epoca de recurso: 5 de Julho de 2011 `as 14.30

◮ Avalia¸c˜aocont´ınua(pelo menos 75% de presen¸cas nas aulas

te´orico-pr´aticas, 75% de presen¸cas nas aulas pr´aticas e n˜ao perturbar o regular funcionamento das aulas):

4NF + NT 5

onde NF = (NF1+ NF2)/2 ´e a m´edia das notas em duas

frequˆencias, e NT ´e a m´edia das notas de trabalhos resolvidos nas aulas pr´aticas (0 ≤ NF , NT ≤ 20).

Em cada componente deve haver um m´ınimo de 7 valores (em 20). Frequˆencias: 7 de Abril de 2011 e de 31 Maio de 2011

(2)

◮ No¸c˜oes Gerais

◮ Estrutura e funcionamento b´asicos dum computador digital ◮ Representa¸c˜ao de informa¸c˜ao

◮ Metodologia da Programa¸c˜ao

◮ Conceitos Fundamentais de Programa¸c˜ao Imperativa

◮ Introdu¸c˜ao `a linguagem Pascal

◮ Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes ◮ Express˜oes aritm´eticas e l´ogicas

◮ Instru¸c˜oes

◮ Estruturas de controlo ◮ Instru¸c˜oes de selec¸c˜ao ◮ Instru¸c˜oes de repeti¸c˜ao ◮ Tabelas ◮ Metodologia da Programa¸c˜ao ◮ Subprogramas ◮ Recursividade ◮ Registos e conjuntos

Introdu¸c˜ao

◮ Computador

O que faz c´alculos (pessoa ou m´aquina).

Aparelho electr´onico usado para processar, guardar e tornar acess´ıvel informa¸c˜ao de variados tipos.

(in “Priberam Inform´atica – L´ıngua Portuguesa On-Line”, acedido em 2011-01-25)

Ferramenta que nos permite executar tarefas de forma mais eficiente, r´apida e precisa do que manualmente.

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Introdu¸c˜ao

Introdu¸c˜ao

◮ Programa¸c˜ao

Planifica¸c˜ao, projecto e execu¸c˜ao de uma tarefa.

◮ Programa¸c˜ao de computador

Processo de planificar uma sequˆencia de instru¸c˜oes para um computador seguir.

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Introdu¸c˜ao

Introdu¸c˜ao

Fase de resolu¸c˜ao de um problema:

◮ Analisar, compreender e definir o problema.

◮ Descrever uma solu¸c˜ao geral, isto ´e, uma sequˆencia de passos que

possam ser usados para resolver o problema (algoritmo).

◮ Seguir os passos indicados everificarse o m´etodo encontrado resolve

(3)

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Introdu¸c˜ao

Introdu¸c˜ao

Fase de implementa¸c˜ao:

◮ Traduzir o algoritmo num c´odigo (linguagem de programa¸c˜ao). ◮ Garantir que o computador segue as instru¸c˜oes e verificar a

correc¸c˜aodas respostas dadas.

◮ Utiliza¸c˜aodo programa.

Algoritmo:

Sequˆencia de passos para resolver um problema em tempo finito.

Linguagem de programa¸c˜ao (Pascal):

Conjunto de regras, s´ımbolos e palavras especiais, utilizadas para construir um programa, com base num algoritmo,

suficientemente “simples” para poderem ser entendidas por um computador.

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Introdu¸c˜ao

Introdu¸c˜ao

Documenta¸c˜ao:

A escrita do texto do programa deve ser cuidada e acompanhada de coment´arios que o tornem mais f´acil de compreender e modificar por outros.

Manuten¸c˜ao:

A modifica¸c˜ao dum programa, mesmo depois de conclu´ıdo, por forma a incluir outras melhorias ou a corrigir erros.

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Exemplos

Exemplos

1. program exemplo1(output); begin writeln(’ola’); end.

2. program exemplo2(input, output); var x, y: integer; begin readln(x); readln(y); writeln(x+y); end. M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Exemplos

Exemplos

3. program exemplo3(input, output); var x, y: integer; begin writeln(’x?’); readln(x); writeln(’y?’); readln(y); writeln(x, ’+’, y, ’=’, x+y); end.

(4)

Exemplos

4. program exemplo4(input, output); var x, y: integer; begin writeln(’x?’); readln(x); if x < 0 then y := -x else y := x;

writeln(’O valor absoluto de ’, x, ’e’, y); end.

Exemplos

5. program exemplo5(input, output); var i, n: integer; aux: real; begin aux := 0; writeln(’n?’); readln(n); for i:=1 to n do

aux := aux + 1/sqr(i); writeln(’Resultado: ’, aux); end.

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Estrutura e funcionamento b´asicos dum computador digital

Modelo de Von-Neumann

Unidade central de processamento

Dispositivo de Unidade aritm´etica e l´ogica Dispositivo de

entrada Unidade de controlo sa´ıda

Mem´oria central

Neste modelo um computador digital tem 3 unidades principais:

◮ Unidade Central de Processamento (CPU): executa opera¸c˜oes

arit-m´eticas e l´ogicas elementares estipuladas pelo programa e se efectua controlo do sistema. Divide-se em:

◮ a unidade aritm´etica e l´ogica e ◮ a unidade de controlo.

◮ Unidades de Entrada e Sa´ıda (Input/Output): permitem

comunica-¸c˜ao com o exterior.

◮ Mem´oria Central: armazena programas, dados e resultados.

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Estrutura e funcionamento b´asicos dum computador digital

Modelo de Von-Neumann

◮ Perif´erico: Dispositivo de entrada, sa´ıda ou armazenamento auxiliar

de um computador.

◮ Hardware: Componentes f´ısicas de um computador ⇒ Fixo ◮ Software: Conjunto de programas dispon´ıveis num computador ⇒

Manipul´avel

Linguagens de programa¸c˜ao: em computadores digitais os dados s˜ao armazenados, e operados, em c´odigo bin´ario, de 0’s e 1’s.

◮ de baixo n´ıvel:

◮ Linguagem m´aquina: composta de instru¸c˜oes codificadas em bin´ario. ◮ Linguagem assembler : usa mnem´onicas para representar instru¸c˜oes

de linguagem m´aquina para um computador particular.

◮ de alto n´ıvel:

◮ Fortran, Pascal, C,. . . : Mais pr´oximas dos conceitos humanos e

(5)

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Representa¸c˜ao de informa¸c˜ao

Representa¸c˜ao digital

◮ Informa¸c˜ao anal´ogica: de varia¸c˜ao cont´ınua ◮ Informa¸c˜ao digital: de varia¸c˜ao discreta

Informa¸c˜ao digital bin´aria: baseada em binary information digit’s (bit’s) com dois estados0/1.

◮ Mem´oria: sequˆencia de c´elulas que permitem o armazenamento de

uma palavra.

◮ Palavra: no de bits que formam uma unidade manipul´avel por um

computador.

A mem´oria dum computador ´e definida pelo n´umero de palavras que consegue armazenar. Assim, temos:

23 bits = 1 byte 220 bytes = 1024 Kb = 1 M

210 bytes = 1 Kb 230 bytes = 1024 M = 1 G

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Representa¸c˜ao de informa¸c˜ao

Representa¸c˜ao de inteiros

Dado um natural n existem k ∈ IN e bi∈ {0, 1}, i = 1, . . . , k, tais que

n = k X i=0 bi2i Exemplos: 710= 1 × 22+ 1 × 21+ 1 × 20 72= 00000111 1610= 1 × 24+ 0 × 23+ 0 × 22+ 0 × 21+ 0 × 20 162= 00010000

◮ Para representar o sinal de um inteiro pode usar-se o 1o bit. ◮ A representa¸c˜ao e as opera¸c˜oes s˜ao exactas.

Se a capacidade ´e ultrapassada ocorre um erro de overflow.

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Representa¸c˜ao de informa¸c˜ao

Representa¸c˜ao de reais

Em representa¸c˜ao v´ırgula flutuante um real x ´e escrito como m × Be, com − E < e < E e − M < m < M

onde:

m ´e a mantissa B ´e a base e ´e o expoente

Sinal expoente mantissa 1 bit 8 bits 23 bits Exemplos (com B = 10):

23.48 = 0.2348 × 102

−0.02348 = −0.2348 × 10−1

◮ A gama de varia¸c˜ao ´e finita e a varia¸c˜ao n˜ao ´e cont´ınua. ◮ A representa¸c˜ao e as opera¸c˜oes n˜ao s˜ao exactas.

M´etodos de Programa¸c˜ao 1

No¸c˜oes Gerais

Representa¸c˜ao de informa¸c˜ao

Representa¸c˜ao de caracteres

Tabela ASCII (American Standard Code for Information Interchange): cada car´acter ´e representado por um c´odigo de 7 bits.

00 16 32 48 64 80 96 112 0 NUL DLE 0 @ P ‘ p 1 SOH DC1 ! 1 A Q a q 2 STX DC2 " 2 B R b r 3 ETX DC3 # 3 C S c s 4 EOT DC4 $ 4 D T d t 5 ENQ NAK % 5 E U e u

6 ACK SYN & 6 F V f v

7 BEL ETB ’ 7 G W g w 8 BS CAN ( 8 H X h x 9 HT EM ) 9 I Y i y 10 LF SUB * : J Z j z 11 VT ESC + ; K [ k { 12 FF FS , < L \ l | 13 CR GS - = M ] m } 14 SO RS . > N ^ n ~ 15 SI US / ? O _ o DEL

(6)

Constru¸c˜ao de um programa

Fase de compila¸c˜ao:

Programa fonte −→ Compilador

Erros de com-pila¸c˜ao Programa objecto Fase de execu¸c˜ao: Dados −→ Execu¸c˜ao do programa Erros de execu¸c˜ao Resultados

Metodologia da programa¸c˜ao

◮ Correc¸c˜ao: O programa deve ser:

simples,

estruturado na abordagem (modular e descendente) do problema e

cumprir o objectivo a que se destina (ou seja, ser “formalmente correcto”).

◮ Clareza: O programa deve reflectir a estrutura do algoritmo, por:

separa¸c˜ao em blocos funcionais,

uso adequado das estruturas da linguagem, escolha cuidada de identificadores e documenta¸c˜ao interna.

◮ Eficiˆencia: O programa deve ser:

r´apido (tempo de execu¸c˜ao) e utilizar pouco espa¸co de mem´oria.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Introdu¸c˜ao `a linguagem Pascal

Introdu¸c˜ao `a linguagem Pascal

Linguagem de programa¸c˜ao:

conjunto de regras, s´ımbolos e palavras especiais usadas para construir um programa.

◮ Sintaxe: regras formais que definem a constru¸c˜ao de express˜oes

v´alidas numa linguagem.

Diagramas de sintaxe de Pascal na p´agina WOC.

Um programa ´e sintacticamente correcto se e s´o se corresponde a um caminho ao longo dos diagramas de sintaxe.

◮ Semˆantica: conjunto de regras que d˜ao o significado de uma

express˜ao da linguagem (forma de interpretar as express˜oes da linguagem por forma a lhes dar um significado preciso).

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Introdu¸c˜ao `a linguagem Pascal

Introdu¸c˜ao `a linguagem Pascal

◮ Problema: Calcular a temperatura m´edia num dia. ◮ Dados: Temperaturas m´ınima e m´axima nesse dia. ◮ Resultados: Temperatura m´edia nesse dia (ponto m´edio).

Programa em Pascal:

{ Programa que calcula a temperatura me’dia de um dia } program TempMedia(input, output);

var tmin, tmax, tmedia: integer; begin

writeln(’Temperatura mi’’nima?’); readln(tmin);

writeln(’Temperatura ma’’xima?’); readln(tmax);

tmedia := (tmin + tmax) div 2;

writeln(’A temperatura me’’dia foi ’, tmedia); end.

(7)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Introdu¸c˜ao `a linguagem Pascal

Introdu¸c˜ao `a linguagem Pascal

Coment´ario:

{ Programa que calcula a temperatura me’dia de um dia } Parte declarativa:

program TempMedia(input, output); var tmin, tmax, tmedia: integer; Parte operativa(m´odulo principal):

begin

writeln(’Temperatura mi’’nima?’); readln(tmin);

writeln(’Temperatura ma’’xima?’); readln(tmax);

tmedia := (tmin + tmax) div 2;

writeln(’A temperatura me’’dia foi ’, tmedia); end.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Introdu¸c˜ao `a linguagem Pascal

Introdu¸c˜ao `a linguagem Pascal

Identificadores:

Sequˆencias de letras e d´ıgitos, iniciadas por uma letra, usadas para denominar qualquer entidade de um programa.

Identificadores reservados (palavras reservadas):

abs ln reset arctan eoln char sqrt write

ord new boolean rewrite cos odd text readln get chr output integer sqr round pack input eof sin dispose maxint pred true succ false exp put unpack writeln read trunc page

Exemplos: umaletra x1 num3ros

◮ S´ımbolos especiais n˜ao podem ser utilizados como identificadores. ◮ Usando palavras reservadas o novo significado sobrep˜oe-se ao antigo. ◮ Alguns compiladores analisam apenas os caracteres iniciais de um

identificador.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Introdu¸c˜ao `a linguagem Pascal

Introdu¸c˜ao `a linguagem Pascal

Tipos de dados:

Conjunto de valores + Conjunto de opera¸c˜oes

Tipos                                Escalares            Pr´e-definidos        integer real char boolean Definidos pelo utilizador

Estruturados        array record set file M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos pr´e-definidos:

Inteiros (integer)

◮ Operadores aritm´eticos com operandos e resultados inteiros:

Operador Exemplo Opera¸c˜ao

+ 5 + 3 = 8 adi¸c˜ao

- 2 - 9 = -7 subtrac¸c˜ao (sim´etrico) * 33 * 11 = 363 multiplica¸c˜ao

div 21 div 4 = 5 quociente da divis˜ao inteira mod 21 mod 4 = 1 resto da divis˜ao inteira

Fun¸c˜oes standard com argumento e resultado inteiros:

Fun¸c˜ao Exemplos Resultado

abs abs(-6) = 6 valor absoluto

sqr sqr(-3) = 9 quadrado

succ succ(7) = 8, succ(-7) = -6 sucessor

pred pred(10) = 9 predecessor

(8)

Tipos pr´e-definidos:

Inteiros (integer)

◮ Fun¸c˜oes com argumento inteiro e resultado real:

Fun¸c˜ao Exemplo Resultado

sqrt sqrt(3)=1.732050808 raiz quadrada

◮ Operadores relacionais:

Operador Exemplo Opera¸c˜ao = sqr(5) = 25 igualdade <> 2 <> 9 desigualdade

< 45 < 1098 menor do que > 17 >- 3 maior do que

>= 2 >= 2 maior do que ou igual a <= -6 <= 7 menor do que ou igual a

Tipos pr´e-definidos:

Reais (real)

Representa¸c˜ao interna n˜ao exacta, donde opera¸c˜oes sobre estes valores podem introduzir imprecis˜oes.

◮ Operadores aritm´eticos:

Operador Exemplo Opera¸c˜ao

+ 5.5+3=8.5, 5.5+3.0=8.5 adi¸c˜ao

- 2.2-9=-6.1 subtrac¸c˜ao (sim´etrico)

* 33*0.5=11.5 multiplica¸c˜ao

/ 2.5/2=1.25, 5/4=1.25 divis˜ao real

◮ Fun¸c˜oes com resultado real se o argumento for real:

Fun¸c˜ao Exemplo Resultado

abs abs(-6.5)=6.5, abs(-5)=5 valor absoluto

sqr sqr(3.1)=9.61 potˆencia

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos pr´e-definidos:

Reais (real)

◮ Fun¸c˜oes de transferˆencia (com argumento real e resultado inteiro):

Fun¸c˜ao Exemplo Resultado

trunc trunc(-3.7)=-3, trunc(3.7)=3 truncatura round round(-3.7)=-4, round(3.7)=4 arredondamento

round(3.2)=3, round(-3.2)=-3

◮ Fun¸c˜oes com resultado real:

Fun¸c˜ao Exemplo Resultado

cos cos(3)=0.98999, cos(3.1415)=1.0 cosseno sin sin(3)=0.14112, sin(3.1415)=0.0 seno

arctan arctan(-1)=3.11415 arco de tangente sqrt sqrt(4)=2.0, sqrt(9.0)=3.0 raiz quadrada

exp exp(1)=2.71828 exponencial

ln ln(2.71828)=1.0, ln(1)=0.0 logaritmo nepperiano

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos pr´e-definidos:

Reais (real)

◮ Operadores relacionais:

Operador Exemplo Opera¸c˜ao

= ????? igualdade

<> desigualdade

< menor do que

> maior do que

>= maior do que ou igual a <= menor do que ou igual a

(9)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos pr´e-definidos:

Caracteres (char)

O conjunto dos caracteres inclui:

0 1 2...9 ... A B C...Y Z ... a b c...y z ... + - * ( ) onde:

◮ cada subconjunto est´a ordenado;

◮ cada car´acter tem uma representa¸c˜ao interna - no natural; ◮ qualquer car´acter ´e representado entre plicas:

’A’6= A ’+’6= + ’5’ 6= 5 vari´avel operador numeral

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos pr´e-definidos:

Caracteres (char)

◮ Fun¸c˜oes de transferˆencia:

Fun¸c˜ao Exemplo Opera¸c˜ao chr chr(65) = ’A’ car´acter

ord ord(’A’) = 65 no interno correspondente ◮ Fun¸c˜oes com argumento e resultado char:

Fun¸c˜ao Exemplo Opera¸c˜ao

succ succ(’R’) = ’S’ chr(ord(char)+1)

pred pred(’b’) = ’a’, pred(’A’) = ?? chr(ord(char)−1)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos pr´e-definidos:

L´ogicos (boolean)

◮ Operadores l´ogicos: Seguem tabelas de verdade e regras respectivas.

Operador Opera¸c˜ao and conjun¸c˜ao (∧) or disjun¸c˜ao (∨) not nega¸c˜ao (¬) p q p and q p or q not p V V V V F V F F V F F V F V V F F F F V Exemplos: 1. x ∈]0, 1] ou x > 0 ∧ x ≤ 1, escreve-se: (x > 0) and (x <= 1) 2. (n > 1) and (n < 0)´e falso

3. not (5 < 2) = true´e verdadeiro

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos pr´e-definidos:

L´ogicos (boolean)

◮ Fun¸c˜oes com argumento e resultado l´ogicos:

Fun¸c˜ao Exemplo Opera¸c˜ao pred pred(true)=false predecessor succ succ(false)=true sucessor

◮ Fun¸c˜ao com argumento inteiro e resultado l´ogico:

Fun¸c˜ao Exemplo Opera¸c˜ao

odd odd(5)=true, odd(2)=false ´ımpar

◮ Fun¸c˜ao com argumento l´ogico e resultado inteiro:

Fun¸c˜ao Exemplo Opera¸c˜ao

(10)

Tipos pr´e-definidos: Exemplo

program calculadora(input, output); var operador: char;

x, y, resultado: real; begin { Ler dados } write(’x, y?’); read(x, y); write(’operador?’); read(operador); { Efectuar calculo } case operador of ’+’: resultado := x + y; ’-’: resultado := x - y; ’*’: resultado := x * y; ’/’: resultado := x / y end; { Escrever resultado }

write(x, operador, y, ’=’, resultado) end.

Tipos definidos pelo utilizador:

Defini¸c˜ao por enumera¸c˜ao

Defini¸c˜ao de tipo:

−→ type −→ identificador −→ = −→ tipo simples −→ ; −→ ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

Defini¸c˜ao de tipo por enumera¸c˜ao:

−→ ( −→ identificador −→ ) −→ , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos definidos pelo utilizador:

Defini¸c˜ao por enumera¸c˜ao

Exemplos:

type naipe= (ouros, copas, paus, espadas); premios= (primeiro, segundo, terceiro); dias= (segunda, terca, quarta, quinta, sexta,

sabado, domingo); var trunfo: naipe;

lugar: premios; d: dias;

E N˜AO type premios= (1o, 2o, 3o);!!!

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos definidos pelo utilizador:

Defini¸c˜ao por enumera¸c˜ao

S˜ao v´alidos:

◮ operadores relacionais: segunda < quinta ◮ fun¸c˜oes pred, succ e ord:

pred(quarta) = terca, succ(terca) = quarta, ord(terca) = 1, uma vez que

(11)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Tipos definidos pelo utilizador:

Defini¸c˜ao por subdom´ınio

Se as vari´aveis tomam apenas alguns valores dum dom´ınio definido ´e suficiente definir um novo tipo indicando o primeiro e o ´ultimo valores.

−→ constante .. constante −→

Exemplos:

◮ type NaoNegativo= 0 .. MAXINT;

dias= (segunda, terca, quarta, quinta, sexta, sabado, domingo);

DiasUteis= segunda .. sexta; var n: NaoNegativo;

dia: DiasUteis;

Herdam-se opera¸c˜oes e fun¸c˜oes do dom´ınio inicial.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Declara¸c˜ao de dados:

Vari´aveis

−→ var −→ identificador −→ : −→ tipo −→ ; −→ , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . .

◮ Obrigat´oria a declara¸c˜ao de vari´aveis antes dum bloco de instru¸c˜oes

sobre elas.

◮ Permite a reserva antecipada das c´elulas de mem´oria que podem vir

a ser usadas, o que depende do n´umero e do tipo das vari´aveis. Exemplos:

var x, y: real; n: integer; d: DiasUteis;

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Declara¸c˜ao de dados:

Constantes

Literal: valor constante utilizado num programa. Exemplo:

dobro := 2 * x;

−→ const −→ identificador −→ = −→ constante −→ ; −→... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

◮ Defini¸c˜ao dos valores constantes a utilizar no programa. ◮ Tipo definido automaticamente atrav´es do valor da constante.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tipos elementares, declara¸c˜ao de vari´aveis e defini¸c˜ao de constantes

Declara¸c˜ao de dados:

Constantes

Exemplos:

const pi = 3.1415926;

titulo = ’Alice no Pais das Maravilhas’; delta = 0.5E-06;

iva = 0.20;

◮ Nomes mais sugestivos do que os valores.

◮ Mais simples alterar o valor de uma constante do que modificar

todas as ocorrˆencias de um valor no programa.

(12)

Express˜oes aritm´eticas e l´ogicas

Express˜oes aritm´eticas em Pascal:

◮ Contˆem vari´aveis, constantes e operadores.

◮ A ordem pela qual as opera¸c˜oes s˜ao efectuadas ´e definida pela

prioridade dos operadores envolvidos.

Prioridades (semelhantes `as usadas para express˜oes matem´aticas): Operadores Prioridade

not 4

*, /, div, mod, and 3

+, -, or 2

=, <>, >, >=, <, <= 1 Tal como na avalia¸c˜ao de express˜oes matem´aticas:

◮ avalia¸c˜ao feita por ordem n˜ao crescente de prioridade dos operadores, ◮ com operadores de igual prioridade, avalia¸c˜oes feitas da esquerda

para a direita.

Express˜oes aritm´eticas e l´ogicas

Exemplos:

◮ 10 div 2 * 3 = 5 * 3 = 15

◮ 5 * 2 / 4 * 2 = 10 / 4 * 2 = 2.5 * 2 = 5.0

◮ (3 > 0) and not (3 < 10) = true and not true = true

and false = false

A utiliza¸c˜ao de parˆentesis altera estas regras:

10 div (2 * 3) = 10 div 6 = 1

5 * 2 / (4 * 2) = 5 * 2 / 8 = 10 / 8 = 1.25

Notas:

◮ As vari´aveis de uma express˜ao j´a devem ter um valor. ◮ Dois operadores n˜ao podem aparecer seguidos. ◮ O operador de multiplica¸c˜ao ‘*’ n˜ao pode ser omitido. ◮ Em caso de d´uvida usar parˆentesis.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes

Instru¸c˜oes

Instru¸c˜ao de atribui¸c˜ao:

Instru¸c˜ao que atribui o valor de uma express˜ao a uma vari´avel. → vari´avel → := → express˜ao →

Vari´avel e express˜ao (que devolve valor) tˆem que ter o mesmo tipo (excepto na atribui¸c˜ao de um valor inteiro a uma vari´avel real). Exemplos: var i: integer; x: real; teste: boolean; letra: char; ... i := 3; letra := chr(i); teste := True; x := x + i + 10; M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes

Instru¸c˜oes

Instru¸c˜ao de atribui¸c˜ao:

◮ Troca dos valores de duas vari´aveis (do mesmo tipo):

var i, j, aux: integer; Considerando i = 2 e j = 5,

aux := i; i := j; j := aux; produz i = 5 e j = 2.

◮ Incrementar o valor de uma vari´avel:

Considerando i = 1, i := i + 1; produz i = 2.

(13)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes

Instru¸c˜oes

Instru¸c˜ao de sequencia¸c˜ao:

Especifica a ordem de execu¸c˜ao das instru¸c˜oes executando-as sequencialmente.

◮ ‘;’ delimita o fim duma instru¸c˜ao e serve de separador de instru¸c˜oes. ◮ Um grupo de instru¸c˜oes, isto ´e, um bloco de instru¸c˜oes, ´e delimitado

pelas palavras reservadas begin e end.

→ begin → instru¸c˜ao → end → ; → ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes

Instru¸c˜oes

Instru¸c˜oes de entrada/sa´ıda:

Para recolha de dados e escrita de resultados.

→ program → identificador → ( → identificador → ) → ; → , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

Em geral s˜ao utilizados:

◮ input: que representa o teclado; ◮ output: que representa o ecr˜a.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes

Instru¸c˜oes:

Leitura

→ read → ( − − − − − − − → lista vari´aveis →) → readln ... . . . . . . ... . . . . . . . . . . . . . ... ... . ... . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . canal → , ... . . . . . . . ... . . . . . . . . . . . . . ... ... . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

◮ Os valores obtidos atrav´es do canal de entrada s˜ao atribu´ıdos, por

ordem, `as vari´aveis na instru¸c˜ao de leitura.

◮ As vari´aveis a ler e os valores dados tˆem que ser do mesmo tipo.

Exemplos:

◮ read(i,j)ou read(input,i,j): leitura do teclado, ◮ read(dados1,i,j): leitura do ficheiro dados1.

◮ readln(i,j)ou readln(input,i,j), readln(dados1,i,j): o

mesmo mas mudando a linha ap´os a leitura.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes

Instru¸c˜oes:

Leitura

Podem ler-se valores:

◮ Num´ericos: ignorando espa¸cos em branco e mudan¸cas de linha. ◮ Caracteres: um de cada vez.

Exemplo:

var x: real;

c1, c2, c3: char; n: integer;

Dada a sequˆencia 6.5 a123 a instru¸c˜ao read(x,c1,c2,c3,n); produz: x = 6.5, c1 = ’ ’, c2 = ’a’, c3 = ’1’, n = 23

(14)

Instru¸c˜oes:

Escrita

→ write → ( − − − − − − − → lista de sa´ıda →) → writeln... . . . . . . ... . . . . . . . . . . . . . ... ... . ... . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . canal → , ... . . . . . . . ... . . . . . . . . . . . . . ... ... . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplos:

write(i,j)ou write(output,i,j): escrita no ecr˜a, ◮ write(res1,i,j): escrita no ficheiro res1.

◮ writeln(i,j)ou writeln(output,i,j), writeln(res1,i,j): o

mesmo mas mudando a linha ap´os a escrita.

◮ Dados x = 5.0, c1 = ’g’, n = 3, teste = True, temos:

Instru¸c˜oes Sa´ıda

write(n), write(3) 3

write(n+2*x), write(13.0) +1.300000E+01

write(c1), write(’g’) g

write(’Uma string’) Uma string write(teste), write(2 > 1) True

Instru¸c˜oes:

Escrita

Especificadores de formato

Especificam o modo como aparece a informa¸c˜ao:

express~ao : comprimento do campo : parte decimal onde,

express~ao: informa¸c˜ao a ser escrita,

◮ comprimento do campo: campo min´ımo para escrever s´ımbolos

(alargado automaticamente se insuficiente),

◮ parte decimal: n´umero de casas decimais, para reais.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes

Instru¸c˜oes:

Escrita

Especificadores de formato Exemplos: ◮ Dados x = -9.0, n = 3, Instru¸c˜oes Sa´ıda write(x:6:2) -9.00 write(x:3:2) -9.00 write(n:3) 3

◮ Instru¸c˜ao: write(’Inteiro ’:2, n:3, ’ e real ’:10, x:4)

Sa´ıda: Inteiro 3 e real -9.0

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Estruturas de controlo

Estruturas de controlo

Estruturas de controlo

Instru¸c˜oes especiais em Pascal para controlar o fluxo duma sequˆencia de instru¸c˜oes, alterando a ordem sequencial expl´ıcita.

Estruturas de Base                                    Sequˆencia Selec¸c˜ao  Alternativa M´ultipla Repeti¸c˜ao    Enquanto At´e que Com contador Subprograma  Procedimento Fun¸c˜ao

(15)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de selec¸c˜ao

Instru¸c˜oes de selec¸c˜ao:

if-then-else

Selec¸c˜ao alternativa

Escolha de instru¸c˜oes a executar consoante o valor de uma express˜ao l´ogica.

Se a express˜ao ´e verdadeira, ´e executada a instru¸c˜ao correspondente a then, sen˜ao ´e executada a instru¸c˜ao correspondente a else.

N˜ao existindo else passa-se `a instru¸c˜ao seguinte. −→ if −→ express˜ao

l´ogica −→ then −→ instru¸c˜ao −→ else −→ instru¸c˜ao −→ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de selec¸c˜ao

Instru¸c˜oes de selec¸c˜ao:

if-then-else

Exemplos:

◮ Executar a divis˜ao entre dois inteiros.

writeln(’x, y? ’); readln(x,y); res := x div y;

writeln(x, ’ / ’, y, ’ = ’, res);

◮ Executar a divis˜ao entre dois inteiros, se o divisor for n˜ao nulo.

writeln(’x, y? ’); readln(x,y); if y <> 0 then begin res := x / y; writeln(x, ’ / ’, y, ’ = ’, res) end; M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de selec¸c˜ao

Instru¸c˜oes de selec¸c˜ao:

if-then-else

Exemplos:

◮ Executar a divis˜ao entre dois inteiros, se o divisor for n˜ao nulo, sen˜ao

imprimir mensagem de erro. writeln(’x, y? ’); readln(x,y); if y <> 0 then begin res := x / y; writeln(x, ’ / ’, y, ’ = ’, res) end

else writeln(’Erro! O divisor e’’ nulo.’);

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de selec¸c˜ao

Instru¸c˜oes de selec¸c˜ao:

if-then-else

Problema:

Dados 3 inteiros positivos, verificar se podem ser o comprimento dos lados dum triˆangulo. Se assim for classificar o triˆangulo.

◮ Trˆes inteiros positivos s˜ao lados de um triˆangulo se cada um ´e menor

do que a soma dos restantes dois.

◮ Um triˆangulo ´e:

equil´aterose os lados s˜ao todos iguais; ◮ is´oscelesse apenas dois lados s˜ao guais; ◮ escalenose os lados s˜ao todos diferentes.

(16)

Instru¸c˜oes de selec¸c˜ao:

if-then-else

Exemplos:

program triangulo (input, output);

var a, b, c: 1 .. MAXINT; begin writeln(’a, b, c?’); readln(a, b, c); if (a < b + c) and (b < a + c) and (c < a + b) then if (a = b) or (a = c) or (b = c) then if (a = b) and (b = c)

then writeln(’Triangulo Equilatero’) else writeln(’Triangulo Isosceles’) else writeln(’Triangulo Escaleno’) else writeln(’Nao formam um triangulo’); end.

Instru¸c˜oes de selec¸c˜ao:

case

Selec¸c˜ao m´ultipla

Escolha de instru¸c˜oes a executar consoante o valor de uma constante que pode ter mais do que 2 valores.

→ case → express˜ao → of → constante → : → instru¸c˜ao → end → , ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... Exemplo: case i of 1 : instrucao1; 2 : instrucao2; 3, 4 : instrucao3 end; M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de selec¸c˜ao

Instru¸c˜oes de selec¸c˜ao:

case

◮ Express˜ao tem de ser de um dos tipos enumer´aveis (n˜ao real). ◮ Express˜ao e constantes tˆem de ser do mesmo tipo.

◮ Se uma constante aparece em mais do que uma instru¸c˜ao surge um

erro de compila¸c˜ao.

Em Pascal standard se express˜ao n˜ao tem o valor de uma das

constantes surge um erro de execu¸c˜ao.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de selec¸c˜ao

Instru¸c˜oes de selec¸c˜ao:

case

Exemplo:

Fazer corresponder uma mensagem a uma classifica¸c˜ao A, B, C, D ou F. case nota of

’A’, ’B’: writeln(’Bom trabalho!’); ’C’ : writeln(’Trabalho normal.’); ’D’, ’F’: writeln(’Mau trabalho...’) end;

(17)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de selec¸c˜ao

Instru¸c˜oes de selec¸c˜ao:

case

Instru¸c˜oes equivalentes:

if (nota = ’A’) or (nota = ’B’) or (nota = ’C’) or

(nota = ’D’) or (nota = ’F’) then case nota of

’A’, ’B’: writeln(’Bom trabalho!’); ’C’ : writeln(’Trabalho normal.’); ’D’, ’F’: writeln(’Mau trabalho...’) end

else writeln(’A nota dada nao e valida’);

◮ if (nota = ’A’) or (nota = ’B’)

then writeln(’Bom trabalho!’) else if (nota = ’C’)

then writeln(’Trabalho normal.’) else if (nota = ’D’) or (nota = ’F’)

then writeln(’Mau trabalho!’)

else writeln(’A nota dada nao e valida’);

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

while-do

Repeti¸c˜ao: Ciclos

Repete uma instru¸c˜ao simples ou composta, enquanto a express˜ao l´ogica ´e verdadeira.

−→ while −→ express˜ao

l´ogica −→ do −→ instru¸c˜ao −→

◮ O ciclo divide-se em:

◮ cabe¸ca: teste l´ogico, efectuado antes de tudo, ◮ corpo: instru¸c˜ao executada se o teste ´e verdadeiro.

◮ Cada execu¸c˜ao do corpo dum ciclo chama-se uma itera¸c˜aodo ciclo.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

while-do

Repeti¸c˜ao: Ciclos

◮ Se express˜ao ´e falsa, ent˜ao o ciclo nunca ´e efectuado.

◮ Se express˜ao ´e sempre verdadeira, ent˜ao o ciclo nunca p´ara: ciclo

infinito.

Tipos cl´assicos de ciclos:

◮ Ciclo controlado por um contador: ciclo que ´e executado um n´umero

conhecido de vezes.

◮ Ciclo controlado por um sucesso: ciclo que termina quando algo no

seu corpo indica que se deve sair.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

while-do

Problema: Escrever as primeiras 10 potˆencias de 2.

1. program potencias1(output); const lim = 10;

var i: integer; begin

i := 1; { Inicializacao }

while i <= lim do { Ciclo } begin

writeln(’2^’, i,’ = ’, exp(i * ln(2)));

i := i + 1; { Incremento }

end end.

(18)

Instru¸c˜oes de repeti¸c˜ao:

while-do

Problema: Escrever as primeiras 10 potˆencias de 2.

2. program potencias2(output); const lim = 10;

var i, potencia: integer; begin

i := 1; { Inicializacao }

potencia := 2;

while i <= lim do { Ciclo } begin

writeln(’2^’, i,’ = ’, potencia);

i := i + 1; { Incremento }

potencia := potencia * 2 end

end.

Instru¸c˜oes de repeti¸c˜ao:

while-do

Problema: Escrever as potˆencias de 2 inferiores a 1000.

3. program potencias3(output); const lim = 1000;

var i, potencia: integer; begin

i := 1; { Inicializacao }

potencia := 2;

while potencia < lim do { Ciclo } begin

writeln(’2^’, i,’ = ’, potencia);

i := i + 1; { Incremento }

potencia := potencia * 2 end

end.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

repeat-until

Repeti¸c˜ao: Ciclos

Repete uma instru¸c˜ao simples ou composta, at´e que a express˜ao l´ogica seja verdadeira.

−→ repeat −→ instru¸c˜ao −→ until −→ express˜ao l´ogica −→ “Tradu¸c˜ao” de um ciclo repeat-until em while-do:

repeat

Instru¸c~oes

until cond. paragem;

aux := true; while aux do begin Instru¸c~oes;

aux := cond. paragem end;

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

repeat-until

Diferen¸cas entre repeat-until e while-do:

◮ No repeat repete-se uma instru¸c˜ao elementar (ou composta) at´e que

a express˜ao l´ogica se torne verdadeira:

◮ O teste l´ogico do repeat (a cabe¸ca do ciclo) ´e efectuado no final,

logo o ciclo ´e executado pelo menos uma vez.

Situa¸c˜oes em que ´e vantajoso utilizar repeat-until em vez de while-do:

◮ Por vezes a condi¸c˜ao de paragem s´o fica definida ap´os a primeira

passagem do ciclo.

(19)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

repeat-until

Exemplo: Ler uma classifica¸c˜ao com valores A, B, C, D ou F. writeln(’De uma nota:’);

readln(nota);

while (nota <> ’A’) and (nota <> ’B’) and (nota <> ’C’) and (nota <> ’D’) and (nota <> ’F’) do

begin

writeln(’A nota dada nao e valida!’);

writeln(’A nota inserida deve ser A, B, C, D ou F.’); writeln(’De uma nota:’);

readln(nota) end;

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

repeat-until

Exemplo: Ler uma classifica¸c˜ao com valores A, B, C, D ou F. repeat

writeln(’De uma nota:’); readln(nota);

if (nota <> ’A’) and (nota <> ’B’) and (nota <> ’C’) and (nota <> ’D’) and (nota <> ’F’)

then begin

writeln(’A nota dada nao e valida!’);

writeln(’A nota inserida deve ser A, B, C, D ou F.’) end

until (nota = ’A’) or (nota = ’B’) or (nota = ’C’) or (nota = ’D’) or (nota = ’F’);

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

for-to-do

Repeti¸c˜ao: Ciclos

O ciclo ´e repetido um n´umero fixo de vezes.

−→ for −→ indentificador de vari´avel −→ := −→ express˜ao

to

downto −→ express˜ao −→ do −→ instru¸c˜ao −→ . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . . . . . .

Esta estrutura usa um contador do n´umero de repeti¸c˜oes com duas variantes:

◮ incremento de 1 unidade (to); ◮ decremento de 1 unidade (downto).

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao:

for-to-do

Problema: Escrever as primeiras 10 potˆencias de 2.

1. program potencias4(output); const lim = 10;

var i, potencia: integer; begin potencia := 2; for i := 1 to lim do begin writeln(’2^’i,’ = ’, potencia); potencia := potencia * 2 end end.

(20)

Instru¸c˜oes de repeti¸c˜ao:

for-to-do

Notas:

◮ O identificador de vari´avel (contador) e as express˜oes tˆem que ser do

mesmo tipo: literais n˜ao reais.

◮ N˜ao se pode alterar o valor do contador dentro do ciclo (embora

esse valor possa ser utilizado).

◮ No final do ciclo o contador pode n˜ao estar definido.

◮ Num ciclo for-to-do, se o valor final ´e inferior ao inicial, ent˜ao

nada ´e executado.

Instru¸c˜oes de repeti¸c˜ao:

for-to-do

Problema: Imprimir no ecr˜a o triˆangulo de caracteres: A AB ABC ABCD ABCDE ABCDEF program ImprimeLetras(output);

var letraFinal, letraActual: char; begin

for letraFinal := ’A’ to ’F’ do begin

for letraActual := ’A’ to letraFinal do write(letraActual);

writeln end

end.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao: Exemplos

Dada a temperatura em cada hora de um dia determinar as temperaturas m´ınima e m´axima desse dia.

1. Iniciar o processo (temperaturas m´ınima e m´axima) e condi¸c˜ao de paragem do ciclo (horas).

2. Enquanto horas ≤ numhoras Fazer 2.1 Actualizar dados.

Obter nova temperatura.

Comparar temperatura com a m´ınima at´e ao momento. Comparar temperatura com a m´axima at´e ao momento. 2.2 Actualizar condi¸c˜ao de paragem do ciclo.

3. Escrever resultados.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao: Exemplos

program Temperatura1(input, output); const numhoras = 24;

var temp, min, max, hora: integer; begin

min := MAXINT; max := -MAXINT;

for hora := 1 to numhoras do begin

read(temp); if temp < min then min := temp; if temp > max then max := temp end;

writeln(’A temperatura minima neste dia foi: ’, min); writeln(’A temperatura maxima neste dia foi: ’, max) end.

(21)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao: Exemplos

{ Cabecalho }

program Temperatura2(input, output); { Parte declarativa }

const numhoras = 24;

var temp, imin, min, imax, max, hora: integer; { Bloco principal } begin { Inicializacoes } imin := 0; min := MAXINT; imax := 0; max := -MAXINT; M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao: Exemplos

{ Ciclo}

for hora := 1 to numhoras do begin

read(temp); if temp < min then begin

imin := hora; min := temp end;

if temp > max then begin imax := hora; max := temp end end; M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Instru¸c˜oes de repeti¸c˜ao: Exemplos

{ Escrita de resultados }

writeln(’Minima: ’, min, ’ atingida as ’, imin, ’ h.’); writeln(’Maxima: ’, max, ’ atingida as ’, imax, ’ h.’) end.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplos

1. Escrever n ∈ IN em “nota¸c˜ao bin´aria”.

2. Aproximar a raiz de 2 − ex− sin x = 0 em [a, b], pelo m´etodo da

bissec¸c˜ao:

2.1 aplicando o m´etodo k vezes,

2.2 aplicando o m´etodo at´e obter um intervalo de amplitude inferior a δ. 3. AproximarRabf (x) dx, com f (x) = ex− sin x, usando a regra dos

trap´ezios e n subintervalos: Z b a f (x) dx ≈ h 2(f (x0) + 2f (x1) + · · · + 2f (xn− 1) + f (xn)) , onde h = b−a n , x0 = a, xi = xi −1+ h.

(22)

Exemplos

Escrever n ∈ IN em “nota¸c˜ao bin´aria”. program binario(input, output); var n: 0..maxint; begin writeln(’De n:’); readln(n); write(’Em base 2: ’); while n > 0 do begin write(n mod 2); n := n div 2 end end.

Exemplos

Aproximar a raiz de 2 − ex− sin x = 0 em [a, b], pelo m´etodo da

bissec¸c˜ao. Aplicar o m´etodo, no m´aximo, k vezes.

1. Ler a, b, k

2. i ← 0, continua ← verdade

3. Enquanto i ≤ k e continua fazer 3.1 Incrementar i

3.2 m ←a+b 2

3.3 Se f (a)f (m) < 0 ent˜ao b ← m Sen˜ao Se f (m)f (b) < 0 ent˜ao a ← m

Sen˜ao continua ← falso 4. Escrever m e f (m)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplos

program bisseccao(input, output); var i, k: integer; a, b, m, fa, fb, fm: real; continua: boolean; begin writeln(’De a e b:’); readln(a, b);

writeln(’De o numero de iteracoes:’); readln(k); i := 0; fa := 2 - sin(a) - exp(a); fb := 2 - sin(b) - exp(b); continua := (fa * fb) < 0; M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplos

while (i < k) and continua do begin i := i + 1; m := (a + b) / 2; fm := 2 - sin(m) - exp(m); if (fa * fm) < 0 then begin b := m; fb := fm; end else if (fm * fb) < 0 then begin a := m; fa := fm; end

else continua := false end;

writeln(’f(’, m, ’)=’, fm, ’ apos ’, i,’ iteracoes.’) end.

(23)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplos

Aproximar a raiz de 2 − ex− sin x = 0 em [a, b], pelo m´etodo da

bissec¸c˜ao. Aplicar o m´etodo at´e obter um intervalo de amplitude inferior a δ.

program bisseccao2(input, output);

var a, b, m, fa, fb, fm, delta, erro: real; begin

writeln(’De a e b:’); readln(a, b);

writeln(’De a tolerancia delta:’); readln(delta); fa := 2 - sin(a) - exp(a); fb := 2 - sin(b) - exp(b); erro := b - a; continua := (fa * fb) < 0; M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplos

while (abs(erro) >= delta) and continua do begin m := (a + b) / 2; fm := 2 - sin(m) - exp(m); if (fa * fm) < 0 then begin b := m; fb := fm; end else if (fm * fb) < 0 then begin a := m; fa := fm; end

else continua := false; erro := b - a

end;

writeln(’f(’,m,’)=’,fm,’ com erro menor que ’,erro,’.’) end.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplos

AproximarRabf (x) dx, com f (x) = ex− sin x, usando a regra dos

trap´ezios e n subintervalos: Z b a f (x) dx ≈ h 2(f (x0) + 2f (x1) + · · · + 2f (xn− 1) + f (xn)) , onde h = b−a n , x0 = a, xi = xi −1+ h. 1. Ler a, b, n

2. Calcular amplitude de intervalos h = b−a n

3. x0← a, soma ← 0

4. Para k desde 1 at´e n − 1 fazer 4.1 xk← xk+ h 4.2 soma ← soma +f (xk) 5. integral ← h 2(f (a) + 2 × soma + f (b)) 6. Escrever integral M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplos

program trapezios(input, output); var k, n: integer;

a, b, h, xk, fxk, soma, integral: real; begin

writeln(’De a e b: ’); readln(a, b);

writeln(’De o numero de sub-intervalos: ’); readln(n);

h := (b-a) / n; xk := a;

(24)

Exemplos

soma := 0; for k := 1 to n-1 do begin xk := xk + h; fxk := exp(xk) - sin(xk); soma := soma + fxk end; integral := h*(exp(a)-sin(a)+2*soma+exp(b)-sin(b))/2; writeln(’Int(f)= ’, integral) end.

Exemplos

Calcular kp com k, p ∈ IN.

program potencias(input, output); var k, p, m, n, kaux, prod: integer; begin writeln(’De k e p: ’); readln(k, p); prod := 1; m := p; M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplos

prod := 1; m := p; while m <> 0 do begin kaux := k; n := 1; while 2*n <= m do

begin kaux := sqr(kaux); n := n * 2;

end;

prod := prod * kaux; m := m - n

end;

writeln(k,’^’,p,’=’, prod) end.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplo

Calcular o valor da fun¸c˜ao seno num ponto dado, atrav´es do desenvolvi-mento em s´erie, desprezando termos de valor absoluto inferior a 10−8.

sin x = +∞ X k=0 (−1)kx2k+1 (2k + 1)! = x − x3 3! + x5 5! − x7 7! + · · ·

(25)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplo

program FSeno(input, output); const epsilon = 1E-8;

var k: integer;

x, termo, seno: real; begin write(’Indique x: ’);

readln(x); k := 1; termo := x; seno := 0;

while abs(termo) >= epsilon do begin seno := seno + termo;

k := k + 2; termo := - termo * sqr(x) / ((k-1) * k) end; writeln(’sen(’, x, ’)= ’, seno) end. M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Leitura de dados

1. Quantidade de valores a ler conhecida a priori.

2. Quantidade de valores a ler desconhecida:

2.1 Utiliza¸c˜ao de umasentinelapara assinalar o final da sequˆencia. 2.2 Leitura a partir de um ficheiro e utiliza¸c˜ao das fun¸c˜oes eof e eoln:

eof(f) ´e True se e s´o se ´e detectado o final do ficheiro f.eoln(f) ´e True se e s´o se ´e detectado o final de uma linha no

ficheiro f.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Instru¸c˜oes de repeti¸c˜ao

Exemplo

Contar o n´umero de caracteres de um ficheiro. program ContaCaracteres(f, output); var c: char;

conta: integer; f: text;

begin assign(f, ’dados.txt’); reset(f);

conta := 0;

while not eof(f) do

if eoln(f) then readln(f) else

begin read(f, c);

conta := conta + 1 end;

close(f);

writeln(’O ficheiro tem ’, conta,’ caracteres.’) end.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Tabelas

Tabela:

Agregado de elementos do mesmo tipo, cada um pode ser acedido atrav´es da indica¸c˜ao da posi¸c˜ao que ocupa na tabela.

−→ array −→ [ −→ tipo simples −→ ] −→ of −→ tipo −→ , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... Permitem:

◮ denotar um grupo de vari´aveis por um ´unico identificador, ◮ aceder a cada componente por indica¸c˜ao de um ´ındice.

(26)

Tabelas:

Declara¸c˜ao

Uma tabela ´e caracterizada:

◮ pela dimens˜ao (ou limites dos seus ´ındices) e ◮ pelo tipo dos seus elementos.

Diferentes tipos:

◮ unidimensionais (com um s´o ´ındice): array [1..20] of integer; ◮ bidimensionais (com 2 ´ındices): array [1..20, 1..20] of real;

(ou: array [1..20] of array [1..20] of real];)

◮ . . .

Tabelas:

Declara¸c˜ao

Exemplos:

const m = 10; n = 20;

type vector = array [1 .. 20] of integer; matriz = array [1 .. m, 1 .. n ] of real; palavra = array [0 .. 15] of char;

var x, y: vector; A: matriz; p: palavra;

notas: array [’A’ .. ’F’] of integer;

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Tabelas:

Acesso

S˜ao armazenadas v´arias posi¸c˜oes de mem´oria que podem ser acedidas por indica¸c˜ao da posi¸c˜ao, do mesmo modo que qualquer vari´avel:

x[3] := 5; i := 1; j := 10; A[i,j] := 2 / x[3]; p[1] := ’C’; notas[p[1]] := 0;

y := x; { Nao valido em Pascal standard }

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Tabelas:

Algumas opera¸c˜oes com vectores

Dados:

type vector = array [1 .. 100] of integer; var x: vector;

dimx, i: integer;

◮ Leitura:

writeln(’De o tamanho do vector:’); readln(dimx);

writeln(’De as ’, dimx, ’ componentes do vector:’); for i := 1 to dimx do read(x[i]); ◮ Escrita: write(’Vector: ’); for i := 1 to dimx do write(x[i], ’ ’); writeln;

(27)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Tabelas:

Algumas opera¸c˜oes com vectores

var x, y, z: vector; dim, i, soma: integer;

◮ Produto interno:

soma := 0;

for i := 1 to dim do

soma := soma + x[i] * y[i];

◮ Adi¸c˜ao:

for i := 1 to dim do z[i] := x[i] + y[i];

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Tabelas:

Algumas opera¸c˜oes com matrizes

Dados:

type matriz = array [1 .. 100, 1 .. 100] of integer; var A: matriz;

m, n, i, j: integer;

◮ Leitura:

writeln(’De o numero de linhas:’); readln(m);

writeln(’De o numero de colunas:’); readln(n);

writeln(’De as ’, m*n, ’ componentes da matriz:’); for i := 1 to m do

for j := 1 to n do read(A[i,j]);

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Tabelas:

Algumas opera¸c˜oes com matrizes

◮ Escrita: writeln(’Matriz:’); for i := 1 to m do begin for j := 1 to n do write(A[i,j]:4, ’ ’); writeln end M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Tabelas:

Algumas opera¸c˜oes com matrizes

var A: matriz;

m, n, i, j, soma, SomaMax, IndMax: integer;

◮ Encontrar o ´ındice da linha com soma m´axima:

SomaMax := 0; IndMax := 1; for j := 1 to n do

SomaMax := SomaMax + A[1,j]; for i := 2 to m do

begin soma := 0;

for j := 1 to n do soma := soma + A[i,j]; if soma > SomaMax then begin SomaMax := soma;

IndMax := i end

(28)

Tabelas:

Algumas opera¸c˜oes com matrizes

var A, B, S, P: matriz; m, n, k, i, j, l: integer;

◮ Adi¸c˜ao:

for i := 1 to m do

for j := 1 to n do S[i,j] := A[i,j] + B[i,j];

Produto: Dadas Am×n, Bn×k, A × B ´e uma matriz Pm×kde elemento

pij= n X r=1 airbrj for i := 1 to m do for j := 1 to k do begin P[i,j] := 0;

for l := 1 to n do P[i,j] := P[i,j] + A[i,l]*B[l,j] end;

Exemplos

1. Capicua?

2. Representa¸c˜ao em base bin´aria

3. M´edias da turma

4. Factoriza¸c˜ao de um inteiro em factores primos

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Exemplos

3. Considere os 20 nomes de uma turma e as respectivas notas a 5 disciplinas dados na forma:

Ana Rita Fonseca . 10 15 11 9 14 An´ıbal Silva . 16 14 13 11 10

Elabore um programa que imprima nome e m´edia de cada aluno do curso.

4. Todo o inteiro positivo pode ser decomposto como produto de potˆencias de n´umeros primos. Por exemplo:

2268 = 22× 34× 71

Elabore um programa que escreva a representa¸c˜ao can´onica de um inteiro positivo dado.

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Mais opera¸c˜oes com vectores

var x: vector;

i, j, aux, n, meio: integer;

◮ Troca de dois elementos do vector

aux := x[i]; x[i] := x[j]; x[j] := aux;

◮ Invers˜ao de todos os elementos do vector

Trocar elementos desde as posi¸c˜oes extremas do vector at´e `as posi¸c˜oes centrais. meio := n div 2; for i := 1 to meio do begin aux := x[i]; x[i] := x[n-i+1]; x[n-i+1] := aux end;

(29)

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Mais opera¸c˜oes com vectores

var x: vector;

aux, i, n: integer;

◮ Permuta¸c˜ao `a esquerda

Os elementos do vector rodam uma posi¸c˜ao para a esquerda. O primeiro passa para a ´ultima posi¸c˜ao.

aux := x[1];

for i := 1 to n-1 do x[i] := x[i+1]; x[n] := aux;

Remo¸c˜ao do elemento na posi¸c˜ao k ∈ {1, . . . , n}

Rodar os elementos das posi¸c˜oes de k a n uma posi¸c˜ao `a esquerda. Actualizar a dimens˜ao utilizada.

for i := k to n-1 do x[i] := x[i+1]; n := n-1;

M´etodos de Programa¸c˜ao 1

Conceitos Fundamentais de Programa¸c˜ao Imperativa

Tabelas

Mais opera¸c˜oes com vectores

var x: vector;

i, k, elm, n: integer;

Inser¸c˜ao de um novo elemento na posi¸c˜ao k ∈ {1, . . . , n} (e n + 1

inferior `a dimens˜ao m´axima)

Rodar os elementos das posi¸c˜oes de n at´e k uma posi¸c˜ao `a direita. Inserir o novo valor.

Actualizar a dimens˜ao utilizada. for i := n downto k do x[i+1] := x[i]; x[k] := elm; n := n + 1; M´etodos de Programa¸c˜ao 1 Metodologia da Programa¸c˜ao

Metodologia da Programa¸c˜ao

Programa¸c˜ao estruturada descendente caracterizada por:

◮ Resolu¸c˜ao do problema de forma global ◮ Refinar os v´arios passos distintos do programa

Surge a necessidade de dividir o programa em “blocos” (ou m´odulos) correspondentes aos subproblemas identificados.

Subprogramas:

Grupos de instru¸c˜oes tratados como um todo e identificados por um nome. ◮ Fun¸c˜oes ◮ Procedimentos M´etodos de Programa¸c˜ao 1 Metodologia da Programa¸c˜ao Subprogramas

Subprogramas:

Fun¸c˜oes (function)

Fun¸c˜ao:

Subprograma que fornece um valor. Exemplos de fun¸c˜oes pr´e-definidas em Pascal:

1. sqrt: Integer / Real→ Real

2. ord: Char→ Integer

Referências

Documentos relacionados

Drvna ljepila za različite vrste povezivanja - ljepila opće namjene za tvrde i meke vrste drva (namještaj, vanjska i unutarnja stolarija, ljepila za furniranje, iverale, parkete

Elaborados sob os rigores normativos e legais (CREA, NB-502/1989, NBR-5676 e NBR-8977/85; Lei 6404 e legislação complementar; pareceres normativos CVM e IBRACON), o Laudo

Para informações sobre como formar seu grupo da Anistia Internacional escreva para ativismo@anistia.org.br Para se juntar a um grupo existente na sua cidade

Brendo Águas e Bebidas 61.97% Mercado de Sr.. COLÉGIO PARTICULAR

Como se sabe ( 1 ) , ( 3 ) , os corpos de frutificação de Sphserobolus são heliotrópicos positivos, isto é, projetam as glebas na direção donde vem maior intensi- dade

Ou toque em no primeiro ecrã de início, depois toque em Conta Infantil da Lenovo para criar uma conta de utilizador infantil.. Nota: Antes de adicionar uma conta de

Considerando a dimensão do bloco estudado, 40x15x15mm, as variações máximas medidas para os blocos prensador a 165MPa, e a 300MPa (isostática), para uma parede de

CURSO DISCIPLINA CÓDIGO HORÁRIA HORÁRIO DE VAGAS EMAC/Musicoterapia Leitura e Desenvolvimento Auditivo EMA0598 32 Sextas das 10:00 às 11:40 10 PRÉ-REQUISITOS (se houver): Não