Vous êtes sur la page 1sur 40

Lógica de programação

Versão 1.0.0
Sumário

I Sobre essa Apostila 2

II Informações Básicas 4

III GNU Free Documentation License 9

IV Lógica de programação 18

1 O que é Lógica de programação 19

2 Plano de ensino 20
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 Lição 1 - Introdução à lógica de programação 23


3.1 Conceituação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.4 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4 Licão 2 - Estruturas de repetição e vetores 27


4.1 Decisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2 Repetição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

5 Lição 3 - Matrizes e registros 30


5.1 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2 Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

6 Lição 4 - Arquivos 33
6.1 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

7 Lição 5 - Modularização 36
7.1 Modularização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2
Parte I

Sobre essa Apostila

3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.)

O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).

A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora.

Autores
A autoria deste é de responsabilidade de Guilherme de Moraes Ávila (guilherme@cdtc.org.br)
.

O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento que
vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com
outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e
utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades
no país.

Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da


home page da entidade, através da URL http://www.cdtc.org.br.

Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.

Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.

4
Parte II

Informações Básicas

5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Sobre o CDTC

Objetivo Geral

O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-


ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.

Objetivo Específico

Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e


de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.

Guia do aluno

Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:

• Licenças para cópia de material disponível;

• Os 10 mandamentos do aluno de Educação a Distância;

• Como participar dos foruns e da wikipédia;

• Primeiros passos.

É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.

Licença

Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br).

6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".

Os 10 mandamentos do aluno de educação online

• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é


pré-requisito para a participação nos cursos a distância;

• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-


tica é necessário para poder executar as tarefas;

• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-


cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores;

• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus


colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;

• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais;

• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real;

• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;

• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens


e descobertas;

• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é


ponto - chave na comunicação pela Internet;

• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.

Como participar dos fóruns e Wikipédia

Você tem um problema e precisa de ajuda?

Podemos te ajudar de 2 formas:

A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:

. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a

7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.

. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.

A segunda forma se dá pelas Wikis:

. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:

• Página principal da Wiki - http://pt.wikipedia.org/wiki/

Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!

Primeiros Passos

Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:

• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;

• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;

• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;

• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.

Perfil do Tutor

Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.

O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos


valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.

8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:

• fornece explicações claras acerca do que ele espera e do estilo de classificação que irá
utilizar;

• gosta que lhe façam perguntas adicionais;

• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;

• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)

• dá uma ajuda complementar para encorajar um estudante em dificuldade;

• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;

• ajuda o estudante a alcançar os seus objetivos;

• é flexível quando necessário;

• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,


talvez numa fase menos interessante para o tutor);

• escreve todas as correções de forma legível e com um nível de pormenorização adequado;

• acima de tudo, devolve os trabalhos rapidamente;

9
Parte III

GNU Free Documentation License

10
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)


Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-
leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição
de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,
nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.

This is an unofficial translation of the GNU General Documentation License into Brazilian Por-
tuguese. It was not published by the Free Software Foundation, and does not legally state the
distribution terms for software that uses the GFDL–only the original English text of the GFDL does
that. However, we hope that this translation will help Portuguese speakers understand the GFDL
better.

Licença de Documentação Livre GNU Versão 1.1, Março de 2000

Copyright (C) 2000 Free Software Foundation, Inc.


59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas
não é permitido alterá-lo.

INTRODUÇÃO
O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no
sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,
com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém
para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável
pelas modificações feitas por terceiros.

Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do


documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-
ral (GNU GPL), que é um copyleft para software livre.

Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software
livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que
provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a
manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente
do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-
cipalmente para trabalhos cujo propósito seja de introdução ou referência.

APLICABILIDADE E DEFINIÇÕES
Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo
detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.
O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um

11
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

licenciado e é referida como "você".

Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento


ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra
língua.

Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-
clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do
Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente
nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a
Seção Secundária pode não explicar nada de matemática).

Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-
onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.

As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como
sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.

Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa
Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.

Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-
mente, representada num formato cuja especificação esteja disponível ao público geral, cujos
conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores
de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou
(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de
servir como entrada a formatadores de texto ou para tradução automática para uma variedade
de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato
de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-
sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é
"Transparente"é chamada de "Opaca".

Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-
ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML
usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e
projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos
proprietários que podem ser lidos e editados apenas com processadores de texto proprietários,
SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam
disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com
finalidade apenas de saída.

A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,


mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,
o material que esta Licença requer que apareça na página do título. Para trabalhos que não
tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-
minente do título do trabalho, precedendo o início do corpo do texto.

12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

FAZENDO CÓPIAS EXATAS


Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não
comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta
Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-
cente nenhuma outra condição, quaisquer que sejam, às desta Licença.

Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de
cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-
pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,
você também precisa respeitar as condições da seção 3.

Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também
pode exibir cópias publicamente.

FAZENDO CÓPIAS EM QUANTIDADE


Se você publicar cópias do Documento em número maior que 100, e a nota de licença do
Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara
e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e
Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e
legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-
pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar
outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas
preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia
exata em outros aspectos.

Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma
legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa
verdadeira, e continuar os outros nas páginas adjacentes.

Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você
precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia
Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente
completa do Documento acessível publicamente em uma rede de computadores, à qual o público
usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de
protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-
mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar
que esta cópia Transparente vai permanecer acessível desta forma na localização especificada
por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-
mente ou através de seus agentes ou distribuidores) daquela edição para o público.

É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de
redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você
com uma versão atualizada do Documento.

13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

MODIFICAÇÕES
Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-
ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,
com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição
e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além
disso, você precisa fazer o seguinte na versão modificada:

A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-
cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados
na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se
o editor original daquela versão lhe der permissão;

B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-
veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco
dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que
cinco);

C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;

D. Preservar todas as notas de copyright do Documento;

E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às
outras notas de copyright;

F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público
o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico
abaixo;

G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de
Capa requeridos dados na nota de licença do Documento;

H. Incluir uma cópia inalterada desta Licença;

I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo
pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de
Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o
título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar
um item descrevendo a Versão Modificada, tal como descrito na sentença anterior;

J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma
cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-
mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção
"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado
pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira
der sua permissão;

K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da

14
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-
buidores e/ou dedicatórias dados;

L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em


seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;

M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão
Modificada;

N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro
título dado a uma Seção Invariante.

Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como
Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar
por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus
títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-
sam ser diferentes de qualquer outro título de seção.

Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-
quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por
exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a
definição oficial de um padrão.

Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente
, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos
de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de
Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.
Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por
você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode
adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que
adicionou a passagem antiga.

O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus
nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer
Versão Modificada.

COMBINANDO DOCUMENTOS
Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob
os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-
binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste
todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.

O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes
Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver
múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de

15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor
origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste
nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.

Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-


sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine
quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as
seções entituladas como "Endosso".

COLETÂNEAS DE DOCUMENTOS
Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados
sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com
uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia
exata de cada um dos Documentos em todos os outros aspectos.

Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob
esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta
Licença em todos os outros aspectos relacionados à cópia exata daquele documento.

AGREGAÇÃO COM TRABALHOS INDEPENDENTES


Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-
parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-
são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela
compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros
trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim
compilados, e eles não são trabalhos derivados do Documento.

Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,
então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa
do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.
Senão eles precisarão aparecer nas capas de todo o agregado.

TRADUÇÃO
Tradução é considerada como um tipo de modificação, então você pode distribuir traduções
do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções
requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir
traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas
Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-
clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a

16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.

TÉRMINO
Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-
samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-
ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos
sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta
Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total
acordo com esta Licença.

REVISÕES FUTURAS DESTA LICENÇA


A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-
tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão
presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja
http://www.gnu.org/copyleft/.

A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar


que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você
tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão
posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o
Documento não especificar um número de Versão desta Licença, você pode escolher qualquer
versão já publicada (não como rascunho) pela Free Software Foundation.

ADENDO: Como usar esta Licença para seus documentos

Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença
no documento e ponha as seguintes notas de copyright e licenças logo após a página de título:

Copyright (c) ANO SEU NOME.


É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença
de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-
ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da
Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-
cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".

Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de
dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de
Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os
Textos da Quarta Capa.

Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-
mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,

17
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

tal como a GNU General Public License, para permitir o seu uso em software livre.

18
Parte IV

Lógica de programação

19
Capítulo 1

O que é Lógica de programação

Lógica de programação é a lógica aplicada a processos computacionais, ela nos permite que
sejam definidas seqüências lógicas para desenvolver sistemas e programas. Estas seqüências
lógicas são passos que seguimos para atingirmos um objetivo ou solucionarmos um problema.

20
Capítulo 2

Plano de ensino

2.1 Objetivo
Ensinar o básico sobre programação e qualificar os alunos a construir um algoritmo em por-
tuguês estruturado.

2.2 Público Alvo


Técnicos e leigos que desejam começar trabalhar com programação, ou querem saber sobre
o assunto.

2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-
mento básico acerca de um computador.

2.4 Descrição
O curso de Lógica de Programação será realizado na modalidade EAD e utilizará a plataforma
Moodle como ferramenta de aprendizagem. Ele é composto por uma semana. O material didático
estará disponível on-line de acordo com as datas pré-estabelecidas no calendário.

2.5 Metodologia
O curso está dividido da seguinte maneira:

2.6 Cronograma
• Lição 1 - Introdução à lógica de programação;

• Lição 2 - Estruturas de repetição e vetores;

21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• Lição 3 - Matrizes e registros;

• Lição 4 - Arquivos;

• Lição 5 - Modularização;

• Avaliação de aprendizagem;

• Avaliação do curso.

As lições contém o conteúdo principal. Elas poderão ser acessadas quantas vezes forem neces-
sárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada li-
ção, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição seja
menor do que 6.0, sugerimos que você faça novamente esta lição.
Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições
quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis
para que possam ser consultados durante a avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-
sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser
enviada no fórum. Diariamente os monitores darão respostas e esclarecimentos.

2.7 Programa
O curso Lógica de Programação oferecerá o seguinte conteúdo:

• Visão geral sobre programação;

• Construção de um algoritmo;

• Utilização de estruturas de repetição;

• Estruturas de armazenamento de dados;

• Métodos de organização de um algoritmo.

2.8 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:

• iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;

• capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.

Instrumentos de avaliação:

• participação ativa nas atividades programadas;

• avaliação ao final do curso;

22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• o participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e


obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:

• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições

• AF = Avaliações.

Sua participação será importante em todas as atividades propostas.

2.9 Bibliografia
• FARRER, Harry, BECKER, Christiano G., FARIA, Eduardo C., MATOS, Helton Fábio de,
SANTOS, Marcos Augusto dos, MAIA, Miriam Lourenço. Algoritmos estruturados. Editora
Guanabara, 1989.

• MORAES, Paulo Sérgio de. Curso Básico de Lógica de Programação.

23
Capítulo 3

Lição 1 - Introdução à lógica de


programação

3.1 Conceituação
Esta primeira lição tratará de definir vários dos conceitos que serão utilizados ao longo deste
curso. Ela nos ajudará a ter uma breve idéia do que será tratado. Também nos dará uma boa
visão do que é um algoritmo, que é uma das principais bases da programação.
A lógica é um instrumento que nos ajuda a organizar e relacionar nossos pensamentos de
forma a atingirmos uma determinada meta, um objetivo.
Lógica de programação é a lógica aplicada a processos computacionais, ela nos permite que
sejam definidas seqüências lógicas para desenvolver sistemas e programas. Estas seqüências
lógicas são passos que seguimos para atingirmos um objetivo ou solucionarmos um problema.

3.2 Algoritmos
Utilizando estes conceitos já podemos definir o que é um algoritmo. Algoritmo é uma seqüên-
cia lógica utilizada para montar um conjunto de instruções finita a serem executadas para realizar
uma tarefa. Podemos pensar em um algoritmo como uma receita, as instruções devem ser claras
e sem ambigüidades para que possam ser seguidas como previsto. Podemos fazer um algoritmo
para qualquer tarefa, vamos fazer um para, por exemplo, usar um computador.

Algoritmo para usar um computador:


- conectar o estabilizador à tomada;
- ligar o estabilizador;
- ligar o computador;
- ligar o monitor;
- digitar o login e a senha;
- utilizar o computador.

Os passos devem seguir a ordem proposta, não podemos por exemplo ligar o computador
antes de conectar o estabilizador à tomada. Outra coisa que podemos notar é que apesar desse
algoritmo ter 6 instruções, se pedirmos para n pessoas desenvolverem um algoritmo para usar
um computador, provavelmente teremos n respostas diferentes e com diferentes quantidades de

24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

intruções, dependendo de como as pessoas irão abordar o problema e o quão rica em detalhes
será a análise de cada um sobre o mesmo.
Em computação, para podermos nos concentrar mais no algoritmo em si e menos na máquina
que vai executá-lo, ao mesmo tempo padronizando a escrita do algoritmo e assim reduzindo pos-
síveis ambigüidades, existe uma pseudolinguagem chamada Portugol (uma mistura de português
com Algol e Pascal, que são duas linguagens de programação). O Portugol, também chamado de
português estruturado, define algumas regras de como estruturar um algoritmo de forma concisa
e eficiente. Eis um modelo de como se produz um algoritmo em Portugol:

início
<declaração de variáveis>
<comandos ou instruções>
fim

3.3 Variáveis
Uma variável corresponde a uma área na memória do computador que armazena um tipo de
informação, um conteúdo que pode ser alterado ao longo da execução do programa. Cada variá-
vel possui um identificador (nome da variável) e o seu tipo, que são especificados quando ela é
declarada. A declaração de variáveis em Portugol tem a seguinte sintaxe:

<identificador>:<tipo de dado>;

O identificador deve ser escolhido de acordo com a função da variável no algoritmo para
melhor legibilidade do mesmo, e o seu tipo de dado pode ser um entre estes cinco:

• Inteiro: um número inteiro (negativo, nulo ou positivo). Ex: -18, -5, 0, 14, 8977;
• Real: um número real (negativo, nulo ou positivo). Ex: -4.6, 0.5, 234.45;
• Caracter: um caracter alfanumérico. Ex: d, c, 4, #, @;
• String: um conjunto de caracteres. Ex: dado, cabeça, #$$%445e, @;
• Lógico: um valor de verdadeiro ou falso.

Um exemplo de como declarar um inteiro que queremos chamar de "Nota1":

Nota1:inteiro;

3.4 Operadores
Outra coisa que devemos conhecer antes de começar a confeccionar nossos algoritmos são
os operadores que podemos utilizar, estes são divididos em três tipos diferentes. São eles:

25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

- Operadores aritméticos: são utilizados para realizar operações com números como adição,
subtração e multiplicação etc.

Símbolo Ação Exemplo


+ Adição 12+23=35
- Subtração 23-13=10
* Multiplicação 4*5=20
/ Divisão (resto real) 3/2=1,5
DIV Divisão (resto inteiro) 3 DIV2=1
MOD Resto da divisão 7 MOD 2=1
** ou exp() Exponenciação 3**2=9 ou exp(3,2)=9
raiz() Raiz quadrada raiz(9)=3

- Operadores relacionais: são utilizados para comparações entre strings (seqüências de ca-
racteres) ou números. Uma operação deste tipo sempre retorna um valor de verdadeiro ou falso,
como vemos neste exemplo.

Símbolo Significado
= Igual
<> ou # Diferente
> Maior que
< Menor que
<= Menor ou igual
>= Maior ou igual

Suponhamos ter duas variáveis A=3 e B=4. Veja a tabela montada.

Operação Resultado
A=B Falso
A<>B Verdadeiro
A>B Falso
A<B Verdadeiro
A<=B Verdadeiro
A>=B Falso

- Operadores lógicos: este último tipo de operador também retorna um valor de verdadeiro ou
falso, ele analisa e combina valores de verdadeiro ou falso, sejam estes diretos ou derivados de
expressões.

Símbolo Ação
E Retorna verdadeiro se e somente se ambas as expressões forem
verdadeiras
Ou Retorna verdadeiro caso pelo menos uma das expressões seja
verdadeira, falso caso contrário
Não Retorna falso se a expressão for verdadeira e verdadeiro
se a expressão for falsa

26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Exemplo (usando V para expressões verdadeiras e F para as falsas):

Valor1 Operador Valor2 Resultado


V E V V
V E F F
F E V F
F E F F
V Ou V V
V Ou F V
F Ou V V
F Ou F F
V Não F
F Não V

Obs.: em operações com o operador "Não", escreve-se o mesmo antes do operador.


Ex: Não V = F
Mais uma coisa necessária é saber como atribuir valores às variáveis, em Portugol fazemos
atribuições com o símbolo «-". Ex: soma <- nota1 + nota2; Este comando realiza a soma dos
conteúdos das variáveis Nota1 e Nota2 e armazena na variável Soma.
Por enquanto não podemos dar valores para as variáveis em tempo de execução do nosso
programa, o comando "leia()"é utilizado para tal, é um comando de entrada de dados, quando
queremos que um usuário digite o conteúdo de uma variável, usamos esse comando. De forma
semelhante podemos utilizar o comando "escreva()"para exibir o conteúdo de uma variável, é um
comando de saída de dados.
Com estas informações já podemos gerar um pequeno algoritmo para calcular médias das
notas de 3 provas por exemplo:

início
media,nota1,nota2,nota3:inteiro; {podemos fazer declarações de várias variáveis
de um mesmo tipo assim}
leia(nota1); {o usuário escreve no teclado o valor da primeira nota e o programa
armazena na variável nota1}
leia(nota2); {o usuário escreve no teclado o valor da segunda nota e o programa
armazena na variável nota2}
leia(nota3); {o usuário escreve no teclado o valor da terceira nota e o programa
armazena na variável nota3}
media<-(nota1+nota2+nota3)/3; {a variável "media"recebe o valor da soma das três
nota dividido por três}
escreva(media); {o programa apresenta o conteúdo da variável "media"na tela}
fim

Obs.: as frases entre chaves são apenas comentários e não fazem parte do algoritmo.

27
Capítulo 4

Licão 2 - Estruturas de repetição e


vetores

4.1 Decisão
- Se/Então (If/Then): esse tipo de estrutura condicional testa se uma determinada condição
é verdadeira ou falsa, se for verdadeira, executa o comando subseqüente ao "então", senão ela
não faz nada.
Estrutura:

se <condição> então
<comando>; {um comando ou um conjunto de comandos}
fim-se; {utiliza-se "fim-se"para indicar que o comando do condicional acabou}

- Se/Então/Senão (If/Then/Else): essa estrutura condicional é idêntica ao "Se/Então"mas com


um adicional, o "Senão", que significa que após testada a condição, se ela for verdadeira será
executado o comando depois do "Então"e se for falsa será executado o comando após o "Senão".
Estrutura:

se <condição> então
<comando1>; {um comando ou um conjunto de comandos}
senão
<comando2>; {um comando ou um conjunto de comandos}
fim-se;

- Caso/Escolha (Case/Select): essa é a terceira e última estrutura condicional que estudare-


mos ao longo deste curso, esta estrutura testa um valor e compara com vários possíveis resulta-
dos, executando o comando (ou um conjunto de comandos) correspondente ao resultado que for
igual ao valor dado.
Estrutura:

28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

escolha <expressão ou variável>


caso <valor1>: <comando1>; {um comando ou um conjunto de comandos}
caso <valor2>: <comando2>; {um comando ou um conjunto de comandos}
caso <valor3>: <comando3>; {um comando ou um conjunto de comandos}
caso <valor4>: <comando4>; {um comando ou um conjunto de comandos}
caso <valor5>: <comando5>; {um comando ou um conjunto de comandos}
senão: <comando6>; {este(s) comando(s) será(ão) executado(s) se não for
achado nenhum valor igual ao da expressão}
fim-escolha;

4.2 Repetição
- Para (For): o "Para"é a primeira estrutura de repetição que iremos ver, com ele, podemos
repetir um comando (ou conjunto de comandos) a quantidade de vezes que quisermos. A variável
receberá o valor inicial e será incrementada em 1 cada vez que o comando for executado até que
ela tenha o valor final.
Estrutura:

para <variável> = <valor inicial> até <valor final> faça


<comando>; {um comando ou um conjunto de comandos}
fim-para;

- Enquanto (While): o "Enquanto"é um estrutura de repetição que executa o(s) comando(s)


nele inserido(s) enquanto sua condição for verdadeira, em qualquer momento que a condição
seja falsa, ele não executa seu(s) comando(s).
Estrutura:

enquanto <condição> faça


<comando>; {um comando ou um conjunto de comandos}
fim-enquanto;

- Repita... Até que (Repeat... Until): o "Repita... Até que"é parecido com o "Enquanto", porém,
ele executa o(s) comando(s) e só depois ele testa se a condição é verdadeira, se for, ele para de
executar o(s) comando(s), senão continua executando-os até que a condição seja verdadeira.
Estrutura:

repita
<comando>; {um comando ou um conjunto de comandos}
até que <condição>;

4.3 Vetores
Algumas vezes queremos armazenar informações de um mesmo tipo e em grande quanti-
dade, um vetor é perfeito para isso, pois ele pode comportar quantas variáveis quisermos, como
por exemplo um cadastro de 5 números de telefone, podemos armazená-los da forma convenci-
onal, em 5 variáveis, imagine que queremos fazer um algoritmo para inverter a ordem em que os

29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

números de telefone são recebidos:

início
numero1, numero2, numero3, numero4, numero5: inteiro;
leia(numero1);
leia(numero2);
leia(numero3);
leia(numero4);
leia(numero5);
escreva(numero5);
escreva(numero4);
escreva(numero3);
escreva(numero2);
escreva(numero1);
fim

Pronto, este algoritmo dará conta da tarefa, agora imagine fazer um algoritmo parecido para
100 números de telefone, o algoritmo ficaria enorme. Para resolver este problema, podemos uti-
lizar um vetor juntamente com uma estrutura de repetição, neste caso, o "Para". Primeiro vamos
ver como é feita a declaração de um vetor:

<nome do vetor>:vetor[<tamanho do vetor>] de <tipo de dado>;

Para o nosso caso especificamente, teremos:

numero:vetor[5] de inteiro;

E o nosso algoritmo ficaria assim:

início
numero:vetor[5] de inteiro;
aux:inteiro;
para aux=1 até 5 faça
leia(numero[aux]);
fim-para;
para aux=5 até 1 faça
escreva(numero[aux]);
fim-para;
fim

Bem mais elegante e eficiente do que o primeiro método, sem contar que se quisermos fazer
o mesmo algoritmo para 100 números, bastaria trocar o tamanho do vetor de 5 para 100 e os
valores finais das estruturas "Para"de 5 para 100, Enquanto que utilizando o primeiro método
teríamos que repetir 100 vezes a declaração de número e repetir mais 100 vezes os comando de
ler e escrever.

30
Capítulo 5

Lição 3 - Matrizes e registros

5.1 Matrizes
A matriz é uma forma de armazenamento de dados que pode utilizar várias dimensões, o pró-
prio vetor que acabamos de ver nada mais é do que uma matriz com apenas uma dimensão. As
matrizes bidimensionais são representadas como tabelas, onde temos um índice para as linhas
e outro para as colunas. Sua declaração é da forma:

<nome da matriz>:matriz[X1,X2,X3,...,Xn] de <tipo de dado>;

Onde X1 é o tamanho da primeira dimensão, X2 o tamanho da segunda, X3 o tamanho da ter-


ceira e assim por diante até Xn, que é o tamanho da enésima dimensão. Na hora de utilizarmos
a matriz, referenciamos cada elemento da mesma com o nome da matriz seguido do índice de
cada dimensão em que ele se encontra, numa matriz bidimensional esses índices serão um para
a linha e outro para coluna da matriz onde está localizado o elemento. Uma matriz bidimensional
pode ser utilizada para, montar uma tabela de quantidade de tarefas realizadas por funcionários a
cada dia de serviço. Vamos ver um exemplo de 3 funcionários: Paulo, Marcos e Pedro. E quantas
tarefas foram realizadas pelos mesmos na segunda-feira e na terça-feira:

Segunda Terça
Paulo 5 4
Marcos 3 3
Pedro 8 1

A partir desta tabela podemos montar a matriz "tarefas[3,2]"onde o primeiro índice corres-
ponde ao número de linhas da matriz, nesse caso o funcionário (sendo Paulo o índice 1, Marcos
o 2 e Pedro o índice 3), e o segundo índice representa a coluna, ou seja, os dias da semana
(segunda será índice 1 e terça o índice 2). E depois pedir que seja impressa a quantidade total
de tarefas realizadas pelos três funcionários nos dois dias mencionados.

31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

início
tarefas:matriz[3,2] de inteiro;
linha, coluna,soma:inteiro;
tarefas[1,1]<-5; {número correspondente à primeira linha e primeira coluna, ou seja,
as tarefas realizadas por Paulo na segunda}
tarefas[1,2]<-4; {tarefas realizadas por Paulo na terça}
tarefas[2,1]<-3; {tarefas realizadas por Marcos na segunda}
tarefas[2,2]<-3; {tarefas realizadas por Marcos na terça}
tarefas[3,1]<-8; {tarefas realizadas por Pedro na segunda}
tarefas[3,2]<-1; {tarefas realizadas por Pedro na terça}
{com a matriz preenchida, podemos começar a soma}
para linha=1 até 3 faça
para coluna=1 até 2 faça
soma<-soma+tarefas[linha,coluna];
fim-para;
fim-para;
escreva(soma);
fim

As matrizes multidimensionais nada mais são do que matrizes de matrizes, esta matriz bi-
dimensional por exemplo é uma matriz de um vetor (matriz unidimensional) ou seja, o vetor é
representado por uma linha, e a matriz que montamos tem várias linhas, é como se fosse um
vetor de vetor, ou seja, uma matriz de matriz. Uma matriz tridimensional pode ser representada
como se fosse páginas de um livro, cada página sendo uma tabela com linhas e colunas, desse
modo precisaríamos de três índices para achar um elemento, a página, a linha e a coluna. Se-
guindo esse padrão, fazendo matrizes de matrizes, podemos fazê-las com quantas dimensões
desejarmos.
Outra coisa interessante que podemos perceber sobre matrizes é que podemos saber quan-
tos elementos ela pode armazenar facilmente,basta multiplicar os índices que a compõem entre
si, por exemplo, na matriz que montamos os índices são dois (colunas) e três (linhas), se multi-
plicarmos um pelo outro teremos o número máximo de elementos que ela pode armazenar, que
neste caso é seis. E mesmo com três ou mais dimensões o processo é o mesmo.

5.2 Registros
Registros são estruturas que organizam vários campos de dados em um único nome de variá-
vel, utilizando identificadores para cada campo. Parece meio complicado a princípio, mas como
sempre, um exemplo torna tudo mais claro, então vamos a ele. Suponha que queremos fazer
um cadastro de cliente de uma loja, esse cadastro deve conter algumas informações sobre esse
cliente, são elas: número de CPF, número de RG, nome e telefone. São vários dados e com al-
guns tipos de dados diferentes (CPF, RG e telefone podem ser inteiros enquanto que o nome será
uma string). Se fôssemos fazer isso com o que sabemos até agora, uma das formas seria fazer
vários vetores, um para cada campo, então cada índice seria uma pessoa, ou seja, CPF[1] seria
o número de CPF do cliente cujo nome estaria guardado na variável nome[1], e assim com cada
campo. Teríamos variáveis separadas para cada cliente, seria ruim fazer quaisquer operações
com os dados dos clientes. Mas com o uso de um registro podemos fazer isso de forma muito
mais simples e elegante. Declaração de um registro:

32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

tipo <nome do registro>=registro


<identificador1>:<tipo de dado 1>;
<identificador2>:<tipo de dado 2>;
...
<identificadorn>:<tipo de dado n>;
fim-registro;

Especificamente, para o nosso exemplo:

tipo dados_cliente=registro
nome:string;
RG:inteiro;
CPF:inteiro;
telefone:inteiro;
fim-registro;
cliente:dados_cliente; {precisamos criar uma variável onde o tipo de dado é o registro
que criamos}

E para referenciarmos cada campo, utilizamos um "."(ponto final) entre o nome do registro e
o identificador. Se por exemplo quisermos colocar o nome do cliente como João, podemos escre-
ver: cliente.nome<"João";
Do jeito que está ainda não é satisfatório, pois teríamos que criar muitas variáveis, uma
para cada cliente. Então criamos um vetor onde o tipo de dado será o tipo que criamos, "da-
dos_cliente". Vamos ver como ficaria para cem clientes:

cliente:vetor[100] de dados_cliente;

Assim temos todos os cadastros de cliente em um único nome de variável. E para referenciar
cada um, usamos a mesma expressão que antes, mas com o número do índice do vetor na frente
(cada índice será um cliente). Então para cadastrar nosso primeiro cliente, João, de RG igual a
12345678, CPF igual a 11122233344 e telefone 35554444, fazemos da seguinte forma:

cliente[1].nome<-"João";
cliente[1].RG<-12345678;
cliente[1].CPF<-11122233344;
cliente[1].telefone<-35554444;

E para os próximos clientes basta trocar o índice. Se por acaso quisermos trocar o número
de telefone do João, basta fazer a associação como seria com qualquer outra variável, digamos
que seu novo telefone seja 99323232, fazemoas desta maneira:

cliente[1].telefone<-99323232;

33
Capítulo 6

Lição 4 - Arquivos

6.1 Arquivos
Até agora, todos os dados que usamos foram armazenados na memória principal (memória
Ram) do computador, ou seja, uma vez que o computador seja desligado todos esses dados
são perdidos. Se for utilizado um programa para fazer contas, como uma calculadora, tudo bem,
mas se desejamos manter um cadastro de pessoas ou qualquer tipo de dado que precisamos
manter por longos períodos de tempo, precisamos armazenar essas informações em memória
secundária (o HD), pois esta não é volátil e será mantida mesmo que desliguemos o computador.
Para isso veremos agora como utilizamos os arquivos. Arquivos são conjuntos de registros,
que por sua vez são conjuntos de campos. A diferença entre esses registros e os que nós
vimos anteriormente é que estes são físicos, e os que vimos são lógicos. Os tipos mais básico
de operação com arquivos que são feitas através de algoritmos são: obtenção de um registro,
inserção de um registro novo, modificação ou remoção de um registro. Podendo-se realizar as
operações quantas vezes forem necessárias no decorrer da execução do algoritmo. Quanto à
forma de organização do arquivo, temos dois tipos mais comuns, a organização seqüencial e a
organização direta. A seqüencial se dá de forma que os registros no arquivo são armazenados
um logo após o outro, então quando queremos ler um registro, temos que passar antes por todos
os anteriores, e para escrever temos que fazê-lo apenas após o último registro do arquivo. Já
a organização direta implica em um acesso aleatório, direto dos registros, então se quisermos
acessar um determinado registro, vamos diretamente a ele, sem ter que passar por todos os seus
antecedentes. Isso é possível pois a sua posição física no arquivo é determinada por um dos
campos do registro, um campo "chave"que é selecionado na criação do arquivo.
Para utilizarmos um arquivo em nossos algoritmos, primeiro devemos declará-lo, fazemos isso
por meio do seguinte comando:

<nome do arquivo>:arquivo <organização> de <nome do registro>;

Onde <organização> pode ser seqüencial ou direta. E o <nome do registro> é o nome identi-
ficador do registro lógico que será utilizado para acessarmos os registros físicos. Vamos ver um
exemplo utilizando aquele nosso registro de clientes para exclarecer:

tipo dados_cliente=registro
nome:string;
RG:inteiro;

34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

CPF:inteiro;
telefone:inteiro;
fim-registro;
cadastro_clientes:arquivo seqüencial de dados_cliente; {aqui foi escolhida a
organização seqüencial, mas poderia ser direta}

Após a declaração ainda não podemos mexer nos registros do arquivo, devemos abrir o
mesmo. Podemos fazê-lo de três maneiras diferentes, para escrita somente, para leitura so-
mente ou para ambos. O comando para abertura de arquivo é:

abrir <nome do arquivo> <tipo de utilização>;

Se usarmos "leitura"em <tipo de utilização>, poderemos apenas acessar os registros do ar-


quivo, mas sem alterá-los, se usarmos "escrita", poderemos apenas escrever no arquivo, e se
não colocarmos nada no lugar de <tipo de utilização>, estaremos abrindo o arquivo em modo de
escrita e leitura simultaneamente. Exemplo:

abrir cadastro_clientes leitura;


abrir cadastro_clientes escrita;
abrir cadastro_clientes;
abrir cadastro_clientes, cadastro_funcionarios; {aqui abrimos dois arquivos em
modo de escrita e leitura}

Após o uso do arquivo, é altamente recomendável que este seja fechado, liberando assim
o nome lógico a ele associado (cadastro_clientes) e realizando alguns processos referentes ao
fechamento físico do arquivo, processos estes que não nos interessa neste curso. O comando
para tal é da forma:

fechar <nome do arquivo>;

Obs.: pode-se também fechar mais de um arquivo na mesma linha de comando.

Os comandos de entrada e saída (leitura e escrita) em arquivos são:

leia(<nome do arquivo>,<nome do registro>);


escreva(<nome do arquivo>,<nome do registro>);

Outra coisa que devemos saber antes de vermos alguns exemplos de algoritmos envolvendo
arquivos são as funções BOF (do inglês begin of file, traduzido para começo do arquivo) e EOF
(também do inglês end of file, ou final de arquivo). Podemos usar estas funções para testar se o
cursor dentro do arquivo está no começo ou no final do arquivo. BOF retornará um valor lógico
de verdadeiro se o cursor estiver no começo, semelhantemente EOF o fará se o cursor estiver no
final do arquivo.

Agora que já temos a base teórica, vamos ver como ficaria um algoritmo para realizar uma
procura por um registro em um arquivo.
Primeiro, vamos ver com um arquivo de organização seqüencial:

35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

início
tipo dados_cliente=registro
nome:string;
RG:inteiro;
CPF:inteiro;
telefone:inteiro;
fim-registro;
cadastro_clientes:arquivo sequencial de dados_cliente;
achou:lógico;
abrir cadastro_clientes leitura;
achou<-falso;
enquanto (não cadastro_clientes.EOF) e (não achou) faça
leia(cadastro_clientes,dados_cliente); {perceba que o comando de leitura
passa automáticamente para o próximo registro}
se dados_cliente.RG=123456789 então
escreva("Cliente encontrado!");
achou<-verdadeiro;
fim-se;
fim-enquanto;
fechar cadastro_clientes;
fim

Agora para fazermos o mesmo algoritmo com um arquivo de organização direta, usamos uma
função de pesquisa. Esta função procura o registro com a chave indicada e retorna verdadeiro se
achar. Sua sintaxe é:

pesquisar(<nome do arquivo>,<chave>);

No nosso caso, é conveniente que a chave seja o RG, já que este dado será diferente para
cada cliente. Vamos ao algoritmo, considerando que a chave seja realmente o RG do cliente:

início
tipo dados_cliente=registro
nome:string;
RG:inteiro;
CPF:inteiro;
telefone:inteiro;
fim-registro;
cadastro_clientes:arquivo sequencial de dados_cliente;
se pesquisar(cadastro_clientes,"123456789") então
leia(cadastro_clientes,dados_cliente);
escreva("Cliente encontrado!");
fim-se;
fechar cadastro_clientes;
fim

36
Capítulo 7

Lição 5 - Modularização

7.1 Modularização
A modularização é uma técnica utilizada quando temos grandes algoritmos ou programas,
essa técnica consiste em separar o grande algoritmo/programa em várias partes menores a fim
de atingir alguns objetivos:

• facilitar o entendimento do código;

• possibilitar o reuso de alguma parte do algoritmo;

• facilitar a manutenção do algoritmo;

• evitar repetições desnecessárias de partes do código.

Isso dito, temos agora que compreender o que é um módulo propriamente dito. Módulo é uma
parte do código que tem relativa independência do restante do algoritmo e tem uma função bem
definida. Na hora de separar estes módulos precisamos de um módulo principal, o módulo de
controle, responsável por dar início à seqüência do algoritmo e os módulos que realizarão as fun-
ções do algoritmo. Com a nossa pseudo linguagem, o Portugol, temos duas maneiras de contruir
um módulo, uma é por meio de um procedimento e a segunda é a contituição de uma função. Um
procedimento é construído da seguinte maneira:

procedimento <nome do procedimento>[<parâmetros>];


<variáveis locais>
início
<comando1>;
<comando2>;
...
<comandon>;
fim

As variáveis locais são variáveis que apenas aquele procedimento vai utilizar, os demais mó-
dulos não têm acesso a essas variáveis, nem mesmo o módulo principal, já os parâmetros são
variáveis com valores necessários para o procedimento, não necessariamente um procedimento
deve receber parâmentros, isso vai depender de sua função. Esses parâmetros podem ser pas-
sados ao procedimento de duas maneiras, por valor ou por referência, os passados por valor

37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

não terão seus conteúdos alterados pelo procedimento, enquanto que os passados por referên-
cia (colocando-se "var"antes de sua declaração) podem ser alterados pelo mesmo. A declaração
dentro dos colchetes dos parâmetros é idêntica à declaração normal das variáveis. Antes de mos-
trar um exemplo, temos que saber como "chamar"um procedimento dentro do algoritmo principal,
para tal, basta usar o comando:

<nome do procedimento>(<parâmetros>);

Vamos ao exemplo, faremos um algoritmo bem simples, que apenas calcule a soma entre dois
números e imprima na tela: procedimento soma_dois_numeros[a,b:inteiro; var resultado:inteiro];

início
resultado<-a+b;
fim
início {parte principal do algoritmo}
valor1,valor2,soma:inteiro;
leia(valor1);
leia(valor2);
soma_dois_numeros(valor1,valor2,soma);
escreva(soma);
fim

Como podemos perceber, mesmo que os nomes das variáveis sejam diferentes, o que importa
são apenas os tipos de dados das variáveis, eles têm que ser iguais aos declarados no procedi-
mento. As variáveis "valor1"e "valor2"foram passadas por valor, já que não nos interessa que seus
conteúdos sejam modificados, e a variável soma foi passada ao procedimento por referência, pois
queríamos que ela recebesse o valor da soma entre as outras duas variáveis. Note também que
este procedimento pode ser utilizado em qualquer outro algoritmo que precise realizar a soma
entre dois números, basta que o algoritmo principal envie os parâmetros necessários.
Funções são muito semelhantes aos procedimentos, a diferença é que as funções podem ter
um tipo de dados, elas podem receber um valor, é como se as funções fossem uma variável. Sua
declaração é bem parecida com a dos procedimentos, mas temos de incluir o tipo de dados que
queremos que ela tenha. Fica desta forma sua declaração:

função <nome da função>[<parâmetros>]:<tipo de dado>;


<variáveis locais>
início
<comando1>;
<comando2>;
...
<comandon>;
fim

E o comando de chamada da função é idêntico ao do procedimento, mas o seu valor de re-


torno pode ser diretamente aplicado a alguma variável desta forma:

<nome da variável> <- <nome da função>(<parâmetros>);

38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Vamos refazer o algoritmo de soma utilizando uma função ao invés de procedimento:

função soma_dois_numeros[a,b:inteiro;]:inteiro;
início
soma_dois_numeros<-a+b;
fim
início {parte principal do algoritmo}
valor1,valor2,soma:inteiro;
leia(valor1);
leia(valor2);
soma<-soma_dois_numeros(valor1,valor2);
escreva(soma);
fim

Podemos inclusive, para economizar uma variável e algumas linhas de código, fazer assim:

função soma_dois_numeros[a,b:inteiro;]:inteiro;
início
soma_dois_numeros<-a+b;
fim
início {parte principal do algoritmo}
valor1,valor2:inteiro;
leia(valor1);
leia(valor2);
escreva(soma_dois_numeros(valor1,valor2));
fim

39