LogicaDeProgramaçãoII

Embed Size (px)

Citation preview

  • Universidade do Sul de Santa Catarina

    PalhoaUnisulVirtual

    2007

    Lgica de Programao IIDisciplina na modalidade a distncia

    LIVRO DIDTICO E CADERNO DE ATIVIDADES

    logica_2_livro_caderno.indb 1logica_2_livro_caderno.indb 1 7/12/2006 14:19:187/12/2006 14:19:18

  • Sumrio

    LIVRO DIDTICO

    Palavras do professor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    UNIDADE 1 Manipulao de vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15UNIDADE 2 Manipulao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33UNIDADE 3 Manipulao de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47UNIDADE 4 Tpicos avanados em algoritmos computacionais . . . . . 71UNIDADE 5 Programao estruturada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    Para concluir o estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Sobre o professor conteudista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125Respostas e comentrios das atividades de auto-avaliao . . . . . . . . . . . . 127

    logica_2_livro_caderno.indb 2logica_2_livro_caderno.indb 2 7/12/2006 14:20:497/12/2006 14:20:49

  • CADERNO DE ATIVIDADES

    Palavras dos professores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

    UNIDADE 1 Manipulao de vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149UNIDADE 2 Manipulao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159UNIDADE 3 Manipulao de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173UNIDADE 4 Tpicos avanados em algoritmos computacionais . . . . 181UNIDADE 5 Programao estruturada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    Respostas e comentrios das atividades de auto-avaliao . . . . . . . . . . . . 199Sobre os professores conteudistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

    logica_2_livro_caderno.indb 3logica_2_livro_caderno.indb 3 7/12/2006 14:20:497/12/2006 14:20:49

  • logica_2_livro_caderno.indb 4logica_2_livro_caderno.indb 4 7/12/2006 14:20:497/12/2006 14:20:49

  • Apresentao

    Este livro didtico corresponde disciplina de Lgica de Programao II.O material foi elaborado visando a uma aprendizagem autnoma, abordando contedos especialmente selecionados e adotando uma linguagem que facilite seu estudo a distncia. Por falar em distncia, isso no signi ca que voc estar sozinho. No esquea que sua caminhada nesta disciplina tambm ser acompanhada constantemente pelo Sistema Tutorial da UnisulVirtual. Entre em contato sempre que sentir necessidade, seja por correio postal, fax, telefone, e-mail ou Espao UnisulVirtual de Aprendizagem. Nossa equipe ter o maior prazer em atend-lo, pois sua aprendizagem nosso principal objetivoBom estudo e sucesso!

    Equipe UnisulVirtual.

    logica_2_livro_caderno.indb 5logica_2_livro_caderno.indb 5 7/12/2006 14:20:497/12/2006 14:20:49

  • logica_2_livro_caderno.indb 6logica_2_livro_caderno.indb 6 7/12/2006 14:20:497/12/2006 14:20:49

  • Carlos Fernando Martins

    Design instrucionalDaniela Erani Monteiro Will

    Carolina Hoeller da Silva

    PalhoaUnisulVirtual

    2007

    Lgica de Programao II

    Livro didtico

    4 edio revista e atualizada

    logica_2_livro_caderno.indb 7logica_2_livro_caderno.indb 7 7/12/2006 14:20:497/12/2006 14:20:49

  • Copyright UnisulVirtual 2007 N enhum a parte desta publicao pode ser reproduzida por qualquer m eio sem a prvia autorizao desta instituio.

    005.1 M34 Martins, Carlos Fernando Lgica de programao II / Carlos Fernando Martins ; design instrucional Daniela Erani Monteiro Will, Carolina Hoeller da Silva, [Leandro Kingeski Pacheco] - 4. ed. rev. e atual. - Palhoa : UnisulVirtual, 2007. 216 p. : il. ; 28 cm

    Inclui bibliografia ISBN 978-85-7817-003-5

    1. Programao (Computadores). 2. Lgica Processamento de dados. I. Will, Daniela Erani Monteiro. II. Silva, Carolina Hoeller da. III. Pacheco, Leandro Kingeski. IIII. Ttulo.

    Ficha catalogrfica elaborada pela Biblioteca Universitria da Unisul

    Crditos Unisul - Universidade do Sul de Santa Catarina

    UnisulVirtual - Educao Superior a Distncia Cam pus UnisulVirtual Rua Joo Pereira dos Santos, 303 Palhoa - SC - 88130-475 Fone/fax: (48) 3279-1541 e 3279-1542 E-m ail: [email protected] Site: www.virtual.unisul.br

    Reitor Unisul Gerson Luiz Joner da Silveira

    Vice-Reitor e Pr-Reitor

    Acadm ico Sebastio Salsio Heerdt Chefe de gabinete da

    Reitoria Fabian Martins de Castro

    Pr-Reitor Adm inistrativo Marcus Vincius Antoles da Silva Ferreira

    Cam pus Sul Diretor: Valter Alves Schm itz Neto Diretora adjunta: Alexandra Orseni

    Cam pus Norte Diretor: Ailton Nazareno Soares Diretora adjunta: Cibele Schuelter

    Cam pus UnisulVirtual Diretor: Joo Vianney Diretora adjunta: Jucim ara Roesler

    Equipe UnisulVirtual

    Adm inistrao Renato Andr Luz Valm ir Vencio Incio

    Bibliotecria Soraya Arruda W altrick

    Coordenao dos Cursos Adriano Srgio da Cunha Ana Luisa Mlbert Ana Paula Reusing Pacheco Ctia Melissa S. Rodrigues (Auxiliar) Charles Cesconetto Diva Marlia Flemm ing Elisa Flemm ing Luz Itamar Pedro Bevilaqua Janete Elza Felisbino Jucim ara Roesler Lilian Cristina Pettres (Auxiliar) Lauro Jos Ballock Luiz Guilherm e Buchmann Figueiredo Luiz Otvio Botelho Lento Marcelo Cavalcanti Mauri Luiz Heerdt Mauro Faccioni Filho M ichelle Denise Durieux Lopes Destri Nlio Herzm ann Onei Tadeu Dutra Patrcia Alberton Patrcia Pozza Raulino Jac Brning

    Design Grfico Cristiano Neri Gonalves Ribeiro (coordenador) Adriana Ferreira dos Santos Alex Sandro Xavier Evandro Guedes Machado Fernando Roberto Dias Zimm ermann Higor Ghisi Luciano

    Pedro Paulo Alves Teixeira Rafael Pessi Vilson Martins Filho Equipe Didtico-

    Pedaggica Angelita Maral Flores Carm en Maria Cipriani Pandini Carolina Hoeller da Silva Boeing Cristina Klipp de Oliveira Daniela Erani Monteiro W ill Dnia Falco de Bittencourt Elisa Flemm ing Luz Enzo de Oliveira Moreira Flvia Lum i Matuzawa Karla Leonora Dahse Nunes Leandro Kingeski Pacheco Ligia Maria Soufen Tumolo Mrcia Loch Patrcia Meneghel Silvana Denise Guim ares Tade-Ane de Am orim Vanessa de Andrade Manuel Vanessa Francine Corra Viviane Bastos Viviani Poyer

    Logstica de Encontros

    Presenciais Caroline Batista (Coordenadora) Aracelli Araldi Graciele Marins Lindenmayr Jos Carlos Teixeira Letcia Cristina Barbosa Knia Alexandra Costa Herm ann Marcia Luz de Oliveira Priscila Santos Alves

    Logstica de M ateriais Jeferson Cassiano Almeida da Costa (coordenador)

    Eduardo Kraus

    M onitoria e Suporte Rafael da Cunha Lara (coordenador) Adriana Silveira Caroline Mendona Edison Rodrigo Valim Francielle Arruda Gabriela Malinverni Barbieri Gislane Frasson de Souza Josiane Conceio Leal Maria Eugnia Ferreira Celeghin Sim one Andra de Castilho Vincius Maycot Sera. m Produo Industrial e

    Suporte Arthur Emm anuel F. Silveira (coordenador) Francisco Asp

    Projetos Corporativos Diane Dal Mago Vanderlei Brasil

    Secretaria de Ensino a Distncia Karine Augusta Zanoni (secretria de ensino) Djeim e Sammer Bortolotti Carla Cristina Sbardella Grasiela Martins Jam es Marcel Silva Ribeiro Lamuni Souza Liana Pamplona Maira Marina Martins Godinho Marcelo Pereira Marcos Alcides Medeiros Junior Maria Isabel Aragon

    Olavo Lajs Priscilla Geovana Pagani Silvana Henrique Silva

    Secretria Executiva Viviane Schalata Martins

    Tecnologia Osm ar de Oliveira Braz Jnior (coordenador) Ricardo Alexandre Bianchini Rodrigo de Barcelos Martins

    Edio Livro Didtico

    Professor Conteudista Carlos Fernando Martins

    Design Instrucional Daniela Erani Monteiro W ill Carolina Hoeller da Silva Flavia Lum i Matuzawa (3a edio revista e atualizada) Leandro Kingeski Pacheco (4a edio revista e atualizada)

    Projeto Grfico e Capa Equipe UnisulVirtual

    Diagram ao Rafael Pessi Reviso Ortogrfica Revisare

  • Palavras do professor

    Ol caro estudante, pronto para mais uma etapa? Na verdade, agora voc vai aprimorar o que estudou em Lgica de Programao I. No imagine que est na metade do caminho, tendo em vista que o estudo da lgica de programao contnuo e eterno, pelo menos para quem quer ser um programador verdadeiro. Ainda hoje, mesmo depois de muitos anos trabalhando com programao, cada algoritmo que implemento uma forma de exercitar os conceitos. Trato cada algoritmo como um desa o a ser vencido. Voc deve pensar assim tambm, que lgica de programao um aprendizado contnuo e dinmico; que cada problema solucionado por um algoritmo de programao um degrau alcanado. Isso pode ajudar e muito nos desa os desta disciplina. Lembre-se, um programador diferencia-se do outro pela quantidade de exerccios que ele faz. Portanto, aproveite esse material de base para se aprofundar. Consulte algumas bibliogra as que podero ajud-lo a resolver outros problemas de programao. Quanto mais voc estudar, melhor vai car. E quanto melhor car, mais voc vai estudar. um ciclo contnuo e desa ador. Planeje o seu tempo de forma que o estudo de lgica de programao se torne uma diverso. Se assim for, voc j tem o esprito de programador. Bom estudo! Professor Carlos Fernando Martins.

    logica_2_livro_caderno.indb 9logica_2_livro_caderno.indb 9 7/12/2006 14:20:507/12/2006 14:20:50

  • logica_2_livro_caderno.indb 10logica_2_livro_caderno.indb 10 7/12/2006 14:20:507/12/2006 14:20:50

  • Plano de estudo

    O plano de estudos visa a orient-lo/a no desenvolvimento da Disciplina. Nele, voc encontrar elementos que esclarecero o contexto da Disciplina e sugeriro formas de organizar o seu tempo de estudos. O processo de ensino e aprendizagem na UnisulVirtual leva em conta instrumentos que se articulam e se complementam. Assim, a construo de competncias se d sobre a articulao de metodologias e por meio das diversas formas de ao/mediao.So elementos desse processo:

    o livro didtico; o Espao UnisulVirtual de Aprendizagem - EVA; as atividades de avaliao (complementares, a distncia e presenciais).

    Ementa

    Continuao da Lgica de Programao I com aprofundamento dos estudos com Fluxogramas e Diagrama de Blocos. Linguagens de programao, Cdigos computacionais e ambientes de desenvolvimento. Exerccios de Programao Linear, de Programao Estruturada e de Programao Visual.

    Objetivos

    Desenvolver a capacidade do aluno em pensar logicamente, sendo assim, capaz de desenvolver algoritmos computacionais de mdia e alta complexidade.

    Elaborar algoritmos de programao de mdia e alta complexidade.

    logica_2_livro_caderno.indb 11logica_2_livro_caderno.indb 11 7/12/2006 14:20:507/12/2006 14:20:50

  • 12

    Universidade do Sul de Santa Catarina

    Carga horria

    A carga horria total da disciplina 60 horas/aula.

    Agenda de atividades/ Cronograma

    Veri que com ateno o EVA, organize-se para acessar periodicamente o espao da Disciplina. O sucesso nos seus estudos depende da priorizao do tempo para a leitura; da realizao de anlises e snteses do contedo; e da interao com os seus colegas e tutor.

    No perca os prazos das atividades. Registre no espao a seguir as datas, com base no cronograma da disciplina disponibilizado no EVA.

    Use o quadro para agendar e programar as atividades relativas ao desenvolvimento da Disciplina.

    logica_2_livro_caderno.indb 12logica_2_livro_caderno.indb 12 7/12/2006 14:20:507/12/2006 14:20:50

  • 13

    Lgica de Programao II

    Atividades

    Avaliao a Distncia 1

    Avaliao Presencial 1

    Avaliao Presencial 2 (2 chamada)

    Avaliao Final (caso necessrio)

    Demais atividades (registro pessoal)

    logica_2_livro_caderno.indb 13logica_2_livro_caderno.indb 13 7/12/2006 14:20:507/12/2006 14:20:50

  • logica_2_livro_caderno.indb 14logica_2_livro_caderno.indb 14 7/12/2006 14:20:517/12/2006 14:20:51

  • Objetivos de aprendizagem

    Conhecer os algoritmos de maiores complexidades.

    Construir algoritmos com utilizao de vetores.

    Sees de estudo

    Seo 1 Conceito e declarao de vetores.

    Seo 2 Operao de vetores.

    Seo 3 Algoritmos com manipulao de vetores.

    UNIDADE 1

    Manipulao de vetores 1

    logica_2_livro_caderno.indb 15logica_2_livro_caderno.indb 15 7/12/2006 14:20:517/12/2006 14:20:51

  • 16

    Universidade do Sul de Santa Catarina

    Para incio de conversa

    Antes de iniciar o estudo sobre vetores, voc deve recordar o que uma varivel e para que ela serve, certo? Bem, voltando unidade 4 de Lgica de Programao I, temos que varivel a representao simblica dos elementos de memria de um computador. Cada varivel corresponde a uma posio de memria, cujo contedo pode se alterado ao longo do tempo durante a execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante. Voc tambm estudou que as variveis podem ser de trs tipos: numricas, alfanumricas e lgicas, e que para declarar uma varivel precisamos de nir o seu nome e que tipo de dados ser armazenado nela. Veja a seguir:

    incio

    nome: literal {varivel do tipo literal}

    idade: numrica {varivel do tipo numrica} m

    Outro exemplo bem fcil, j utilizando o sinal de atribuio.Veja.

    incio

    nome: literal {varivel do tipo literal}

    idade: numrica {varivel do tipo numrica}

    idade 22 {varivel idade assume valor 22}

    nome Paulo Pereira {varivel nome assume Paulo Pereira} m

    logica_2_livro_caderno.indb 16logica_2_livro_caderno.indb 16 7/12/2006 14:20:517/12/2006 14:20:51

  • 17

    Lgica de Programao II

    Unidade 1

    O algoritmo acima, amplamente discutido em Lgica de Programao I, serve de base para a seguinte questo: Suponha que precisamos cadastrar dois nomes de clientes com suas respectivas idades. Como fazer? Ora, parece bem simples, voc no acha? Basta criar duas novas variveis, conforme mostro a seguir:

    incio

    nome1, nome2: literal {variveis do tipo literal}

    idade1, idade2: numrica {variveis do tipo numrica}

    idade1 22 {varivel idade1assume valor 22}

    nome1 Paulo Pereira {varivel nome1 assume Paulo Pereira}

    idade2 38 {varivel idade2 assume valor 38}

    nome2 Ana Luiza {varivel nome2 assume Ana Luiza} m

    Mas, e se quisermos criar um cadastro de alunos de um colgio? E agora? Quantas variveis precisamos criar? 500, 2500, 10000? Basta utilizar o conceito de vetores para lidar com situaes como essas. - Toda a lgica de programao estudada at agora vai se repetir. No h nenhum outro comando. Tudo que voc aprendeu em Lgica de Programao I ser utilizado agora. Os nicos assuntos novos so o conceito, a criao e a utilizao de vetores.

    logica_2_livro_caderno.indb 17logica_2_livro_caderno.indb 17 7/12/2006 14:20:517/12/2006 14:20:51

  • 18

    Universidade do Sul de Santa Catarina

    SEO 1 - Conceito e declarao de vetores

    Antes de de nir vetor, imaginemos a seguinte situao. Precisamos criar um programa que armazene as seguintes notas de um aluno em Lgica de Programao II: 8.0, 10.0, 9.0, 10.0, 8.5, 10.0 e que calcule a mdia nal. A soluo bem simples, conforme j visto em Lgica de Programao I.

    incio

    nota, conta, media, soma: numrico

    soma 0 {inicializa varivel soma com o valor 0}

    para conta de 1 at 6 passo 1 faa {lao de repetio}

    escreva Entre com a nota:

    leia nota {leitura da nota}

    soma soma + nota {soma de todas as notas entradas}

    m-para

    media soma/6 {calcula a mdia nal}

    escreva A mdia nal , media {mostra o resultado na tela} m

    Mas agora consta a seguinte complexidade: necessitamos imprimir tambm todas as notas do aluno, alm da mdia nal. Uma soluo extremamente pobre seria criar seis variveis para armazenar as seis notas digitadas e imprimi-las. Mas, se tiver mais notas (80, por exemplo), seu algoritmo j no resolveria mais o problema. Para resolver essa situao, utilize o conceito de vetor.

    Um vetor nada mais do que uma varivel que pode armazenar vrios valores do mesmo tipo.

    Bem, mas o que signi ca isso? Inicialmente, acompanhe o conceito de variveis e sua de nio.

    logica_2_livro_caderno.indb 18logica_2_livro_caderno.indb 18 7/12/2006 14:20:517/12/2006 14:20:51

  • 19

    Lgica de Programao II

    Unidade 1

    Quando de nimos uma varivel, alocamos um espao na memria do computador para armazenar uma e somente uma constante por vez, seja ela literal, numrica ou lgica. Quando atribumos um valor varivel sobrescrevemos seu contedo. Por exemplo, ao criarmos uma varivel numrica chamada nota, criamos um espao na memria para armazenar apenas um valor numrico por vez, conforme a seguir:

    nota: numrica

    .......

    nota 10 {varivel armazena valor numrico 10}

    escreva O valor da varivel nota : , nota {aqui, o valor impresso ser 10}

    nota 8 {varivel armazena valor numrico 8}

    escreva O valor da varivel nota : , nota {aqui, o valor impresso ser 8, ou seja, sobrescrevemos o valor 10}

    ......

    Isso parece bem lgico, pois estamos escrevendo na mesma posio de memria do computador. Lembre-se que, sempre que criarmos uma varivel, estaremos criando um espao na memria do computador para armazenar dados. um endereo na qual o computador se referencia para manipular os dados em questo.Como queremos armazenar vrios valores numricos, precisamos criar vrias posies de memria sob o nome de uma mesma varivel. O que devemos especi car quantos valores queremos armazenar, ou seja, quantas posies de memria queremos alocar para armazenar esses nmeros. Vejamos o exemplo para armazenar as notas de um aluno conforme o algoritmo anterior. Queremos armazenar seis valores diferentes em seis posies de memria diferentes:

    8.0 10.0 9.0 10.0 8.5 10.0

    logica_2_livro_caderno.indb 19logica_2_livro_caderno.indb 19 7/12/2006 14:20:517/12/2006 14:20:51

  • 20

    Universidade do Sul de Santa Catarina

    Devemos criar 6 posies de memrias para armazenar esses valores. Como soluo, podemos criar 6 variveis ou criar um vetor com 6 posies de memria. Esse esquema representa um vetor do tipo numrico de 6 posies, ou seja, 6 endereos de memria consecutivos alocados no computador que podem armazenar 6 valores numricos diferentes. Cada quadradinho representa uma posio de memria, onde podem ser armazenados os valores numricos.O nmero de posies que queremos criar especi cado na declarao. Em resumo: um vetor prtico quando precisamos manipular um conjunto de dados do mesmo tipo sem que seja necessrio declarar muitas variveis. Por exemplo: O registro de 26 livros e seus respectivos preos; o registro de notas de 13 avaliaes de um aluno etc.Mas como criar um vetor? muito simples. Especi camos o nome do vetor e o nmero de posies da memria que queremos alocar. Cada posio de memria pode armazenar um valor diferente dos demais.

    Sintaxe do vetor : vetor [tamanho do vetor]

    Quando um vetor declarado, ele se apresenta assim na memria:

    Valor 1 Valor 2 Valor n

    logica_2_livro_caderno.indb 20logica_2_livro_caderno.indb 20 7/12/2006 14:20:517/12/2006 14:20:51

  • 21

    Lgica de Programao II

    Unidade 1

    notas: vetor[6] numrico {vetor numrico de 6 posies. Pode armazenar at 6 valores numricos diferentes}

    estados: vetor[27] literal {vetor de caracteres de 27 posies. Pode armazenar at 27 caracteres diferentes}

    Importante

    Assim como na criao das variveis, para a criao de vetores no precisamos especifi car os endereos de memria do computador. Isso feito automaticamente, sem que sequer saibamos onde os valores esto armazenados na memria. A nica coisa que sabemos que alocado um espao para armazenar esses valores e que so armazenados em endereos de memria seqenciais. Para acessar esses endereos, ou os valores armazenados nesses endereos, que um pouco diferente das variveis. Veremos isso na seo 2.

    Bem, at agora no resolvemos o nosso problema de mostrar todas as notas do aluno mais a mdia nal, conforme solicitado. Sabemos que precisaremos criar um vetor conforme explicado, porm, ainda no sabemos manipular ou realizar operaes com eles. A prxima seo tratar sobre isso.

    Importante

    Alguns autores preferem utilizar uma sintaxe diferente para a criao de vetores, conforme a seguir:

    : vetor[.. ]

    logica_2_livro_caderno.indb 21logica_2_livro_caderno.indb 21 7/12/2006 14:20:517/12/2006 14:20:51

  • 22

    Universidade do Sul de Santa Catarina

    notas: vetor [1..50]: numrico {criamos um vetor que inicia com ndice 1 e vai at 50}.

    O mesmo vetor poderia ser criado da seguinte maneira:

    notas: vetor [0..49]: numrico {criamos um vetor que inicia com ndice 0 e vai at 49}.

    Qual a melhor maneira? Voc pode escolher. Porm, em linguagens de programao de alto nvel como C/C++, JAVA etc., os vetores comeam sempre com ndice 0. Desde que voc faa a converso correta entre pseudocdigo e uma linguagem de programao de alto nvel, no h problemas de qual a maneira que voc vai criar seus vetores. O importante que seja claro e sem quaisquer ambigidades.

    SEO 2 - Operao de vetores

    At agora nossa preocupao foi em saber como criar um vetor e saber quando ele necessrio. Sempre que trabalharmos com grandes quantidades de dados, estaremos criando um ou mais vetores. A sintaxe da criao bastante simples conforme seo anterior. Mas como iremos trabalhar com um vetor? Por exemplo, como atribuir valores a um vetor? Como recuperar um valor de um vetor? Como realizar operaes bsicas de adio, subtrao etc. de vetores? Bem, vamos por etapa. Inicialmente vamos inserir valores em cada parte do vetor. Como j foi dito anteriormente, quando um vetor declarado, so reservados espaos na memria para armazenar as constantes (literal, numrica ou lgica). Porm, como acessar esses espaos? muito simples, basta indicar a posio que voc quer acessar.

    logica_2_livro_caderno.indb 22logica_2_livro_caderno.indb 22 7/12/2006 14:20:527/12/2006 14:20:52

  • 23

    Lgica de Programao II

    Unidade 1

    Veja um exemplo de um vetor de notas:

    notas: vetor[6] numrico

    Quando o vetor notas declarado, ele se apresenta assim na memria:

    Cada quadrado, representando uma posio de memria, uma posio do vetor declarado. Chamamos essa posio de ndice do vetor. O primeiro quadrado (posio inicial), dizemos que tem ndice 0 e o acesso a essa posio se d atravs do nome do vetor seguido do abre colchete [, do valor 0, seguido do fecha colchete ]. Para as posies seguintes, temos os ndices 1, 2, 3, .... .

    Para atribuirmos um valor posio inicial do vetor notas, podemos ento fazer: notas[0] 8.0

    Para atribuirmos um valor segunda posio do vetor notas, podemos fazer:

    notas[1] 10.0

    Para atribuirmos um valor terceira posio do vetor notas, podemos fazer:

    notas[2] 9.0. E assim sucessivamente, at preencher todo o vetor de notas.

    Nosso vetor caria assim preenchido:

    8.0 10.0 9.0

    Importante

    Perceba que a primeira posio do vetor tem ndice 0, a segunda posio tem ndice 1, a terceira posio tem ndice 2, e assim sucessivamente. Isso signifi ca que para um vetor de tamanho N, o ltimo ndice N-1. Por exemplo, um vetor de notas de tamanho 150, declarado da seguinte forma notas: vetor [150] numrico tem ndices de vo de 0 (posio inicial) at 150-1, ou seja, ndice 149. No existe a posio 150. 150 o tamanho do vetor que vai de 0 at 149.

    logica_2_livro_caderno.indb 23logica_2_livro_caderno.indb 23 7/12/2006 14:20:527/12/2006 14:20:52

  • 24

    Universidade do Sul de Santa Catarina

    Todo o processo de manipulao agora se torna bastante simples, bastando especi car a posio do vetor onde estaremos armazenando os valores. Voltando ao nosso exemplo, onde queremos imprimir as notas do aluno, alm da sua mdia, podemos armazenar os valores (notas digitadas) em um vetor de notas. Cada nota digitada ser armazenada em uma posio espec ca. Perceba que temos 6 notas como entrada, o que sugere um vetor de tamanho 6, com ndices variando de 0 at 5.

    incio

    conta, media, soma: numrico

    notas: vetor[6] numrico {vetor para armazenar as notas digitadas}

    soma 0 {inicializa varivel soma com o valor 0}

    para conta de 0 at 5 passo 1 faa {lao de repetio}

    escreva Entre com a nota:

    leia notas[ conta ] {leitura das notas. Perceba que o que aparece entre colchetes a varivel conta.

    Dentro do lao de repetio, a varivel conta vai sendo incrementada de 1, sendo seu valor inicial de 0 e o nal de 5, conforme o comando para.

    Para o primeiro lao de repetio, a varivel conta tem valo 0. Sendo assim, o comando leia notas[ conta ] est lendo notas na posio 0, ou seja, leia notas[ 0 ]. Para o segundo lao de repetio, a varivel conta tem valo 1. Sendo assim, o comando leia notas[ conta ] est lendo notas na posio 1, ou seja, leia notas[ 1 ], e assim sucessivamente at atingir o valor 5, ltima posio do vetor. }

    soma soma + notas[conta] {soma das notas digitadas}

    m-para

    {para imprimir as notas, basta ler o vetor notas da posio 0 at a posio 5. Faamos com o lao de repetio novamente}

    para conta de 0 at 5 passo 1 faa {lao de repetio}

    escreva Nota: , notas[conta]

    m-para

    media soma/6 {calcula a mdia nal}

    escreva A mdia nal , media {mostra o resultado na tela} m

    Dica: para trabalhar com vetores, sempre precisamos especifi car o seu tamanho inicial. Sendo assim, a forma mais usual e fcil para escrita/leitura de valores para/de vetores pode ser feita atravs do comando para/fi m-para. Voc consegue saber por qu?

    logica_2_livro_caderno.indb 24logica_2_livro_caderno.indb 24 7/12/2006 14:20:527/12/2006 14:20:52

  • 25

    Lgica de Programao II

    Unidade 1

    Tudo, agora, no passa de operaes simples, como se estivssemos manipulando variveis independentes. Por exemplo, vamos criar um vetor de nmeros pares e um vetor de nmeros mpares: a diferena entre eles ser armazenada em um terceiro vetor. Vamos assumir os 50 primeiros valores numricos, ou seja, de 0 at 49.

    incio {declarao das variveis} pares: vetor[25] numrico {armazena nmeros pares com 25 posies,

    pois se so os 50 primeiros nmeros positivos, temos apenas 25 pares} impares: vetor[25] numrico {armazena nmeros mpares} subtracao: vetor[25] numrico {armazena a diferena entre nmeros pares e mpares} j,i: numrico {variveis utilizadas para realizar o lao de repetio} {vamos armazenar os nmeros pares no vetor pares} j 0 {ser o contador do vetor pares e vetor mpares} para i de 0 at 49 passo 2 faa {armazena 0,2,4,6.....48. Perceba que o passo do lao de

    repetio de 2 em 2. Ento o valor da varivel i pula de 2 em 2. Mas no vetor pares

    precisamos guardar em posies seqenciais. Vamos criar uma outra varivel para contar os vetores pares (j).}

    pares[ j ] i j j +1 m-para {vamos armazenar os nmeros mpares no vetor mpares} j 0 {inicializar novamente, para iniciar o vetor impares de 0.} para i de 1 at 49 passo 2 faa impares [ j ] i {armazena 1,3,5,7.....49. Perceba que o passo

    do lao de repetio de 2 em 2, mas a contagem comea com 1. O contador j ir guardar o valor de i na posio correta em seqncia.}

    j j + 1 m-para {vamos realizar as subtraes de cada posio dos vetores pares e

    mpares e armazenar o resultado no vetor subtracao. A estrutura repetio para-faa inicia em 0 e vai at 25, pois cada vetor tem apenas 25 elementos (25 pares e 25 mpares) dentre os 50 primeiros nmeros 0-49}

    para i de 0 at 24 passo 1 faa subtracao[ i ] = pares[ i ] impares[ i ] m-para {como resultado de sada, vamos imprimir os vetores} para i de 0 at 24 passo 1 faa escreva Nmeros Pares: , pares[ i ] escreva Nmeros mpares , impares[ i ] escreva Diferena Pares - mpares: , subtracao[ i ] m-para m

    logica_2_livro_caderno.indb 25logica_2_livro_caderno.indb 25 7/12/2006 14:20:527/12/2006 14:20:52

  • 26

    Universidade do Sul de Santa Catarina

    Bem, agora voc j sabe criar vetores, inserir e recuperar valores de vetores. Na prxima seo, vai estudar alguns algoritmos de programao utilizando vetores.

    SEO 3 - Algoritmos com manipulao de Vetores

    Conforme falamos na disciplina de Lgica de Programao I, a melhor maneira de aprender a programar programando. Continua valendo a idia: A melhor maneira de aprender a utilizar vetores construindo algoritmos com vetores. Nesta seo, mostraremos algumas aplicaes que manuseiam vetores. Para esses exemplos, vamos de nir as variveis com nomes maisculos apenas por questes de esttica. Vale lembrar que, de acordo com a seo 4 de Lgica de Programao I, por padro, as variveis so todas com letras minsculas, mas isso para as linguagens de programao de alto nvel como C/C++, JAVA, Visual etc. Para o pseudocdigo, podemos representar por letras maisculas, sem perda de padronizao.1. Ler um vetor de 50 nmeros e montar outro vetor com os valores do primeiro multiplicados por 3. Pseudocdigo:

    incio

    VET1,VET2 : vetor [50] numrico

    CONTADOR : numrico

    para CONTADOR de 0 at 49 faa

    leia Digite um nmero: ,VET1[CONTADOR]

    VET2[CONTADOR] VET1[CONTADOR] * 3

    m-para

    m

    logica_2_livro_caderno.indb 26logica_2_livro_caderno.indb 26 7/12/2006 14:20:527/12/2006 14:20:52

  • 27

    Lgica de Programao II

    Unidade 1

    2. Um armazm contm 400 produtos e para cada tipo de produto existe um cdigo. Faa um algoritmo para ler o cdigo do produto e a quantidade em estoque. Depois, monte dois vetores para armazenar respectivamente os cdigos das mercadorias e a quantidade dos produtos.Pseudocdigo:

    incio

    {declarao das variveis}

    CODIGOPRODUTO : vetor [400] literal

    QUANTIDADE : vetor [400] numrico

    CONTADOR : numrico

    para CONTADOR de 0 at 399 faa

    {leitura de 400 cdigos de produtos e a quantidade em estoque de cada um}

    escreva Digite o cdigo do produto:

    leia CODIGOPRODUTO[CONTADOR]

    escreva Digite a quantidade do produto em estoque:

    leia QUANTIDADE[CONTADOR]

    m-para

    m

    3. Ler um vetor contendo 100 nmeros, que correspondem a matrculas de alunos. Ler cinco nmeros e imprimir uma mensagem informando se eles esto ou no presentes no vetor.Pseudocdigo:

    incio

    {declarao de variveis}

    ALUNOS : vetor[100] numrico {lembre que o tamanho do vetor 100, mas ele vai de 0 at 99}

    POS, PESQUISADO, CONT :numrico

    {lao de repetio para preencher o vetor ALUNOS}

    para POS de 0 at 99 faa

    escreva Digite o cdigo de matrcula de um aluno:

    leia ALUNOS[POS]

    m-para

    logica_2_livro_caderno.indb 27logica_2_livro_caderno.indb 27 7/12/2006 14:20:537/12/2006 14:20:53

  • 28

    Universidade do Sul de Santa Catarina

    {5 entradas de dados para veri car se alunos esto cadastrados ou no}

    para CONT de 1 at 5 faa

    escreva Digite o nmero de matrcula a ser pesquisado:

    leia PESQUISADO

    POS -1 {inicialmente atribudo o valor 1 para a varivel POS porque na seqncia, no comando repita, a varivel POS ser incrementada de 1 (POS POS + 1). Como queremos comear a ler o vetor ALUNOS a partir da posio 0, no primeiro lao, a varivel POS assume valor 0}

    repita

    POS POS+1

    {repete o lao at que o nmero sendo pesquisado (valor armazenado na varivel PESQUISADO) seja igual ao nmero armazenado no vetor ALUNOS em uma determinada posio POS, ou que a varivel POS seja maior que o tamanho do vetor ALUNOS, nesse caso, seja maior que 100}

    at que PESQUISADO = ALUNOS[POS] OU POS > 99

    se POS > 99 ento

    {se a varivel POS possui um valor superior a 99, ou seja, 100, isso signi ca que todo o vetor ALUNOS foi lido desde o ndice 0 at 99 (100 alunos), mas que no h nenhum nmero armazenado nesse vetor igual ao valor armazenado na varivel PESQUISADO}

    escreva Nmero no cadastrado !

    seno

    escreva Nmero localizado na posio , POS , do vetor.

    m-se

    m-para

    m

    4. Criar um algoritmo que leia o preo de compra e o preo de venda de 100 mercadorias. O algoritmo dever imprimir quantas mercadorias proporcionam:

    Lucro menor do que 10% Lucro maior ou igual 10% e menor ou igual a 20% Lucro superior a 20%

    Pseudocdigo:

    logica_2_livro_caderno.indb 28logica_2_livro_caderno.indb 28 7/12/2006 14:20:537/12/2006 14:20:53

  • 29

    Lgica de Programao II

    Unidade 1

    incio

    {declarao de variveis}

    PRECOCOMPRA: vetor [100] numrico {armazena os preos de compra das mercadorias}

    PRECOVENDA: vetor [100] numrico {armazena os preos de venda das mercadorias}

    LUCRO, TOTLUCROMENOR10, TOTLUCROMENOR20, TOTLUCROMAIOR20: numrico {variveis utilizadas para armazenar o lucro, o lucro menor que 10%, menor do que 20% e maior do que 20%, respectivamente}

    i : numrico {varivel utilizada como contadora para laos de repetio}

    {precisamos inicializar as variveis contadoras de lucros}

    TOTLUCROMENOR10 0

    TOTLUCROMENOR20 0

    TOTLUCROMAIOR20 0

    {entrada de dados}

    para I de 0 at 99 passo 1 faa

    {vamos especi car o preo de venda e de compra de todas as 100 mercadorias}

    escreva Entre com o preo de compra da mercadoria:

    leia PRECOCOMPRA[ i ]

    escreva Entre com o preo de venda da mercadoria:

    leia PRECOVENDA[ i ]

    m-para

    {Processamento do algoritmo. Vamos veri car o lucro de cada mercadoria (preo de venda preo de compra) e veri car as condies de lucro (10%, 20% ou maior do que 20%. Para isso, vamos ter que ler os vetores PRECOVENDA e PRECOCOMPRA novamente}

    para i de 0 at 99 passo 1 faa

    LUCRO (PRECOVENDA[ i ] PRECOCOMPRA[ i ]) * 100 / PRECOCOMPRA[ i ]

    {se a diferena entre preo de venda e preo de compra, ou seja, o lucro for menor do que 10, ento incrementa a varivel contadora de mercadorias com lucros inferior a 10%}

    se LUCRO < 10.0 ento

    TOTLUCROMENOR10 TOTLUCROMENOR10 + 1

    seno

    {se o lucro no inferior a 10%, ento ele s pode ser superior a 10%. Mas quanto? Precisamos saber se o lucro menor a 20% ou superior a esse valor. Por isso colocamos outra condio dentro do comando seno. Essa condio veri ca se o lucro inferior ou superior a 20%.}

    logica_2_livro_caderno.indb 29logica_2_livro_caderno.indb 29 7/12/2006 14:20:537/12/2006 14:20:53

  • 30

    Universidade do Sul de Santa Catarina

    Sntese

    Finalizamos mais uma etapa. Mais um passo da nossa caminhada. Nessa unidade, vimos que um vetor uma varivel que pode armazenar vrias constantes do mesmo tipo (homogneas). Isso permite manipular uma grande quantidade de dados sem a necessidade de declarar vrias variveis. Para declarar um vetor em pseudocdigo, utilizamos o seguinte comando:: vetor [tamanho do vetor] Quando um vetor declarado, ele se apresenta assim na memria:

    Valor 1 Valor 2 Valor n

    se LUCRO < 20.0 ento

    TOTLUCROMENOR20 TOTLUCROMENOR20 + 1

    seno

    TOTLUCROMAIOR20 TOTLUCROMAIOR20 + 1

    m-se { m da condio que testa se lucro menor do que 20.0}

    m-se { m da condio que testa se lucro menor do que 10.0}

    m-para

    {sada do algoritmo}

    escreva Nmero de mercadorias com lucro inferior a 10%: , TOTLUCROMENOR10

    escreva Nmero de mercadorias com lucro maior ou igual a 10% e menor do que 20%: , TOTLUCROMENOR20

    escreva Nmero de mercadorias com lucro superior a 20%: , TOTLUCROMAIOR20

    m

    logica_2_livro_caderno.indb 30logica_2_livro_caderno.indb 30 7/12/2006 14:20:537/12/2006 14:20:53

  • 31

    Lgica de Programao II

    Unidade 1

    Cada posio (representado por um quadrado no desenho acima) uma posio de memria do computador. Para inserir ou ler valores de um vetor basta especi car seu nome e o ndice (posio) que queremos acessar dentro do vetor. Por exemplo: notas [10] 8.5. Sabendo que o ndice dos vetores comea com o valor numrico 0. Quando colocamos notas [10] estamos nos referindo ao ndice 10, mas a posio no vetor (representado por um quadrado) o 9. Poderamos representar as posies de um vetor de tamanho 5 conforme apresentado abaixo:

    Valor 1 Valor 2 Valor n

    [0] [1] [2] [3] [4]

    Podemos perceber que o ndice [3] est no quarto quadrado. Tudo isso porque um vetor tem seu incio no ndice 0, conforme j dito.Bem, um vetor unidimensional, ou seja, apresenta apenas uma dimenso ou 1 linha. Poderamos estar trabalhando com vetores bidimensionais ou vetores que possuem vrias colunas e vrias linhas. A esses vetores damos o nome de matrizes. No prximo captulo, estaremos estudando algoritmos que utilizam os conceitos de matrizes.At l!

    logica_2_livro_caderno.indb 31logica_2_livro_caderno.indb 31 7/12/2006 14:20:537/12/2006 14:20:53

  • 32

    Universidade do Sul de Santa Catarina

    Saiba mais

    Consulte o site http://www.unidev.com.br/artigos. H uma srie de algoritmos j feitos. um bom exerccio fazer os exemplos e comparar com o que est feito. Tambm, neste site, constam dicas importantes de lgica de programao. Dicas de programao nunca so demais, no se esquea disso!

    Atividades de auto-avaliao

    1. Crie um vetor para armazenar 25 valores de temperaturas.

    2. Crie um vetor para armazenar 150 alunos de um colgio infantil.

    3. Um site na web precisa registrar 2500 produtos cadastrados de um fornecedor. Crie um vetor para representar esses produtos.

    4. Criar um algoritmo que realize as reservas de passagem areas de uma companhia. Alm da leitura do nmero de vos e da quantidade de lugares disponveis, leia vrios pedidos de reserva, constitudos do nmero da carteira de identidade e do nmero do vo desejado. Para cada cliente, verifi car se h possibilidade no vo desejado. Em caso afi rmativo, imprimir o nmero de identidade do cliente e o nmero do vo, atualizando o nmero de lugares disponveis. Caso contrrio, avisar ao cliente a inexistncia de lugares.

    logica_2_livro_caderno.indb 32logica_2_livro_caderno.indb 32 7/12/2006 14:20:537/12/2006 14:20:53

  • Objetivos de aprendizagem

    Entender o conceito de matrizes.

    Conhecer e praticar montagens de matrizes.

    Construir algoritmos com utilizao de matrizes.

    Sees de estudo

    Seo 1 Conceito e declarao de matrizes.

    Seo 2 Operao de matrizes.

    Seo 3 Algoritmos com manipulao de matrizes.

    UNIDADE 2

    Manipulao de matrizes 2

    logica_2_livro_caderno.indb 33logica_2_livro_caderno.indb 33 7/12/2006 14:20:537/12/2006 14:20:53

  • 34

    Universidade do Sul de Santa Catarina

    Para incio de conversa

    Trabalhamos na unidade anterior apenas com vetores unidimensionais, ou seja, variveis que podem conter diferentes valores de um mesmo tipo em diversas colunas. Na verdade, o conceito de vetor pode ser representado por uma tabela com 1 linha e vrias colunas, onde o tamanho do vetor especi ca o nmero de colunas, conforme voc pode ver a seguir:

    Linha 0 Valor 1 Valor 2 Valor 3 ... Valor nColuna 0 Coluna 1 Coluna 2 Coluna n-1

    Perceba na gura anterior que temos uma linha, denominada linha 0, e vrias colunas, denominadas de colunas 0, coluna 1 e assim sucessivamente. Como vimos na unidade anterior, cada valor de um vetor armazenado em uma posio de memria, ou seja, em um dos quadrados representados na gura anterior. J sabemos tambm que no precisamos saber o endereo de memria do computador para acessar os elementos do vetor, bastando especi car o ndice que queremos acessar.

    Por exemplo, para um vetor chamado de NOTAS de tamanho 5, podemos acessar os ndices de 0 at 4 (lembre-se de que um vetor sempre comea com ndice 0). Para acessar qualquer posio do vetor, basta especifi car o ndice de interesse: NOTAS [2] 7.5. Se observarmos o ndice que estamos acessando, no exemplo em questo, o ndice 2 do vetor NOTAS, podemos represent-lo conforme a fi gura anterior:

    Linha 0 7.5

    Coluna 0 Coluna 1 Coluna 2 Coluna n-1

    Observando a gura, podemos constatar que o ndice 2 est na linha 0 e coluna 2. Isso mesmo, voc j deve ter percebido que um vetor nada mais do que uma tabela de 1 (uma) linha, na qual chamamos de linha 0 e vrias colunas, onde armazenado

    logica_2_livro_caderno.indb 34logica_2_livro_caderno.indb 34 7/12/2006 14:20:547/12/2006 14:20:54

  • 35

    Lgica de Programao II

    Unidade 2

    cada um dos valores, seja ele numrico, alfanumrico ou lgico, e que o ndice que especi camos para acessar o vetor exatamente o nmero da coluna desse vetor.

    Outro exemplo, NOTAS [4] 10.0. Podemos dizer que estamos inserindo no vetor NOTAS o valor 10.0 no ndice 4, ou seja, na linha 0 e coluna 4 do vetor.

    Mas agora vem a questo: e, se quisermos trabalhar com um vetor que possua vrias linhas e vrias colunas conforme a gura a seguir?

    Temos agora vrias linhas e colunas. Damos o nome para essas estruturas de matrizes.- Nesta unidade voc vai conhecer o que so matrizes e saber o porqu de sua importncia no mundo da programao.

    logica_2_livro_caderno.indb 35logica_2_livro_caderno.indb 35 7/12/2006 14:20:547/12/2006 14:20:54

  • 36

    Universidade do Sul de Santa Catarina

    SEO 1 - Conceito e declarao de matrizes

    Uma matriz nada mais do que um vetor de 2 dimenses (linhas e colunas) capaz de armazenar variveis do mesmo tipo (numrica, literal ou lgica).

    Pode ser representada por uma tabela, conforme voc pode ver a seguir:

    Cada quadrado representa uma posio de memria onde podem ser armazenadas as variveis, de maneira idntica aos vetores. Porm, os vetores so unidimensionais (apenas colunas) e as matrizes so bidimensionais (2 dimenses: linhas e colunas). Agora teremos no somente a linha 0, mas tambm a linha 1, a linha 2 e assim sucessivamente. O nmero de posies que queremos criar especi cado na declarao, de forma similar a dos vetores. Mas qual a utilidade de uma matriz? Uma matriz prtica quando precisamos manipular um conjunto de dados do mesmo tipo, sem que seja necessrio declarar muitas variveis e precisamos fazer relaes de 2 variveis.

    Queremos registrar 4 temperaturas de trs dias da semana (segunda-feira, tera-feira e quarta-feira). Nesse caso, temos duas variveis: temperatura e dias da semana. A melhor maneira de representar isso atravs de uma tabela, mostrando nas linhas os dias da semana e, nas colunas, as temperaturas medidas.

    logica_2_livro_caderno.indb 36logica_2_livro_caderno.indb 36 7/12/2006 14:20:547/12/2006 14:20:54

  • 37

    Lgica de Programao II

    Unidade 2

    Veja a tabela a seguir:

    Dias da semana Temperatura 1 Temperatura 2 Temperatura 3 Temperatura 4

    Segunda 27 29 30 24

    Tera 25 27 28 22

    Quarta 21 23 25 20

    Se olharmos para a tabela anterior, podemos saber, por exemplo, que na tera-feira, a 4 temperatura medida foi 22C e que na quarta-feira a 2 temperatura medida foi de 23C. Estamos fazendo uma correspondncia entre a varivel Temperatura e o Dia. Nesse caso, para determinar a temperatura em uma determinada hora de um dia. Para representar essa correspondncia que utilizamos o conceito de matrizes. Agora termos uma estrutura de linhas e colunas e no apenas de colunas como eram os vetores. Mas como criar uma matriz? muito simples. Especi camos o nome da matriz seguido do nmero de linhas e colunas que a matriz conter, alm do tipo de varivel que ser armazenada.

    A exemplo de vetores, as matrizes s podem armazenar dados do mesmo tipo. Por exemplo: somente dados numricos ou somente dados literais ou somente dados lgicos. No podemos ter em uma matriz dados numricos e literais ao mesmo tempo.

    Sintaxe da matriz : matriz [nmero de linhas][nmero de colunas]

    notas_de_alunos: matriz[6][4] numrico {matriz que possui 6 linhas numeradas de 0 at 5 e 4 colunas, numeradas de 0 at 3. Dizemos que a matriz tem dimenso de 6x4. No total, so 6x4 = 24 posies para armazenar valores numricos}

    matriz_de_alunos: matriz[10][30] literal {matriz que possui 10 linhas numeradas de 0 at 9 e 30 colunas, numeradas de 0 at 29. Dizemos que a matriz tem dimenso de 10x30. No total, so 10x30 = 300 posies para armazenar valores literais}

    logica_2_livro_caderno.indb 37logica_2_livro_caderno.indb 37 7/12/2006 14:20:547/12/2006 14:20:54

  • 38

    Universidade do Sul de Santa Catarina

    Assim como na criao de vetores, para a criao de matrizes no precisamos especi car os endereos de memria do computador. Isso feito automaticamente, sem que sequer saibamos onde os valores esto armazenados na memria. A nica coisa que sabemos que alocado um espao para armazenar esses valores e que so armazenados em endereos de memria seqenciais. Para acessar esses endereos ou os valores armazenados nesses endereos que um pouco diferente dos vetores. Veremos isso na seo 2.

    - Na prxima seo voc vai estudar como manipular matrizes, ou seja, como inserir e ler valores a partir de matrizes.

    SEO 2 - Operao de matrizes

    At agora nossa preocupao foi em saber como criar uma matriz e saber quando ela necessria. Sempre que trabalharmos com grandes quantidades de dados e precisamos relacionas duas ou mais variveis, estaremos criando uma ou mais matrizes. A sintaxe da criao bastante simples conforme seo anterior.

    Mas como iremos trabalhar com uma matriz? Por exemplo, como atribuir valores a uma matriz? Como recuperar um valor de uma matriz?

    Para a nossa alegria, tudo realizado de forma similar a dos vetores, somente com uma ateno especial: precisamos especi car qual a linha que estamos acessando, alm da coluna como feito com os vetores.Assim, para acessar as posies de uma matriz, basta indicar a linha e a coluna desejadas.

    logica_2_livro_caderno.indb 38logica_2_livro_caderno.indb 38 7/12/2006 14:20:547/12/2006 14:20:54

  • 39

    Lgica de Programao II

    Unidade 2

    Exemplo: NOTAS.

    NOTAS: matriz [6][4] numrico

    1. A Matriz NOTAS uma matriz de dimenso 6x4, ou seja, 6 linhas por 4 colunas.

    2. Para armazenar uma constante numrica na matriz NOTAS, precisamos identi car a linha e coluna que queremos acessar. Isso feito da seguinte forma: nome da matriz [ndice da linha][ndice da coluna], lembrando que os ndices comeam sempre com o valor 0. Por exemplo, a 3 (terceira) linha da matriz tem ndice 2, isso por que a 1 (primeira) linha tem o ndice 0, a 2 (segunda) linha tem ndice 1 e a 3 (terceira) o ndice 2.

    3. Para armazenar a constante numrica 10 na 3 (terceira) linha (linha 2) da 2 (segunda) coluna (coluna 1), utilizamos os ndices da matriz NOTAS, nesse caso, o ndice 2 para linha e o ndice 1 para coluna. Assim, NOTAS [2][1] 10.0. Veja com ca a matriz.

    10.0

    Todo o processo de manipulao agora se torna simples, bastando especi car a posio onde estaremos armazenando os valores, ou seja, basta especi car o nome da matriz e, a seguir, entre colchetes, o ndice que representa a linha e, depois, tambm entre colchetes, o ndice que representa a coluna.

    logica_2_livro_caderno.indb 39logica_2_livro_caderno.indb 39 7/12/2006 14:20:547/12/2006 14:20:54

  • 40

    Universidade do Sul de Santa Catarina

    Dica: para trabalhar com matrizes, sempre precisamos especifi car a sua dimenso, ou seja, o nmero de linha pelo nmero de colunas. Sendo assim, a forma mais usual e fcil para escrita/leitura de valores para/de matrizes pode ser feita atravs do comando para/fi m-para. Voc consegue saber o porqu?

    1. Montar uma matriz nas dimenses 4x5 e imprimir a soma das linhas e colunas.

    Pseudocdigo:

    incio MAT : matriz [4][5] numrico {matriz de dimenso 4x5. 4 linhas e 5 colunas} SOMALINHA, SOMACOLUNA, LINHA, COLUNA : numrico {Aqui um fato importante. Para percorrer um vetor desde o seu incio at o seu nal, utilizamos o comando para/faa/ m-para. Agora temos que percorrer toda a matriz, ou seja, todas as linhas e colunas. O processo bem simples. Para percorrer todas as colunas de uma linha de uma matriz continuamos utilizando o comando para/faa/ m-para. Assim que todas as colunas de uma linha so lidas ou acessadas, passa-se para a prxima linha. Novamente, para essa nova linha, todas as colunas so acessadas, e assim sucessivamente. Podemos perceber que para cada incremento da linha devemos ler ou acessar todas as colunas daquela linha. Isso sugere dois laos de repetio: 1 para pular as linhas e outro para pular as colunas. Dessa forma, elabora-mos 2 laos de repetio, um para linha com a varivel LINHA sendo incrementada de 0 at 3 (4 linhas no total), e um lao para coluna com a varivel COLUNA sendo incrementada de 0 at 4 (5 colunas no total). Para cada repetio do lao dentro da linha executamos 5 repeties para as colunas, percorrendo assim toda a matriz} para LINHA de 0 at 3 passo 1 faa para COLUNA de 0 at 4 passo 1 faa escreva Digite um nmero: leia MAT[LINHA][COLUNA] m-para m-para {Processamento do Algoritmo. Soma das linhas. A explicao desta parte est aps o m-para do primeiro lao de repetio}

    logica_2_livro_caderno.indb 40logica_2_livro_caderno.indb 40 7/12/2006 14:20:557/12/2006 14:20:55

  • 41

    Lgica de Programao II

    Unidade 2

    para LINHA de 0 at 3 passo 1 faa SOMALINHA 0 para COLUNA de 0 at 4 passo 1 faa SOMALINHA SOMALINHA + MAT[LINHA][COLUNA] m-para escreva Total da linha, LINHA,:, SOMALINHA m-para {Explicando a lgica anterior: Nossa matriz possui 4 linhas e 5 colunas. Sendo assim, vamos percorrer as linhas de 0 a 3 e as colunas de 0 a 4 (So os ndices da matriz. Para o primeiro lao de repetio para LINHA de 0 at 3 passo 1 faa, a varivel LINHA incrementada de 0 at 3. Inicialmente ela tem valor numrico 0. O primeiro comando dentro do lao inicializar a varivel SOMALINHA igual a 0. A varivel SOMALINHA armazenar a soma de todas os valores numricos de cada linha. Sabendo que estamos na linha 0, devemos percorrer cada coluna dessa linha. Isso feito pelo lao de repetio seguinte para COLUNA de 0 at 4 passo 1 faa. Quando o programa entra nesse segundo lao, a varivel COLUNA incrementada com passo 1, de 0 at 4, executando os comandos que esto dentro da estrutura para/faa/ m-para, no nosso caso, apenas o comando SOMALINHA SOMA-LINHA + MAT[LINHA][COLUNA]. Quando o segundo lao de repetio nalizado, o programa executa os comandos seguintes ao m-para, ou seja, executa o comando de impresso na tela escreva Total da linha, LINHA,:, SOMALINHA. Ao encontrar o m-para do primeiro lao de repetio, o programa incrementa a varivel LINHA de 1 no comando para LINHA de 0 at 3 passo 1 faa passando o valor da varivel LINHA para o valor 1, e executa todos os comandos dentro da estrutura para/faa/ m-para novamente. Como SOMALINHA armazena o valor numrico da soma dos valores da linha anterior, a varivel reinicial-izada com valor 0. Um timo exerccio montar uma matriz e executar o algoritmo passo a passo. Essa uma atividade para voc fazer logo a seguir.} {Processamento do Algoritmo. Soma das colunas} para COLUNA de 0 at 4 passo 1 faa SOMACOLUNA 0 para LINHA de 0 at 3 passo 1 faa SOMACOLUNA SOMACOLUNA + MAT[LINHA][COLUNA] m-para escreva Total da coluna, COLUNA,:, SOMACOLUNA m-para

    m

    logica_2_livro_caderno.indb 41logica_2_livro_caderno.indb 41 7/12/2006 14:20:557/12/2006 14:20:55

  • 42

    Universidade do Sul de Santa Catarina

    SEO 3 - Algoritmos com manipulao de matrizes

    Voc j deve ter observado que no criamos qualquer lgica para manipular tanto os vetores quanto as matrizes. Usamos os mesmos comandos que aprendemos em Lgica de Programao I, ou seja, comandos como leia, escreva, para/faa/ m-para, entre outros que poderamos estar utilizando tambm. uma oportunidade mpar para voc incrementar os conceitos e revisar toda a lgica de programao. Nesta seo, apresento mais alguns exerccios resolvidos, porm, com uma atividade: que voc construa as matrizes em um caderno e execute o algoritmo passo a passo. Comporte-se como o processador do computador. Tente e experimente. um exerccio e tanto para aprender cada vez mais.

    1. Monte uma matriz para quando o usurio informar um nmero correspondente a um ms, o algoritmo imprima o nome do ms indicado em portugus, a abreviatura e o nome do ms em ingls. Por exemplo, o usurio digita o nmero 4 e o algoritmo ativado para imprimir: 4Abril, Abr, April.

    Pseudocdigo:

    incio

    MESES : matriz [12][3] literal

    LINHA, NUM : numrico

    para LINHA de 1 at 12 passo 1 faa

    escreva Digite o nome do ,LINHA, ms:

    leia MESES[LINHA][1]

    escreva Digite a abreviao do ms de ,MESES[LINHA][1],:

    leia MESES[LINHA][2]

    escreva Digite o nome em ingls do ms ,MESES[LINHA][1],:

    leia MESES[LINHA][3]

    m-para

    leia Digite o nmero do ms a ser consultado: ,NUM

    escreva NUM, , MESES[NUM][1], ,, MESES[NUM][2], , , MESES[NUM][3]

    m

    logica_2_livro_caderno.indb 42logica_2_livro_caderno.indb 42 7/12/2006 14:20:557/12/2006 14:20:55

  • 43

    Lgica de Programao II

    Unidade 2

    2. Uma fl oricultura conhecedora de sua clientela gostaria de fazer um algoritmo que pudesse controlar via Web sempre um estoque mnimo de determinadas plantas, pois todo o dia, pela manh, o dono faz novas aquisies. Criar um algoritmo que deixe cadastrar 50 tipos de plantas e nunca deixa o estoque fi car abaixo do ideal. O algoritmo ser utilizado para construir um programa na pgina da empresa.

    Pseudocdigo:

    incio

    {vamos montar uma matriz de 50 linhas e 3 colunas. As 50 linhas servem para cadastrar todos os produtos e as trs colunas servem para especi car a quantidade de produtos em estoque, a quantidade desejada e o resultado da diferena entre a quantidade em estoque e a quantidade desejada respectivamente.}

    PRODUTOS: matriz [50][3] : numrico

    NOME: vetor [50] literal

    I: numrico

    para I de 0 at 49 passo 1 faa

    escreva Entre com o nome do produto:

    leia NOME [i]

    escreva Entre com a quantidade em estoque:

    leia PRODUTOS[ I ][ 0 ]

    escreva Entre com a quantidade desejada:

    leia PRODUTOS[ I ][ 1 ]

    se PRODUTOS[ I ][ 0 ] < PRODUTOS[ I ][ 1 ] ento

    [PRODUTOS [ I ][ 2 ] PRODUTOS[ I ][ 1 ] - PRODUTOS[ I ][ 0 ]

    seno

    [PRODUTOS [ I ][ 2 ] 0

    m-se

    m-para

    {dados de sada do algoritmo}

    escreva Total de Compras:

    para I de 0 at 49 passo 1 faa

    escreva Produto: , NOME [i], Qtde = , PRODUTOS[ I ] [ 2 ]

    m-para

    m

    logica_2_livro_caderno.indb 43logica_2_livro_caderno.indb 43 7/12/2006 14:20:557/12/2006 14:20:55

  • 44

    Universidade do Sul de Santa Catarina

    Sntese

    Nesta unidade, voc viu que para relacionar duas ou mais variveis precisamos manipular matrizes. Diferentemente de vetores, que so unidimensionais, as matrizes so bidimensionais, possuindo linhas e colunas. Podemos ter matrizes com mais dimenses, mas nesta unidade trabalhamos apenas com 2. Similarmente aos vetores, as matrizes s podem armazenar dados do mesmo tipo, ou seja, quando de nimos uma matriz, especi camos que tipo de varivel a mesma vai armazenar (numrico, literal ou lgico). A sintaxe em pseudocdigo para de nir uma matriz a seguinte:: matriz [nmero de linhas][nmero de colunas]

    Quando criamos uma matriz, o computador reserva um espao na memria para armazenar Linhas x Colunas valores. o que chamamos de dimenso da matriz. Para acessar qualquer elemento da matriz, basta especi car o ndice da linha e coluna, lembrando sempre que os ndices comeam com o valor numrico 0. Por exemplo, uma matriz NOTAS de dimenso 5x 6 comea em [0][0] e termina em [4][5]. Podemos acessar qualquer posio da matriz desde que esteja dentro das dimenses especi cadas: NOTAS[3][2] 8.5. Estamos acessando a quarta linha e a terceira coluna da matriz.Por m, viu que para percorrer uma matriz de ponta a ponta, precisamos de dois laos de repetio, um sendo utilizado para percorrer as colunas de cada linha e o outro para percorrer as linhas da matriz. Na prxima unidade, vamos trabalhar com aspectos mais so sticados da linguagem de programao: as estruturas. Elas so a base para algoritmos avanados e tambm para a linguagem orientada a objetos, linguagem essa que voc, programador web, deve dominar.Bom trabalho e at a prxima etapa desse mundo fabuloso que o estudo da lgica de programao.

    logica_2_livro_caderno.indb 44logica_2_livro_caderno.indb 44 7/12/2006 14:20:557/12/2006 14:20:55

  • 45

    Lgica de Programao II

    Unidade 2

    Atividades de auto-avaliao

    1. A distncia em quilmetros entre algumas capitais mostrada no quadro a seguir. Suponha que voc tenha sido contratado por uma empresa, que vende mapas, para montar um programa (algoritmo) que leia as capitais e suas respectivas distncias e tambm dever imprimir a distncia entre duas capitais solicitadas por um usurio. Esse ser um programa que poder ser acessado via Web.

    Tabela mostrando as distncias entre as capitais:

    1 2 2 27

    1 0 23 45

    2 23 0 10

    27 110 50 66 72 0

    logica_2_livro_caderno.indb 45logica_2_livro_caderno.indb 45 7/12/2006 14:20:567/12/2006 14:20:56

  • 46

    Universidade do Sul de Santa Catarina

    Saiba mais

    Consulte o livro Construindo algoritmos computacionais: lgica de programao de Alfredo Boente.Para quem deseja participar de um outro grupo de discusso, basta acessar o site: http://www.aprendaprogramacao.hpg.ig.com.br/grupo.html.

    logica_2_livro_caderno.indb 46logica_2_livro_caderno.indb 46 7/12/2006 14:20:567/12/2006 14:20:56

  • Objetivos de aprendizagem

    Entender o conceito de registro ou estrutura.

    Conhecer e praticar montagens de registros.

    Criar novos tipos de variveis.

    Sees de estudo

    Seo 1 Conceito e declarao de registros.

    Seo 2 Operao com registros.

    Seo 3 Algoritmos com manipulao de registros.

    UNIDADE 3

    Manipulao de registros 3

    logica_2_livro_caderno.indb 47logica_2_livro_caderno.indb 47 7/12/2006 14:20:567/12/2006 14:20:56

  • 48

    Universidade do Sul de Santa Catarina

    Para incio de conversa

    Quantas vezes voc j preencheu chas de cadastros, seja em hotis, em videolocadoras, para propostas de consrcios ou ainda chas de matrcula escolar? Nessas chas, certamente voc precisou entrar com dados como: seu nome, sua idade, seu telefone de contato, endereo etc.Nesses casos, estamos trabalhando com dados de diferentes tipos.

    Por exemplo: nome uma varivel literal, idade uma varivel numrica, informao se possui ou no veculo pode ser um valor lgico.

    Percebeu que estamos entrando em um mundo onde as coisas no so to homogneas assim, ou seja, nem tudo que estamos trabalhando so apenas variveis numricas ou literais ou ainda lgicos? H uma mistura de tipos de dados que devemos trabalhar. Mas, o que tem haver isso com lgica de programao? No poderamos criar variveis independentes, ou seja, cada informao armazenada em um local diferente como temos feito at agora? Poderamos criar, por exemplo, as variveis em pseudocdigo representando nossa cha cadastral. Acompanhe a seguir.

    incio

    {Declarao de variveis}

    NOME, ESTADOCIVIL, ENDERECO, BAIRRO: literal

    IDADE, DATANASC, NUMERO, CEP, FONE: numrico

    .....

    m

    logica_2_livro_caderno.indb 48logica_2_livro_caderno.indb 48 7/12/2006 14:20:567/12/2006 14:20:56

  • 49

    Lgica de Programao II

    Unidade 3

    Se fssemos preencher apenas uma cha cadastral, isso resolveria nossos problemas. Mas vamos supor que queremos cadastrar 50 hspedes de um hotel. Certamente, tendo visto e estudado as unidades sobre vetores e matrizes, voc responderia que a soluo continua simples. Basta fazer, de todas as variveis criadas anteriormente, vetores de dimenso 50.

    NOME: vetor [50] literal; IDADE: vetor[50] numrico, e assim por diante. Isso tambm resolveria nossos problemas. Se voc pensou assim, pensou certo. Parabns, por que mostra que voc conseguiu entender os conceitos das unidades anteriores.

    Mas o que h de novo, ento?

    Quando criamos variveis independentes, o computador ir coloc-las em qualquer endereo de memria reservado para essas ocasies. Ele no vai se preocupar em colocar em uma certa ordem que muitas vezes so necessrias por quesitos de velocidade de execuo do programa. Imagine sua cha cadastral onde o nome est em uma folha, o endereo est duas folhas a seguir, depois volta uma folha para preencher a idade e assim sucessivamente. Parece desorganizado voc no acha? Alm do tempo de preenchimento que ser bem maior. Ou seja, se estamos criando variveis para representar nossas chas cadastrais, seria interessante que todas elas fossem declaradas prximas uma das outras. Isso faria com que o desempenho do programa fosse melhor. Pode parecer estranho, mas para um programa com muitas informaes e dados para manipular, isso pode fazer a diferena entre um programa bom e um ruim. Pois bem, no mundo da lgica de programao, podemos criar estruturas de dados heterogneas, ou seja, capaz de armazenar variveis de tipos diferentes, de forma que as mesmas estejam declaradas prximas umas das outras no que diz respeito posio de memria do computador. So os chamados registros. Com esse tipo de estrutura, podemos declarar mltiplas variveis de diferentes tipos, todas organizadas umas prximas das outras, de forma similar a uma cha cadastral. Na seo seguinte, vamos de nir essa estrutura e vamos aprender a como declar-las.

    logica_2_livro_caderno.indb 49logica_2_livro_caderno.indb 49 7/12/2006 14:20:567/12/2006 14:20:56

  • 50

    Universidade do Sul de Santa Catarina

    Quando trabalhamos com vetores e matrizes nas unidades anteriores, os dados armazenados nessas estruturas devem ser homogneos, ou seja, tudo do mesmo tipo. No podemos utilizar nem vetores e nem matrizes para armazenar dados de tipos diferentes.

    Mas, se quisermos trabalhar com dados do tipo literal e numrico juntamente, isso possvel?

    Posso dizer que sim. Nesta unidade voc vai aprender como trabalhar com dados de tipos diferentes, ou seja, vai conhecer as estruturas ou registros de dados.

    SEO 1 - Conceito e declarao de registros

    Mas, se quisermos trabalhar com dados do tipo literal e numrico juntamente, isso possvel?

    Em lgica de programao um registro um recurso que permite a criao de diferentes tipos de variveis em um mesmo bloco de memria do computador. Quando criamos um registro, criamos um espao na memria do computador que permite armazenar dados heterogneos, ou seja, constantes de vrios tipos. como se fosse uma cha de dados, organizada de forma que os dados esto prximos um dos outros dentro da memria do computador. Uma das grandes vantagens disso, alm da organizao, a velocidade de acesso s informaes ali contidas.

    Para lembrar!

    Diferentemente de vetores e matrizes que s podem armazenar dados do mesmo tipo, os registros so estrutura ou recursos que permitem armazenar constantes de diferentes tipos.

    logica_2_livro_caderno.indb 50logica_2_livro_caderno.indb 50 7/12/2006 14:20:567/12/2006 14:20:56

  • 51

    Lgica de Programao II

    Unidade 3

    Sintaxe do registro: registro m-registro

    onde so todas as variveis que iro compor uma cha de dados, ou seja, NOME, IDADE, CPF, ENDERECO etc.

    Vamos imaginar uma fi cha cadastral que chamaremos de FICHA com as seguintes informaes a serem preenchidas por um cliente de um hotel:

    Nome, estado civil, endereo, bairro, cidade, estado, e-mail, idade, telefone, nmero.

    Utilizando a sintaxe de criao de registro, temos:

    FICHA: registro

    NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO, EMAIL: literal

    IDADE, TELEFONE, NUMERO: numrico

    m-registro

    Bem, voc j deve estar perguntando. O que mudou alm da palavra reservada registro e fim-registro?

    Pois bem, conforme dito anteriormente, quando declaramos a FICHA anterior como sendo registro uma parte da memria do computador reservada e nela so inseridas as variveis declaradas entre os comandos registro e m-registro. Portanto, elas ocupam o mesmo bloco de memria, tornando o desempenho do programa mais rpido. Agora, por exemplo, NOME e IDADE esto num mesmo bloco de memria. Seria anlogo a ter nome e idade em uma mesma cha cadastral.Outra diferena importante a questo de como acessamos as variveis declaradas dentro de uma estrutura.

    logica_2_livro_caderno.indb 51logica_2_livro_caderno.indb 51 7/12/2006 14:20:567/12/2006 14:20:56

  • 52

    Universidade do Sul de Santa Catarina

    Como podemos ler e escrever nessas variveis?

    A resposta bastante simples. Basta especi carmos o nome do registro criado, seguido de um ponto (.) e o nome da varivel. Por exemplo, para acessar a varivel NOME, precisamos especi car o nome do registro do qual ela pertence. Sendo assim, FICHA.NOME. Observe que a varivel NOME no uma varivel independente qualquer. Ela pertence ao registro FICHA. Por isso, precisamos preceder o nome da varivel NOME com o nome do registro FICHA seguido de um ponto (.).Assim como na criao de vetores e matrizes, para a criao de registros no precisamos especi car os endereos de memria do computador. Isso feito automaticamente, sem que sequer saibamos onde os valores esto armazenados na memria. A nica coisa que sabemos que alocado um espao para armazenar esses valores e que so armazenados em blocos de memria.- Na prxima seo voc vai saber como montar algoritmos com registros.

    SEO 2 - Operao com registros

    Novamente, voc j deve ter percebido que no criamos qualquer outra lgica de controle alm das j estudadas. mais uma oportunidade de mostrar a voc a importncia dos comandos bsicos de lgica de programao. Nesta seo, vamos mostrar uma aplicao tpica de registros: o conceito de chas cadastrais. A gura a seguir mostra uma possvel cha cadastral:

    Nome: Idade:

    Estado Civil:

    Endereo:

    Nmero:

    Bairro: Cidade:

    Estado: Telefone:

    logica_2_livro_caderno.indb 52logica_2_livro_caderno.indb 52 7/12/2006 14:20:577/12/2006 14:20:57

  • 53

    Lgica de Programao II

    Unidade 3

    Observando a gura anterior, podemos veri car que temos variveis literais e numricas. Vamos classi c-las inicialmente: Nome, Estado Civil, Endereo, Bairro, Cidade e Estado so variveis literais. Idade, Nmero e Telefone de Contato so variveis numricas. Observe que poderamos colocar Telefone de Contato como literal tambm.

    Se quisssemos representar um nmero telefnico por 278-8080, isso um literal e no um valor numrico. Mas para nosso exemplo, vamos considerar o Telefone de Contato como sendo numrico. Para o telefone especifi cado devemos colocar ento como sendo 2788080.

    Criaremos um registro para a cha cadastral. Iremos chamar esse registro de FICHA. Sendo assim, em pseudocdigo, temos:

    FICHA: registro

    {variveis da cha}

    m-registro

    Agora vamos de nir as variveis. Iremos especi car seis variveis literais e trs variveis numricas. Colocaremos os nomes das variveis de forma a no deixar qualquer tipo de dvida em relao s constantes que sero armazenadas. Dessa forma, nosso registro ser conforme a seguir:

    FICHA: registro

    {variveis da cha}

    NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal

    IDADE, NUMERO, TELEFONE: numrico

    m-registro

    Isso tudo. Nossa cha j est montada. Basta utiliz-la agora acessando as variveis do registro. O algoritmo a seguir, mostra um exemplo completo.

    logica_2_livro_caderno.indb 53logica_2_livro_caderno.indb 53 7/12/2006 14:20:577/12/2006 14:20:57

  • 54

    Universidade do Sul de Santa Catarina

    Pseudocdigo:

    incio

    {declarao do registro FICHA}

    FICHA: registro

    {variveis da cha}

    NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal

    IDADE, NUMERO, TELEFONE: numrico

    m-registro

    {entrada de dados}

    escreva Nome:

    leia FICHA.NOME

    escreva Estado Civil:

    leia FICHA.ESTADOCIVIL

    escreva Idade:

    leia FICHA.IDADE

    escreva Endereo:

    leia FICHA.ENDERECO

    escreva Bairro:

    leia FICHA.BAIRRO

    escreva Nmero:

    leia FICHA.NUMERO

    escreva Cidade:

    leia FICHA.CIDADE

    escreva Estado:

    leia FICHA.ESTADO

    escreva Telefone de Contato:

    leia FICHA.TELEFONE

    m

    No algoritmo anterior no mostramos nenhuma sada. O exemplo foi apenas para mostrar como trabalhar com criar um registro e como acessar suas variveis.

    logica_2_livro_caderno.indb 54logica_2_livro_caderno.indb 54 7/12/2006 14:20:577/12/2006 14:20:57

  • 55

    Lgica de Programao II

    Unidade 3

    Criando novos tipos de variveis

    Muitas vezes, os tipos bsicos de variveis que utilizamos at agora (numrico, literal e lgico) no so su cientes para resolver um algoritmo. Seria interessante que pudssemos criar tipos de nidos pelo usurio. Por exemplo, um tipo de varivel que armazenasse, ao mesmo tempo, um valor literal, um valor numrico e um valor lgico. Vou lhe dar a boa notcia. Isso possvel sim, graas estrutura de registros que acabamos de estudar. Podemos fazer de um registro criado um tipo de varivel.

    Por exemplo, alm de termos os tipos bsicos como o numrico, o literal e o lgico, poderamos ter tambm o tipo FICHA. FICHA na verdade, um registro criado pelo programador. Chamamos isso de tipo defi nido pelo usurio.

    Isso fantstico, pode acreditar. Alm de podermos criar variveis, podemos criar agora, tambm tipos de variveis.

    Mas como posso fazer isso e para que serve?

    Bem, para criar um tipo registro, em pseudocdigo, necessrio apenas colocar a palavra reservada tipo antes do nome do registro, cando assim sua sintaxe:

    tipo = registro

    m-registro

    O comando tipo serve para criar novos tipos de variveis a partir dos tipos bsicos.

    logica_2_livro_caderno.indb 55logica_2_livro_caderno.indb 55 7/12/2006 14:20:577/12/2006 14:20:57

  • 56

    Universidade do Sul de Santa Catarina

    Por exemplo, no exerccio de para manipular uma fi cha cadastral colocado anteriormente, poderamos fazer do registro FICHA um tipo e declarar variveis daquele tipo. A sintaxe fi caria conforme a seguir:

    tipo FICHA = registro

    {variveis da cha}

    NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal

    IDADE, NUMERO, TELEFONE: numrico

    m-registro

    Para criar uma varivel do tipo FICHA, criamos da mesma forma que criamos as variveis dos tipos primitivos. Por exemplo, cha1: FICHA, onde cha1 agora uma varivel do tipo FICHA. Passamos a acessar as variveis do registro FICHA a partir da varivel cha1.

    Exemplo: fi cha1.NOME, fi cha1.ENDERECO e assim por diante.

    O que quero dizer que FICHA um tipo de nido pelo programador e que cha1 uma varivel do tipo FICHA que ocupa um espao na memria para armazenar seis variveis literais e trs variveis numricas, conforme nosso exemplo. Assim, veja parte do algoritmo anterior atualizado:

    logica_2_livro_caderno.indb 56logica_2_livro_caderno.indb 56 7/12/2006 14:20:577/12/2006 14:20:57

  • 57

    Lgica de Programao II

    Unidade 3

    incio

    {declarao do registro FICHA}

    tipo FICHA = registro

    {variveis da cha}

    NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal

    IDADE, NUMERO, TELEFONE: numrico

    m-registro

    cha1 : FICHA {declarao da varivel do tipo FICHA. Observe que o tipo FICHA de nido antes de ser utilizado. Isso obrigatrio, tendo em vista que o programa precisa saber o que FICHA. Como de nimos FICHA como sendo um registro, ao especi car cha1 como sendo do tipo FICHA, nenhum problema ser encontrado}

    escreva Nome:

    leia cha1.NOME

    escreva Estado Civil:

    leia cha1.ESTADOCIVIL

    ........ {restante do algoritmo}

    m

    Mas qual a utilidade de se criar tipos como no nosso exemplo?

    muito simples. Perceba que criamos apenas uma cha cadastral de um hspede. Se quisssemos preencher o cadastro para um novo hspede, bastaria criarmos outra varivel, cha2 por exemplo. Poderamos criar tantas chas quanto quisermos. Considerando o tipo FICHA anteriormente criado, podemos criar vrias variveis:

    cha1, cha2, cha3: FICHA.

    Cada varivel representa uma cha para cadastrar um hspede. como se tivssemos 3 chas cadastrais para serem preenchidas na mo. Para acessar o nome de cha1, apenas colocaramos cha1.NOME. Para acessar o nome de cha2, cha2.NOME, e para cha3, cha3.NOME. Como cada varivel, nesse caso, cha1, cha2 e cha3 so trs blocos de memrias independentes,

    logica_2_livro_caderno.indb 57logica_2_livro_caderno.indb 57 7/12/2006 14:20:577/12/2006 14:20:57

  • 58

    Universidade do Sul de Santa Catarina

    como se tivssemos trs variveis independentes em locais de memria diferentes, porm, cada uma delas contendo seis variveis literais e trs numricas, conforme voc j leu.

    Criando um conjunto de registros

    Precisamos incrementar nosso algoritmo anterior. Ele permite o cadastramento de 5 hspedes apenas. Nosso hotel tem 100 quartos. Podemos admitir at 100 hspedes, certo? Devemos criar 100 chas cadastrais. E agora? Voc ter problemas se tiver que criar 100 variveis do tipo FICHA.

    Lembra para que servem os vetores? Ser que voc deduziu que podemos utilizar vetores para esse caso?

    Vamos por analogia: se estamos precisando armazenar 100 valores numricos, criamos um vetor do tipo numrico; se precisamos armazenar 100 nomes de clientes, criamos um vetor do tipo literal. Raciocinando da mesma maneira, se precisarmos armazenar 100 chas de clientes, criamos um vetor de FICHA (tipo de nido por ns). Na sintaxe de pseudocdigo teramos: chas: vetor [100] FICHA. Agora, de nimos um vetor de 100 posies chamado de chas, onde cada posio (quadrado) tem uma varivel do tipo FICHA. Veja a seguir:

    Ficha 1 Ficha 2 Ficha 3 ... Ficha 99

    Ficha1 est na posio 0 do vetor chas, Ficha2 est na posio 1 do vetor chas, e assim sucessivamente.

    Mas o que uma FICHA mesmo? FICHA um registro que tem os seguintes campos defi nidos anteriormente:

    NOME, ESTADOCIVIL, ENDERECO, BAIRRO, CIDADE, ESTADO: literal

    IDADE, NUMERO, TELEFONE: numrico.

    logica_2_livro_caderno.indb 58logica_2_livro_caderno.indb 58 7/12/2006 14:20:577/12/2006 14:20:57

  • 59

    Lgica de Programao II

    Unidade 3

    Como podemos acessar os dados de cada cha dentro do vetor? Bem, de forma similar ao acesso dos dados em vetores, precisamos saber qual a posio que queremos acessar do vetor. Depois de sabermos qual o ndice do vetor, devemos lembrar que dentro de cada posio do vetor temos um registro com aqueles campos ou variveis de nidas. Veja a gura a seguir.

    [0] [1] [2] ... ... Ficha 99

    Para acessar um desses campos basta colocar um ponto (.) seguido do nome da varivel de nida dentro do registro.

    Por exemplo, para acessar o nome do primeiro hspede (defi nido na posio 0 do vetor fi chas), colocamos fi chas [0].NOME; para acessar a idade dessa mesma fi cha, colocarmos fi chas [0].IDADE e assim por diante.

    Vamos supor que estamos cadastrando o cliente 60 do nosso hotel. Como poderamos fazer? Bem, devemos lembrar que, como um vetor sempre comea na posio 0 (zero), assim o cliente 60 est de nido da posio 59 do nosso vetor, certo? Desta forma, podemos preencher os dados conforme a seguir:

    chas[59].NOME Luiz Silva

    chas[59].ESTADOCIVIL solteiro

    chas[59].ENDERECO Avenida Paulista

    chas[59].IDADE 30

    {e assim para os demais dados deste hspede}.

    nome estadocivil endereco bairro cidade estado idade, numero telefone

    nome estadocivil endereco bairro cidade estado idade, numero telefone

    logica_2_livro_caderno.indb 59logica_2_livro_caderno.indb 59 7/12/2006 14:20:587/12/2006 14:20:58

  • 60

    Universidade do Sul de Santa Catarina

    - Olha a a importncia dos vetores novamente. Na seo seguinte voc ver exemplos com cdigo pronto para voc estudar e tirar dvidas. Tente implementar cada exerccio sozinho, depois compare com a soluo proposta. Faa tantas vezes voc quiser. Quanto mais exerccios voc zer, melhor voc ser.

    SEO 3 - Algoritmos com manipulao de registros

    Veja agora alguns exerccios resolvidos com manipulao de registros.

    1. Cadastrar os dados gerais de 300 disciplinas que os professores lecionam: nome, contedo, freqncia e nota mnimas para aprovao. Ler cinco nomes de disciplinas e mostrar freqncia e mdia mnimas para aprovao em cada uma.

    Pseudocdigo:

    incio tipo FICHA = registro {criando um tipo FICHA} NOME, CONTEUDO : literal FREQUENCIA, MEDIA : numrico m-registro

    DISCIPLINAS : vetor [300] FICHA {criando um vetor para cadastrar 300 disciplinas, onde cada disciplina constituda por um nome (NOME), contedo (CONTEUDO), freqncia (FREQUENCIA) e mdia (MEDIA)} NOMECONSUL : literal {Nome da disciplina a ser consultada} CONT, POS : numrico {Variveis para controle de lao de repetio} {Entrada de dados para 300 disciplinas} para POS de 0 at 299 passo 1 faa escreva Digite o nome da disciplina: leia DISCIPLINAS[POS].NOME escreva Digite o contedo da disciplina: leia DISCIPLINAS[POS].CONTEUDO escreva Digite a freqncia mnima necessria para aprovao: leia DISCIPLINAS[POS].FREQUENCIA

    logica_2_livro_caderno.indb 60logica_2_livro_caderno.indb 60 7/12/2006 14:20:587/12/2006 14:20:58

  • 61

    Lgica de Programao II

    Unidade 3

    escreva Digite a mdia mnima necessria para aprovao: leia DISCIPLINAS[POS].MEDIA m-para{veri cao de 5 disciplinas, conforme o enunciado} para CONT de 1 at 5 passo 1 faa escreva Digite o nome da disciplina a ser consultada: leia NOMECONSUL {nome da disciplina a ser consultada} POS 0 {inicializa a varivel POS pois o vetor comea em 0} enquanto NOMECONSUL < > DISCIPLINAS[POS].NOME ou POS < 300 {percorre todo o vetor DISCIPLINAS at que a varivel NOME-CONSUL seja igual a DISCIPLINAS [POS].NOME e POS < 300. Utilize aqui, como exerccio, uma tabela-verdade para saber quando a condio resultante se torna falsa. uma excelente reviso da operao lgica ou.} POS POS + 1 {enquanto no encontrar a disciplinas digitadas, soma POS de 1, o que signi ca pular para a prxima posio do vetor} m-enquanto se NOMECONSUL = DISCIPLINAS[POS].NOME ento escreva Disciplina:, DISCIPLINAS[POS].NOME escreva Mdia Mnima:, DISCIPLINAS[POS].MEDIA escreva Freq. Mnima:, DISCIPLINAS[POS].FREQUENCIA seno escreva Disciplina no consta no cadastro ! m-se m-para

    m

    2. Elaborar um algoritmo para cadastrar 5000 CDs de uma loja. Os dados a serem cadastrados so: cdigo, nome do CD, nome do cantor/grupo, tipo de msica, produtora e ano de produo. Exibir os cdigos e nomes dos CDs solicitados por um usurio por meio do nome de um cantor ou grupo musical.

    Pseudocdigo:

    incio

    {declarao do tipo FICHA} tipo FICHA = registro NOME, CANTOR, TIPO, PRODUTORA : literal CODIGO, ANOPRODUCAO : numrico m-registro {declarao do vetor CDS. Cada posio do vetor contm um registro do tipo FICHA} CDS : vetor [5000] FICHA CANTORCONSUL : literal {Cantor a ser consultado} POS : numrico {varivel para percorrer o vetor CDS}

    logica_2_livro_caderno.indb 61logica_2_livro_caderno.indb 61 7/12/2006 14:20:587/12/2006 14:20:58

  • 62

    Universidade do Sul de Santa Catarina

    {Dados de entrada para o programa de cadastramento de CDS} para POS de 0 at 4999 passo 1 faa escreva Digite o cdigo do CD: leia CDS[POS].CODIGO escreva Digite o nome do CD: leia CDS[POS].NOME escreva Digite o nome do cantor ou do grupo: leia CDS[POS].CANTOR escreva Digite o tipo de msica: leia CDS[POS].TIPO escreva Digite o nome da produtora: leia CDS[POS].PRODUTORA escreva Digite o ano de produo (somente os nmeros) do CD: leia CDS[POS].ANOPRODUCAO m-para{processamento do algoritmo} escreva Digite o nome do cantor ou grupo a ser consultado (ou FIM para encerrar): leia CANTORCONSUL enquanto CANTORCONSUL < > FIM faa POS 0 enquanto CANTORCONSUL < > CDS[POS].CANTOR ou POS < 5000 {percorre cada posio do vetor para veri car a existncia do cantor} POS POS + 1 m-enquanto se CANTORCONSUL = CDS[POS].CANTOR ento escreva Cdigo:, CDS[POS].CODIGO escreva Nome do CD:, CDS[POS].NOME seno escreva Cantor ou grupo musical no possui nenhum CD cadastrado ! m-se {Observe aqui que estamos solicitando que o usurio entre com o nome do cantor ou a palavra FIM novamente. Perceba que a primeira vez ocor-reu fora do lao de repetio. Dessa vez, o comando de leitura realizado para permitir com que o usurio nalize o programa digitando FIM. Caso no colocssemos essa opo, teramos um lao in nito. Lembra que todo algoritmo tem que possuir um m?} escreva Digite o nome do cantor ou grupo a ser consultado (ou FIM para encerrar): leia CANTORCONSUL m-enquanto

    m

    logica_2_livro_caderno.indb 62logica_2_livro_caderno.indb 62 7/12/2006 14:20:587/12/2006 14:20:58

  • 63

    Lgica de Programao II

    Unidade 3

    Sntese

    Voc acaba de nalizar mais uma etapa na busca pela excelncia. Viu que para implementar variveis de diferentes tipos utilizamos um registro, que nada mais do que um recurso que permite a criao de diferentes tipos de variveis em um mesmo bloco de memria do computador, facilitando, sobretudo, o desempenho do programa. Quando criamos um registro, criamos um espao na memria do computador que permite armazenar dados heterogneos, ou seja, constantes de vrios tipos. como se fosse uma cha de dados, organizada de forma que os dados esto prximos um dos outros dentro da memria do computador. A sintaxe em pseudocdigo para criar um registro a seguinte:

    : registro m-registro

    Viu tambm que a lgica de programao permite ao usurio criar seus prprios tipos. Isso facilita bastante porque nem tudo que estamos trabalhando so apenas nmeros, literais ou lgicos. H uma combinao desses tipos bsicos. A sintaxe para implementar um tipo registro a seguinte:

    tipo : registro m-registro

    Por m, aprendeu que podemos construir uma poderosa estrutura de dados misturando vetores com registros. Podemos construir vetores de registros, onde cada posio do vetor um registro de dados. O acesso a cada elemento dentro do vetor a seguinte:

    [ndice do vetor].

  • 64

    Universidade do Sul de Santa Catarina

    Atividades de auto-avaliao

    1. Voc responsvel pelo cadastramento de um hspede em um hotel de luxo em sua cidade. Crie um registro de dados que implementa essa fi cha cadastral. Escolha as variveis de maior importncia para o cadastro do hspede.

    logica_2_livro_caderno.indb 64logica_2_livro_caderno.indb 64 7/12/2006 14:20:597/12/2006 14:20:59

  • 65

    Lgica de Programao II

    Unidade 3

    2. Monte um algoritmo para cadastrar e imprimir os dados pessoais de vrios professores de um sistema de administrao escolar. Os dados pessoais so: nome, endereo, cidade, estado, CEP, telefone, CPF, RG, data de nascimento, grau de escolaridade, curso em que se formou.

    logica_2_livro_caderno.indb 65logica_2_livro_caderno.indb 65 7/12/2006 14:20:597/12/2006 14:20:59

  • 66

    Universidade do Sul de Santa Catarina

    3. Cadastre imprima os dados das fi tas de vdeo de uma locadora: cdigo do fi lme, nome, tipo de fi lme, durao, produtor, ator principal, diretor a ano de produo.

    logica_2_livro_caderno.indb 66logica_2_livro_caderno.indb 66 7/12/2006 14:20:597/12/2006 14:20:59

  • 67

    Lgica de Programao II

    Unidade 3

    4. Cadastre os dados dos 200 funcionrios de uma empresa: cdigo do funcionrio, nome, endereo, data de nascimento, cidade, UF, CEP, telefone, CPF, RG, grau de escolaridade, nmero de dependentes e nome do cnjuge. Exibir nomes, endereos e telefones de 20 funcionrios solicitados por um usurio por meio dos cdigos de funcionrios.

    logica_2_livro_caderno.indb 67logica_2_livro_caderno.indb 67 7/12/2006 14:20:597/12/2006 14:20:59

  • 68

    Universidade do Sul de Santa Catarina

    5. Ao criar um sistema de cadastro de clientes de uma lgica de informtica, onde so necessrios os seguintes dados: nome do cliente, CPF e telefone de contato, poderamos implementar o algoritmo para cadastrar 50 clientes de duas maneiras:

    Primeira maneira:

    incio

    NOME: vetor[50] literal

    CPF: vetor[50] literal

    FONE: vetor[50] numrico

    ..... {implementao do algoritmo}

    m

    Segunda maneira:

    incio

    tipo FICHA = registro

    NOME: literal

    CPF: literal

    FONE: numrico

    m-registro

    chas: vetor[50] FICHA {declarao de um vetor de FICHAS}

    ..... {implementao do algoritmo}

    m

    Explique com suas prprias palavras as diferenas entre as duas formas de implementaes citadas e as vantagens em se optar pela segunda maneira.

    logica_2_livro_caderno.indb 68logica_2_livro_caderno.indb 68 7/12/2006 14:20:597/12/2006 14:20:59

  • 69

    Lgica de Programao II