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
◮ 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
◮ ComputadorO 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
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.
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
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
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.
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
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
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
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
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.
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.
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
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
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.
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;
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.
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.
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.
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.
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.
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.
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;
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 dobegin 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! + · · ·
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.
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;
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
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;
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