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

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

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

a classificação dos dados de um arquivo. A tarefa de examinar o código objeto.2.1 Bibliotecas O desenvolvimento de um programa certamente utilizará diversas operações que são comuns a muitos outros programas.2 Ligação Assim. Para serem executadas. cada instrução do código fonte resulta em uma instrução de máquina.2. procurar as referências a rotinas de biblioteca (que constituem referências externas não resolvidas). o cálculo de funções matemáticas. pois ainda existe código (as rotinas de biblioteca) a ser incorporado ao programa. Dessa forma. 1. o compilador precisará incluir uma chamada para a rotina e o endereço dos dados que devam ser passados para a rotina. 7 . 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. etc. incluindo os parâmetros necessários. em linguagem 1.B. o código objeto preparado pelo compilador em geral não é imediatamente executável. sendo esta tradução feita antes de qualquer tentativa de execução. substituir a chamada pelo código ("resolver as . isto é. Nas linguagens de alto nível.na realidade. Por exemplo.3. poupando tempo. Essas funções não devem ser confundidas com as instruções da linguagem . buscar a rotina da biblioteca.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. aumentando a eficiência e evitando erros. A cada chamada de biblioteca encontrada no código fonte. há uma relação de 1:1. enquanto na compilação a relação é múltipla. então o método utilizado se chama compilação. são pequenos programas externos que são chamados através de instruções especiais de chamada de biblioteca. No processo de montagem. um programa em alto nível possivelmente conterá diversas chamadas de biblioteca (library calls).Linguagem Pascal 1. a execução de uma instrução de entrada e saída. cada instrução do código fonte gerando várias instruções de máquina. Código Fonte Open file_entrada Read A. ou seja. a chamada de biblioteca precisa ser substituída pelo código propriamente dito. 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 rotinas precisam ser incorporadas ao código do programador.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.3.3.

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

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

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

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

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

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

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

4 Palavras reservadas As palavras reservadas do Turbo Pascal são palavras que fazem parte da sua estrutura e têm significados pré-determinados. que podem ser utilizados normalmente na construção de programas. Exemplos de identificadores válidos: Meu_Nome MEU_NOME _Variavel01 Exemplo01 Exemplos de identificadores inválidos: Valor=Valor_Anterior 2teste Exemplo 23 . O primeiro caracter do identificador deve ser obrigatoriamente uma letra ou um traço de sublinhar ( _ ). 15 . functions etc. que não fazem parte da definição padrão da linguagem Pascal. desde que o primeiro caracter seja uma letra..5 Identificadores Um identificador é um nome que é dado a um elemento do programa. 3. O Turbo Pascal possui inúmeros identificadores pré-definidos. Um identificador pode ter qualquer tamanho. procedimento. programa. tipo. Exemplos: ClrScr (limpa a tela de vídeo) e DelLine (deleta a linha em que está o cursor). Como regra. Não se pode utilizar os caracteres especiais do Turbo Pascal na formação de identificadores. em qualquer ordem. que são consideradas da mesma forma. Os demais caracteres podem ser letras. 2. apenas os primeiros 63 caracteres são significativos. variável. Também como regra. Elas não podem ser redefinidas e não podem ser utilizadas como identificadores de variáveis. 4. entretanto. deverá ser evitado o número excessivo de caracteres. units. 5. É permitido usar maiúsculas ou minúsculas. Esses identificadores consistem em Procedures e Funções. procedures. 2. campos de registro. tal como uma constante. 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. Os identificadores são compostos de letras ou dígitos. 6.Linguagem Pascal Observações: • Turbo pascal não faz distinção entre letras maiúsculas e minúsculas. um identificador deve conter caracteres suficientes para indicar claramente o seu significado. Regras para formação de identificadores: 1. Um identificador não pode ser palavra reservada. também chamado de undescore. dígitos ou undescores e não espaços. etc.

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

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

5 end. Os demais tipos estruturados serão vistos mais para a frente. podem também estar associados com os correspondentes identificadores individuais. X:4:1).1 Tipos de dados predefinidos Uma das mais interessantes características do Pascal é a sua capacidade de tratar muitos tipos diferentes de dados. Estes incluem dados de tipo simples e dados de tipo estrututado. 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. 18 . writeln ('O valor de X é writeln ('O valor de Y é end. Os elementos de informação individuais.5. instrução simples de instruções compostas :'.5 end else begin X:= -1. etc... :'.) que estão associados com identificadores simples um a um. Y:4:1). . . writeln('Digite o valor de read (B). Cada grupo de elementos de informação está associado a um único identificador.5.Linguagem Pascal Exemplo 4: Program exemplo. Os dados de tipo estruturado compõe-se de múltiplos elementos relacionados entre si de forma especificada. caracteres. Capítulo 3 – Tipos de dados e instruções primitivas 3. Inicialmente iremos estudar os dados de tipo simples e o tipo String pela sua utilização prática incial. B: '). dentro de cada grupo. begin writeln('Digite o valor de read (A). A: '). Bloco Y:= -2. Y:= 2. if A = B then begin X:= 1.

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

No Pascal este tipo de dado é referenciado pelo identificador string. Uma string de caracteres de tamanho 0 (zero) é chamado de string nula e só é compatível com o tipo string.4e4932. esta (a aspas) deve ser escrita duas vezes. podendo armazenar de 1 até 255 caracteres.95’ ‘’ ‘Please don’’t go!’ ‘217 .5e-45.2e18. Uma string de caracteres de tamanho 1 (um) é compatível com o tipo char e também o tipo string. sendo que este tipo de dado somente poderá representar um dos dois valores.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)...9. Cadeias de caracteres permitidas: ‘Exemplo de cadeia de caracteres’ ‘R$19. Existe ainda o tipo char. os dígitos de 0 a 9. utilizado da mesma forma que o tipo string.4e38 5. funções e expressões. mas não o contrário. 20 .1e4932 -9. 3.Linguagem Pascal O Turbo Pascal fornece cinco tipos pré-definidos de números reais. Uma strings de caracteres são um conjunto de caracteres entre aspas (apóstrofos) simples. Neste caso só aparecerá uma das aspas quando a cadeia for impressa ou visualizada.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. Dados booleanos: true (1) false (0) .9e-39..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).1.7e308 3.. Tipo Real Single Double Extended Comp Observação: • Faixa 2. As expressões do tipo booleano são formadas combinando operandos do mesmo tipo com operadores relacionais.3.7e38 1.1. as variáveis. 3.0e-324. Esta categoria inclui as constantes do tipo booleano.1. porém com uma pequena diferença: é utilizado para strings com apenas um caracter de tamanho. o espaço em branco e os caracteres especiais..32 – Abc’ Observações: • • • Se uma cadeia de caracteres incluir uma aspas. Veja a tabela abaixo.

r2 : real. writeln(z). ao ser avaliada produz um valor que se constitui no resultado da expressão. 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. + e – terá como resultado um valor inteiro. • div e mod são operadores que só podem ser aplicados com operandos inteiros dando.y.24. (* escreve 6 na tela *) writeln(y). z:=x+y.+ ou -. o quociente inteiro e o resto inteiro da divisão entre operandos.3. writeln(x). (* escreve o valor de z na tela de video *) x:= 20 DIV 3. Uses CRT. (* limpa a tela *) x:=10. Esse valor possui um tipo.Linguagem Pascal 3. respectivamente. mod. Você pode observar que toda expressão aritmética. 21 . Se. r2:=r1/2. devendo-se indicá-las com combinações de produtos ou funções predefinidas.z : integer. Programa exemplo: Program Operadores_aritmeticos. usando-se a notação matemática. um dos operandos for real e se os operadores forem *. . y:=20. o resultado da expressão será real. que pode ser inteiro ou real. r1. end. (* escreve 2 na tela *) r1:=3. pelo menos. mesmo que os dois operandos sejam inteiros. Begin ClrScr. y:= 20 MOD 3. writeln(r2). div. • O operador / sempre conduz a um resultado do tipo real./. • Uma expressão que só tenha operandos inteiros e operadores *.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. Var x. conforme a natureza dos operados e operandos envolvidos.

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

efetuando desta forma testes múltiplos. Writeln(x+y > 10). uses WinCrt. y:= 5.5).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).9 Operadores lógicos No Pascal. or e not. Writeln(2*1 >= x div 2). Este programa resultaria na seguinte tela: --------------------------------------------------------FALSE TRUE TRUE TRUE FALSE TRUE FALSE --------------------------------------------------------- Operadores 3. Veja a tabela abaixo. y:integer. var x. Writeln(x <= 10). Operadores AND OR NOT . Writeln(2 = 3). Writeln(0. assim com em qualquer outra linguagem. begin x:= 3. São três os operadores lógicos: and. 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 . Writeln( (x div 2) > (y+6) ). Para esses casos é necessário então trabalhar com a utilização dos operadores lógicos. Writeln(-4 <> 4). end.6 <= 1. também conhecidos por operadores boleanos. 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. Exemplos: program exemplo.

false.1 Operador lógico AND O operador and faz com que uma determinada operação seja executada. invertendo o resultado lógico da expressão avaliada.3 Operador lógico NOT O operador not faz com que uma determinada operação seja executada.9. Q.Linguagem Pascal 3. se pelo menos uma das expressões avaliadas resultarem um valor lógico verdadeiro. 24 . R. Veja a tabela verdade para este operador: . S contendo.2 Operador lógico OR O operador or faz com que uma determinada operação seja executada. false e true.9. 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. respectivamente. os valores true. 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.9. 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. se e somente se as expressões avaliadas resultarem simultaneamente um valoro lógico verdadeiro.

ou seja : TRUE e FALSE.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. Este programa resultaria na seguinte tela: --------------------------------------------------------- Digite um número inteiro: 99 O número está fora da faixa de 20 a 90! --------------------------------------------------------- 3. para inverter) o valor de um operando booleano. begin write(‘Digite um número inteiro: ‘). Veja abaixo um pequeno programa que utiliza operador lógico AND: Program testa_logica_and. além dos operadores relacionais e dos operadores aritméticos. lógicos e relacionais Como já vimos anteriormente. ou se ambos forem verdadeiros. a prioridade das operações está dada no quadro abaixo. 25 . pode-se ter mais de um operador lógico na mesma expressão. end. Em Pascal. readln (numero). var numero := integer. Uses WinCrt.4 Prioridades entre operadores aritméticos. . 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). O operador NOT é utilizado para negar (isto é.9. valores lógicos. 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!’).

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

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

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

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

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

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

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

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

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

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

Observe a seqüência de execução da instrução acima: . 36 .0500000000E+01 a abc --------------------------------------------------------- Capítulo 6 .5 Digite um caractere -----------> a Digite uma string -------------> abc 10 1..14)).. se uma função é um operando de uma expressão.. begin Writeln(2*Sin(3. . End. 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.71882818.Funções padrão predefinidas 6. 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.. 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: .. ela deve ser calculada antes que as demais operações possam ser efetuadas.. A chamada da função precede as demais operações.Linguagem Pascal Este programa resultaria na seguinte tela: --------------------------------------------------------Digite um numero inteiro ------> 10 Digite um numero real ---------> 10.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.

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

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

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

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

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

3 Posicionando o cursor na tela (GotoXY) Este procedimento permite posicionar o cursor em um determinado ponto da tela.Linguagem Pascal Writeln('Você pressionou a tecla '. --------------------------------------------------------- 7. '. uses WinCrt. 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. Este programa resultaria na seguinte tela: Obs.2.: Vamos supor que você tenha pressionado a tecla A (caixa alta). Ord(C).3. C. --------------------------------------------------------- Olá! --------------------------------------------------------- . --------------------------------------------------------- Por favor pressione uma tecla qualquer ! Você pressionou a tecla A. coluna 10 da tela do computador. Sintaxe: GotoXY(parâmetroX.'). '. Exemplo: Program exemplo. 42 . Writeln('Olá!').parâmetroY). begin GotoXY(10. Este programa resultaria na seguinte tela: O comando GotoXY posicionará o cursor na linha 10. end. end. Seu valor em ASCII é '. A mensagem ´Olá!´ será mostrada então a partir desta coordenada. Seu valor em ASCII é 65. Este comando é um procedimento da unit WinCrt.10). var C: char.

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

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

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

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

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

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

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

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

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

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

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

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

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

writeln('Tecle <ENTER> para encerrar.B[I]:2).Linguagem Pascal B[I] := A[I]*5 else B[I] := A[I]+5.. --------------------------------------------------------- No programa acima. valor: 10 3 o.'] = '.'] = '. são utilizados três loopings do tipo for: o primeiro looping controla a entrada dos dados na matriz A... e o terceiro looping é utilizado para apresentar as duas matrizes. end.. Informe A[ 1] A[ 2] A[ 3] .. Este programa resultaria na seguinte tela: --------------------------------------------------------- Cálculo com checagem do indice da matriz Informe Informe Informe . valor: 10 2 o.. { Apresentação das Matrizes} for I := 1 to 10 do writeln('A['. . 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. writeln.'). A[ 1] o o o 1 o..I:2. end. 'B['.' '. readkey.. valor: 10 B[ 1] = 15 B[ 2] = 50 B[ 3] = 15 B[10] = 50 = 10 = 10 = 10 = 10 Tecle <ENTER> para encerrar. 56 . valor: 10 o 10 o.A[I]:2.I:2. writeln.

após a ordenação estarão em uma ordem particular. Observação: Este procedimento de troca será o mesmo para dados do tipo caracter (char ou string). 3. ficaria assim: A[1] = 9. pois assim poderemos mostrar todos os seus elementos em ordem. . 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]. A[3]. Imagine então colocar em ordem crescente cinco valores numéricos armazenados numa matriz A. tem valor menor que a letra “B”. 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. A[3] = 5. 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). independentemente daquela em que foram inseridos na matriz. Após a inserção dos dados numa matriz do tipo vetor. e em seguida apresentá-los.3 Classificação dos elementos de uma matriz do tipo vetor Em algumas situações seria bastante útil. 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. 3 e 1 e deverão ser apresentados na ordem 1. então trocam-se os seus valores.Linguagem Pascal 10. 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]. A letra “A”. 7 e 9. A[4] e A[5]. passando a ser comparado somente com os elementos que estiverem em A[3]. A[4] = 3. de forma que todos esses elementos. podemos ordenar (classificar) os seus elementos sejam eles do tipo numérico ou alfabético . A[4] e A[5]. no formato matricial. 57 . Se o primeiro for maior que o segundo. passa-se para A[1] o elemento 8 e para A[2] passa-se o elemento 9. numérica. que antes de apresentar os dados de uma matriz. A[5] = 1. 5. a comparação entre o valor armazenado em A[4] com o valor de A[5] . A[2] = 7. por exemplo. pois já foram anteriormente comparados. b) desta forma passa-se a fazer as trocas sucessivas até que se alcance o último elemento da matriz. 7. d) o elemento que estiver em A[4] é comparado apenas com o elemento que estiver em A[5]. ou seja. quando for efetuada uma pesquisa visual. estas terão valores diferentes. 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]. pudéssemos efetuar a classificação desses dados. c) na seqüência. o elemento que estiver em A[3] é comparado com os elementos que estiverem em A[4] e A[5] e por fim.). colocando-os em uma ordem qualquer (alfabética. 5. etc. Isso é muito útil. A tabela acima. facilitando desta forma a localização de algum elemento. e assim por diante. b) depois o elemento que estiver em A[2] não necessita ser comparado com o elemento que estiver em A[1].

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

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

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

readln(resp). end. Caso seja igual. indicando a localição da informação desejada. Será executada a próxima verificação de NOME com NOMES[I].' não foi localizado!'). e quando a informação foi encontrada. Este nome é atribuído então à variável NOME. através de uma mensagem. 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. Assim o programa irá informar ao usuário. A variável ACHOU é o flag. 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. . write('Deseja Continuar a Pesquisa? (S/N) '). e assim por diante. 61 . writeln. Assim o fluxo de execução do programa é desviado para fora da estrutura whiledo e o programa informará ao usuário. pois esta serve como um pivô. indicando que o nome procurado foi encontrado. 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.Linguagem Pascal else writeln(nome. A estrutura if-then-else. a bandeira foi “levantada” – verdadeira. estabelecendo um valor verdadeiro quando uma determinada informação é localizada. Analisando o trecho da pesquisa seqüencial: Primeiro é solicitado ao usuário a digitação do nome a ser pesquisado. Este tipo de tratamento de variável é conhecido como FLAG (Bandeira). que o valor procurado foi encontrado. À 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). que o valor procurado não foi encontrado. Observe que a variável ACHOU exerce um papel importante dentro da rotina de pesquisa. 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]. através de uma mensagem. localizada dentro da estrutura While-do citada acima. podendo-se dizer que ao começar a rotina a bandeira estava “abaixada” – falsa. 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). a variável ACHOU passa a ter o valor verdadeiro (true). a variável ACHOU permanece com o valor falso.

Linguagem Pascal Capítulo 11 – Estruturas de dados homogêneas II 11. ou seja.6] ..ls1. c) esta matriz possui o tamanho de 5 linhas (de 1 a 5) e 6 colunas (de 1 a 6). é TABELA. por exemplo. Onde: • . No caso de matrizes com mais de uma dimensão. obviamente. Uma matriz de duas dimensões é representada por seu nome.li2.3] indica que está sendo feita uma referência ao elemento armazenado na linha 2 coluna 3 da matriz..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 . lista de identificadores – são nomes atribuídos às variáveis que se deseja declarar. as matrizes de uma só dimensão.. 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. 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. Em matrizes bidimensionais. assim como em matrizes de uma só dimensão. deverá ser utilizado tantas estruturas de repetição quantas forem as suas dimensões. 62 . Podemos dizer que. ou seja. Abaixo podemos ver uma matriz de duas dimensões chamada TABELA.6]). 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. Para uma matriz de duas dimensões.3 A matriz TABELA com duas dimensões.ls2] of <tipo de dado>. 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.1 Matriz multidimensional ou arrays Vimos anteriormente a utilização de variáveis indexadas (matrizes) do tipo vetor. Assim. b) esta matriz possui duas dimensões (linhas e colunas): TABELA[1..1. d) nesta matriz poderão ser armazenados até 30 elementos (5x6=30)..1. tendo assim. Observando a matriz TABELA de duas dimensões acima podemos concluir: a) o seu nome. Colunas Linhas 1 1 2 3 4 5 2 3 4 5 6 Posição 2.5. é uma matriz de 5 por 6 e. tamanho (dimensão de linhas e colunas) entre colchetes e o seu tipo. 5 linhas e 6 colunas (TABELA[1. 11.5.. a seguinte sintaxe: <lista de identificadores> : array[li1. deveremos utilizar duas estruturas de repetição encadeadas para que possamos acessar todos os seus elementos. TABELA[2.

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

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

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

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

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

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

<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 “. Porém os programas apresentados até aqui com a utilização de registros. 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. nome : string[30].4] of real..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. A instrução “readln(funcionario. O registro reg_funcionário é um conjunto de dados heterogêneos (um campo integer. .nome)” atribui o valor digitado pelo usuário ao campo nome da variável funcionário. end. passou-se a ter uma mobilidade bastante grande.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>. {*** declaração do tipo reg_aluno ***} Type bimestre = array[1. só fizeram menção à leitura e escrita de um único registro. 12. que é do tipo reg_funcionario.. conta : real. 69 .. end.. Seria muito útil poder construir um programa que permitisse trabalhar com vários registros de alunos. Var funcionario : reg_funcionario... write(‘Informe o nome do funcionário. Uses WinCrt.3 Conjunto de registros Com as técnicas de programação expostas até este momento. nota: bimestre. reg_aluno = record nome: string[20].. cargo : string[10]. . readln(funcionario. facilitando a construção de programas mais eficientes.” (ponto). principalmente os que envolvem a utilização de dados heterogêneos..: ‘). 12. 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. begin .nome). como exemplificado a seguir: Type reg_funcionario = record matricula : integer. end. um campo real e dois campos string). podendo-se trabalhar de uma forma mais adequada com diversos problemas.

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

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

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

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

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

<n>). variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo físico (arquivo em meio magnético). 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..3.9 Verificando o tamanho do arquivo (filesize) A função filesize tem por finalidade retornar número de registros presentes no arquivo. Exemplo: Seek(arq_agenda. 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..”. Seek(arq_agenda.. 77 . 13. n – é o número do registro que se quer acessar.1). 13. A sintaxe: FilePos(<variável arquivo>). Writeln(FilePos(arq_agenda)). Exemplo: . . A sintaxe: FileSize(<variável arquivo>).3. No exemplo acima a instrução “Writeln(FilePos(arq_agenda))..1). Lembre-se: No Pascal o primeiro registro de um arquivo é o de número 0 (zero). A sintaxe: Seek(<variável arquivo>. variável arquivo – é o nome da variável arquivo (arquivo lógico) associada ao arquivo (arquivo físico).1). Onde: Seek – é palavra-chave do Pascal. Onde: FilePos – é palavra-chave do Pascal.Linguagem Pascal procedure podemos acessar o n-ésimo registro de um arquivo. Onde: .

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

Sign up to vote on this title
UsefulNot useful