Folha da Cálculo
Jorge Cruz
DI/FCT/UNL
Introdução aos Computadores e à Programação
1º Semestre 2005/2006
30 Novembro 2005
Folha da Cálculo
1
Folha de Cálculo
• A informação numa folha de cálculo está estruturada com
base em matrizes, ou tabelas.
1
2
3
4
5
A
610
825
316
34
723
B
C
Paulo Fernandes Lopes 2341.36
Pedro Vieira
989.24
Marta Costa Martins
1389.17
Rui Vasco Pereira
5310.32
Jorge Barata
767.26
D
15/04/1996
25/06/1999
05/01/1992
15/04/1996
03/09/2002
• Numa folha simples, existe uma única matriz, cuja dimensão
é arbitrária. Nessa matriz podem ser definidas submatrizes,
ou subvectores.
• Qualquer posição na matriz é uma variável, identificada pela
sua coluna (A, B, Z, AA, ... – uma ou mais letras) e sua linha
(1, 2, 3, ... - um inteiro). Por exemplo B2 = “Pedro Vieira”
30 Novembro 2005
Folha da Cálculo
2
Folha de Cálculo
• Tal como numa linguagem de programação, a uma variável
podem ser atribuídos valores, constantes ou dependentes de
outras variáveis através de fórmulas.
1
2
3
4
5
A
1
2
3
4
5
B
3
6
9
12
15
A1 = 1
A2 = 2
....
A5 = 5
B1 = 3 * A1
B2 = 3 * A2
....
B5 = 3 * A5
• Uma folha de cálculo tem uma natureza reactiva. Sempre
que uma variável muda de valor, as que são dependentes
mudam igualmente de valor.
• Por exemplo, se A1 passar para 2, B1 passará
automaticamente para B1 = 3* A1 = 3* 2 = 6.
30 Novembro 2005
Folha da Cálculo
3
Folha de Cálculo
• Por esta razão, não são permitidas fórmulas que introduzam
dependências circulares
– directas ( A1 = 2 * A1);
– ou indirectas (A1 = 2 * B1 e B1 = 2 * A1).
1
2
3
4
5
A
1
2
3
4
5
B
3
6
9
12
15
A1 = 1
A2 = 2
....
A5 = 5
• Qualquer destas fórmulas
eventualmente infinitas.
30 Novembro 2005
B1 = 3* A1
B2 = 3* A2
....
B5 = 3 * A5
levaria
Folha da Cálculo
a
computações
4
Condicionais em Folhas de Cálculo
• Em folhas de cálculo existem instruções condicionais de
atribuição de valores.
• A sua sintaxe (em EXCEL) é
if(condition, then_value, else_value)
1
2
3
4
5
A
1
2
3
4
5
B
3
6
9
0
0
A1 = 1
A2 = 2
....
A5 = 5
B1 = if (A1 <=3, 3* A1,0)
B2 = if (A2 <=3, 3* A2,0)
....
B5 = if (A5 <=3, 3* A5,0)
• Estas instruções podem encadear-se. Por exemplo
if(condition1, then_value1,
if(condition2, then_value2,
if(condition3, then_value3,value_4)))
30 Novembro 2005
Folha da Cálculo
5
Iterações em Folhas de Cálculo
• O conceito de iteração numa linguagem imperativa implica a
repetição temporal de instruções. Por exemplo, a instrução
para i de 1 até n
<instruções>
fimpara;
• Pretende fazer executar as <instruções> (de atribuição de
valores a variáveis) n vezes, em sequência.
• Numa folha de cálculo, essa iterações podem ser obtidas
através de uma repetição espacial das instruções.
• A título de exemplo, vamos calcular xn.
30 Novembro 2005
Folha da Cálculo
6
Iterações em Folhas de Cálculo
• Numa linguagem imperativa, por exemplo em Octave, o
cálculo pode ser feito através do programa
y = 1 ; x = <valor>
for i = 1:n
y = y * x
endfor;
• Neste programa, a variável y vai tomando os diversos valores
(1, x, x2, x3, ..., xn), ao longo do tempo, começando com o
valor 1, e terminando no valor xn.
30 Novembro 2005
Folha da Cálculo
7
Iterações em Folhas de Cálculo
• Numa folha de cálculo, os diferentes valores que y toma,
podem ser arrumados, ao longo do espaço, por exemplo num
conjunto de células contíguas (por exemplo, uma coluna).
1
2
3
4
5
A
2
4
8
16
32
A1
A2
A3
…
A5
= <...>
= A1 * A1;
= A2 * A1;
= A4 * A1;
X = <...>
Y1 = 1 *
Y2 = Y1 *
Y3 = Y2 *
…
Y5 = Y4 *
X
X;
X;
y = 1 ; x = <...>
for i = 1:n
y = y * x
fimfazer;
X;
• De notar que, na realidade, o mesmo programa tem de ser
“escrito” n vezes, uma vez em cada célula.
• Para evitar este inconveniente, a interface das folhas de
cálculo permite “copiar” o conteúdo de uma célula para
outras, fazendo automaticamente
o ajuste das referências.
Folha da Cálculo
30 Novembro 2005
8
Iterações em Folhas de Cálculo
• Por exemplo, se tivermos a célula B1 definida como
B1 = 2* A1
e copiarmos a célula B1 para a célula B2, como a cópia é feita
para uma célula com nº de linha superior em 1, (B1 para B2), o
valor 1 é acrescentado a todas as linhas na fórmula, obtendo-se
B2 = 2*A2
• Igualmente ao copiar uma célula para outra ao lado, a diferença
de colunas entre a célula origem e a célula destino é
acrescentada às referências a colunas. Se copiar a célula B1
para a posição D1 (2 colunas de diferença) obtém-se
D1 = 2*C1
– Nota: A cópia pode ser feita com os habituais comandos <ctrl-c> e <ctrlv>, ou por comandos de “arrastamento”.
30 Novembro 2005
Folha da Cálculo
9
Referências em Folhas de Cálculo
• As referências a linhas e colunas que são ajustadas nas cópias
de células são chamadas referências relativas (à célula de onde
são copiadas – a célula é 2 vezes superior à célula “de cima” ou
“do lado”).
• No entanto, há situações em que não queremos que estas
referências a linhas e colunas sejam relativas mas sim
absolutas, e que não sejam alteradas na cópia.
A1
A2
A3
…
A5
= <...>
= A1 * A1;
= A2 * A1;
= A4 * A1;
30 Novembro 2005
Por exemplo, ao copiar o conteúdo
da célula A2 para A3, queremos
alterar a 1ª referência a A1 para A2
(referência relativa), mas não a 2ª
referência (referência absoluta).
Folha da Cálculo
10
Referências em Folhas de Cálculo
• Para explicitarmos que uma referência é absoluta, e não se altera
quando copiada para uma linha/coluna diferentes, antecedemos
a linha/coluna pelo símbolo ‘$’.
A1
A2
A3
…
A5
= <...>
= A1 * A$1;
= A2 * A$1;
= A4 * A$1;
A cópia da célula A2 para as
células abaixo altera a referência à
linha relativa (1 acima), mas não à
referência absoluta (a célula A1).
• As referências podem ser relativas a uma dimensão e absolutas
na outra dimensão, como no exemplo presente (a linha é
absoluta, mas a coluna não é).
• Assim, se copiarmos as células A2 a A5 para as células B2 a B5,
iremos calcular B1^5.
30 Novembro 2005
Folha da Cálculo
11
Referências em Folhas de Cálculo
• As referências relativas/absolutas podem ser igualmente
utilizadas em matrizes.
1
2
3
4
5
A
2
4
8
16
32
B
3
9
27
81
243
A1
A2
A3
…
A5
= 2
= A1 * A$1;
= A2 * A$1;
= A4 * A$1;
B1
B2
B3
…
B5
= 3
= B1 * B$1;
= B2 * B$1;
= B4 * B$1;
• A iteração (temporal) pode pois ser substituída pela iteração
(espacial) mas depende do utilizador o número de células que
copia.
• Os ciclos enquanto não são assim directamente representáveis
numa folha de cálculo, se o utilizador não souber à partida o
número de iterações que devem ser efectuadas.
30 Novembro 2005
Folha da Cálculo
12
Soma de um Vector
• Os valores de um vector ou tabela numa folha de cálculo
podem ser agregados (somas, médias, etc..) de uma forma
semelhante ao que se faz numa linguagem de programação
como o Octave, com a implementação de iteração.
• Consideremos a soma de o vector nas posições A1 a E1. Em
Octave poderíamos escrever (para um vector de 5 posições).
s = 0; for i = 1:5 s = s+a(i); endfor.
• A variável s cujo valor vai sendo iterado, pode ser
substituída pelo vector B1 a B5 que vai tomando os valores
de s nas diferentes iterações
A2 = A1 + 0;
1
2
A
3
3
30 Novembro 2005
B
5
8
C
4
12
D
2
14
E
6
20
Folha da Cálculo
B2
C2
D2
E2
=
=
=
=
B1
C1
D1
E1
+
+
+
+
A2;
B2;
C2;
D2;
13
Soma Condicional de um Vector
• Em Octave podemos somar valores de um vector que
satisfaçam uma condição através de uma instrução
condicional dentro do ciclo.
• Consideremos a soma apenas dos valores positivos de um
vector nas posições A1 a E1. Em Octave poderíamos
escrever (para um vector de 5 posições).
s = 0;
for i = 1:5
if a(i) > 0 then d = a(i) else d = 0;
s = s+d;
endfor.
• Este estilo de programação pode ser adaptado a uma folha de
cálculo, utilizando-se uma linha adicional, onde se colocam
ou os valores do vector original ou o valor 0.
30 Novembro 2005
Folha da Cálculo
14
Soma Condicional de um Vector
s = 0;
for i = 1:5
if a(i) > 0 then d = a(i) else d = 0;
s = s+d;
endfor.
A2
B2
C2
D2
E2
=
=
=
=
=
if(A1
if(B1
if(C1
if(E1
if(E1
30 Novembro 2005
1
2
3
A
3
3
3
>
>
>
>
>
0,
0,
0,
0,
0,
B
-5
0
3
A1,
B1,
C1,
D1,
E1,
C
4
4
7
D
0
0
7
0);
0);
0);
0);
0);
Folha da Cálculo
E
6
6
13
A3
B3
C3
D3
E3
=
=
=
=
=
A2
B2
C2
D2
E2
+
+
+
+
+
0;
A3;
B3;
C3;
D3;
15
Funções para Somas de Vectores
• Tal como em Octave, também as folhas de cálculo permitem
a utilização de funções. O paralelo é ainda maior do que
noutras linguagens de programação, porque em Octave
vectores e matrizes são tipos básicos, permitindo referências
a subvectores e submatrizes.
• Assim em Octave, a soma dos elementos de um vector V
com n elementos é obtida através da função
s = sum(V)
• Se se pretender somar apenas os valores do subvector
constituído pelos elementos 3 a 7, podemos usar a referência
a esse subvector na função através de
s = sum(V(3:7))
30 Novembro 2005
Folha da Cálculo
16
Funções para Somas de Vectores
• Numa folha de cálculo, podemos usar igualmente a função
sum, sendo o vector delimitado entre a sua célula inicial e
final.
– Quer no caso de um vector linha F1 = SUM(A1:E1)
1
A
3
B
-5
C
4
D
0
E
6
F
8
G
13
– Quer no caso de um vector coluna A6 = SUM(A1:A5)
• Estas funções podem ainda utilizar-se para somas
condicionais:
G1 = SUMIF(A1:E1,">0")
A7 = SUMIF(A1:A5,">0")
30 Novembro 2005
Folha da Cálculo
1
2
3
4
5
6
7
A
3
-5
4
0
6
8
13
17
Soma de uma Matriz
• As mesmas técnicas podem ser utilizadas no caso de
matrizes, sendo mais “prático” o uso de funções.
1
2
3
4
5
A
0
-3
2
-1
2
B
-3
1
0
-2
1
C
4
7
3
14
14
D
2
9
-4
7
11
E
3
14
1
18
28
F
6
17
5
28
28
A4 = SUM(A1:A3)
.....
D4 = SUM(D1:D3)
F1 = SUMIF(A1:D1,”>0”)
F2 = SUMIF(A1:D1,”>0”)
F3 = SUMIF(A1:D1,”>0”)
E4 = SUM(A1:D4)
A5 = SUMIF(A1:A3,”>0”)
...
D5 = SUMIF(D1:D3,”>0”)
30 Novembro 2005
E1 = SUM(A1:D1)
E2 = SUM(A2:D2)
E3 = SUM(A3:D3)
Folha da Cálculo
F4 = SUM(F1:F3)
E5 = SUM(E1:E4)
F5 = SUMIF(A1:D4,”>0”)
18
Download

A1 - SSDI