Arrays de uma dimensão
Existem situações em que necessitamos de ter muitas variáveis, cada qual mais ou menos com a mesma função. Isso acontece muitas vezes quando trabalhamos com listas ou sequências de números. Por exemplo, a média de uma lista de n números, X1, X2, ..., Xn, é definida como: média = (X1 + X2 + ... + Xn) / n
e o desvio de cada número em relação à média é dado pela fórmula: desvio = Xi - média , para i = 1,2,...,n
Imaginem que queríamos fazer um programa para calcular a média de uma lista de 10 números e o desvio de cada número em relação à média. Com a matéria que aprendemos até agora, teríamos de fazer qualquer coisa deste estilo: float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10;
float d1, d2, d3, d4, d5, d6, d7, d8, d9, d10;
float media;
...
media = (x1+x2+x3+x4+x5+x6+x7+x8+x9+x10) / 10;
d1 = x1 - media;
d2 = x2 - media;
...
d10 = x10 - media;
Se em vez de 10 números fossem 100, teríamos de declarar 100 variáveis e isso seria uma grande chatice. É aqui que surge o conceito de array. A definição seguinte: float x[10];
define um array de nome x com 10 posições, cada uma correspondendo a uma variável do tipo float. Um array é como se fosse uma lista ou sequência de variáveis. Na linguagem C, os arrays começam sempre na posição 0. Por isso, a declaração float x[10] define as variáveis: x[0], x[1], x[2], ..., x[9]
Depois de definido o array, os seus elementos podem ser acedidos e modificados individualmente, tal e qual como nas variáveis que vimos até agora. Por exemplo: x[7] = 54;
a = x[7];
O caso geral da definição de um array é: tipo nome[dimensão]
Se quisermos definir um array de nome a com 5 posições, cada qual podendo conter um número inteiro, temos de escrever:
int a[5];
pensar no array a como se fosse uma sequência de 5 caixas, cada qual do tipo int, indexadas pelos índices 0,1,2,3,4.
depois de efectuar as seguintes instruções:
a[0] = 134;
a[1] = 5;
a[2] = 71;
a[3] = -65;
a[4] = 12;
o estado do array a passa a ser
Depois desta breve introdução, vamos fazer o programa para calcular a média de uma lista de 10 números e os respectivos desvios em relação à média.
#include <stdio.h>
main()
{
float x[10]; /* lista de números */
float desvio[10]; /* desvios em relação à média */
float soma;
float media;
int i;
/* introdução dos números e cálculo da média */
soma = 0;
printf("Introduz 10 números: ");
for( i=0; i<10; i++ )
{
scanf("%f", &x[i] );
soma = soma + x[i];
}
media = soma / 10;
/* calculo dos desvios */
for( i=0; i<10; i++ )
desvio[i] = x[i] - media;
/* escreve a média, os números, e os respectivos desvios */
printf("A média é %f\n", media );
for( i=0; i<10; i++ )
printf("x[%d] = %f desvio[%d] = %f\n", i, x[i], i, desvio[i] );
}
Atenção: Têm que ter cuidado e não aceder a posições fora dos limites do array. Por exemplo, se definirem:
float x[10];
e tentarem aceder a x[12] o compilador não dá erro, mas o programa vai comportar-se de um modo imprevisível.Apesar de funcionar correctamente, o programa pode ser melhorado através da definição de uma constante.
#include <stdio.h>
#define N 10
main()
{
float x[N]; /* lista de números */
float desvio[N]; /* desvios em relação à média */
float soma;
float media;
int i;
/* introdução dos números e calculo da média */
soma = 0;
printf("Introduz %d números: ", N);
for( i=0; i<N; i++ )
{
scanf("%f", &x[i] );
soma = soma + x[i];
}
media = soma / N;
/* calculo dos desvios */
for( i=0; i<N; i++ )
desvio[i] = x[i] - media;
/* escreve a média, os números, e os respectivos desvios */
printf("A média é %f\n", media );
for( i=0; i<N; i++ )
printf("x[%d] = %f desvio[%d] = %f\n", i, x[i], i, desvio[i] );
}
Este é um bom exemplo para ilustrar a vantagem da utilização de constantes. Se em vez de 10 números quisermos 100, basta alterar a linha da definição da constante para: #define N 100
Se não tivéssemos usado a constante N, teríamos de vasculhar o programa todo e substituir as ocorrências de 10 por 100. Isso torna o programa mais difícil de modificar. Além disso, mais facilmente se pode introduzir erros de execução. Por exemplo, podíamos esquecer de substituir um dos 10 por 100. O programa funcionaria na mesma, mas iria dar resultados errados.
Comentários
Enviar um comentário