Ir para o conteúdo

Tutorial de Pascal (2005)

As bases das bases

Estrutura da programação

  • Análise do enunciado do problema
    • Dados de entrada
    • Dados de saída
    • Relações de transformação
  • Desenvolvimento do algoritmo
  • Codificação na linguagem de programação (neste caso irá ser Pascal, mas isto aplica-se a todas as outras linguagens de programação)
  • Execução e testes

Dados de entrada: dados que é necessário fornecer para poderem ser calculados os dados de saída.

Dados de saída: resultados a obter.

Relações de transformação: relações matemáticas ou de qualquer outra espécie que permitam transformar os dados de entrada nos dados de saída.

Algoritmo: escrita, numa linguagem normalizada, da sequencia de operações que definem o problema.

Noções de algoritmia

Para resolver os problemas em Programação recorreremos á utilização de Algoritmos.

E o que é um algoritmo?

Um algoritmo é, nada mais nada menos, do que a sequencia de passos a utilizar de modo a que possamos chegar á solução para um determinado tipo de problema.

A utilização de algoritmos apenas visa tornar mais fácil a programação, visto que, ao elaborarmos um algoritmo, subdividimos o problema sistematicamente em partes mais pequenas e menos complexas chegando a um ponto em que compreendemos claramente cada uma das partes.

Assim podemos indicar sem ambiguidade os passos(algoritmo) para a resolução de problemas:

  • Analisar o problema
    • Conhecer o problema: ouvir o problema, entendê-lo, perceber qual o objectivo
    • Descrever o problema: subdividir o problema(esquematizar), detalhar
  • Resolver o problema: escrever passo-a-passo o raciocínio da solução do problema; verificar se não existe ambiguidade
  • Implementar: esta fase acontece apenas após o problema estar resolvido e consiste em implementar o algoritmo numa linguagem de programação

Linguagens de programação

Para que um computador produza resultados úteis é necessário indicar as ordens a que ele deve obedecer. Essas ordens serão uma série de instruções binárias - as únicas instruções que o computador entende, também designadas por código máquina.

Apesar de ser possível escrever um programa directamente em código máquina, dar ordens em números binários é fastidioso, lento e sujeito a erros, pelo que se desenvolveram linguagens de programação de baixo e alto nível, consoante estejam mais próximas do código máquina ou da linguagem humana, respectivamente.

É nessas linguagens que são escritos os programas com que os computadores funcionam e que se designam por programas fonte.

Assim, uma linguagem de programação é constituída por um conjunto de palavras(ou símbolos) que, colocados segundo determinadas regras, significam operações a realizar pelo computador - programa fonte.

As linguagens de programação têm, portanto, como função descrever todas as operações a serem efectuadas por um computador, necessárias a resolver um determinado problema.

Desta forma, uma linguagem de programação deve apresentar as seguintes facilidades:

  • Um vocabulário limitado
  • Regras gramaticais simples
  • Ser clara e concisa
  • De aprendizagem simples

Existe uma grande variedade de linguagens de programação:

Linguagens de baixo nível:

  • Linguagem máquina e linguagens Assembly
  • Vocabulário elementar
  • Processamento e execução rápida
  • Formulação dos problemas extremamente complicada e sujeita a erros

Linguagens de alto nível:

  • BASIC,Fortran,Cobol,C,Pascal,Java, etc.
  • Vocabulário adequado à expressão de grande complexidade
  • processamento e execução morosa
  • facilitam a tarefa do programador

Actualmente programa-se com linguagens de alto nível, como o Pascal, salvo situações em que a velocidade de execução seja crítica.

O Pascal é uma das mais utilizadas, não apenas devido ao seu poder intrínseco mas tambem devido a ser particularmente adequada ao ensino dos conceitos básicos da programação estruturada.

Preparação e execução de um programa

  • Introduz-se o texto do programa no computador através de um programa Editor e o ficheiro fonte fica guardado em memória secundária.
  • Tradução do Ficheiro fonte para linguagem máquina, utilizando um Compilador para testar se há erros sintáticos.

Se os houver são indicados ao utilizador, recorre-se ao editor para introdução de correcções, compila-se novamente o ficheiro fonte corrigido.

Se não houver é produzido o ficheiro objecto com a versão traduzida.

  • Execução do programa:
    • O ficheiro objecto é colocado em memória pelo Loader
    • A unidade de controlo examina cada instrução do programa residente e gera os comandos necessários à sua execução

Normalmente, o programador serve-se de um ambiente de desenvolvimento (IDE) que integra todas as ferramentas necessárias á preparação de um programa: editor, compilador, loader.

Estrutura de um programa em Pascal

Um programa em Pascal é composto por um cabeçalho e por um corpo de programa que inclui a zona de declarações e a zona de instruções:

  • Cabeçalho do programa
  • Zona de declarações
    • Declaração de constantes
    • Declaração de tipos
    • Declaração de variáveis
    • Declaração de subprograma
  • Parte de execução

Exemplo

{aqui fica o cabeçalho do programa que explicarei a seguir}
Program Conversão(input,output);
{Este programa lê uma distancia em milhas e imprime o seu valor em Quilómetros}

{aqui fica então a zona de declaração do programa}

USES CRT;
CONST
KLMILHA=1.6;
VAR
KILOMETROS, MILHAS: real;

{aqui está a parte de execução do programa}

BEGIN
writeln('Escreva uma distancia em milhas');
readln(MILHAS);
KILOMETROS:=KLMILHA*MILHA;
writeln('A distância é de ',KILOMETROS, 'Quilómetros');
END.

Passando a explicar a estrutura de um programa em Pascal:

Cabeçalho do Programa:

Program
NomeProg(input,output);
  • O nome do programa é indicado por NOMEPROG
  • (input,output) nomes associados aos dispositivos de entrada e saída utilizados
  • Os dados de entrada são lidos do ficheiro input
  • Os dados de saída são lidos do ficheiro output
  • Em Turbo Pascal é opcional a indicação desses ficheiros

USES Crt (ou WinCrt)

  • Instrução para o compilador
  • Faz a ligação da biblioteca que permite escrever em janelas do Windows
  • Apenas necessário quando se utiliza o Turbo Pascal para o Windows

Declaração de constantes

{Estrutura da declaração de constantes}

const= NOMECONST=valor;
  • O valor é associado ao identificador NOMECONST
  • O valor associado ao NOMECONST não pode ser alterado (é constante a longo de todo o programa)

Declaração de variáveis

{declaração de uma variável}

var nome_da_variável: tipo;
  • A cada variável é atribuída uma célula na memória
  • O tipo de dados a armazenar é especificado pelo tipo
  • A dimensão da célula reservada é determinada pelo tipo
  • Os identificadores de variáveis são separados por << , >>

Parte de execução

BEGIN

sequencia de instruções;

END.
  • Sequencia de instruções a serem executadas pelo computador aquando a execução do programa

Conceitos fundamentais do Pascal

Identificadores

Identificadores Padrão

  • Nomes de objectos predefinidos na linguagem Pascal
  • Podem ser redefinidos pelo utilizador (mas não devem)
  • Exemplos: input, real, cos, char, writeln, ...

Identificadores definidos pelo utilizador

  • Nomes que identificam os objectos criados pelo utilizador
  • Exemplos: x, N, n1, Nomes, temperatura, ...

Regras de formação de identificadores

Utilizam-se conjuntos de:

  • Letras de A a Z (maiúsculas e minúsculas)
  • Dígitos de 0 a 9
  • O símbolo underscore (_)
  • O primeiro caractere é obrigatoriamente uma letra ou underscore
  • Podem ter um comprimento arbitrário
  • O compilador apenas reconhece um determinado numero de caracteres (8 no Pascal Standard, 63 no Turbo Pascal)
  • As letras maiúsculas e minúsculas não são distinguíveis pelo compilador

Palavras reservadas

São palavras que têm um significado bem definido dentro da especificaçao da linguagem:

  • São usadas apenas para o fim a que foram destinadas
  • Não podem ser redefinidas pelo utilizador
  • Exemplos: program, begin, end, const, var, for, ...

Tipos de dados

A informação é armazenada na memória do computador de maneiras distintas: Tipos de Dados.

Os tipos de dados podem ser predefinidos ou definidos pelo utilizador.

Tipos de dados predefinidos:

  • Quantidades numéricas: integer, real
  • Valores lógicos ou booleanos: boolean
  • Valores que representam caracteres gráficos: char
  • Cadeias de caracteres: string

Integer

  • Representação exacta de números inteiros até um certo limite, em módulo dado por MAXINT(=32767)
  • Exemplo: -45, 0, 1, +23.

Real

*Representação, normalmente não exacta, de números:
  * Com parte fraccionária
  * Extremamente grandes ou extremamente pequenos
* Exemplos: -6,35, 1.23E18, 1.2E-10

Boolean

  • Representação dos valores lógicos "verdadeiro" e "falso"
  • Exemplos: true, false

Char

  • Representação de caracteres gráficos
  • Exemplos: 'A', 'a', '?', '+', '5', ...

String

  • Representação de cadeias de caracteres
  • Strings constantes devem ser colocadas entre plicas ' '
  • Existe um numero máximo de caracteres permitidos por string (255 ou maior, na maioria das versões de Pascal)
  • Exemplos: 'Rita', 'lhidasdseret585???', 'aula n.1', ...

Constantes

São representações do conteúdo da memória do computador onde ser armazenam valores que não são alterados durante a execução do programa.

  • Possuem um identificador e um valor
  • São definidas na zona declarativa na forma const identificador=valor;
  • O tipo de constante encontra-se explicito no valor

Variáveis

São representações do conteúdo da memória do computador onde se armazenam valores que podem ser alterados durante a execução do programa.

  • Possuem um identificador, um valor e um tipo
  • São declaradas na zona declarativa da forma var identificador: tipo;
  • O valor é atribuído à variável apenas durante a execução do programa
  • O tipo de variável é explicitamente indicado através do tipo

Expressões

Uma expressão é um grupo de operandos agrupados por operadores, constituindo formas algébricas que representam um valor.

As expressões numéricas:

  • Representam um valor numérico real ou inteiro
  • Exemplo: (A*B-2*C)/3 em que A,B e C representam variáveis ou constantes numéricas

As expressões booleanas:

  • Representam um valor lógico: true ou false
  • Exemplo: 2*X>Y/5 (X e Y representam constantes numéricas)

Instruções

Uma instrução é uma ordem que obriga o computador a executar determinadas acções.

Existem as instruções simples:

  • Instruções de atribuição
  • Instruções de entrada e saída de dados
  • Instruções de controle de sequenciação
  • Invocações de subprogramas

Instruções compostas:

begin
sequencia de instruções;
end;

Dentro das instruções compostas existem:

  • A instrução atribuição: variavel:=expressao;
    • É atribuido á variável o valor da expressão
    • O resultado da expressão tem de ser de um tipo compatível com o da variável
  • A entrada de dados: readln(lista de variaveis);
    • Lê para a memória a informação a partir do teclado
    • O utilizador tecla um alor por cada variável da lista
    • A ordem e entrada de dados tem de corresponder á ordem das variáveis na lista
    • Todos os dados devem ser teclados na mesma linha
    • Os dados numéricos devem ser separados por espaços
  • A visualização de dados: writeln(lista de valores);
    • Visualiza no monitor de cada variável, expressão ou constante pela ordem em que figuram na lista
    • Após a impressão de toda a informação contida na lista, o cursor muda para a linha seguinte
    • write: o mesmo que writeln, mas sem mudar de linha

Subprogramas

A linguagem Pascal, sendo uma linguagem modular, permite subdividir um programa em subprogramas ou módulos.

Subprogramas são elementos de programação autónomos:

  • A linguagem Pascal admite dois tipos de Subprogramas: procedimentos e funções
  • Podem ser acedidos de qualquer ponto dentro de um programa ou de outro subprograma
  • Quando o Subprograma é acedido, é lhe fornecido normalmente informação para ser por si processada
  • Quando gerada informação, é devolvida ao ponto de onde o Subprograma foi acedido
  • O Pascal admite procedimentos e funções predefinidos, e definidos pelo programador
  • Os subprogramas predefinidos encontram-se incluídos na biblioteca de Pascal

Tipos de Dados Elementares

Um tipo de dados define o conjunto de valores que uma variável ou constante pode assumir.

Dados de tipo elementar

Podem ser:

  • Inteiros (INTEGER)
  • Reais (REAL)
  • Caracteres (CHAR)
  • Lógicos (BOOLEAN)

Dados de tipo ordinal

Existem quando os elementos que compreendem o tipo de dados formam um conjunto ordenado e finito.

É o caso dos:

  • Inteiros
  • Caracteres
  • Booleanos
  • Dados de tipos definidos pelo programador

Dados inteiros

O tipo integer permite a utilização de valores inteiros entre -MAXINT e MAXINT.

Cada dado do tipo integer ocupa dois bytes em memória.

Os operadores válidos para numeros inteiros são a adição (+),subtracção (-), multiplicação (*), divisão inteira (/) e resto da divisão inteira (MOD).

DIV - Permite obter o quociente inteiro da divisão de dois números inteiros.

MOD - Permite obter o resto da divisão de dois numeros inteiros.

Exemplo: 17 DIV 5=3 e 17 MOD 5=2

Dados Reais

Os dados do tipo real representam quantidades numéricas reais:

  • Permite utilizar valores de +-2.9E-39 a +-1.7E38 com uma precisão de 12 dígitos
  • Cada dado do tipo real ocupa 6 bytes de memória
  • Os operadores válidos para os valores reais são os operadores aritméticos usuais: +, -, *, /

Em Pascal, um valor inteiro pode surgir onde for esperado um valor real, visto que o conjunto de inteiros está contido no conjunto dos reais.

Funções padrão para valores numéricos

Funções reais

Estas funções apresentam sempre um resultado real, mas recebem um argumento que pode ser real ou inteiro.

  • ARCTAN(X) - Calcula o valor do ângulo, em radianos, cuja tangente é X
  • COS(X) - Calcula o co-seno de C, expresso em radianos
  • EXP(X) - Calcula a exponencial de base e X (e^X)
  • LN(X) - Calcula o logaritmo natural de X
  • SIN(X) - Calcula o seno de X
  • SQRT(X) - Calcula a raíz quadrada de X

Funções inteiras

Estas funções representam um resultado inteiro, mas recebem um argumento real.

  • ROUND(X) - Arredonda o valor de X de forma a convertê-lo no inteiro mais próximo
  • TRUNC(X) - Trunca o valor de X, eliminando a sua parte decimal

Funções do tipo argumento

Estas funções apresentam um resultado do mesmo tipo do argumento.

  • ABS(X) - Calcula o valor absoluto do argumento X (|X|)
  • SQR(X) - Calcula o quadrado do argumento X (X^2)

Dados do tipo caracter

Os dados do tipo char representam caracteres individuais. O conjunto completo de caracteres que pode ser usado com dados do tipo char forma o conjunto ordenado de caracteres ASCII.

O conjunto ASCII é formado por 128 caracteres. Os caracteres estão ordenados e codificados num ordinal de 0 a 127.

  • Cada caracter ASCII está associado ao seu numero de ordem no conjunto ASCII
  • Os caracteres podem ser comparados entre si, com base na sua ordem relativa no conjunto ASCII
  • As letras ordenadas segundo a sua ordem alfabética
  • Os dígitos de (0 a 9) estão ordenados na sua sequencia numérica própria
  • Uma constante caracter é expressa atrav+es da sua inclusão entre plicas ' '
  • Cada dado do tipo caracter ocupa 1 byte de memória

Funções padrão usadas em dados do tipo caracter

  • ORD(X) - Apresenta como resultado o ordinal associado ao caracter X no conjunto ASCII
  • CHR(X) - Apresenta como resultado o caracter ASCII correspondente ao numero inteiro ordinal X

Dados booleanos

Um tipo de dado booleano pode assumir um valor lógico entre dois possíveis: TRUE ou FALSE.

Os operadores lógicos são:

  • Conjunção (AND)
  • Disjunção (OR)
  • Disjunção exclusiva (XOR)
  • Negação (NOT)

Funções utilizadas em dados do tipo ordinal (INTEGER; BOOLEAN; CHAR)

  • SUCC(X) - Apresenta como resultado o sucessor de X
  • PRED(X) - Fornece o predecessor de X