Aulas anteriores... • Formulação adequada do problema • Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução • Definição do algoritmo ° Método de decomposição hierárquica utilizando níveis crescentes de detalhe • (abordagem top-down) ° Noção de encapsulamento de operações • (procedimentos e funções) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Esta Aula ... • Detalhes da linguagem de programação ° Elementos básicos • (identificadores, constantes, símbolos gráficos) ° Estrutura básica de um programa • (cabeçalho, parte declarativa, parte de execução) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Qual é o objectivo central de uma linguagem? • promover a comunicação entre duas ou mais entidades. Linguagem Natural • descreve ideias, acções, sentimentos, emoções, … ; • apresenta: um vocabulário rico; regras gramaticais complexas; • é muitas vezes ambígua. Linguagem de Programação • descreve operações a serem executadas por um computador; • apresenta: um vocabulário limitado; regras gramaticais simples; • é sempre clara e concisa. Pascal é uma linguagem de programação, criada pelo Prof. Niklaus Wirth em 1971 e que apresenta características próprias que a tornam extremamente adequada ao ensino das regras básicas da programação. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Turbo Pascal Turbo Pascal é uma implementação da linguagem Pascal, desenvolvida por uma empresa chamada Borland International Inc. e destinada a ser usada em PC’s, que fornece um ambiente integrado, para desenvolvimento de programas, muito eficiente e fácil de utilizar. Editor de Texto Programa em Pascal Sim Erros ? Compilador Não Programa em Código Objecto Linker Bibliotecas Programa em Código Executável Janela de Aplicação Loader Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Elementos básicos da linguagem • identificadores descritos; são palavras que servem para nomear os diferentes objectos • constantes são valores concretos assumidos por alguns objectos; • símbolos gráficos representam diferentes tipos de operadores e de separadores; possibilitam a construção de frases, ou a separação das frases uma das outras. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Regras de formação dos identificadores Regra 1 - Os identificadores são formados por uma sequência de caracteres alfanuméricos, em que o primeiro é obrigatoriamente uma letra do alfabeto. identificador ::= <letra do alfabeto> | identificador <letra do alfabeto> | identificador <algarismo decimal> Embora o número de caracteres possa ser qualquer, os compiladores restringem esse número a um limite bem definido (em Turbo Pascal, só os primeiros 63 caracteres contam). Além disso, para melhorar a legibilidade e a compreensão dos identificadores, praticamente todos os compiladores permitem o recurso ao caracter (‘_’). conv_dist em vez de convdist, por exemplo. Regra 2 - O alfabeto maiúsculo é indistinguível do alfabeto minúsculo. conv_dist é o mesmo que CONV_DIST . Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipos de identificadores • palavras reservadas são identificadores que têm um significado bem definido dentro da especificação da linguagem; correspondem, no fundo, a uma extensão da noção de símbolo gráfico. program, begin, end, mod, and, for, string, record, ... • identificadores pré-definidos são os nomes de objectos, cuja definição é da responsabilidade do compilador que implementa a linguagem. integer, real, char, MAXINT, FALSE, write, input, sin, ... • identificadores definidos pelo utilizador são os nomes dos objectos definidos ou referenciados no programa. <nome de programa>, <nome de biblioteca externa>, <nome de constante> <nome de tipo de dados>, <nome de variável>, <nome de procedimento> <nome de função> Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipos de identificadores OBSERVAÇÕES Para o compilador, é indiferente o tipo de alfabeto (maiúsculo, minúsculo, ou uma mistura dos dois) usado na escrita do programa. Contudo, por questões de clareza, algumas regras devem ser seguidas: ° • palavras reservadas e identificadores pré-definidos (que não representem constantes) usar o alfabeto minúsculo; identificadores definidos pelo utilizador e identificadores pré-definidos (que representem constantes) - usar o alfabeto maiúsculo. Também, para melhorar a legibilidade do programa, devem ser introduzidos comentários relevantes, que expliquem o significado dos diferentes objectos, ou que operação é efectuada por grupos bem definidos de instruções. comentário ::= {<qualquer sequência de símbolos>} | (*<qualquer sequência de símbolos>*) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Representação da informação • toda a informação, usada e produzida durante a execução de um programa, está armazenada em binário na memória principal do computador, sob a forma de constantes (valores invariantes), ou de variáveis (valores lidos do dispositivo de entrada, valores temporários calculados a partir destes e valores finais a enviar para o dispositivo de saída); • a forma como a informação está organizada, ou seja, o significado que é atribuído a estas sequências binárias de valores, depende da linguagem de programação; • as regras que definem cada organização concreta, designada por tipo de dados, constituem o que se chama o seu formato próprio, e indicam ° ° o tamanho, em n.º de bytes, necessário ao armazenamento de uma constante desse tipo; a maneira como deve ser lida (interpretada) a sequência de bits da sua representação binária. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipos de dados válidos em Pascal • tipos pré-definidos são os tipos de dados básicos, referenciados na especificação da linguagem e definidos pelo compilador ° ° ° ° ° integer e real - representação de quantidades numéricas; boolean - representação de quantidades lógicas; char - representação de símbolos gráficos; string - representação de sequências de símbolos gráficos (em Pascal Standard, só existem constantes deste tipo, mas está presente em Turbo Pascal e na grande maioria dos compiladores actuais). tipos definidos pelo utilizador são tipos de dados particulares, definidos pelo programador, para adequar a representação da informação às condições concretas do problema; são construídos a partir de tipos de dados já existentes (pré ou previamente definidos) e de dispositivos especiais especificados na linguagem, os construtores. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipo integer • representação exacta de quantidades inteiras, positivas e negativas, até a um limite que, em valor absoluto, é expresso pela constante MAXINT; • caso particular da representação em vírgula fixa (neste caso, a vírgula está à direita do bit menos significativo); • o valor da quantidade é expresso num sistema binário pesado, conhecido pelo nome de complemento para 2, em que o bit mais significativo representa o sinal (0 -> +, 1 -> -); • para uma representação em N bits, o valor da quantidade A é calculado por N-1 A = < aN-1 a1a 0 > = - aN-1 2 N-2 + a n 2n n=0 em que an = 0 ou 1, para 0 n < N . Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipo integer • em Turbo Pascal, a constante MAXINT é igual a 215-1, o que implica um tamanho de 2 bytes (ou 16 bits); 15 14 8 7 0 +/- • o Turbo Pascal contempla ainda os seguintes tipos de vírgula fixa, todos eles compatíveis entre si e com integer Nome Gama Tamanho em bytes byte shortint word longint 0 … 255 -128 … 127 0 … 216-1 -231 … 231-1 1 1 2 4 Exemplos 149 0 -345 Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipo real • representação aproximada de quantidades numéricas positivas e negativas, com parte inteira e/ou parte fraccionária, numa gama de valores muito alargada; • caso particular da representação em vírgula flutuante (aquilo que comummente se designa por notação científica: m x Bexp, em que m é a mantissa, B é a base (hoje em dia, quase sempre binária) e exp é o expoente); • a representação da quantidade é formada por três partes: sinal da mantissa (0->+, 1->-), valor absoluto da mantissa (fraccionária, entre 0.5 e 1.0, ou, alternativamente, entre 1.0 e 2.0), expressa no sistema binário de numeração, e expoente, expresso num sistema binário pesado. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipo real • em Turbo Pascal, a gama de representação em valor absoluto vai aproximadamente de 2.9x10-39 a 1.7x1038, com uma mantissa de 11 a 12 algarismos significativos, o que implica um tamanho de 6 bytes (ou 48 bits); 47 0 +/- valor absoluto da mantissa expoente • o Turbo Pascal contempla ainda os seguintes tipos de vírgula flutuante, todos eles compatíveis entre si e com real Nome Gama Algarismos significativos single double extended 1.5x10-45 … 3.4x1038 5.0x10-324 … 1.7x10308 3.4x10-4932 … 1.1x104932 Tamanho em bytes 7-8 15-16 19-20 4 8 10 Exemplos 22.0 0.0 -0.0345 -2.2e1 0e0 -3.45e-2 Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipo boolean • representação dos valores lógicos verdadeiro e falso; • normalmente, fixa-se um valor binário (0, por exemplo) para um dos níveis lógicos e o outro pode assumir qualquer valor; • em Turbo Pascal, o tamanho usado para armazenamento é um byte (ou 8 bits), que constitui uma palavra de memória; 7 0 Exemplos FALSE TRUE Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipo char • representação de símbolos gráficos ou de sinais de controlo; • cada símbolo ou sinal é representado numericamente através de um valor binário que lhe é atribuído por um código, o mais comum é o código ASCII (American Standard Code for Information Interchange); • qualquer que seja, porém, o código usado, as regras seguintes são impostas pela especificação da linguagem Pascal: ° ° os valores binários associados com os algarismos decimais devem ser seguidos e respeitar a ordem natural; os valores binários associados com as letras do alfabeto (maiúsculas e minúsculas) devem respeitar a ordem natural, mas não têm que ser necessariamente seguidos (sãono, contudo, no código ASCII). Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipo char • em Turbo Pascal, o tamanho usado para armazenamento é um byte (ou 8 bits), que constitui uma palavra de memória; 7 0 Exemplos ‘4’ ‘T’ ‘?’ ‘j’ • ainda, em Turbo Pascal, existe um meio alternativo para representar constantes de tipo char; a sua sintaxe é #<valor numérico em decimal do código atribuído ao caracter> este método é particularmente útil para representar os sinais de controlo, porque, sendo estes invisíveis, não podem ser representados pelo processo geral. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipo string • representação de sequências de símbolos gráficos ou de sinais de controlo; • em Turbo Pascal, o formato usado por defeito é de 256 bytes e permite um armazenamento de sequências de caracteres, cujo comprimento pode ir até 255; • o tamanho do formato por defeito pode ser reduzido, se o programador assim o desejar, através da indicação explícita do comprimento máximo das sequências de caracteres que aí podem ser armazenadas string [N_MAX_CAR] Exemplos ‘era uma vez um gato maltes’ ‘’ (string nulo) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Tipos de dados ordinais ou ordenados • são formas de organização da informação em que existe uma possibilidade de enumeração ordenada das constantes que as constituem; isto é, dada uma constante qualquer, é sempre possível determinar qual é a constante que a precede, ou qual é a constante que lhe sucede; • tipos de dados ordinais pré-definidos ° ° ° integer (e seus tipos compatíveis) - a ordenação é trivial, neste caso; boolean - admite-se que FALSE vem antes de TRUE; char - a ordenação baseia-se nos valores numéricos do código usado; • tipos de dados não ordinais pré-definidos ° ° real (e seus tipos compatíveis) - como representam valores numéricos de uma forma aproximada, não é possível saber que constantes estão na vizinhança imediata de qualquer delas; string - tendo as constantes tamanho distinto, o mecanismo de ordenação teria necessariamente que ser multidimensional e a definição anterior não se aplica. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Estrutura básica de um programa em Pascal Cabeçalho • caracterização do programa e definição dos dispositivos de comunicação ° nome do programa ° nomes dos dispositivos de entrada e de saída utilizados Parte Declarativa • referência a, ou definição dos diferentes objectos usados na parte de execução ° referência a bibliotecas externas (units) ° definição de constantes, de tipos de dados e de variáveis ° definição de procedimentos e de funções Parte de Execução • listagem ordenada da sequência de instruções executadas pelo computador quando o programa é ‘corrido’ Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Cabeçalho program identificador do programa (lista de nomes dos dispositivos de entrada e saída); identificador do programa ::= identificador válido em Pascal lista de nomes dos dispositivos de entrada e saída ::= identificador do dispositivo | lista de nomes dos dispositivos de entrada e saída , identificador do dispositivo identificador do dispositivo ::= input | output | identificador lógico de ficheiro identificador lógico de ficheiro ::= identificador válido em Pascal Notas - Os identificadores input e output são os nomes dos dispositivos standard de entrada e saída, normalmente, o teclado e o écran do monitor vídeo. Em Turbo Pascal, a lista de nomes dos dispositivos de entrada e saída é opcional. Assim, o cabeçalho típico de Pascal Standard program CONVDIST(input, output); pode ser reduzido a program CONVDIST; Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Referência a bibliotecas externas uses lista de nomes de bibliotecas; lista de nomes de bibliotecas ::= identificador de biblioteca | lista de nomes de bibliotecas , identificador de biblioteca identificador de biblioteca ::= identificador válido em Pascal Nota - A única biblioteca para já relevante é aquela que, dentro do ambiente Windows, cria uma janela de aplicação. Por conseguinte, todos os programas em Turbo Pascal que corram no ambiente Windows, têm que referenciar a biblioteca “WinCrt” e, por isso, a referência abaixo tem que surgir em todos eles uses WinCrt; Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Definição de constantes const lista de constantes; lista de constantes ::= identificador de constante = valor | lista de constantes ; identificador de constante = valor identificador de constante ::= identificador válido em Pascal valor ::= valor literal | expressão simples valor literal ::= valor constante de um dos tipos pré-definidos Nota - Quando o valor atribuído a uma constante é calculado a partir de uma expressão simples, todos os seus operandos são necessariamente valores literais, ou constantes que foram previamente definidas. Este tipo de definição é característico de Turbo Pascal, não existindo em Pascal Standard. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Definição de constantes const NMAX = 100; (* constante inteira PI = 3.1415926536; (* constante real SINAL = FALSE; (* constante booleana LETRA = ‘S’; (* constante de tipo caracter NOME = ‘INES’; (* constante de tipo string VEL_LUZ = 3e8*1000; PER_CIRC_UNIT = 2*PI; - v. v. v. v. v. literal literal literal literal literal *) *) *) *) *) (* constante real - expressão *) (* constante real - expressão *) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Definição de variáveis var lista de variáveis; lista de variáveis ::= lista de nomes: tipo de dados | lista de variáveis ; lista de nomes: tipo de dados lista de nomes ::= identificador de variável | lista de nomes, identificador de variável identificador de variável ::= identificador válido em Pascal tipo de dados ::= tipo pré-definido | tipo definido pelo utilizador Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Definição de variáveis var A1, A4: B1, C1, D1: E1, A2, A3: integer; (* variáveis inteiras integer; (* variável inteira B2: real; (* variáveis reais C2, C3, C4: boolean; (* variáveis booleanas char; (* variável de tipo caracter E2: string; (* variáveis de tipo string (* com uma capacidade de armazenamento (* máxima de 255 caracteres F1: string[10]; (* variável de tipo string (* com uma capacidade de armazenamento (* máxima de 10 caracteres *) *) *) *) *) *) *) *) *) *) *) Departamento de Electrónica e Telecomunicações - Universidade de Aveiro Constantes vs. Variáveis • uma constante é um objecto, cujo valor se mantém invariante durante a execução do programa; • definir uma constante significa associar um nome a esse valor; • o uso de constantes num programa serve para se conseguir a sua parametrização, melhorando a legibilidade (os valores são substituidos por nomes com significado explícito) e a robustez (a alteração do valor é realizada de um modo centralizado). • uma variável é um objecto, cujo valor se altera em princípio durante a execução do programa; • definir uma variável significa reservar espaço em memória principal para o seu armazenamento; • o uso de variáveis num programa serve para armazenamento, durante a sua execução, dos valores lidos do dispositivo de entrada, dos valores temporários e dos valores a enviar para o dispositivo de saída; • o recurso imoderado a variáveis conduz a uma perda da legibilidade do programa. Departamento de Electrónica e Telecomunicações - Universidade de Aveiro