Escolar Documentos
Profissional Documentos
Cultura Documentos
ESPECIFICAÇÕES DA LINGUAGEM
ALGORÍTMICA UPSAM 2.0
SUMÁRIO
A.1.1 Identificadores
Podem ser formados com qualquer caractere alfabético regional (não necessariamente ASCII padrão), dígitos
(0-9) e o símbolo de sublinhado (_), devendo começar sempre por um caractere alfabético. Os nomes dos iden-
tificadores são sensíveis a maiúsculas e recomendamos que seu comprimento não ultrapasse os 50 caracteres.
A.1.2 Comentários
Existem dois tipos de comentários. Comentários somente de uma linha utilizarão barra dupla inclinada (//);
este símbolo servirá para ignorar tudo o que apareça até o final da linha. Comentários multilinha poderão
ocupar mais de uma linha utilizando os caracteres { e }, que indicarão respectivamente o início e o final do
comentário. Todos os caracteres incluídos entre esses dois símbolos serão ignorados.
Dados numéricos
• Inteiros. Consideramos inteiro qualquer valor numérico sem parte decimal, independentemente de sua
grandeza. Para a declaração de um tipo de dado inteiro, utilizamos a palavra reservada inteiro.
• Reais. Consideramos real qualquer valor numérico com parte decimal, independentemente de uma gran-
deza ou precisão. Para a declaração de um tipo de dado real, utilizamos a palavra reservada real.
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
Dados lógicos
Utilizamos a palavra reservada lógico em sua declaração.
Numéricas inteiras
São compostas pelos dígitos (0...9) e os sinais + e – utilizados como prefixos.
Numéricas reais
Os números reais em vírgula fixa utilizam o ponto como separador decimal, além dos dígitos (0...9), e o
caractere de sinais (+ e –). Nos reais em vírgula flutuante, a matriz poderá utilizar os dígitos (0...9), o carac-
tere de sinais (+ e –) e o ponto decimal (.). O expoente irá separar-se da matriz mediante a letra E e a matriz
estará formada pelo caractere de sinais e os dígitos.
Lógicas
Somente poderão conter os valores verdade (verdadeiro) e falso.
De caractere
Qualquer caractere válido do conjunto de caracteres utilizado, delimitados por separadores ‘ ou “.
De cadeia
Seqüência de caracteres válidos do conjunto de caracteres utilizados, delimitados pelos separadores ‘ ou “.
A.2 OPERADORES
Operadores aritméticos
Operador Significado
- Menos unitário
- Subtração
+ Mais unitário (soma)
* Multiplicação
/ Divisão real
div Divisão inteira
mod Resto da divisão inteira
** Exponencial
Especificações da linguagem algorítmica UPSAM 2.0mm
O tipo de dado de uma expressão aritmética depende do tipo de dado dos operandos e do operador. Com os
operadores +, -, * e ^, o resultado será inteiro se os operandos forem inteiros. Se algum dos operandos for real,
o resultado será de tipo real. A divisão real (/) devolve sempre um resultado real. Os operadores mod e div
devolvem sempre um resultado tipo inteiro.
Operadores de relação
Operador Significado
= Igual a
< Menor que
> Maior que
<= Menor que ou igual a
>= Maior que ou igual a
< > Diferente de
Operadores lógicos
Operador Significado
Operadores de cadeia
Operador Significado
+ Concatenação de cadeias
& Concatenação de cadeias
Trabalham com operandos do tipo cadeia ou caractere e o resultado sempre será de tipo cadeia.
1
Essas regras de prioridade se ajustam a linguagens de programação modernas como C++, Java ou C#.
mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
( ) Parênteses Dir-Esq
( ) Chamada à função Dir-Esq
[ ] Subíndice Dir-Esq
. Acesso a membros de um objeto Dir-Esq
* Produto Esq-Dir
/ Divisão Esq-Dir
% Porcentagem Esq-Dir
+ Soma Esq-Dir
- Subtração Esq-Dir
= Atribuição Dir-Esq
+= Atribuição de soma Dir-Esq
-= Atribuição de subtração Dir-Esq
*= Atribuição de produto Dir-Esq
/= Atribuição de divisão Dir-Esq
% = Atribuição de módulo Dir-Esq
& = Atribuição AND bit a bit Dir-Esq
(continua)
Especificações da linguagem algorítmica UPSAM 2.0mm
(continuação)
Arrays
<dimensão> é um subintervalo com o índice do limite inferior e o limite superior. Por exemplo, array
[5..20] de inteiro declararia um array de 16 elementos inteiros. Podem aparecer vários separadores por
vírgulas para declarar arrays de mais de uma dimensão.
<tipo_de_dado> é o identificador de qualquer tipo de dado padrão ou definido pelo usuário.
<nome_do_tipo> é um identificador válido que será utilizado para referenciar o tipo de dado.
O acesso a um elemento de um array se realizará indicando-se seu índice entre colchetes. O índice será
uma expressão inteira.
Registros
registro : <nome_de_tipo>
<tipo_de_dado> : <nome_do_campo>
...
fim_registro
Arquivos seqüenciais
arquivo_s de <tipo_de_dado> : <nome_do_tipo>
<tipo_de_dado> é o identificador de qualquer tipo de dado padrão ou definido pelo usuário.
<nome_do_tipo> é um identificador válido que se utilizará para referenciar o tipo de dado.
Arquivos diretos
arquivo_s de <tipo_de_dado> : <nome_do_tipo>
<tipo_de_dado> é o identificador de qualquer tipo de dado padrão ou definido pelo usuário.
<nome_do_tipo> é um identificador válido que se utilizará para referenciar o tipo de dado.
Funções aritméticas
Função Significado
abs(x) Devolve o valor absoluto da expressão numérica x.
aleatório( ) Devolve um número aleatório real maior que ou igual a 0 e menor que 1.
arctan(x) Devolve o arco tangente de x.
cos(x) Devolve o cosseno de x.
inteiro(x) Devolve o primeiro valor inteiro menor que a expressão numérica x.
exp(x) Devolve o valor ex.
1n(x) Devolve o logaritmo neperiano de x.
log10(x) Devolve o logaritmo em base 10 de x.
raiz2(x) Devolve a raiz quadrada de x.
sen(x) Devolve o seno de x.
trunc(x) Trunca (elimina os decimais) da expressão numérica x.
Funções de cadeia
Função Significado
comprimento(c) Devolve o número de caracteres da cadeia c.
posição(c, sc) Devolve a posição da primeira aparição da subcadeia sc na cadeia.
subcadeia(c, ini[, long]) Devolve uma subcadeia da cadeia c formada por todos os caracteres a partir
da posição ini. Incluindo-se o argumento long, devolve só os primeiros
long caracteres a partir da posição ini.
Especificações da linguagem algorítmica UPSAM 2.0mm
Função Significado
Funções de informação
Função Significado
Primeiro avalia o valor da expressão e o atribui à variável. A variável e a expressão devem ser do mesmo
tipo de dado.
Estrutura repetir
repetir
<ações>
até_que <expressão_lógica>
Estrutura desde
desde <variável> ← <valor_inicial> até <valor_final>
[incremento | decremento <valor_incremento>] fazer
<ações>
fim_desde
<variável> pode ser qualquer variável cujo valor possa ser incrementado ou decomposto, ou seja, todas
as numéricas, as de tipo caractere e as lógicas.
<valor_inicial> é uma expressão com o primeiro valor que a variável do laço recebe. Deve ser do
mesmo tipo que a variável do laço.
<valor_final> é uma expressão com o último valor que a variável do laço recebe. Deve ser do mesmo
tipo que a variável do laço. O laço finaliza quando a variável recebe um valor maior que esse valor inicial.
<valor_incremento> é uma expressão com o valor no qual se irá incrementar ou decompor a variável
do laço ao final de cada iteração.
A.5.2 Procedimentos
Declaração
procedimento <nome_procedimento> ([<lista_parâmetros_formais>])
[declarações locais]
início
...
fim_procedimento
Especificações da linguagem algorítmica UPSAM 2.0mm
Chamada a procedimentos
[chamar_a] <nome_procedimento>([<lista_parâmetros_atuais>])
A lista de parâmetros atuais pode ser uma ou várias variáveis ou expressões separadas por vírgulas que
devem coincidir em número, ordem e tipo com a lista de parâmetros formais da declaração.
A.5.3 Funções
Declaração
<tipo_de_dado> :função < nome_função>([<lista_parâmetros_formais>])
[declarações locais]
início
...
devolver(<expressão>)
fim_função
<tipo_de_dado> é um tipo de dado padrão ou definido previamente pelo usuário. Trata-se do tipo de
dado que devolve a função.
<nome_função> deve ser um identificador válido.
<lista_parâmetros_formais> pode ser um ou mais grupos de parâmetros separados pelo ponto-e-
vírgula. Cada grupo de argumentos se define da seguinte forma:
Chamada a funções
<nome_função>([<lista_parâmetros_atuais>])
A lista de parâmetros atuais é uma ou várias variáveis ou expressões separadas por vírgulas que devem
coincidir em número, ordem e tipo com a lista de parâmetros formais da declaração. Devolvendo um valor e
não existindo funções que não devolvem valores (funções void de C ou Java), a chamada deve ser sempre
feita dentro de uma expressão.
10mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
A.6 ARQUIVOS
Abertura do arquivo
abrir(<variável_tipo_arquivo,<modo_abertura>,<nome_arquivo>)
<nome_arquivos> é uma expressão de cadeia com o nome que o sistema dará ao arquivo.
Fechamento de arquivo
fechar(<lista_variáveis_tipo_arquivo>)
Entrada/saída
ler(<variável_tipo_arquivo>, <variável>
Ler do arquivo aberto para leitura representado por <variável_tipo_arquivo> o registro seguinte.
O tipo da variável deve coincidir com o tipo base do arquivo definido na declaração do tipo de dado.
escrever(<variável_tipo_arquivo>, <expressão>)
Escreve o valor da expressão no arquivo aberto para escritura e representado pela variável de tipo arquivo.
O tipo da expressão deve coincidir com o tipo base do arquivo definido na declaração do tipo de dado.
A leitura de um caractere único em um arquivo de texto pode ser feita da forma escrever(<variável_
tipo_caractere>) que leria o caractere seguinte do arquivo. A leitura de uma variável de tipo cadeia
(ler(<variável_tipo_cadeia>)) leria todos os caracteres até o final da linha.
A escrita de dados em um arquivo de texto também poderá ser feita caractere por caractere (escrever
(<variável_tipo_caractere>)) ou linha por linha (escrever (<variável_tipo_cadeia>)).
Especificações da linguagem algorítmica UPSAM 2.0mm11
A detecção do final da linha em um arquivo de texto quando lemos caractere por caractere será efetuada
com a função fdl:
fdl(<variável_tipo_arquivo>)
A função fdl devolve o valor lógico verdade se o último caractere lido é o caractere de fim de linha.
Abertura do arquivo
abrir(<variável_tipo_arquivo,<modo_abertura>,<nome_arquivo>)
• leitura, coloca o ponteiro no registro seguinte, no começo do arquivo e somente realiza operações de
leitura. O arquivo deve existir previamente.
• escrita, coloca o ponteiro no registro seguinte, no começo do arquivo e somente realiza operações de
escrita. Se o arquivo não existe, primeiro cria um arquivo vazio. Se o arquivo existe, sobrescreve os
dados que contém.
• leitura/escrita, coloca o ponteiro no começo do arquivo e permite operações tanto de leitura como
de escrita.
<nome_arquivo> é uma expressão de cadeia com o nome que o sistema dará ao arquivo.
Fechamento do arquivo
fechar(<lista_variáveis_tipo_arquivo>)
Acesso seqüencial
ler(<variável_tipo_arquivo>, <variável>)
Ler do arquivo aberto para leitura representado por <variável_tipo_arquivo> o registro seguinte.
O tipo da variável deve coincidir com o tipo base do arquivo definido na declaração do tipo de dado.
escrever(<variável_tipo_arquivo>, <expressão>)
Escreve o valor da expressão no arquivo aberto para escrita e representado pela variável de tipo arquivo.
O tipo da expressão deve coincidir com o tipo base do arquivo definido na declaração do tipo de dado.
Acesso direto
ler(<variável_tipo_arquivo>, <posição>, <variável>)
fda(<variável_tipo_arquivo>)
Devolve o valor lógico verdade quando tentamos fazer uma leitura seqüencial depois do último registro.
lda(<nome_arquivo>)
lda(<nome_arquivo>) / tamanho_de(<tipo_base_arquivo>)
Outros procedimentos
apagar(<nome_arquivo>)
Elimina do disco o arquivo representado pela expressão de cadeia <nome_arquivo>. O arquivo deve
estar fechado.
renomear(<nome_arquivo>,<novo_nome>)
Muda o nome do arquivo <nome_arquivo> pelo de <novo_nome>. O arquivo deve estar fechado.
Reserva espaço na memória para uma variável do tipo de dado do ponteiro e faz com que a variável dinâ-
mica aponte esta zona.
liberar(<variável_dinâmica>)
Libera o espaço de memória apontado pela variável dinâmica. Essa variável fica com um valor indeterminado.
Especificações da linguagem algorítmica UPSAM 2.0mm13
Instanciação 2 de classes
novo <nome_de construtor>([<argumentos_construtores>])
A declaração novo reserva espaço para um novo objeto da classe a que pertence o construtor e devolve
uma referência a um objeto dessa classe. <nome_de_construtor> terá o mesmo nome da classe a que
pertence. A ativação do construtor pode levar argumentos para a inicialização de atributos (veja mais adiante
no item de construtores). A instanciação pode ser efetuada em uma sentença de atribuição.
Construtores
construtor <nome_de_classe>[<lista_parâmetros_formais>])
//Declaração de variáveis locais
início
//Código do construtor
fim_construtor
Existe um construtor por omissão sem argumentos que ativamos mediante <nome_de_classe( )>. Como
os métodos, admite-se a sobrecarga dentro de construtores distinguindo-se os diferentes construtores por ordem,
número e/ou tipo de seus argumentos.
Uma vez que a missão de um construtor é inicializar uma instância de uma classe, a <lista_parâme-
tros_formais> somente inclui argumentos de entrada, pelo que se pode omitir a forma em que passam
os argumentos.
Criação de instâncias.
2
14mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
Destrutores
Não consideramos a existência de destrutores. As instâncias são consideradas destruídas quando é perdida uma
referência a elas (coleta de lixo).
A.8.2 Atributos
Declaração de atributos
A declaração dos atributos de uma classe será realizada dentro da sessão de declarações var dessa classe.
const [privado|público|protegido]<tipo_de_dado>:<nome>=<valor>
var
[privado|público|protegido] [estático]
<tipo_de_dado> : <nome_atributo> [ = <valor_inicial>]
...
Atributos constantes
O modificador const permite criar atributos constantes que não se modificarão durante o tempo de vida da
instância.
Especificações da linguagem algorítmica UPSAM 2.0mm15
A.8.3 Métodos
Declaração de métodos
A declaração de métodos será realizada dentro da classe depois da declaração de atributos sem indicar nenhuma
sessão especial.
Métodos estáticos
Um método que tenha o modificador estático ou estática não pertence a nenhuma instância da classe,
mas será comum a todas elas. Para fazer referência a um método de uma classe, será utilizado o nome da
classe seguido do nome do método (MinhaClasse.MeuMétodoEstático( )).
Sobrecarga de métodos
É permitida a sobrecarga de métodos, ou seja, a declaração de métodos com o mesmo nome mas com funcio-
nalidades diferentes. Para que na ativação se possa distinguir entre os métodos sobrecarregados, o número, a
ordem ou o tipo de seus argumentos deve mudar.
Ligação de métodos
A ligação de chamada de um método com o método correspondente sempre é feita de maneira dinâmica,
isto é, em tempo de execução, com o qual se permite a existência de polimorfismo.
3
É recomendado usar apenas um método e, portanto, os modificadores serão privados ou protegidos.
16mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
A.8.4 Herança
classe <classe_derivada> herda_de[<especificador_acesso>]<superclasse>
• Herda todos os métodos e atributos da superclasse acessíveis (atributos públicos e protegidos e métodos
públicos e protegidos) presentes somente na superclasse.
• Sobrescreve todos os métodos e atributos da superclasse acessíveis (atributos públicos e protegidos e
métodos públicos e protegidos) presentes em ambas as classes.
• Acrescenta todos os métodos e atributos presentes somente na classe derivada.
É possível acessar atributos da superclasse ou executar seus métodos mediante a palavra reservada super.
Aqueles métodos sem implementação poderiam ser declarados sem início nem fim de método.
Herança múltipla
classe<classe_derivada> herda_de [<especificador_
de_acesso>]<superclasse1> ...
[<especificador_de_acesso>]<superclasseN>
//membros
...
fim_classe
- Menos um (negativo)
- Subtração
& Concatenação
fl Operador de atribuição
Referência a uma variável apontada
* Multiplicação
. Qualificador de acesso a registros ou a membros de uma classe
. Separador de decimais
(continua)
Especificações da linguagem algorítmica UPSAM 2.0mm17
(continuação)
/ Divisão real
// Comentário de uma linha só. Ignora tudo aquilo aparece depois da linha
[ ] Índice de array
^ Exponencial
{ Início do comentário multilínea. Ignora tudo aquilo que aparece até achar o caractere
de final de comentário (})
} Fim de comentário multilínea. Ignora tudo aquilo que aparece a partir do caractere
de início do comentário ({)
’ Aspa simples, delimitador de dados de tipo caractere ou cadeia
” Aspa dupla, delimitador de dados de tipo caractere ou cadeia
+ Mais unário (positivo)
+ Soma
+ Concatenação
< Menor que
<= Menor que ou igual a
< > Diferente de
= Igual a
> Maior que
>= Maior que ou igual a
abrir Abre um arquivo
abs(x) Devolve o valor absoluto da expressão numérica x
abstrato Declaração de métodos abstratos (sem implementação)
aleatório( ) Devolve um número aleatório real maior que ou igual a 0 e menor que 1
algoritmo programa, início do pseudocódigo
somar Modo de abertura de um arquivo
arctan(x) Devolve o arco tangente de x
arquivo_d Declaração de arquivos diretos
arquivo_s Declaração de arquivos seqüenciais
array Declaração de arrays
apagar Apaga um arquivo do disco
cadeia string
cadeia(x) Converte a cadeia para o valor numérico de x
caractere char
caractere(x) Devolve o caractere que corresponde ao código ASCII de x
fechar Fecha um arquivo
fechar Fecha um ou mais arquivos abertos
classe Início da declaração de uma classe
código(car) Devolve o código ASCII do caractere car
const Início da sessão de declarações de constantes
const Declaração de atributos constantes na definição de classes
construtor Início da declaração de um construtor
cos(x) Devolve o cosseno de x
decremento Decremento de estruturas repetitivas desde
desde Início de estrutura repetitiva desde, for
devolver Indica o valor de retorno de uma função
div Divisão inteira
e Expoente
e Passagem de argumentos por valor
e/s Passagem de argumentos por referência
inteiro integer, int, long, byte etc.
inteiro(x) Devolve o primeiro valor inteiro menor que a expressão numérica x
(continua)
18mmFundamentos de programação – Algoritmos, estruturas de dados e objetos
(continuação)
então then
escrever Escreve uma ou mais expressões em dispositivo de saída (console, arquivo etc.)
escrita Modo de abertura de um arquivo
estático Declaração de atributos ou métodos de classe ou estáticos
exp(x) Devolve o valor ex
falso Falso, false
fda Fim de arquivo
fdl Fim de linha
fin Fim de algoritmo
fim_classe Final de declaração de uma classe
fim_construtor Fim da declaração de um construtor
fim_desde Fim de estrutura repetitiva desde
fim_função Fim da declaração de uma função
fim_enquanto Fim da estrutura repetitiva enquanto
fim_procedimento Final de um procedimento
fim_registro Fim da declaração de registro
fim_conforme Fim de estrutura seletiva múltipla
fim_se end if, fim de estrutura seletiva simples
função Início da declaração de uma função
fazer do
até to
até_que Fim da estrutura repetitiva repetir
herda_de Indica que uma classe derivada herda membros de uma superclasse
incremento Incremento em estruturas repetitivas desde
início início do código executável de um algoritmo, módulo, construtor etc.
instância Referência à instância atual da classe de onde aparece
lda Devolve o comprimento em bytes de um arquivo
leitura Modo de abertura de um arquivo
leitura/escritura Modo de abertura de um arquivo
ler Ler uma ou mais variáveis de um dispositivo de entrada (console, arquivo etc.)
liberar Libera o espaço atribuído a uma variável dinâmica
ln(x) Devolve o algoritmo neperiano de x
log10(x) Devolve o algoritmo em base 10 de x
comprimento(c) Devolve o número de caracteres da cadeia c
chamar_a Instrução de chamada a um procedimento
enquanto while, início da estrutura repetitiva enquanto
mod Módulo da divisão inteira
nada Tipo de retorno de métodos que não devolvem valores, void
não Not
novo Reserva espaço em memória para um objeto de uma classe e devolve uma referência
desse objeto
nulo Constante de ponteiro nulo
ou Operação lógica “ou” , “or”
posição(c,sc) Devolve a posição da primeira aparição da subcadeia sc na cadeia
privado Modificador de acesso privado a um atributo ou método
procedimento Início da declaração de um procedimento
protegido Modificador de acesso a um atributo ou método que permite o acesso aos membros
de sua classe e das classes filhas
público Modificador de acesso público a um atributo ou método
ponteiro_a Declaração de tipos de dados de alocação dinâmica
raiz2(x) Devolve a raiz quadrada de x
(continua)
Especificações da linguagem algorítmica UPSAM 2.0mm19
(continuação)