Buscar

Algoritmos e Estruturas de Dados

Prévia do material em texto

CAPÍTULO 1- ALGORITMOS E ESTRUTURAS DE DADOS
“A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original.”
Albert Einstein
1.O Conceito de Algoritmos e as Estruturas Básicas de Controle:
	O conceito principal da programação e da ciência de computação é o algoritmo, ou seja, o programa é basicamente construir algoritmos. Wirth define que a programação estruturada como “a arte ou técnica de construir e formular algoritmos de uma forma sistemática”. Portanto, programas são formulações concretas de algoritmos abstratos, representados em estruturas específicas de dados.
 	Observando essa definição temos outro aspecto fundamental de construção de programas: as estruturas de dados usadas no algoritmo para representar as informações do programa a ser resolvido. De fato, no processo de construção de programas, a formulação estruturada do algoritmo e definição das estruturas dos dados a serem usadas estão intimamente relacionadas. A tal ponto, que as definições sobre a estruturação dos dados não podem ser feitas sem conhecimento de algoritmos e a estrutura e, consequente, escolha de algoritmos depende muitas vezes fortemente da estrutura dos dados.
	Em um algoritmo podemos distinguir aspectos complementares: um aspecto estático e um aspecto dinâmico. A formulação de um algoritmo geralmente consiste em um texto contendo comandos (instruções) que devem ser executadas numa ordem prescrita. Esse texto é uma representação do aspecto estático, atemporal.
	Por outro lado, o texto não nos interessa em si, mas pelos efeitos que pode evocar sua execução no tempo, dado um conjunto de “valores iniciais”. Na prática, cada execução de um algoritmo é um evento dinâmico, evoluindo no tempo.
	A dificuldade na concepção e no entendimento de algoritmo é a capacidade de abstração individual, ou seja, como visualizar as estruturas dinâmicas das possíveis execuções do algoritmo a partir da estrutura estática do algoritmo.
	O algoritmo deve ser criado para realizar uma ação. Essa ação deve ser processada em período de tempo finito, estabelecendo um efeito intencionado e bem definido. Exemplo:
	“traz a cesta com batatas do porão”;
	“traz panela do armário”;
	“descasca as batatas”;
	“devolver a cesta ao porão”
	Se estamos interessados em uma ação, é pelo efeito que ela produz. Naturalmente, esse efeito tem ser bem definido e se realizar em determinado período de tempo e sejam realizados em processo sequenciais. Geralmente, essa ação é moldada pelo padrão de comportamento apresentado no problema: em dias diferentes uma dona de casa descasca batatas para o jantar. Esse evento tem em comum a repetição do padrão de comportamento da dona de casa ao descasca a batata, tornando possível supor ação previsível, ou seja, a elaboração de um algoritmo.
	Seguindo ensinamento de Ângelo de Moura Guimarães e Newton Alberto de Castilho Lages: “Um algoritmo é a descrição de um padrão de comportamento, expressado em termos de um repertório bem definido e finito de ações primitivas, das quais damos por certo que elas podem ser executadas” (Algoritmos e estruturas de dados.2014, p.4).
	Na verdade um algoritmo tem caráter imperativo, e ação realizada é chamada de comando. Um algoritmo é uma norma executável para estabelecer um efeito desejado, que na prática será a solução de um determinado problema. 
	Observando o exemplo anterior:
“Traz a cesta com batatas do porão”;
	“Traz panela do armário”;
	“Descascar as batatas”;
	“Devolver a cesta ao porão”
O símbolo do sequenciamento ‘ ; ’ tem duas finalidades: no texto, a separação de um comando do outro; no evento algoritmo pode evocar, a de indicar que os comandos separados deverão ser executados na mesma sequência em que aparecem no texto. O ‘ ; ’ representa a mais simples das chamadas estruturas de fluxo de controle: a sequência simples.
Em suma:
Um algoritmo deve ser determinístico, isto é, dadas as mesmas condições iniciais deve se produzir, depois de executado, os mesmos resultados.
Só estamos interessados nos algoritmos que terminam em um tempo finito.
2- Programas e Estruturas de Dados:
	O computador para realizar as funções para qual foi planejado, depende dos programas que são criados a partir de algoritmos e armazenado na memória.
	O computador possui uma memória que é capaz de armazenar dados e uma unidade aritmética, que é alterar as informações contidas na memória. Além disso, o computador se comunica através de operações de entrada e saída. Essas comunicações são resultantes da interação entre software, hardware e usuários. 
	Para tornar possível o uso do computador para a maioria das pessoas, foram necessárias adaptações por meio da linguagem de programação, criando interface mais agradáveis para o usuário. Ademais, se aprimorou todo o sistema de proteção de informações e permitiu o acesso das pessoas a informação pela internet através de ampliação de redes de computadores.
	Mas como surgiu a linguagem de programação?
	Ele surgiu da aplicação de conceitos matemáticos e lógicos. Primeiramente, utilizou-se a noção de conjuntos e de sistemas seja decimal e binário. 
	Nesse processo temos três fases que podem ser definidas:
A escolha das propriedades importantes do objeto real que queremos representar;
A escolha da forma de representação, com base nas operações a serem realizadas sobre elas.
A demonstração de que o par representação-manipulação produz resultados de acordo com os fenômenos do mundo real correspondente.
Em suma, uma linguagem de programação é uma técnica de notação para programar, com o escopo de expressar um raciocínio algorítmico e de execução automática de algoritmo por um computador.
3-Programação Estruturada:
A Programação Estruturada consiste no uso de uma metodologia de projeto de programa visando a:
Facilitar a escrita dos programas;
Facilitar a leitura dos programas;
Permitir a verificação dos programas;
Facilitar a manutenção e alteração dos programas.
Os grandes sistemas de software possuem uma grande complexidade, cuja apreensão vai, geralmente, muito além da capacidade intelectual de um ser humano. Referindo-se, nesse caso, a complexidade de um sistema uma medida do número de seus componentes e do grau de interação entre eles. Segundo o ensinamento de Dijkstra temos: “a arte de programa consiste na arte de organizar e dominar a complexidade.”
Portanto, a tarefa básica do programador é reduzir a complexidade:
Desenvolvimento do programa em diferentes fases por refinamentos sucessivos (desenvolvimento top-down);
Decomposição do programa total em módulos funcionais, organizados de preferência num sistema hierárquico (modularização);
Usando dentro de cada módulo só um número limitado de estruturas básicas de fluxo de controle (Estruturas de controle).

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes