SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Pascal
Versão 1.0.0
Sumário
I Sobre essa Apostila 3
II Informações Básicas 5
III GNU Free Documentation License 10
IV Pascal 19
1 O que é Pascal 20
2 Plano de ensino 21
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.6 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.7 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Introdução 24
3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4 Conceitos Iniciais 26
4.1 Constantes e variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2 Declarações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 Expressões Aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4 Expressões Lógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5 Comando de Atribuição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5 Começando a Programar 32
5.1 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2 Entrada e Saída . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6 Condicionais e Estruturas de Repetição 36
6.1 Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.2 For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
6.3 While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.4 Repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7 Estruturas de Dados e Manipulação de Arquivos 43
7.1 Variáveis Compostas Homogêneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.2 Variáveis Compostas Heterogêneas . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.3 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.4 Modularização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.5 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.6 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
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 Beatriz Marília Ferreira Ribeiro(beatriz@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
Pascal
19
Capítulo 1
O que é Pascal
Esta linguagem é a melhor escolha para aqueles que estão começando a programar por ser
extremamente bem estruturada e dar pouca liberdade para que o programador cometa erros.
20
Capítulo 2
Plano de ensino
2.1 Objetivo
Qualificar técnicos e programadores na linguagem de programação Pascal.
2.2 Público Alvo
Técnicos e Programadores que desejam trabalhar com Pascal ou apenas conhecer esta lin-
guagem.
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-
mento básico acerca da lógica de programação.
2.4 Descrição
O curso de Introdução ao Python será realizado na modalidade EAD e utilizará a plataforma
Moodle como ferramenta de aprendizagem. Ele é composto de um módulo de aprendizado que
será dado na primeira semana e um módulo de avaliação que será dado na segunda 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:
Duração Descrição do módulo
1 Semana lições 1 a 5, avaliação final
Todo o material está no formato de livro, e estará disponível ao longo do curso. O livro poderá
ser acessado quantas vezes forem necessárias. Aconselhamos a leitura de "Ambientação do
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Moodle", para que você conheça o produto de Ensino à Distância, evitando dificuldades advindas
do "desconhecimento"sobre a mesma.
Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudado
anteriormente que também conterá perguntas sobre os textos indicados. Utilize o material de
cada semana e os exemplos disponibilizados para se preparar para prova.
Os instrutores estarão à sua disposição ao longo de todo curso. Qualquer dúvida deve ser
disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e
esclarecimentos. Semana 1
• Introdução;
• Conceitos iniciais;
• Começando a programar;
• Condicionais e estruturas de repetição;
• Estruturas de dados e manipulação de arquivos.
2.6 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;
• 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.
2.7 Bibliografia
• http://equipe.nce.ufrj.br/adriano/c/apostila/tipos.htm
• http://www.fec.unicamp.br/reenge/aulas/pascal/index.html
• http://br.geocities.com/sdiasneto/algo1/var.htm
• arquivos.coinfo.cefetpb.edu.br/ fred/logalg/material/ApostilaAlgoritmosPascal.pdf
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• http://pt.wikipedia.org/wiki/Operadores_l%C3%B3gicos
• Apostila Algoritmos e Pascal um curso básico, Frederico Costa Guedes Pereira
• Uso básico de arquivos - Flávio Mendes - http://www.ita.br/ flavio/aprende/pascal/p_files.htm
23
Capítulo 3
Introdução
3.1 Introdução
É uma linguagem de programação estruturada que recebeu este nome em homenagem ao
matemático Blaise Pascal. Foi criada em 1970 pelo suíço Niklaus Wirth, tendo em mente encora-
jar o uso de código estruturado.
O próprio Niklaus Wirth diz que Pascal foi criada, simultaneamente, para ensinar programação
estruturada e para ser utilizada em sua fábrica de software.
A linguagem é extremamente bem estruturada e muito adequada para ensino de linguagens
de programação. É, provavelmente, uma das linguagens mais bem resolvidas entre as linguagens
estruturadas, e certamente, um dos exemplos de como uma linguagem especificada por uma
pessoa pode ser bem melhor do que uma linguagem especificada por um comitê.
Pascal originou uma enorme gama de dialetos, podendo também ser considerada uma família
de linguagens de programação. Grande parte de seu sucesso se deve à criação, na década de 80,
da linguagem Turbo Pascal, inicialmente disponível para computadores baseados na arquitetura
8086 (com versões para 8080 no seu início).
Pascal é, normalmente, uma das linguagens de escolha para ensinar programação, junto com
Scheme, C, e Fortran.
3.2 Pré-requisitos
O objetivo deste curso não é ensinar a lógica de programação, assim, ele será melhor apro-
veitado pelos alunos que já tiverem conhecimentos básicos sobre ela.
Será necessário instalar um compilador de Pascal no seu computador para fazer os exercícios
práticos. Escolha um dos compiladores da lista e instale antes de começar o curso.
Para instalar o free pascal:
#apt-get update
#apt-get install fp-compiler
Como compilar e executar. Sempre que você escrever um programa em Pascal ou quiser
testar algum dos exemplos faça o seguinte:
• Abra um editor de texto qualquer (gedit, kate, kedit, etc) e escreva seu programa (ou copie
e cole o exemplo);
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Salve o arquivo com a extensão .pas, por exemplo, teste.pas;
• Abra um terminal e digite fpc <nome_do_arquivo.pas>, isto irá compilar seu programa. Se
houver algum erro nele que impessa, será exibida uma mensagem na tela dizendo qual o
erro;
• Digite, então ./<nome_do arquivo>, agora você não deve digitar o .pas do nome do arquivo.
O ./ executa o programa.
25
Capítulo 4
Conceitos Iniciais
4.1 Constantes e variáveis
Constantes e variáveis são elementos básicos manipulados pelos programas. Ambos armaze-
nam dados. As constantes armazenam dados que terão o mesmo valor durante toda a execução
do programa. As variáveis armazenam dados que podem ter seus valores alterados durante a
execução.
Todas as constantes e variáveis de um programa em Pascal precisam ser declaradas no início
do programa. Assim o computador poderá reservar o espaço de memória que será necessário
para a execução do programa.
Cada constante ou variável tem um nome que a identifica, ou um identificador, e um tipo.
Os identificadores servem para que se tenha acesso aos dados, podendo vê-los e modificá-los
quando for necessário. Existem algumas regras para os identificadores, são elas:
• O primeiro caractere de um identificador deve ser, obrigatoriamente, uma letra;
• Os caracteres seguintes podem ser letras ou dígitos;
• Não é permitido o uso de caracteres em branco ou quaisquer outros que não sejam letras
ou dígitos;
• A linguagem Pascal não diferencia as letras maiúsculas das minúsculas, assim, Variavel3 e
variavel3 são considerados o mesmo identificador.
Os tipos de dados do Pascal serão explicados a seguir:
Para os dados numéricos o Pascal tem diferentes tipos tanto para inteiros quanto para reais. A
diferença entre os tipos de cada um desses grupos é o intervalo de valores que cada um suporta.
Por exemplo, os tipos Shortint e Integer armazenam inteiros. A diferença entre eles é que um
dado do tipo Shortint pode assumir valores entre -128 e 127 e os dados do tipo Integer podem
assumir valores de -32768 a 32767. A lista seguinte mostra todos os tipos de dados numéricos
da linguagem Pascal e o intervalo de valores suportado por cada tipo.
Tipos de dados inteiros:
• Shortint -128 a 127;
• Integer -32768 a 327667;
• Longint -2147483648 a 2147483647;
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Byte 0 a 255;
• Word 0 a 65535.
Tipos de dados reais:
• Real 2,9 * 10-39 a 1,7 * 1038;
• Single 1,5 * 10-45 a 3,4 * 1038;
• Double 5,0 * 10-324 a 1,7 * 10308;
• Extended 3,4 * 10-4932 a 1,1 * 104932;
• Comp -9,2 * 1018 a 9,2 * 1018.
É importante escolher o tipo certo de dado para cada situação para que não haja desperdício
de memória. Por exemplo, uma variável dia que representa os dias do mês poderá ter apenas
valores inteiros de 0 a 31. Então, não faz sentido escolher para esta variável o tipo de dados
real, ou longint. O tipo Byte é capaz de armazenar todos os valores possíveis de dia e é o que
menos ocupa memória (quanto menor o intervalo de valores suportado pelo tipo menor será a
quantidade de memória alocada), então é a melhor escolha a ser feita. O tipo Shortint também
poderia ser escolhido, pois ocupa a mesma quantidade de memória do tipo Byte e é capaz de
armazenar valores inteiros de 0 a 31.
Além dos tipos dados numéricos, o Pascal tem tipos de dados lógicos e de caracteres, mos-
trados abaixo:
Tipos de dados caracteres:
• String;
• Char.
Tipos de dados lógicos:
• True;
• False.
As variáveis do tipo char armazenam um caractere (isto é, uma letra, um dígito ou um símbolo
especial). As do tipo string armazenam uma cadeia de caracteres, podendo formar palavras.
Uma string pode ter no máximo 255 caracteres.
Os dados do tipo lógico só podem assumir os valores verdadeiro (true) ou falso (false). Uma
variável ou constante lógica deve ser declarada como boolean.
4.2 Declarações
Declaração de Variáveis
Você já sabe que as variáveis tem de ser declaradas, então, vejamos como se faz isto.
Var
nome: string [30];
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
idade: shortint;
salário: comp;
Antes das declarações utilizamos a palavra reservada var, que indica que as próximas linhas
terão declarações de variáveis. Depois a sintaxe é a seguinte:
<nome da variável> : <tipo>.
Observe que ao final de cada linha é necessário usar um ponto-e-vírgula. Se houver mais de
uma variável do mesmo é possível escrevê-las na mesma linha. Neste caso, o nome das variá-
veis deve ser separado por vírgulas, como no exemplo abaixo:
nota1, nota2, nota3 : real.
Também é permitido declarar variáveis de tipos diferentes em uma linha:
nome: string [30]; idade: shortint.
Porém, como você deve ter percebido, isto dificulta a legibilidade do programa. Em alguns casos
a declaração de muitas variáveis do mesmo tipo em uma linha também causa este problema.
Declaração de Constantes
Para declarar uma constante em Pascal basta escrever seu identificador e seu valor, precedi-
dos da palavra const. Como foi feito abaixo:
const
nome = ’Ana Maria de Souza’;
idade = 35;
O valor atribuído a uma constante na declaração pode ser um real, inteiro, uma string ou um
valor lógico. A sintaxe de uma declaração de constante é sempre igual a do exemplo acima:
<identificador> = <valor>;
4.3 Expressões Aritméticas
As operações aritméticas básicas do Pascal são: soma, subtração, multiplicação, divisão,
divisão inteira e resto. As operações de soma e subtração têm menor prioridade que as demais.
Entre operações com a mesma prioridade será executada primeiro a que estiver mais a esquerda
na expressão. A representação dos operadores em Pascal é mostrada a seguir:
+ soma;
- subtração;
* multiplicação;
/ divisão;
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
div divisão de inteiros;
mod resto da divisão de inteiros.
Os operadores +, -, * e / podem ser usados tanto para reais quanto para inteiros. Os operado-
res div e mod só podem ser usados para números inteiros. Em expressões com os operadores +,
- e * se um dos operandos for real o resultado será, obrigatoriamente, real. O operador / só produz
resultados reais, independentemente, do tipo dos operandos. Veja alguns exemplos: Considere
i1 e i2 variáveis inteiras, e r1 e r2 variáveis reais,
• i1 + i2 tem resultado inteiro;
• i1 + r1 tem resultado real;
• i1 / i2 tem resultado real;
• i1 * i2 tem resultado inteiro;
• i1 mod i2 tem resultado inteiro;
• i1 mod r1 é uma operação inválida, já que os operandos de mod tem de ser, necessaria-
mente, inteiros.
O Pascal tem, também, funções para realizar operações diferentes das que já foram citadas,
como seno e exponenciação. A tabela a seguir mostra estas funções:
Função Resultado Tipo do resultado
ln(ea) logarítmo natural de ea real
exp(ea) eelevado a ea real
abs(ea) módulo de ea integer ou real
trunc(ea) valor truncado de ea integer
round(ea) valor arredondado de ea integer
sqr(ea) ea elevado ao quadrado integer ou real
sqrt (ea) raíz quadrada de ea real
sin(ea) seno de ea real
cos(ea) cosseno de ea real
arctan(ea) arco tangente de ea real
Obs:
1. ea é uma expressão aritmética.
2. truncar um número significa considerar apenas sua parte inteira. Por exemplo, truncando 4,87
teríamos 4 como resultado.
Pergunta: De que tipo deverão ser as variáveis a, b, c, d, e para que o seguinte trecho de
programa esteja correto?
a := (b+c)/(d mod e)
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
4.4 Expressões Lógicas
Uma expressão lógica é uma expressão à qual podem ser atribuídos os valores verdadeiro ou
falso.
Chamamos de relação uma expressão que compara dois valores do mesmo tipo. Freqüente-
mente, utiliza-se uma combinação de relações com expressões lógicas nos programas em Pascal.
Os operadores relacionais estão listados na tabela seguinte.
> maior
>= maior ou igual
< menor
<= menor ou igual
= igual
<> diferente
Podemos utilizar os operadores relacionais tanto para comparar dados númericos quanto ca-
racteres. A comparação entre strings é feita caractere por caractere de acordo com a ordem
alfabética, assim, ’ana’ < ’bruno’. Cada comparação retorna um valor lógico. Por exemplo, se a =
2 e b = 2.5, a comparação a > b retornará o valor false.
Operador lógico, assim como um operador aritmético, é uma classe de operação sobre va-
riáveis ou elementos pré-definidos. AND, OR e NOT são os principais operadores lógicos, base
para a construção de sistemas digitais e da Lógica proposicional. Os operadores AND e OR são
operadores binários, ou seja, necessitam de dois elementos, enquanto o NOT é para um único
elemento.
Uso:
• x1 AND x2;
• x1 OR x2;
• NOT x1.
Descrição:
AND: operador lógico onde a resposta da operação é verdade (1) somente se ambas as
variáveis forem verdade.
x1 x2 x1 AND x2
0 0 0
0 1 0
1 0 0
1 1 1
OR: operador lógico onde a resposta da operação é verdade (1) se pelo menos uma das
variáveis de entrada for verdade.
x1 x2 x1 OR x2
0 0 0
0 1 1
1 0 1
1 1 1
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
NOT: operador lógico que representa a negação (inverso) da variável atual. Se ela for verdade,
torna-se falsa e vice-versa.
x1 NOT x1
0 1
OBS: nas tabelas acima o valor 0 equivale a false e o valor 1 equivale a true.
Pergunta: Se "a"é uma variável do tipo boolean, qual o valor de "a"depois de ser executada
a seguinte linha de código:
a := (b or c) and d;
onde as variáveis b, c e d têm, respectivamente, os valores false, true e false.
4.5 Comando de Atribuição
A função de um comando de atribuição é modificar o valor de uma variável. A sintaxe de uma
atribuição é a seguinte:
<nome da variável> := <novo valor>;
OBS: o novo valor pode ser uma expressão, por exemplo:
salarioliquido := salariobruto - (dependentes * mensalidade);
onde mensalidade é o valor pago para cada um dos dependentes para que ele tenha direito ao
plano de saúde do funcionário.
Antes de usar um comando de atribuição lembre-se de que a variável e o novo valor devem ser
de tipos compatíveis. Por exemplo, se idade é uma variável inteira não poderíamos escrever
idade := ’maria’;
Mesmo entre um valor inteiro e uma variável inteira é preciso tomar algum cuidado para que
não haja erros. Neste caso, o importante é verificar que o tipo de dado da variável é capaz de
armazenar o novo valor. Veja um exemplo:
numerodealunos := 400;
se numerodealunos for do tipo integer não haverá nenhum problema com esta atribuição, po-
rém, se ele for do tipo byte não será possível atribuir o novo valor a ele, pois variáveis deste tipo
só podem assumir valores entre 0 e 255. O mesmo acontece com os reais. Antes de atribuir um
valor a uma variável tenha certeza de que ela será capaz de armazenar este valor.
O comando de atribuição também pode ser usado para variáveis lógicas (boolean). Veja um
exemplo:
aprovado := false;
onde aprovado é uma variável booleana que recebe valor verdadeiro se o aluno obteve média
maior ou igual a 6 e falso, caso contrário.
31
Capítulo 5
Começando a Programar
5.1 Hello World
Agora que você já sabe um pouco sobre a linguagem Pascal começaremos a programar.
Todo programa em Pascal tem a seguinte estrutura:
Program <nome do programa>;
var
<declarações de variáveis>
begin
<instruções>
end.
Se o programa tiver constantes basta declará-las logo depois das variáveis, como foi mostrado
na primeira lição. As palavras begin e end delimitam o bloco principal do programa, onde são
escritos os comandos.
program Hello;
var
mensagem : string;
begin
mensagem := ’Hello World’;
write (mensagem);
end.
Copie e cole o programa acima no editor de texto. Salve-o com o nome de hello.pas, agora
abra o terminal, entre na pasta que você salvou o hello.pas e digite os seguintes comandos:
$ fpc hello.pas
$ ./hello
O primeiro comando compila o programa, isto é, traduz o seu programa em Pascal para um
código objeto, que posteriormente resultará num programa executável. O segundo comando exe-
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cuta o executável gerado após a compilação. Se tudo der certo depois destes comandos você
verá na tela a frase Hello World. A maior parte do programa você já deve ter entendido. Primeiro
declaramos uma variável do tipo string chamada mensagem. Depois, dentro do bloco principal
do programa, atribuímos a mensagem à string Hello World. A última parte é a que você não
tinha aprendido ainda, write (mensagem); faz com que o conteúdo da variável mensagem seja
impresso na tela. Na próxima página você aprenderá mais alguns comandos de entrada e saída.
5.2 Entrada e Saída
Na página anterior foi usado um comando que ainda não tinha sido apresentado neste curso,
o comando write. Você, provavelmente, percebeu que a função deste comando é escrever uma
mensagem na tela. Existem outros comandos que têm a função de receber dados do usuário e
mostrar informações a ele. Eles são chamados comandos de entrada e saída, e serão apresen-
tados a seguir.
Entrada
• read
O comando read é usado para ler dados que o usuário digita. A sintaxe desse comando é a
seguinte:
read (lista de identificadores);
Quando a lista de identificadores tiver mais de um identificador, separe-os com vírgulas. Quando
o programa é executado, os valores devem ser escritos separados por espaços.
• readln
O readln também tem como função ler dados da entrada padrão. Sua sintaxe é a seguinte:
readln (lista de identificadores);
A diferença entre estes dois comandos é que se em uma linha de entrada forem digitados mais
valores do que os que o programa precisa ler no momento, o readln ignora os próximos valores.
O read, ao contrário, utilizará estes valores como entradas na próxima vez que o programa tiver
um comando de entrada. Veja um exemplo:
program funcoesdeleitura;
var
i1, i2, i3: integer;
r1, r2, r3: real;
begin
read (i1,r1);
read (i2,r2);
read (i3,r3);
33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
end.
Suponha que o programa foi executado e o usuário digitou os seguintes valores:
1 3.2 3 3.8 2 2.4 <-’
5 4.2 8 2.5 9 4.2 <-’
6 4.3 7 7.3 4 5.5 <-’
em que o símbolo <-’ representa a tecla enter.
Neste caso, as variáveis i1, i2, i3 e r1, r2, r3 receberiam os seguintes valores:
i1 = 1
r1 = 3.2
i2 = 3
r2 = 3.8
i3 = 2
r3 = 2.4
Se o mesmo programa tivesse sido escrito substituindo os read por readln, os valores das va-
riáveis seriam os seguintes:
i1 = 1
r1 = 3.2
i2 = 5
r2 = 4.2
i3 = 6
r3 = 4.3
Isto porque depois de fazer r1 = 3.2 os demais valores da primeira linha seriam ignorados. O
segundo read utilizaria os valores da segunda linha, fazendo i2 = 5 e r2 = 4.2.
Saída
Assim como para a entrada, existem dois comandos para saída, write e writeln. A sintaxe desses
comandos é idêntica a dos mostrados anteriormente.
write (lista de identificadores);
writeln (lista de identificadores);
Como ja foi dito, a funcão deles é imprimir algo na tela. No lugar da lista de identificadores
podemos colocar valores constantes, strings, expressões e etc. Veja alguns exemplos:
writeln (’Bom Dia’);
writeln (’idade: ’,idade);
writeln (’media = ’, lições*0.7 + prova*0.3);
Se as variáveis tivessem os valores:
idade = 18;
lições = 9;
prova = 10.
Os comandos acima teriam as seguintes saídas:
34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Bom Dia;
idade: 18;
media = 9.3.
A diferença entre os comandos write e writeln é que o segundo depois de imprimir a mensa-
gem muda o cursor para a próxima linha. Assim, se houver varios writeln no programa a saída de
cada um deles será escrita em uma linha. Por outro lado, se houver vários write, todas as saídas
serão escritas na mesma linha.
Exercício 1 Escreva um programa que leia os dados de uma pessoa, nome, idade, número
de identidade, telefone e endereço, e os imprima na tela.
35
Capítulo 6
Condicionais e Estruturas de Repetição
6.1 Condicionais
Os programas em Pascal são executados sequencialmente, isto é, os comandos são execu-
tados um a um na ordem em que foram escritos. Porém, existem algumas estruturas que podem
mudar esta ordem. Por exemplo, usando uma estrutura de repetição pode-se fazer com que
o próximo comando executado não seja o da próxima linha, mas o que está cinco linhas acima
do último comando executado. A seguir serão apresentadas as estruturas de decisão e repetição.
Estruturas de Decisão
Se você já conhece a lógica de programação ou alguma outra linguagem, provavelmente, se
lembrará de que é muito comum associar determinados comandos em um programa à condi-
ções. Por exemplo,
se (média >= 6.0):
então aprovado := true;
senão aprovado := false.
Neste caso a condição para que uma pessoa seja aprovada é que sua média final seja maior
ou igual a 6. Se isto não acontecer ela será reprovada (aprovado = false). A sintaxe das estrutu-
ras de repetição em Pascal é a seguinte:
If condição;
then comandos;
else comandos.
O que essa estrutura faz é primeiro verificar se a condição é verdadeira ou falsa. Se for ver-
dadeira, os comandos que vêm depois do then serão executados. Se for falsa os comandos
depois do else serão executados. O else não é necessário. Você pode usar uma condição ape-
nas para decidir se um comando será ou não executado, sem precisar dizer o que será feito se
a condição não for verdadeira. Quando há mais de um comando a ser executado no then ou no
else precisamos sinalizar quais são eles, caso contrário seria impossível distinguir estes coman-
36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
dos dos que vem depois da estrutura de repetição e devem ser executados independentemente
da condição. Veja o exemplo abaixo:
If (hora >= 16.0)
then write (’O horário de funcionamento já foi encerrado’);
write (’Obrigado por visitar nossa página’);
Neste caso a linha write (’Obrigado por visitar nossa página’); deverá ser executada apenas se
a condição hora >= 16.0 ou em todos os casos? Seria impossível saber isso. Por isso, usamos
blocos de comandos que delimitam quais comandos estão dentro de cada parte da estrutura. As
palavras utilizadas para isso são begin e end. Veja outro exemplo:
If (hora >= 16.0)
then
begin
write (’O horário de funcionamento já foi encerrado’);
write (’Por favor retorne amanha’);
end
else
begin
write (’por favor digite seu número de identificação’);
read (numero);
write (’por favor digite a senha de acesso’);
read (senha);
end;
write (’Obrigado por visitar nossa página’);
Neste caso fica claro que quando a condição for verdadeira será executado o bloco
begin
write (’O horário de funcionamento já foi encerrado’);
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
write (’Por favor retorne amanha’);
end
e se a condição for falsa será executado o seguinte:
begin
write (’por favor digite seu número de identificação’);
read (numero);
write (’por favor digite a senha de acesso’);
read (senha);
end;
e o comando write (’Obrigado por visitar nossa página’); será executado independentemente da
condição.
6.2 For
Outra forma de mudar a ordem seqüencial de execução de um programa é através das estru-
turas de repetição ou laços. Estas estruturas são usadas para que um mesmo bloco de comandos
seja executado várias vezes. No Pascal existem três diferentes formas de fazer isto, for, while e
repeat.
For
A primeira forma de laço estudada neste curso será o for. Nela é sempre usado um contador,
que controla o número de vezes que o bloco será repetido. A sintaxe do for é a seguinte:
for contador := valor-inicial to valor-final do
begin
bloco de comandos
end;
ou
for contador := valor-inicial downto valor-final do
begin
bloco de comandos
end;
Onde contador é a variável responsável por determinar quantas vezes o bloco ainda será exe-
cutado. A cada vez que o laço é executado o valor de contador é incrementado (quando usamos
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
o to) ou decrementado (quando usamos o downto). É importante observar que o contador deve
ser sempre declarado como uma variável inteira. O laço será repetido até que o contador seja
maior que o valor final, se for usado to, ou menor que ele, se for usado o downto.
Observe os valores assumidos pelo contador na execução do seguinte programa:
program UsandoFor;
var
contador: byte;
begin
for contador := 1 to 10 do
writeln (’contador= ’, contador);
writeln (fim do laco);
writeln (’contador= ’, contador);
end.
A saída impressa na tela será a seguinte:
contador= 1
contador= 2
contador= 3
contador= 4
contador= 5
contador= 6
contador= 7
contador= 8
contador= 9
contador= 10
fim do laço
contador= 10
Ao final de cada execução do laço a variável contador é incrementada automaticamente. Isso
acontece até que seu valor seja igual ao valor final (10). Então, o próximo comando depois do for
é executado. Observe que após o fim das repetições o contador terá o último valor que recebeu
no for, 10. Os valores inicial e final não precisam ser, necessariamente, constantes podem ser
variáveis inteiras, como no exemplo abaixo:
program UsandoFor;
var
valorinicial, valorfinal : byte;
contador : byte;
begin
writeln (’digite o valor inicial’);
readln (valorinicial);
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
writeln (’digite o valor final’);
readln (valorfinal);
for contador := valorinicial to valorfinal do
writeln (’contador= ’, contador);
writeln (’fim do laco’);
writeln (’contador= ’, contador);
end.
Exercício:
Agora que você já sabe como utilizar o laço for, escreva um programa que receba as notas
finais de oito alunos da turma do curso de Pascal e calcule a média da turma. Como a média
é igual a (soma das notas)/8, você precisará de uma variável que armazene a soma das notas.
Depois de ter lido todas elas basta dividir o valor desta variável por 8. Depois modifique seu
programa para que o usuário possa informar qual o número de alunos da turma.
6.3 While
O for é um laço do tipo contado. Ou seja, há uma variável que conta quantas vezes ele já foi
executado e o fim da execução acontece quando esta variável atinge um valor máximo ou mínimo.
Os outros dois tipos de loops do Pascal (while e repeat) não são contados, são condicionais. Isto
quer dizer que a execução não tem um número definido de vezes para acontecer. Seu fim de-
pende de uma condição. Veja a sintaxe do while:
while (condição)
do
begin
comandos
end;
No exemplo abaixo o usuário pode definir até quando o loop será executado. A situação é a
seguinte, deseja-se calcular a renda per capita de um condomínio, porém, o número de morado-
res é desconhecido. O programa é executado até que a renda de todos os moradores já tenha
sido digitada. Para que o cálculo seja feito corretamente, se um morador não tem renda alguma
será digitado para ele o valor 0. A execução do loop terminará quando for digitado o valor -1 para
a renda.
A condição é uma expressão lógica, que pode assumir os valores verdadeiro ou falso. Antes
de entrar no laço esta condição é testada. Se ela for verdadeira os comandos de dentro do while
serão executados, se for falsa o loop terminará.
Program RendaPerCapita;
var
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
renda : integer;
rendatotal : integer;
nmoradores : integer;
percapita : real;
begin
renda := 0;
rendatotal := 0;
nmoradores := 0;
while (renda <> -1)
do
begin
writeln (’digite a renda do morador’);
readln (renda);
if (renda >= 0)
then
begin
rendatotal := rendatotal + renda;
nmoradores := nmoradores +1;
end;
end;
percapita := rendatotal/nmoradores;
writeln (’renda per capita do condiminio: ’,percapita:6:2);
end.
Como você já deve ter percebido as variáveis renda, rendatotal e nmoradores foram inicializadas
com 0 no início do programa. Isto é importante porque diferentes compiladores podem atribuir
diferentes valores a variáveis não inicializadas. No free pascal elas teriam o valor zero mesmo
que você não atribuisse esse valor a elas, mas em outro compilador talvez tivessem um valor
diferente. O zero é o melhor valor inicial porque antes de entrar no laço ainda não foi contado
nenhum morador e nenhuma renda. Além disso renda = 0 permite que o laço comece.
Neste exemplo há uma estrutura que não tinha sido mostrada ainda neste curso, um bloco de
comandos dentro de outro (no if).
Exercício Pesquise a função do :6:2 da última linha do último exemplo.
6.4 Repeat
O repeat é o segundo tipo de loop condicional do Pascal. A diferença entre ele e o while é
que no while a condição é testada antes de entrar no laço, enquanto que no repeat ela é testada
no final de cada repetição. A sintaxe deste laço é a seguinte:
repeat
comandos
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
until condição;
no repeat não é preciso utilizar begin e end para delimitar os comandos que fazem parte do
laço, pois o until já faz isso. Como a condição de parada só é testada no final do laço todos os
comandos serão executados pelo menos uma vez. Depois de terem sido executados, a condição
é testada. Se ele for verdadeira o programa não entrará de novo no laço, se for falsa repetirá to-
dos os comandos e testará novamente a condição até que ela seja verdadeira. Sempre que você
for utilizar loops tenha certeza de que há um momento em que o programa sairá deles. Caso
contrário, você terá um loop infinito.
42
Capítulo 7
Estruturas de Dados e Manipulação de
Arquivos
7.1 Variáveis Compostas Homogêneas
Até agora vimos apenas variáveis qe armazenam um único dado, as variáveis simples. Existe
um outro tipo de variáveis, as compostas. As variáveis compostas têm diversos dados armaze-
nados. Elas correspondem a diferentes posições de memória identificadas por um único nome.
A distinção entre essas posições é feita por índices.
Variáveis compostas podem ser unidimensionais (vetores) ou multidimensionais (registros).
Em Pascal ambas são chamadas de arrays. Tais variáveis podem ser ainda classificadas como
homogêneas (quando todos os dados são de um mesmo tipo) ou heterogêneas (quando as va-
riáveis são de tipos diferentes).
Vetores
A declaração de um vetor é feita da seguinte maneira:
<identificador> : array [<inicio>..<fim>] of <tipo>;
em que <tipo> é o tipo dos componentes da variável e início e fim são os limites inferior e su-
perior dos índices. Por exemplo, se queremos um vetor que armazene os nomes dos 30 alunos
de uma turma podemos fazer o seguinte:
nomes : array [1..30] of string;
Matrizes
As variáveis compostas homogêneas multidimensionais são chamadas matrizes. Se um vetor
pode ser representado por uma seqüência linear de elementos, uma matriz pode ser represen-
tada por uma tabela (se for bidimensional). Não há um limite para o número de dimensões de
uma matriz. Esse tipo de estrutura é comumente utilizado quando é necessária mais de uma
informação para distinguir um componente de outro. A sintaxe é bastante parecida com a dos ve-
tores, a única diferença é que para as matrizes é necessário informar os limites superior e inferior
de cada dimensão.
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
<identificador> : array [<i1>..<f1>,<i2>..<f2>,.......,<in>..<fn>] of <tipo>;
em que <i1>,<f1>,<i2>,<f2>, etc são os limites inferior e superior dos índices de cada dimen-
são da matriz.
O exemplo seguinte mostra um trecho de programa que armazena em um vetor o nome e o
endereço 10 pessoais, e depois os imprime na tela.
program Agenda;
var
i: byte;
lista : array [1..10,1..2] of string;
nome,endereco : string;
begin
for i:= 1 to 10 do
begin
writeln (’nome?’);
readln (nome);
lista[i,1] := nome;
writeln (’endereco?’);
readln (endereco);
lista[i,2] := endereco;
end;
for i:= 1 to 10 do
begin
writeln (i,’-> nome:’,lista[i,1],’ endereco:’,lista[i,2]);
end;
end.
7.2 Variáveis Compostas Heterogêneas
Registros
Um registro é um conjunto de dados de diferentes tipos relacionados. O registro é identificado
por um nome. Cada campo de um registro também tem um nome que o identifica dentro do re-
gistro. Por exemplo, para construir um registro que contém os dados de um filme declararíamos
o registro filme com os campos nome, gênero, autor, duração e censura. Esta declaração seria
feita da seguinte forma:
44
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
var
filme : record;
nome : string;
genero : string;
autor: string;
duração : real;
censura : integer;
end.
Podemos também declarar os registros como tipos e depois declarar variáveis destes tipos. A
vantagem deste tipo de declaração é que podemos declarar várias variáveis com a mesma es-
trutura, sem precisar repetir a declaração acima. Basta dizer uma vez quais serão os campos.
Depois podemos declarar quantas variáveis quisermos com os mesmos campos. No exemplo
abaixo declaramos um tipo endereço como sendo um registro com os campos cidade, bairro, rua,
número. Depois declaramos uma variável dadospessoais, que é um registro onde um dos cam-
pos é do tipo endereço. type
endereco = record
cidade : string;
bairro : string;
rua : string;
numero : integer;
end;
var
dadospessoais : record
nome: string;
idade : byte;
residencia : endereço;
telefone : string;
end;
Para acessar um dado de um registro usamos a sintaxe:
identificador.nomedocampo
Se quisermos, por exemplo, saber o autor do filme armazenado em filme podemos escrever:
writeln (filme.autor);
E para imprimir o nome da rua da pessoa cujos dados estão na variável dadospessoais fazemos
o seguinte:
writeln (dadospessoais.endereco.rua);
Arrays de Registros
Podemos construir arrays de registros da mesma forma que fizemos com variáveis simples. Para
fazer um vetor de filmes por exemplo teríamos a seguinte declaração:
Type
filme = record
nome : string;
genero : string;
45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
autor: string;
duração : real;
censura : integer;
end;
Var
filmes : array [1..15] of filme;
7.3 Arquivos
Arquivos
Arquivos são estruturas de dados armazenadas fora da memória principal e que podem ser aces-
sadas durante a execução do programa. Isto inclui discos rígidos, fitas magnéticas, disquetes,
DVDs ou qualquer outro dispositivo que possa ser acessado pelo computador onde ocorre a exe-
cução. Os arquivos podem ser de dois tipos, binários ou de texto. Ambos serão explicados a
seguir.
Declaração de Arquivos
A declaração de um arquivo é feita da seguinte forma:
type <nome do tipo> = file of <tipo>
var <nome da variável> : file of <tipo>
em que:
nome do tipo é o nome do identificador do novo tipo;
tipo é o tipo dos dados do arquivo, pode ser text, string, real, record, etc.
Exemplo 1
type
endereco = record
cidade : string;
bairro : string;
rua : string;
numero : integer;
end;
arqend : file of endereco;
var
arq1: arqend;
Exemplo 2
var
46
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
arquivotexto : text;
OBS: text é o tipo dos arquivos de texto.
Operações com arquivos
As principais operações que podem ser realizadas sobre arquivos são abertura, fechamento,
leitura e escrita. Antes de abrir um arquivo é preciso associá-lo à variável declarada no começo.
Para isso usamos o comando assign, que tem a seguinte sintaxe:
assign (nome da variável, nome do arquivo);
poderíamos por exemplo escrever:
assign (arquivo, ’nomes.txt’);
Depois de associar o nome do arquivo à variável precisamos abrí-lo. Existem diferentes tipos
de abertura do arquivo, dependendo do que será feito com ele:
Reset (nome da variável) - Abre o arquivo que foi associado à variável para leitura. Este co-
mando só funciona se o arquivo já existir, caso contrário haverá erro de execução;
Rewrite (nome da variável) - Abre o arquivo que foi associado à variável para escrita. Se o
arquivo ainda não existir ele será criado pelo programa. Porém, se ele já existir todo seu con-
teúdo será apagado. Só use este comando quando você quiser que os dados sejam apagados
ou quando o arquivo ainda não existir;
Append (nome da variável) - Abre o arquivo que foi associado à variável para escrita. Este
comando só funciona se o arquivo já existir, caso contrário haverá erro de execução. Se já hou-
ver algum conteúdo no arquivo ele será preservado e os novos dados serão escritos no final do
arquivo.
As operações básicas sobre um arquivo são leitura e escrita. Os comandos de leitura e es-
crita em arquivos são os mesmos que utilizamos para a entrada e saída padrão, read, readln,
write e writeln. A única diferença é que antes do nome da variável a ser lida ou escrita, ou da
string a ser escrita devemos escrever o identificador da variável correspondente ao arquivo. Veja
alguns exemplos:
Read (arqnomes, nome);
Readln (arqnomes, nome);
Write (arq1, identidade);
Writeln (arq2, ’Hello World’).
OBS: os comandos readln e writeln só podem ser usados para arquivos de texto, para arqui-
vos binários utiliza-se apenas read e write.
Se você abrir um arquivo para leitura não poderá escrever nele, e se abrí-lo para escrita não
47
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
poderá ler seus dados.
Depois de executar todas as operações necessárias em um arquivo você deve fechá-lo. Isto
garante a corretude dos dados após o término do programa. Nunca deixe um arquivo aberto após
a execução. O comando utilizado para fechar arquivos é o close e sua sintaxe é a seguinte:
close (nome da variável);
Arquivos binários
Existem algumas operações que só podem ser realizadas em arquivos binários. Algumas de-
las são descritas abaixo:
seek (nome do arquivo, n) - Acessa o n-ésimo registro do arquivo. n deve ser menor que o
número total de registros do arquivo. É importante lembrar que para o primeiro registro do ar-
quivo n=0. Assim, se queremos acessar o quinto registro do arquivo arq fazemos:
seek (arq, 4);
Se você não souber o número total de registros do arquivo use o comando filesize. A sua sintaxe
é:
filesize (nome do arquivo);
A linha de código abaixo imprime o número de registros do arquivo arq:
writeln(’numero de registros: ’,filesize(arq));
Localizando o fim do arquivo
Em muitas situações você precisará verificar se o arquivo já terminou ou se ainda há registros
nele. Para isto o Pascal tem a função eof (end of file) que retorna true se o arquivo já terminou e
false, caso contrário. Veja um exemplo de utilização desta função:
repeat
readln (arquivo, nome);
until eof (arquivo);
este bloco lê do arquivo uma string nome até que chegue o fim do arquivo.
7.4 Modularização
Modularizar um programa significa dividí-lo em pequenas partes simples. Cada parte deve
realizar uma tarefa e ao final o conjunto das partes deve ser capaz de fazer tudo que a espe-
cificação do programa exige. Estas partes ou subprogramas em Pascal são classificadas como
funções ou arquivos, entre as vantagens de se modularizar um programa estão:
• Maior legibilidade;
• Facilidade de manutenção;
• Possibilidade de divisão do trabalho para um grupo de pessoas;
48
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Possibilidade de reaproveitamento de código (um trecho do programa que se repete várias
vezes poderá ser escrito apenas uma vez).
Nas próximas páginas você aprenderá a utilizar procedimentos e funções.
7.5 Procedures
Procedimentos são subprogramas, ou seja, são programas menores que ficam dentro de um
programa principal. Sendo assim, sua estrutura é bastante semelhante à dos programas vistos
até agora.
procedure <nome do procedimento> (lista de parâmetros);
var
declaração de variáveis
begin
comandos
end;
A primeira diferença que pode ser vista entre um programa principal e um procedure é a lista
de parâmetros. Parâmetros são variáveis declaradas fora do procedure que serão utilizadas den-
tro dele. É por meio deles que é feita a comunicação do procedimento com a parte do programa
externa a ele. Não é obrigatório que um subprograma receba parâmetros, mas muitas vezes eles
ajudam a possibilidade de reutilização do software. O programa seguinte contém um procedi-
mento que troca os valores das variáveis v1 e v.
procedure troca (var v1, v2: integer);
var aux: integer;
begin
aux:=v1;
v1:=v2;
v2:=v1;
end;
Na seção var são declaradas as variáveis locais do procedure. Também é possível declarar
nesta parte constantes e tipos, como foi feito em seções anteriores do curso. Os procedures
são escritos antes do programa principal. A estrutura de um programa com um procedure é a
seguinte:
Program <nome do programa>;
const declarações de contantes tipos e variáveis globais que forem necessárias
type
var
Procedure
.
begin
.
.
49
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
end;
Begin
.
.
.
End.
Note que os comandos do programa principal só começam depois de todos os procedures. Para
utilizar um procedimento dentro do programa principal basta escrever no local onde ele deve ser
chamado, seu nome e os parâmetros de entrada, caso existam, por exemplo:
Program CalculaResto;
Procedure resto(a,b,r:integer);
begin
r:= a mod b;
writeln (’o resto e; ’, r);
end;
var
a1,a2,r1: integer;
begin
writeln (r1);
writeln (’a1?’);
read (a1);
writeln (’a2?’);
read (a2);
resto (a1,a2,r1);
writeln (’r1: ’, r1);
end.
Neste programa a linha resto (a1,a2,r1); chama o procedure resto com os parâmetros a1, a2,
r1. Você deve ter reparado que mesmo após a execução do procedimento a variável r1 continuou
tendo o valor com o qual foi inicializada, 0. Isto aconteceu porque os procedimentos não alteram
o valor dos parâmetros a não ser que essa intenção seja explicitada. No último exemplo após a
execução de resto todos os parâmetros mantiveram os valores que tinham antes da chamada de
resto. Se o valor dos parâmetros for ser modificado após a execução do procedure, usamos a
palavra var antes da lista de parâmetros, como no próximo exemplo:
Program CalculaResto;
Procedure resto(var a,b,r:integer);
begin
r:= a mod b;
writeln (’o resto e; ’, r);
end;
50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
var
a1,a2,r1: integer;
begin
r1 := 0;
writeln (’r1: ’, r1);
writeln (r1);
writeln (’a1?’);
read (a1);
writeln (’a2?’);
read (a2);
resto (a1,a2,r1);
writeln (’r1: ’, r1);
end.
Exercício
Faça uma pesquisa sobre a técnica de ordenação booble sort. Então, crie um programa que
use o procedure, troque e ordene em ordem crescente os dados de um vetor de inteiros de tama-
nho 5.
7.6 Functions
Functions
Funções também são subprogramas. A diferença entre functions e procedures é que as primeiras
retornam um valor ao final de sua execução, os procedures não. A sintaxe de uma function é a
seguinte:
Function <nome da function> (lista de parâmetros) : tipo retornado;
var
declaração de variáveis
begin
comandos
end;
onde tipo retornado é o tipo do valor que a função retorna. A função do exemplo seguinte re-
cebe como parâmetros a altura e a largura de um retângulo e retorna o comprimento de sua
diagonal.
function Diagonal (altura, largura : real): real;
begin
Diagonal := sqrt (sqr(altura)+sqr(largura));
end;
Agora podemos escrever um programa maior que pergunta ao usuário a altura, largura e pro-
51
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
fundidade de um paralelepípedo e calcula sua diagonal. Para fazer isso será preciso primeiro
calcular a diagonal da base do paralelepípedo (formada por largura e profundidade). Depois cal-
culamos a diagonal do retângulo formado pela diagonal da base e a altura do paralelepípedo, que
é igual a diagonal do paralelepípedo.
Program DiagParalelepipedo;
function Diagonal (altura, largura : real): real;
begin
Diagonal := sqrt (sqr(altura)+sqr(largura));
end;
var
altura, largura, profundidade : real;
diag: real;
aux: real;
begin
writeln (’altura?’);
readln (altura);
writeln (’largura?’);
readln (largura);
writeln (’profundidade’);
readln (profundidade);
aux := Diagonal (largura, profundidade);
diag := Diagonal (aux, altura);
writeln (’A diagonal do paralelepipedo e: ’,diag);
end.
52

Mais conteúdo relacionado

Mais procurados

Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguroTiago
 
Selinux
SelinuxSelinux
SelinuxTiago
 
Screen
ScreenScreen
ScreenTiago
 
De javaparapython
De javaparapythonDe javaparapython
De javaparapythonTiago
 
Tunelamento
TunelamentoTunelamento
TunelamentoTiago
 
Tcl tk
Tcl tkTcl tk
Tcl tkTiago
 
X dialog
X dialogX dialog
X dialogTiago
 
Wx python
Wx pythonWx python
Wx pythonTiago
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotprojectTiago
 
Drupal
DrupalDrupal
DrupalTiago
 
Squid guard
Squid guardSquid guard
Squid guardTiago
 

Mais procurados (20)

Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
 
Xdmcp
XdmcpXdmcp
Xdmcp
 
Selinux
SelinuxSelinux
Selinux
 
Screen
ScreenScreen
Screen
 
De javaparapython
De javaparapythonDe javaparapython
De javaparapython
 
Tunelamento
TunelamentoTunelamento
Tunelamento
 
Tcl tk
Tcl tkTcl tk
Tcl tk
 
X dialog
X dialogX dialog
X dialog
 
Wx python
Wx pythonWx python
Wx python
 
Uml
UmlUml
Uml
 
Qemu
QemuQemu
Qemu
 
Samba
SambaSamba
Samba
 
Nvu
NvuNvu
Nvu
 
Inkscape
InkscapeInkscape
Inkscape
 
Zope
ZopeZope
Zope
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
Drupal
DrupalDrupal
Drupal
 
Vim
VimVim
Vim
 
Squid guard
Squid guardSquid guard
Squid guard
 
Sql
SqlSql
Sql
 

Semelhante a Pascal

Linguagem ruby
Linguagem rubyLinguagem ruby
Linguagem rubyTiago
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linuxTiago
 
Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodleTiago
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on railsTiago
 
Inkscape
InkscapeInkscape
InkscapeTiago
 
Java basico
Java basicoJava basico
Java basicoTiago
 
Nessus
NessusNessus
NessusTiago
 
Programacao gtk
Programacao gtkProgramacao gtk
Programacao gtkTiago
 
Quanta
QuantaQuanta
QuantaTiago
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoopsTiago
 
Javascript
JavascriptJavascript
JavascriptTiago
 
Nagios2
Nagios2Nagios2
Nagios2Tiago
 
Fw builder
Fw builderFw builder
Fw builderTiago
 
Dovecot
DovecotDovecot
DovecotTiago
 
Pen linux
Pen linuxPen linux
Pen linuxTiago
 

Semelhante a Pascal (20)

Linguagem ruby
Linguagem rubyLinguagem ruby
Linguagem ruby
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linux
 
J2me
J2meJ2me
J2me
 
Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
Ltsp
LtspLtsp
Ltsp
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Inkscape
InkscapeInkscape
Inkscape
 
Plone
PlonePlone
Plone
 
Java basico
Java basicoJava basico
Java basico
 
Nessus
NessusNessus
Nessus
 
Squid
SquidSquid
Squid
 
Programacao gtk
Programacao gtkProgramacao gtk
Programacao gtk
 
Quanta
QuantaQuanta
Quanta
 
Horde
HordeHorde
Horde
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoops
 
Javascript
JavascriptJavascript
Javascript
 
Nagios2
Nagios2Nagios2
Nagios2
 
Fw builder
Fw builderFw builder
Fw builder
 
Dovecot
DovecotDovecot
Dovecot
 
Pen linux
Pen linuxPen linux
Pen linux
 

Mais de Tiago

6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascalTiago
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascalTiago
 
Python bge
Python bgePython bge
Python bgeTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharpTiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpTiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpTiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpTiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharpTiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantesTiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharpTiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafaelTiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharpTiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
C# o basico
C#   o basicoC#   o basico
C# o basicoTiago
 
C# classes
C#   classesC#   classes
C# classesTiago
 

Mais de Tiago (20)

6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 
C# classes
C#   classesC#   classes
C# classes
 

Último

Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxLuizHenriquedeAlmeid6
 
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptxAULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptxLaurindo6
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...licinioBorges
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptxthaisamaral9365923
 
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptxANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptxlvaroSantos51
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxRonys4
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficasprofcamilamanz
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 

Último (20)

Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptxSlides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
Slides Lição 04, Central Gospel, O Tribunal De Cristo, 1Tr24.pptx
 
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptxAULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
AULA SOBRE AMERICA LATINA E ANGLO SAXONICA.pptx
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
11oC_-_Mural_de_Portugues_4m35.pptxTrabalho do Ensino Profissional turma do 1...
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
 
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptxANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
ANATOMIA-EM-RADIOLOGIA_light.plçkjkjiptx
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficas
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 

Pascal

  • 2. Sumário I Sobre essa Apostila 3 II Informações Básicas 5 III GNU Free Documentation License 10 IV Pascal 19 1 O que é Pascal 20 2 Plano de ensino 21 2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.6 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.7 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3 Introdução 24 3.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4 Conceitos Iniciais 26 4.1 Constantes e variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.2 Declarações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.3 Expressões Aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.4 Expressões Lógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.5 Comando de Atribuição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5 Começando a Programar 32 5.1 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.2 Entrada e Saída . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6 Condicionais e Estruturas de Repetição 36 6.1 Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.2 For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 1
  • 3. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 6.3 While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.4 Repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 7 Estruturas de Dados e Manipulação de Arquivos 43 7.1 Variáveis Compostas Homogêneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7.2 Variáveis Compostas Heterogêneas . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 7.3 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7.4 Modularização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 7.5 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 7.6 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2
  • 4. Parte I Sobre essa Apostila 3
  • 5. 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 Beatriz Marília Ferreira Ribeiro(beatriz@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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. Parte III GNU Free Documentation License 10
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 21. Capítulo 1 O que é Pascal Esta linguagem é a melhor escolha para aqueles que estão começando a programar por ser extremamente bem estruturada e dar pouca liberdade para que o programador cometa erros. 20
  • 22. Capítulo 2 Plano de ensino 2.1 Objetivo Qualificar técnicos e programadores na linguagem de programação Pascal. 2.2 Público Alvo Técnicos e Programadores que desejam trabalhar com Pascal ou apenas conhecer esta lin- guagem. 2.3 Pré-requisitos Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci- mento básico acerca da lógica de programação. 2.4 Descrição O curso de Introdução ao Python será realizado na modalidade EAD e utilizará a plataforma Moodle como ferramenta de aprendizagem. Ele é composto de um módulo de aprendizado que será dado na primeira semana e um módulo de avaliação que será dado na segunda 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: Duração Descrição do módulo 1 Semana lições 1 a 5, avaliação final Todo o material está no formato de livro, e estará disponível ao longo do curso. O livro poderá ser acessado quantas vezes forem necessárias. Aconselhamos a leitura de "Ambientação do 21
  • 23. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Moodle", para que você conheça o produto de Ensino à Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma. Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudado anteriormente que também conterá perguntas sobre os textos indicados. Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova. Os instrutores estarão à sua disposição ao longo de todo curso. Qualquer dúvida deve ser disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e esclarecimentos. Semana 1 • Introdução; • Conceitos iniciais; • Começando a programar; • Condicionais e estruturas de repetição; • Estruturas de dados e manipulação de arquivos. 2.6 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; • 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. 2.7 Bibliografia • http://equipe.nce.ufrj.br/adriano/c/apostila/tipos.htm • http://www.fec.unicamp.br/reenge/aulas/pascal/index.html • http://br.geocities.com/sdiasneto/algo1/var.htm • arquivos.coinfo.cefetpb.edu.br/ fred/logalg/material/ApostilaAlgoritmosPascal.pdf 22
  • 24. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • http://pt.wikipedia.org/wiki/Operadores_l%C3%B3gicos • Apostila Algoritmos e Pascal um curso básico, Frederico Costa Guedes Pereira • Uso básico de arquivos - Flávio Mendes - http://www.ita.br/ flavio/aprende/pascal/p_files.htm 23
  • 25. Capítulo 3 Introdução 3.1 Introdução É uma linguagem de programação estruturada que recebeu este nome em homenagem ao matemático Blaise Pascal. Foi criada em 1970 pelo suíço Niklaus Wirth, tendo em mente encora- jar o uso de código estruturado. O próprio Niklaus Wirth diz que Pascal foi criada, simultaneamente, para ensinar programação estruturada e para ser utilizada em sua fábrica de software. A linguagem é extremamente bem estruturada e muito adequada para ensino de linguagens de programação. É, provavelmente, uma das linguagens mais bem resolvidas entre as linguagens estruturadas, e certamente, um dos exemplos de como uma linguagem especificada por uma pessoa pode ser bem melhor do que uma linguagem especificada por um comitê. Pascal originou uma enorme gama de dialetos, podendo também ser considerada uma família de linguagens de programação. Grande parte de seu sucesso se deve à criação, na década de 80, da linguagem Turbo Pascal, inicialmente disponível para computadores baseados na arquitetura 8086 (com versões para 8080 no seu início). Pascal é, normalmente, uma das linguagens de escolha para ensinar programação, junto com Scheme, C, e Fortran. 3.2 Pré-requisitos O objetivo deste curso não é ensinar a lógica de programação, assim, ele será melhor apro- veitado pelos alunos que já tiverem conhecimentos básicos sobre ela. Será necessário instalar um compilador de Pascal no seu computador para fazer os exercícios práticos. Escolha um dos compiladores da lista e instale antes de começar o curso. Para instalar o free pascal: #apt-get update #apt-get install fp-compiler Como compilar e executar. Sempre que você escrever um programa em Pascal ou quiser testar algum dos exemplos faça o seguinte: • Abra um editor de texto qualquer (gedit, kate, kedit, etc) e escreva seu programa (ou copie e cole o exemplo); 24
  • 26. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • Salve o arquivo com a extensão .pas, por exemplo, teste.pas; • Abra um terminal e digite fpc <nome_do_arquivo.pas>, isto irá compilar seu programa. Se houver algum erro nele que impessa, será exibida uma mensagem na tela dizendo qual o erro; • Digite, então ./<nome_do arquivo>, agora você não deve digitar o .pas do nome do arquivo. O ./ executa o programa. 25
  • 27. Capítulo 4 Conceitos Iniciais 4.1 Constantes e variáveis Constantes e variáveis são elementos básicos manipulados pelos programas. Ambos armaze- nam dados. As constantes armazenam dados que terão o mesmo valor durante toda a execução do programa. As variáveis armazenam dados que podem ter seus valores alterados durante a execução. Todas as constantes e variáveis de um programa em Pascal precisam ser declaradas no início do programa. Assim o computador poderá reservar o espaço de memória que será necessário para a execução do programa. Cada constante ou variável tem um nome que a identifica, ou um identificador, e um tipo. Os identificadores servem para que se tenha acesso aos dados, podendo vê-los e modificá-los quando for necessário. Existem algumas regras para os identificadores, são elas: • O primeiro caractere de um identificador deve ser, obrigatoriamente, uma letra; • Os caracteres seguintes podem ser letras ou dígitos; • Não é permitido o uso de caracteres em branco ou quaisquer outros que não sejam letras ou dígitos; • A linguagem Pascal não diferencia as letras maiúsculas das minúsculas, assim, Variavel3 e variavel3 são considerados o mesmo identificador. Os tipos de dados do Pascal serão explicados a seguir: Para os dados numéricos o Pascal tem diferentes tipos tanto para inteiros quanto para reais. A diferença entre os tipos de cada um desses grupos é o intervalo de valores que cada um suporta. Por exemplo, os tipos Shortint e Integer armazenam inteiros. A diferença entre eles é que um dado do tipo Shortint pode assumir valores entre -128 e 127 e os dados do tipo Integer podem assumir valores de -32768 a 32767. A lista seguinte mostra todos os tipos de dados numéricos da linguagem Pascal e o intervalo de valores suportado por cada tipo. Tipos de dados inteiros: • Shortint -128 a 127; • Integer -32768 a 327667; • Longint -2147483648 a 2147483647; 26
  • 28. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • Byte 0 a 255; • Word 0 a 65535. Tipos de dados reais: • Real 2,9 * 10-39 a 1,7 * 1038; • Single 1,5 * 10-45 a 3,4 * 1038; • Double 5,0 * 10-324 a 1,7 * 10308; • Extended 3,4 * 10-4932 a 1,1 * 104932; • Comp -9,2 * 1018 a 9,2 * 1018. É importante escolher o tipo certo de dado para cada situação para que não haja desperdício de memória. Por exemplo, uma variável dia que representa os dias do mês poderá ter apenas valores inteiros de 0 a 31. Então, não faz sentido escolher para esta variável o tipo de dados real, ou longint. O tipo Byte é capaz de armazenar todos os valores possíveis de dia e é o que menos ocupa memória (quanto menor o intervalo de valores suportado pelo tipo menor será a quantidade de memória alocada), então é a melhor escolha a ser feita. O tipo Shortint também poderia ser escolhido, pois ocupa a mesma quantidade de memória do tipo Byte e é capaz de armazenar valores inteiros de 0 a 31. Além dos tipos dados numéricos, o Pascal tem tipos de dados lógicos e de caracteres, mos- trados abaixo: Tipos de dados caracteres: • String; • Char. Tipos de dados lógicos: • True; • False. As variáveis do tipo char armazenam um caractere (isto é, uma letra, um dígito ou um símbolo especial). As do tipo string armazenam uma cadeia de caracteres, podendo formar palavras. Uma string pode ter no máximo 255 caracteres. Os dados do tipo lógico só podem assumir os valores verdadeiro (true) ou falso (false). Uma variável ou constante lógica deve ser declarada como boolean. 4.2 Declarações Declaração de Variáveis Você já sabe que as variáveis tem de ser declaradas, então, vejamos como se faz isto. Var nome: string [30]; 27
  • 29. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF idade: shortint; salário: comp; Antes das declarações utilizamos a palavra reservada var, que indica que as próximas linhas terão declarações de variáveis. Depois a sintaxe é a seguinte: <nome da variável> : <tipo>. Observe que ao final de cada linha é necessário usar um ponto-e-vírgula. Se houver mais de uma variável do mesmo é possível escrevê-las na mesma linha. Neste caso, o nome das variá- veis deve ser separado por vírgulas, como no exemplo abaixo: nota1, nota2, nota3 : real. Também é permitido declarar variáveis de tipos diferentes em uma linha: nome: string [30]; idade: shortint. Porém, como você deve ter percebido, isto dificulta a legibilidade do programa. Em alguns casos a declaração de muitas variáveis do mesmo tipo em uma linha também causa este problema. Declaração de Constantes Para declarar uma constante em Pascal basta escrever seu identificador e seu valor, precedi- dos da palavra const. Como foi feito abaixo: const nome = ’Ana Maria de Souza’; idade = 35; O valor atribuído a uma constante na declaração pode ser um real, inteiro, uma string ou um valor lógico. A sintaxe de uma declaração de constante é sempre igual a do exemplo acima: <identificador> = <valor>; 4.3 Expressões Aritméticas As operações aritméticas básicas do Pascal são: soma, subtração, multiplicação, divisão, divisão inteira e resto. As operações de soma e subtração têm menor prioridade que as demais. Entre operações com a mesma prioridade será executada primeiro a que estiver mais a esquerda na expressão. A representação dos operadores em Pascal é mostrada a seguir: + soma; - subtração; * multiplicação; / divisão; 28
  • 30. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF div divisão de inteiros; mod resto da divisão de inteiros. Os operadores +, -, * e / podem ser usados tanto para reais quanto para inteiros. Os operado- res div e mod só podem ser usados para números inteiros. Em expressões com os operadores +, - e * se um dos operandos for real o resultado será, obrigatoriamente, real. O operador / só produz resultados reais, independentemente, do tipo dos operandos. Veja alguns exemplos: Considere i1 e i2 variáveis inteiras, e r1 e r2 variáveis reais, • i1 + i2 tem resultado inteiro; • i1 + r1 tem resultado real; • i1 / i2 tem resultado real; • i1 * i2 tem resultado inteiro; • i1 mod i2 tem resultado inteiro; • i1 mod r1 é uma operação inválida, já que os operandos de mod tem de ser, necessaria- mente, inteiros. O Pascal tem, também, funções para realizar operações diferentes das que já foram citadas, como seno e exponenciação. A tabela a seguir mostra estas funções: Função Resultado Tipo do resultado ln(ea) logarítmo natural de ea real exp(ea) eelevado a ea real abs(ea) módulo de ea integer ou real trunc(ea) valor truncado de ea integer round(ea) valor arredondado de ea integer sqr(ea) ea elevado ao quadrado integer ou real sqrt (ea) raíz quadrada de ea real sin(ea) seno de ea real cos(ea) cosseno de ea real arctan(ea) arco tangente de ea real Obs: 1. ea é uma expressão aritmética. 2. truncar um número significa considerar apenas sua parte inteira. Por exemplo, truncando 4,87 teríamos 4 como resultado. Pergunta: De que tipo deverão ser as variáveis a, b, c, d, e para que o seguinte trecho de programa esteja correto? a := (b+c)/(d mod e) 29
  • 31. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 4.4 Expressões Lógicas Uma expressão lógica é uma expressão à qual podem ser atribuídos os valores verdadeiro ou falso. Chamamos de relação uma expressão que compara dois valores do mesmo tipo. Freqüente- mente, utiliza-se uma combinação de relações com expressões lógicas nos programas em Pascal. Os operadores relacionais estão listados na tabela seguinte. > maior >= maior ou igual < menor <= menor ou igual = igual <> diferente Podemos utilizar os operadores relacionais tanto para comparar dados númericos quanto ca- racteres. A comparação entre strings é feita caractere por caractere de acordo com a ordem alfabética, assim, ’ana’ < ’bruno’. Cada comparação retorna um valor lógico. Por exemplo, se a = 2 e b = 2.5, a comparação a > b retornará o valor false. Operador lógico, assim como um operador aritmético, é uma classe de operação sobre va- riáveis ou elementos pré-definidos. AND, OR e NOT são os principais operadores lógicos, base para a construção de sistemas digitais e da Lógica proposicional. Os operadores AND e OR são operadores binários, ou seja, necessitam de dois elementos, enquanto o NOT é para um único elemento. Uso: • x1 AND x2; • x1 OR x2; • NOT x1. Descrição: AND: operador lógico onde a resposta da operação é verdade (1) somente se ambas as variáveis forem verdade. x1 x2 x1 AND x2 0 0 0 0 1 0 1 0 0 1 1 1 OR: operador lógico onde a resposta da operação é verdade (1) se pelo menos uma das variáveis de entrada for verdade. x1 x2 x1 OR x2 0 0 0 0 1 1 1 0 1 1 1 1 30
  • 32. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF NOT: operador lógico que representa a negação (inverso) da variável atual. Se ela for verdade, torna-se falsa e vice-versa. x1 NOT x1 0 1 OBS: nas tabelas acima o valor 0 equivale a false e o valor 1 equivale a true. Pergunta: Se "a"é uma variável do tipo boolean, qual o valor de "a"depois de ser executada a seguinte linha de código: a := (b or c) and d; onde as variáveis b, c e d têm, respectivamente, os valores false, true e false. 4.5 Comando de Atribuição A função de um comando de atribuição é modificar o valor de uma variável. A sintaxe de uma atribuição é a seguinte: <nome da variável> := <novo valor>; OBS: o novo valor pode ser uma expressão, por exemplo: salarioliquido := salariobruto - (dependentes * mensalidade); onde mensalidade é o valor pago para cada um dos dependentes para que ele tenha direito ao plano de saúde do funcionário. Antes de usar um comando de atribuição lembre-se de que a variável e o novo valor devem ser de tipos compatíveis. Por exemplo, se idade é uma variável inteira não poderíamos escrever idade := ’maria’; Mesmo entre um valor inteiro e uma variável inteira é preciso tomar algum cuidado para que não haja erros. Neste caso, o importante é verificar que o tipo de dado da variável é capaz de armazenar o novo valor. Veja um exemplo: numerodealunos := 400; se numerodealunos for do tipo integer não haverá nenhum problema com esta atribuição, po- rém, se ele for do tipo byte não será possível atribuir o novo valor a ele, pois variáveis deste tipo só podem assumir valores entre 0 e 255. O mesmo acontece com os reais. Antes de atribuir um valor a uma variável tenha certeza de que ela será capaz de armazenar este valor. O comando de atribuição também pode ser usado para variáveis lógicas (boolean). Veja um exemplo: aprovado := false; onde aprovado é uma variável booleana que recebe valor verdadeiro se o aluno obteve média maior ou igual a 6 e falso, caso contrário. 31
  • 33. Capítulo 5 Começando a Programar 5.1 Hello World Agora que você já sabe um pouco sobre a linguagem Pascal começaremos a programar. Todo programa em Pascal tem a seguinte estrutura: Program <nome do programa>; var <declarações de variáveis> begin <instruções> end. Se o programa tiver constantes basta declará-las logo depois das variáveis, como foi mostrado na primeira lição. As palavras begin e end delimitam o bloco principal do programa, onde são escritos os comandos. program Hello; var mensagem : string; begin mensagem := ’Hello World’; write (mensagem); end. Copie e cole o programa acima no editor de texto. Salve-o com o nome de hello.pas, agora abra o terminal, entre na pasta que você salvou o hello.pas e digite os seguintes comandos: $ fpc hello.pas $ ./hello O primeiro comando compila o programa, isto é, traduz o seu programa em Pascal para um código objeto, que posteriormente resultará num programa executável. O segundo comando exe- 32
  • 34. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF cuta o executável gerado após a compilação. Se tudo der certo depois destes comandos você verá na tela a frase Hello World. A maior parte do programa você já deve ter entendido. Primeiro declaramos uma variável do tipo string chamada mensagem. Depois, dentro do bloco principal do programa, atribuímos a mensagem à string Hello World. A última parte é a que você não tinha aprendido ainda, write (mensagem); faz com que o conteúdo da variável mensagem seja impresso na tela. Na próxima página você aprenderá mais alguns comandos de entrada e saída. 5.2 Entrada e Saída Na página anterior foi usado um comando que ainda não tinha sido apresentado neste curso, o comando write. Você, provavelmente, percebeu que a função deste comando é escrever uma mensagem na tela. Existem outros comandos que têm a função de receber dados do usuário e mostrar informações a ele. Eles são chamados comandos de entrada e saída, e serão apresen- tados a seguir. Entrada • read O comando read é usado para ler dados que o usuário digita. A sintaxe desse comando é a seguinte: read (lista de identificadores); Quando a lista de identificadores tiver mais de um identificador, separe-os com vírgulas. Quando o programa é executado, os valores devem ser escritos separados por espaços. • readln O readln também tem como função ler dados da entrada padrão. Sua sintaxe é a seguinte: readln (lista de identificadores); A diferença entre estes dois comandos é que se em uma linha de entrada forem digitados mais valores do que os que o programa precisa ler no momento, o readln ignora os próximos valores. O read, ao contrário, utilizará estes valores como entradas na próxima vez que o programa tiver um comando de entrada. Veja um exemplo: program funcoesdeleitura; var i1, i2, i3: integer; r1, r2, r3: real; begin read (i1,r1); read (i2,r2); read (i3,r3); 33
  • 35. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF end. Suponha que o programa foi executado e o usuário digitou os seguintes valores: 1 3.2 3 3.8 2 2.4 <-’ 5 4.2 8 2.5 9 4.2 <-’ 6 4.3 7 7.3 4 5.5 <-’ em que o símbolo <-’ representa a tecla enter. Neste caso, as variáveis i1, i2, i3 e r1, r2, r3 receberiam os seguintes valores: i1 = 1 r1 = 3.2 i2 = 3 r2 = 3.8 i3 = 2 r3 = 2.4 Se o mesmo programa tivesse sido escrito substituindo os read por readln, os valores das va- riáveis seriam os seguintes: i1 = 1 r1 = 3.2 i2 = 5 r2 = 4.2 i3 = 6 r3 = 4.3 Isto porque depois de fazer r1 = 3.2 os demais valores da primeira linha seriam ignorados. O segundo read utilizaria os valores da segunda linha, fazendo i2 = 5 e r2 = 4.2. Saída Assim como para a entrada, existem dois comandos para saída, write e writeln. A sintaxe desses comandos é idêntica a dos mostrados anteriormente. write (lista de identificadores); writeln (lista de identificadores); Como ja foi dito, a funcão deles é imprimir algo na tela. No lugar da lista de identificadores podemos colocar valores constantes, strings, expressões e etc. Veja alguns exemplos: writeln (’Bom Dia’); writeln (’idade: ’,idade); writeln (’media = ’, lições*0.7 + prova*0.3); Se as variáveis tivessem os valores: idade = 18; lições = 9; prova = 10. Os comandos acima teriam as seguintes saídas: 34
  • 36. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Bom Dia; idade: 18; media = 9.3. A diferença entre os comandos write e writeln é que o segundo depois de imprimir a mensa- gem muda o cursor para a próxima linha. Assim, se houver varios writeln no programa a saída de cada um deles será escrita em uma linha. Por outro lado, se houver vários write, todas as saídas serão escritas na mesma linha. Exercício 1 Escreva um programa que leia os dados de uma pessoa, nome, idade, número de identidade, telefone e endereço, e os imprima na tela. 35
  • 37. Capítulo 6 Condicionais e Estruturas de Repetição 6.1 Condicionais Os programas em Pascal são executados sequencialmente, isto é, os comandos são execu- tados um a um na ordem em que foram escritos. Porém, existem algumas estruturas que podem mudar esta ordem. Por exemplo, usando uma estrutura de repetição pode-se fazer com que o próximo comando executado não seja o da próxima linha, mas o que está cinco linhas acima do último comando executado. A seguir serão apresentadas as estruturas de decisão e repetição. Estruturas de Decisão Se você já conhece a lógica de programação ou alguma outra linguagem, provavelmente, se lembrará de que é muito comum associar determinados comandos em um programa à condi- ções. Por exemplo, se (média >= 6.0): então aprovado := true; senão aprovado := false. Neste caso a condição para que uma pessoa seja aprovada é que sua média final seja maior ou igual a 6. Se isto não acontecer ela será reprovada (aprovado = false). A sintaxe das estrutu- ras de repetição em Pascal é a seguinte: If condição; then comandos; else comandos. O que essa estrutura faz é primeiro verificar se a condição é verdadeira ou falsa. Se for ver- dadeira, os comandos que vêm depois do then serão executados. Se for falsa os comandos depois do else serão executados. O else não é necessário. Você pode usar uma condição ape- nas para decidir se um comando será ou não executado, sem precisar dizer o que será feito se a condição não for verdadeira. Quando há mais de um comando a ser executado no then ou no else precisamos sinalizar quais são eles, caso contrário seria impossível distinguir estes coman- 36
  • 38. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF dos dos que vem depois da estrutura de repetição e devem ser executados independentemente da condição. Veja o exemplo abaixo: If (hora >= 16.0) then write (’O horário de funcionamento já foi encerrado’); write (’Obrigado por visitar nossa página’); Neste caso a linha write (’Obrigado por visitar nossa página’); deverá ser executada apenas se a condição hora >= 16.0 ou em todos os casos? Seria impossível saber isso. Por isso, usamos blocos de comandos que delimitam quais comandos estão dentro de cada parte da estrutura. As palavras utilizadas para isso são begin e end. Veja outro exemplo: If (hora >= 16.0) then begin write (’O horário de funcionamento já foi encerrado’); write (’Por favor retorne amanha’); end else begin write (’por favor digite seu número de identificação’); read (numero); write (’por favor digite a senha de acesso’); read (senha); end; write (’Obrigado por visitar nossa página’); Neste caso fica claro que quando a condição for verdadeira será executado o bloco begin write (’O horário de funcionamento já foi encerrado’); 37
  • 39. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF write (’Por favor retorne amanha’); end e se a condição for falsa será executado o seguinte: begin write (’por favor digite seu número de identificação’); read (numero); write (’por favor digite a senha de acesso’); read (senha); end; e o comando write (’Obrigado por visitar nossa página’); será executado independentemente da condição. 6.2 For Outra forma de mudar a ordem seqüencial de execução de um programa é através das estru- turas de repetição ou laços. Estas estruturas são usadas para que um mesmo bloco de comandos seja executado várias vezes. No Pascal existem três diferentes formas de fazer isto, for, while e repeat. For A primeira forma de laço estudada neste curso será o for. Nela é sempre usado um contador, que controla o número de vezes que o bloco será repetido. A sintaxe do for é a seguinte: for contador := valor-inicial to valor-final do begin bloco de comandos end; ou for contador := valor-inicial downto valor-final do begin bloco de comandos end; Onde contador é a variável responsável por determinar quantas vezes o bloco ainda será exe- cutado. A cada vez que o laço é executado o valor de contador é incrementado (quando usamos 38
  • 40. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF o to) ou decrementado (quando usamos o downto). É importante observar que o contador deve ser sempre declarado como uma variável inteira. O laço será repetido até que o contador seja maior que o valor final, se for usado to, ou menor que ele, se for usado o downto. Observe os valores assumidos pelo contador na execução do seguinte programa: program UsandoFor; var contador: byte; begin for contador := 1 to 10 do writeln (’contador= ’, contador); writeln (fim do laco); writeln (’contador= ’, contador); end. A saída impressa na tela será a seguinte: contador= 1 contador= 2 contador= 3 contador= 4 contador= 5 contador= 6 contador= 7 contador= 8 contador= 9 contador= 10 fim do laço contador= 10 Ao final de cada execução do laço a variável contador é incrementada automaticamente. Isso acontece até que seu valor seja igual ao valor final (10). Então, o próximo comando depois do for é executado. Observe que após o fim das repetições o contador terá o último valor que recebeu no for, 10. Os valores inicial e final não precisam ser, necessariamente, constantes podem ser variáveis inteiras, como no exemplo abaixo: program UsandoFor; var valorinicial, valorfinal : byte; contador : byte; begin writeln (’digite o valor inicial’); readln (valorinicial); 39
  • 41. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF writeln (’digite o valor final’); readln (valorfinal); for contador := valorinicial to valorfinal do writeln (’contador= ’, contador); writeln (’fim do laco’); writeln (’contador= ’, contador); end. Exercício: Agora que você já sabe como utilizar o laço for, escreva um programa que receba as notas finais de oito alunos da turma do curso de Pascal e calcule a média da turma. Como a média é igual a (soma das notas)/8, você precisará de uma variável que armazene a soma das notas. Depois de ter lido todas elas basta dividir o valor desta variável por 8. Depois modifique seu programa para que o usuário possa informar qual o número de alunos da turma. 6.3 While O for é um laço do tipo contado. Ou seja, há uma variável que conta quantas vezes ele já foi executado e o fim da execução acontece quando esta variável atinge um valor máximo ou mínimo. Os outros dois tipos de loops do Pascal (while e repeat) não são contados, são condicionais. Isto quer dizer que a execução não tem um número definido de vezes para acontecer. Seu fim de- pende de uma condição. Veja a sintaxe do while: while (condição) do begin comandos end; No exemplo abaixo o usuário pode definir até quando o loop será executado. A situação é a seguinte, deseja-se calcular a renda per capita de um condomínio, porém, o número de morado- res é desconhecido. O programa é executado até que a renda de todos os moradores já tenha sido digitada. Para que o cálculo seja feito corretamente, se um morador não tem renda alguma será digitado para ele o valor 0. A execução do loop terminará quando for digitado o valor -1 para a renda. A condição é uma expressão lógica, que pode assumir os valores verdadeiro ou falso. Antes de entrar no laço esta condição é testada. Se ela for verdadeira os comandos de dentro do while serão executados, se for falsa o loop terminará. Program RendaPerCapita; var 40
  • 42. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF renda : integer; rendatotal : integer; nmoradores : integer; percapita : real; begin renda := 0; rendatotal := 0; nmoradores := 0; while (renda <> -1) do begin writeln (’digite a renda do morador’); readln (renda); if (renda >= 0) then begin rendatotal := rendatotal + renda; nmoradores := nmoradores +1; end; end; percapita := rendatotal/nmoradores; writeln (’renda per capita do condiminio: ’,percapita:6:2); end. Como você já deve ter percebido as variáveis renda, rendatotal e nmoradores foram inicializadas com 0 no início do programa. Isto é importante porque diferentes compiladores podem atribuir diferentes valores a variáveis não inicializadas. No free pascal elas teriam o valor zero mesmo que você não atribuisse esse valor a elas, mas em outro compilador talvez tivessem um valor diferente. O zero é o melhor valor inicial porque antes de entrar no laço ainda não foi contado nenhum morador e nenhuma renda. Além disso renda = 0 permite que o laço comece. Neste exemplo há uma estrutura que não tinha sido mostrada ainda neste curso, um bloco de comandos dentro de outro (no if). Exercício Pesquise a função do :6:2 da última linha do último exemplo. 6.4 Repeat O repeat é o segundo tipo de loop condicional do Pascal. A diferença entre ele e o while é que no while a condição é testada antes de entrar no laço, enquanto que no repeat ela é testada no final de cada repetição. A sintaxe deste laço é a seguinte: repeat comandos 41
  • 43. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF until condição; no repeat não é preciso utilizar begin e end para delimitar os comandos que fazem parte do laço, pois o until já faz isso. Como a condição de parada só é testada no final do laço todos os comandos serão executados pelo menos uma vez. Depois de terem sido executados, a condição é testada. Se ele for verdadeira o programa não entrará de novo no laço, se for falsa repetirá to- dos os comandos e testará novamente a condição até que ela seja verdadeira. Sempre que você for utilizar loops tenha certeza de que há um momento em que o programa sairá deles. Caso contrário, você terá um loop infinito. 42
  • 44. Capítulo 7 Estruturas de Dados e Manipulação de Arquivos 7.1 Variáveis Compostas Homogêneas Até agora vimos apenas variáveis qe armazenam um único dado, as variáveis simples. Existe um outro tipo de variáveis, as compostas. As variáveis compostas têm diversos dados armaze- nados. Elas correspondem a diferentes posições de memória identificadas por um único nome. A distinção entre essas posições é feita por índices. Variáveis compostas podem ser unidimensionais (vetores) ou multidimensionais (registros). Em Pascal ambas são chamadas de arrays. Tais variáveis podem ser ainda classificadas como homogêneas (quando todos os dados são de um mesmo tipo) ou heterogêneas (quando as va- riáveis são de tipos diferentes). Vetores A declaração de um vetor é feita da seguinte maneira: <identificador> : array [<inicio>..<fim>] of <tipo>; em que <tipo> é o tipo dos componentes da variável e início e fim são os limites inferior e su- perior dos índices. Por exemplo, se queremos um vetor que armazene os nomes dos 30 alunos de uma turma podemos fazer o seguinte: nomes : array [1..30] of string; Matrizes As variáveis compostas homogêneas multidimensionais são chamadas matrizes. Se um vetor pode ser representado por uma seqüência linear de elementos, uma matriz pode ser represen- tada por uma tabela (se for bidimensional). Não há um limite para o número de dimensões de uma matriz. Esse tipo de estrutura é comumente utilizado quando é necessária mais de uma informação para distinguir um componente de outro. A sintaxe é bastante parecida com a dos ve- tores, a única diferença é que para as matrizes é necessário informar os limites superior e inferior de cada dimensão. 43
  • 45. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF <identificador> : array [<i1>..<f1>,<i2>..<f2>,.......,<in>..<fn>] of <tipo>; em que <i1>,<f1>,<i2>,<f2>, etc são os limites inferior e superior dos índices de cada dimen- são da matriz. O exemplo seguinte mostra um trecho de programa que armazena em um vetor o nome e o endereço 10 pessoais, e depois os imprime na tela. program Agenda; var i: byte; lista : array [1..10,1..2] of string; nome,endereco : string; begin for i:= 1 to 10 do begin writeln (’nome?’); readln (nome); lista[i,1] := nome; writeln (’endereco?’); readln (endereco); lista[i,2] := endereco; end; for i:= 1 to 10 do begin writeln (i,’-> nome:’,lista[i,1],’ endereco:’,lista[i,2]); end; end. 7.2 Variáveis Compostas Heterogêneas Registros Um registro é um conjunto de dados de diferentes tipos relacionados. O registro é identificado por um nome. Cada campo de um registro também tem um nome que o identifica dentro do re- gistro. Por exemplo, para construir um registro que contém os dados de um filme declararíamos o registro filme com os campos nome, gênero, autor, duração e censura. Esta declaração seria feita da seguinte forma: 44
  • 46. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF var filme : record; nome : string; genero : string; autor: string; duração : real; censura : integer; end. Podemos também declarar os registros como tipos e depois declarar variáveis destes tipos. A vantagem deste tipo de declaração é que podemos declarar várias variáveis com a mesma es- trutura, sem precisar repetir a declaração acima. Basta dizer uma vez quais serão os campos. Depois podemos declarar quantas variáveis quisermos com os mesmos campos. No exemplo abaixo declaramos um tipo endereço como sendo um registro com os campos cidade, bairro, rua, número. Depois declaramos uma variável dadospessoais, que é um registro onde um dos cam- pos é do tipo endereço. type endereco = record cidade : string; bairro : string; rua : string; numero : integer; end; var dadospessoais : record nome: string; idade : byte; residencia : endereço; telefone : string; end; Para acessar um dado de um registro usamos a sintaxe: identificador.nomedocampo Se quisermos, por exemplo, saber o autor do filme armazenado em filme podemos escrever: writeln (filme.autor); E para imprimir o nome da rua da pessoa cujos dados estão na variável dadospessoais fazemos o seguinte: writeln (dadospessoais.endereco.rua); Arrays de Registros Podemos construir arrays de registros da mesma forma que fizemos com variáveis simples. Para fazer um vetor de filmes por exemplo teríamos a seguinte declaração: Type filme = record nome : string; genero : string; 45
  • 47. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF autor: string; duração : real; censura : integer; end; Var filmes : array [1..15] of filme; 7.3 Arquivos Arquivos Arquivos são estruturas de dados armazenadas fora da memória principal e que podem ser aces- sadas durante a execução do programa. Isto inclui discos rígidos, fitas magnéticas, disquetes, DVDs ou qualquer outro dispositivo que possa ser acessado pelo computador onde ocorre a exe- cução. Os arquivos podem ser de dois tipos, binários ou de texto. Ambos serão explicados a seguir. Declaração de Arquivos A declaração de um arquivo é feita da seguinte forma: type <nome do tipo> = file of <tipo> var <nome da variável> : file of <tipo> em que: nome do tipo é o nome do identificador do novo tipo; tipo é o tipo dos dados do arquivo, pode ser text, string, real, record, etc. Exemplo 1 type endereco = record cidade : string; bairro : string; rua : string; numero : integer; end; arqend : file of endereco; var arq1: arqend; Exemplo 2 var 46
  • 48. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF arquivotexto : text; OBS: text é o tipo dos arquivos de texto. Operações com arquivos As principais operações que podem ser realizadas sobre arquivos são abertura, fechamento, leitura e escrita. Antes de abrir um arquivo é preciso associá-lo à variável declarada no começo. Para isso usamos o comando assign, que tem a seguinte sintaxe: assign (nome da variável, nome do arquivo); poderíamos por exemplo escrever: assign (arquivo, ’nomes.txt’); Depois de associar o nome do arquivo à variável precisamos abrí-lo. Existem diferentes tipos de abertura do arquivo, dependendo do que será feito com ele: Reset (nome da variável) - Abre o arquivo que foi associado à variável para leitura. Este co- mando só funciona se o arquivo já existir, caso contrário haverá erro de execução; Rewrite (nome da variável) - Abre o arquivo que foi associado à variável para escrita. Se o arquivo ainda não existir ele será criado pelo programa. Porém, se ele já existir todo seu con- teúdo será apagado. Só use este comando quando você quiser que os dados sejam apagados ou quando o arquivo ainda não existir; Append (nome da variável) - Abre o arquivo que foi associado à variável para escrita. Este comando só funciona se o arquivo já existir, caso contrário haverá erro de execução. Se já hou- ver algum conteúdo no arquivo ele será preservado e os novos dados serão escritos no final do arquivo. As operações básicas sobre um arquivo são leitura e escrita. Os comandos de leitura e es- crita em arquivos são os mesmos que utilizamos para a entrada e saída padrão, read, readln, write e writeln. A única diferença é que antes do nome da variável a ser lida ou escrita, ou da string a ser escrita devemos escrever o identificador da variável correspondente ao arquivo. Veja alguns exemplos: Read (arqnomes, nome); Readln (arqnomes, nome); Write (arq1, identidade); Writeln (arq2, ’Hello World’). OBS: os comandos readln e writeln só podem ser usados para arquivos de texto, para arqui- vos binários utiliza-se apenas read e write. Se você abrir um arquivo para leitura não poderá escrever nele, e se abrí-lo para escrita não 47
  • 49. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF poderá ler seus dados. Depois de executar todas as operações necessárias em um arquivo você deve fechá-lo. Isto garante a corretude dos dados após o término do programa. Nunca deixe um arquivo aberto após a execução. O comando utilizado para fechar arquivos é o close e sua sintaxe é a seguinte: close (nome da variável); Arquivos binários Existem algumas operações que só podem ser realizadas em arquivos binários. Algumas de- las são descritas abaixo: seek (nome do arquivo, n) - Acessa o n-ésimo registro do arquivo. n deve ser menor que o número total de registros do arquivo. É importante lembrar que para o primeiro registro do ar- quivo n=0. Assim, se queremos acessar o quinto registro do arquivo arq fazemos: seek (arq, 4); Se você não souber o número total de registros do arquivo use o comando filesize. A sua sintaxe é: filesize (nome do arquivo); A linha de código abaixo imprime o número de registros do arquivo arq: writeln(’numero de registros: ’,filesize(arq)); Localizando o fim do arquivo Em muitas situações você precisará verificar se o arquivo já terminou ou se ainda há registros nele. Para isto o Pascal tem a função eof (end of file) que retorna true se o arquivo já terminou e false, caso contrário. Veja um exemplo de utilização desta função: repeat readln (arquivo, nome); until eof (arquivo); este bloco lê do arquivo uma string nome até que chegue o fim do arquivo. 7.4 Modularização Modularizar um programa significa dividí-lo em pequenas partes simples. Cada parte deve realizar uma tarefa e ao final o conjunto das partes deve ser capaz de fazer tudo que a espe- cificação do programa exige. Estas partes ou subprogramas em Pascal são classificadas como funções ou arquivos, entre as vantagens de se modularizar um programa estão: • Maior legibilidade; • Facilidade de manutenção; • Possibilidade de divisão do trabalho para um grupo de pessoas; 48
  • 50. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • Possibilidade de reaproveitamento de código (um trecho do programa que se repete várias vezes poderá ser escrito apenas uma vez). Nas próximas páginas você aprenderá a utilizar procedimentos e funções. 7.5 Procedures Procedimentos são subprogramas, ou seja, são programas menores que ficam dentro de um programa principal. Sendo assim, sua estrutura é bastante semelhante à dos programas vistos até agora. procedure <nome do procedimento> (lista de parâmetros); var declaração de variáveis begin comandos end; A primeira diferença que pode ser vista entre um programa principal e um procedure é a lista de parâmetros. Parâmetros são variáveis declaradas fora do procedure que serão utilizadas den- tro dele. É por meio deles que é feita a comunicação do procedimento com a parte do programa externa a ele. Não é obrigatório que um subprograma receba parâmetros, mas muitas vezes eles ajudam a possibilidade de reutilização do software. O programa seguinte contém um procedi- mento que troca os valores das variáveis v1 e v. procedure troca (var v1, v2: integer); var aux: integer; begin aux:=v1; v1:=v2; v2:=v1; end; Na seção var são declaradas as variáveis locais do procedure. Também é possível declarar nesta parte constantes e tipos, como foi feito em seções anteriores do curso. Os procedures são escritos antes do programa principal. A estrutura de um programa com um procedure é a seguinte: Program <nome do programa>; const declarações de contantes tipos e variáveis globais que forem necessárias type var Procedure . begin . . 49
  • 51. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF end; Begin . . . End. Note que os comandos do programa principal só começam depois de todos os procedures. Para utilizar um procedimento dentro do programa principal basta escrever no local onde ele deve ser chamado, seu nome e os parâmetros de entrada, caso existam, por exemplo: Program CalculaResto; Procedure resto(a,b,r:integer); begin r:= a mod b; writeln (’o resto e; ’, r); end; var a1,a2,r1: integer; begin writeln (r1); writeln (’a1?’); read (a1); writeln (’a2?’); read (a2); resto (a1,a2,r1); writeln (’r1: ’, r1); end. Neste programa a linha resto (a1,a2,r1); chama o procedure resto com os parâmetros a1, a2, r1. Você deve ter reparado que mesmo após a execução do procedimento a variável r1 continuou tendo o valor com o qual foi inicializada, 0. Isto aconteceu porque os procedimentos não alteram o valor dos parâmetros a não ser que essa intenção seja explicitada. No último exemplo após a execução de resto todos os parâmetros mantiveram os valores que tinham antes da chamada de resto. Se o valor dos parâmetros for ser modificado após a execução do procedure, usamos a palavra var antes da lista de parâmetros, como no próximo exemplo: Program CalculaResto; Procedure resto(var a,b,r:integer); begin r:= a mod b; writeln (’o resto e; ’, r); end; 50
  • 52. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF var a1,a2,r1: integer; begin r1 := 0; writeln (’r1: ’, r1); writeln (r1); writeln (’a1?’); read (a1); writeln (’a2?’); read (a2); resto (a1,a2,r1); writeln (’r1: ’, r1); end. Exercício Faça uma pesquisa sobre a técnica de ordenação booble sort. Então, crie um programa que use o procedure, troque e ordene em ordem crescente os dados de um vetor de inteiros de tama- nho 5. 7.6 Functions Functions Funções também são subprogramas. A diferença entre functions e procedures é que as primeiras retornam um valor ao final de sua execução, os procedures não. A sintaxe de uma function é a seguinte: Function <nome da function> (lista de parâmetros) : tipo retornado; var declaração de variáveis begin comandos end; onde tipo retornado é o tipo do valor que a função retorna. A função do exemplo seguinte re- cebe como parâmetros a altura e a largura de um retângulo e retorna o comprimento de sua diagonal. function Diagonal (altura, largura : real): real; begin Diagonal := sqrt (sqr(altura)+sqr(largura)); end; Agora podemos escrever um programa maior que pergunta ao usuário a altura, largura e pro- 51
  • 53. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF fundidade de um paralelepípedo e calcula sua diagonal. Para fazer isso será preciso primeiro calcular a diagonal da base do paralelepípedo (formada por largura e profundidade). Depois cal- culamos a diagonal do retângulo formado pela diagonal da base e a altura do paralelepípedo, que é igual a diagonal do paralelepípedo. Program DiagParalelepipedo; function Diagonal (altura, largura : real): real; begin Diagonal := sqrt (sqr(altura)+sqr(largura)); end; var altura, largura, profundidade : real; diag: real; aux: real; begin writeln (’altura?’); readln (altura); writeln (’largura?’); readln (largura); writeln (’profundidade’); readln (profundidade); aux := Diagonal (largura, profundidade); diag := Diagonal (aux, altura); writeln (’A diagonal do paralelepipedo e: ’,diag); end. 52