You are on page 1of 64

UNIVERSIDADE BANDEIRANTE DE SO PAULO - CAMPUS ABC SISTEMAS DE INFORMAO E TECNOLOGIA EM PROCESSAMENTO DE DADOS

MATERIAL DE APOIO LGICA DE PROGRAMAO

Verso 1.0 Novembro de 2006 Prof. Luis Ricardo Tomiato

SUMRIO Captulo 01 Programao Estruturada...............................................................4 Introduo .........................................................................................................4 Conceitos Bsicos.............................................................................................4 Captulo 02 Resoluo de Problemas: Algortmos ............................................7 Definio de Algortmo ......................................................................................7 Tcnicas de Representao de Algoritmos.......................................................8 Pseudo-Cdigo..................................................................................................9 Algoritmo x Programa........................................................................................9 Linguagem de Programao .............................................................................9 Tipos de Linguagem de Programao ..............................................................9 Estratgias na Resoluo de Problemas ........................................................10 Critrios de Qualidade de um Programa .....................................................10 Metodologia de Soluo ..............................................................................10 Captulo 03 Algortmos .....................................................................................11 Identificadores, Constantes, Variveis e Tipos Bsicos ..................................11 Declarao de Variveis .................................................................................12 Palavras Reservadas ......................................................................................13 Operadores .....................................................................................................13 Captulo 04 Estruturas Bsicas de Controle ....................................................17 Sequncia .......................................................................................................17 Seleo ...........................................................................................................17 Seleo Simples..............................................................................................17 Seleo Composta ..........................................................................................18 Aninhamento de Selees ..............................................................................18 Estruturas de Repetio Laos (Loops) .......................................................19 Lao Enquanto (While) ................................................................................19 Controlados por Contador ...........................................................................20 Repetio com Teste no Final .....................................................................20 Regras Prticas para a Construo de Algortmos Legveis .......................21 Uma Reflexo Antes de Resolver um Problema..........................................23 Exerccios Complementares ...........................................................................24 Captulo 05 Estruturas de Dados Homogneas...............................................27 Repetio com Varivel de Controle Para (For)...........................................27 Seleo entre as Mltiplas Alternativas-Caso (Case) .....................................29 Vetores............................................................................................................30 Declarao de Vetores ................................................................................31 Exerccios Complementares - Vetores ............................................................35 Matrizes...........................................................................................................36 Exerccios Complementares Matrizes ..........................................................38 Captulo 06 Estruturas de Dados Heterogneas .............................................39 Introduo .......................................................................................................39 Captulo 07 Modularizao de Algortimos ......................................................45 Introduo .......................................................................................................45 Procedimentos ................................................................................................45

Funes ..........................................................................................................47 Escopo de Variveis........................................................................................50 Variveis Locais...........................................................................................50 Parmetros Formais ....................................................................................52 Variveis Globais.........................................................................................52 Passagem de Parmetros Por Valor e Por Referncia................................53 Funes Recursivas........................................................................................55 Estruturao dos Mdulos de um Algoritmo....................................................55 Captulo 08 Algortimos de Pesquisa e Ordenao .........................................56 Introduo .......................................................................................................56 Algoritmo de Pesquisa ....................................................................................56 Pesquisa Sequencial Simples (Linear) ........................................................57 Pesquisa Sequencial Ordenada ..................................................................58 Pesquisa Binria..........................................................................................60 Algoritmo de Ordenao .................................................................................61 Mtodo de Seleo Direta ...........................................................................61 Mtodo de Insero Direta...........................................................................62 Mtodo da Bolha..........................................................................................63 Bibliografias.....................................................................................................64

Captulo 01 Programao Estruturada


Introduo
Programao de computadores uma atividade que vem se desenvolvendo h mais de 50 anos desde o surgimento das primeiras linguagens de programao. Inicialmente, aprendia-se a programar utilizando-se a prpria linguagem como ferramenta. A linguagem Fortran, criada em 1954, e com seu primeiro compilador em 1957, foi durante muito tempo utilizada com este fim, inclusive no Brasil. Nas dcadas de 60 e 70, com o aparecimento de algumas outras linguagens, o Fluxograma, um mtodo grfico que hoje est em desuso, foi grandemente utilizado em complemento ao anterior. Hoje em dia, depois de centenas de linguagens de programao criadas e de vrios mtodos para se representar a soluo de problemas, aprende-se a programar construindo e desenvolvendo algoritmos. O objetivo desse curso a Lgica de Programao dando uma base terica e prtica, suficientemente boa, para que, o aluno domine os algoritmos e esteja habilitado a aprender uma linguagem de programao.

Conceitos Bsicos
Dados: so elementos brutos que podem ser processados por um computador digital para se obter alguma concluso ou resultado, ou seja, uma informao. Informao: o resultado do processamento dos dados pelo computador. Uma informao pode ser considerada como dado para outro processamento e, por isso, muitas vezes referenciada como dado de sada. Programa de Computador: seqncia de instrues no ambgua e finita em uma linguagem de programao especfica que, quando executada, resolve um problema determinado.

Linguagem de mquina: a linguagem binria (composta de zeros e uns) utilizada pelos computadores, para representar dados, programas e informaes. tediosa, difcil de se compreender e fcil de gerar erros na programao. Linguagem Assembler: uma linguagem particular para cada processador (computador), que codifica as instrues em linguagem de mquina e facilita um pouco o trabalho do programador. tambm considerada uma linguagem de baixo nvel, mas ainda hoje utilizada. Linguagem de programao de 3 gerao: tambm chamada de linguagem de alto nvel, engloba todas as linguagens de programao que utilizam compiladores ou interpretadores. Possuem instrues mais poderosas que a linguagem Assembler, facilitando ainda mais o trabalho do programador. Exemplos: Fortran, Cobol, Algol, PLI, Pascal, Modula2, Lips, C, ADA, etc. Linguagem de programao de 4 gerao: so linguagens no procedurais, utilizadas para sistemas de gerenciamento de banco de dados, planilhas e outros aplicativos que utilizam comandos mais poderosos ainda que as linguagens de 3 gerao e, por isso, so ainda mais fceis de programar. Exemplos: SQL, DBASE, CLIPPER, INGRES, etc. Compilador: um programa utilizado para traduzir os programas escritos pelo programador nas linguagens de alto nvel (programa fonte) para a linguagem de mquina (programa executvel), a fim de poder ser executado pelo computador. Interpretador: um programa que traduz os programas escritos pelo programador para a linguagem de mquina, no momento da execuo (no existindo assim o programa executvel).

O hardware de um computador, segundo a arquitetura bsica de Von Neumann, composto de trs elementos principais : A Unidade Central de Processamento (UCP ou CPU) A Memria Principal (MP) Os dispositivos de Entrada e Sada de Dados (E/S ou I/O)

A UCP composta de dois elementos principais: A Unidade Aritmtica e Lgica (ULA ou ALU) que responsvel pela realizao de todas as operaes lgicas e aritmticas no computador; A Unidade de Controle (UC ou CU) que responsvel pelo controle de todos os elementos do computador e dos perifricos, recebendo sinais de estado (status) destes e gerando sinais de controle para estes.

A MP o elemento que armazena os programas, os dados e as informaes (resultados) durante a execuo de um programa. Cada posio da memria possui um endereo e um contedo. Ao ser desligado o computador, todo o contedo da memria principal perdido. A memria secundria (MS) responsvel pelo armazenamento, em carter permanente, de programas e dados. onde se localizam os arquivos de dados, de programas ou de sada (resultados). Exemplos de MS so: discos flexveis (disquetes), discos rgidos (winchester), cartuchos (fitas streamer), fitas magnticas, CD-ROM, etc.
Figura 1.1- O Computador segundo Von Neumann.

Captulo 02 Resoluo de Problemas: Algortmos

Definio de Algortmo
a descrio, de forma lgica, dos passos a serem executados no cumprimento de determinada tarefa. O algoritmo pode ser usado como uma ferramenta genrica para representar a soluo de tarefas independente do desejo de automatizlas, mas em geral est associado ao processamento eletrnico de dados, onde representa o rascunho para programas (Software). Serve como modelo para programas, pois sua linguagem intermediria linguagem humana e s linguagens de programao, sendo ento, uma boa ferramenta na validao da lgica de tarefas a serem automatizadas. Algoritmo pode ter vrios nveis de abstraes de acordo com a necessidade de representar ou encapsular detalhes inerentes s linguagens de programao.

As definies acima mostram que um algoritmo, para ser assim definido, precisa: 1. Ter incio e fim 2. Ser descrito em termos de aes no ambguas e bem definidas 3. Que as aes sigam uma seqncia ordenada Exemplos de algoritmos (do nosso dia a dia): As instrues de operao de um equipamento; Uma receita de bolo ou de algum prato; Instrues de montagem; Etc.

Tcnicas de Representao de Algoritmos


Os algoritmos podem ser representados de diversas formas, a saber: 1. Em uma lngua (portugus, ingls): utilizado nas receitas, instrues, etc. Para soluo de problemas em computao apresenta um inconveniente: a ambigidade de alguns termos. 2. Uma linguagem de programao (Pascal, Cobol, C, C#, Java, etc.): utilizada por alguns programadores j experientes, porm apresenta alguns inconvenientes: utiliza apenas as instrues existentes na linguagem especfica e muito detalhada nas preocupaes com a sintaxe, desviando a ateno do programador da soluo do problema. 3. Representaes grficas: so bastante recomendveis j que um desenho muitas substitui, com vantagem, mil palavras. Alguns exemplos (ver Figura 2.2 abaixo): a) fluxograma b) diagramas de Nassi-Scheniderman c) mtodo de Jackson d) diagramas de Warnier-Or

Pseudo-Cdigo
O algoritmo deve ser fcil de se interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio entre a linguagem falada e a linguagem de programao. Utilizaremos em nosso curso o Portugol (Portugus + Algol + Pascal), para o estudo dos algoritmos.

Algoritmo x Programa
Um algoritmo uma seqncia lgica de aes a serem executadas para se executar uma determinada tarefa. Um Programa a formalizao de um algoritmo em uma determinada linguagem de programao, segundo suas regras de sintaxe e semntica, de forma a permitir que o computador possa entender a seqncia de aes.

Linguagem de Programao
Conjunto de smbolos (comandos, identificadores, caracteres, etc) e regras de sintaxe que permitem a construo de sentenas que descrevem de forma precisa aes compreensveis e executveis para o computador.

Tipos de Linguagem de Programao


Existem diversas linguagens de programao, cada uma com suas caractersticas especficas e com nveis de complexidade e objetivos diferentes: Linguagem de Mquina o nica compreendida pelo computador. Especfica de cada computador. (Exemplo: Assembler) Linguagens de Baixo Nvel (Exemplo: Assembly) Linguagens de Alto Nvel. o Utiliza instrues prximas da linguagem humana de forma a facilitar o raciocnio. (Exemplos: C/C++, C#, VB, Java, Delphi, etc)

Estratgias na Resoluo de Problemas


Critrios de Qualidade de um Programa
Clareza : Refere-se facilidade de leitura do programa. Se um programa for escrito com clareza, dever ser possvel a outro programador seguir a lgica do programa sem muito esforo, assim como o prprio autor do programa entend-lo aps ter estado um longo perodo afastado dele. Simplicidade : A clareza e preciso de um programa so normalmente melhoradas tornando as coisas o mais simples possvel, consistentes com os objetivos do programa. Muitas vezes torna-se necessrio sacrificar alguma eficincia de processamento, de forma a manter a estrutura do programa mais simples. Eficincia : Refere-se velocidade de processamento e a correta utilizao da memria. Um programa deve ter performance SUFICIENTE para atender s necessidade do problema e do usurio, bem como deve utilizar os recursos de memria de forma moderada, dentro das limitaes do problema. Modularizao : Durante a fase de projeto, a soluo do problema total vai sendo fatorada em solues de subproblemas, o que permite geralmente dividir o problema em forma natural em mdulos com subfunes claramente delimitadas, que podem ser implementados separadamente por diversos programadores de uma equipe, ou seja, a modularizao consiste no particionamento do programa em mdulos menores bem identificveis e com funes especficas, de forma que o conjunto desses mdulos e a interao entre eles permite a resoluo do problema de forma mais simples e clara. Generalidade : interessante que um programa seja to genrico quanto possvel de forma a permitir a reutilizao de seus componentes em outros projetos.

Metodologia de Soluo
1. 2. 3. 4. 5. Entender o problema; Formular um esboo da soluo; Fazer uma primeira aproximao das variveis necessrias; Rever os passos originais, detalhando; Se o algoritmo estiver suficientemente detalhado, testar com um conjunto de dados significativos; 6. Implementar em uma linguagem de programao.

10

Captulo 03 Algortmos

Identificadores, Constantes, Variveis e Tipos Bsicos


IDENTIFICADORES: Representam os nomes escolhidos para rotular as variveis, procedimentos e funes, normalmente, obedecem as seguintes regras:

1. O primeiro caracter deve ser uma letra 2. 2. Os nomes devem ser formados por caracteres pertencentes ao seguinte conjunto: {a,b,c,..z,A,B,C,...Z,0,1,2,...,9,_} 3. Os nomes escolhidos devem explicitar seu contedo. Exemplos: A, B1, BC3D,SOMA, CONTADOR Um exemplo de identificador invlido seria 2AB ou qualquer outro iniciado por um dgito. CONSTANTE: Uma constante, como sugere o nome, um identificador que armazena um valor fixo e imutvel, durante a execuo de um algoritmo ou programa. Podemos associ-lo a uma posio de memria (endereo) que tem um contedo fixo. Este contedo poder ser um nmero (real ou inteiro), uma cadeia de caracteres (texto) ou um valor lgico. VARIVEL: Uma varivel um identificador que, como sugere o nome, possui o contedo varivel durante a execuo de um algoritmo ou programa. Podemos associar uma varivel a uma posio da memria (endereo) e poderemos armazenar (guardar) neste endereo qualquer valor do conjunto de valores de um tipo bsico associado a ela. Uma varivel pode assumir vrios valores diferentes ao longo da execuo do programa, mas, em um determinado momento, possui apenas um valor. Unidades bsicas de armazenamento das informaes a nvel de linguagens de programao. Os tipos de dados e variveis utilizados dependem da finalidade dos algoritmos, mas, podemos definir alguns, pelo fato de serem largamente utilizados e implementados na maioria das linguagens.
11

Esse tipo bsico poder ser: INTEIRO (int, short int ou long int): : qualquer nmero inteiro, negativo, nulo ou positivo. Ex: -2, -1, 0... Operaes: soma(+), subtrao(-), multiplicao(*), diviso inteira(/), resto(%) e comparaes. REAL (float ou double): qualquer nmero real, negativo, nulo ou positivo. Ex: 2.5, 3.1 Operaes: soma(+), subtrao(-), multiplicao(*), diviso exata(/) e comparaes. CARACTER (char): qualquer conjunto de caracteres alfanumricos. Ex: A, B, "ABACATE " Operaes: comparaes TEXTO OU CADEIA DE CARACTERES (STRING): uma varivel deste tipo poder armazenar uma cadeia de caracteres de qualquer tamanho. Caso seja imprescindvel para o entendimento pode-se acrescentar, entre parnteses, a quantidade mxima de caracteres. (Exemplo: texto (10)). Obs.: Os textos devero ser representados sempre entre apstrofes para que no se confundam com os valores numricos. Veja que o inteiro 5, diferente do texto 5. LGICO (BOOLEAN): tipo especial de varivel que armazena apenas os valores V e F, onde V representa VERDADEIRO e FALSO Ex: e, ou, no Operaes: Verdadeiro ou Falso

Declarao de Variveis
Consiste na definio dos nomes e valores das constantes e dos nomes e tipos das variveis que sero utilizadas pelos algoritmos, previamente sua utilizao, incluindo comentrio, quando se fizerem necessrios. Na maioria das linguagens de programao, quando o computador est executando um programa e encontra uma referncia a uma varivel ou a uma constante qualquer, se esta no tiver sido previamente definida, ele no saber o que fazer com ela. Da mesma forma, um programador que estiver implementando um algoritmo, em alguma linguagem de programao, ter o seu

12

trabalho simplificado se todas as constantes e variveis referenciadas no algoritmo tiverem sido previamente declaradas. As constantes so declaradas antes das variveis. Vejamos os formatos da declarao e alguns exemplos. O significado da declarao de variveis corresponde criao de locais na memria rotulada com o nome da varivel (identificador) e marcada com o tipo de valores que ela pode conter. Para que os programas manipulem valores, estes devem ser armazenados em variveis e para isso, devemos declar-las de acordo com a sintaxe:

Exemplos: Inteiro real caracter inteiro real lgico X1; SOMA, MDIA; frase, nome; X1; A,B; TEM;

Palavras Reservadas
So palavras que tero uso especfico no nosso pseudo-cdigo e que no devero ser usadas como identificadores, para no causar confuso na interpretao. Exemplo: Algoritmo, Programa, Bloco, Procedimento, Inteiro, Real, Texto, Const, Var, Tipo, Incio, Imprima, Se, Ento, Seno, Enquanto, Repita, Variando, Faa, Caso, At, Vetor, Matriz, Registro, Fim, Execute, Procedimento, Funo, etc.

Operadores
Na soluo da grande maioria dos problemas necessrio que as variveis tenham seus valores consultados ou alterados e, para isto, devemos definir um conjunto de OPERADORES, sendo eles:

13

OPERADOR DE ATRIBUIO

Exemplos: O valor da expresso atribudo ao identificador(varivel). X 2; y 5-x;

Este comando permite que se fornea ou altere o valor de uma determinada varivel, onde o tipo desse valor seja compatvel ao tipo de varivel na qual est sendo armazenado, de acordo com o especificado na declarao. NUM 8 {A varivel NUM recebe o valor 8} NOME Guilherme {A varivel NOME recebe o valor Guilherme} CONT 0 AUXNOME NOME {A varivel AUXNOME recebe o contedo da varivel NOME} ACHOU falso {A varivel ACHOU recebe o valor falso} OPERADORES ARITMTICOS

14

OPERADORES RELACIONAIS So utilizados para relacionar variveis ou expresses, resultando num valor lgico (Verdadeiro ou Falso), sendo eles:

Exemplos: NUM 3 NOME DENISE NUM > 5 falso (0) {3 no maior que 5} NOME < DENIZ verdadeiro (1) {DENISE vem antes de DENIZ} (5 + 3) > = 7 verdadeiro NUM != (4 1) falso {lembre-se que NUM recebeu 3} OPERADORES LGICOS So utilizados para avaliar expresses lgicas, sendo eles: e ("and") : conjuno ou ("or") :disjuno no ("not") : negao Exemplos: ACHOU falso NUM 9 (4>5) e (5>3) => falso e verdadeiro (1) = falso (0) no ACHOU => verdadeiro PRIORIDADES DE OPERADORES Durante a execuo de uma expresso que envolve vrios operadores, necessrio a existncia de prioridades, caso contrrio poderemos obter valores que no representam o resultado esperado.

15

A maioria das linguagens de programao utiliza as seguintes prioridades de operadores : 1 - Efetuar operaes embutidas em parnteses "mais internos" 2 - Efetuar funes 3 - Efetuar multiplicao e/ou diviso 4 - Efetuar adio e/ou subtrao 5 - Operadores relacionais 6 - Operadores lgicos Ou seja, Primeiro: Parnteses e Funes Segundo: Expresses Aritmticas 1)+, - (Unitrios) 2) ** 3) *,/ 4)+,- (binrio) Terceiro: Comparaes Quarto: No Quinto: e Sexto: ou OBS: O programador tem plena liberdade para incluir novas variveis, operadores ou funes para adaptar o algoritmo as suas necessidades, lembrando sempre, de que, estes devem ser compatveis com a linguagem de programao a ser utilizada.

16

Captulo 04 Estruturas Bsicas de Controle


Sequncia
Grupo de comandos em que so executados um aps o outro.

Seleo
Tambm chamada de estrutura de deciso ou de processamento condicional, a estrutura de seleo utilizada quando a execuo de um comando (ou uma seqncia de comandos) depende de um teste anterior (uma ou mais comparaes). A seleo pode ser simples ou composta.

Seleo Simples
Quando a execuo de um comando (ou de uma seqncia de comandos) depender de uma condio verdadeira, e no h comandos a executar se a condio for falsa.

onde a CONDIO poder ser tambm uma expresso lgica.

17

Seleo Composta
Quando se executa um comando (ou seqncia de comando) se uma condio verdadeira, e se executa um outro comando (ou seqncia de comandos) se a condio falsa.

Aninhamento de Selees
A estrutura de Seleo permite o aninhamento, ou seja, o comando a ser executado dentro de uma seleo (por exemplo, no "Seno") pode ser uma outra seleo. Outro aninhamento poder ocorrer tambm com esta ltima seleo e assim por diante. Nos casos de vrios aninhamentos subseqentes, uma boa identao ser fundamental para o entendimento de algoritmo quando utilizando pseudo-cdigo.

18

Estruturas de Repetio Laos (Loops)


Lao Enquanto (While)
A estrutura de repetio (enquanto) utilizada quando um conjunto de comandos deve ser executado repetidamente, enquanto uma determinada condio (expresso lgica) permanecer verdadeira. Dependendo do resultado do teste da condio, o conjunto de comandos poder no ser executado nem uma vez (se for falsa no primeiro teste), ou ser executado vrias vezes (enquanto for verdadeira). Chama-se a isso um lao ("loop"). Da mesma forma que a estrutura de seleo, ela permite o aninhamento de repeties, ou seja, a existncia de uma estrutura de repetio dentro de outra. Podero haver tambm aninhamentos de selees dentro de estruturas repetitivas e vice-versa. Dois cuidados ao criar estruturas de repetio (enquanto): 1. Inicializar a(s) varivel(eis) que controla(m) o lao antes do incio do lao; 2. Inicializar a(s) varivel(eis) que controla(m) o lao dentro do lao (seja por leitura ou por atribuio), pois se isto no for feito cairemos no que chamamos um lao infinito e de l o nosso programa no sair.

19

Controlados por Contador


Uma varivel fornecida com o n. de vezes que ser repetido o lao.

Repetio com Teste no Final


Quando se deseja executar a srie de comandos uma vez pelo menos, pode se fazer o teste no final. Essa variao tem um uso bastante efetivo na validao de dados de entrada, pelo teclado, mas pode ser sempre substituda por um enquanto. Uma vantagem do repita que no preciso inicializar a(s) varivel(eis) de controle do lao antes de entrar no mesmo. Deve-se, contudo, ter o cuidado de modific-la(s) dentro do lao para que no caiamos em um lao infinito. Executa uma instruo e faz um teste lgico. Dependendo da resposta, fica repetindo o processo at o teste lgico dar Verdadeiro.

Os comandos C1, C2,....,Cn so executados pelo menos uma vez. Quando a condio encontrada, ela testada, se for verdadeira o comando seguinte ser executado, se for falsa, os comandos C1, C2,...,Cn so reexecutados at que a condio se torne verdadeira. O comando repita-at equivalente ao comando enquanto, conforme ser mostrado no exemplo abaixo.

20

Observa-se que a utilizao de um comando repita no lugar de um comando enquanto corresponde a utilizar como <condio> para o repita a negao da <condio> do enquanto. Numa estrutura Enquanto, os comandos so executados 0 ou mais vezes. Numa estrutura Repita, os comandos so executados 1 ou mais vezes.

Regras Prticas para a Construo de Algortmos Legveis


1. Procure incorporar comentrios no algoritmo, pelo menos para descrever o significado das variveis utilizadas. Exemplo: /* Clculo da mdia */ 2. Escolha nomes de variveis que sejam significativos, isto , que traduzam o tipo de informao a ser armazenada na varivel. Exemplo: NOTA MATRCULA

3. Procure alinhar os comandos de acordo com o nvel a que pertenam, isto , destaque a estrutura na qual esto contidos.

21

4. Tenha em mente que seus algoritmos devero ser lidos e entendidos por outras pessoas (e por voc mesmo) de tal forma que possam ser corrigidos, receber manuteno e serem modificados. 5. Escreva comentrios no momento em que estiver escrevendo o algoritmo. Um algoritmo no documentado um dos piores erros que um programador pode cometer. 6. Use comentrios no incio para explicar o que o algoritmo faz. Alguns comentrios seriam; - Uma descrio do que faz o algoritmo - Como utiliz-lo - Explicao do significado das variveis mais importantes - Estrutura de dados utilizadas - Os nomes de quaisquer mtodos especiais utilizados - Autor - Data 7. Utilize espaos em branco para melhorar a legibilidade. Espaos em branco, inclusive linhas em branco so valiosssimos para melhorar a aparncia de um algoritmo. 8. Escolha nomes representativos para suas variveis. 9. Um comando por linha suficiente - O algoritmo fica mais legvel - O algoritmo fica mais fcil de ser depurado. Exemplo: A=14,2;I=1;enquanto I<10 faa X=X+1;K=I*K;I=I+1; fim enquanto O mesmo exemplo com cada comando em uma linha

22

10. Utilize parnteses para aumentar a legibilidade e prevenir-se contra erros.

11. Toda vez que uma modificao for feita no algoritmo, os comentrios devem ser alterados.

Uma Reflexo Antes de Resolver um Problema


Passo 1 - Leia cuidadosamente a especificao do problema at o final; Passo 2 - Caso no tenha entendido o problema, pergunte; Passo 3 - Levantar e analisar todas as sadas exigidas na especificao do problema; Passo 4 - Levantar e analisar todas as entradas citadas na especificao do problema; Passo 5 - Verificar se necessrio gerar valores internamente ao algoritmo e levantar as variveis necessrias e os valores iniciais de cada uma; Passo 6 - Levantar e analisar todas as transformaes necessrias para, dadas as entradas e valores gerados internamente, produzir as sadas especificadas; Passo 7 - Testar cada passo do algoritmo; Passo 8 - Avaliao geral, elaborando o algoritmo e revendo comentrios.

23

Exerccios Complementares
1. Faa um algoritmo que leia quatro idades e calcule a mdia das mesmas. 2. Altere o algoritmo de media de idade para ler tambm os nomes e ao final mostrar a mensagem com os trs nomes mais a mdia de suas idades. 3. Construa um algoritmo que calcule a mdia do TV1 da turma de lgica de programao. 4. Faa um algoritmo que faa a soma dos nmeros inteiros de 1 a 18. 5. Faa um programa que leia 4 nmeros inteiros e apresente: Mdia dos mpares Maior nmero par Diferena do maior menos o menor nmero

6. Faa um programa que leia o nome e a idade de 3 pessoas e apresente: Maior idade Nome da pessoa mais nova Mdia das idades

7. Faa um programa que leia a medida do lado de um quadrado e calcule e apresente a rea e o permetro desta figura. Obs: Permetro a soma de todos os lados de uma figura geomtrica. 8. Faa um programa que leia o raio de uma circunferncia e calcule e apresente sua a rea e permetro. 9. Faa um programa que leia o valor dos lados de um tringulo retngulo e calcule e apresente a sua rea. rea = (base*altura)/2 10. Faa um algoritmo que calcule a soma dos nmeros pares de 100 at 200. 11. Num frigorfico existem 90 bois. Cada boi traz preso em seu pescoo um carto contando seu nmero de identificao e seu peso. Fazer um algoritmo que escreva o nmero e peso do boi mais gordo e do boi mais magro.

24

12. Faa um algoritmo que leia um nmero indeterminado de nmeros, o algoritmo encerra quando for digitado o nmero 99. O algoritmo deve fornecer ao final o percentual de nmeros pares e mpares digitados. 13. Faa um algoritmo que leia 2 nmeros inteiros de cada vez. A leitura deve ser feita enquanto no for digitado o nmero 0. Os nmeros lidos devero ser apenas nmeros mpares e, quando forem consecutivos devero ser multiplicados. Ao finalizar o algoritmo dever escrever a soma das multiplicaes. 14. Faa um algoritmo que leia um valor e some 10 valores pares a partir do valor lido, escrevendo no final o resultado obtido. OBS: o valor lido pode ser mpar. 15. Faa um algoritmo que fique lendo valores at encontrar o valor zero, com cada valor lido faa a soma de 10 valores subseqentes e mostre a soma e a mdia desses valores. 16. Fazer um algoritmo que fique lendo valores, um de cada vez e faa o seguinte: se for 0 (zero) escreva "desligue tudo" e termine o algoritmo; se for 1 (um) escreva "ligar TV"; se for 2 (dois) escreva "ligar rdio"; se for 3 (trs) escreva "ligar a luz". se for outro valor escreva "tente novamente"

17. Escrever um algoritmo que l 10 valores, um de cada vez, e conta quantos deles esto no intervalo fechado entre 10 e 20 e quantos deles esto fora do intervalo, no final escreva estes resultados. 18. Escrever um algoritmo que l o nro de matrcula dos vendedores de uma empresa, seu salrio fixo e o total de vendas de cada vendedor. Cada vendedor recebe um salrio fixo, mais uma comisso proporcional as vendas por ele efetuadas. A comisso de 3 % sobre o total de vendas at 1.000 e 5 % sobre o que ultrapassa este valor. Escrever o nro do vendedor, o total de suas vendas, seu salrio fixo e seu salrio total. OBS: A leitura deve ser encerrada quando ler a matrcula do vendedor nro 99. 19. Escreva os 20 primeiros termos da srie: 1,3,9,27,...

25

20. Faa um algoritmo que leia vrios valores, um de cada vez e mostre quantos destes nmeros foram negativos, quantos positivos, bem como a soma dos nros positivos e a soma dos nmeros negativos. O valor lido 0 (zero) significa fim de algoritmo. 21. Leia o nome e altura, um de cada vez, para as moas inscritas em um concurso de beleza. Ao final do algoritmo escreva tambm as duas maiores alturas e nome das moas que a possuem. O algoritmo termina quando o nome da moa lido for FIM. 22. Tem-se um conjunto de dados contendo altura e sexo de 50 pessoas, fazer um algoritmo que calcule e escreva: a maior e a menor altura do grupo mdia de altura das mulheres o nmero de homens

23. Fazer um algoritmo que calcula o preo vista e o preo no carto de crdito de uma mercadoria. Sendo que sobre o preo vista dado um desconto de (5%) e para o pagamento a prazo embutido acrscimo de 30% sobre o preo da mercadoria.

26

Captulo 05 Estruturas de Dados Homogneas


Antes de tratarmos das estruturas de dados homogneas, vejamos algumas novas estruturas de controle, que faremos uso quando trabalharmos com vetores e matrizes.

Repetio com Varivel de Controle Para (For)


Repete uma instruo um pr-determinado nmero de vezes.

Significado do comando: v, i, l, p so variveis quaisquer e que, de acordo com as regras da programao estruturada, no devem ser modificadas nos comandos C1, C2, . . ., Cn. O comando para , na verdade, o comando enquanto utilizando-se uma varivel de controle, escrito numa notao compactada. Neste caso existir sempre uma inicializao da varivel de controle, um teste para verificar se a varivel atingiu o limite e um acrscimo na varivel.

27

1) Assim como no comando enquanto, se o valor inicial (i) j for superior ao limite (l), os comandos C1, C2,...,Cn no sero executados. 2) Toda vez que o fim para encontrado, a varivel de controle (i) incrementada pelo passo p e o teste (v<=l) feito. 3) O valor da varivel de controle torna-se indefinido assim que executado o comando para. Neste aspecto o comando para diferente do comando enquanto. Por exemplo, com o trecho de algoritmo seguinte:

sero impressos dentro do comando para: 1,2,3,4,5,6,7,8,9,10 e fora do comando para ser impresso um valor indefinido Quando o passo (p) for igual a 1, no ser necessrio escrever esta especificao no comando.

28

Seleo entre as Mltiplas Alternativas-Caso (Case)


Em nossos algoritmos, quando uma varivel ou expresso aritmtica puder assumir vrios valores diferentes, e a execuo do programa for diferente dependendo do valor obtido ou assumido por esta varivel ou expresso, poderemos utilizar a estrutura que se segue, ao invs de vrios "Se" aninhados.

Onde: - valor_1, valor_2, etc, pode ser um nico valor ou uma faixa de valores discretos.

29

Vetores
Um vetor ou agregado homogneo, ou ainda varivel composta homognea, uma estrutura de dados que contm elementos de mesmo tipo, que podem ser referenciados como um todo. Ao declararmos um vetor, estamos reservando na memria principal do computador uma srie de clulas para uso da varivel daquele tipo. O nome do vetor aponta para a base das clulas e o seu incio d a posio relativa do elemento referenciado ao primeiro (base). Nem sempre os tipos bsicos (inteiro, real, caracter e lgico) so suficientes para exprimir estruturas de dados em algoritmos. Por exemplo consideremos um problema em que um professor com 5 alunos deseja imprimir a nota e a mdia de seus alunos. Nesse caso seria necessrio se considerar cinco variveis reais para contar as notas dos cinco alunos. Imagine que o nmero de alunos da turma seja 80. S a declarao destas variveis tornaria impraticvel a redao do algoritmo. Da a necessidade de novos tipos serem criados. Um destes tipos, o vetor, ser estudado. Os vetores podem ser unidimensionais ou multi-dimensionais (matrizes). Um vetor unidimensional, como uma lista de notas dos 50 alunos de uma turma, tem apenas um ndice. Se existirem porm vrias turmas poderemos utilizar um vetor com dois ndices (o nmero da turma e o nmero do aluno da turma).

30

Declarao de Vetores

31

32

33

34

Exerccios Complementares - Vetores


1. Faa um algoritmo que leia 18 nmeros inteiros e calcule e imprima a soma dos mesmos. 2. Faa um algoritmo que leia 18 nmeros inteiros e calcule e imprima a mdia dos mesmos. 3. Faa um programa que leia 4 nmeros inteiros e apresente: Mdia dos mpares Maior nmero par Diferena do maior menos o menor nmero

4. Faca um programa que leia um contedo com 100 nmeros inteiros e apresente a media dos nmeros. 5. Faca um programa que leia 2 conjuntos com 50 nmeros inteiros e gere um terceiro conjunto com a media dos elementos de A e B. Apresente o C. 6. Faca um programa que leia um conjunto A com 30 nmeros inteiros e que armazene em um conjunto B do mesmo tipo os elementos de A multiplicados por 3. apresente o conjunto B. 7. Faa um programa que leia um conjunto A com 100 nmeros inteiros e que gere um conjunto B com os elemento de A de acordo com a seguinte regra. Se o elemento de A for par, armazene em B multiplicando por 5. Se o elemento de A for impar, armazene em B somando 5. 8. Faa um programa que leia dois conjuntos A e B com 20 inteiros e troque os valores de A com B. 9. Faa um programa que leia dois conjuntos A e B com 15 nmeros inteiros e gere um conjunto de 30 elementos, onde os 15 primeiros elementos so de A e o resto de B. Apresente o conjunto C. 10. Faa um programa que leia dois nmeros e apresente o maior deles. 11. Fazer um algoritmo que descubra o maior valor de um vetor de 20 posies. 12. Construa um algoritmo que receba trs nmero e mostre o maior deles.

35

Matrizes
Definio: Conjunto de dados referenciados por um mesmo nome e que necessita de mais de um ndice para ter seus elementos individualizados. Quando temos mais de uma dimenso ento utilizamos as matrizes, que de diferente no uso e na declarao s tem estas dimenses a mais explcitas: A sintaxe a seguinte: <Tipo bsico> identificador [li1:lf1,li2:ls2,......lin:lfn]

Esta especificao corresponde apenas criao do modelo, e, para efetivar a estrutura de dados dentro do algoritmo, necessria uma declarao dando um nome varivel que segue o modelo.

O nmero de dimenses da matriz ser igual ao nmero de vrgulas ( , ) da declarao mais 1. O nmero de elementos igual ao produto do nmero de elementos de cada dimenso: (lf1-li1+1)*(lf2-li2+1)*...*(lfn-lin+1)

36

1. Escreva um algoritmo que leia duas matrizes reais de dimenso 3 x 5, calcule e imprima a soma das matrizes.

2. Escreva um algoritmo para um programa que leia uma matriz quadrada 20 x 20 de elementos reais, divida cada elemento de uma linha da matriz pelo elemento da diagonal principal desta linha e imprima a matriz assim modificada.

37

Exerccios Complementares Matrizes

38

Captulo 06 Estruturas de Dados Heterogneas


Introduo
Com a estrutura de dados heterogneas (registro), possvel agrupar tipos de dados diferentes em uma mesma estrutura. Os tipos registro devem ser declarados ou atrbuidos antes das variveis, pois pode ocorrer a necessidade de declarar uma varivel com o tipo registro anteriormente atribudo. Para que seja declarado um tipo registro em portugol, deve ser utilizada a instruo tipo em conjunto com a instruo registro...fim_registro. Exemplo:

39

Leitura de Registros:

Escrita de Registros:

40

Leitura de Registros de Conjuntos:

Escrita de Registros de Conjuntos:

41

Exemplo:

Leitura de Conjuntos de Registros:

42

Escrita de Conjuntos de Registros:

43

Exemplo:

44

Captulo 07 Modularizao de Algortimos


Introduo
Vimos que os algoritmos estruturados so desenvolvidos levando-se em conta algumas premissas bsicas: 1) Desenvolver o algoritmo em diferentes fases de detalhamento crescente, do geral ao particular, por refinamentos sucessivos (desenvolvimento "top-down" ou de cima para baixo). 2) Decompor o algoritmo em mdulos funcionais, organizados de preferncia em um sistema hierrquico. Esses mdulos trazem vantagens adicionais para testes, pois testa-se um mdulo (ou seja, uma parte do programa) de cada vez, independentemente; e para reutilizao de um mdulo em outros algoritmos e programas, no futuro. Passaremos agora a formalizar a utilizao de mdulos nos nossos algoritmos e verificar as vantagens que os mesmos trazem para entendimento, construo, codificao, teste e reutilizao dos mesmos. A grande maioria das linguagens de programao que so utilizadas, tem esta facilidade, seja com o nome de Sub-rotinas, Subprogramas, Procedimentos, Funes, Mdulos, Blocos, etc., sempre possvel subdividir-se um programa de modo a facilitar o entendimento, permitir a reutilizao, evitando-se a repetio de blocos dos programas. No nosso pseudo-cdigo definiremos dois tipos de mdulos: Os procedimentos ("procedures") e as funes ("functions"). Os procedimentos e funes so normalmente definidos antes de serem utilizados(chamados) pelo programa principal. Em se tratando de algoritmos, entretanto, poderemos definir nossos procedimentos e funes em qualquer parte do algoritmo principal ou depois dele, adotando os formatos que se seguem e as normas de documentao.

Procedimentos
Um procedimento uma seqncia de comandos precedida por uma seqncia de declaraes que possui um identificador (nome do procedimento), uma lista de parmetros opcional e pode realizar qualquer tipo de processamento que o programador ou analista deseje.

45

As variveis, os tipos e as constantes declaradas dentro de um procedimento s so acessveis dentro dos comandos do procedimento. So chamadas variveis locais. Em um Algoritmo, as variveis, tipos e constantes declaradas logo aps o identificador do algoritmo, so acessveis e visveis dentro de qualquer procedimento que esteja sendo usado pelo algoritmo. So chamadas variveis Globais. uma boa tcnica ao se construir um procedimento, no fazer uso no mesmo, de variveis globais e referenciar e utilizar apenas as variveis locais e os parmetros do procedimento. Isso far com que cada procedimento, ao ser modificado, no afete outras partes do Algoritmo, e da mesma forma as variveis globais podero ser modificadas sem que haja efeitos colaterais nos procedimentos.

Utilizando parmetros e no variveis globais dentro do procedimento, podemos, por assim dizer, isol-lo do meio exterior e obter vantagens adicionais na codificao, pois, uma vez que foram bem definidos os parmetros, um programador poder desenvolver seu procedimento sem se preocupar com o algoritmo que o vai chamar. Poderemos tambm test-lo individualmente e isoladamente para verificar sua correo. Isto ser comprovado na disciplina LP. A isto se denomina Encapsulamento. Uma lista de parmetros consiste em uma lista de variveis e seus respectivos tipos.

46

Funes
Funes so as estruturas que permitem ao usurio separar seus programas em blocos. Se no as tivssemos, os programas teriam que ser curtos e de pequena complexidade. Para fazermos programas grandes e complexos temos de constru-los bloco a bloco. Uma funo um mdulo que tem por objetivo calcular e retornar ao algoritmo, procedimento ou funo "chamador" um valor. A chamada de uma funo para execuo feita apenas citando-se o seu identificador no meio de uma expresso. Uma funo dita recursiva quando chama a ela prpria.

Onde:

A lista de parmetros semelhante dos procedimentos Antes do nome da funo d o tipo do valor que a funo retorna ao algoritmo ou procedimento chamador.

O tipo-de-retorno o tipo de varivel que a funo vai retornar. O default o tipo inteiro (int), ou seja, uma funo para qual no declaramos o tipo de retorno considerada como retornando um inteiro. A declarao de parmetros uma lista com a seguinte forma geral: tipo nome1, tipo nome2, ... , tipo nomeN Repare que o tipo deve ser especificado para cada uma das N variveis de entrada. na declarao de parmetros que informamos ao compilador quais sero as entradas da funo (assim como informamos a sada no tipo-deretorno).
47

O corpo da funo a sua alma. nele que as entradas so processadas, sadas so geradas ou outras coisas so feitas. O Comando retorna (return) O comando return tem a seguinte forma geral: retorna valor_de_retorno; ou retorna; Digamos que uma funo est sendo executada. Quando se chega a uma declarao retorna (return) a funo encerrada imediatamente e, se o valor de retorno informado, a funo retorna este valor. importante lembrar que o valor de retorno fornecido tem que ser compatvel com o tipo de retorno declarado para a funo. Uma funo pode ter mais de uma declarao retorna (return). Isto se torna claro quando pensamos que a funo terminada quando o programa chega primeira declarao retorna (return). Abaixo esto dois exemplos de uso do retorna (return):

48

49

importante notar que, como as funes retornam valores, podemos aproveit-los para fazer atribuies, ou mesmo para que estes valores participem de expresses. Mas no podemos fazer: func(a,b)=x; /* Errado! */

Escopo de Variveis
O escopo o conjunto de regras que determinam o uso e a validade de variveis nas diversas partes do programa.

Variveis Locais
O primeiro tipo de variveis que veremos so as variveis locais. Estas so aquelas que s tm validade dentro do bloco no qual so declaradas. Podemos declarar variveis dentro de qualquer bloco. S para lembrar: um bloco comea quando abrimos uma chave e termina quando fechamos a chave. At agora s tnhamos visto variveis locais para funes completas. Mas um comando para(for) pode ter variveis locais e que no sero conhecidas fora dali. A declarao de variveis locais a primeira coisa que devemos colocar num bloco. A caracterstica que torna as variveis locais to importantes justamente a de serem exclusivas do bloco. Podemos ter quantos blocos quisermos com uma varivel local chamada x, por exemplo, e elas no apresentaro conflito entre elas.

50

A palavra reservada do C auto serve para dizer que uma varivel local. Mas no precisaremos us-la pois as variveis declaradas dentro de um bloco j so consideradas locais. Abaixo vemos um exemplo de variveis locais:

51

No programa acima temos trs funes. As variveis locais de cada uma delas no iro interferir com as variveis locais de outras funes. Assim, a varivel abc de func1() no tem nada a ver (e pode ser tratada independentemente) com a varivel abc de func2(). A varivel x de func1() tambm completamente independente da varivel x da funo principal main(). As variveis a, b e c so locais ao bloco para(for). Isto quer dizer que s so conhecidas dentro deste bloco e so desconhecidas no resto da funo Principal(main()). Quando usarmos a varivel a dentro do bloco para (for) estaremos usando a varivel a local ao para(for) e no a varivel a da funo main().

Parmetros Formais
O segundo tipo de varivel que veremos so os parmetros formais. Estes so declarados como sendo as entradas de uma funo. No h motivo para se preocupar com o escopo deles. fcil: o parmetro formal uma varivel local da funo. Voc pode tambm alterar o valor de um parmetro formal, pois esta alterao no ter efeito na varivel que foi passada funo. Isto tem sentido, pois quando o C passa parmetros para uma funo, so passadas apenas cpias das variveis. Isto , os parmetros formais existem independentemente das variveis que foram passadas para a funo. Eles tomam apenas uma cpia dos valores passados para a funo.

Variveis Globais
Variveis globais so declaradas, como j sabemos, fora de todas as funes do programa. Elas so conhecidas e podem ser alteradas por todas as funes do programa. Quando uma funo tem uma varivel local com o mesmo nome de uma varivel global a funo dar preferncia varivel local. Vamos ver um exemplo no nosso pseudo-Cdigo:

52

No exemplo acima as variveis z e k so globais. Veja que func2() tem uma varivel local chamada z. Quando temos ento, em func2(), o comando z=10 quem recebe o valor de 10 a varivel local, no afetando o valor da varivel global z. Evite ao mximo o uso de variveis globais. Elas ocupam memria o tempo todo (as locais s ocupam memria enquanto esto sendo usadas) e tornam o programa mais difcil de ser entendido e menos geral.

Passagem de Parmetros Por Valor e Por Referncia


J vimos que, na linguagem C, quando chamamos uma funo os parmetros formais da funo copiam os valores dos parmetros que so passados para a funo. Isto quer dizer que no so alterados os valores que os parmetros tm fora da funo. Este tipo de chamada de funo denominado chamada por valor. Isto ocorre porque so passados para a funo apenas os valores dos parmetros e no os prprios parmetros. Veja o exemplo abaixo:

53

No exemplo acima o parmetro formal num da funo sqr() sofre alteraes dentro da funo, mas a varivel num da funo principal main() permanece inalterada: uma chamada por valor. Outro tipo de passagem de parmetros para uma funo ocorre quando alteraes nos parmetros formais, dentro da funo, alteram os valores dos parmetros que foram passados para a funo. Este tipo de chamada de funo tem o nome de "chamada por referncia". Este nome vem do fato de que, neste tipo de chamada, no se passa para a funo os valores das variveis, mas sim suas referncias (a funo usa as referncias para alterar os valores das variveis fora da funo). O C s faz chamadas por valor. Isto bom quando queremos usar os parmetros formais vontade dentro da funo, sem termos que nos preocupar em estar alterando os valores dos parmetros que foram passados para a funo. Mas isto tambm pode ser ruim s vezes, porque podemos querer mudar os valores dos parmetros fora da funo tambm. O C++ tem um recurso que permite ao programador fazer chamadas por referncia. H entretanto, no C, um recurso de programao que podemos usar para simular uma chamada por referncia. Quando queremos alterar as variveis que so passadas para uma funo, ns podemos declarar seus parmetros formais como sendo ponteiros. Os ponteiros so a "referncia" que precisamos para poder alterar a varivel fora da funo. O nico inconveniente que, quando usarmos a funo, teremos de lembrar de colocar um & na frente das variveis que estivermos passando para a funo. Veja um exemplo:

54

No muito difcil. O que est acontecendo que passamos para a funo Swap o endereo das variveis num1 e num2. Estes endereos so copiados nos ponteiros a e b. Atravs do operador * estamos acessando o contedo apontado pelos ponteiros e modificando-o. Mas, quem este contedo? Nada mais que os valores armazenados em num1 e num2, que, portanto, esto sendo modificados.

Funes Recursivas
Existem casos em que um procedimento ou funo chama a si prprio. Diz-se ento que o procedimento ou funo recursivo. Por exemplo, o fatorial de um nmero n pode ser definido recursivamente, ou seja:

Por exemplo, o fatorial de 3 ser calculado a partir da chamada funo pelo comando x =fat(3) que retornar em fat o valor 6.

Estruturao dos Mdulos de um Algoritmo


Um procedimento nada mais que um algoritmo hierarquicamente subordinado a um outro algoritmo, comumente chamado de Mdulo principal ou programa principal ou ainda algoritmo principal. Da mesma forma, um procedimento poder conter outros procedimentos (e tambm funes) aninhados. Assim, ao definirmos as fases do nosso algoritmo, no processo de refinamentos sucessivos, se transformarmos as mesmas em procedimentos e os refinamentos de cada procedimento em outros procedimentos, obteremos, ao fim do processo de criao, um algoritmo

55

estruturado, com mdulos hierarquicamente subordinados e muito menos suscetvel a erros de lgica na fase de codificao do programa.

Captulo 08 Algortimos de Pesquisa e Ordenao


Introduo
Quando temos um Vetor (ou Matriz) com muitos elementos e precisamos descobrir se um determinado elemento que procuramos se encontra no vetor, uma soluo que certamente nos vem mente comparar o elemento que procuramos com cada elemento do vetor, at que encontremos ou at que concluamos que o elemento procurado no est no vetor. Esta a base do raciocnio dos algoritmos de pesquisa ou busca ("Search"), que como sugere o nome, "Pesquisam", em um vetor, a existncia ou no existncia de um elemento procurado. A diferena entre um e outro algoritmo de busca, fica por conta da rapidez com que "varremos" o vetor para encontrar o elemento ou para concluirmos que ele no existe. Um fator que influencia em muito nessa rapidez a disposio dos elementos no vetor. Se esto desordenados, seguramente teremos que verificar do primeiro ao ltimo elemento para concluir, com certeza, que o elemento no existe. J se esto ordenados, ao encontrarmos um elemento maior (ou menor) que o elemento procurado, poderemos concluir pela sua no existncia. Os algoritmos de ordenao ou classificao ("Sort"), por sua vez, so utilizados para ordenar os elementos de um vetor de forma a facilitar a pesquisa posterior de um elemento, no conjunto de elementos existentes. Existem algoritmos para pesquisa e ordenao para as mais variadas estruturas de dados. Na nossa disciplina, entretanto, trataremos apenas os algoritmos de pesquisa e ordenao em vetores, que tambm podem ser utilizados em matrizes, desde que sofram pequenos ajustes.

Algoritmo de Pesquisa
Para fazermos qualquer pesquisa em vetor (ou matriz) precisamos de quatro parmetros: a) O vetor no qual realizaremos a pesquisa b) O nmero de elementos desse vetor que devem ser pesquisados. (Lembre-se que muitas vezes um vetor de 1000 elementos, s tem 700 carregados, e podemos evitar tratamento de 300 elementos com "lixo"). c) O elemento procurado
56

d) Um ndice que vai ser preenchido com a posio onde o elemento foi encontrado ou retornar com 0 (zero) caso o elemento no exista. Como os algoritmos de pesquisa podero ser utilizados muitas vezes na soluo de diferentes problemas, vamos defini-los como Procedimentos de um Algoritmo Principal hipottico, com os seguintes argumentos: Declaraes: Const MAXELEM = 10000 {Nmero mximo de elementos do vetor, apenas para limitar o tamanho do vetor} <Tipo bsico> Nome do vetor[1:MAXELEM] inteiro TOTELEM {Corresponde ao parmetro b) Total de elementos a ser pesquisado} <Tipo bsico> ELEMPROC {Corresponde ao Parmetro c) Elemento procurado} Inteiro POS {Corresponde ao Parmetro d) Posio em VET onde ELEMPROC foi encontrado, ou 0 se no o foi}

Pesquisa Sequencial Simples (Linear)


Na pesquisa seqencial simples, como o vetor a ser pesquisado no est ordenado pelo elemento procurado, teremos de comparar um a um o ELEMPROC com cada elemento de VET. Portanto para um elemento inexistente teremos de fazer TOTELEM testes e para um elemento existente faremos, na mdia, TOTELEM/2 testes.

57

Se precisamos determinar todas as ocorrncias de um elemento em um vetor, o problema se simplifica, pois teremos que, obrigatoriamente, varrer o vetor at o fim (Elimina-se do lao o teste POS = =0), mas teremos de guardar em um vetor todas as posies onde o elemento foi encontrado ou, o que mais usual, processaremos a ocorrncia dentro do procedimento (aps POS = J). O trecho de procedimento abaixo exemplifica:

Pesquisa Sequencial Ordenada


Para se utilizar a Pesquisa Seqencial Ordenada, o vetor de busca tem de estar ordenado pelo campo chave da pesquisa. Com isso, ao se encontrar no vetor, um elemento maior do que o elemento procurado, poderemos abandonar a busca pois, com certeza, no mais o encontraremos. Devido a isso o nmero de testes para elementos existentes ou inexistentes ser, na mdia, de TOTELEM/2, e, por isso, melhor que o anterior para o caso de elemento inexistente.

58

Exemplo - Dado um vetor A de 128 elementos, verificar se existe um elemento igual a K (chave) no vetor. Se existir, imprimir a posio onde foi encontrada a chave; se no, imprimir: chave K no encontrada . O vetor A e chave K so lidos de cartes.

59

Neste exemplo, a pesquisa a um elemento ficar mais eficiente se utilizarmos a pesquisa binria, desde que o vetor j esteja ordenado. Nesta pesquisa procuramos o elemento K dividindo o vetor em duas partes e testando em qual das duas ele deveria estar. Procedendo da mesma forma para a parte provvel, e assim sucessivamente:

Pesquisa Binria
A pesquisa binria um mtodo que tambm s se aplica a vetores previamente ordenados. A sua grande vantagem a rapidez e, por isso, ela muito recomendada para vetores grandes. Neste mtodo, a primeira comparao feita com o elemento do meio do vetor, eliminando-se assim metade do mesmo para a busca. Seguem-se comparaes sucessivas ao elemento do meio do segmento onde pode estar o elemento procurado. Assim, a cada comparao feita, metade do vetor eliminada.

60

Algoritmo de Ordenao
Como j foi dito, o propsito dos algoritmos de ordenao o de facilitar e acelerar a busca posterior de um elemento no vetor. Os algoritmos de ordenao so utilizados normalmente uma vez em cada execuo do programa, ou poucas vezes, se comparados com os de Pesquisa, por isso o uso de mtodos elementares e demorados no to problemtico como nas pesquisas. Na nossa disciplina, veremos trs algoritmos para classificao interna de vetores, que tm tempo de execuo proporcional ao quadrado do nmero de elementos a serem ordenados: Ordenao por seleo (mtodo seleo direta) Ordenao por insero (mtodo insero direta) Ordenao por troca (mtodo da bolha)

Mtodo de Seleo Direta


Este um dos mais simples mtodos existentes. Primeiro descobre-se o menor elemento do vetor e troca-se com o primeiro elemento. A partir da, com os elementos remanescentes, repete-se o processo at que todo o vetor esteja ordenado. Um exemplo bastante elucidativo o de algumas cartas de baralho na mesa viradas para cima ( vista). Seleciona-se a menor (ou maior) para coloc-la na primeira posio. Depois, seleciona-se, sucessivamente, a menor carta dentre as remanescentes e se a coloca sobre a primeira.

61

Mtodo de Insero Direta


Nesse mtodo, considera-se que um elemento do vetor (o primeiro) est ordenado E "insere-se" os demais considerando os anteriores j ordenados. Voltando-se ao exemplo do baralho como se agora as cartas sobre a mesa esto com a face para baixo e cada carta arrumada ordenadamente na mo em relao as que j esto na mo. Este mtodo pode ser utilizado, com vantagem, quando se est lendo elementos de um arquivo para serem posteriormente ordenados. Bastam leves modificaes no algoritmo, que leremos o arquivo e j o armazenaremos na memria ordenadamente.

62

Mtodo da Bolha
Este mtodo caracteriza-se por efetuar a comparao sucessiva de pares subseqentes de elementos, trocando-os de posio, se estiverem fora de ordem. Dos trs este o menos eficiente, j que cada troca de elementos exige trs comandos e o nmero de trocas (TOTELEM-1) vezes maior que no mtodo de seleo direta, por exemplo. Alm disso o mtodo mais complicado de entender que o de seleo direta. Segue-se exemplo de uma implementao de algoritmo de pesquisa utilizando-se esse mtodo.

63

Bibliografias
Farrer H. et ali. Algoritmos Estruturados., Editora Guanabara S. A., Rio de Janeiro, 1985. Guimares, Angelo M & Lages, Newton A. de C. Algoritmos e Estrutura de dados. LTC - Livros Tcnicos e Cientficos Editora S.A.; 216 1985 Tremblay, J. P; Bunt R. Cincia dos Computadores - Uma Abordagem Algortmica. Editora McGraw Hill do Brasil, so Paulo, 1983. Villas, Marcos V, & Villasboas, Luiz F.P. Programao Conceitos, Tcnicas e Linguagens. Ed. Campus; 195 p. 1988. Filho, Jos Vanni, Construo de Algoritmos. PUC-Rio . 4 edio Setembro de 95 [6] Manzano, J. ; Oliveira, J. Algoritmos . Editora rica. Dcima Quarta Edio. 2002. Santos, H. Curso de Linguagem C UFMG. 2003

64

You might also like