Linguagem Pascal

Introdução a Linguagem Pascal

Autor:
Silvestre Santos

.

1

Linguagem Pascal

Introdução a linguagem Pascal

.

2

Linguagem Pascal

Capítulo 1 - Conceitos básicos de programação 1.1 O programa de computador
Conforme já vimos, um computador, para realizar uma tarefa específica, como, por exemplo, somar 10 números em seqüência, requer que seja instruído, passo a passo para efetivamente realizar a tarefa. Necessita, pois, que seja projetado com a capacidade de realizar (interpretar e executar) um determinado conjunto de operações, cada uma sendo constituída de uma instrução específica (instrução de máquina). O conjunto de instruções ou comandos organizados em uma certa seqüência, para obter o resultado da soma dos 10 números, compõe o que denominamos programa de computador.

1.2 Linguagens de programação
Uma linguagem de programação é uma linguagem criada para instruir um computador a realizar suas tarefas. Um programa completo, escrito em uma linguagem de programação, é freqüentemente denominado de código. Uma linguagem de programação é um conjunto de ferramentas, regras de sintaxe e símbolos ou códigos que nos permitem escrever programas de computador, destinados a instruir o computador para a realização de suas tarefas.

1.2.1 Linguagem de máquina
O tipo mais primitivo de linguagem de programação é a linguagem que o computador entende diretamente, isto é, as instruções que podem ser diretamente executadas pelo hadware, isto é, pela CPU. É a linguagem de máquina, que foi utilizada pela primeira geração de programadores. A única verdadeira linguagem de programação é a linguagem de máquina, mas, para a maioria das pessoas, a linguagem de máquina é ininteligível. Um programa em linguagem de máquina é uma longa seqüência de números, alguns dos quais representam instruções e outros, os dados a serem manipulados pelas instruções. A figura abaixo mostra um exemplo de um trecho de um programa em linguagem de máquina, na sua forma binária e hexadecimal. Programa em linguagem binária 0010 0100 1001 0001 0100 0100 1001 1111 0100 0100 1001 0011 0001 0100 1001 0010 1000 0100 1001 1000 Programa em haxadecimal 2491 449F 4493 1492 8498

Para escrever um programa em linguagem de máquina, o programador deve conhecer todas as instruções disponíveis para aquela máquina e seus respectivos códigos de operação e formatos, assim como os registradores da CPU disponíveis e os endereços das células de memória onde serão armazenadas as instruções e os dados. Um programa real em linguagem de máquina, pode conter milhares de instruções, o que é uma tarefa extremamente tediosa e difícil, pelos detalhes que precisam ser observados pelo programador. Em um programa escrito em linguagem de máquina, cada instrução escrita pelo programador será individualmente executada, isto é, a cada instrução do programa corresponderá uma ação do computador. A relação é portanto 1 para 1 - uma instrução do programa corresponde a uma operação do computador. Cada família de computadores possui sua própria linguagem de máquina. Um programa em linguagem de máquina é dependente do computador ou seja, tendo sido escrito para um determinado computador, somente poderá ser executado em computadores da mesma família, que lhe sejam 100% compatíveis.

.

3

Os programas levam muito tempo para serem desenvolvidos e apresentam grande dificuldade para alterações futuras. Este processo é denominado compilação. foi desenvolvida. porque seus comandos correspondem. 4 . Desvantagens: • • • Os programadores devem ter altíssimo nível técnico. é necessário que haja um meio de converter os símbolos alfabéticos utilizados no programa em código de máquina. Para usar-se linguagem de montagem em um computador. sem limitações da linguagem. A linguagem assenbly está mais próxima da linguagem humana. Cada tipo de CPU que tem um conjunto de instruções exclusivo tem sua própria linguagem assembly. rápido e eficiente. no qual cada instrução implica uma única instrução de máquina. porque dá aos programadores total controle sobre a CPU do computador. . a ser importante. mas também não apresenta legibilidade nem portabilidade.. Os programas são muito específicos para cada microprocessador (não são portáveis). Para tentar minimizar esta ineficiência (dificuldade de entendimento do significado dos números.2. O processo de conversão (também denominado tradução) é chamado de montagem e é realizado por um programa chamado Montador (Assembler).3 Linguagem de alto nível A linguagem de alto nível é uma linguagem de fácil aprendizado.MODEL SMALL EXTRN _IntDivide:PROC . portanto ocupam menos espaço em memória. Normalmente. apesar de ser de uso tedioso e complexo. um a um. a linguagem assembly é uma linguagem de nível muito baixo. Esta linguagem simbólica foi denominada Linguagem de Montagem (Assembly Language). isto é. qualquer linguagem mais fácil de compreender do que a linguagem de máquina teria sido considerada uma linguagem de alto nível. Da mesma forma que os programas com instruções de máquina.Linguagem Pascal 1. apresenta portabilidade. Além disso produz-se um código compacto. apresenta uma melhor legibilidade. os programas feitos em uma linguagem de alto nível. Veja abaixo um trecho de um programa em linguagem C (linguagem de alto nível). DOSSEG . Segundo os padrões dos dias de hoje. ainda para a primeira geração de computadores.2. uma linguagem que representasse as instruções por símbolos e não por números. também requerem uma conversão para instruções de máquinas. Vantagens: • • • Os programas escritos apresentam grande velocidade de execução. todos semelhantes). Veja abaixo um trecho de um programa em linguagem assembly. de modo a poder ser compreendido pela CPU. a conversão de um simples comando Cobol ou C. redunda em dezenas de instruções de máquina. 1. Na verdade não existe apenas uma linguagem assembly.. diferentemente de um programa em linguagem de montagem. programador tem à sua disposição todos os recursos da máquina. além de ser independente da máquina. O montador lê cada instrução em linguagem de montagem e cria uma instrução equivalente em linguagem de máquina.CODE PUBLIC _Average . Os programas gerados são mais compactos. ao conjunto de instruções de uma CPU. A linguagem assembly continua.2 Linguagem Assembly Para os cientistas que desenvolveram o primeiro programa para traduzir instruções em código de máquina.

id_num. surgiu o C e depois o C++ (com suporte a objetos). linguagem para processamento em tempo real criada sob encomenda do DoD (Department of Defense norte-americano) e ainda hoje a única linguagem aceita para programas escritos sob encomenda do DoD. aproveitando menos os recursos da máquina. Nas décadas de 60 e 70. ao consumir cada vez mais ciclos de máquina e espaço em memória). Visual C e Delphi. por serem afastadas do nível de máquina. Foram desenvolvidas diversas linguagens de programação. Cada nova linguagem criada visa atingir níveis de abstração mais altos. Essas linguagens foram estruturadas buscando refletir melhor os processos humanos de solução de problemas. Permitem que os programadores aprendam mais rapidamente. Esse aumento de exigência ao poder de processamento dos computadores é compensado (e desta forma se faz menos notado) pelo aumento acelerado do poder de processamento dos novos chips (exemplificado pela chamada Lei de Moore. COBOL (1959). buscando afastar-se do modelo centrado no computador. Paradox. 5 . Na década de 80... Desvantagens: • • • Os programas (código) ocupam mais espaço de memória. . Maior portabilidade. Access. afastam cada vez mais o programador do nível de máquina. ALGOL (1958). usada basicamente para manipulação de fórmulas. etc) e as linguagens visuais. para manipulação de algoritmos. especialmente em computadores de grande porte (mainframes) em bancos. que estão entre as linguagens mais utilizadas hoje. como o Visual Basic. A velocidade de execução dos programas tende a ser mais lenta. . current_line. facilidade de transferência de programas para máquinas diferentes. Vantagens: • • • • programador não se preocupa com aspectos muito técnicos. elas cobram um alto preço em termos de desempenho (isto é. a primeira linguagem de alto nível estruturada. As primeiras linguagens foram FORTRAN (1957). isto é. float current_sales. Se por um lado essas novas linguagens facilitam muito o trabalho do programadores (e reduzem sua necessidade de conhecer o hardware da máquina). que afirma que o poder de processamento dos chips dobra a cada 18 meses) e pelos avanços na arquitetura dos computadores. para processamento comercial e ainda hoje bastante usada. citamos as linguagens de manipulação de bancos de dados (como dBase. Clipper. programem com mais eficiência e façam alterações mais facilmente em programas anteriormente escritos. podemos citar Pascal. linguagem criada para facilitar a programação por não-profissionais. total_sales. char *name. Dentre as importantes tendências atuais. ou seja. Permitem rápido desenvolvimento de novos sistemas. e ADA. são cada vez mais lentas. A estrutura da linguagem tira parte da liberdade do programador e pode dificultar a implementação de instruções mais técnicas. ytd_sales. permitindo que ele se preocupe com o problema a ser resolvido. BASIC.Linguagem Pascal Detail_procedure() { int file_status. Essas linguagens orientadas a problema são também chamadas linguagens de alto nível. FoxPro.

as linguagens de máquina. é chamado compilação e é realizado por um programa chamado Compilador (Compiler).3. mas sim em outras formas simbólicas de representar as instruções que o programador deseja que sejam realizadas. é examinado. Vimos que programas de computador não são escritos na linguagem que o computador entende (linguagem de máquina). Programas em linguagem de alto nível. e. a montagem é realizada para traduzir um programa em linguagem de montagem para seu equivalente em linguagem binária.Linguagem Pascal 1.1 Montagem É o tipo de tradução mais rápido e simples que existe e é realizada por um programa denominado montador (assembler). sempre há a necessidade da conversão ou tradução de um programa em linguagem simbólica para outro. equivalente em linguagem numérica binária. denominado código objeto. a exemplo dos programas escritos em linguagem de Montagem. executável. Ou seja. verificamos que as máquinas continuam entendendo somente em binário e. Como o nome já explica. 6 . 1. é convertido (traduzido) para um outro programa em linguagem binária de máquina. Cada ordem do programador é convertida diretamente em uma única ordem de máquina.3 O processo de tradução Um programa escrito por um programador (chamado código fonte) em uma linguagem de alto nível é um conjunto de instruções que é clara para programadores. por isso. mas não para computadores. Código Fonte Programa escrito pelo programad Montage m Programa resultante. também precisam ser traduzidos para linguagem de máquina para poderem ser submetidos ao computador e processados. em seguida. os computadores entendem única e exclusivamente suas linguagens nativas. Neste processo o programa escrito em linguagem de montagem. chamado de código fonte. instrução por instrução. em linguagem Código Objeto . O processo de tradução do programa escrito em uma linguagem simbólica pelo programador. chamado código fonte (source code) para a linguagem de máquina do computador chamada código objeto (object code). No entanto.

substituir a chamada pelo código ("resolver as .Linguagem Pascal 1. poupando tempo. cada instrução do código fonte resulta em uma instrução de máquina. são pequenos programas externos que são chamados através de instruções especiais de chamada de biblioteca. o código objeto preparado pelo compilador em geral não é imediatamente executável. a classificação dos dados de um arquivo. incluindo os parâmetros necessários. Para serem executadas. o compilador precisará incluir uma chamada para a rotina e o endereço dos dados que devam ser passados para a rotina. pois ainda existe código (as rotinas de biblioteca) a ser incorporado ao programa. isto é.2 Compilação Quando se deseja converter para linguagem de máquina um programa escrito em linguagem de mais alto nível que o da linguagem de montagem.3.1 Bibliotecas O desenvolvimento de um programa certamente utilizará diversas operações que são comuns a muitos outros programas. A cada chamada de biblioteca encontrada no código fonte. enquanto na compilação a relação é múltipla. Dessa forma.2. em linguagem 1. Nas linguagens de alto nível.3. A tarefa de examinar o código objeto. a execução de uma instrução de entrada e saída. há uma relação de 1:1. sendo esta tradução feita antes de qualquer tentativa de execução. 7 . Código Fonte Open file_entrada Read A.na realidade. buscar a rotina da biblioteca.C While not eof (file_entrada) do Programa escrito pelo programad or em linguagem Programa compilad or Compilaç ão Código Objeto 1011 0011 0000 0011 1010 0000 0000 0100 Programa resultante. No processo de montagem.B. etc.2 Ligação Assim. todo programa escrito em uma determinada linguagem de programação (chamado de código fonte ou programa fonte) é convertido em sua versão em linguagem de máquina (código objeto ou programa objeto). Essas funções não devem ser confundidas com as instruções da linguagem . o cálculo de funções matemáticas. então o método utilizado se chama compilação. aumentando a eficiência e evitando erros. um programa em alto nível possivelmente conterá diversas chamadas de biblioteca (library calls). ou seja. essas rotinas precisam ser incorporadas ao código do programador. Por exemplo.3. Uma linguagem de alto nível geralmente incorpora diversas rotinas prontas (que fazem parte da linguagem) e que compõem bibliotecas (librarys) de funções préprogramadas que poderão ser utilizadas pelo programador. cada instrução do código fonte gerando várias instruções de máquina. a chamada de biblioteca precisa ser substituída pelo código propriamente dito.2. 1. procurar as referências a rotinas de biblioteca (que constituem referências externas não resolvidas).

tais como das planilhas Excel. verificado. Todo o processo de conversão é efetuado em tempo de execução e imediatamente executado. Linguagens como C. Código Fonte Programa compilad or Programa escrito pelo programad or em linguagem Compilaç ão Código Objeto Programa Programa resultante.4 Compilação e Interpretação . o Word Basic (linguagem de construção de Macros do Word). Ou seja. são linguagens tipicamente compiladas. resultante. etc. quando da execução do programa. O processo de compilação e ligação é executado apenas pelo programador na fase de desenvolvimento e não mais precisará ser executado pelo usuário. um para cada rotina específica.3 Interpretação Com o processo de execução de um programa em fases distintas (compilação / ligação / execução) apresentado. chamado módulo de carga ou código executável. também chamados "bugs") é armazenado em memória de massa para ser executado quando necessário. cada comando é lido. 1. Uma biblioteca é uma coleção de códigos objeto. Quando um programa de aplicação deseja usar uma dessas rotinas. ligação e execução). depois de resolvidos todos os erros. etc. ele insere uma chamada de biblioteca no seu código (“library call”). enquanto o BASIC foi desenvolvido como linguagem interpretada (hoje também existem linguagens BASIC compiladas e o programador pode optar). O resultado da execução do Ligador é o código final pronto para ser executado pelo computador. a que apresentasse sempre desvantagem seria abandonada). a partir do programa fonte.3. haverá vantagens e desvantagens para cada uma delas (pois se assim não fosse. realiza as três fases (compilação. As linguagens de programação tipicamente de usuário. antes que o comando seguinte seja sequer lido. 8 . Vamos comparar os métodos: . Não existem fases distintas nem se produzem códigos intermediários. Pascal. são todas linguagens interpretadas. O método alternativo chama-se de interpretação e. comando por comando.comparação Sempre que houver duas opções. e é indexada pelo nome da rotina. em em linguagem linguagem Biblioteca A Ligação Ligador Biblioteca B Biblioteca C Código Executável O módulo de carga. Esse processo é o mais largamente utilizado.Linguagem Pascal referências externas") e obter os parâmetros para incluí-los no código objeto é executada por um programa chamado Ligador (LinkEditor). em tempo de execução. 1. convertido em código executável e imediatamente executado. após testado e depurado (isto é. um programa para ser executado precisa primeiro ter sido convertido para código objeto pelo compilador e depois ter passado pelo ligador. o Access. porém não é o único. COBOL.3.

Access. que é a rigor a maior vantagem do método de interpretação sob o ponto de vista do usuário. Estas características levam a um maior consumo de tempo no método de interpretação.3. 1.2 Consumo de memória No método de interpretação. o ligador é carregado e fica na memória apenas durante o tempo de ligação. e na hora da execução é carregado apenas o módulo de carga. depois é descarregado. que é portanto mais lento. porque todos os passos preliminares (compilação e ligação) foram previamente cumpridos. a relação entre código fonte e executável é mais direta e o efeito da execução (certa ou errada) é direta e imediatamente sentido. cada comando é interpretado e executado individualmente. indicando o comando ou variável causador do problema. apenas o módulo de carga (código executável) é carregado e fica na memória durante a execução. No método de compilação.1 Tempo de execução No método de interpretação. um programa é compilado e ligado apenas uma vez. depois é descarregado.3. cada vez que o programa for executado. 1. pois um programa necessita do interpretador para ter traduzidos cada um dos seus comandos. 1. Quando o usuário for executar o programa. quase sempre o erro pode ser encontrado no comando que acabou de ser executado. faz com que esse método seja escolhido sempre que se pretende adotar uma linguagem que vá ser usada por não-profissionais ou para a programação mais expedita. o interpretador pode informar o erro.3. o compilador é carregado e fica na memória apenas durante o tempo de compilação.4. etc. cada programa terá que ser interpretado toda vez que for ser executado. a tradução do código do loop se faz uma única vez. Assim. Quando a execução de um comando acarreta erro. o tempo de execução do programa é reduzido.4. no método de interpretação as partes de código pertencentes ao loop serão várias vezes repetidas e terão que ser interpretadas tantas vezes quantas o loop tiver que ser percorrido. pois não há mais relação entre comandos do código fonte e instruções do executável.Linguagem Pascal 1. 9 .3 Repetição de interpretação No método de compilação. até o término de sua execução (o interpretador somente é descarregado depois do término da execução do programa). No método de Compilação. No método de interpretação. em programas contendo loops. Outro aspecto é que. a identificação de erros durante a fase de execução fica sempre difícil. que é diretamente executável. o método de interpretação é usado pela maioria dos Basic (uma linguagem projetada para ser usada por iniciantes). Essa característica. e por todas as linguagens típicas de usuário como dBase. Por exemplo. No método de compilação.3. haverá compilação. Desta forma. um a um.4 Desenvolvimento de programas e depuração de erros No método de compilação.4. vemos que o método de interpretação acarreta um consumo de memória muito mais elevado durante a execução do programa. o interpretador é um programa geralmente grande e que precisa permanecer na memória durante todo o tempo que durar a execução do programa.4. No método de interpretação. . ligação e execução de cada um dos comandos. em tempo de compilação e ligação. Essas são funções realizadas pelo programador e executadas apenas durante o desenvolvimento do programa. Excel.

.Linguagem Pascal 1.5 Fluxograma Compilação x Interpretação A figura abaixo ilustra o fluxograma do processo de desenvolvimento e depuração de programas.3. 10 . utilizando os métodos de compilação e interpretação.

1. um código fonte ligado a um sistema de detecção de erros. . aliado ao lançamento no mercado de microcomputadores. O Pascal é uma linguagem de programação de alto nível e de fins genéricos.Linguagem Pascal Capítulo 2 – Fundamentos de Pascal 2. quer como linguagem de ensino quer como uma poderosa linguagem de fins genéricos.1. O Turbo Pacal consegue em um único ambiente. As suas instruções são formadas por expressões do tipo algébrico e certas palavras inglesas. um produto comercial. Por esta razão. WHILE. pois eram necessários vários passos para se obter um programa executável. os programas em linguagens de alto nível devem ser traduzidos antes de serem executados pelo computador. END. depois compila-lo. Nas suas primeira implementações. muitos educadores e programadores profissionais preferem utilizar o Pascal em vez de outras linguagens de fins genéricos. Ele só entende linguagem de máquina. O interpretador traduz para a linguagem de máquina e roda uma linha por vez. não era muito amigável ao programador. A diferença entre eles está na forma de executar a tarefa de tradução. 2.1 2. “lincá-lo” e montá-lo.1. O pascal ganhou popularidade quando foi adotado pela Universidade da Califórnia. até. um compudor não pode entender nem tão pouco executar instruções em linguagens de alto nível.1 A história A linguagem de programação Pascal foi criada para ser uma ferramenta educacional isto no início da década de 70 pelo Professor Niklaus Wirth do Techinical University em Zurique. e também um “linkador” que permite a ligação do programa Pascal com objetos. que foi desenvolvida a partir do Algol-60. Em 1983. que foram especificamente projetados para estimular o uso da programação estruturada – o método ordenado e disciplinado de programação que tem como resultado programas claros. bastante parecido com o Wordstar e SideKick.2 Por que Turbo Pascal? Como já vimos. mesmos os gerados por outras linguagens. de seu propósito educacional e a facilidade de programação. 11 . Os dois aceitam como entrada um programa em linguagem de alto nível (programa fonte) e produzem como saída um programa em linguagem de máquina (programa objeto). Isto de certa forma desistimulava os programadores a usar a linguagem Pascal. Neste aspecto. sendo que estes são métodos ou “receitas” para se resolver problemas”. tais como BEGIN. read. Hoje o Pascal é amplamente usado numa grande variedade de aplicações.1 Introdução a linguagem Pascal “A programação deve ser entendida como uma arte ou técnica de se construir algoritmos. eficientes e livres de erros. Quando era feita uma manutenção no mesmo. Existem basicamente 2 tipos de programa tradutor: o interpretador e o compilador. todos estes passos deviam ser refeitos. um compilador de 1 passo. o Pascal começou a ser utilizado por programadores de outras linguagens. colocar um editor de textos. também foram feitas implementações para minis e microcomputadores. REPEAT. THEN. IF. Suíça. o Pascal contém ainda alguns aspectos únicos. em 1973. 2. write. o Pascal assemelha-se a muitas outras linguagens de alto nível. Já o compilador traduz para a linguagem de máquina todo o programa fonte e só então ele é executado. o que o torna bastante veloz. lançou o Turbo Pascal para microcomputadores. brilhante cientista e matemático francês que entre outros feitos inventou a primeira calculadora mecânica do mundo. DO. Quem faz essa tradução são os programas tradutores. Desta forma. Primeiro devia se escrever o programa em um editor de texto. No msmo período. tornando-se para surpresa do próprio Nicklaus. a soft-house americana Borland International. Apesar de todas as dificuldades iniciais. San Diego. Contudo. com a desvantagem de que apenas um erro é localizado por vez. em homenagem à Blaise Pascal. Foi batizada pelo seu idealizador de PASCAL. que todo programa seja executado. em seus cursos.

. suponha que você chegue a conclusão de queo programa tenha que sofrer modificações.2.. { Cabecalho do programa } ... o processo de compilação.. Utilizar um compilador para traduzir o programa fonte para um programa em linguagem de máquina.. .. Finalmente. 2. Devemos utilizar um editor de textos para escrever e armazenar em disco o nosso programa fonte. um editor de textos compatível com o Wordstar. o Turbo Pascal atende aos padrões da linguagem Pascal definidos por Niklaus Wirth. . o Turbo Pascal vai muito além.. . de certa forma pode se tornar moroso. “o pai da linguagem”. 12 .. ficam armazenadas numa biblioteca. .1 Cabeçalho do programa Esta área é utilizada para se fazer a identificação do programa com um nome. . .. . um compilador e um linkeditor. existem linguagens de programação interpretadas e compiladas. o que faz com que ele seja muito rápido. . Sintaxe: Program <identificador>. Após estes passos. O Cobol é compilado. uses label const type var procedure function begin statement. e assim sucessivamente até que o programa fique ao seu gosto.Linguagem Pascal Assim. { cláusula Uses} { declaração de Labels } { declaração de Constantes } { declaração de Tipos } { declaração de Variáveis} { declaração de Procedures } { declaração de Funções} 1 -Cabeçalho do Programa 2-Área de Declarações { Instruções } 3-Corpo do Programa 2. pois ele possui numa forma integrada. . pois deve seguir as seguintes etapas: 1. end. O processo de compilação pode ser feito tanto em disco como em memória. 2-Área de Declarações e o 3-Corpo do Programa.... 2... pois bem. o Basic pode ser tanto compilado como interpretado e assim por diante. . Além disso.. O compilador Turbo Pascal facilita todo esse processo.. Na realidade. tradicionalmente é compilada.2 Estrutura de um programa em Pascal Todo programa em Pascal é subdividido em 3 áreas: 1-Cabeçalho do Programa. normalmente. . A linguagem Pascal. . pois ele possui inúmeras procedures e funções a mais do que as existentes no padrão da linguagem Pascal. Este é o layout geral de um programa Turbo Pascal: program . . você terá que repetir os três passos descritos. Por outro lado. sendo que este deve seguir as mesmas regras de formação utilizadas para nomear as variáveis. devemos juntar ao programa compilado as diversas rotinas necessárias que. 3.. .. .

procedures e de funções podem ser listadas em qualquer ordem e repetidos um número de vezes qualquer. Sintaxe: . (*Início da Área de Declarações*) Uses WinCrt. 2. Esta área tem início com a instrução begin e é finalizada pela instrução end seguida do símbolo (.) ponto final .. Write(raio. (*Fim da Área de Declarações*) Begin Read(raio).2. type. Observações: • • Deve ser salientado que os componentes da secão Área de declarações não tem a obrigatoriedade de existir.. todos. const. 13 . (*O Cabeçalho do programa*) .Linguagem Pascal Exemplo: PROGRAM circulo. variáveis. End. Var area. As declarações de label. procedure e function.14159*Sqr(raio). Observações: • • • A primeira linha contém o nome do programa (círculo). label. Esta parte do programa tem só uma linha e não é obrigatória. begin <intrução1>. raio : Real. a saber: Uses..2 Área de declarações Esta área é utilizada para definir o uso de qualquer tipo de identificador que não seja os predefinidos. 2.3 O corpo do programa O Corpo do programa contém as instruções que fazem com que se efetuem as ações do programa propriamente dito. var. . Exemplo: PROGRAM circulo. constantes. Só são obrigatórias caso nós estejamos precisando. estando esta subdvidida em sete subáreas. Area := 3. em cada programa em Pascal.area).2. Não poderá existir nenhuma variável no programa com o mesmo nome do cabeçalho do programa. <intrução2>. Este é o cabeçalho do programa..

Finalmente.. .3 O conjunto de caracteres do Pascal Os caracteres que podem ser utilizados no Turbo Pascal são divididos em: letras. . Letras: de ‘A’ até ‘Z’ e de ‘a’ até ‘z’. Números: os dígitos de 0 a 9. * . @ / ( { = ) } < : $ > . >= *) := (. Um programa exemplo: Eis um programa em Pascal elementar chamado círculo. (*Início do Corpo do Programa*) Begin Read(raio). Area := 3.Linguagem Pascal .14159*Sqr(raio).. # Alguns caracteres especiais são construídos por dois caracteres distintos e consecutivos: <= (* . Uses WinCrt. 2. Elas fazem com que o valor do raio seja introduzido no computador. números e os caracteres especiais. (*Fim do Corpo do Programa*) Observações: • • As três linhas que estão em evidência entre Begin e End são as instruções do programa. End.) 14 . raio : Real. Var area.. o valor da área seja calculado e os valores do raio e da área seja escritos para o exterior. que uma vez fornecido o raio de um círculo calcula a sua área. Isto faz parte da sintaxe do Pascal. Write(raio. Caracteres especiais: + [ ^ ] .area). end. A maioria das linhas acaba por ponto e vírgula. note-se a pontuação no fim de cada linha. algumas não têm pontuação e a última linha acaba com um ponto final. PROGRAM circulo. e escreve em seguida o raio e área calculada. <intruçãoN>.

que podem ser utilizados normalmente na construção de programas. Como regra. É permitido usar maiúsculas ou minúsculas. procedimento. em qualquer ordem. deverá ser evitado o número excessivo de caracteres. programa. functions etc. Elas não podem ser redefinidas e não podem ser utilizadas como identificadores de variáveis. 4. Esses identificadores consistem em Procedures e Funções. Um identificador pode ter qualquer tamanho. O Turbo Pascal possui inúmeros identificadores pré-definidos. que não fazem parte da definição padrão da linguagem Pascal.Linguagem Pascal Observações: • Turbo pascal não faz distinção entre letras maiúsculas e minúsculas. entretanto. 3. variável. tipo. etc. O primeiro caracter do identificador deve ser obrigatoriamente uma letra ou um traço de sublinhar ( _ ). Exemplos de identificadores válidos: Meu_Nome MEU_NOME _Variavel01 Exemplo01 Exemplos de identificadores inválidos: Valor=Valor_Anterior 2teste Exemplo 23 . procedures. dígitos ou undescores e não espaços. units.5 Identificadores Um identificador é um nome que é dado a um elemento do programa.. As palavras reservadas do Pascal são: and const dowton for in mod or repeat then uses asm constructor else function Inline nil packed set to var array destructor end goto interface not procedure shl type while begin div exports if label object program shr unit with case do file implementation library of record string until xor 2. 2. Também como regra. 2. 15 . Regras para formação de identificadores: 1. também chamado de undescore. que são consideradas da mesma forma. um identificador deve conter caracteres suficientes para indicar claramente o seu significado. 6. Os demais caracteres podem ser letras. Exemplos: ClrScr (limpa a tela de vídeo) e DelLine (deleta a linha em que está o cursor). desde que o primeiro caracter seja uma letra.4 Palavras reservadas As palavras reservadas do Turbo Pascal são palavras que fazem parte da sua estrutura e têm significados pré-determinados. 5. Um identificador não pode ser palavra reservada. Os identificadores são compostos de letras ou dígitos. campos de registro. Não se pode utilizar os caracteres especiais do Turbo Pascal na formação de identificadores. tal como uma constante. apenas os primeiros 63 caracteres são significativos.

area).14*bruto. ou um conjunto de ordens. Os comentários são ignorados pelo compilador.7 Instruções no Pascal Uma Instrução no Pascal é uma ordem. 16 . raio : Real. Var area. end.Linguagem Pascal Exemplo: PROGRAM circulo. (*CABEÇALHO DO PROGRAMA*) { Este programa tem como objetivo o cálculo da área de um círculo a partir da entrada do valor do raio deste círculo } Uses WinCrt. como por exemplo a declaração de uma variável. Write(raio. É uma boa prática em programação inserir comentários no meio dos nossos programs.14159*Sqr(raio). Var area. Write(raio. end. tudo que estiver entre os símbolos (* e *) ou { e } será considerado como comentário. também chamadas de instruções estruturadas. a atribuição de um valor a uma variável ou uma chamada a uma função ou procedimento do Pascal. Exemplos: a) taxa := 0. As instruções compostas incluem: . Area := 3. As instruções simples são essencialmente instruções únicas e incondicionais que executam uma ou mais tarefas. begin Read(raio). 2. raio : Real. Area := 3. No Turbo Pascal. b) clrscr. Exemplo: PROGRAM circulo. Existem dois tipos básicos de instruções em Pascal: simples e compostas. que obriga o computador a executar certas ações.14159*Sqr(raio).6 Comentários Comentários são textos que introduzimos no meio do programa fonte com a intenção de torná-lo mais claro. begin Read(raio). A linguagem Pascal reconhece inúmeros tipos de instruções compostas.area). 2. (*CABEÇALHO DO PROGRAMA*) { Este programa tem como objetivo o cálculo da área de um círculo a partir da entrada do valor do raio deste círculo } Uses WinCrt.

5.0 então a mensagem mostrada será ‘Salário Bom!’. 2. Y:= 2. .0. Esta instrução faz com que a mensagem ‘Salário Baixo!’ seja mostrada caso a variável salário seja menor do que 2000. Se a variável salário tiver um valor armazenado maior ou igual a 2000. O conjunto de instruções consecutivas delimitadas entre as palavras reservadas begin e end podem ser tratadas como uma única instrução simples. If (salario < 2000. Cada vez que a instrução for executada o valor atual da variável i será visualizado na tela. e respectivamente até o valor 100 sejam apresentados no monitor. que envolvem a execução de forma repetida de várias instruções simples. begin X:= 1. Neste caso as instruções simples que formam o bloco de instruções compostas devem estar entre as palavras reservadas begin e end. c) Instruções condicionais.5.0) Then writeln(‘Salário Baixo!’) Else writeln(‘Salário Bom!’). 3. Esta instrução será executa 100 vezes. Exemplo 1: Abaixo você pode ver um exemplo de instrução composta típica. 17 . Assim a instrução fará com que os valores 1. que consistem numa seqüência de duas ou mais instruções consecutivas. end. Exemplo 3: Abaixo você pode ver um exemplo de instrução composta condicional. b) Instruções repetitivas. Observações: • • O ponto e vírgula da última instrução do bloco de instruções compostas típica é opcional.Linguagem Pascal a) instruções compostas. em que uma ou mais instruções simples são executadas apenas se uma expressão lógica especificada for atendida. For i := to 100 Do writeln(i). Exemplo 2: Abaixo você pode ver um exemplo de instrução composta repetitiva.

etc.) que estão associados com identificadores simples um a um. Estes incluem dados de tipo simples e dados de tipo estrututado. begin writeln('Digite o valor de read (A). writeln('Digite o valor de read (B). :'. dentro de cada grupo.5 end else begin X:= -1. A: '). if A = B then begin X:= 1. caracteres. Bloco Y:= -2. Os elementos de informação individuais. Os dados de tipo estruturado compõe-se de múltiplos elementos relacionados entre si de forma especificada. Dados de tipo simples (padrão) • • • • Char (caracteres) Boolean (booleanos) Integer (inteiros) Real (reais) Dados de tipo estruturado (padrão) • • • • • • String (cadeia de caracteres) Array (matriz) Record (registro) File (arquivos) Set (conjuntos) Text (texto) Os dados de tipo simples são elementos individuais (números. Cada grupo de elementos de informação está associado a um único identificador. X:4:1). Os demais tipos estruturados serão vistos mais para a frente. Y:4:1).Linguagem Pascal Exemplo 4: Program exemplo. Y:= 2. . 18 . podem também estar associados com os correspondentes identificadores individuais. writeln ('O valor de X é writeln ('O valor de Y é end. Inicialmente iremos estudar os dados de tipo simples e o tipo String pela sua utilização prática incial.5 end. B: ')..1 Tipos de dados predefinidos Uma das mais interessantes características do Pascal é a sua capacidade de tratar muitos tipos diferentes de dados. Capítulo 3 – Tipos de dados e instruções primitivas 3. .5..5. instrução simples de instruções compostas :'.

456 36.50 -10 20 34 O Turbo Pascal fornece cinco tipos pré-definidos de números inteiros. Tipo Shortint Integer Longint Byte Word Faixa -128.3333 .Linguagem Pascal 3.0 . Se não existir sinal o número é considerado positivo. 3. Em particular um número pode incluir um sinal.32767 -2147483648. Um número real não pode então começar ou acabar com um ponto decimal. 19 .2 Formando números no Pascal Os números podem ser escritos em Pascal de várias formas diferentes..602 3. um ponto decimal e um expoente caso se deseje. Estes valores dependem do tipo de número.4 Números reais Um número real deve conter um ponto decimal ou um expoente (ou ambos). Números inteiros permitidos: 25 0 1 +1 -315 Números inteiros não permitidos: 123. 2. Veja a tabela abaixo.3 Números inteiros Um número inteiro não contém um ponto decimal nem um expoente.0 -0. Vírgulas e espaços não se podem incluir dentro de um número.000. do computador e do compilador (versão) específico que você esteja utilizando. Se existir um ponto decimal. O número pode ser precedido por um sinal positivo (+) ou negativo (-).026E-17 (5. Os números não podem exceder seus valores máximos e mínimos especificados. este deve aparecer entre dois dígitos.0E+10 (3.2147483647 0. Um número inteiro é simplesmente uma seqüência de dígitos.2 827..026x10-17) Números reais não permitidos: 1. 1.127 -32768. precedida (opcionalmente) por um sinal..65535 Formato Sinalizado 8-bit Sinalizado 16-bit Sinalizado 32-bit Não Sinalizado 8-bit Não Sinalizado 16-bit 3.255 0..0 1. caso se deseje. As regras seguintes aplicam-se a todos os números: 1. 3.0x1010) 5. Números reais permitidos: 0..

.9.9e-39. Uma string de caracteres de tamanho 0 (zero) é chamado de string nula e só é compatível com o tipo string.7e38 1. As expressões do tipo booleano são formadas combinando operandos do mesmo tipo com operadores relacionais. Veja a tabela abaixo. as variáveis. Uma strings de caracteres são um conjunto de caracteres entre aspas (apóstrofos) simples.1.Linguagem Pascal O Turbo Pascal fornece cinco tipos pré-definidos de números reais. 3. Uma string de caracteres de tamanho 1 (um) é compatível com o tipo char e também o tipo string. Tipo Real Single Double Extended Comp Observação: • Faixa 2.. Cadeias de caracteres permitidas: ‘Exemplo de cadeia de caracteres’ ‘R$19..5 Tipos de dados caracteres São caracterizados tipo caracteres as seqüências contendo os caracteres de ‘A’ a ‘Z’ (maíusculo e minúsculo).1..4e4932. porém com uma pequena diferença: é utilizado para strings com apenas um caracter de tamanho.4e38 5. podendo armazenar de 1 até 255 caracteres. utilizado da mesma forma que o tipo string. Neste caso só aparecerá uma das aspas quando a cadeia for impressa ou visualizada.1.2e18 Dígitos 11-12 7-8 15-16 19-20 19-20 Bytes 6 4 8 10 8 Uma variável do tipo real pode armazenar um valor inteiro.7e308 3. sendo que este tipo de dado somente poderá representar um dos dois valores. 20 . o espaço em branco e os caracteres especiais.0e-324. Esta categoria inclui as constantes do tipo booleano. mas não o contrário.1e4932 -9.95’ ‘’ ‘Please don’’t go!’ ‘217 . Existe ainda o tipo char. 3.2e18. esta (a aspas) deve ser escrita duas vezes.. os dígitos de 0 a 9.6 Dados booleanos (ou lógicos) São caracterizados tipos booleanos (lógicos) os dados que podem assumir os valores true (verdadeiro) e false (falso). Dados booleanos: true (1) false (0) . funções e expressões.3.5e-45.32 – Abc’ Observações: • • • Se uma cadeia de caracteres incluir uma aspas. No Pascal este tipo de dado é referenciado pelo identificador string.

writeln(r2). + e – terá como resultado um valor inteiro. r2:=r1/2.Linguagem Pascal 3. writeln(x). um dos operandos for real e se os operadores forem *. Esse valor possui um tipo. o quociente inteiro e o resto inteiro da divisão entre operandos. mesmo que os dois operandos sejam inteiros.y. que pode ser inteiro ou real.+ ou -. z:=x+y. y:= 20 MOD 3. conforme a natureza dos operados e operandos envolvidos.r2 : real. r1. • O operador / sempre conduz a um resultado do tipo real. (* limpa a tela *) x:=10. Programa exemplo: Program Operadores_aritmeticos.z : integer. (* escreve 6 na tela *) writeln(y). ao ser avaliada produz um valor que se constitui no resultado da expressão. 21 ./. Uses CRT. • div e mod são operadores que só podem ser aplicados com operandos inteiros dando.7 Operadores aritméticos Operador + * / div mod Operação Adição Subtração Multiplicação Divisão Divisão de inteiros Resto de divisão Tipos de Operandos Inteiro (integer) Real (real) Inteiro (integer) Real (real) Inteiro (integer) Real (real) Inteiro (integer) Real (real) Inteiro (integer) Inteiro (integer) Tipo de Resultado Inteiro (integer) Real (real) Inteiro (integer) Real (real) Inteiro (integer) Real (real) Real (real) Real (real) Inteiro (integer) Inteiro (integer) As expressões aritméticas são escritas linearmente. mod. Você pode observar que toda expressão aritmética. • Uma expressão que só tenha operandos inteiros e operadores *. Exemplos de expressões aritméticas em Pascal: a) X+Y b) Total/N e) 11 div 4 f) Soma*Soma i) Sqrt(F1+G*G)-H c) X-Y g) 2*Nota d) SqRt(P) h) 11 mod 4 Observações: • No pascal não existe sinal para potenciação e radiciação. pelo menos. (* escreve 2 na tela *) r1:=3. end. div. devendo-se indicá-las com combinações de produtos ou funções predefinidas.24. Begin ClrScr. Var x. o resultado da expressão será real. respectivamente. . y:=20. usando-se a notação matemática. Se.3. (* escreve o valor de z na tela de video *) x:= 20 DIV 3. writeln(z).

em seguida são efetuadas todas as operações de multiplicação. qualquer expressão entre parênteses é executada primeiro. que indicam a seqüência em que devem ser efetuadas as operações: Prioridade 1a. 3) Operações com operadores de igual prioridade são normalmente executadas (avaliadas) da esquerda para a direita. podemos usar parênteses ou a precedência dos operadores.Linguagem Pascal Este programa resultaria na seguinte tela: --------------------------------------------------------30 6 2 1.unários.. Uma expressão relacional é uma comparação realizada entre valores do mesmo tipo. {resultado: 3+0=3} writeln( -3*(43/(52 div 3) )). 2a. e da mesma forma que na matemática.8 Operadores relacionais O Turbo Pascal possui ao todo 7 operadores relacionais que são muito utilizados nas tomadas de decisões. 3. {resultado: 4 (real)} . {resultado: -3*(43/17) = -7. e só após estas são efetuadas as adições e subtrações. 3a.4086956522E+00 --------------------------------------------------------- 3. variáveis ou expressões do tipo correspondente.(unário) * / div mod +- A ordem de precedência acima indica que primeiro são aplicados os . qual operação será executada primeiro? Para evitar isso. 4) Se a expressão tem parênteses . resto de divisão inteiro.1 Prioridades nas expressões aritméticas A expressão 5 mod 2 + 5 div 2 demonstra uma possível fonte de confusão: se houver vários operadores. Observações: 1) Um operando entre dois operadores de diferentes prioridade é relacionado ao operador de maior prioridade. 22 . Estes valores são representados na relação por constantes.7. isto é.. estes têm precedência superior a todos os operadores. Exemplo: . {resultado: 3+48-3=48} writeln( (51 div 16) + (48 – 8) mod 5).588} writeln( 6/3*2 ). São eles: . begin writeln(51 div 16 + 48 – 8 mod 5). divisão. Operadores . 2) Um operando entre dois operadores de igual prioridade é relacionado ao primeiro operador à sua esquerda... depois as potenciações. Dica: use parênteses sempre que puder!.

var x. assim com em qualquer outra linguagem.9 Operadores lógicos No Pascal. existiram ocasiões em que se fará necessário trabalhar com o relacionamento de duas ou mais condições ao mesmo tempo em uma instrução. y:= 5. Para esses casos é necessário então trabalhar com a utilização dos operadores lógicos. or e not. Writeln(-4 <> 4). Writeln(x <= 10). uses WinCrt. Writeln(0.6 <= 1.Linguagem Pascal Operadores = <> > < >= <= in Observação: • Operação Igual Diferente Maior Menor Maior ou igual que Menor ou igual que Contido em (conjunto) Tipo de resultado Booleano Booleano Booleano Booleano Booleano Booleano Booleano Toda expressão relacional retornará um resultado do tipo booleano: verdadeiro (true) ou falso (false). Exemplos: program exemplo. São três os operadores lógicos: and. y:integer. Este programa resultaria na seguinte tela: --------------------------------------------------------FALSE TRUE TRUE TRUE FALSE TRUE FALSE --------------------------------------------------------- Operadores 3. Writeln(2*1 >= x div 2).5). Writeln(2 = 3). Writeln(x+y > 10). Veja a tabela abaixo. Operadores AND OR NOT . também conhecidos por operadores boleanos. end. begin x:= 3. efetuando desta forma testes múltiplos. Writeln( (x div 2) > (y+6) ). Operação E lógico OU lógico NÃO lógico (unário) Operadores Booleano Booleano Booleano Tipo de resultado Booleano Booleano Booleano 23 .

se pelo menos uma das expressões avaliadas resultarem um valor lógico verdadeiro. 24 . respectivamente. Exemplo: O valor lógico das expressões: a) P and S b) P and R será: a) true b) false c) false d) false c) Q and S d) Q and R 3. R. Veja a tabela verdade para este operador: Expressão 1 Falso Verdadeiro Falso Verdadeiro Expressão 2 Falso Falso Verdadeiro Verdadeiro Resultado Falso Falso Falso Verdadeiro Sejam as variáveis lógicas P. Q. Veja a tabela verdade para este operador: Expressão 1 Falso Verdadeiro Falso Verdadeiro Exemplo: O valor lógico das expressões: a) P or S c) Q or S b) P or R d) Q or R será: a) true b) true c) true d) false Expressão 2 Falso Falso Verdadeiro Verdadeiro Resultado Falso Verdadeiro Verdadeiro Verdadeiro 3.2 Operador lógico OR O operador or faz com que uma determinada operação seja executada. false.1 Operador lógico AND O operador and faz com que uma determinada operação seja executada.9.9. os valores true. invertendo o resultado lógico da expressão avaliada.9. Veja a tabela verdade para este operador: .3 Operador lógico NOT O operador not faz com que uma determinada operação seja executada. se e somente se as expressões avaliadas resultarem simultaneamente um valoro lógico verdadeiro. false e true. S contendo.Linguagem Pascal 3.

var numero := integer. end. ou se ambos forem verdadeiros. 25 . Este programa resultaria na seguinte tela: --------------------------------------------------------- Digite um número inteiro: 99 O número está fora da faixa de 20 a 90! --------------------------------------------------------- 3. if (numero >=20) and (numero <=90) then writeln (‘O número está na faixa de 20 a 90!’) else writeln(‘O número está fora da faixa de 20 a 90!’). para inverter) o valor de um operando booleano. Veja abaixo um pequeno programa que utiliza operador lógico AND: Program testa_logica_and.Linguagem Pascal Expressão 1 Verdadeiro Falso Exemplo: Resultado Falso Verdadeiro O valor lógico das expressões: a) not P será: a) false Observações: • • • • b) not R b) true Estes operadores só aceitam como operandos. lógicos e relacionais Como já vimos anteriormente. .4 Prioridades entre operadores aritméticos. readln (numero). valores lógicos. além dos operadores relacionais e dos operadores aritméticos. O operador NOT é utilizado para negar (isto é. ou seja : TRUE e FALSE. Uses WinCrt. begin write(‘Digite um número inteiro: ‘).9. a prioridade das operações está dada no quadro abaixo. Com o operador OR a expressão resulta verdadeiro (TRUE) se qualquer um dos operandos for verdadeiro. Com o operador AND a expressão resulta verdadeiro (TRUE) unicamente se ambos os operandos forem verdadeiros (TRUE). Em Pascal. pode-se ter mais de um operador lógico na mesma expressão.

mod. 3. Operador + Observação: Se o resultado da concatenação for maior do que 255 caracteres. Exemplo1: Operadores not *. 2a. 26 Operação Concatenação Tipos de operandos String ou Char Tipo do resultado String . 3a. var A.. 4a. <=. a strig resultante será truncada após o caracter 255. var caracter1.Linguagem Pascal Prioridade 1a. Uses WinCrt. >. K:= 1. C.. or =. caracter2 :char. -. C:= 10. O resultado da concatenação é compatível com o tipo string. not ((Total >=2) and (A<>B)) or Teste .10 Concatenação O Turbo Pascal permite que você use o operador + para concatenar dois operandos do tipo string. Exemplo: program exemplo. div. string3 :string. B:= 3. <. <>. and +. writeln ((A=1) and ((B+C<>0) or (K<=2))). K: integer. begin . Este programa resultaria na seguinte tela: --------------------------------------------------------FALSE --------------------------------------------------------- Exemplo2: . in program Exemplo. B. >=. string1. begin A:= 2. end. string2.. uses WinCrt. /..

char. 27 . no sentido de programação. onde: • • • Var – é uma palavra-chave (palavra reservada) que inicia uma parte do programa para a definição de variáveis. 'linguagem Pascal'. write (string3). definidas) antes de poderem aparecer numa instrução do programa. define o conjunto ordenado de valores que podem ser atribuídos a estas variáveis. como uma região de memória de um computador. real. string [30].1 Declaração de variáveis Variável pode ser definido. estes terão de ser separados por vírgula. 4.1.. . Todas as variáveis dever ser individualmente declaradas (isto é. Uma variável é um identificador cujo valor pode variar durante a execução do programa. <lista-de-identificadores> : <tipo>. Exemplo: Program Exemplo.1 A declaração Var Esta é a sub-área onde devemos declarar todas as variáveis que iremos utilizar em nosso programa. caracter1+' '+string1+' '+caracter2+' '+string2+'!'. Uses WinCrt. Existindo mais de um identificador na declaração. end. numero_de_filhos altura sexo nome : : : : byte. A sua sintaxe geral é: Var <lista-de-identificadores> : <tipo>. ou seja. previamente identificada e que tem por finalidade armazenar as informações (dados) de um programa temporariamente.. lista-de-identificadores – são os identificadores que representam os nomes individuais das variáveis. Este programa resultaria na seguinte tela: --------------------------------------------------------A linguagem Pascal é legal! --------------------------------------------------------- caracter1:= caracter2:= string1 := string2 := string3 := Capítulo 4 – Declarações no Pascal 4. Var idade. 'legal'. Uma variável armazena apenas um valor por vez.Linguagem Pascal 'A'. 'é'. . tipo – é o tipo das variáveis.

1. conforme determinado pela expressão booleana. End.1. area := 3. Esta é uma procedure da unit System. : integer. numero_de_filhos:=2. uma constante.A procedure Inc Esta procedure incrementa uma variável do tipo ordinal. Onde: identificador – é o nome da variável. onde: • • variável – é qualquer identificador previamente declarado na sub-seção Var da Área de declarações. Existe uma exceção a esta regra: um valor inteiro pode ser atribuído a uma variável do tipo real. Exemplo1: X := Y + Z. Suponha que X é uma variável booleana. . Expressão –pode ser um elemento único por exemplo. : boolean. outra variável. Sintaxe: Inc(identificador. Exemplo2: X := (I >= 1) and (I < 100). sim_ou_nao :=TRUE.Linguagem Pascal sim_ou_não quantidade Begin idade:= 34. 4. e I seja uma variável inteira. Observação: • O resultado da expressão deve ter o mesmo tipo da variável. quantidade := 3245. uma referência de função ou pode ser uma expressão (aritmética ou lógica por exemplo). incremento). Um identificador válido do pascal. 4. sexo := ‘M’. Caso este valor seja omitido assume-se que o incremento será de 1 em 1.3 Incrementando uma variável .2 Atribuindo valores as variáveis Uma instrução de atribuição é uma instrução simples que é usada para atribuir um valor de uma expressão a uma variável. nome := ‘José’.14159*sqr(raio). Então a instrução faz com que à X seja atribuído o valor verdadeiro (TRUE) ou falso (FALSE). 28 . incremento – é um número inteiro que define em quanto a variável será incrementada. Esta instrução é escrita na forma: Variável := expressão. conta := conta+1.

expressão – é um número (com ou sem sinal).1 A declaração const A sua sintaxe geral é: const <identificador> = <expressão>. dentro de um bloco.2 Declaração de constantes Tem-se como definição de constante tudo aquilo que é fixo ou estável. Identificadores podem ser usados. estas não podem receber atribuições posteriormente. 29 . Após declaradas as constantes. 4.3). } Inc(numero.. <identificador> = <expressão>. 4.. Observações: • • ... numero_maximo = 24345. Onde: • • • const – é uma palavra reservada que inicia uma parte do programa para a definição de constantes. } Inc(numero).2. {Incrementa variável numero em 1. existirão vários momentos em que este conceito deverá ser aplicado. .1416. Exemplo: . podemos definir quantas constantes forem necessárias. cor_preferida = ‘verde’. . como sinônimos de constantes. o Turbo Pascal substituirá-las pelos seus respectivos valores declarados. literal ou identificador de constante já definido. .. valor lógico... const Pi = 3. Quando estivermos programando em Pascal. Observações: • • O valor de incremento poderá ser precedido pelo sinal de menos (-). É o mesmo que numero := numero+1. identificador – é qualquer identificador permitido pela linguagem Pascal. É o mesmo que numero := numero+3.Linguagem Pascal Exemplo: Var numero: integer.. desde que tenham sido previamente definidos como tal. Desta forma a procedure irá decrementar o valor da variável.. O incremento é um valor do tipo longint e conseqüêntemente não poderá ultrapassar a faixa deste tipo. Na sub-área Const. .. {Incrementa variável numero em 3. Toda vez que nos referirmos às constantes dentro do programa.

. 30 .Linguagem Pascal 4. mas não as inicializa..maxint – a constante maxint especifica o maior valor que pode ser atribuído a uma quantidade do tipo inteiro (integer). literal.2. . Maximo: Integer = 9999. Contador: Integer = 100.. valor – pode ser um número (com ou sem sinal). define o conjunto ordenado de valores que podem ser atribuídos a estas variáveis. 4. seria interessante que pudéssemos ao mesmo tempo em que declaramos a variável. <identificador> : <tipo> = <valor>.. const Minimo: Integer = 0.2 Constantes tipadas A declaração de variáveis na sub-área Var. .3 Constantes predefinidas O Turbo Pascal for Windows inclui ainda dois idenficadores predefinidos padrão que representam constantes. maxlongint. Este valor é 32.maxlongint – a constante maxlongint especifica o maior valor que pode ser atribuído a uma quantidade do tipo inteiro longo (longint) . tipo – é o tipo das variáveis. apenas reserva espaço de memória para elas. ...647. Isto é possível com o conceito de constante tipada. Diferente da constante não tipada a declaração de uma constante tipada especifica o tipo e o valor desta constante.767. Sob certas circunstâncias. Sintaxe: .483.147. identificador – é qualquer identificador permitido pela linguagem Pascal. dar seu valor inicial. seus valores serão desconhecidos. Onde: • • • • Const – é uma palavra reservada que inicia uma parte do programa para a definição de constantes. até que se atribua valores a elas. uma expressão ou identificador de constante já definido. Este valor é 2. ou seja.. . ou seja. São eles: maxint. Observações: • Constantes tipadas podem ser usadas exatamente como variáveis do mesmo tipo. valor lógico. podendo inclusive receber atribuições posteriormente. Exemplo: . C : char = ‘A’. const <identificador> : <tipo> = <valor>.. .

. elementoN– é um identificador que passará a representar um elemento do conjunto. Observações: • • • • Note que os elementos do novo tipo devem ser separados por vírgulas..retorna true. então: Type boolean = (false. sabado).... Estes elementos estão coletivamente associados a um nome particular que serve para identificar o tipo de informação.. quarta.elemento2.. A sua sintaxe geral é: Type identificador= (elemento1. Uma vez definido o tipo passa a ser referenciado pelo seu identificador.3.Linguagem Pascal 4. segunda. constitui-se dos tipos predefinidos. identificador= (elemento1. Type cor dia_util sexo . identificador – é qualquer identificador permitido pela linguagem. Pred(X) e Ord(X) também podem ser utilizadas. .elemento2. O identificador segue as regras dadas anteriormente. quinta. • .verde..quinta. Um novo tipo é criado através de um definição de tipo que determina um conjunto de valores e associa um identificador a este conjunto.. a definição do tipo boolean seria. 4. que passará a identificar o novo tipo. = (segunda.. em que cada um destes é interpretado como um elemento individual. = (azul..quarta. podemos também definir novos tipos através da declaração Type. Onde: • • • Type – é uma palavra reservada que inicia uma parte do programa contendo definições de tipo. = (masculino.. Considerando os conceitos introduzidos até aqui. domingo < terça .3 A declaração de tipos Além dos tipos de dados predefinidos no Turbo Pascal .1 Dados do tipo enumerado Um dado do tipo enumerado consite numa sequência ordenada de identificadores. A associação entre o nome do tipo de informação e os seus elementos individuais é estabelecida pelas definições de tipo (type). terça. É como se a cada nova definição fosse acrescentando um novo tipo ao conjunto que. Uma vez que os dados do tipo enumerado estão definidos numa sequüência ordenada.. Exemplo: .sexta). Deve ser entendido que estes elementos são os únicos valores que podem estar associados com o tipo definido.elementoN).branco. true). é o nome do novo tipo.vermelho.terça.feminino). inicialmente. 31 . sexta. Exemplo: Vamos considerar a definição do tipo: Type dias = (domingo.amarelo). As funções preexistentes Succ(X)..elementoN). os operadores relacionais podem ser aplicados de modo a formar uma expressão booleana.

. begin Writeln(‘O AZUL tem um número ordinal = ’.quinta.sexta. O tipo original de dados é referido como o tipo suporte. Dias_da_semana = segunda. identificador= primeiro elemento. type Cores = (VERMELHO. primeiro elemento – é o primeiro dos elementos ordenados dentro da gama de valores. Os dados do tipo real não podem ser usados para definir uma gama de valores...’Z’.. Ord(quinta) = 4 – o número inteiro 4 indica a ordem do valor quinta no conjunto (a enumeração começa de zero.. identificador – é qualquer identificador permitido pela linguagem. caracter e booleanos podem ser usados para definir uma gama de valores. Onde: • • • • Type – é uma palavra reservada que inicia uma parte do programa contendo definições de tipo. uses WinCrt.último elemento. Sintaxe: Type identificador= primeiro elemento. . 4. end. Program exemplo.. Note que dois pontos consecutivos devem separar o primeiro e o último elementos da gama de valores.VERDE). O conceito gama de valores pode ser aplicado a qualquer conjunto de dados ordenados e simples. ' decimal'). maiuscula = ‘A’. 32 .sabado). mês = 1..sexta.Linguagem Pascal • • • • quinta >= sábado .31. Observações: • • • Os dados do tipo inteiro.último elemento..2 Dados do tipo gama de valores Uma gama de valores refere-se a uma parte do intervalo original de um tipo de dados simples e ordenados.. Type dias = (domingo.quarta. dentro da gama de valores.Ord('c').. último elemento – é o último dos elementos ordenados. Exemplo: . que passará a identificar o novo tipo. O identificador segue as regras dadas anteriormente. contando da esquerda para a direita).terça. Cada elemento que esteja dentro da gama de valores é considerado também como pertencendo ao tipo suporte. segunda <> sexta – retorna true.AZUL.. . é o nome do novo tipo. Writeln('C em código ASCII é '.segunda.retorna false.3.Ord(BLUE)). Succ(segunda) = terça – retorna true. .

A diferença entre write e writeln reside no fato de que a procedure write escreve o parâmetro. cujos valores serão enviados à unidade de saída. Uses CRT.i).''. writeln(r). r:=3.Entrada e saída de dados 5. Begin ClrScr. lista de identificadores – são os nomes de variáveis do tipo string. write('valor de r = '). s : string[20].1 Write e Writeln Estas são as principais procedures destinadas a exibir todos os tipos de dados no vídeo. Exemplo: Program Exemplo.14. s:='interessante!'. real ou boolean. c:='Muito'. integer. char. Writeln('Exemplos de aplicacao de writeln e write'). end. writeln(c. Este programa resultaria na seguinte tela: --------------------------------------------------------Exemplos de aplicacao de writeln e write Valor de i e igual a 100 valor de r = 3. 33 . Var i : integer. writeln. i:=100. e mantém o cursor na mesma linha em que foi escrito. constantes e/ou expressões de mesmo tipo das variáveis também podem aparecer nos comandos de saída. r : real.1400000000E+00 Muito interessante! --------------------------------------------------------- . writeln('Valor de i e igual a '.Linguagem Pascal Capítulo 5 . Estes parâmetros devem ser separados por vírgula. enquanto que writeln passa o cursor para a próxima linha. A sua sintaxe geral é: Write (<lista-de-identificadores e/ou constantes e/ou expressões>) Writeln (<lista-de-identificadores e/ou constantes e/ou expressões>) onde: • • • write e writeln – são identificadores com significado predefinido em PASCAL.s). c : char. Observação: • A instrução Write e Writeln aceita múltiplos parâmetros.

20 x + 5. sendo e. Isto pode ser conseguido facilmente adicionando algumas especificações de formatação nas instruções write ou writeln. real.20 x 5. e2 é um valor inteiro positivo e especifica o número de dígitos que devem ser escritos após o ponto decimal. podendo inclusive ser uma constante ou uma expressão. onde: • p1 é um parâmetro com uma das formas: e e:e1 e:e1:e2 . writeln (A:4:2. end. L:= 'y'. writeln (B:5:2). writeln (A:4:2). Este programa resultaria na seguinte tela: --------------------------------------------------------3. e2 expressões.2.. neste caso. char. var A. string e boolean. B: real. Se e1 for insuficiente para representar o valor a ser escrito. e1 – representa um valor inteiro positivo e indica o número mínimo de caracteres a ser escrito. uses WinCrt. A sua sintaxe geral é: write(p1... Exemplo: program Exemplo.pn). • • • e – representa o valor a ser escrito e pode ser do tipo integer. K.2 Saídas formatadas A informação de saída pode normalmente ser tornada mais legível alterando as dimensões de campos associados com os dados numéricos e booleanos. writeln (A+B:6:3). Caso e2 não seja fornecido o valor real será escrito no formato exponencial. ' +'. B:= 5. writeLn(p1. 34 .. writeln (K:2).010 3. então será alocado mais espaço.81..010 --------------------------------------------------------. begin A:= 3. o espaço excedente será preenchido com brancos. e1.. B:5:2.81 y = 9.Linguagem Pascal 5.' ='. A+B:6:3).pn). K:= 'x'. Se e1 for excessivo. L:2. L: char. K:2.. e2 – só se aplica se e for do tipo real.81 9..

3 Read e Readln O comando read é usado para ler dados via teclado e atribuí-los à variáveis do tipo inteiro. Uses WinCrt. A sua sintaxe geral é: read(variáveis de entrada). Write('Digite um numero real ---------> '). Readln(i). Qualquer número pode ser precedido por um sinal de mais ou menos. Var i r c s : : : : integer. Writeln(c). O dado do tipo caracter não deve ser colocado entre aspas. Exemplo: Program teste. variáveis de entrada – são os nomes das variáveis do tipo string. Note que as variáveis do tipo booleano não podem ser incluídas na lista de variáveis de entrada. onde: • • read e readln – são identificadores predefinidos em Pascal. Readln(c). Write('Digite um numero inteiro ------> '). Readln(s). sendo que cada tecla pressionada é ecoada para o vídeo. Write('Digite uma string -------------> '). (* pula duas linhas *) Writeln(i). real. Os dados numéricos devem ser separados uns dos outros por espaços ou por indicações de fim de linha (ENTER). End.Writeln. char.Linguagem Pascal 5. char. o cursor permanecerá no mesma posição no vídeo. desde que não haja um espaço entre o sinal e o número. string[10]. A diferença entre as instruções read e readln é que a instrução readln obriga a próxima instrução read ou readln a começar a ler em uma nova linha de dados. 35 . Writeln(s). Após pressionarmos ENTER. Observação: • • • • • As variáveis de entrada devem estar separadas por vírgulas. cujos valores serão lidos na unidade de entrada. Writeln(r). real ou do tipo caracter (char ou string). Begin ClrScr. Write('Digite um caractere -----------> '). Writeln. . integer ou real. Já a instrução read permite que a próxima instrução read ou readln comece na mesma linha. A procedure Read lê dados do teclado até que se pressione a tecla ENTER. Readln(r).

14)).. A chamada da função precede as demais operações. se uma função é um operando de uma expressão. ou seja perde a parte decimal Tipo de entrada Inteiro ou Real Inteiro ou Real Inteiro ou Real Inteiro ou Real Real Real Inteiro ou Real Real Inteiro ou Real Inteiro ou Real Inteiro ou Real Real Tipo de valor retornado Inteiro ou Real (o mesmo que Num) Real Real Real Real Real Real Inteiro Real Inteiro ou Real (o mesmo que Num) Real Inteiro Exemplo: .. Função Abs(Num) ArcTan(Num) Cos(Num) Exp(Num) Frac(Num) Int(Num) Ln(Num) Round(Num) Sin(Num) Sqr(Num) SqRt(Num) Trunc(Num) Descrição Valor absoluto Arco tangente Co-seno Exponencial (ex) e=2.71882818. .1 Funções matemáticas No pascal estão disponíveis funções predefinidas para o cálculo de várias operações matemáticas. begin Writeln(2*Sin(3.Linguagem Pascal Este programa resultaria na seguinte tela: --------------------------------------------------------Digite um numero inteiro ------> 10 Digite um numero real ---------> 10.. Parte fracionária Parte inteira Logaritmo natual (base e) (Num > 0) Arrendondamento ao inteiro mais próximo Seno Quadrado Raiz quadrada (Num > 0) Extração da parte inteira. End.Funções padrão predefinidas 6...0500000000E+01 a abc --------------------------------------------------------- Capítulo 6 .. ela deve ser calculada antes que as demais operações possam ser efetuadas. Observe a seqüência de execução da instrução acima: .5 Digite um caractere -----------> a Digite uma string -------------> abc 10 1. 36 .

2o) o resultado deste cálculo é multiplicado então por 2. se existir. exceto o tipo real. c) Ord(‘C’) é 67. Retorna o sucessor de X no Integer ou Char Integer ou Char conjunto de caracteres ASCII. As expressões do tipo char são formadas por uma constante. Existem. se existir. no conjunto de caracteres ASCII.Linguagem Pascal 1o) é calculado o seno. Retorna o caracter que corresponde Integer Char à ordem. tais como: Nome Ord (X) Chr(EA) Descrição Tipo de entrada Char Tipo de valor retornado Integer Succ(X) Pred(X) Retorna um número decimal que indica a ordem X no conjunto de caracteres ASCII. ou uma variável ou a ativação de uma função do tipo char. Retorna o predecessor de X no Integer ou Char Integer ou Char conjunto de caracteres ASCII. Observações: • Como parâmetros de funções você pode usar expressões e até outras funções. 37 . 3o) e por fim é mostrado na tela o resultado. Exemplo: a) Succ(‘A’) é ‘B’. porém funções predefinidas. mas de qualquer tipo predefinido. Pred(X) aplicam-se não apenas às variáveis ou constantes do tipo char. Succ(X). .2 Funções literais O tipo predefinido char é formado pelos caracteres existentes na configuração considerada. b) Succ(1) é 2. Operações neste tipo são definidas no Turbo Pascal. Pred(‘D’) é ‘C’. 6. se existir. Pred(100) é 99. dada pelo valor da expressão aritmética EA. Observação: • As funções Ord(X). Chr(65) é ‘A’ no código ASCII.

ou seja. existe no Turbo Pascal um conjunto de rotinas embutidas predefinidas. um bloco de programas contendo início e fim. A declaração uses indica ao compilador onde buscar as definições (código objeto) de certas instruções. que será apresentada a seguir. Sintaxe da declaração uses: Uses <identificador>. problemas complexos exigem algoritmos complexos.2 Tipos de sub-rotinas A linguagem Pascal permite a utilização de dois tipos de rotinas definidas pelo programador: Procedure (procedimento) e Function (função). . 38 . Desta forma. Quando uma sub-rotina é chamada por um programa principal.3 Unidades predefinidas – As Units As Units são um conjunto de rotinas prontas para serem usadas pelo programador.. Este tipo de rotina embutida é conhecido pelo nome de unidade. . As units padrão do Turbo Pascal são: • • • • • • Strings System WinCrt WinDOS WinProcs WinTypes As units mais importantes para o nosso estudo são a System e a WinCrt. Identificador – é o nome de uma das unidades padrão do Pascal. As Units são rotinas compiladas separadamente do programa principal. A diferença entre os dois tipo de sub-rotina está no fato de uma procedure poder ou não retornar um valor após seu processamento. identificado por um nome.. Onde: Uses – é uma palavra reservada do Pascal. na verdade. e é este trecho menor que é chamado de sub-rotina. Neste momento o que nos interessa é o conhecimento das Units já disponíveis no Pascal. sub7. através do qual será referenciado em qualquer parte do programa principal ou do programa chamador da rotina. enquanto uma function sempre irá retornar um valor após seu processamento. em inglês Unit. 7.Linguagem Pascal subCapítulo 7 . fornecidas pela Borland. Antes de utilizarmos algumas das rotinas predefinidas do Pascal devemos antes declarar as Units na Área de Declarações do programa Pascal. Uma unit é na realidade uma biblioteca de funções e procedures predefinidas. <identificador>. Além das rotinas definidas pelo programador. cada parte menor tem um algoritmo mais simples. Uma procedure ou function é.As sub-rotinas do Pascal sub7.1 Utilizando as sub-rotinas No geral. mas sempre é possível dividir um problema grande em problemas menores. ela é executada e ao seu término o controle de processamento do programa retorna automaticamente para a primeira linha de instrução após a linha que efetuou a sua chamada. O conceito de Units foi incorporado no Pascal na sua versão 4.

Algumas procedures e funções da unit System: Read.1..1 Convertendo de caixa baixa para caixa alta (UpCase) Esta função converte um caracter para o seu correspondente em caixa alta..3.. uma variável ou uma expressão do tipo string de caracteres (String).c.. É uma função da Unit System. ou seja. Sintaxe: Lenght(expressão caracter)..’’’’.1.. . 7...UpCase(c)).....> ‘). Onde: expressão caracter – é uma string de caracteres... Eof. Sintaxe: UpCase(expressão caracter). não é necessário a sua declaração na Área de declarações do Pascal.2 Verificando o tamanho de uma string (Lenght) Esta função retorna o tamanho de uma string.1 A unit System A Unit System é a única que pode ser utilizada sem ser citada num programa Pascal.’’’’. Writeln(‘Digite um caracter qualquer. Lenght. Um programa exemplo: .3.3. Readln. É uma função da Unit System. Nela está contida a maior parte das rotinas padrões do Pascal. Onde: expressão caracter – é um único caracter ou uma expressão do tipo caracter (Char)..Linguagem Pascal 7. Um programa exemplo: . Este programa resultaria na seguinte tela: Considerando que o caracter digitado pelo usuário é o caracter ‘a’ o programa resulta na seguinte tela: --------------------------------------------------------------O caracter ‘a’ em caixa alta fica assim: A --------------------------------------------------------------- 7. Readln(c). Chr. Writeln(‘O caracter ‘.’ em caixa alta fica assim: ‘. Write e Writeln. 39 .

KeyPressed. controle de vídeo e teclado. O ponto e vírgula após o ClrScr é importante: ele indica ao compilador que terminou uma instrução. 7.. Este comando é uma procedure da unit WinCrt.:Pascal Esta string tem 6 carateres. para fazer uso do recurso de limpar e posicionar mensagens na tela do computador. readln(x).: '). 40 . Readkey. Este programa resultaria na seguinte tela: Considerando que a string digitada pelo usuário foi ‘Pascal’ o programa resulta na seguinte tela: --------------------------------------------------------------Digite uma string qualquer. Write('Esta string tem '. por exemplo.1 Limpando a tela (ClrScr) ClrScr é um comando.Linguagem Pascal Program exemplo.3..2. Por exemplo. será usada a principal e mais utilizada unidade do Turbo Pascal: a WinCrt. ClrScr.. GotoXY. Var x:string.y.. Writeln(‘O primeiro programa a gente nunca esquece!’).' carateres. Uses WinCrt. e significa “limpe a tela e coloque o cursor no canto superior esquerdo” (linha 1. Exemplo: Program exemplo. end. y:integer. begin Write('Digite uma string qualquer.'). Por esta razão. end. Writeln(‘O segundo a gente também nunca esquece!’). Algumas procedures e funções da unit WinCrt: ClrScr. ela possui a maior parte das rotinas e variáveis de geração de som.3. Observação: • O comando ClrScr limpará a tela e posicionará o cursor no canto superior esquerdo da tela. Readkey. y := Length(x). coluna 1 do monitor).2 A unit WinCrt Esta é a unit mais utilizada na programação do Turbo Pascal. Uses WinCrt. begin ClrScr. etc. --------------------------------------------------------------- 7. .

ecoá-lo para a tela do computador. var C: Char. uses WinCrt. var C: Char. enquanto isso não ocorre. Este comando é também uma função da unit WinCrt .: O programa escreverá na tela a frase “Por favor pressione uma tecla qualquer!” um número indefinido de vezes. Usamos este comando para fazer com que o programa pare de ser executado e fique aguardando que alguma tecla seja pressionada. que retorna o valor da tecla pressionada. até que uma tecla qualquer seja pressionada.” e finaliza.. a execução do programa fica parada. KeyPressed simplesmente retorna true ou false. enquanto isso não ocorre. --------------------------------------------------------- Por favor pressione Por favor pressione Por favor pressione . . uses WinCrt. Writeln(‘Uma tecla qualquer foi pressionada!'). Diferentemente da função ReadKey. a execução do programa fica parada. Este comando é também uma função da unit WinCrt e há ainda outros usos para ela.3.2. end.. C := Readkey. sem contudo. Usamos este comando para fazer com que o programa pare de ser executado e fique aguardando que alguma tecla seja pressionada. begin repeat Writeln(‘Por favor pressione uma tecla qualquer!'). Este programa resultaria na seguinte tela: Obs. Por favor pressione Você pressionou uma uma tecla qualquer! uma tecla qualquer! uma tecla qualquer! uma tecla qualquer! tecla qualquer! --------------------------------------------------------- 7.3 Aguardando pressionar uma tecla (ReadKey) ReadKey é um comando que lê um caracter através do teclado. 41 . until KeyPressed. Neste momento o programa encerra a estrutura de repetição Repeat-Until e executa a instrução “ Writeln(‘Uma tecla qualquer foi pressionada!'). Exemplo: Program exemplo.2.Linguagem Pascal 7.3. false enquanto nenhuma tecla for pressionada e true quando uma tecla qualquer for pressionada. begin Writeln(‘Por favor pressione uma tecla qualquer !').2 Determinando o pressionar de uma tecla (KeyPressed) KeyPressed é um comando que determina se uma tecla qualquer foi pressionada ou não através do teclado. Exemplo: Program exemplo.

3 Posicionando o cursor na tela (GotoXY) Este procedimento permite posicionar o cursor em um determinado ponto da tela. uses WinCrt. end. --------------------------------------------------------- 7. Sintaxe: GotoXY(parâmetroX.: Vamos supor que você tenha pressionado a tecla A (caixa alta). Ord(C). 42 . Seu valor em ASCII é '. var C: char. Seu valor em ASCII é 65. --------------------------------------------------------- Por favor pressione uma tecla qualquer ! Você pressionou a tecla A. --------------------------------------------------------- Olá! --------------------------------------------------------- . Este programa resultaria na seguinte tela: O comando GotoXY posicionará o cursor na linha 10. A mensagem ´Olá!´ será mostrada então a partir desta coordenada. Este programa resultaria na seguinte tela: Obs. Para utilizá-lo é necessário informar dois parâmetros: o primeiro representa o valor da coluna que deverá ser um valor numérico do tipo inteiro positivo entre 1 e 80 e o segundo parâmetro representa o número da linha que deverá ser um valor numérico também do tipo inteiro positivo entre 1 e 25. end.2.10). coluna 10 da tela do computador.3.parâmetroY). begin GotoXY(10. C. Exemplo: Program exemplo.'). '. Writeln('Olá!'). Este comando é um procedimento da unit WinCrt.Linguagem Pascal Writeln('Você pressionou a tecla '. '.

caso contrário.1.. begin read (A. se a expressão retornar falso (false). os valores de A.Linguagem Pascal Capítulo 8 – A tomada de decisões 8. após as variáveis A. condição – é a expressão booleana que será avaliada no comando If-Then. cessa a execução do programa sem nenhuma mensagem exibida. em seguida.. C: real. C). Onde: • • • If – Then – são palavras reservadas do Pascal. B e C serão lidos. . . o comando If-Then irá avaliar a expressão booleana (A+B<C) e se a resposta for verdadeira (true).. Esta estrutura de decisão permite que uma ação se realize. será escrito a mensagem ‘A soma de A com B é menor do que C. caso a expressão booleana avaliada retorne verdadeiro (true). Neste exemplo. seja uma instrução composta. e a execução então terminará. if A+B < C then write (‘A soma de A com B é menor que C!’) end. bloco de comando – é um único comando (bloco de instrução simples) ou um conjunto de comandos (bloco de instrução composta) que serão executados. ou . deve-se delimitar o bloco de comandos por begin e end. B. C). begin read (A. Exemplo: Program exemplo. 43 . Esta expressão retorna verdadeiro (true) ou falso (false). if A+B < C then write (‘A soma de A com B é menor que C!’) end. de (IF8. a ser executada após a avaliação da expressão booleana. B e C serem declaradas reais. B. var A. B. ou seja.1 A estrutura de decisão simples (IF-THEN) Sintaxe: If <condição> Then <bloco de comando>. Observações: • Caso a instrução. com mais de um comando. Uses WinCrt. se e somente se uma condição lógica for atendida.1 A estrutura de decisão IF A estrutura de decisão IF pode se apresentar de duas formas: a estrutura de decisão simples (IF-THEN) e a estrutura de decisão composta (IF-THEN-ELSE)..

condição – é a expressão booleana que será ser avaliada no expressão retorna verdadeiro (true) ou falso (false). read (B).5. X. begin writeln('Digite o valor de A: '). Esta simples) ou um conjunto de caso a expressão booleana simples) ou um conjunto de caso a expressão booleana Exemplo1: Program exemplo1. begin read (A. e a execução então terminará. . Uses WinCrt. read (A). Neste exemplo. em seguida o comando if-then-else irá avaliar a expressão booleana (A+B<C) e se a resposta for verdadeira (true). após as variáveis A. (condição) avaliada retorne verdadeiro (true).2 A estrutura de decisão composta (IF-THEN-ELSE) Sintaxe: If<condição> Then <bloco de comando1> Else <bloco de comando2>. writeln('Digite o valor de B: '). será escrito a mensagem ‘A soma de A com B é maior do que C. Y: real. e a execução então terminará. B e C serão lidos. if A+B < C then write (‘A soma de A com B é menor que C!’) else write (‘A soma de A com B é maior que C!’). Onde: • • • • If – Then-Else – são palavras reservadas do Pascal. bloco de comando2 – é um único comando (bloco de instrução comandos (bloco de instrução composta) que serão executados. var A. os valores de A. B. end. C). comando If-Then-Else. B.1. Exemplo2: Program exemplo2. var A. Uses WinCrt. será escrito a mensagem ‘A soma de A com B é menor do que C. caso contrário. (condição) avaliada retorne falso (false). 44 . B. bloco de comando1 – é um único comando (bloco de instrução comandos (bloco de instrução composta) que serão executados. if A = B then begin X:= 1. B e C serem declaradas reais. C: real. se a expressão retornar falso (false).Linguagem Pascal (IF-THEN8.

45 .Linguagem Pascal Y:= 2.5 end. 8. write (´[ 4 ] .1). writeln ('O valor de X é :'.5 end else begin X:= -1. end. gotoxy(28. gotoxy(28.Multiplicação´).Subtração´).. write (´[ 2 ] . Colocar um ponto e vírgula antes da palavra reservada Else resultará num erro de compilação. if (opção = ´3´) then rot_multiplicacao. Perceba que neste exemplo o selecionamento das sub-rotinas é feito com instruções if-then.:´). while (opção <> ‘5’) do begin clrscr. write (´[ 5 ] – Fim de Programa´).CASE A estrutura CASE é uma estrutura de controle condicional que permite que alguns grupos particulares de instruções (bloco de comandos) sejam escolhidos e executados dentre os vários grupos de instruções disponíveis.Divisão´). Observações: • • Caso a instrução. gotoxy(28.14).8). if (opção = ´4´) then rot_divisao. begin opcao := ´0´.Soma´). Exemplo utilizando a estrutura if-then: program exemplo. end.. a ser executada após a avaliação da expressão booleana. write (´[ 3 ] . if (opção = ´1´) then rot_adicao. Você pode observar também que se você tivesse um menu com quinze opções. ou seja. end. gotoxy(33. gotoxy(28. Y:= -2. gotoxy(28. readln(opção).12). gotoxy(28.10). write (´Menu Principal´).5. O sinal de ponto e vírgula não deve aparecer numa estrutura If-Then-Else. writeln ('O valor de Y é :'..6). com mais de um comando. Y:4:1). X:4:1). seja uma instrução composta. write (´Escolha uma opção. if (opção = ´2´) then rot_subtracao. deverão ser definidas quinze instruções do . ... deve-se delimitar o bloco de comandos por begin e end.2 Estrutura de decisão com múltipla escolha . write (´[ 1 ] .18). exceto como separador dentro de um bloco de instrução composta (entre o begin e o end)..

N>. End. separadas por vírgula. Instruções (bloco de comando) vazias são permitidas. Esta forma pode ser simplificada com a utilização da estrutura case-of. por exemplo. <instrução1.. isto é. para indicar que nenhuma ação deve ser tomada para certos valores. <instrução2. <opção2>: <instrução1>.1>. <instrução1. instrução . a mesma instrução pode ser usada com duas ou mais listas de opção do case.2>.N>.N>. As instruções não necessitam ser únicas. As constantes ou gama de valores da opção tem que ser do mesmo tipo da variável de controle da estrutura Case-of-end. variável– é o nome da variável a ser controlada na estrutura de decisão Case-Of-Else. end. . Syntaxe: Case <variável> Of <opção1>: <instrução1>. <instrução2.2>. <opção2>: begin <instrução2.é um único comando (bloco de instrução simples) ou um conjunto de comandos (bloco de instrução composta) que serão executados. separadas por vírgulas.. cujo tipo seja o mesmo da variável de controle da estrutura. ou Case <variável> Of <opção1>: begin <instrução1.2>.Linguagem Pascal tipo if-then para verificar a escolha do operador. End. <instruçãoN.1>. opção – é o conteúdo da variável a ser verificado (lista de constantes). A instrução pode ser uma instrução simples do pascal ou uma chamada a uma rotina. <opçãoN>: <instruçãoN>. end. Onde: • • • • Case –Of-Else – são palavras reservadas do Pascal. 46 . <opçãoN>: begin <instruçãoN.1>. Observações: • • • • • A opção consite de uma ou mais constantes ou gama de valores. Else <instrução>. <instruçãoN. Else <instrução-else>. end. .

write ('Escolha uma opção.6). begin while (opcao <> '5') do begin clrscr... gotoxy(28. end. write ('[ 4 ] .. '2': rot_subtracao. write ('[ 1 ] . gotoxy(28. gotoxy(28.8). write ('[ 5 ] . readln(opcao). write ('[ 2 ] .Linguagem Pascal • A instrução else só será executada se nenhuma das opções anteriormente testadas. else writeln('É o fim do programa!'). end. gotoxy(28.10).18). end. '3': rot_multiplicacao. 47 .Multiplicação'). gotoxy(28. . for atendida. gotoxy(33. write ('Menu Principal').12).Subtração'). . '4': rot_divisao. na estrutura case. gotoxy(28.. Exemplo utilizando a estrutura Case-Of-End: program principal.:'). write ('[ 3 ] ... case opcao of '1': rot_adicao.14).1).Fim de Programa').Soma').Divisão').

dentro da estrutura While-Do. O bloco de comando. Este programa resultaria na seguinte tela: --------------------------------------------------------O 1o digito é :1 O 2o digito é :2 ... bloco de comando . .digito). e a seqüência de comandos. com um inteiro em cada linha. expressão – é uma expressão booleana que retorna verdadeiro (true) ou falso (false)..é um único comando (bloco de instrução simples) ou um conjunto de comandos (bloco de instrução composta) que serão executados enquanto a expressão booleana for verdadeira (true). Observações: • • • • O bloco de comando pode ser do tipo simples ou composto. Se esta expressão retornar um valor falso (false) na primeira vez em que a expressão for avaliada.. 48 . var digito: integer. Quando isto não mais ocorrer. Quando o bloco de comando for constituído por mais de um comando é obrigatório o begin e o end.'º digito é :'. apesar de normalmente ser composto. Isso pode ser conseguido com a seguinte estrutura While-Do: Program exemplo. begin digito:= 1. que vier logo após a estrutura While-Do. passa a ser executada. A expressão booleana do comando While-do é avaliada antes do bloco de comando ser executado. Exemplo: Vamos supor. os comandos do bloco de comando não serão executados nenhuma vez.2. end. Uses WinCrt. a repetição é interrompida. Onde: • • • While-do – são palavras reservadas do pascal.20.digito. Quando o bloco de comando for constituído por um único comando. por exemplo. será executado repetidamente. o begin e o end podem ser omitidos.Linguagem Pascal Capítulo 9 – Estruturas de repetição While9.1 A estrutura de repetição condicional While-Do A estrutura de repetição While-Do é utilizada para efetuar ciclos condicionais. Sintaxe: While <expressão> Do <bloco de comando>. que queremos escrever os números inteiros 1. while digito <= 20 do begin writeln('O '. enquanto a expressão booleana se mantiver verdadeira (true). end... digito := digito+1.

Sintaxe: Repeat <instrução1>.2. dado que a expressão booleana não é testada no ínício e sim no fim da estrutura de repetição. a repetição é interrompida. Repeat writeln('O '. Este programa resultaria na seguinte tela: --------------------------------------------------------O 1o digito é :1 O 2o digito é :2 .Linguagem Pascal O 20o digito é :20 --------------------------------------------------------- Repeat9.... que queremos escrever os números inteiros 1. Quando isto ocorrer. .20. Observações: • • • Note que nesta estrutura o bloco de comando será sempre executado pelo menos uma vez. 49 .digito... Uses WinCrt. Onde: • • • Repeat-Until – são palavras reservadas do pascal. Isso pode ser conseguido com a seguinte estrutura Repeat-Until: Program exemplo. instrução . end. que vier logo após a estrutura Repeat-Until. O bloco de comando será executado repetidamente. com um inteiro em cada linha. . var digito: integer.. Until digito > 20.2 A estrutura de repetição condicional Repeat-Until A estrutura de repetição Repeat-Until é utilizada para efetuar ciclos condicionais. <instruçãoN> Until <expressão>. passa a ser executada. A expressão booleana do comando Repeat-Until é avaliada após a instrução ou instruções serem executadas. digito := digito+1. A seqüência de instruções dentro da estrutura Repeat-Until não necessita ser incluída dentro de um bloco Begin e End. expressão – é uma expressão booleana que retorna verdadeiro (true) ou falso (false). e a seqüência de comandos..digito). por exemplo.. até que a expressão booleana se torne verdadeira (true).'º digito é :'.é um único comando (bloco de instrução simples) ou um conjunto de comandos (bloco de instrução composta) que serão executados até que a expressão booleana se torne verdadeira (true). <instrução2>. begin digito:= 1. Exemplo: Vamos supor.

Se a variável de controle é uma variável do tipo inteira. portanto. o número de vezes que o bloco de comando é executado. valor final – é o valor máximo que a variável de controle pode assumir. Exemplo: Program exemplo. O valor de valor incial deve ser menor do que valor final se pretendemos que a instrução dentro da estrutura For-to-do seja executada mais de uma vez. O número de valores atribuídos à variável de controle determina. a instrução (bloco de comando) será executada (valor final – valor inicial +1) vezes. 50 . Isto é.'º digito é :'. portanto.Linguagem Pascal O 20o digito é :20 --------------------------------------------------------- 9. são calculados uma única vez antes da primeira execução da estrutura For-to-do. Os valores de valor inicial e valor final podem ser expressos como constantes. para cada um de vários valores consecutivos atribuídos à variável de controle.i). o valor inicial e o valor final devem pertencer ao mesmo tipo predefinido (excluindo o real). A variável de controle não pode ser alterada. Contudo. então aumentará automaticamente uma unidade. a instrução será executada somente uma vez. A variável de controle. variáveis ou expressões. estes valores devem ser do mesmo tipo que a variável de controle. esta estrutura permite que uma ação seja repetida um número especificado de vezes. Uses WinCrt. valor inicial – é o primeiro valor que a variável de controle assume. cada vez que o bloco de comando da estrutura For-to-do for executado. Sintaxe da primeira forma: For <variável de controle> := <valor inicial> to <valor final> do <bloco de comando>. end. bloco de comando .são palavras reservadas do pascal. A variável de controle deve ter sido previamente declarada. que esteja dentro do bloco de comando. Se valor incial for igual a valor final . por qualquer instrução. var i: integer. O valor inicial e o valor final.i. O bloco de comando será executado repetidamente. que controlará os ciclos da estrutura For-todo. variável de controle – é um identificador de variável. Onde: • • • • • For-to-do e For-downto-do . caso sejam dados como expressão. begin for i:= 1 to 20 do writeln('O '. a instrução não chegará a ser executada.é um único comando (bloco de instrução simples) ou um conjunto de comandos (bloco de instrução composta) que serão executados enquanto a estrutura For-to-do estiver ativa. se valor incial for maior que valor final. Observações: • • • • • • • • Esta estrutura é muito utilizada quando conhecemos de antemão o número de ciclos a executar. .3 A estrutura de repetição incondicional For A estrutura de repetição For é utilizada para efetuar ciclos incondicionais.

ele deve. durante as sucessivas passagens pelo ciclo. ser declarado na sub-área Label. e se o valor inicial for menor que o valor final. Para utilizarmos algum Label. A segunda forma da estrutura for é semelhante à primeira. exceto no uso da palavra reservada Downto em vez de To. label sai_do_loop.4 Labels e Goto A instrução Goto permite desviar a seqüência de execução do programa para um determinado Label pré-definido. então a instrução não será sequer executada. { Este programa demonstra como quebrar a estrutura for-to-do utilizando a instrução goto. begin for i:= 20 downto 1 do writeln('O '. } Uses WinCrt.i. 51 . Uses WinCrt.i). R.'º digito é :'. obrigatoriamente.. exceto pelo fato de que a variável de controle é decrementada. Exemplo: Program exemplo. desde o valor incial até o valor final. Se os dois valores forem iguais. na área de declarações. var i: integer. .. B. i: integer. A ação produzida por esta forma da estrutura For é semelhante à primeira forma. Veja um exemplo abaixo: Program CALCULO. Este programa resultaria na seguinte tela: --------------------------------------------------------O 1o digito é : 20 O 2o digito é : 19 . var A. então a instrução será executada uma única vez. Observações: • O valor inicial deve ser maior que o valor final se pretendemos que a instrução dentro da estrutura For-downto-do seja executada mais de uma vez. end.Linguagem Pascal Sintaxe da Segunda forma: For <variável de controle> := <valor inicial> downto <valor final> do <bloco de comando>. O 20o digito é :1 --------------------------------------------------------- 9. Esta variável é decrementada automaticamente de uma em uma unidade.

Readln(resp). Write('Entre com o valor para A: ').Linguagem Pascal resp: char. end. Writeln. Writeln. Write('Entre com o valor para B: '). 52 . end. R := A+B. readln(B). . if (resp <> 's') and (resp <> 'S') then Goto sai_do_loop.R). readln(A). Writeln('O resultado da soma de A com B é: '. begin For i:= 1 to 5 do begin ClrScr. Write('Deseja continuar? '). sai_do_loop: Writeln('Saí do loop for-to-do!').

identificada por Nota. Exemplo 1: Supondo-se que as notas de 10 alunos estejam armazenadas em uma variável composta. vetores. . sendo que sua utilização mais comum está vinculada à criação de tabelas. Program exemplo3. é também denominado por alguns profissionais como matrizes unidimensionais. end. . tabelas em memória ou arrays. variáveis subscritas. individualizadas por índice e cujo o conteúdo é de um mesmo tipo. em particular. e é por esta razão que recebe a denominação de estrutura de dados homogênea. digitadas uma em cada linha. matrizes. a todos os elementos da variável composta. A dimensão de uma matriz é constituída por constantes inteiras e positivas. arranjos. end. e queiramos fazer referência ao terceiro elemento desta variável devemos proceder assim: Nota[3] O conteúdo armazenado neste posição é 65. Vamos tratar esta estrutura simplesmente como matriz. O nome dado a uma variável composta é um identificador que obedece às mesmas regras de formação de identificadores das variáveis simples. Caracteriza-se por ser definida uma única variável dimensionada com um determinado tamanho. armazene-as na variável composta Nota (vetor Nota) e calcule a sua média.1 Matriz de uma dimensão ou vetores Este tipo de estrutura.Linguagem Pascal Capítulo 10 . 10. Nota 55 60 1 2 65 3 55 100 70 4 5 6 85 7 90 8 55 100 9 10 Se utilizarmos uma variável I como índice de Nota. Exemplo 2: Vamos considerar um trecho de programa que faça a leitura de 10 notas dos alunos de uma disciplina. Como já dissemos os nomes dados às matrizes seguem as mesmas regras de nomes utilizados em variáveis simples. As variáveis homogêneas correspondem a posições de memória.Estrutura de dados homogêneas I Veremos neste tópico uma técnica de programação que permitirá trabalhar com o agrupamento de várias informações dentro de uma mesma variável. 53 . entre colchetes. tais como: variáveis indexadas. Este nome refere-se. soma := soma+Nota[I]. . variáveis compostas. coletivamente. através da notação Nota[I]. . begin for I := 1 to 10 do begin readln(Nota[I]). identificadas por um único nome. tem-se a possibilidade de acesso a qualquer uma das notas armazenadas. media := soma/10. seguido de um ou mais índices. O tipo de dado homogêneo recebe diversos outros nomes. é necessário colocar o nome da variável. O índice é a constante inteira 3. . Para podermos fazer referência a um elemento da variável composta.

Podemos também. . . end. for I := 1 to 10 do if Nota[I] > Media then Inc(quant). . Exemplo 4: Considerando a variável composta montada no exemplo 3. begin if Nota[7] > 60 then . Program exemplo3. if Nota[indice] > 60 then . Writeln(‘Número de alunos c/ nota superior a média :. utilizar uma variável índice: Program exemplo3. . begin indice := 7. . podemos codificar um trecho de programa que calcule e escreva o número de alunos com nota superior à Media. else . else . end. podemos também comparar o conteúdo da sétima posição da variável Nota com o valor 60. . . 54 . . . . end. . Program exemplo4. begin quant := 0. neste caso. .Linguagem Pascal Exemplo 3: Considerando o trecho de programa abaixo. .quant).

Ao final. program check_indice. li e ls. array-of – são palavras-chave. tamanho (dimensão) entre colchetes e seu tipo. a seguinte sintaxe: <lista de identificadores> : array[li. deverá ser somado com 5. { Entrada dos Dados } for I := 1 to 10 do begin write('Informe o '. li – é o limite inferior do intervalo de variação do índice. acompanhando a seguinte lei de formação: se o valor do índice for par. 55 .' o. booleano. tendo assim. B : array[1. caracter. etc. como se fossem variáveis de tipo simples.Linguagem Pascal 10. { Processamento Par ou Ímpar } for I := 1 to 10 do begin if (I mod 2 = 0) then . mostrar os conteúdos das duas matrizes. O tipo de dado dos elementos da variável pode ser qualquer tipo de dado válido no pascal..ls] of <tipo de dado>. Este exemplo demonstra como fazer o tratamento da condição do índice. I : integer.2 Operações com matrizes do tipo vetor Uma matriz de uma dimensão ou vetor é representada por seu nome. enumerado ou uma gama de valores. Exemplo 1: Vamos observar o programa a seguir.10] of integer. begin writeln('Cálculo com checagem do indice da matriz'). O índice da variável. Este programa efetua a leitura de dez elementos de uma matriz A tipo vetor e em seguida constroi uma matriz B de mesmo tipo. uma variável ou uma expressão. readln(A[I]). Observações: • • • • • As regras para a formação dos identificadores das variáveis compostas são as mesmas que a dos identificadores das variáveis simples. instruções read e write. deve ser do tipo ordinal: inteiro. end. ls– é o limite superior do intervalo de variação do índice. Onde: • • • • • lista de identificadores – são nomes atribuídos às variáveis que se deseja declarar. Os elementos individuais da variável do tipo vetor podem ser usados em expressões. Contudo o valor do índice deve ser do tipo correto e deve estar dentro do intervalo correto. valor: '). que define a dimensão da variável. writeln. Uses WinCrt. Quando acessamos os elementos individuais das variáveis compostas o valor do índice pode ser expresso como uma constante.. sendo ímpar. que define a dimensão da variável. o valor deverá ser multiplicado por 5.. instruções de atribuição. I:2. tipo de dado – é o tipo de dado dos elementos da variável. var A.

. --------------------------------------------------------- No programa acima. writeln('Tecle <ENTER> para encerrar. valor: 10 o 10 o. Informe A[ 1] A[ 2] A[ 3] .. Este programa resultaria na seguinte tela: --------------------------------------------------------- Cálculo com checagem do indice da matriz Informe Informe Informe . o segundo looping verifica se cada elemento da matriz A é par ou ímpar e faz as operações de soma ou multiplicação atribuindo o resultado na matriz B.' '. end. readkey. valor: 10 2 o.'). 56 .I:2..'] = '. são utilizados três loopings do tipo for: o primeiro looping controla a entrada dos dados na matriz A. valor: 10 B[ 1] = 15 B[ 2] = 50 B[ 3] = 15 B[10] = 50 = 10 = 10 = 10 = 10 Tecle <ENTER> para encerrar.'] = '. end. valor: 10 3 o.A[I]:2. A[ 1] o o o 1 o... 'B['.I:2.. e o terceiro looping é utilizado para apresentar as duas matrizes.B[I]:2). { Apresentação das Matrizes} for I := 1 to 10 do writeln('A['. writeln. ...Linguagem Pascal B[I] := A[I]*5 else B[I] := A[I]+5. writeln.

Seguindo este conceito faz-se a troca dos elementos desta forma: a) basta comparar o valor do elemento armazenado em A[1] com o valor do elemento armazenado em A[2]. A[5] = 1. após a ordenação estarão em uma ordem particular. A[2] = 7. passando a ser comparado somente com os elementos que estiverem em A[3]. a comparação entre o valor armazenado em A[4] com o valor de A[5] . e assim por diante. que antes de apresentar os dados de uma matriz. 3 e 1 e deverão ser apresentados na ordem 1. colocando-os em uma ordem qualquer (alfabética. 5. ficaria assim: A[1] = 9. passa-se para A[1] o elemento 8 e para A[2] passa-se o elemento 9. pois assim poderemos mostrar todos os seus elementos em ordem. uma vez que cada letra possui um valor diferente da outra. Se a letra “A” maiúscula for comparada com a letra “a” minúscula. b) depois o elemento que estiver em A[2] não necessita ser comparado com o elemento que estiver em A[1]. A[4] e A[5]. numérica. independentemente daquela em que foram inseridos na matriz. O processo de ordenação para caracteres no Pascal é baseado no uso da tabela ASCII (American Standard Code for Information Interchange – Código Americano para Troca de Informações). facilitando desta forma a localização de algum elemento. Vejamos a tabela a seguir: Matiz A Índice 1 2 3 4 5 Elemento 9 7 5 3 1 Os valores estão armazenados na ordem: 9. Se o primeiro for maior que o segundo. A[3] = 5. o elemento que estiver em A[3] é comparado com os elementos que estiverem em A[4] e A[5] e por fim. 3. 7 e 9. etc. A tabela acima. A letra “A”. ou seja. c) na seqüência. pois já foram anteriormente comparados. podemos ordenar (classificar) os seus elementos sejam eles do tipo numérico ou alfabético . e em seguida apresentá-los. 57 . tem valor menor que a letra “B”. estas terão valores diferentes. d) o elemento que estiver em A[4] é comparado apenas com o elemento que estiver em A[5].). A[4] e A[5]. A[4] = 3. b) desta forma passa-se a fazer as trocas sucessivas até que se alcance o último elemento da matriz. quando for efetuada uma pesquisa visual.Linguagem Pascal 10. Após a inserção dos dados numa matriz do tipo vetor. 7. . Observação: Este procedimento de troca será o mesmo para dados do tipo caracter (char ou string). por exemplo. A[3]. pudéssemos efetuar a classificação desses dados. 5. Imagine então colocar em ordem crescente cinco valores numéricos armazenados numa matriz A. Para efetuar o processo de troca é necessário aplicar o método de propriedade distributiva: a) o elemento que estiver em A[1] deverá ser comparado com os elementos que estiverem em A[2]. de forma que todos esses elementos.3 Classificação dos elementos de uma matriz do tipo vetor Em algumas situações seria bastante útil. Isso é muito útil. então trocam-se os seus valores. Podemos observar na tabela acima que a condição é verdadeira e assim o elemento 9 de A[1] é maior que o elemento 8 de A[2]. no formato matricial.

nomes[i]). end. i. nome.10] of string. Observe o detalhe das estruturas for-to-do encadeadas. while (Upcase(resp) = 'S') do begin ClrScr.. for i:= 1 to 5 do writeln(i:2. Program Ordena_Matriz.' '. end. donewincrt. write('Deseja Digitar Outros Valores?(S/N)').> ').3.i:2. {*** Mostra os Valores Classificados ***} writeln.Linguagem Pascal 10.readln(nomes[i]). writeln. var nomes : array[1. 58 ..writeln. .. nomes[j] := temp. nomes[i] := nomes[j]. temp : string. writeln('Os Nomes Ordenados Alfabéticamente'). writeln('==================================='). Uses WinCrt. end. {*** Entrada dos nomes na matriz ***} for i:= 1 to 5 do begin write('Digite o '. resp : char. end. j : integer. readln(resp). writeln('============================='). writeln(' i Nome '). {*** A Rotina de Ordenação/Classificação ***} for i:= 1 to 4 do for j := i+1 to 5 do {*** a troca dos elementos começa aqui ***} if (nomes[i] > nomes[j]) then begin temp := nomes[i].' º nome. begin resp := 'S'.1O programa de ordenação Veja abaixo o codificação de ordenação no programa. writeln('Classifica Nomes em Ordem Crescente').

quando a rotina mais interna fechar o seu ciclo. a qual será chamada TEMP. NOMES[I] deverá estar com a informação “ALBERTO” e NOMES[J] deverá estar com “CARLOS”. 59 . pode-se atribuir ao vetor NOMES[I] o valor do vetor NOMES[J]. end. no caso . sendo o vetor NOMES[I] com o valor “ALBERTO” e NOMES[J] com o valor “CARLOS”. teremos os valores trocados. nomes[i] := nomes[j]. Neste momento. TEMP deverá receber o valor do vetor NOMES[I]. 4. Veja abaixo o quadro que mostra o comportamento dos valores das variáveis I e J durante o processo de ordenação: Comportamento de I e J Quando I for J será 1 2. Considere o vetor NOMES[I] com o valor “CARLOS” e o vetor NOMES[J] com o valor “ALBERTO”.2 A troca dos elementos A troca dos elementos de posição é efetuada pelo algoritmo de troca mostrado abaixo: if (nomes[i] > nomes[j]) then begin temp := nomes[i]. será executado primeiro a rotina mais interna. 5 2 3. passando o processamento para a rotina mais externa. Para que o vetor NOMES[I] fique livre para receber o valor do vetor NOMES[J]. nomes[j] := temp. Assim o vetor NOMES[I] passa a possuir o valor “ALBERTO”. retornando ao looping da variável I. . O segundo ponto a se observar é a utilização de uma segunda variável no processo de ordenação. 4.3. Ao final deste processo. a variável J. Ao final.Linguagem Pascal Observações: É importante observar que no caso do encadeamento das estrutura for-to-do. 5 4 5 10. Para se conseguir esta troca é necessário a utilização de uma variável de apoio. 5 3 4. 3. acrescentando mais um em I até que I atinja o seu limite e ambos os loopings sejam encerrados. no caso a rotina de contagem da variável J. Em seguida atribui-se ao vetor NOMES[J] o valor da variável TEMP. assim sendo TEMP passa a ter o valor “CARLOS”. Observe que somente quando a variável J atinge o valor 5 é que este looping se encerra.

60 . Imagine uma matriz possuindo 5000 elementos (5000 nomes de pessoas). i := 1.> '). write('Digite o nome a ser pesquisado: ').i:2. Este método de pesquisa é lento em relação ao método de pesquisa binária. achou : boolean.' º nome. até o último elemento.Linguagem Pascal 10. Você dificilmente conseguiria encontrar rapidamente um elemento desejado de forma manual (visual). writeln('============================'). a partir do primeiro elemento da matriz . Para solucionar este tipo de problema no Pascal..4 Pesquisa em matrizes A utilização de matrizes em Pascal poderá gerar grandes tabelas onde tornaria difícil localizar um determinado elemento na matriz de forma rápida.i:2. {*** A Rotina de Pesquisa na Matriz ***} resp := 'S'. você poderá através do uso da programação.. Encontrando a informação procurada.readln(nome).readln(nomes[i]). Existem dois métodos para pesquisa em matrizes: o método da Pesquisa Seqüêncial e o método da Pesquisa Binária. if (achou = true) then writeln(nome. nome : string. while (Upcase(resp) = 'S') do begin writeln. end.. {*** Entrada dos nomes na matriz ***} for i:= 1 to 10 do begin write('Digite o '. achou := false. fazer pesquisa em matrizes. seqüencialmente.1 A pesquisa seqüencial Este método consiste em efetuar a busca da informação desejada. writeln. mesmo que esta lista de nomes estivesse em ordem alfabética. begin writeln('Pesquisa Seqüencial de Nomes'). esta é apresentada. resp : char. porém eficiente nos casos em que uma matriz encontra-se com seus elementos desordenados.10] of string. seqüencial 10. Uses WinCrt.4.' !') . i : integer. while (i <= 10) and (achou=false) do if (nomes[i] = nome) then achou := true else Inc(i). var nomes : array[1.' foi localizado na posição '. Veja abaixo um programa que efetua uma pesquisa seqüencial numa matriz de dez elementos do tipo string: Program Pesquisa_Sequencial.

Será executada a próxima verificação de NOME com NOMES[I]. Isto é necessário para que a expressão da instrução “while (i <= 10) and (achou=false) do” seja validada no seu primeiro teste da condição. Caso seja igual. Assim o fluxo de execução do programa é desviado para fora da estrutura whiledo e o programa informará ao usuário. A estrutura if-then-else. verifica se o valor digitado pelo usuário e atribuído à variável NOME é igual ao valor do elemento da variável indexada NOMES[I] (i variando de 1 até 10). através de uma mensagem. que o valor procurado não foi encontrado. estabelecendo um valor verdadeiro quando uma determinada informação é localizada. A variável ACHOU é o flag. Analisando o trecho da pesquisa seqüencial: Primeiro é solicitado ao usuário a digitação do nome a ser pesquisado. Caso o processamento das instruções da estrutura while-do (while (i <= 10) and (achou=false) do) chege ao seu final sem encontrar uma equivalência entre a variável NOME e a variável NOMES[I].Linguagem Pascal else writeln(nome. writeln. 61 . . write('Deseja Continuar a Pesquisa? (S/N) '). a bandeira foi “levantada” – verdadeira. Observe que a variável ACHOU exerce um papel importante dentro da rotina de pesquisa. Este tipo de tratamento de variável é conhecido como FLAG (Bandeira). que o valor procurado foi encontrado.' não foi localizado!'). As instruções que se encontram dentro da estrutura while-do serão executadas enquanto o valor da variável I for menor ou igual a 10 e simultaneamente o valor da variável ACHOU for igual a falso (false). donewincrt. pois esta serve como um pivô. indicando que o nome procurado foi encontrado. readln(resp). podendo-se dizer que ao começar a rotina a bandeira estava “abaixada” – falsa. e assim por diante. À variável “I” (variável contadora do índice) é então atribuído o valor 1 (índice 1) e à variável “ACHOU” é atribuído o valor falso (false). Este nome é atribuído então à variável NOME. a variável ACHOU permanece com o valor falso. localizada dentro da estrutura While-do citada acima. end. através de uma mensagem. a variável ACHOU passa a ter o valor verdadeiro (true). e quando a informação foi encontrada. Se o valor da variável NOME for diferente do valor do elemento da variável indexada NOMES[I] a variável I será incrementada em 1. end. indicando a localição da informação desejada. Assim o programa irá informar ao usuário.

por exemplo. Assim. lista de identificadores – são nomes atribuídos às variáveis que se deseja declarar. 5 linhas e 6 colunas (TABELA[1. ou seja. deverá ser utilizado tantas estruturas de repetição quantas forem as suas dimensões.ls1.li2. Uma matriz de duas dimensões é representada por seu nome. assim como em matrizes de uma só dimensão.1. é TABELA..3 A matriz TABELA com duas dimensões. Em matrizes bidimensionais. 11. a seguinte sintaxe: <lista de identificadores> : array[li1. Abaixo podemos ver uma matriz de duas dimensões chamada TABELA.2 Matriz bidimensional (duas dimensões) Uma matriz bidimensional (de duas dimensões) estará sempre fazendo referência a linhas e colunas e será representada por seu nome e seu tamanho (dimensão) entre colchetes . 62 . tamanho (dimensão de linhas e colunas) entre colchetes e o seu tipo. b) esta matriz possui duas dimensões (linhas e colunas): TABELA[1. é uma matriz de 5 por 6 e.3] indica que está sendo feita uma referência ao elemento armazenado na linha 2 coluna 3 da matriz. deveremos utilizar duas estruturas de repetição encadeadas para que possamos acessar todos os seus elementos. Onde: • .6] . Para uma matriz de duas dimensões..ls2] of <tipo de dado>.5.1 Matriz multidimensional ou arrays Vimos anteriormente a utilização de variáveis indexadas (matrizes) do tipo vetor. Você aprendeu a trabalhar com a classificação dos seus elementos e a efetuar pesquisa dentro de sua estrutura.. os seus elementos serão também manipulados (acessados) de forma individualizada.. Quando manipulamos uma matriz do tipo vetor utilizamos uma única estrutura de repetição (um for-todo por exemplo) para acessarmos os seus elementos individuais. sendo a referência a esses elementos feita sempre através de dois índices: convenciona-se que o primeiro índice indica a linha da matriz e o segundo índice indica a coluna. TABELA[2. No caso de matrizes com mais de uma dimensão. Colunas Linhas 1 1 2 3 4 5 2 3 4 5 6 Posição 2.Linguagem Pascal Capítulo 11 – Estruturas de dados homogêneas II 11.1..5. o conjunto de dados referenciados por um nome e que necessite de mais de um índice para ter seus elementos individualizados é chamado de matriz multidimensional.6]). c) esta matriz possui o tamanho de 5 linhas (de 1 a 5) e 6 colunas (de 1 a 6). tendo assim. d) nesta matriz poderão ser armazenados até 30 elementos (5x6=30). Observando a matriz TABELA de duas dimensões acima podemos concluir: a) o seu nome. obviamente. Podemos dizer que.. as matrizes de uma só dimensão. ou seja.

Var MatrizA : array[1. com o primeiro deles indicando a linha e o outro indicando a coluna. Quando acessamos os elementos individuais das variáveis compostas o valor do índice pode ser expresso como uma constante. Esta declaração cria uma estrutura de dados agrupados com o nome de MatrizA. Vejamos o programa abaixo. instruções read e write. instruções de atribuição. Os elementos individuais da variável do tipo vetor podem ser usados em expressões.1. Um detalhe importante a ser considerado é a utilização de duas variáveis para controlar os dois índices de posicionamento de dados na tabela. booleano ou enumerado) ou uma gama de valores. de 4 linhas por 3 colunas. com o primeiro deles indicando a linha e o outro indicando a coluna. endereçáveis por um par de índices. constituída de valores caracteres do tipo string. . Var MatrizB : array[1.1. que define a dimensão da coluna variável. Exemplo 3: Exemplificando a utilização de matrizes bidimensionais. Vamos considerar a manipulação de quatro notas de oito alunos.. Exemplo 2: Declarar a variável composta (variável bidimensional) MatrizB. ls2– é o limite superior do intervalo de variação do índice. li2 e ls2 deve ser do tipo ordinal (inteiro. que define a dimensão da linha variável.4. Exemplo 1: Declarar a variável composta (variável bidimensional) MatrizA. Esta declaração cria uma estrutura de dados agrupados com o nome de MatrizB. ls1.. 63 .Linguagem Pascal • • • • • • array-of – são palavras-chave. li1. as operações de entrada e saída com matrizes de duas dimensões é processada passo a passo. que define a dimensão da linha variável. com 5 x 5 = 25 elementos string.5] of string. constituída de valores numéricos reais. Contudo o valor do índice deve ser do tipo correto e deve estar dentro do intervalo correto. com 4 x 3 = 12 elementos reais. uma variável ou uma expressão. como se fossem variáveis de tipo simples. li1 – é o limite inferior do intervalo de variação do índice. ls1– é o limite superior do intervalo de variação do índice..5. de 5 linhas por 5 colunas. caracter. tipo de dado – é o tipo de dado dos elementos da variável.3] of real. da da da da Observações: • • • • • As regras para a formação dos identificadores das variáveis compostas são as mesmas que a dos identificadores das variáveis simples. que define a dimensão da coluna variável. O índice da variável. endereçáveis por um par de índices. O tipo de dado dos elementos da variável pode ser qualquer tipo de dado válido no pascal.. li2 – é o limite inferior do intervalo de variação do índice. A tabela em questão (matriz) armazenará então trinta e dois elementos (4x8=32). Assim como na leitura e escrita de uma matriz de uma dimensão. etc.. vamos considerar o programa de entrada e saída de notas escolares de alunos .

64 . writeln('Leitura das Notas dos Alunos').i:2. ou seja. nota: '). writeln('=================================').' a. i. dentro da matriz.alunos} begin clrscr. Logo em seguida será . end. Analisando o trecho do programa acima. será então digitada para o primeiro aluno a sua primeira nota.'º aluno'). a nível de linha (alunos). end.. aluno 1. resp: char.1. var Notas : array[1. writeln. nota 1. while (UpCase(resp)='S') do begin {Estrutura for-to-do encadeada . Observando o programa podemos verificar também que as variáveis I e J são inicializadas com 1. begin resp := 'S'. ou seja.j]). Uses WinCrt.Notas[i. onde é feita a leitura das notas dos alunos. a leitura ou a apresentação.i:2. end.'º aluno'). writeln. {Estrutura for-to-do encadeada-apresentação das notas} for i:= 1 to 8 do begin clrscr..8. end. for j:= 1 to 4 do {coluna . readln(resp).j]:5:2).Linguagem Pascal Program Nota_aluno. write('Tecle algo para ver as notas do próximo aluno.. end.j : integer. writeln. Assim sendo. writeln('============================').'a.leitura das notas} for i:= 1 to 8 do {linha .4] of real. writeln. writeln('Apresentação das Notas dos Alunos'). writeln.notas} begin write('Digite a '. será iniciada na primeira linha da primeira coluna da matriz. a nível de coluna (notas dos alunos).'). Podemos observar também que foi utilizada a variável J para controlar as posições dos elementos. writeln('Entre com as notas do '. write('Deseja Continuar? (S/N) '). readln(Notas[i. for j:= 1 to 4 do begin writeln(j:2. podemos observar que foi utilizada a variável I para controlar as posições dos elementos. Nota : '. writeln('As notas do '. readkey. end.j:2..

passando então para a posição Notas[1.. 3a. Vamos então. independentemente da forma em que foram digitados. ou seja. aluno 1.lê as quatro notas dos oito alunos. tornando-se 2..2]. permitindo assim. será incrementado em 1.mostra as quatro notas dos oito alunos... 10 Nome João Andrea . endereço. Em seguida o contador de linha. 65 . controla o posicionamento das notas. Esta estrutura “for I:= 1 to 8 do” tem a função de controlar o posicionamento na tabela por aluno.Linguagem Pascal incrementado mais 1 à variável J.. bairro e telefone de dez pessoas e ao final tenha que apresentar os seus elementos dispostos em ordem alfabética. Nota Nota Nota Nota : : : : Tecle algo para ver as notas do próximo aluno. no caso. nota 2.. 2a. a variável J. Será então inicializado novamente o contador J em 1. 4a. a variável I. pelo nome da pessoa. variável que controla as posições da coluna (notas). 3a.. 8.. Este programa resultaria na seguinte tela: Primeira tela .. . --------------------------------------------------------- 11. considerar um programa que cadastre o nome. --------------------------------------------------------- Leitura das Notas dos Alunos ============================ Entre com as notas do 1º aluno Digite Digite Digite Digite a a a a 1a.3 Ordenação em matrizes de duas dimensões O processo de ordenação de elementos de matrizes de duas dimensões é o mesmo utilizado para ordenar matrizes de uma dimensão. atingir o valor 4. --------------------------------------------------------- Apresentação das Notas dos Alunos ================================= As notas do 1º aluno 1a. a estrutura for-to-do será então encerrada. 2a. Quando o contador de coluna. Bairro Telefone . . . nota: nota: nota: nota: --------------------------------------------------------- Segunda tela . A outra estrutura mais interna “for J:= 1 to 4 do”. A entrada dos dados estende-se-á até que o valor do contador de linhas (variável I) atinja o seu último valor. Veja abaixo a matriz AGENDA: Dados Pessoais Endereço CEP Pessoas 1 2 3 4 .. que seja. 4a. cep... digitado a nota 1 do aluno 2 (Notas[2.1]).

{*** Rotina de saída ***} ..3]:= temp. ou seja. {troca do telefone} temp := AGENDA[atual.1] passa para a posição AGENDA [2. {troca do cep} temp := AGENDA[atual.5]:= temp.1] e o elemento de AGENDA [2.2]:= temp. . Este método já foi anteriormente estudado.1]:= temp.4] AGENDA[atual. É importante observar que além de trocar os nomes de posição. o cep.1]) then begin {troca do nome} temp := AGENDA[atual. {*** Rotina de entrada ***} .4]:= temp. AGENDA[proximo. {troca do bairro} temp := AGENDA[atual. 66 . Após a comparação do primeiro nome com o segundo por exemplo.4] := AGENDA[proximo.. estes deverão ser trocados. {troca do endereço} temp := AGENDA[atual. {*** Ordenação e troca de elementos ***} for atual := 1 to 9 do for proximo := atual+1 to 10 do if (AGENDA[atual. o bairro e o telefone).2] AGENDA[atual.3]. AGENDA[proximo. É o mesmo processo de ordenação utilizado em matrizes de uma só dimensão.5] := AGENDA[proximo.1] AGENDA[atual.3] := AGENDA[proximo. trocase também todos os elementos relacionados ao nome (o endereço. AGENDA[proximo. AGENDA[proximo.4]..2] := AGENDA[proximo.1] passa para a posição AGENDA [1.Linguagem Pascal Após o cadastramento de todos os elementos na matriz AGENDA.2].5] AGENDA[atual.5]. o conteúdo de AGENDA[1.1].1] := AGENDA[proximo. será iniciado o processo de classificação alfabética pelo nome de cada pessoa.. end.1] > AGENDA[proximo. Veja abaixo a rotina de troca do nome e demais elementos relacionados a ele na mesma linha. AGENDA[proximo.1].3] AGENDA[atual. sendo o primeiro maior que o segundo.

na sua conta bancária do tipo real e no seu cargo do tipo literal. Pelo fato de podermos trabalhar com os vários dados de tipos diferentes (os campos) em uma mesma estrutura. Isto nos permite declarar uma variável individual do tipo registro. Além dos tipos simples. Exemplo: Suponha que um registro de funcionário de uma empresa consista na sua matrícula do tipo inteiro.Estruturas de dados heterogêneas Anteriormente estudamos a utilização de matrizes. Var reg_funcionario : record matricula : integer. Identificador – é o nome da variável do tipo registro que se deseja declarar.1 Registros O Registro é a principal estrutura de dados. no seu nome do tipo literal. <campo 2: tipo>. Campo – representam as variáveis que serão usadas como campos do registro. conta : real. Record e End – são palavras reservadas do Pascal. A declaração da variável é mostrada abaixo. . 12. cargo : string[10]. os campos do registro podem ser outro tipo definido pelo usuário ou um outro registro previamente declarado. nos referir coletivamente a um conjunto de elementos que diferem entre si no seu tipo. Veja abaixo a sintaxe. Onde: Var. string entre outros existentes no Pascal. Podemos. 67 . este tipo de dado é considerado heterogêneo. Representamos este registro como uma variável do tipo registro chamada reg_funcionario. boolean. . válidos no Pascal. Em situações onde se precisou trabalhar com mais de um tipo de dado diferente. se fez necessária a utilização de duas matrizes. Sintaxe – Primeira Forma: Var <identificador> : record <campo 1: tipo>. um tipo de dados estruturado em que todos os elementos devem ser do mesmo tipo. Tipo – são os tipos das variáveis (campos) e podem ser: real. desta forma. uma de cada tipo. Observações: • • Cada declaração de campo é escrita seguindo as mesmas regras de declaração de variáveis no Pascal. cujos os elementos constituintes não necessitam ser do mesmo tipo. <campo n: tipo> end.Linguagem Pascal Capítulo 12 . integer. Aos elementos individuais dessa estrutura damos o nome de campos do registro.. Você notou que somente foi possível trabalhar com um tipo de dado por matriz. A forma mais fácil de se definir um registro é incluir a definição como parte de uma declaração de variável. tal como declaramos variáveis de tipo simples ou variáveis do tipo array. end.. nome : string[30].

boolean. Esta abordagem é. Observe que após a declaração do tipo registro (declaração Type) você poderá então declarar as novas variáveis individuais como sendo deste tipo declarado. string entre outros existentes no Pascal. Vale lembrar que a declaração acima tem o mesmo resultado que a declaração de variável mostrada na primeira forma de declaração. nome : string[30]. A declaração da variável é mostrada abaixo. . pois é bastante comum ocorrer a necessidade de se declarar uma variável com o tipo de registro previamente declarado. Sintaxe – Segunda Forma: Type <identificador> = record <campo 1: tipo>. Record e End – são palavras reservadas do Pascal. que é freqüentemente mais utilizada do que a simples declaração de variável é a definição de um tipo registro.Linguagem Pascal Outra maneira de definir um registro. Onde: Type. as variáveis individuais poderão ser declaradas como sendo deste tipo previamente declarado. end. Exemplo: Vamos utilizar o mesmo exemplo utilizado anteriormente do registro de funcionário de uma empresa. Tipo – na declaração Type são os tipos das variáveis (campos) e podem ser: real. Na declaração Var é o nome da variável que será declarada como tipo registro. Na declaração Var refere-se ao tipo registro previamente declarado. 68 . cargo : string[10]. porque nos permite declarar variáveis registro adicionais (com a mesma composição) à medida que se faz necessário. conta : real. . Observações: • • • Note que neste caso. Além dos tipos simples. os campos do registro podem ser outro tipo definido pelo usuário ou um outro registro previamente declarado. Var funcionario : reg_funcionario. Campo – representam as variáveis que serão usadas como campos do registro. <campo n: tipo> end.. Identificador – na declaração Type é o nome do tipo registro que se deseja declarar. mais geral. integer. contudo. Var <identificador> : <tipo>. Assim.. Neste caso um tipo registro é declarado em Pascal com a instrução type em conjunto com a instrução record. Type reg_funcionario = record matricula : integer. válidos no pascal. os tipos registro devem ser declarados antes das declarações das variáveis do tipo registro. Cada declaração de campo é escrita seguindo as mesmas regras de declaração de variáveis no Pascal. Veja abaixo a sintaxe. <campo 2: tipo>.

. podendo-se trabalhar de uma forma mais adequada com diversos problemas. passou-se a ter uma mobilidade bastante grande.. end. cargo : string[10]. O registro reg_funcionário é um conjunto de dados heterogêneos (um campo integer. 12.4] of real. só fizeram menção à leitura e escrita de um único registro..: ‘). facilitando a construção de programas mais eficientes. . begin .” (ponto). A instrução “readln(funcionario. write(‘Informe o nome do funcionário..<identificador do campo> Tanto a leitura quanto a escrita de um registro são efetuadas respectivamente com as instruções read/readln e write/writeln seguidas do nome da variável do tipo registro e de seu campo correspondente separado por um caracter “. reg_aluno = record nome: string[20]. Seria muito útil poder construir um programa que permitisse trabalhar com vários registros de alunos. conta : real. {*** declaração do tipo reg_aluno ***} Type bimestre = array[1... end. Veja abaixo a definição do tipo registro e também a definição da matriz de registros para os oito alunos: Program cadastro_alunos. 12. como exemplificado a seguir: Type reg_funcionario = record matricula : integer. end. um campo real e dois campos string). Para exemplificar considere que você deverá fazer um programa que faça a entrada e a saída de nome e nota de oito alunos. 69 . principalmente os que envolvem a utilização de dados heterogêneos. readln(funcionario..nome)” atribui o valor digitado pelo usuário ao campo nome da variável funcionário.3 Conjunto de registros Com as técnicas de programação expostas até este momento.Linguagem Pascal Observe que primeiro declaramos um o registro lógico chamado reg_funcionário e logo em seguida declaramos a variável funcionário do tipo reg_funcionário. que é do tipo reg_funcionario.nome). Var funcionario : reg_funcionario. nome : string[30]. . Uses WinCrt. Porém os programas apresentados até aqui com a utilização de registros. nota: bimestre..2 Fazendo referência a um componente do registro A referência ao conteúdo de um componente (campo) do registro é indicado pela notação: <nome da variável do tipo registro>.

write('Informe o nome do '.: ')....4] of real. . 70 . Assim ALUNO[2]. Este programa deverá receber a entrada do nome e notas (quatro notas) de oito alunos e ao final mostrar os nomes e as notas dos mesmos.4 Fazendo referência ao i-ésimo elemento do conjunto A referência ao i-ésimo elemento ou registro do conjunto é feita pela seguinte notação: <identificador da variável tipo registro [i]>. Program cadastro_alunos.nome). Veja abaixo o programa completo que nos permite trabalhar com vários registros de alunos.'º aluno.” ALUNO[I]. i..i:2.<identificador do campo> Podemos observar. writeln.nome).Linguagem Pascal {*** declaração do conjunto de registros aluno ***} Var aluno : array[1. Observe que a declaração VAR. nota : notas end. while (UpCase(resp)='S') do begin {*** Cadastramento . declara uma variável de registro chamada ALUNO.8 alunos com 4 notas cada***} for i := 1 to 8 do {linha . begin resp := 'S'.NOTA[1] refere-se à primeira nota do segundo aluno do conjunto de registro alunos. resp : char.NOTA[J] refere-se ao j-ésimo elemento do campo nota do i-ésimo elemento do conjunto de alunos (variável ALUNO). que no programa cadastro_alunos mostrado abaixo..alunos} begin clrscr. writeln('============================'). Veja alguns exemplos: a) Na instrução “readln(aluno[i].8] of reg_aluno. readln(aluno[i].j : byte. Assim ALUNO[2].” ALUNO[I]. Uses WinCrt.. b) Na instrução “readln(aluno[i]. i12..nota[j]).8]) do tipo reg_aluno. algumas instruções fazem referência a campos dos i-ésimos elementos do conjunto (variável ALUNO).NOME estará fazendo referência ao campo nome do segundo aluno do conjunto de registro alunos. que por sua vez é formado por dois tipos de dados: o nome (nome do aluno) como caractere e a nota (quatro notas do aluno) como bimestre.NOME refere-se ao campo nome do i-ésimo elemento do conjunto de alunos (variável ALUNO). sendo esta um conjunto de oito registros (array[1.8] of reg_aluno. Var aluno : array[1. . reg_aluno = record nome : string[20]. writeln(‘Leitura das Notas dos Alunos'). Type notas = array[1..

. --------------------------------------------------------. 2a.: ').99 99. writeln.99 99. write('Tecle <ENTER> para ver as notas do próximo aluno. 71 . readln(aluno[i]..aluno[i]. 3a. end. 4a..lê as quatro notas dos oito alunos. end. 4a....mostra as quatro notas dos oito alunos.. writeln('Apresentação das Notas dos Alunos'). Este programa resultaria na seguinte tela: Primeira tela .99 Tecle <ENTER> para ver as notas do próximo aluno. {*** Apresentação . readln.99 99. end.nome). writeln('Aluno : '.j:2.. write('Deseja Continuar? (S/N) ').aluno[i].: XXXXXXXXXXXXXXXXXXXX Digite Digite Digite Digite a a a a 1a..'. nota: nota: nota: nota: 99..99 --------------------------------------------------------- Segunda tela . 2a.'a.99 99.notas} begin write('Informe a'. Nota Nota Nota Nota : : : : 99.'). for j := 1 to 4 do {coluna . writeln('=================================').99 99.8 alunos com 4 notas cada***} for i := 1 to 8 do begin clrscr. for j := 1 to 4 do writeln('Nota '. nota...j:2. 3a.. writeln.. end....nota[j]:5:2). readln(resp).. donewincrt..99 99.nota[j]). --------------------------------------------------------- Apresentação das Notas dos Alunos ================================= Aluno : XXXXXXXXXXXXXXXXXXXX 1a. end. writeln.Linguagem Pascal writeln. --------------------------------------------------------- Leitura das Notas dos Alunos ============================ Informe o nome do 1º aluno.: ' . writeln.

1 13. podendo ser utilizadas a qualquer momento. Para o propósito deste curso iremos nos ater apenas a forma de acesso direto.1. quando se executa outro programa ou quando se desliga o computador. quando queremos gravar um novo registro é necessário percorrer todo o arquivo.2 Arquivo com tipo definido de registro A manipulação de um arquivo em Pascal ocorrerá com a definição do tipo file . No caso de arquivos de acesso direto este ponteiro será movimentado para qualquer posição do arquivo. 13. 72 . 13. um registro após o outro. estando apenas limitado ao tamanho do meio físico utilizado para a sua gravação. Acontece o mesmo no processo de leitura.1 Formas de acesso a um arquivo Os arquivos criados em meio de armazenamento magnético poderão ter os seus registros acessados para leitura e/ou gravação de três formas: na forma seqüencial. discos rígidos ou fitas magnéticas. Este campo chave é utilizado para estabelecer o campo de um registro que será utilizado no processo de localização de todo um registro dentro de um arquivo.1. Este acesso ocorre através de um campo chave previamente definido. As operações de leitura e gravação em um arquivo de acesso seqüencial ocorrem através do apontamento de um indicador de registro (o ponteiro do arquivo).2 O acesso direto ou randômico O acesso direto permite o acesso imediato a cada um dos registros.Arquivos Já estudamos os conceitos de tabelas em memória (memória RAM) através da utilização de VETORES e MATRIZES. Assim. 13. entretanto as informações armazenadas em um meio magnético ficam guardadas permanentemente. Assim. Estudamos também o conceito de utilização do tipo definido REGISTRO.Linguagem Pascal Capítulo 13 . Estes conceitos vistos anteriormente formaram a base para a utilização de um arquivo.1. pois um arquivo é na verdade uma estrutura de dados (tabela de informações) gravada em um meio magnético como disquetes. Este ponteiro do arquivo é similar ao índice de uma tabela em memória. por exemplo. desde que se conheça a sua posição no arquivo. direta ou indexada. até localizar a primeira posição vazia após o último registro. será possível acessar um determinado registro diretamente. Assim sendo este tipo será definido com a utilização da seguinte sintaxe: . Utilizando arquivos podemos armazenar um número maior de informações (registros) do que em uma tabela em memória. que avança a cada operação executada. b) Quando as informações são muito numerosas para caber memória principal do computador. O conteúdo da memória principal do computador se perde. Os arquivos são usados principalmente em dois casos: a) Quando necessitamos armazenar as informações permanentemente. será necessário a leitura de todos os registros que o antecedem. passando por todos os registros. o qual se caracteriza por ser uma estrutura formada por elementos do mesmo tipo dispostos de forma seqüencial. Esta estrutura tem a finalidade de fazer a comunicação entre a memória principal (memória RAM) e a memória secundária (meios magnéticos). Se o registro a ser lido é o último.1 O acesso seqüencial Em um arquivo de acesso seqüencial o processo de leitura e gravação é feito de forma contínua. 13. do primeiro até ao último registro do arquivo. sem nos preocuparmos com os registros que o antecedem. através da procedure seek. As matrizes e os vetores são manipuladas através de um índice de controle ao passo que os arquivos são manipulados por um ponteiro de registro.

Linguagem Pascal

A sintaxe: Var <identificador> : File Of <tipo registro>; Onde: Var e File Of – são palavras reservadas do Pascal. Identificador – é o nome da nova variável que será usada para representar o arquivo; Tipo registro – é o tipo a que pertencem os registros do arquivo. Observações: • É importante observar que devemos, antes de declarar a nova variável do tipo arquivo, definir um tipo registro. O tipo registro, previamente declarado, definirá então a estrutura do registro do novo arquivo.

Exemplo: Type reg_agenda = record nome : rua : numero: cidade: end; string[30]; string[25]; integer; string[25];

Var arq_agenda : file of reg_agenda; agenda : reg_agenda; Neste exemplo, foi declarado uma variável chamada arq_agenda, um arquivo com tipo definido de registro, composta por registros do tipo reg_agenda. A variável arq_agenda representará o novo arquivo criado. Note então que, conforme descrito anteriormente, o tipo registro reg_agenda foi previamente declarado e só depois foi declarada a variável arq_agenda. A estrutura de arq_agenda foi definida na declaração do novo tipo record chamado reg_agenda. A figura abaixo mostra a representação do arquivo arq_agenda. Registro reg_agenda Nome Rua Campo numero Numero Cidade Arquivo arq_agenda

13.3 Operações com arquivos 13.3.1 Associando um arquivo à variável de controle (assign)
A procedure assign tem por finalidade associar um nome lógico de arquivo (variável arquivo) ao arquivo físico (arquivo em meio magnético). É importante frisar que esta instrução não criará o arquivo físico. Antes de executarmos a abertura de um arquivo no Pascal devemos fazer uma associação do arquivo lógico declarado com o arquivo físico. Para se fazer a associação desta identificação interna (a variável arquivo) com a identificação externa (o arquivo físico) usa-se a procedure assign. Atenção! Este comando deve anteceder a abertura do arquivo que é feita usando-se a procedure reset. Veja abaixo sua sintaxe: A sintaxe:
73

.

Linguagem Pascal Assign(<variável arquivo>,<arquivo>);

Onde: Assign– é palavra-chave do Pascal; Variável arquivo – é o nome da variável arquivo (arquivo lógico) declarada no programa, que se deseja associar ao arquivo físico. Arquivo – é o nome do arquivo físico (arquivo em meio magnético) pelo qual é conhecido externamente ao programa. Atenção: este parâmetro deve estar entre aspas simples. Observação: • Pode-se acrescentar ao parâmetro “arquivo” da procedure assing um caminho (path). Este caminho indicará o local (a unidade e a pasta) onde deverá ser feita a gravação do arquivo, quando da sua criação pela procedure rewrite.

Exemplo: Assign(arq_agenda,’agenda.dat’); Esta instrução associa o arquivo lógico arq_agenda ao arquivo físico agenda.dat que será criado posteriormente com a procedure rewrite.

13.3.2 Criando um arquivo (rewrite)
A procedure rewrite tem por finalidade criar um arquivo físico para uso e também gravar um registro em branco no mesmo. Devemos observar que caso o arquivo já exista, esta instrução o apagará e o criará novamente. A sintaxe:
Rewrite(<variável arquivo>);

Onde: Rewrite – é palavra-chave do Pascal; variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo físico (arquivo em meio magnético). Observação: • • • Antes de se criar um arquivo utilizando a procedure rewrite é obrigatório fazer a associação do arquivo lógico (variável arquivo) com o arquivo físico, utilizando a procedure assing. Caso contrário uma erro em tempo de execução (Run-time error 102: File not assigned) será apresentado. Cuidado! Caso o arquivo já exista a procedure rewrite irá apagar todos as informações (registros) existentes. Quando um arquivo é criado o ponteiro do arquivo posiciona-se no primeiro registro deste arquivo, ou seja, no registro de número 0 (zero).

Exemplo: rewrite(arq_agenda);

.

74

Linguagem Pascal

13.3.3 Abertura de um arquivo (reset)
A abertura de um arquivo no Pascal é executada pela procedure reset. Esta procedure tem por finalidade abrir um arquivo já existente, colocando-o disponível para leitura e escrita . A procedure reset abre o arquivo e deixa o primeiro registro deste arquivo disponível para leitura e/ou escrita, ou seja, o ponteiro do arquivo aponta para o registro de número 0 (zero). A sintaxe:
Reset(<variável arquivo>);

Onde: Reset – é palavra-chave do Pascal; variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo físico (arquivo em meio magnético). Observação: • Caso você faça a tentativa de abrir um arquivo ainda não existente, será apresentada a mensagem de erro em tempo de execução (Run-time error 2: File not found). Esta mensagem representa uma tentativa de abertura de um arquivo inexistente. É necessário então que se crie o arquivo (procedure rewrite) antes da sua abertura.

Exemplo: reset(arq_agenda);

13.3.4 Leitura de dados em um arquivo (read)
A procedure read tem por finalidade ler a informação (o registro) no arquivo indicado pela variável arquivo e armazená-la numa variável do tipo registro. A sintaxe:
Read(<variável arquivo>,<variável registro>);

Onde: Read – é palavra-chave do Pascal; variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo (arquivo físico). variável registro – é o nome de uma variável , geralmente uma variável do tipo registro. Esta variável receberá a informação lida no arquivo. Exemplo: read(arq_agenda,agenda); Esta instrução faz a leitura de um registro no arquivo arq_agenda e o armazena na variável do tipo registro chamada agenda. A instrução lê o registro para o qual o ponteiro do arquivo aponta no momento.

.

75

A sintaxe: Close(<variável arquivo>). A sintaxe: Write(<variável arquivo>.3. Onde: Write – é palavra-chave do Pascal. O fechamento do arquivo desvincula o arquivo físico do programa que o está utilizando. A instrução grava a informação no registro para o qual o ponteiro do arquivo aponta no momento. Assim não se faz necessário processar todos os registros que estão fisicamente antes dele no arquivo. Esta instrução grava o registro.<variável registro>).7 Acessando um registro de forma direta (seek) No Pascal o acesso a um registro qualquer de um arquivo. que se encontra armazenado na variável agenda. 13. no arquivo arq_agenda.5 Gravação de dados em um arquivo (write) A procedure write tem por finalidade gravar a informação (o registro) no arquivo físico indicado pela variável arquivo. sem que haja a necessidade de processar todos os registros anteriores. 13. variável registro – é o nome de uma variável . geralmente uma variável do tipo registro.3. pode ser feito diretamente desde que se saiba a sua posição física neste arquivo. A procedure seek tem por finalidade efetuar o posicionamento do ponteiro do arquivo em um determinado registro. Nenhum programa deve ser encerrado antes de se fechar os arquivos por ele abertos. Exemplo: Close(arq_agenda). variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo (arquivo físico). A informação (registro) armazenada numa variável registro será então gravada no arquivo indicado pela variável arquivo. 76 . Exemplo: write(arq_agenda.6 Fechando um arquivo (close) A procedure close tem por finalidade fechar um arquivo em uso dentro de um programa.Linguagem Pascal 13. Onde: Close – é palavra-chave do Pascal.3. variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo físico (arquivo em meio magnético).agenda). Utilizando esta . Observação: • Após a gravação da informação no arquivo a instrução write posiciona o ponteiro do registro no próximo registro.

Exemplo: Seek(arq_agenda. 13.3. Writeln(FilePos(arq_agenda)). Onde: FilePos – é palavra-chave do Pascal.. A sintaxe: FilePos(<variável arquivo>).. Seek(arq_agenda. A sintaxe: Seek(<variável arquivo>.”. n – é o número do registro que se quer acessar. Onde: .Linguagem Pascal procedure podemos acessar o n-ésimo registro de um arquivo.3. variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo (arquivo físico)..9 Verificando o tamanho do arquivo (filesize) A função filesize tem por finalidade retornar número de registros presentes no arquivo. Lembre-se: No Pascal o primeiro registro de um arquivo é o de número 0 (zero). Observe que a procedure seek “forçou” o ponteiro do arquivo a se posicionar neste registro (o de número 1) através da instrução “Seek(arq_agenda..<n>). No exemplo acima a instrução “Writeln(FilePos(arq_agenda)). A sintaxe: FileSize(<variável arquivo>).1). Exemplo: . Esta instrução posiciona o ponteiro do arquivo no registro de número 1 (segundo registro) do arquivo associado à variável arquivo arq_agenda. .8 Verificando o valor do registro posicionado (filepos) A função filepos tem por finalidade retornar o valor do registro aonde se encontra posicionado o ponteiro do arquivo.” mostrará na tela o valor 1 que corresponde à posição do registro de número 1 do arquivo arq_agenda. Onde: Seek – é palavra-chave do Pascal. 13.1). 77 .1). variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo físico (arquivo em meio magnético).

G. writeln(x. . Bibliografia: Aprendendo a Programa na Prática – Turbo Pascal Virgílio V. A sintaxe: Eof(<variável arquivo>).. Quando estamos programando. D. Yamatumi.x). para resolver esta questão utilizamos a função lógica Eof() associada ao arquivo. 78 . while (not Eof(arq_agenda)) do begin read(arq_agenda. é muito comum ter que determinar o último registro de um arquivo. Pascal Estruturado Uarry Farrer...Linguagem Pascal FileSize – é palavra-chave do Pascal. Writeln(FileSize(arq_agenda)). terceira edição. Ph.nome).codigo.codigo. 1988. seja em Pascal ou em outra linguagem qualquer. Programação em Pascal Byron S. Gottfried..’ ‘.x.0 José Augusto N. Programando em Turbo Pascal 7. Eduardo Chaves Faria. McGraw-Hill. Exemplo: ..Eof A função Eof() (End of File) tem por finalidade identificar o final de um arquivo. 1999. Becker.. quarta edição – 1996. Manzano. Exemplo: . Vilela Fevereiro 1999.. No exemplo acima a instrução “ writeln(x. Editora Érica. variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo físico (arquivo em meio magnético). .nome).” mostrará na tela os campos codigo e nome de todos os registros do arquivo arq_agenda até que seja encontrado o fim deste arquivo.. e outros Editora LTC. No Pascal. Christiano G.’ ‘. Frederico Ferreira Campos. end. No exemplo acima a instrução “Writeln(FileSize(arq_agenda)). variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo (arquivo físico).. .” mostrará na tela a quantidade de registros do arquivo arq_agenda. 13. Esta instrução assume o valor TRUE quando se tenta ler um registro após o último. Onde: Eof – é palavra-chave do Pascal. Wilson Y.3.10 Identificando o final do arquivo .x.

Sign up to vote on this title
UsefulNot useful