40
ALGORITMOS E LÓGICA DE PROGRAMAÇÃO Cesar Bezerra Teixeira,MSc PREFÁCIO Programação é a arte de escrever roteiros para execução no computador. Tais roteiros destinam-se às mais diversas tarefas, indo desde arte até software embarcado em aviões e naves espaciais. É um fascinante ramo do Conhecimento, mesmo para aqueles que não a utilizam como profissão. Desde o primeiro contato que tive com essa arte, fui capturado por uma “febre”, que nos leva a passar horas tentando montar programas e a cada dia somos apresentados a uma fonte que parece inesgotável. Na verdade estar atualizado é um eterno desafio, a tecnologia muda constantemente, surgindo a cada dia novas linguagens e técnicas. Destarte a grande necessidade de atualização tecnológica, a programação necessita de algumas características fundamentais, sendo as mais importantes, um bom conhecimento de Matemática e Lógica. Em todos os cursos que utilizam programação como ferramenta (Computação, Engenharia, Tecnologia da Informação,...), a cadeira de Algoritmos e Lógica de programação é básica, mas cada curso tem um propósito específico e encontrar um material didático que atenda a um determinado conteúdo programático é uma tarefa bastante árdua. Com finalidade de suprir essa deficiência e baseado nos anos como professor e nos muitos cursos de programação que ministrei, procurei preparar um material que fosse comum a todos aqueles que querem dar seus primeiros passos na Lógica de Programação. Espero conseguir transmitir de uma maneira fácil, esta matéria tão importante para aqueles que desejam tornar-se profissionais dos “bits e bytes” ou para os apaixonados por essa Arte. Finalmente gostaria de ressaltar que por melhores que tenham sido meus esforços para produzir um bom material, muitos erros devem ser encontrados e me coloco inteiramente à disposição de meus leitores, para esclarecimentos adicionais ou para receber suas sugestões. Boa Leitura !!! Cesar Bezerra Teixeira

ALGORITMOS E LÓGICA DE PROGRAMAÇÃO Cesar Bezerra … · 2.5) Pseudo-Código: 2.5.1) Identificadores, Constantes, Variáveis e tipos Básicos ... FORTRAN criada em 1954, tendo seu

Embed Size (px)

Citation preview

ALGORITMOS E LÓGICA DE PROGRAMAÇÃOCesar Bezerra Teixeira,MSc

PREFÁCIO

Programação é a arte de escrever roteiros para execução no computador. Tais

roteiros destinam-se às mais diversas tarefas, indo desde arte até software embarcado

em aviões e naves espaciais. É um fascinante ramo do Conhecimento, mesmo para

aqueles que não a utilizam como profissão. Desde o primeiro contato que tive com essa

arte, fui capturado por uma “febre”, que nos leva a passar horas tentando montar

programas e a cada dia somos apresentados a uma fonte que parece inesgotável. Na

verdade estar atualizado é um eterno desafio, a tecnologia muda constantemente,

surgindo a cada dia novas linguagens e técnicas.

Destarte a grande necessidade de atualização tecnológica, a programação

necessita de algumas características fundamentais, sendo as mais importantes, um bom

conhecimento de Matemática e Lógica. Em todos os cursos que utilizam programação

como ferramenta (Computação, Engenharia, Tecnologia da Informação,...), a cadeira de

Algoritmos e Lógica de programação é básica, mas cada curso tem um propósito

específico e encontrar um material didático que atenda a um determinado conteúdo

programático é uma tarefa bastante árdua.

Com finalidade de suprir essa deficiência e baseado nos anos como professor e

nos muitos cursos de programação que ministrei, procurei preparar um material que fosse

comum a todos aqueles que querem dar seus primeiros passos na Lógica de

Programação. Espero conseguir transmitir de uma maneira fácil, esta matéria tão

importante para aqueles que desejam tornar-se profissionais dos “bits e bytes” ou para os

apaixonados por essa Arte. Finalmente gostaria de ressaltar que por melhores que

tenham sido meus esforços para produzir um bom material, muitos erros devem ser

encontrados e me coloco inteiramente à disposição de meus leitores, para

esclarecimentos adicionais ou para receber suas sugestões.

Boa Leitura !!!

Cesar Bezerra Teixeira

SUMÁRIOCAP 1 - INTRODUÇÃO

1.1) Generalidades

1.2) Conceitos Básicos:

1.3) Desenvolvimento de SI e o Programador

1.4) O Computador à gaveta

1.5) Exercícios

CAP 2 - SOLUÇÃO DE PROBLEMAS USANDO ALGORITMOS2.1) Problemas e Soluções

2.2) Definições de Algoritmos

2.3) Técnicas de Representação de Algoritmos

2.4) Algoritmos Estruturados

2.5) Pseudo-Código:

2.5.1) Identificadores, Constantes, Variáveis e tipos Básicos

2.5.2) Palavras Reservadas

2.5.3) Comando de Atribuição

2.5.4) Operadores

2.5.5) Entrada e Saída de Dados

2.5.6) Estrutura de um Algoritmo em pseudo-código

2.6) Documentação

2.7) Exercícios

CAP 3 - ESTRUTURAS BÁSICAS DE CONTROLE3.1) Seqüência

3.2) Seleção:

3.3) Repetição:

3.4) Como construir bons algoritmos

3.5)Exercícios

CAP 4 - REGISTROS4.1) Introdução

4.2) Registros:

4.3) Arquivos:

4.4)Exercícios

CAP 5 - VETORES E MATRIZES5.1) Vetores:

5.2) Matrizes

5.3) Exercícios

CAP 6 - MODULARIZAÇÃO DE ALGORITMOS6.1) Procedimentos

6.2)Funções

6.3) Estruturação dos Módulos de um Algoritmo

6.4)Exercícios

CAP 7 - ALGORITMOS DE PESQUISA E ORDENAÇÃO7.1) Introdução

7.2) Algoritmos de Pesquisa:

7.3) Algoritmos de Ordenação:

CAP 8 – TÓPICOS AVANÇADOS8.1) Introdução

8.2) O processo de tradução;

8.3) Introdução à Teoria de Sistemas

8.4) Programas, Algoritmos e Estruturas de Dados

CAPÍTULO 1OBJETIVO

"Apresentar os principais conceitos relativos à Arte de Programar Computadores."

SUMÁRIO1.1) Generalidades

1.2) Conceitos Básicos:

1.3) Desenvolvimento de SI e o Programador

1.4) O Computador à Gaveta

1.5) Exercícios

1.1) GENERALIDADESProgramação de Computadores Digitais, é uma atividade que remonta o início do

século XX, desde o surgimento das primeiras linguagens de programação. Inicialmente

aprendia-se a programar usando-se a própria linguagem como ferramenta. A linguagem

FORTRAN criada em 1954, tendo seu primeiro compilador terminado em 1957 e foi

durante muito tempo usada para o ensino da arte da programação, inclusive no Brasil.

Nas décadas de 60 e 70, com o aparecimento de outras linguagens, um método gráfico, o

FLUXOGRAMA, foi grandemente utilizado em complemento ao anterior.

Atualmente após o aparecimento de centenas de linguagens de programação e

vários métodos de representação da solução de problemas, pode-se estudar

programação, sem que se utilize uma linguagem em particular, aprendendo-se como

construir Algoritmos. O objetivo a alcançar com o estudo de algoritmos é desenvolver a

capacidade de transformar um problema complexo em um algoritmo de boa qualidade,,

utilizando os conceitos da teoria de sistemas e o princípio do “dividir para conquistar”, ou

seja um grande problema deve ser dividido em partes menores, tratáveis. A soma da

solução das partes menores, resolverá o problema como um todo.

1.2) CONCEITOS BÁSICOS

Dados Elementos brutos que podem ser processados por um

computador digital, para se obter alguma conclusão ou resultado.

Computador Máquina (hardware) muito rápida que pode processar dados,

Digital realizando cálculos e operações repetitivas, integrantes de um

programa (software), fornecendo resultados corretos e precisos.

Informação É o resultado do processamento de dados pelo computador,

representa um estágio superior ao do simples dado, possui valor

agregado, em relação àquele.

Hardware Termo de origem americana que engloba todo o equipamento

principal e periférico de um computador(parte física).

Software Outro termo de origem americana que engloba programas,

documentação, procedimentos, dados, utilizados em um

computador para resolução de problemas.

Programa de Seqüência de instruções não ambíguas, finitas, escritas em uma

Computador linguagem de programação específica, que resolvem um

determinado problema.

Linguagem É a linguagem binária (composta de zeros e uns)

de Máquina utilizada pelos computadores, internamente, para representar

dados, programas e informações. É tediosa, difícil de se

compreender e fácil de gerar erros na programação. É a

linguagem de programação mais baixo nível.

Linguagem É uma linguagem mnemônica, particular para cada processador,

Assembler que codifica as instruções em linguagens de máquina, visando

facilitar um pouco o trabalho do programador. É também

considerada uma linguagem de baixo nível.

Linguagem Também chamada de linguagem de alto nível, engloba todas as

de 3a linguagens de programação que utilizam compiladores e

Geração interpretadores. Possuem instruções mais poderosas e mais

fáceis de se compreender que a linguagem ASSEMBLER,

facilitando o trabalho do programador.

Linguagem São linguagens não procedurais, utilizadas para sistemas de

de 4a gerenciamento de banco de dados, planilhas e outros

Geração aplicativos que utilizam comandos mais poderosos que as de 3ª

Geração, sendo mais fáceis de programar(Ex.: SQL).

Compilador É um programa utilizado para traduzir os programas escritos

pelo programador nas linguagens de alto nível (programa

fonte) para a linguagem de máquina (programa executável), a

fim de que possa ser executado no computador.

Interpretador É um programa que traduz os programas escritos pelo programa-

dor para a linguagem de máquina, no momento da execução, não

existindo portanto o programa executável.

Um importante conceito é de que o computador é uma máquina elétrica, ou seja, o

final do processo da execução de um programa será a ativação de sinais elétricos, que

farão o computador se comportar como planejamos. Num nível acima dos circuitos está a

linguagem de máquina fornecida pelo fabricante. Neste nível também há grande

complexidade e por esta razão surgiram as linguagens de programação. O diagrama a

seguir ilustra de forma bastante sucinta, o processo que transforma um roteiro escrito

numa linguagem de programação, para um roteiro em linguagem de máquina que pode

ser executado diretamente pelo computador.

FONTE => COMPILADOR / INTERPRETADOR => LINGUAGEM DE MÁQUINA

HARDWARE

O hardware de um computador, segundo a arquitetura básica proposta por

Von Neumann, é composto dos seguintes elementos principais:

a) Unidade Central de Processamento, composta de:

- Unidade de Aritmética e Lógica, responsável pela realização de todas as operações

lógicas e aritméticas no computador;e

- Unidade de Controle, responsável pelo controle de todos os elementos do computador e

periféricos, recebendo sinais de estado destes e gerando sinais de controle para estes.

b) Memória Principal, é o elemento que armazena programas, dados e informações

(resultados)durante a execução de um programa. Cada posição de memória possui um

endereço e um conteúdo.

c) Dispositivos de Entrada/Saída ou Periféricos, são os responsáveis pela entrada de

dados na UCP/MP e a saída de informações da UCP/MP.

A Figura a seguir ilustra a Arquitetura de Von Neumann:

A memória (secundária) é a responsável pelo armazenamento em caráter

permanente de programas e dados, é onde se localizam os arquivos de dados, de

programas ou de saída (resultados). A memória primária é normalmente volátil,

perdendo seus dados ao desligarmos o computador.

SOFTWARE

O software de um computador é o que determina seu uso e os resultados que

serão produzidos e apresentados. Em um computador digital existem diversos tipos de

software, em camadas, com finalidades e complexidades diferentes. Normalmente,

quanto mais relacionado e próximo ao hardware, mais complexo e difícil de se

desenvolver e manter ele é. O diagrama a seguir procura ilustrar as diversas camadas de

software:

1) ALGORITMOS

2) PROGRAMAS APLICATIVOS

3) COMPILADORES / INTERPRETADORES

UTILITÁRIOS

PROCESSADORES DE TEXTO

BANCO DE DADOS

PLANILHAS

4) SISTEMA OPERACIONAL

5) HARDWARE

UNIDADESDE

ENTRADA

UNIDADEDE

PROCESSAMENTO

UNIDADESDESAÍDA

MEMÓRIA

1.3) DESENVOLVIMENTO DE SI E O PROGRAMADORUm sistema de informação pode ser definido como um sistema baseado em

computador, que auxilia, automatiza e otimiza o funcionamento de qualquer atividade,

através de:

1. Redução da participação do homem em atividades rotineiras e repetitivas;

2. Aumento da facilidade na coleta e armazenamento de dados e na rapidez de

recuperação e manuseio destes;

3. Redução do número de erros produzidos em operações de coleta, arquivamento e

recuperação de dados e informações;

4. Aumento da facilidade e flexibilidade na geração de relatórios, entre outros.

Para entender o papel do analista de sistemas e do programador é necessário

entender as etapas componentes do ciclo de vida:

1ª Fase = Estudo de Viabilidade (Estudos Iniciais)

2ª Fase = Análise Detalhada do Sistema (Projeto Lógico)

3ª Fase = Projeto Preliminar do Sistema (Projeto Físico)

4ª Fase = Projeto Detalhado do Sistema (Algoritmos)

5ª Fase = Codificação

6ª Fase = Teste

7ª Fase = Implantação

8ª Fase = Entrega

9ª Fase = Manutenção

No desenvolvimento de um projeto, quanto mais tarde um erro é detectado, mais

dinheiro e tempo são gastos para repará-lo.

1.4) O COMPUTADOR “À GAVETA”Para uma compreensão inicial do conceito de algoritmo e como ele pode ser

executado num computador, será utilizado um modelo imaginário de computador, o computador à gaveta . Tal dispositivo tem as características básicas de um computador

real, possuindo, no entanto, um mecanismo extremamente simples para poder ser

compreendido, no lugar de sofisticados circuitos eletrônicos. Tal modelo aproxima-se

bastante da arquitetura de um computador real e da forma como são executadas as

instruções, bem como apresenta de forma simbólica a linguagem de máquina.

COMPONENTES DESCRIÇÃO

GAVETEIRO COM

99 GAVETAS

AS GAVETAS SIMBOLIZAM A MEMÓRIA PRINCIPAL. CADA GAVETA É UM ENDEREÇO, QUE CONTÉM UM PEQUENO

QUADRO NEGRO , ONDE É ESCRITO UM NÚMERO SEMPRE DE 3 ALGARISMOS E OUTRAS INFORMAÇÕES. O

GAVETEIRO OBEDECE ÀS SEGUINTES REGRAS DE UTILIZAÇÃO:

1. EM QUALQUER MOMENTO, NO MÁXIMO UMA GAVETA PODE ESTAR ABERTA;

2. A LEITURA DO QUADRO NEGRO DE UMA GAVETA NÃO ALTERA O CONTEÚDO QUE NELE ESTÁ

GRAVADO;

3. A ESCRITA DE UMA INFORMAÇÃO NO QUADRO NEGRO DE UMA GAVETA É SEMPRE PRECEDIDA DE

SEU APAGAMENTO;

4. SOMENTE O OPERADOR CHICO PODE TER ACESSO AO GAVETEIRO;

CALCULADORA

A CALCULADORA POSSUI UM MOSTRADOR, INTITULADO ACUMULADOR E UM TECLADO, QUE NO CONJUNTO

SIMBOLIZAM A UNIDADE DE ARITMÉTICA E LÓGICA DE UM PROCESSADOR. PODEM SER REALIZADAS 2 TIPOS

DE OPERAÇÕES: (1) CARGA DE UM NÚMERO NO ACUMULADOR;

(2) REALIZAÇÃO DE UMA OPERAÇÃO ARITMÉTICA.

QUADRO NEGRODENOMINADO EPI(ENDEREÇO DA PRÓXIMA INSTRUÇÃO) ,SIMBOLIZANDO O REGISTRADOR

QUE INDICA O ENDEREÇO DA PRÓXIMA INSTRUÇÃO A SER EXECUTADA;

PORTA-CARTÕES

SIMBOLIZANDO UMA UNIDADE DE ENTRADA DE DADOS COMO, POR EXEMPLO, UM TECLADO, DE

FUNCIONAMENTO SIMILAR A UM PORTA GUARDANAPOS, QUE OS EMPILHA PARA SEREM LIDOS E

INTERPRETADOS, OBEDECENDO AS SEGUINTES REGRAS:

1. CARTÕES COM INFORMAÇÕES SÃO COLOCADOS EXCLUSIVAMENTE NA PARTE SUPERIOR, CONTENDO

UM NÚMERO DE 3 ALGARISMOS;

2. CARTÕES SÃO RETIRADOS DA EXTREMIDADE INFERIOR, UM DE CADA VEZ, APARECENDO NA MESMA

ORDEM EM QUE FORAM COLOCADOS NO DISPOSITIVO;

3. A RETIRADA DE CARTÕES SÓ PODE SER FEITA PELO CHICO ;

4. A COLOCAÇÃO DE CARTÕES SÓ PODE SER FEITA PELO USUÁRIO ;

FOLHA DE SAÍDA

SIMBOLIZANDO UMA UNIDADE DE SAÍDA COMO, POR EXEMPLO, UM MONITOR, CONSISTINDO

DE UMA FOLHA DE PAPEL ONDE PODE SER ESCRITO UM NÚMERO EM CADA LINHA,

UTILIZANDO-SE SEMPRE LINHAS CONSECUTIVAS. SOMENTE O CHICO PODE ESCREVER

NESTA FOLHA;

OPERADOR DE

SISTEMA

UMA PESSOA CHAMADA CHICO, COM LÁPIS, APAGADOR E GIZ (SIMBOLIZANDO O SISTEMA OPERACIONAL). O

CHICO É O ÚNICO QUE TEM ACESSO AO GAVETEIRO, À CALCULADORA, AO EPI E É O ÚNICO QUE PODE

RETIRAR CARTÕES DO PORTA-CARTÕES E ESCREVER NA FOLHA DE SAÍDA. ELE EXECUTA ESTRITAMENTE

ORDENS RECEBIDAS, NÃO PODENDO TOMAR NENHUMA INICIATIVA PRÓPRIA. O CHICO SABE FAZER DE

“CABEÇA” UMA ÚNICA OPERAÇÃO ARITMÉTICA: INCREMENTAR DE 1 O CONTEÚDO DO EPI E TRABALHA

SEMPRE EM UM DE DOIS ESTADOS DIFERENTES:

1. ESTADO DE CARGA , ONDE ELE EXCLUSIVAMENTE TRANSFERE INFORMAÇÕES DE CARTÕES,

LIDOS DO PORTA-CARTÕES, PARA GAVETAS DO GAVETEIRO;

2. ESTADO DE EXECUÇÃO , ONDE ELE EXECUTA ORDENS GRAVADAS NAS GAVETAS;

Para resolver um problema usando o computador de papel o usuário deve planejar

uma seqüência de ordens a serem executadas pelo CHICO. Essa seqüência é escrita nas

gavetas do gaveteiro, na seqüência adequada. Para executar uma instrução da

seqüência, o CHICO segue os seguintes passos, simbolizando o ciclo de execução de

instruções de um computador:

1. Consultar o EPI (próxima instrução);

2. Incrementar de 1 o conteúdo do EPI;

3. Abrir a gaveta do endereço “E”, onde deve encontrar uma instrução I, que é lida;

4. Fechar a gaveta “E”;

5. Executar a instrução “I”;

As instruções escritas nas gavetas constituem um programa armazenado. O usuário

deve formular o método de resolução de seu problema sob a forma de programa. As

instruções deste programa obedecem ao seguinte ciclo:

1. usuário escreve cada instrução(I) em um cartão, precedida de um endereço(E). Cada cartão possui

um par ordenado (E,I);

2. CHICO é colocado em estado de carga de programa;

3. usuário coloca o conjunto de cartões do programa no porta-cartões, em qualquer ordem;

4. Com o CHICO em estado de carga, ele executa as seguintes operações:

Lê um cartão com um par (E,I);

Abre a gaveta de endereço E;

Escreve em seu quadro negro (EPI) a instrução I;

Fecha essa gaveta;

CHICO repete o passo anterior até ler o último cartão de programa, após o que ele

é colocado em estado de execução de programa. O computador a gaveta suporta uma

linguagem de programação, com instruções semelhantes à uma linguagem de máquina,

fornecida pelos fabricantes juntamente com os processadores. Tais instruções são as

seguintes:

1. SOMA;

2. CARGA NO AC (ACUMULADOR);

3. ARMAZENAMENTO NO AC;

4. IMPRESSÃO;

5. LEITURA;

6. DESVIO CONDICIONAL;

7. PARE;

EXEMPLO DE PROGRAMA COM O COMPUTADOR À GAVETA

PROBLEMA “DADA UMA SEQÜÊNCIA DE NÚMEROS INTEIROS POSITIVOS, DETERMINAR SUA SOMA.”

SOLUÇÃOEscrever cada número da seqüência num cartão;

COLOCAR DOIS CARTÕES COM O NÚMERO “0”, APÓS O PRIMEIRO E O ÚLTIMO CARTÃO DO ALGORITMO ;

ALGORITMO

01 leia um cartão e guarde em 11

02 leia um cartão e guarde em 12

03 Imprima o conteúdo de 12

04 carregue no Acumulador(AC) o Conteúdo de 11

05 some o Conteúdo de 12 ao AC

06 armazene o conteúdo do AC em 11

07 carregue o C-12 no AC

08 Se o conteúdo do acumulador for diferente de 0, desvie para 02

09 imprima o conteúdo de C-11

10 pare

Para resolver o problema no computador à gaveta, deve ser formada uma pilha de

cartões e colocada no porta-cartões, com o seguinte conteúdo e na seguinte ordem:

1. PROGRAMA2. EXECUTE 013. CARTÕES DE DADOS (A e B)Terminada a execução é recebida a folha de saída, onde estarão impressos os

números da seqüência, seguidos da soma desejada.

RASTREIO DO PROGRAMA COM DADOS REAIS

Seja a seqüência 100,5 e 31. Suponhamos que CHICO tenha carregado o

programa e tenha encontrado o cartão “EXECUTE 01”. CHICO apaga o conteúdo do EPI,

escreve nele o número 01 e começa e executar as instruções do programa. A tabela a

seguir ilustra o estado do computador ao longo da execução do programa (rastreio):

GAVETA PORTA-CARTÕES AC 11 12 FOLHA EPI

- 000,100,005,031,000 - - - - 01

01 100,005,031,000 - 000 - - 02

02 005,031,000 - 000 100 X 03

03 005,031,000 - 000 100 100 04

04 005,031,000 000 000 100 100 05

05 005,031,000 100 000 100 100 06

06 005,031,000 100 100 100 100 07

07 005,031,000 100 100 100 100 08

08 005,031,000 100 100 100 100 09

02 031,000 100 100 005 100 03

03 031,000 100 100 005 100,005 04

04 031,000 100 100 005 100,005 05

05 031,000 105 100 005 100,005 06

06 031,000 105 105 005 100,005 07

07 031,000 005 105 005 100,005 08

08 031,000 005 105 005 100,005 02

02 000 005 105 031 100,005 03

03 000 005 105 031 100,005,031 04

04 000 105 105 031 100,005,031 05

05 000 136 105 031 100,005,031 06

06 000 136 136 031 100,005,031 07

07 000 031 136 031 100,005,031 08

08 000 031 136 031 100,005,031 02

02 - 031 136 000 100,005,031 03

03 - 031 136 000 100,005,031,000 04

04 - 136 136 000 100,005,031,000 05

05 - 136 136 000 100,005,031,000 06

06 - 136 136 000 100,005,031,000 07

07 - 000 136 000 100,005,031,000 08

08 - 000 136 000 100,005,031,000 09

09 - 000 136 000 100,005,031,000,136 10

10 - 000 136 000 100,005,031,000,136 -

O programa será considerado correto, se ele resolver o problema para qualquer

seqüência de números, parando após a leitura da seqüência e execução dos cálculos,

obtendo a resposta esperada. A capacidade de repetir instruções é uma característica

fundamental dos programas de computador. A partir dela é que se obtém um programa

com um número finito de instruções, mas capaz de representar a execução de um número

potencialmente infinito das mesmas (ou seja, tão grande quanto se queira).

1.4) EXERCÍCIOS

1) Qual foi e quando surgiu a primeira linguagem de programação?

2) Que ferramenta gráfica foi amplamente utilizada na década de 70, para

representação de algoritmos?

3) Qual a diferença entre dados e informação?

4) Defina hardware e software.

5) O que é linguagem de máquina?

6) Quais são as fases componentes do ciclo de vida de um SI?

7) Quais as camadas componentes de um software?

8) Para que serve a memória secundária?

9) O que é um programa armazrnado?

10)Desenhe a Arquitetura de Von Neumann, explicando a função de cada um de seus

componentes .

SUGESTÕES DE CONSULTA

1. Museu Virtual de Informática – http://piano.dsi.uminho.pt/museuv/index.html;

2. Dicionário de Informática – http://www.netpedia.com.br/;

3. Wikipedia – http://pt.wikipedia.org.

CAPÍTULO 2"A arte de programar consiste na arte de organizar e dominar a complexidade."

[Dijkstra]

OBJETIVO"Apresentar o conceito de algoritmo e os principais tópicos referentes à sua elaboração."

SUMÁRIO2.1) Problemas e Soluções

2.2) Definições de Algoritmos

2.3) Técnicas de Representação de Algoritmos

2.4) Algoritmos Estruturados

2.5) Pseudo-Código:

2.5.1) Identificadores, Constantes, Variáveis e tipos Básicos

2.5.2) Palavras Reservadas

2.5.3) Comando de Atribuição

2.5.4) Operadores

2.5.5) Entrada e Saída de Dados

2.5.6) Estrutura de um Algoritmo em pseudo-código

2.6) Documentação

2.7) Exercícios

2.1) PROBLEMAS E SOLUÇÕESVejamos alguns exemplos de tarefas que realizamos rotineiramente:

EXEMPLO 1 Após um banho uma pessoa deseja vestir cada uma das peças em uma seqüência

que pode variar. A seguir é estabelecida uma solução para esse problema:

1º - Vestir a cueca

2º - Colocar as meias

3º - Vestir a camisa

4º - Vestir a calça

5º - Calçar os sapatos

6º - Colocar o cinto

7º - Colocar a gravata

8º - Vestir o paletó

EXEMPLO 2Pregar um prego numa madeira:

1º - Segurar o prego sobre a madeira com a mão esquerda

2º - Bater com o martelo no prego, com a mão direita

3º - Se o prego estiver todo dentro da madeira encerre as ações

Senão volte ao passo 1 e repita a seqüência.

Naturalmente os algoritmos que serão resolvidos pelos computadores não serão

tão simples. De uma maneira geral as fases que compreendem a solução de um

problema em um computador são apresentadas a seguir:

Fase de Resolução do Problema

PROBLEMA ========================

||

\/

ALGORITMO||

\/

PROGRAMA ========================

Fase da Implementação do Programa

A tentativa de se produzir um programa diretamente de um problema, sem passar

pela elaboração de um algoritmo é de grande complexidade e com grande probabilidade

de ocorrência de erros.

2.2) DEFINIÇÕES DE ALGORITMOSUm algoritmo é a descrição de um padrão de comportamento, expresso em termos

de um repertório bem definido e finito de ações primitivas, que temos certeza que podem

ser executadas. Também podemos definir um algoritmo como uma seqüência de passos

ordenados, finitos, não ambíguos que levam à solução de um determinado problema. Tais

definições mostram que um algoritmo precisa possuir os seguintes elementos:

a) Ter início e fim;

b) Ser descrito em termos de ações não ambíguas e bem definidas;

c) As ações devem seguir uma seqüência ordenada

Exemplos de algoritmos:

a) Instruções de operação de um equipamento;

b) Receita de um bolo ou de um prato;

c) Instruções de montagem;

d) Partituras de músicas;

e) Programa de computador (algoritmo representado numa LP)

2.3) TÉCNICAS DE REPRESENTAÇÃO DE ALGORITMOSOs algoritmos podem ser representados de diversas forma:

(a) Em uma língua (português, inglês): É utilizado nas receitas, instruções, etc... . É

inadequado para solução de problemas computacionais pois pode apresentar

ambigüidade em alguns termos;

(b) Diretamente numa linguagem de programação, apresentando o inconveniente de

utilizar apenas as instruções da linguagem, preocupando-se com sintaxe,

desviando a atenção do programador, para o problema em si;

(c) Representações Gráficas: São bastante recomendáveis, já que um desenho

substitui com vantagem mil palavras. Como exemplos pode-se citar o fluxograma.

(d) Pseudo-Linguagem: Não tem os inconvenientes da ambigüidade de uma língua,

nem os rigores de uma linguagem de programação(LP), sendo bastante

recomendada.

2.4) ALGORITMOS ESTRUTURADOS

Quando queremos resolver um problema no computador, a seqüência de passos

que conduzem à solução é detalhada, até que se chegue a um conjunto de ações

primitivas que chamamos de comandos ou instruções, que podem ser entendidas e

executadas pela máquina. Este algoritmo de maior nível de detalhamento possível,

quando traduzido para uma linguagem de programação constituirá um programa.

Uma das vantagens de programar utilizando um algoritmo é que o problema está

documentado e pode ser implementado em outras linguagens de programação, dando

portabilidade. A programação estruturada ou o desenvolvimento de algoritmos

estruturados consiste na utilização de técnicas que permitem a sistematização do

desenvolvimento, o que simplifica bastante a solução de problemas grandes e

complexos. Os objetivos desta técnica são:

a) Facilitar o desenvolvimento e representação dos algoritmos;

b) Facilitar a leitura e entendimento dos algoritmos pelas pessoas;

c) Antecipar a comprovação de sua correção;

d) Facilitar a manutenção (correções e modificações) dos programas e algoritmos;

e) Permitir que o desenvolvimento de algoritmos possa ser empreendido

simultaneamente por uma equipe de pessoas;

Para alcançar tais objetivos, os algoritmos devem observar 3 premissas básicas:

(1) Devem ser desenvolvidos em diferentes fases de detalhamento crescente, do

geral para o particular, por refinamentos sucessivos;

(2) Devem ser decompostos em módulos funcionais, organizados de preferência

em um sistema hierárquico. Tais módulos trazem vantagens adicionais, tais como:

- cada módulo pode ser desenvolvido por um programador diferente;

- são mais fáceis de testar, permitindo testes independentes;

- Permite a reutilização de um módulo em outro algoritmo;

(3) Dentro de cada módulo devem ser utilizados poucos e bem definidos comandos

e estruturas de controle;

2.5) PSEUDO CÓDIGO:Nos tópicos seguintes será apresentado um pseudo código que guarda grande

semelhança com a linguagem PASCAL.

a) IDENTIFICADORConjunto de caracteres (letras, números ou símbolos), normalmente iniciados por

uma letra, que identificam ou nomeiam de forma única uma constante, variável, tipo,

arquivo, módulo, algoritmo, etc... Nas LP existem regras rígidas para a criação de

identificadores, o que não acontece nos algoritmos. A qualidade dos algoritmos está

diretamente ligada à significação dos identificadores, ou seja deve ser possível imaginar

para que serve um elemento, pelo seu identificador.

b) CONSTANTEUma constante é um “conteiner” de armazenamento, que possui um identificador e

armazena um valor fixo e imutável, durante a execução do programa ou algoritmo.

c) VARIÁVELUma variável é um “conteiner” de armazenamento, que possui um identificador e

seu conteúdo variável, durante a execução do programa ou algoritmo. Uma variável está

associada à uma posição de memória (endereço), podendo-se armazenar valores nesse

endereço. Os tipos básicos de variáveis são:

- Inteiro (Integer);

- Real (real);

- Caracter (char);

- Texto (string);

- Lógico (boolean);

d) DECLARAÇÃO DE VARIÁVEIS E CONSTANTESConsiste na definição dos nomes e valores das constantes e dos nomes e tipos das

variáveis que serão utilizadas pelos algoritmos, previamente à sua utilização. As

constantes são declaradas antes das variáveis, com o seguinte formato:

IDENTIFICADOR DA CONSTANTE = VALOR

Ex.: MAXNUM = 100;

TOTALALUNOS = 125;

As variáveis são declaradas com o seguinte formato:

TIPO DA VARIÁVEL: IDENTIFICADOR;

Ex.: Inteiro: NUM, QUANTALUNO;

Real: MEDIA, PREÇO;

Texto: NOME;

Lógico: ACHOU;

Caracter: C;

Os identificadores estão associados à posições de memória no computador.

E) PALAVRAS RESERVADASSão palavras que terão uso específico no pseudo-código e não deverão ser

usadas como identificadores, para não causar confusão na interpretação. Exemplos:

ALGORITMO PROGRAMABLOCO PROCEDIMENTO

INTEIRO REAL TEXTO CONST

VARIÁVEL TIPO INÍCIO FIM

IMPRIMA SE ENTÃO ENQUANTO

REPITA FAÇA VETOR EXECUTE

F) COMANDO DE ATRIBUIÇÃOEste comando permite que se forneça ou se altere o valor de uma variável, onde o

tipo desse valor tem que ser compatível ao tipo da variável que o armazenará. A seguir é

listado o formato do comando e apresentados exemplos:

IDENTIFICADOR DA VARIÁVEL <===== VALOR OU EXPRESSÃO OU VARIÁVEL

Exemplos:

NUM <== 8;

NOME <== 'MARIA';

CONT <== 0;

ACHOU <== 'FALSO;

G) OPERADORESPodem ser aritméticos, relacionais ou lógicos:

a) Operadores Aritméticos e Funções:

São os mais usados em expressões aritméticas. Permitem que se façam

operações com variáveis, constantes e valores inteiros ou reais. São eles:

+ = SOMA

- = SUBTRAÇÃO OU MENOS UNITÁRIO (SINAL)

* = MULTIPLICAÇÃO

/ = DIVISÃO

** = POTENCIAÇÃO

MOD = RESTO DA DIVISÃO DE INTEIROS

DIV = QUOCIENTE DA DIVISÃO DE INTEIROS

As funções mais comuns da Matemática estão presentes nas linguagens de

programação e também no pseudo-código. Alguns Exemplos:

LOG = LOGARITMO NA BASE 10

SEN = SENO

COS = COS

ABS = VALOR ABSOLUTO

RAIZ = RAIZ

b) Operadores Relacionais:

São utilizados com 2 operadores que podem ser expressos em valores, constantes

ou variáveis do tipo inteiro, real ou texto. Dão como resultado um valor lógico (verdadeiro

ou falso). São eles:

= = IGUAL

<> = DIFERENTE

> = MAIOR

< = MENOR

<= = MENOR OU IGUAL

>= = MAIOR OU IGUAL

c) Operadores Lógicos

São operadores utilizados com operandos do tipo lógico (podem ser expressões

relacionais ou lógicas) e dão resultado do tipo lógico, expresso por tabelas-verdade. São

eles: E (AND), OU(OR) e NÃO(NOT)

OPERADOR 1 OPERADOR 2 AND OR0 0 O O

0 1 0 1

1 0 0 1

1 1 1 1

d) Prioridade entre Operadores:

Caso não existam parênteses, deverá ser observada a seguinte ordem:

1) Parênteses e funções

2) + e – unitários

3) **

4) * e /

5) + e –

6) Relacionais

7) Não

8) E

9) OU

H) Entrada e Saída de DadosPara que possamos obter dados do meio exterior para uso no computador

(memória principal), estes tem que vir através dos dispositivos de entrada. Da mesma

forma as informações que são produzidas, tem de ser levadas ao meio externo através de

um dispositivo de saída. Para as operações de entrada e saída são usados os seguintes

comandos:

LEIA (IDENTIFICADOR, VARIÁVEL)IMPRIMA (IDENTIFICADOR, VARIÁVEL) ou (TEXTO)

I) Estrutura de um Algoritmo em pseudo-código

Algoritmo IDENTIFICADOR

{Comentários}

Const idt1 = valor1

idt2 = valor2

Var Inteiro = idt1,...

Real = idt1,...

Início

Comando 1

...

Comando n

Fim

2.6) DOCUMENTAÇÃO

A documentação deve observar alguns princípios básicos:

1. Utilizar nomes semânticos ao criar constantes e variáveis;

2. Identar o algoritmo;

3. Utilizar parentescos para evitar ambigüidades;

4. Utilizar um dicionário de dados que especifique o conteúdo de cada

constante e variável e descreva sua utilização;

2.7) EXERCÍCIOS

Faça algoritmos que implementem as funcionalidades abaixo

1. Ler duas notas e o nome do aluno, calcule a média e imprima o nome e a média.

2. Obtenha o valor em dinheiro guardado no bolso direito e o valor do bolso esquerdo,

que serão digitados, some-os e imprima o valor total e o valor total multiplicado por

3 e por 10.

3. Leia o nome, salário base e o número de dependentes de um funcionário e imprima

o nome, salário bruto (=salário base +R$100,00/depedente) e o salário liquido

(salário bruto – desconto INSS), sabendo que o desconto de INSS é de 10% do

salário base.

4. Calcule a quantidade de tinta necessária e o número de latas a comprar, para

pintar uma parede de 5m de largura e 3m de altura. Considere que o consumo da

lata é de 3 litros por metro quadrado e a quantidade de tinta por lata é de 2 litros.

5. Calcule o somatório de uma série de 5 números naturais, inseridos pelo teclado,

exibindo seu resultado na tela.

6. Calcule o produtório de 5 números naturais, inseridos pelo teclado, exibindo o

resultado na tela

SUGESTÕES DE CONSULTA

1. ALGORITMOS – http://pt.wikipedia.org/wiki/Algoritmo;

2. PROGRAMAÇÃO – http://www.linhadecodigo.com.br;

CAPÍTULO 3OBJETIVO"Apresentar as principais estruturas de controle, integrantes dos algoritmos."

SUMÁRIO3.1) Seqüência

3.2) Seleção:

3.3) Repetição:

3.4) Como construir bons algoritmos

3.5) Exercícios

3.1) SEQÜÊNCIAOs algoritmos são compostos por 5 tipos de instruções:

1. Instruções de atribuição;

2. Instruções de seleção;

3. Instruções de Repetição;

4. Instruções de entrada/saída;

5. Instruções Especiais

Normalmente um algoritmo é composto por uma seqüência, quando há

necessidade de controle de fluxo é que ocorrem outras estruturas. Uma seqüência pode

ser entendida como um grupo de comandos que são executados um após o outro.

Início

comando 1

...

comando n

Fim

É a forma normalmente encontrada no algoritmos.

3.2) SELEÇÃOUm dos tipos de instrução que controlam o fluxo de execução de um algoritmo,

também chamada de estrutura de decisão ou de processamento condicional, é utilizada

quando a execução de um comando ou seqüência de comandos, depende de um teste

anterior (uma ou mais comparações). Uma seleção pode ser simples ou composta.

A) SELEÇÃO SIMPLESQuando a execução de um comando (ou de uma seqüência de comandos)

depender de uma condição verdadeira, e não há comandos se a condição for falsa.

Ex.: Início

Leia (num);

Se num <> 0 então Imprima num

Fim SE

Fim

B) SELEÇÃO COMPOSTAQuando a execução de um comando (ou de uma seqüência de comandos)

depender de uma condição verdadeira, e há comandos se a condição for falsa.

Ex.: Início

Leia (num)

Se num <> 0 então Imprima (num );

senão Imprima (O número é zero !);

Fim SE

Fim

C) ANINHAMENTO DE SELEÇÕESUm comando de seleção pode ser executado dentro do outro, formando um

aninhamento. Uma boa edentação ajudará a compreensão do algoritmo.

3.3) REPETIÇÃO (LOOP OU LAÇO):A estrutura de repetição é utilizada quando um conjunto de comandos deve ser

executado repetidamente, enquanto uma determinada condição (expressão lógica)

permanecer verdadeira.

Dependendo do resultado do teste da condição, o conjunto de comandos poderá

não ser executado nem uma vez (se for falsa no primeiro teste), ou será executado várias

vezes (enquanto for verdadeira). Um loop pode ser aninhado, da mesma forma que uma

instrução de seleção, como lambem poderão haver aninhamento de seleções dentro de

loops e vice-versa. Duas recomendações devem ser seguidas, ao criar-se estruturas de

repetição:

1. Inicializar a(s) variável(eis) que controla(m) o loop, antes de seu início;

2. Modificar a(s) variável(eis) que controla(m) o loop dentro do mesmo (seja

por leitura ou atribuição), para que não geremos um loop infinito;

EX 1: CONST IDADELIMITE = 65

VAR INTEIRO: IDADE, I;

TEXTO: NOME;

INÍCIO

LEIA (NOME,IDADE);

ENQUANTO (IDADE <> IDADELIMITE) FAÇA

INÍCIO

IMPRIMA (NOME,IDADE);

LEIA (NOME, IDADE);

FIM

PARA I := 1 TO 10 FAÇA

INÍCIO

IMPRIMA (I);

FIM

FIM

EX2.: VAR INTEIRO: MÊS

INÍCIO

REPITA

IMPRIMA(DIGITE O MÊS DESEJADO (1 A 12));

LEIA (MÊS);

ATÉ (mês <= 12 ) E (MES >= 1)

FIM

SINALIZADOR (FLAG)O flag é um valor que quando lido, sinaliza a saída de um loop, o fim de um

programa, de uma lista de dados, ou o fim de um arquivo. É identificado como uma

constante nos algoritmos.

EX.: CONST FLAG =999

VAR INTEIRO: NUM,I

INÍCIO

I = 0;

ENQUANTO I < 10 FAÇA

INÍCIO

LEIA (NUM);

SE NUM <> FLAG ENTÃO IMPRIMA (NUM);

I = I+1;

FIM;

FIM

3.4) COMO CONSTRUIR BONS ALGORITMOS1. Leia o problema proposto até entendê-lo;

2. Determine as necessidades de constantes e variáveis de entrada e saída,

necessárias à resolução do problema;

3. Determine de forma bem geral os passos para a solução do problema;

4. Detalhar os passos, até obter comandos primitivos;

5. Escrever o algoritmo em pseudo-código;

6. Rastrear o algoritmo;

Os algoritmos seguem normalmente a seguinte estrutura:

1. Cabeçalho

2. Declaração e inicialização de variáveis e constantes

3. Início

4. Instruções

5. Fim

3.5) EXERCÍCIOS

Faça algoritmos para os problemas abaixo, usando pseudo código e fluxogramas:

1. Ler 2 números inteiros, descobrindo o maior.

2. Fazer um loop para ler o nome e o salário de uma pessoa, exibindo na tela seu

salário, com abono de 10%, até que seja digitado um salário maior que 1.000.

3. Imprimir na tela todos os números inteiros positivos pares, menores que 999 .

4. Imprimir na tela todos os números inteiros positivos, menores que 999, divisíveis

por 5. Exiba ao final sua quantidade.

5. Ler uma seqüência de n números inteiros positivos do teclado, exibindo seu

somatório e sua média.

6. Calcular a seqüência de Fibonacci, exibindo-a na tela;

7. Colocar em ordem crescente, uma seqüência de 3 números inseridos pelo teclado;

8. Calcular a raiz de uma equação do primeiro grau;

9. Calcular as raízes de uma equação do segundo grau;

10.Calcular o fatorial de um número.

CAPÍTULO 4OBJETIVO"Apresentar algumas estruturas de dados avançadas e suas aplicações."

SUMÁRIO4.1)Introdução

4.2)Registros

4.3)Arquivos

4.4)Exercícios

4.1) INTRODUÇÃOOs registros são um dos mais importantes tipos de dados agregados ou estrutura

de dados (ED). Pode-se definir uma ED como um conjunto de dados relacionados entre

si, agrupados na memória principal ou secundária, com a finalidade de facilitar a

manipulação de dados pelo programador, na medida em que se tornam mais complexos.

As principais estruturas de dados são:

● Registros ou agregados heterogêneos;

● Vetores, matrizes ou agregados homogêneos;

● Listas lineares (encadeadas);

● Pilhas;

● Filas;

● Árvores;

4.2) REGISTROS:São variáveis compostas heterogêneas. Os registros representam conjunto de

informações relacionadas entre si, que podem ser referenciadas como uma unidade (o

registro), sendo normalmente composta de informações de tipos diferentes (tipos).

Um registro representa um tipo de dado definido pelo usuário, constituindo um tipo

de dado não primitivo. O quadro a seguir representa o formato de declaração de um

registro.

TIPOIDENTIFICADOR DO REGISTRO = REGISTRO

tipo do campo 1: identificador do campo 1;

.......

tipo do campo n: identificador do campo n;

FIM

EX.: REGALUNO = REGISTRO

TEXTO : NOME;

CARACTER: SEXO;

INTEIRO: CIDADE;

REAL: MÉDIA;

FIM REGALUNO.

A partir da definição do tipo, temos à disposição um novo tipo de variável.

EX.: VARIÁVEL REGALUNO : RALUNO;

4.3) ARQUIVOS:Um arquivo é um conjunto de dados ou informações de tamanho limitado,

identificado por um nome e que está localizado na memória secundária. Os dados e

informações contidos num arquivo não são perdidos quando se desliga o computador. O

acesso a um arquivo pode ser seqüencial ou randômico..

Um arquivo pode ser usado como fonte de dados de entrada ou como destino das

informações de saída. Pode-se imaginar um arquivo como uma gaveta de um arquivo de

aço, que contém fichas de cadastros (de funcionários por exemplo).

Os arquivos são definidos ou declarados nos algoritmos na declaração de

variáveis, especificando-se de que tipo são os dados contidos no arquivo.

Formato:

Variável Arquivo de Tipo : Identificador do arquivo

Ex.: Arquivo de Inteiro: ARQNUM

Arquivo de Texto: ARQNOME.

Existem basicamente 2 operações possíveis de serem feitas com arquivos:

● Leitura

● Escrita

A seguir é apresentado um exemplo de leitura dos nomes de 50 alunos, que estão

armazenados no arquivo “ARQNOMES” , gravando-os no arquivo “TURMA”.

ALGORITMO LE_GRAVA

CONST TOTNOMES = 50;

VAR TEXTO: NOME;

ARQUIVO DE TEXTO: ARQNOMES, TURMA;

INTEIRO: CONT;

INÍCIO

CONT := 0;

ENQUANTO (CONT < TOTNOMES) FAÇA

INÍCIO

LEIA (ARQNOMES, NOME);

GRAVE (TURMA, NOME);

CONT := CONT + 1;

FIM

FIM

4.4) EXERCÍCIOS

1) Crie registros para conter:

a) Os dados de uma peça em estoque);

b) Os dados de um cliente no banco;

c) Os dados de um aluno;

2) O arquivo ARQNOMES contém os nomes e o arquivo ARQNOTAS, as 3 notas de

cada um dos 60 alunos da turma X. Faça um algoritmo que calcule a média de

cada aluno, gravando o resultado no arquivo ARQMEDIA_X.

CAPÍTULO 5

OBJETIVO"Apresentar as estruturas de dados vetores e matrizes e suas aplicações."

SUMÁRIO5.1) Vetores:

5.2) Matrizes

5.3) Exercícios

5.1) VETORESUm vetor é uma estrutura de dados que contêm elementos do mesmo tipo, que

podem ser referenciados como um todo. Os vetores podem ser uni ou multi dimensionais

(matrizes) . O exemplo a seguir ilustra um vetor e sua declaração:

[1] [2] [3] [n]

000

IDENTIFICADOR DO VETOR: VETOR[LI .. LS] de TIPO

LI = LIMITE INFERIOR

LS = LIMITE SUPERIOR

EX.: TIPO

VETNOTA = VETOR [1 .. 50] DE REAL

VAR VETNOTA : VNOTA, AUX;

5.2) MATRIZESMatrizes, tabelas ou vetores multi-dimensionais são estruturas de dados similares

ao vetor, com a diferença de que podem ter várias dimensões. Cada célula de uma matriz

pode ser identificada por um nome e tantos índices, quantas forem suas dimensões.

5.3) EXERCÍCIOS

Faça algoritmos para os problemas abaixo:

1. Somar duas matrizes 3 por 3.

2. Calcular o determinante de uma matriz 3x3.

3. Ler um arquivo com 50 números inteiros, colocando-os em um vetor, na ordem

decrescente.

4. Ler de um arquivo uma lista de 100 números inteiros, armazenando-os em um

vetor e informando o menor valor.

5. Ler uma série de 10 números inteiros do teclado, armazenando-os num vetor em

ordem crescente.

CAPÍTULO 6

OBJETIVO"Apresentar o conceito e as vantagens da modularização de algoritmos."

SUMÁRIO6.1) Procedimentos

6.2) Funções

6.3) Estruturação dos Módulos de um Algoritmo

6.4) Exercícios

6.1) PROCEDIMENTOSUm procedimento é uma seqüência de instruções precedidas por uma seqüência

de declarações, que possui um identificador (nome do procedimento), uma lista de

parâmetros opcionais (para comunicação com o exterior) e pode realizar qualquer tipo de

procedimento, estabelecido pelo programador.

As variáveis, os tipos e as constantes declaradas dentro de um procedimento só

são acessáveis dentro do procedimento, são chamadas variáveis locais, só sendo

acessáveis de dentro do procedimento. O uso de procedimentos modulariza o algoritmo,

dividindo o problema a ser resolvido em partes.

EX.: PROCEDIMENTO <IDENTIFICADOR DO PROCEDIMENTO> (LISTA DE PARÃMETROS)

CONST ...

VAR ...

INÍCIO

INSTRUÇÕES

FIM

6.2) FUNÇÕESUma função é um módulo que tem por objetivo calcular e retornar ao algoritmo o

resultado desse cálculo.

EX.: FUNÇÃO <IDENTIFICADOR> (LISTA DE PARÂMETROS) : <TIPO>

INÍCIO

INSTRUÇÕES

FIM

6.3) ESTRUTURAÇÃO DOS MÓDULOS DE UM ALGORITMOUm procedimento nada mais que um algoritmo hierarquicamente subordinando a

outro algoritmo, chamado de módulo principal ou programa principal, ou ainda algoritmo

principal. Da mesma forma, um procedimento poderá conter outros procedimentos (e

também funções) aninhados.

Uma boa prática ao definir as fases de um algoritmo é transformar as mesmas em

procedimentos.

6.4) EXERCÍCIOS1. Faça um procedimento para calcular o valor da diagonal de um retângulo,

sendo fornecidos os lados como parâmetros.

2. Resolva o mesmo problema usando uma função.

3. Faça um procedimento que receba as notas de um aluno (3) e calcule sua

média.

CAPÍTULO 7 OBJETIVO"Apresentar o conceito de pesquisa e ordenação de dados."

SUMÁRIO7.1) Introdução

7.2) Algoritmos de Pesquisa:

7.3) Algoritmos de Ordenação:

7.1) INTRODUÇÃOQuando temos um vetor (ou matriz) com muitos elementos e precisamos descobrir

se um determinado elemento que procuramos, se encontra no vetor, uma solução que

nos vem à mente é compararmos cada elemento do vetor com o elemento procurado, até

que o encontremos ou concluamos que o vetor não o contém.

Esta é a base de raciocínio dos algoritmos de pesquisa, a diferença entre eles é

basicamente a rapidez com que varremos o espaço de procura. Um fator que muito

influencia na rapidez do algoritmo é a disposição dos elementos no vetor.

Os algoritmos de ordenação são usados para ordenar os elementos de um vetor de

forma a facilitar a pesquisa.

7.2) ALGORITMOS DE PESQUISA:Para fazer uma pesquisa em um vetor precisa-se de 4 parâmetros:

a) O vetor no qual realizaremos a pesquisa;

b) O número de elementos desse vetor que devem ser pesquisados;

c)O elemento procurado;

d) Um índice que vai ser preenchido com a posição onde o elemento foi

encontrado.

Como os algoritmos de pesquisa podem ser utilizados muitas vezes na solução de

diferentes problemas, vamos defini-los como procedimento de um algoritmo principal:

A) PESQUISA SEQÜENCIAL SIMPLESNuma pesquisa seqüencial simples como o vetor a ser pesquisado não está

ordenado pelo elemento procurado, teremos de comparar um a um o ELEMPROC, com

cada elemento do vetor.

PROCEDIMENTO PESQSEQ (VETIPO : Vet; INTEIRO: Totelem, Pos; ELEMPROC)

VAR Inteiro : j,i;

INÍCIO

Pos = 0;

j = 1;

PARA I = 1 ATÉ TOTELEM FAÇA

INÍCIO

IF VETIPO [I] = ELEMPROC ENTÃO ACHEI;

FIM

FIM.

B) PESQUISA SEQÜÊNCIAL ORDENADAPara se utilizar a pesquisa seqüencial ordenada, o vetor de busca deverá estar

ordenado pelo campo chave da pesquisa, com isso se encontramos no vetor um elemento

maior que o procurado, podemos encerrar a pesquisa. Tal estratégia reduz sensivelmente

o tempo de busca.

7.3) ALGORITMOS DE ORDENAÇÃO:O propósito dos algoritmos de ordenação é o de facilitar e acelerar a busca

posterior de um elemento no vetor. Os algoritmos de ordenação são utilizados

normalmente uma vez em cada execução do programa, ou poucas vezes, se comparados

com os de pesquisas. Os principais métodos de ordenação são:

● Ordenação por seleção;

● Ordenação por inserção;

● Ordenação por troca;

CAPÍTULO 8 OBJETIVO

"Apresentar o conceito avançados sobre algoritmos, com sua transformação em

programas de computador, o processo de compilação e assuntos correlatos."

SUMÁRIO8.1) Introdução

8.2) O processo de tradução;

8.3) Introdução à Teoria de Sistemas

8.4) Programas, Algoritmos e Estruturas de Dados

8.1) INTRODUÇÃOUm computador é uma máquina elétrica, independentemente do processo de

produção de programas que adotemos, as ações acontecem por meio de sinais elétricos.

Em outras palavras podemos abordar o problema de elaboração de programas do ponto

de vista de alto nível (próximo ao ser humano) ou baixo nível (próximo à máquina),

estabelecendo uma organização hierárquica.

O computador na verdade só é capaz de executar um conjunto pequeno de

instruções, que são sua linguagem de máquina, ou seja instruções que vem de fábrica

com o processador. Existem programadores que trabalham neste nível (0 e 1) mas

consiste numa tarefa bastante árdua e pouco produtiva.

Para resolver este problema surgiu o processo de tradução, que consiste em

transformar um programa escrito numa determinada linguagem em outro, que atenda a

um interesse específico.

8.2) O PROCESSO DE TRADUÇÃO

O processo de tradução consiste basicamente na transformação de um tipo de

programa em outro. O primeiro processo foi a transformação da linguagem de máquina na

linguagem Assembler. A figura a seguir ilustra tal processo:

O programa original é chamado de programa fonte e o final, programa alvo.

Existem dois tipos básicos de tradução: a compilação e a interpretação. No processo de

compilação o programa fonte é totalmente traduzido em instruções da máquina alvo,

enquanto na interpretação, é traduzida linha a linha. Abordaremos apenas o processo de

compilação. O processo completo é ilustrado abaixo:

8.3) INTRODUÇÃO À TEORIA DE SISTEMASUm sistema é um conjunto de elementos integrados, cada um realizando uma

tarefa específica, concorrendo todos para execução de um objetivo. Um programa e seu

ambiente de produção são sistemas.

8.4) PROGRAMAS, ALGORITMOS E ESTRUTURAS DE DADOS Os programas processam dados, que são representações para o computador de

informações do mundo real. Tais representações podem ser simples, quando a

informação é simples (exemplo: nota de um aluno) ou estruturadas, quando a informação

é por sua natureza estruturada (exemplo: conjunto de informações sobre o aluno).

PROGRAMAFONTE TRADUTOR LINK

EDIÇÃOCÓDIGOOBJETO

PROGRAMAALVO

BIBLIOTECA

LINGUAGEMDE

MÁQUINA

PROGRAMATRADUTOR

LINGUAGEMASSEMBLER

Um programa é constituído por um conjunto de ações que devem ser executadas

sobre os dados, obedecendo a uma determinada seqüência.. Essas ações são

especificadas por meio de um “algoritmo”, que define a seqüência e o conjunto de ações

que devem ser executadas sobre um conjunto de dados, com o propósito de obter

informações.

Ação é um conceito central na programação. Uma ação deve ser bem definida,

efetiva e de duração finita. Uma ação pressupõe a existência de dados sobre os quais ela

será executada. Uma ação é uma operação que pode provocar alterações sobre os

dados.

Um algoritmo é uma seqüência de passos ordenados, finitos, não ambíguos, que

levam à execução de um objetivo. Um algoritmo é um padrão de comportamento, que

estabelece um conjunto finito de passos, onde cada passo pode requerer uma ou mais

ações. Um algoritmo é um projeto de programa, que deve ser implementado em uma

linguagem de programação e transformado em um programa executável. Um programa

de computador é composto de dois elementos:

PROGRAMA = ALGORITMO + ESTRUTURA DE DADOS

Assim como numa linguagem humana, uma linguagem de programação é

constituída de um conjunto de vocábulos, regras de sintaxe e semântica, permitindo a

especificação dos dados e operações, numa forma que o computador entenda e possa

executar. A especificação de um algoritmo e de suas estruturas de dados devem constituir

uma base sólida para a construção de um programa.

A construção de um programa começa com um levantamento e análise das

informações do mundo real, produzindo um ENUNCIADO. Com base no enunciado

desenvolve-se um projeto que especifica uma ALGORITMO e as REPRESENTAÇÕES DOS DADOS.

O algoritmo e as representações dos dados devem ser codificados para uma

linguagem de programação. O código fonte do programa deve ser convertido para um

código executável pelo sistema operacional da máquina alvo. De uma maneira genérica o

processo de desenvolvimento de programas cumpre as seguintes fases:

FASE DESCRIÇÃO

1ªANÁLISE E ESPECIFICAÇÃO DE REQUISITOS, DEFININDO-SE O QUE O PROGRAMA DEVE FAZER PARA ATENDER ÀS

NECESSIDADES DOS USUÁRIOS (ENUNCIADO).

2ªPROJETO DE PROGRAMAS , ESPECIFICANDO-SE COMO O PROGRAMA DEVE SER PARA ATENDER AOS SEUS

REQUISITOS. A METODOLOGIA DESTA FASE TEM GRANDE IMPACTO NA ESCOLHA DA LINGUAGEM DE PROGRAMAÇÃO.

3ªIMPLEMENTAÇÃO , QUANDO SE CODIFICA O PROGRAMA, COM UMA LINGUAGEM DE PROGRAMAÇÃO, QUE SUPORTE A

METODOLOGIA DE PROJETO, CRIANDO-SE UM CÓDIGO EXECUTÁVEL ..

4ª VALIDAÇÃO , QUANDO PROGRAMA É TESTADO E SUA CORREÇÃO VERIFICADA.

5ªMANUTENÇÃO, QUANDO SÃO FEITAS ALTERAÇÕES DECORRENTES DE MELHORIAS, NECESSIDADES DE OUTROS SERVIÇOS,

ERROS ENCONTRADOS, ETC ...