material de apoio - lógica de programação

Upload: anselmo-rodrigues-coelho-filho

Post on 06-Apr-2018

368 views

Category:

Documents


1 download

TRANSCRIPT

  • 8/3/2019 Material de Apoio - Lgica de Programao

    1/64

    1

    UNIVERSIDADE BANDEIRANTE DE SO PAULO - CAMPUS ABCSISTEMAS DE INFORMAO

    E

    TECNOLOGIA EM PROCESSAMENTO DE DADOS

    MATERIAL DE APOIO

    LGICA DE PROGRAMAO

    Verso 1.0 Novembro de 2006

    Prof. Luis Ricardo Tomiato

  • 8/3/2019 Material de Apoio - Lgica de Programao

    2/64

    2

    SUMRIO

    Captulo 01 Programao Estruturada...............................................................4Introduo .........................................................................................................4Conceitos Bsicos.............................................................................................4

    Captulo 02 Resoluo de Problemas: Algortmos ............................................7Definio de Algortmo......................................................................................7Tcnicas de Representao de Algoritmos.......................................................8Pseudo-Cdigo..................................................................................................9Algoritmo x Programa........................................................................................9Linguagem de Programao.............................................................................9Tipos de Linguagem de Programao ..............................................................9Estratgias na Resoluo de Problemas ........................................................10

    Critrios de Qualidade de um Programa .....................................................10Metodologia de Soluo ..............................................................................10

    Captulo 03 Algortmos .....................................................................................11

    Identificadores, Constantes, Variveis e Tipos Bsicos..................................11Declarao de Variveis .................................................................................12Palavras Reservadas ......................................................................................13Operadores .....................................................................................................13

    Captulo 04 Estruturas Bsicas de Controle ....................................................17Sequncia .......................................................................................................17Seleo ...........................................................................................................17Seleo Simples..............................................................................................17Seleo Composta..........................................................................................18Aninhamento de Selees ..............................................................................18Estruturas de Repetio Laos (Loops) .......................................................19

    Lao Enquanto (While) ................................................................................19Controlados por Contador ...........................................................................20Repetio com Teste no Final .....................................................................20Regras Prticas para a Construo de Algortmos Legveis .......................21Uma Reflexo Antes de Resolver um Problema..........................................23

    Exerccios Complementares ...........................................................................24Captulo 05 Estruturas de Dados Homogneas...............................................27

    Repetio com Varivel de Controle Para (For)...........................................27Seleo entre as Mltiplas Alternativas-Caso (Case) .....................................29Vetores............................................................................................................30

    Declarao de Vetores ................................................................................31Exerccios Complementares - Vetores............................................................35Matrizes...........................................................................................................36Exerccios Complementares Matrizes..........................................................38

    Captulo 06 Estruturas de Dados Heterogneas .............................................39Introduo .......................................................................................................39

    Captulo 07 Modularizao de Algortimos ......................................................45Introduo .......................................................................................................45Procedimentos ................................................................................................45

  • 8/3/2019 Material de Apoio - Lgica de Programao

    3/64

    3

    Funes ..........................................................................................................47Escopo de Variveis........................................................................................50

    Variveis Locais...........................................................................................50Parmetros Formais ....................................................................................52Variveis Globais.........................................................................................52

    Passagem de Parmetros Por Valor e Por Referncia................................53Funes Recursivas........................................................................................55Estruturao dos Mdulos de um Algoritmo....................................................55

    Captulo 08 Algortimos de Pesquisa e Ordenao .........................................56Introduo .......................................................................................................56Algoritmo de Pesquisa ....................................................................................56

    Pesquisa Sequencial Simples (Linear) ........................................................57Pesquisa Sequencial Ordenada ..................................................................58Pesquisa Binria..........................................................................................60

    Algoritmo de Ordenao .................................................................................61Mtodo de Seleo Direta ...........................................................................61

    Mtodo de Insero Direta...........................................................................62Mtodo da Bolha..........................................................................................63Bibliografias.....................................................................................................64

  • 8/3/2019 Material de Apoio - Lgica de Programao

    4/64

    4

    Captulo 01 Programao Estruturada

    Introduo

    Programao de computadores uma atividade que vem sedesenvolvendo h mais de 50 anos desde o surgimento das primeiraslinguagens de programao.

    Inicialmente, aprendia-se a programar utilizando-se a prpria linguagemcomo ferramenta. A linguagem Fortran, criada em 1954, e com seu primeirocompilador em 1957, foi durante muito tempo utilizada com este fim, inclusive noBrasil.

    Nas dcadas de 60 e 70, com o aparecimento de algumas outraslinguagens, o Fluxograma, um mtodo grfico que hoje est em desuso, foigrandemente utilizado em complemento ao anterior. Hoje em dia, depois decentenas de linguagens de programao criadas e de vrios mtodos para serepresentar a soluo de problemas, aprende-se a programar construindo edesenvolvendo algoritmos.

    O objetivo desse curso a Lgica de Programao dando uma baseterica e prtica, suficientemente boa, para que, o aluno domine os algoritmos eesteja habilitado a aprender uma linguagem de programao.

    Conceitos Bsicos

    Dados: so elementos brutos que podem ser processados por umcomputador digital para se obter alguma concluso ou resultado, ou seja,uma informao.

    Informao: o resultado do processamento dos dados pelocomputador. Uma informao pode ser considerada como dado paraoutro processamento e, por isso, muitas vezes referenciada como dadode sada.

    Programa de Computador: seqncia de instrues no ambgua efinita em uma linguagem de programao especfica que, quandoexecutada, resolve um problema determinado.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    5/64

    5

    Linguagem de mquina: a linguagem binria (composta de zeros euns) utilizada pelos computadores, para representar dados, programas einformaes. tediosa, difcil de se compreender e fcil de gerar erros naprogramao.

    Linguagem Assembler: uma linguagem particular para cadaprocessador (computador), que codifica as instrues em linguagem demquina e facilita um pouco o trabalho do programador. tambmconsiderada uma linguagem de baixo nvel, mas ainda hoje utilizada.

    Linguagem de programao de 3 gerao: tambm chamada delinguagem de alto nvel, engloba todas as linguagens de programaoque utilizam compiladores ou interpretadores. Possuem instrues maispoderosas que a linguagem Assembler, facilitando ainda mais o trabalhodo programador. Exemplos:Fortran, Cobol, Algol, PLI, Pascal, Modula2,

    Lips, C, ADA, etc.

    Linguagem de programao de 4 gerao: so linguagens noprocedurais, utilizadas para sistemas de gerenciamento de banco dedados, planilhas e outros aplicativos que utilizam comandos maispoderosos ainda que as linguagens de 3 gerao e, por isso, so aindamais fceis de programar. Exemplos:SQL, DBASE, CLIPPER, INGRES,etc.

    Compilador: um programa utilizado para traduzir os programas escritospelo programador nas linguagens de alto nvel (programa fonte) para a

    linguagem de mquina (programa executvel), a fim de poder serexecutado pelo computador.

    Interpretador: um programa que traduz os programas escritos peloprogramador 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 VonNeumann, 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)

  • 8/3/2019 Material de Apoio - Lgica de Programao

    6/64

    6

    A UCP composta de dois elementos principais:

    A Unidade Aritmtica e Lgica (ULA ou ALU) que responsvel pelarealizao de todas as operaes lgicas e aritmticas no computador;

    A Unidade de Controle (UC ou CU) que responsvel pelo controle detodos os elementos do computador e dos perifricos, recebendo sinais deestado (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 memriapossui um endereo e um contedo. Ao ser desligado o computador, todo ocontedo da memria principal perdido.

    A memria secundria (MS) responsvel pelo armazenamento, em carterpermanente, 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.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    7/64

    7

    Captulo 02 Resoluo de Problemas: Algortmos

    Definio de Algortmo

    a descrio, de forma lgica, dos passos a serem executados nocumprimento de determinada tarefa.

    O algoritmo pode ser usado como uma ferramenta genrica pararepresentar a soluo de tarefas independente do desejo de automatiz-las, 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, umaboa ferramenta na validao da lgica de tarefas a serem automatizadas.

    Algoritmo pode ter vrios nveis de abstraes de acordo com anecessidade de representar ou encapsular detalhes inerentes slinguagens 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 definidas3. 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.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    8/64

    8

    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 uminconveniente: a ambigidade de alguns termos.

    2. Uma linguagem de programao (Pascal, Cobol, C, C#, Java, etc.): utilizada por alguns programadores j experientes, porm apresentaalguns inconvenientes: utiliza apenas as instrues existentes nalinguagem especfica e muito detalhada nas preocupaes com asintaxe, 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) fluxogramab) diagramas de Nassi-Schenidermanc) mtodo de Jacksond) diagramas de Warnier-Or

  • 8/3/2019 Material de Apoio - Lgica de Programao

    9/64

    9

    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 parase executar uma determinada tarefa. Um Programa a formalizao de umalgoritmo em uma determinada linguagem de programao, segundo suasregras de sintaxe e semntica, de forma a permitir que o computador possaentender a seqncia de aes.

    Linguagem de Programao

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

    Tipos de Linguagem de Programao

    Existem diversas linguagens de programao, cada uma com suascaractersticas especficas e com nveis de complexidade e objetivos diferentes:

    Linguagem de Mquinao 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)

  • 8/3/2019 Material de Apoio - Lgica de Programao

    10/64

    10

    Estratgias na Resoluo de Problemas

    Critrios de Qualidade de um Programa

    Clareza : Refere-se facilidade de leitura do programa. Se um programafor escrito com clareza, dever ser possvel a outro programador seguir algica do programa sem muito esforo, assim como o prprio autor doprograma entend-lo aps ter estado um longo perodo afastado dele.

    Simplicidade : A clareza e preciso de um programa so normalmentemelhoradas tornando as coisas o mais simples possvel, consistentescom os objetivos do programa. Muitas vezes torna-se necessriosacrificar alguma eficincia de processamento, de forma a manter aestrutura do programa mais simples.

    Eficincia : Refere-se velocidade de processamento e a corretautilizao da memria. Um programa deve ter performance SUFICIENTEpara atender s necessidade do problema e do usurio, bem como deveutilizar os recursos de memria de forma moderada, dentro das limitaesdo problema.

    Modularizao : Durante a fase de projeto, a soluo do problema totalvai sendo fatorada em solues de subproblemas, o que permitegeralmente dividir o problema em forma natural em mdulos comsubfunes claramente delimitadas, que podem ser implementadosseparadamente por diversos programadores de uma equipe, ou seja, a

    modularizao consiste no particionamento do programa em mdulosmenores bem identificveis e com funes especficas, de forma que oconjunto desses mdulos e a interao entre eles permite a resoluo doproblema de forma mais simples e clara.

    Generalidade : interessante que um programa seja to genrico quantopossvel de forma a permitir a reutilizao de seus componentes emoutros projetos.

    Metodologia de Soluo

    1. Entender o problema;2. Formular um esboo da soluo;3. Fazer uma primeira aproximao das variveis necessrias;4. Rever os passos originais, detalhando;5. Se o algoritmo estiver suficientemente detalhado, testar com um conjunto

    de dados significativos;6. Implementar em uma linguagem de programao.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    11/64

    11

    Captulo 03 Algortmos

    Identificadores, Constantes, Variveis e Tipos Bsicos

    IDENTIFICADORES: Representam os nomes escolhidos para rotular asvariveis, procedimentos e funes, normalmente, obedecem asseguintes regras:

    1. O primeiro caracter deve ser uma letra2. 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 porum dgito.

    CONSTANTE: Uma constante, como sugere o nome, um identificadorque armazena um valor fixo e imutvel, durante a execuo de umalgoritmo ou programa. Podemos associ-lo a uma posio de memria(endereo) que tem um contedo fixo. Este contedo poder ser umnmero (real ou inteiro), uma cadeia de caracteres (texto) ou um valorlgico.

    VARIVEL: Uma varivel um identificador que, como sugere o nome,possui o contedo varivel durante a execuo de um algoritmo ouprograma. 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. Umavarivel pode assumir vrios valores diferentes ao longo da execuo doprograma, mas, em um determinado momento, possui apenas um valor.Unidades bsicas de armazenamento das informaes a nvel delinguagens de programao. Os tipos de dados e variveis utilizadosdependem da finalidade dos algoritmos, mas, podemos definir alguns,pelo fato de serem largamente utilizados e implementados na maioria daslinguagens.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    12/64

    12

    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 oupositivo. Ex: 2.5, 3.1

    Operaes: soma(+), subtrao(-), multiplicao(*), diviso exata(/) ecomparaes.

    CARACTER (char): qualquer conjunto de caracteres alfanumricos.

    Ex: A, B, "ABACATE "Operaes: comparaes

    TEXTO OU CADEIA DE CARACTERES (STRING): uma varivel destetipo poder armazenar uma cadeia de caracteres de qualquer tamanho.Caso seja imprescindvel para o entendimento pode-se acrescentar, entreparnteses, a quantidade mxima de caracteres. (Exemplo: texto (10)).

    Obs.: Os textos devero ser representados sempre entre apstrofes paraque no se confundam com os valores numricos. Veja que o inteiro 5,

    diferente do texto 5.

    LGICO (BOOLEAN): tipo especial de varivel que armazena apenasos valores V e F, onde V representa VERDADEIRO e FALSOEx: 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 suautilizao, incluindo comentrio, quando se fizerem necessrios.

    Na maioria das linguagens de programao, quando o computador estexecutando um programa e encontra uma referncia a uma varivel ou a umaconstante qualquer, se esta no tiver sido previamente definida, ele no sabero que fazer com ela. Da mesma forma, um programador que estiverimplementando um algoritmo, em alguma linguagem de programao, ter o seu

  • 8/3/2019 Material de Apoio - Lgica de Programao

    13/64

    13

    trabalho simplificado se todas as constantes e variveis referenciadas noalgoritmo tiverem sido previamente declaradas. As constantes so declaradasantes 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 otipo de valores que ela pode conter. Para que os programas manipulem valores,estes devem ser armazenados em variveis e para isso, devemos declar-las deacordo com a sintaxe:

    Exemplos:

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

    Palavras Reservadas

    So palavras que tero uso especfico no nosso pseudo-cdigo e que nodevero ser usadas como identificadores, para no causar confuso nainterpretao. 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.

    OperadoresNa soluo da grande maioria dos problemas necessrio que as

    variveis tenham seus valores consultados ou alterados e, para isto, devemosdefinir um conjunto de OPERADORES, sendo eles:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    14/64

    14

    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 umadeterminada varivel, onde o tipo desse valor seja compatvel ao tipo devarivel 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 0AUXNOME NOME {A varivel AUXNOME recebe o contedo davarivel NOME}ACHOU falso {A varivel ACHOU recebe o valor falso}

    OPERADORES ARITMTICOS

  • 8/3/2019 Material de Apoio - Lgica de Programao

    15/64

    15

    OPERADORES RELACIONAISSo utilizados para relacionar variveis ou expresses, resultando numvalor lgico (Verdadeiro ou Falso), sendo eles:

    Exemplos:

    NUM 3NOME DENISE

    NUM > 5 falso (0) {3 no maior que 5}NOME < DENIZ verdadeiro (1) {DENISE vem antes de DENIZ}(5 + 3) > = 7 verdadeiroNUM != (4 1) falso {lembre-se que NUM recebeu 3}

    OPERADORES LGICOSSo utilizados para avaliar expresses lgicas, sendo eles:

    e ("and") : conjunoou ("or") :disjuno

    no ("not") : negao

    Exemplos:ACHOU falsoNUM 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 valoresque no representam o resultado esperado.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    16/64

    16

    A maioria das linguagens de programao utiliza as seguintes prioridadesde operadores :

    1 - Efetuar operaes embutidas em parnteses "mais internos"2 - Efetuar funes

    3 - Efetuar multiplicao e/ou diviso4 - Efetuar adio e/ou subtrao5 - Operadores relacionais6 - Operadores lgicos

    Ou seja,

    Primeiro: Parnteses e FunesSegundo: Expresses Aritmticas1)+, - (Unitrios)2) **

    3) *,/4)+,- (binrio)Terceiro: ComparaesQuarto: NoQuinto: eSexto: 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 deprogramao a ser utilizada.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    17/64

    17

    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 processamentocondicional, a estrutura de seleo utilizada quando a execuo de umcomando (ou uma seqncia de comandos) depende de um teste anterior (umaou mais comparaes). A seleo pode ser simples ou composta.

    Seleo Simples

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

    onde a CONDIO poder ser tambm uma expresso lgica.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    18/64

    18

    Seleo Composta

    Quando se executa um comando (ou seqncia de comando) se umacondio 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 serexecutado dentro de uma seleo (por exemplo, no "Seno") pode ser umaoutra seleo. Outro aninhamento poder ocorrer tambm com esta ltimaseleo e assim por diante. Nos casos de vrios aninhamentos subseqentes,uma boa identao ser fundamental para o entendimento de algoritmo quandoutilizando pseudo-cdigo.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    19/64

    19

    Estruturas de Repetio Laos (Loops)

    Lao Enquanto (While)

    A estrutura de repetio (enquanto) utilizada quando um conjunto decomandos deve ser executado repetidamente, enquanto uma determinadacondio (expresso lgica) permanecer verdadeira. Dependendo do resultadodo teste da condio, o conjunto de comandos poder no ser executado nemuma 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 aninhamentode repeties, ou seja, a existncia de uma estrutura de repetio dentro deoutra. Podero haver tambm aninhamentos de selees dentro de estruturasrepetitivas 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 quechamamos um lao infinito e de l o nosso programa no sair.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    20/64

    20

    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 navalidao de dados de entrada, pelo teclado, mas pode ser sempre substitudapor 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 comandoseguinte ser executado, se for falsa, os comandos C1, C2,...,Cn soreexecutados at que a condio se torne verdadeira. O comando repita-at equivalente ao comando enquanto, conforme ser mostrado no exemplo abaixo.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    21/64

    21

    Observa-se que a utilizao de um comando repita no lugar de umcomando enquanto corresponde a utilizar como para o repita a

    negao da do enquanto. Numa estrutura Enquanto, os comandosso executados 0 ou mais vezes. Numa estrutura Repita, os comandos soexecutados 1 ou mais vezes.

    Regras Prticas para a Construo de Algortmos Legveis

    1. Procure incorporar comentrios no algoritmo, pelo menos para descrevero significado das variveis utilizadas.

    Exemplo: /* Clculo da mdia */

    2. Escolha nomes de variveis que sejam significativos, isto , que traduzamo tipo de informao a ser armazenada na varivel.

    Exemplo: NOTAMATRCULA

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

  • 8/3/2019 Material de Apoio - Lgica de Programao

    22/64

    22

    4. Tenha em mente que seus algoritmos devero ser lidos e entendidos poroutras pessoas (e por voc mesmo) de tal forma que possam sercorrigidos, 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 umprogramador pode cometer.

    6. Use comentrios no incio para explicar o que o algoritmo faz. Algunscomentrios 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 embranco, inclusive linhas em branco so valiosssimos para melhorar aaparncia 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

  • 8/3/2019 Material de Apoio - Lgica de Programao

    23/64

    23

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

    11. Toda vez que uma modificao for feita no algoritmo, os comentriosdevem 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 doproblema;

    Passo 4 -Levantar e analisar todas as entradas citadas na especificao doproblema;

    Passo 5 - Verificar se necessrio gerar valores internamente ao algoritmo elevantar as variveis necessrias e os valores iniciais de cada uma;

    Passo 6 -Levantar e analisar todas as transformaes necessrias para, dadasas 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.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    24/64

    24

    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 finalmostrar 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 deprogramao.

    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 detodos os lados de uma figura geomtrica.

    8. Faa um programa que leia o raio de uma circunferncia e calcule eapresente sua a rea e permetro.

    9. Faa um programa que leia o valor dos lados de um tringulo retngulo ecalcule 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 umcarto contando seu nmero de identificao e seu peso. Fazer um algoritmoque escreva o nmero e peso do boi mais gordo e do boi mais magro.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    25/64

    25

    12. Faa um algoritmo que leia um nmero indeterminado de nmeros, oalgoritmo encerra quando for digitado o nmero 99. O algoritmo devefornecer ao final o percentual de nmeros pares e mpares digitados.

    13. Faa um algoritmo que leia 2 nmeros inteiros de cada vez. A leitura deveser feita enquanto no for digitado o nmero 0. Os nmeros lidos devero serapenas nmeros mpares e, quando forem consecutivos devero sermultiplicados. Ao finalizar o algoritmo dever escrever a soma dasmultiplicaes.

    14. Faa um algoritmo que leia um valor e some 10 valores pares a partir dovalor lido, escrevendo no final o resultado obtido. OBS: o valor lido pode sermpar.

    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 amdia desses valores.

    16. Fazer um algoritmo que fique lendo valores, um de cada vez e faa oseguinte:

    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 quantosdeles esto no intervalo fechado entre 10 e 20 e quantos deles esto fora dointervalo, no final escreva estes resultados.

    18. Escrever um algoritmo que l o nro de matrcula dos vendedores de umaempresa, seu salrio fixo e o total de vendas de cada vendedor. Cadavendedor recebe um salrio fixo, mais uma comisso proporcional as vendaspor 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 desuas 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,...

  • 8/3/2019 Material de Apoio - Lgica de Programao

    26/64

    26

    20. Faa um algoritmo que leia vrios valores, um de cada vez e mostrequantos destes nmeros foram negativos, quantos positivos, bem como asoma 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 umconcurso de beleza. Ao final do algoritmo escreva tambm as duasmaiores alturas e nome das moas que a possuem. O algoritmo terminaquando 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 homens23. 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 umdesconto de (5%) e para o pagamento a prazo embutido acrscimo de30% sobre o preo da mercadoria.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    27/64

    27

    Captulo 05 Estruturas de Dados Homogneas

    Antes de tratarmos das estruturas de dados homogneas, vejamosalgumas 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, deacordo com as regras da programao estruturada, no devem ser modificadasnos comandos C1, C2, . . ., Cn. O comando para , na verdade, o comando

    enquanto utilizando-se uma varivel de controle, escrito numa notaocompactada. Neste caso existir sempre uma inicializao da varivel decontrole, um teste para verificar se a varivel atingiu o limite e um acrscimo navarivel.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    28/64

    28

    1) Assim como no comando enquanto, se o valor inicial (i) j for superior aolimite (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

  • 8/3/2019 Material de Apoio - Lgica de Programao

    29/64

    29

    Seleo entre as Mltiplas Alternativas-Caso (Case)

    Em nossos algoritmos, quando uma varivel ou expresso aritmticapuder assumir vrios valores diferentes, e a execuo do programa for diferentedependendo 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 valoresdiscretos.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    30/64

    30

    Vetores

    Um vetor ou agregado homogneo, ou ainda varivel compostahomognea, uma estrutura de dados que contm elementos de mesmo tipo,que podem ser referenciados como um todo. Ao declararmos um vetor, estamosreservando na memria principal do computador uma srie de clulas para usoda varivel daquele tipo. O nome do vetor aponta para a base das clulas e oseu incio d a posio relativa do elemento referenciado ao primeiro (base).

    Nem sempre os tipos bsicos (inteiro, real, caracter e lgico) sosuficientes para exprimir estruturas de dados em algoritmos. Por exemplo

    consideremos um problema em que um professor com 5 alunos deseja imprimira nota e a mdia de seus alunos. Nesse caso seria necessrio se considerarcinco variveis reais para contar as notas dos cinco alunos. Imagine que onmero de alunos da turma seja 80. S a declarao destas variveis tornariaimpraticvel a redao do algoritmo. Da a necessidade de novos tipos seremcriados. 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 umvetor com dois ndices (o nmero da turma e o nmero do aluno da turma).

  • 8/3/2019 Material de Apoio - Lgica de Programao

    31/64

    31

    Declarao de Vetores

  • 8/3/2019 Material de Apoio - Lgica de Programao

    32/64

    32

  • 8/3/2019 Material de Apoio - Lgica de Programao

    33/64

    33

  • 8/3/2019 Material de Apoio - Lgica de Programao

    34/64

    34

  • 8/3/2019 Material de Apoio - Lgica de Programao

    35/64

    35

    Exerccios Complementares - Vetores

    1. Faa um algoritmo que leia 18 nmeros inteiros e calcule e imprima asoma dos mesmos.

    2. Faa um algoritmo que leia 18 nmeros inteiros e calcule e imprima amdia 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 eapresente a media dos nmeros.

    5. Faca um programa que leia 2 conjuntos com 50 nmeros inteiros e gereum terceiro conjunto com a media dos elementos de A e B. Apresente oC.

    6. Faca um programa que leia um conjunto A com 30 nmeros inteiros e quearmazene em um conjunto B do mesmo tipo os elementos de Amultiplicados por 3. apresente o conjunto B.

    7. Faa um programa que leia um conjunto A com 100 nmeros inteiros eque gere um conjunto B com os elemento de A de acordo com a seguinteregra. Se o elemento de A for par, armazene em B multiplicando por 5. Seo 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 troqueos valores de A com B.

    9. Faa um programa que leia dois conjuntos A e B com 15 nmeros inteirose 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 20posies.

    12. Construa um algoritmo que receba trs nmero e mostre o maior deles.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    36/64

    36

    Matrizes

    Definio: Conjunto de dados referenciados por um mesmo nome e quenecessita de mais de um ndice para ter seus elementos individualizados.

    Quando temos mais de uma dimenso ento utilizamos as matrizes, quede diferente no uso e na declarao s tem estas dimenses a maisexplcitas:

    A sintaxe a seguinte: identificador[li1:lf1,li2:ls2,......lin:lfn]

    Esta especificao corresponde apenas criao do modelo, e, paraefetivar a estrutura de dados dentro do algoritmo, necessria uma declaraodando 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 deelementos de cada dimenso: (lf1-li1+1)*(lf2-li2+1)*...*(lfn-lin+1)

  • 8/3/2019 Material de Apoio - Lgica de Programao

    37/64

    37

    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 quadrada20 x 20 de elementos reais, divida cada elemento de uma linha da matrizpelo elemento da diagonal principal desta linha e imprima a matrizassim modificada.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    38/64

    38

    Exerccios Complementares Matrizes

  • 8/3/2019 Material de Apoio - Lgica de Programao

    39/64

    39

    Captulo 06 Estruturas de Dados Heterogneas

    Introduo

    Com a estrutura de dados heterogneas (registro), possvel agrupartipos 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 registroanteriormente atribudo.

    Para que seja declarado um tipo registro em portugol, deve ser utilizada ainstruo tipo em conjunto com a instruo registro...fim_registro.

    Exemplo:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    40/64

    40

    Leitura de Registros:

    Escrita de Registros:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    41/64

    41

    Leitura de Registros de Conjuntos:

    Escrita de Registros de Conjuntos:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    42/64

    42

    Exemplo:

    Leitura de Conjuntos de Registros:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    43/64

    43

    Escrita de Conjuntos de Registros:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    44/64

    44

    Exemplo:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    45/64

    45

    Captulo 07 Modularizao de Algortimos

    Introduo

    Vimos que os algoritmos estruturados so desenvolvidos levando-se emconta algumas premissas bsicas:

    1) Desenvolver o algoritmo em diferentes fases de detalhamento crescente, dogeral ao particular, por refinamentos sucessivos (desenvolvimento "top-down" oude cima para baixo).

    2) Decompor o algoritmo em mdulos funcionais, organizados de preferncia emum sistema hierrquico. Esses mdulos trazem vantagens adicionais paratestes, 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 nossosalgoritmos e verificar as vantagens que os mesmos trazem para entendimento,construo, codificao, teste e reutilizao dos mesmos. A grande maioria daslinguagens de programao que so utilizadas, tem esta facilidade, seja com onome de Sub-rotinas, Subprogramas, Procedimentos, Funes, Mdulos,Blocos, etc., sempre possvel subdividir-se um programa de modo a facilitar oentendimento, permitir a reutilizao, evitando-se a repetio de blocos dosprogramas. No nosso pseudo-cdigo definiremos dois tipos de mdulos: Osprocedimentos ("procedures") e as funes ("functions").

    Os procedimentos e funes so normalmente definidos antes de seremutilizados(chamados) pelo programa principal. Em se tratando de algoritmos,entretanto, poderemos definir nossos procedimentos e funes em qualquerparte do algoritmo principal ou depois dele, adotando os formatos que seseguem e as normas de documentao.

    Procedimentos

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

  • 8/3/2019 Material de Apoio - Lgica de Programao

    46/64

    46

    As variveis, os tipos e as constantes declaradas dentro de umprocedimento s so acessveis dentro dos comandos do procedimento. Sochamadas variveis locais.

    Em um Algoritmo, as variveis, tipos e constantes declaradas logo aps o

    identificador do algoritmo, so acessveis e visveis dentro de qualquerprocedimento que esteja sendo usado pelo algoritmo. So chamadas variveisGlobais. uma boa tcnica ao se construir um procedimento, no fazer uso nomesmo, de variveis globais e referenciar e utilizar apenas as variveis locais eos parmetros do procedimento. Isso far com que cada procedimento, ao sermodificado, no afete outras partes do Algoritmo, e da mesma forma asvariveis globais podero ser modificadas sem que haja efeitos colaterais nosprocedimentos.

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

  • 8/3/2019 Material de Apoio - Lgica de Programao

    47/64

    47

    Funes

    Funes so as estruturas que permitem ao usurio separar seusprogramas em blocos. Se no as tivssemos, os programas teriam que ser

    curtos e de pequena complexidade. Para fazermos programas grandes ecomplexos temos de constru-los bloco a bloco.

    Uma funo um mdulo que tem por objetivo calcular e retornar aoalgoritmo, procedimento ou funo "chamador" um valor. A chamada de umafuno para execuo feita apenas citando-se o seu identificador no meio deuma 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 aoalgoritmo 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 deretorno 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 variveisde entrada. na declarao de parmetros que informamos ao compilador quaissero as entradas da funo (assim como informamos a sada no tipo-de-retorno).

  • 8/3/2019 Material de Apoio - Lgica de Programao

    48/64

    48

    O corpo da funo a sua alma. nele que as entradas soprocessadas, 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 umadeclarao retorna (return) a funo encerrada imediatamente e, se o valor deretorno informado, a funo retorna este valor. importante lembrar que ovalor de retorno fornecido tem que ser compatvel com o tipo de retornodeclarado para a funo.

    Uma funo pode ter mais de uma declarao retorna (return). Isto setorna claro quando pensamos que a funo terminada quando o programa

    chega primeira declarao retorna (return). Abaixo esto dois exemplos de usodo retorna (return):

  • 8/3/2019 Material de Apoio - Lgica de Programao

    49/64

    49

  • 8/3/2019 Material de Apoio - Lgica de Programao

    50/64

    50

    importante notar que, como as funes retornam valores, podemosaproveit-los para fazer atribuies, ou mesmo para que estes valoresparticipem 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 devariveis nas diversas partes do programa.

    Variveis Locais

    O primeiro tipo de variveis que veremos so as variveis locais. Estasso aquelas que s tm validade dentro do bloco no qual so declaradas.Podemos declarar variveis dentro de qualquer bloco. S para lembrar: umbloco comea quando abrimos uma chave e termina quando fechamos a chave.At agora s tnhamos visto variveis locais para funes completas. Mas umcomando para(for) pode ter variveis locais e que no sero conhecidas fora

    dali. A declarao de variveis locais a primeira coisa que devemos colocarnum bloco. A caracterstica que torna as variveis locais to importantes

    justamente a de serem exclusivas do bloco. Podemos ter quantos blocosquisermos com uma varivel local chamada x, por exemplo, e elas noapresentaro conflito entre elas.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    51/64

    51

    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 jso consideradas locais.

    Abaixo vemos um exemplo de variveis locais:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    52/64

    52

    No programa acima temos trs funes. As variveis locais de cada umadelas no iro interferir com as variveis locais de outras funes. Assim, avarivel abc de func1() no tem nada a ver (e pode ser tratadaindependentemente) 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 soconhecidas dentro deste bloco e so desconhecidas no resto da funoPrincipal(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 funomain().

    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 umavarivel local da funo. Voc pode tambm alterar o valor de um parmetroformal, pois esta alterao no ter efeito na varivel que foi passada funo.Isto tem sentido, pois quando o C passa parmetros para uma funo, sopassadas apenas cpias das variveis. Isto , os parmetros formais existemindependentemente das variveis que foram passadas para a funo. Elestomam apenas uma cpia dos valores passados para a funo.

    Variveis Globais

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

  • 8/3/2019 Material de Apoio - Lgica de Programao

    53/64

    53

    No exemplo acima as variveis z e k so globais. Veja que func2() temuma varivel local chamada z. Quando temos ento, em func2(), o comandoz=10 quem recebe o valor de 10 a varivel local, no afetando o valor davarivel global z. Evite ao mximo o uso de variveis globais. Elas ocupammemria 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 osparmetros formais da funo copiam os valores dos parmetros que sopassados para a funo. Isto quer dizer que no so alterados os valores que osparmetros tm fora da funo. Este tipo de chamada de funo denominadochamada por valor. Isto ocorre porque so passados para a funo apenas osvalores dos parmetros e no os prprios parmetros. Veja o exemplo abaixo:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    54/64

    54

    No exemplo acima o parmetro formal num da funo sqr() sofrealteraes 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 dosparmetros que foram passados para a funo. Este tipo de chamada de funotem o nome de "chamada por referncia". Este nome vem do fato de que, nestetipo de chamada, no se passa para a funo os valores das variveis, mas simsuas referncias (a funo usa as referncias para alterar os valores dasvariveis fora da funo).

    O C s faz chamadas por valor. Isto bom quando queremos usar osparmetros formais vontade dentro da funo, sem termos que nos preocuparem estar alterando os valores dos parmetros que foram passados para afuno. Mas isto tambm pode ser ruim s vezes, porque podemos querer

    mudar os valores dos parmetros fora da funo tambm. O C++ tem umrecurso que permite ao programador fazer chamadas por referncia. Hentretanto, no C, um recurso de programao que podemos usar para simularuma chamada por referncia. Quando queremos alterar as variveis que sopassadas para uma funo, ns podemos declarar seus parmetros formaiscomo sendo ponteiros. Os ponteiros so a "referncia" que precisamos parapoder alterar a varivel fora da funo. O nico inconveniente que, quandousarmos a funo, teremos de lembrar de colocar um & na frente das variveisque estivermos passando para a funo. Veja um exemplo:

  • 8/3/2019 Material de Apoio - Lgica de Programao

    55/64

    55

    No muito difcil. O que est acontecendo que passamos para afuno Swap o endereo das variveis num1 e num2. Estes endereos socopiados nos ponteiros a e b. Atravs do operador * estamos acessando ocontedo apontado pelos ponteiros e modificando-o. Mas, quem estecontedo? 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 fatorialde um nmero n pode ser definido recursivamente, ou seja:

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

    Estruturao dos Mdulos de um Algoritmo

    Um procedimento nada mais que um algoritmo hierarquicamentesubordinado a um outro algoritmo, comumente chamado de Mdulo principal ouprograma principal ou ainda algoritmo principal.

    Da mesma forma, um procedimento poder conter outros procedimentos(e tambm funes) aninhados. Assim, ao definirmos as fases do nossoalgoritmo, no processo de refinamentos sucessivos, se transformarmos asmesmas em procedimentos e os refinamentos de cada procedimento em outrosprocedimentos, obteremos, ao fim do processo de criao, um algoritmo

  • 8/3/2019 Material de Apoio - Lgica de Programao

    56/64

    56

    estruturado, com mdulos hierarquicamente subordinados e muito menossuscetvel 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 precisamosdescobrir se um determinado elemento que procuramos se encontra no vetor,uma soluo que certamente nos vem mente comparar o elemento queprocuramos com cada elemento do vetor, at que encontremos ou at queconcluamos 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 ouno existncia de um elemento procurado. A diferena entre um e outroalgoritmo de busca, fica por conta da rapidez com que "varremos" o vetor paraencontrar o elemento ou para concluirmos que ele no existe.

    Um fator que influencia em muito nessa rapidez a disposio doselementos no vetor. Se esto desordenados, seguramente teremos que verificardo primeiro ao ltimo elemento para concluir, com certeza, que o elemento noexiste. J se esto ordenados, ao encontrarmos um elemento maior (ou menor)que o elemento procurado, poderemos concluir pela sua no existncia. Osalgoritmos de ordenao ou classificao ("Sort"), por sua vez, so utilizados

    para ordenar os elementos de um vetor de forma a facilitar a pesquisa posteriorde um elemento, no conjunto de elementos existentes.

    Existem algoritmos para pesquisa e ordenao para as mais variadasestruturas de dados. Na nossa disciplina, entretanto, trataremos apenas osalgoritmos de pesquisa e ordenao em vetores, que tambm podem serutilizados em matrizes, desde que sofram pequenos ajustes.

    Algoritmo de Pesquisa

    Para fazermos qualquer pesquisa em vetor (ou matriz) precisamos dequatro parmetros:

    a) O vetor no qual realizaremos a pesquisab) O nmero de elementos desse vetor que devem ser pesquisados.

    (Lembre-se que muitas vezes um vetor de 1000 elementos, s tem 700carregados, e podemos evitar tratamento de 300 elementos com "lixo").

    c) O elemento procurado

  • 8/3/2019 Material de Apoio - Lgica de Programao

    57/64

    57

    d) Um ndice que vai ser preenchido com a posio onde o elemento foiencontrado ou retornar com 0 (zero) caso o elemento no exista.

    Como os algoritmos de pesquisa podero ser utilizados muitas vezes nasoluo de diferentes problemas, vamos defini-los como Procedimentos de um

    Algoritmo Principal hipottico, com os seguintes argumentos:Declaraes:

    ConstMAXELEM = 10000 {Nmero mximo de elementos do vetor, apenas

    para limitar o tamanho do vetor}

    Nome do vetor[1:MAXELEM]inteiro TOTELEM {Corresponde ao parmetro b) Total de elementos a ser

    pesquisado}

    ELEMPROC {Corresponde ao Parmetro c) Elementoprocurado}

    Inteiro POS {Corresponde ao Parmetro d) Posio em VET ondeELEMPROC 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 oELEMPROC com cada elemento de VET. Portanto para um elemento inexistenteteremos de fazer TOTELEM testes e para um elemento existente faremos, namdia, TOTELEM/2 testes.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    58/64

    58

    Se precisamos determinar todas as ocorrncias de um elemento em umvetor, o problema se simplifica, pois teremos que, obrigatoriamente, varrer ovetor at o fim (Elimina-se do lao o teste POS = =0), mas teremos de guardarem um vetor todas as posies onde o elemento foi encontrado ou, o que maisusual, 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 temde estar ordenado pelo campo chave da pesquisa. Com isso, ao se encontrar novetor, um elemento maior do que o elemento procurado, poderemos abandonara busca pois, com certeza, no mais o encontraremos. Devido a isso o nmerode testes para elementos existentes ou inexistentes ser, na mdia, deTOTELEM/2, e, por isso, melhor que o anterior para o caso de elementoinexistente.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    59/64

    59

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

  • 8/3/2019 Material de Apoio - Lgica de Programao

    60/64

    60

    Neste exemplo, a pesquisa a um elemento ficar mais eficiente seutilizarmos a pesquisa binria, desde que o vetor j esteja ordenado. Nestapesquisa procuramos o elemento K dividindo o vetor em duas partes e testandoem qual das duas ele deveria estar. Procedendo da mesma forma para a parteprovvel, e assim sucessivamente:

    Pesquisa Binria

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

  • 8/3/2019 Material de Apoio - Lgica de Programao

    61/64

    61

    Algoritmo de Ordenao

    Como j foi dito, o propsito dos algoritmos de ordenao o de facilitar eacelerar a busca posterior de um elemento no vetor. Os algoritmos deordenao so utilizados normalmente uma vez em cada execuo do

    programa, ou poucas vezes, se comparados com os de Pesquisa, por isso o usode mtodos elementares e demorados no to problemtico como naspesquisas. Na nossa disciplina, veremos trs algoritmos para classificaointerna de vetores, que tm tempo de execuo proporcional ao quadrado donmero 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 omenor elemento do vetor e troca-se com o primeiro elemento. A partir da, comos elementos remanescentes, repete-se o processo at que todo o vetor estejaordenado. Um exemplo bastante elucidativo o de algumas cartas de baralhona mesa viradas para cima ( vista). Seleciona-se a menor (ou maior) paracoloc-la na primeira posio. Depois, seleciona-se, sucessivamente, a menorcarta dentre as remanescentes e se a coloca sobre a primeira.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    62/64

    62

    Mtodo de Insero Direta

    Nesse mtodo, considera-se que um elemento do vetor (o primeiro) estordenado E "insere-se" os demais considerando os anteriores j ordenados.

    Voltando-se ao exemplo do baralho como se agora as cartas sobre a mesaesto com a face para baixo e cada carta arrumada ordenadamente na moem relao as que j esto na mo. Este mtodo pode ser utilizado, comvantagem, quando se est lendo elementos de um arquivo para seremposteriormente ordenados. Bastam leves modificaes no algoritmo, queleremos o arquivo e j o armazenaremos na memria ordenadamente.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    63/64

    63

    Mtodo da Bolha

    Este mtodo caracteriza-se por efetuar a comparao sucessiva de paressubseqentes de elementos, trocando-os de posio, se estiverem fora de

    ordem. Dos trs este o menos eficiente, j que cada troca de elementos exigetrs comandos e o nmero de trocas (TOTELEM-1) vezes maior que nomtodo de seleo direta, por exemplo. Alm disso o mtodo mais complicadode entender que o de seleo direta. Segue-se exemplo de uma implementaode algoritmo de pesquisa utilizando-se esse mtodo.

  • 8/3/2019 Material de Apoio - Lgica de Programao

    64/64

    Bibliografias

    Farrer H. et ali. Algoritmos Estruturados., Editora Guanabara S. A., Rio deJaneiro, 1985.

    Guimares, Angelo M & Lages, Newton A. de C. Algoritmos e Estrutura dedados. LTC - Livros Tcnicos e Cientficos Editora S.A.; 216 1985

    Tremblay, J. P; Bunt R. Cincia dos Computadores - Uma AbordagemAlgortmica. Editora McGraw Hill do Brasil, so Paulo, 1983.

    Villas, Marcos V, & Villasboas, Luiz F.P. Programao Conceitos, Tcnicas eLinguagens. 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 QuartaEdio. 2002.

    Santos, H. Curso de Linguagem C UFMG. 2003