segunda-feira, 28 de julho de 2008

Introdução às estruturas de dados

Antes de começarmos nosso “diálogo” sobre estruturas dados, faremos uma breve definição de algoritmo:
Algoritmo é um conjunto finito de regras, bem definidas, para a solução de um problema em um tempo finito e com um número finito de passos. A execução de um algoritmo por um computador é chamado processamento de dados. *
Para desenvolvermos um algoritmo necessitamos de alguns componentes, dentre estes as estruturas de dados.
Dados são representações de informações usadas por um algoritmo. Isto inclui dados de entrada e saída, bem como dados gerados pelo algoritmo para seu próprio uso.
Quando um algoritmo é executado por um computador, os valores dos dados por ele manipulados devem ser armazenados em algum “depósito”, de modo que tais valores estejam disponíveis para serem usados pelo algoritmo a qualquer momento. A definição da organização interna de tais “depósitos”, assim como a relação entre suas partes é conhecida como estrutura de dados.
Na maior parte das vezes, desejamos que um “depósito” de dados seja variável, isto é, que o seu conteúdo possa ser alterado durante a execução do algoritmo. Outras vezes, queremos que o conteúdo de um “depósito” de dados seja constante, ou seja, que ele não seja alterado durante a execução do algoritmo.
Para exemplificar, considere o problema seguinte:
Encontrar o valor da soma de dois números inteiros (designados pelo usuário do programa), e a partir desse resultado, informar ao usuário o dobro desta soma.

inicio
inteiros: A,B,C;
imprima (‘Digite dois números inteiros.’);
leia (A,B);
C ← A+B;
C ← C*2;
imprima (‘O valor da soma dos dois dígitos multiplicado por 2 é =’ C)
fim.

No exemplo acima, A e B são “depósitos” de dados constantes (determinados pelo usuário do programa), e C é um “depósito” de dados variáveis, visto que seu conteúdo mudou durante a execução do algoritmo.
As principais estruturas a serem manipuladas nos algoritmos são classificadas em homogêneas e heterogêneas, os dois tipos permitem agrupar diversas informações dentro de uma mesma variável. No entanto, a homogênea ocorrerá obedecendo sempre ao mesmo tipo de dado e na heterogênea ocorrerão diferentes tipos de dados.


A elaboração de um algoritmo que armazene as notas de cinco alunos diferentes, e as imprima caso estas sejam maiores que 7.0, poderia ser feita como é sugerido no português estruturado a seguir.

inicio
real : ALUNO1,ALUNO2,ALUNO3,ALUNO4,ALUNO5, MEDIA;
MEDIA ← 7,0
imprima ("Informe a nota do 1º aluno: ");
leia (ALUNO1);
se aluno1> media então;
imprima (aluno1);
fimse;
imprima ("Informe a nota do 2º aluno: ");
leia (ALUNO2);
se aluno2> media então;
imprima (aluno2);
fimse;
imprima ("Informe a nota do 3º aluno: ");
leia (ALUNO3);
se aluno3> media então;
imprima (aluno3);
fimse;
imprima ("Informe a nota do 4º aluno: ");
leia (ALUNO4);
se aluno4> media então;
imprima (aluno4);
fimse;
imprima ("Informe a nota do 5º aluno: ");
leia (ALUNO5);
se aluno5> media então;
imprima (aluno5);
fimse;
fim


Por meio deste algoritmo seria possível ler cinco notas de cinco alunos diferentes e armazená-las em cinco diferentes variáveis. Uma instrução de repetição não melhoraria muito esta lógica, pois os cinco valores precisarão estar disponíveis independente dos outros valores informados. Como podemos constatar, não fomos capazes de utilizar uma estrutura de repetição para armazenar as notas eram superiores à média, mesmo embora houvesse 5 estruturas condicionais idênticas, a menos da variável com o valor da nota, para realizar o cálculo desejado. No caso do problema acima, esta redundância não chega a ser um “fardo”, mas imagine se a leitura de todas as notas dos alunos do seu curso tivessem quer ser lidas pelo seu algoritmo, o que faríamos? E no próximo semestre quantos alunos seriam?
Felizmente, para problemas como este, temos uma forma eficaz de solução, que utiliza uma estrutura de dados denominada vetor, que será abordado na nossa próxima postagem.






*Para saber mais sobre algoritmo o leitor poderá acessar http://algoritmosuefs.blogspot.com/

0 comentários: