220 likes | 363 Views
Folha de Cálculo. Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006. Folha de Cálculo. A informação numa folha de cálculo está estruturada com base em matrizes, ou tabelas.
E N D
Folha de Cálculo Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006 Folha de Cálculo
Folha de Cálculo • A informação numa folha de cálculo está estruturada com base em matrizes, ou tabelas. • 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” Folha de Cálculo
Folha de Cálculo • Tal como numa linguagem de programação, a uma variável podem ser atribuidos valores, constantes ou dependentes de outras variáveis através de fórmulas. B1 = 3 * A1 B2 = 3 * A2 .... B5 = 3 * A5 A1 = 1 A2 = 2 .... A5 = 5 • 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, B2 passará automáticamente para B1 = 2* A1 = 2* 2 = 4. Folha de Cálculo
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 = 3 * B1 e B1 = 4 * A1). • Qualquer destas fórmulas levaria a computações eventualmente infinitas. A1 = 2 * 2 * 2 * 2 * 2 * ... A1 = 3 * 4 * 3 * 4 * 3 * ... • Nota: As folhas de cálculo permitem controlar o número de computações mas, em geral, as referências circulares devem ser evitadas. Folha de Cálculo
Condicionais em Folhas de Cálculo • Em folhas de cálculo há instruções condicionais de atribuição de valores (não condicionais de controle de execução) • A sua sintaxe (em EXCEL) é if(condition, then_value, else_value) 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))) Folha de Cálculo
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, com a instrução para i de 1 até n fazer <instruções> fimfazer; pretende-se 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. Folha de Cálculo
Iterações em Folhas de Cálculo y = 1 ;x = <valor> for i = 1:n y = y * x fimfazer; • Numa linguagem imperativa, por exemplo em Octave, o cálculo pode ser feito através do programa • 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. • 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). Folha de Cálculo
Iterações em Folhas de Cálculo • Numa linguagem imperativa, por exemplo em Octave, o cálculo pode ser feito através do programa X= <...> Y1 = 1 * X Y2 = Y1 * X; Y3 = Y2 * X; … Y5 = Y4 * X; A1 = <...> A2 = A1* A1; A3 = A2* A1; … A5 = A4 * A1; y = 1 ;x = <...> for i = 1:n y = y * x fimfazer; • 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 automáticamante o ajuste das referências. Folha de Cálculo
Iterações em Folhas de Cálculo • Por exemplo, se tivermos a célula B1 definida como B1 = 2* A1 e a copiarmos “para baixo”, i.e. para 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 “para o lado” uma célula, 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) obtem-se D1 = 2*C1 • Nota: A cópia pode ser feita com os habituais comandos <ctrl-c> e <ctrl-v>, ou por comandos de “arrastamento”. Folha de Cálculo
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 varia n colunas/linhas em relação às 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. 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). A1 = <...> A2 = A1* A1; A3 = A2* A1; … A5 = A4 * A1; Folha de Cálculo
A1 = <...> A2 = A1* A$1; A3 = A2* A$1; … A5 = 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). 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 ‘$’. • 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. Folha de Cálculo
Referências em Folhas de Cálculo • As referências relativas/absolutas podem ser igualmente utilizadas em matrizes. A1 = 2 A2 = A1* A$1; A3 = A2* A$1; … A5 = A4 * A$1; B1 = 3 B2 = B1* B$1; B3 = B2* B$1; … B5 = 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, isto é, o número de iterações a efectuar. • 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. Folha de Cálculo
Referências em Folhas de Cálculo • Podem ainda ser utilizadas referências “mistas” , que são particularmente úteis no caso de se pretenderem preencher tabelas relativas a uma linha e uma coluna. • Por exemplo, a tabela de multiplicação acima pode ser obtida por • Obter a célula B2 através da multiplicação A2 * B1 • Tornar absolutas as referências à linha 1 em B1 e à coluna A, em A2, ficando $A2 * B$1 • Copiar esta célula para todas as células na matriz B2:E5. Folha de Cálculo
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; B2 = B1 + A2; C2 = C1 + B2; D2 = D1 + C2; E2 = E1 + D2; Folha de Cálculo
Soma Condicional de um Vector • Em Octave podemos somar valores de um vector que satisfaçam ums 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 um folha de cálculo, utilizando-se uma linha adicional, onde se colocam ou os valores do vector original ou o valor 0. Folha de Cálculo
A2 = if(A1 > 0, A1, 0); B2 = if(B1 > 0, B1, 0); C2 = if(C1 > 0, C1, 0); D2 = if(E1 > 0, D1, 0); E2 = if(E1 > 0, E1, 0); A3 = A2 + 0; B3 = B2 + A3; C3 = C2 + B3; D3 = D2 + C3; E3 = E2 + D3; 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. Folha de Cálculo
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) • Ainda em Octave, 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)) Folha de Cálculo
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) • 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") Folha de Cálculo
Operações de Vectores “Ponto a Ponto” • Tal como em Octave, operações sobre elementos de um vector/matriz, podem ser condicionadas através da utilização de vectores/matrizes booleanas, que filtram os elementos a utilizar. • Por exemplo,em Octave, a soma de todos os elementos positivos de um vector A pode ser efectuada através da instrução B = sum(A.*(A>0)) que pode ser decompostas nas seguintes operações: • Criação de um vector booleano, A > 0, com 1s nas posições correspondentes a elementos positivos do vector A • Obtenção do vector A.*(A>0), igual a A nas posições em que A é positivo e com 0s nas outras posições. • Soma dos elementos deste vector, que corresponde à soma dos elementos positivos do vector A (os outros foram “filtrados” pela multiplicação por 0). Folha de Cálculo
Operações de Vectores “Ponto a Ponto” • As mesmas operações “ponto a ponto” podem ser efectuadas na folha de cálculo, como ilustrado acima. • Sendo o vector A constituído pelas células A1:E1, na linha 2 é criado o vector A>0, indicando para cada célula Bi a operação Bi = Ai > 0 • Na linha 3 são multiplicados os dois vectores, ponto a ponto. • A soma dos elementos positivos do vector A é assim obtida na célula E3 através da função sum(A3:E3). • De notar, que o mesmo conjunto de operações podia ser efectuado através de uma única função entre vectores {=sum(A3:E3*(A3:E3>0))} Nota: As {} são inseridas através de CTRL-SHIFT-ENTER em vez do simples ENTER. Folha de Cálculo
Soma de uma Matriz E1 = SUM(A1:D1) E2 = SUM(A2:D2) E3 = SUM(A3:D3) • As mesmas técnicas podem ser utilizadas no caso de matrizes, sendo mais “prático” o uso de funções. F1 = SUMIF(A1:D1,”>0”) F2 = SUMIF(A1:D1,”>0”) F3 = SUMIF(A1:D1,”>0”) A4 = SUM(A1:A3) ..... D4 = SUM(D1:D3) E4 = SUM(A1:D4) F4 = SUM(F1:F3) E5 = SUM(E1:E4) F5 = SUMIF(A1:D4,”>0”) A4 = SUMIF(A1:A3,”>0”) ... D4 = SUMIF(D1:D3,”>0”) Folha de Cálculo
Exemplo: Queda Livre g = 9.8 % aceleração da gravidade h = % altura inicial (em metros) k = % coeficiente de atrito (1/s) dt = % intervalo de tempo (em segs) ? t = 0; x = h; v = 0; a = g; while x < h t = t + dt; x = x + v * dt; v = v + a * dt; a = g - k * v; endwhile; Folha de Cálculo