Superior de
Tecnologia
INTRODUÇÃO 4
ESTRUTURA DO PROGRAMA 5
Blocos 5
Comentários 5
Funções 5
TIPOS DE DADOS ELEMENTARES 6
VARIÁVEIS 7
Definição 7
Inicialização 7
Variáveis globais 7
Existência e visibilidade 7
CONSTANTES 8
OPERADORES E EXPRESSÕES 9
Operadores aritméticos 9
Operadores relacionais 9
Operadores Lógicos 9
Atribuição 9
Precedências 10
Funções associadas aos tipos de dados elementares 11
Expressões 11
Conversão entre tipos de dados elementares 11
Operador de coerção (cast) 12
ENTRADA E SAÍDA DE DADOS 13
Entrada de Dados 13
Saída de Dados Simples 13
Saída de Dados Formatada 14
ESTRUTURAS DE CONTROLO - SELECÇÃO 14
Instrução If 14
Instrução Switch 15
ESTRUTURAS DE CONTROLO - REPETIÇÃO 16
Instrução for 16
Instrução while 16
Instrução do-while 17
SUBPROGRAMAS 17
Funções e Procedimentos 17
Transmissão de Parâmetros 17
Retorno de Valores (funções) 18
Protótipos de Funções 19
TIPOS DE DADOS AVANÇADOS 19
Tipo enumerativo 19
Matrizes 19
Cadeias de caracteres 20
Registos 21
Ficheiros 22
Tipos de dados definidos pelo utilizador 22
ESTRUTURAS DE DADOS DINÂMICAS 23
Listas 23
Introdução
A linguagem C++ surge como uma extensão à linguagem C trazendo
!
consigo dois importantes conjuntos de novidades:
1
Este segundo conjunto de novidades não será tido em conta neste manual.
E M C + +
§Enquanto em Pascal é indiferente a utilização de maiúsculas e
minúsculas, em C++ existe essa distinção, sendo todas as palavras
Aa Maiúsculas diferenciadas
reservadas desta linguagem escritas em letras minúsculas.
; O Sinal ; termina instruções
f() Subprogramas só funções § O ponto-e-vírgula em Pascal é utilizado para separar instruções. Em
C++ esse caracter é utilizado para terminar instruções.
f() Funções ao mesmo nível
4
Estrutura do Programa
Blocos
Em Pascal, o conceito de bloco é essencial. Sintacticamente, o programa é
constituído por um cabeçalho, um bloco e um ponto final. O bloco contém,
por sua vez, diversas zonas incluindo, em particular, todas as funções e
procedimentos utilizados pelo programa, bem como o corpo (zona de
instruções) do programa principal.
Blocos de instruções Em Pascal todas as instruções encontram-se agrupadas dentro de uma outra
definidos entre os símbolos
{e}
forma de bloco: o bloco de instruções. Este bloco é delimitado pelas palavras
begin e end.. Tal como acontece em Pascal em C++ esta forma de bloco
existe utilizando-se neste caso como caracteres delimitadores as chavetas.
Este tipo de bloco pode também ser utilizado sempre que se precise de
colocar mais que uma instrução num local onde a sintaxe da linguagem
obrigue à utilização de apenas uma instrução (Ex.: nos ciclos for) e
denomina-se neste caso de instrução composta.
Pascal C++
Begin {
<instrução>; <instrução>;
<instruções> <instruções>;
end }
Comentários
Comentários Os comentários colocados dentro de um programa em C++ são
começados pela sequência
de símbolos // e válidos
introduzidos de forma diferente: são começados pela sequência // e levam o
apenas na linha corrente compilador a ignorar tudo o que apareça a seguir dentro da mesma linha.
Existe também a possibilidade de utilizar comentários muito semelhantes aos
usados em Pascal em que as chavetas que delimitam os comentários (Ex.:
{comentário...}) são substituídas em C++ pela sequência de símbolos
/* e */ (Ex.: /*comentário...*/). No entanto, esta segunda forma de
comentar é desaconselhada por ser mais difícil de gerir e poder originar erros
de programação.
Funções
Funções Todas as funções em C++ necessitam de ser declaradas antes de serem
com declaração obrigatória.
utilizadas para que o compilador reconheça o seu formato, algo semelhante à
utilização da declaração forward em Pascal.
5
.
Enquanto em Pascal as funções standard da linguagem são automaticamente
reconhecidas, em C++ é necessário fornecer a sua declaração. Isto é feito
habitualmente através de uma linha de código colocada no início do
programa. Esta linha leva o programa de compilação a incluir no programa o
texto de um ficheiro contendo a declaração das funções utilizadas (e.g.
#include <iostream.h> para incluir o ficheiro iostream.h com as
1
principais funções de entrada e saída do C++).
Pascal C++
Tipos de dados Os tipos de dados caracter e inteiro são semelhantes nas linguagens Pascal e
caracter e inteiro idênticos.
Tipo lógico implementado
C++.
através de inteiros. Tipo real
dividido em dois tipos: float O tipo real aparece em C++ sub-divido em dois tipos: float e double.
e double.
Estes tipos são idênticos permitindo guardar um valor real, a sua única
diferença é a precisão, tendo o tipo double uma precisão dupla em relação
ao tipo float. Deve-se acrescentar que é preferível usar o tipo double por
questões de compatibilidade com as funções matemáticas do C++.
O tipo lógico não é suportado directamente pelo C++, em vez disso utiliza-se
o valor inteiro 0 para representar o valor falso e um valor inteiro diferente de
0 (normalmente o –1 ou o 1) para representar o valor lógico verdadeiro.
6
Na tabela 2 apresenta-se uma correspondência entre os tipos de dados
Y
elementares de ambas as linguagens:
Pascal C++
Char char
1
Integer int
Real float/double
Boolean int
Variáveis
Definição
Variáveis definidas em As variáveis em C++ não possuem uma zona própria de definição como em
qualquer sítio do código
com possíbilidade de
Pascal podendo ser criadas em qualquer sítio do código. Como princípio
inicialização simultânea devem-se definir as variáveis o mais perto possível do local em que são
utilizadas.
Inicialização
Em C++ é possível ainda inicializar uma variável na altura da sua definição.
Isto é feito colocando após o nome de cada variável o sinal de igual seguido
do seu valor inicial (Ex.: int valor = 10; ).
Variáveis globais
Variáveis globais As variáveis que pertencem ao programa principal em Pascal consideram-se
definidas fora do corpo das
funções.
globais e podem ser reconhecidas em qualquer parte do programa. Uma vez
que em C++ as funções estão ao mesmo nível, as variáveis da função
principal (main) são locais a esta não podendo ser referidas a partir de outras
funções. Para que uma variável seja global em C++ esta deve ser declarada
fora do corpo das funções. Deve-se, contudo, evitar o uso das variáveis
globais.
Existência e visibilidade
As variáveis locais em C++, tal como em Pascal, só existem e são visíveis
dentro do bloco (conjunto de código delimitado por chavetas) em que estão
declaradas. De notar ainda que as variáveis em C++ só são reconhecidas
dentro dum bloco a partir do ponto em que foram declaradas.
7
Pascal C++
Constantes
É possível em Pascal e em C++ utilizar dois tipos de constantes: As
constantes definidas pelo utilizador associadas a um identificador e os valores
constantes. Na tabela 3 apresentam-se exemplos de alguns valores constantes
nas duas linguagens.
Pascal C++
-3.02 -3.02
0.15E-2 0.15E-2
23 23
$FF40 0xFF40
False 0
’a’ ’a’
’algum texto’ ”algum texto”
TABELA 2 Correspondência entre valores constantes
Constantes definidas
como variáveis utilizando o Para definir constantes através de um identificador em Pascal utiliza-se a
modificador const zona de definição de constantes referenciada pela palavra CONST. Em
C++ as constantes definem-se nos mesmos locais e da mesma forma que
as variáveis acrescentando-se antes do tipo a palavra reservada const.
Habitualmente as constantes definem-se no inicio do programa.
Pascal C++
8
Operadores e Expressões
Operadores aritméticos
Operadores Os operadores aritméticos aplicados aos valores reais são os mesmos em
semelhantes aos do Pascal
utilizando por vezes
ambas as linguagens. No que diz respeito à sua aplicação a valores inteiros
símbolos diferentes enquanto em Pascal se usam as palavras reservadas DIV e MOD para as
operações de divisão e resto em C++ usam-se os símbolos / e %. As
operações realizadas são equivalentes.
Operadores relacionais
Apenas as operações de verificação de igualdade e diferença adoptam
símbolos diferentes nas duas linguagens, sendo utilizado em C++ o conjunto
de símbolos == para a igualdade e o conjunto != para a diferença.
Operadores Lógicos
Embora as operações lógicas em ambas as linguagens sejam semelhantes os
símbolos adoptados são bastante diferentes. Em C++ usam-se os símbolos
&& para a operação lógica ‘e’, || para a operação ‘ou’ e ! para a negação.
Não existe equivalente em C++ para a operação lógica ‘ou exclusivo’ do
Pascal.
Atribuição
Atribuição é uma Atribuir um valor a uma variável é uma operação em C++ que devolve como
operação em C++ que
devolve o valor que foi
resultado o valor atribuído. O símbolo adoptado é o sinal de igual =. Em
atribuído Pascal a atribuição é por seu lado uma instrução única que usa o símbolo :=.
É necessário tomar cuidado com o facto de que o símbolo de comparação
entre dois valores em Pascal ser o mesmo que o de atribuição em C++ o que
pode levar a que este seja usado erradamente numa operação de comparação
como por exemplo: if(x=5) em vez de if(x==5) ). Este caso é
perfeitamente válido em C++, significa que o valor 5 é atribuído à variável x
devolvendo 5 como resultado da operação de atribuição. Uma vez que este
valor é diferente de 0 a condição do if é verdadeira e o código do if é
sempre executado.
Pascal C++
VAR N:Integer; {
BEGIN int n;
END. }
9
ø
A tabela seguinte sumariza as equivalência de operadores:
Pascal C++
+ +
- -
1
* *
/ e DIV /
MOD %
< <
<= <=
> >
>= >=
= ==
<> !=
not !
and &&
or ||
TABELA 3 Correspondência de operadores.
Precedências
Precedências com As regras de precedência entre operadores são diferentes em Pascal e C++.
regras diferentes
Sempre que surjam dúvidas devem-se utilizar os parênteses. A tabela 4
apresenta um resumo das regras de precedência numa e noutra linguagem.
Pascal C++
not !
* / div mod and * / %
+ - or + -
< <= > >= <> = < <= > >=
== !=
&&
||
=
TABELA 4 Precedência de operadores.
10
Funções associadas aos tipos de dados elementares
Funções básicas Existe um conjunto de funções pré-definidas no Pascal associadas aos tipos
associadas aos tipos de
dados elementares com
básicos. Na tabela 5 apresentam-se as funções do Pascal que se aplicam aos
equivalentes em C++ tipos básicos e produzem resultados do mesmo tipo. Note-se que em C++ é
necessário fornecer a declaração das funções antes de serem usadas. Isto é
conseguido incluindo o ficheiro de extensão .h onde se encontra a
declaração (Ex.: para a função fabs deve-se colocar no ficheiro uma linha
com #include <math.h> para fornecer a declaração da função).
Pascal C++
Tipo base Função Função Declaração em :
Sqr
Sqrt sqrt math.h
Real Sin sin math.h
Cos cos math.h
Arctan atan math.h
Ln log math.h
Exp exp math.h
Pred
Caracter
Succ
TABELA 5 Correspondência de funções aplicadas aos tipos básicos.
Expressões
Expressões definidas Enquanto em Pascal as operações e as expressões podem ser de qualquer um
com base apenas nos tipos
reais e inteiro
dos tipos elementares mencionados, em C++ as expressões só podem ser do
tipo inteiro ou do tipo real (float ou double). Isto significa na prática que
todas as expressões lógicas e do tipo caracter são efectuadas a partir do tipo
inteiro.
11
sempre do tipo lógico. Em Pascal é também possível misturar o tipo inteiro
com o tipo real numa expressão através da conversão automática do inteiro
num real obtendo-se como resultado um valor real. Outra forma de se
misturar tipos de dados diferentes é utilizar funções que operam sobre um
dado tipo de dados e produzem como resultado um tipo diferente.
Conversão de tipos Na tabela seguinte apresentam-se as funções que, em Pascal, operam sobre
utiliza o operador de coerção um tipo de dados e produzem um tipo diferente como resultado. Estas
(cast)
funções permitem obter a conversão entre tipos de dados. Em C++ existe
correspondência para apenas uma destas funções. Nesta linguagem a
conversão normal de tipos é realizada duma forma automática pelo
compilador ou utilizando um operador especial o operador de coerção.
Pascal C++
Função Conversão Função Declaração em :
TABELA 6 Correspondência de funções aplicadas aos tipos básicos. usadas na conversão de tipos.
* Esta função devolve um valor do tipo double que possui parte decimal nula
>
C++. Se for necessário o compilador converte automaticamente um dos
tipos (por exemplo uma operação envolvendo inteiros e reais (float ou double)
os inteiros são convertidos em reais antes da operação). Quando a conversão
resultar em perca de informação ou for duvidosa o compilador gera uma
mensagem de aviso. Para eliminar a mensagem, e de uma certa forma
1
informar o compilador que a conversão é válida e pretendida, o
programador deve realizar uma operação de coerção sobre o tipo que
pretende converter.
12
Pascal C++
VAR Ch:Character; {
I:Integer; char ch;
Val:Real; int i;
BEGIN ch = ’a’;
Ch := ’a’; i = int( ch ); // i=ch; era suficiente por
I := ord(Ch); // conversão automática
Writeln( ’Ascii de: ’, ch, ’ é ’, I ); cout << ”Ascii de: ” << ch << ” é: ” << i;
Writeln( ’Ascii: ’, i, ’ é ’, chr(I) ); cout << endl;
cout << ”Ascii: ” << i << ” é: ” << char(i);
Val := 3.124; cout << endl;
Write( ’Real: ’, val );
Writeln(’ para inteiro: ’, trunc(val) ); val = 3.124;
cout << ”Real: ” << val;
END. cout << ” para inteiro: ” << int(val);
// ou então int(floor(val))
cout << endl;
}
LISTAGEM 5 Conversão de tipos e operação de coerção
Entrada de Dados
Entrada de dados As instruções read e readln do Pascal são substituídas, em C++, por
feita através do operador de
extracção e da variável cin
uma única instrução: cin, que se comporta como o read.
Pascal C++
program exemplo(input,output); main()
var {
a : integer; int a;
b : real; float b;
c : char; char c;
13
Saída de Dados Formatada
Formatação da saída Em Pascal é possível definir na instrução write o número mínimo de
de dados utiliza manipuladores
caracteres com que um parâmetro deve aparecer escrito. Isto é conseguido
colocando a seguir ao parâmetro um sinal de dois pontos seguido de um
valor inteiro com o número de caracteres de escrita. Para o caso de números
reais é ainda possível definir o número de casas decimais juntando mais um
sinal de dois pontos e o total de casa decimais (Ex.: escrita de um real com 6
caracteres e duas casas decimais à Write( valor:6:2 );). Em C++ o
mesmo efeito é conseguido através de manipuladores que se incluem antes dos
parâmetros a serem escritos.
Pascal C++
VAR N:Integer; {
R: Real; int n;
double r;
BEGIN
N := -10; n = -10;
R := 23.126 r = 23.126;
Write( ‘Valor inteiro – ‘, N:5 ); cout << “Valor inteiro - “ << setw(5) << n;
Writeln; cout << endl;
Writeln ( ‘Valor real – ‘, R:8:2 ); cout << “Valor real – “ << setw(8)
<< setprecision(2) << r << endl;
Writeln(‘FIM’:5, ‘------‘) cout << setw(5) << “Fim” << “------“ << endl;
END. }
{ OUTPUT: } // OUTPUT:
{ Valor inteiro - -10 } // Valor inteiro - -10
{ Valor real - 23.12 } // Valor real - 23.12
{ Fim------ } // Fim------
LISTAGEM 7 Saída de dados formatada
NOTA
Instrução If
Instrução if com A instrução if do C++ requer que a condição lógica esteja entre parênteses,
condição lógica entre
parênteses e sem then
isto deve-se ao facto de não ser utilizada a palavra then que funciona como
marcador do fim da condição em Pascal.
14
A sintaxe é a seguinte:
[ else <instrução2>; ]
Pascal C++
LISTAGEM 8 Instrução if
Instrução Switch
Instrução switch A instrução case do Pascal possui como equivalente em C++ a instrução
substitui case do Pascal
switch. O argumento desta instrução em C++ deve ser fornecido entre
parênteses, e deve ser de um tipo inteiro ou compatível (tipos caracter ou
enumerativo). Também as diferentes possibilidades de selecção são
precedidas em C++ pela palavra reservada case podendo apenas existir um
valor de cada hipótese. Ainda outra diferença é que se for necessário
fornecer mais que uma instrução em C++ não é necessário colocar as
chavetas para as agrupar. A sintaxe é então a seguinte:
Pascal C++
15
NOTA
Instrução for
Instrução for com A instrução for do C++ é muito mais poderosa e versátil que a do Pascal..
formato e funcionalidade
diferentes em C++
Esta instrução possui entre parênteses uma lista de outras três instruções
fornecidas pelo programador. A primeira destas instruções é corrida apenas
uma vez quando se entra no for e é utilizada normalmente para iniciar uma
variável de controlo. A segunda instrução fornece um valor lógico e é corrida
sempre que se inicia a passagem no ciclo, se o valor lógico for falso o ciclo já
não é executado passando-se à instrução seguinte. A terceira e última
instrução é corrida sempre que se termina uma passagem pelo ciclo e utiliza-
se normalmente para alterar o valor da variável de controlo. A sintaxe da
instrução for é a seguinte:
Pascal C++
Instrução while
Instrução while A instrução while é idêntica em C++ e Pascal, necessitando apenas em C++
com a condição entre
parênteses e sem do
que a condição esteja entre parênteses não sendo então utilizada a palavra
do. A sintaxe é então a seguinte:
16
Pascal C++
Fact := 1; fact = 1;
N := 5; n = 5;
Termo := N; termo = n;
While termo > 1 do while (termo > 1)
Begin {
Fact := fact * termo; fact = fact * termo;
Termo := termo – 1; termo = termo – 1;
End }
Writeln(‘Factorial de ‘, N, ‘ = ‘, fact); cout << “Factorial de “ << n << “ = “
<< fact << endl;
Instrução do-while
Instrução do-while A instrução correspondente ao repeat-until do Pascal é a instrução do-while do
sustitui repeat-until do Pascal
C++. Esta instrução funciona de uma forma ligeiramente diferente,
enquanto em Pascal o ciclo termina quando uma determinada condição é
verdadeira em C++ o ciclo termina quando a condição é falsa, continuando
enquanto essa condição for verdadeira. A condição aparece em C++ entre
parênteses. A sintaxe desta instrução é:
Pascal C++
repeat do
write(Em que numero pensei?'); {
read(n); cout << "Em que numero pense?";
if n = numero then cin >> n;
writeln('Acertou!!') if (n==numero)
else if n < numero then cout << "Acertou!!" << endl;
writeln('Baixo...') else if (n < numero)
else cout << "Baixo..." << endl;
writeln('Alto...') else
until n=numero; cout << "Alto..." << endl;
}
while (n!=numero);
LISTAGEM 12 Instrução do-while
Subprogramas
Funções e Procedimentos
Conforme foi referido na secção inicial, o Pascal difere do C++ num aspecto
fundamental: enquanto o Pascal dispõe de dois tipos de subprogramas
(funções e procedimentos) o C++ apenas tem um tipo: as funções. Para
emular os procedimentos, em C++, pode recorrer-se a funções que
retornam o tipo void, uma vez que este tipo significa vazio é o mesmo que
retornar vazio ou seja não retornar nada.
Transmissão de Parâmetros
Tanto em Pascal como em C++ é possível passar parâmetros por valor e por
referência.
17
Parâmetros com Para o Pascal a diferenciação do método de transmissão de cada parâmetro é
passagem por referência são
obtidos colocando & antes
efectuada na definição da função (indicação ou não da palavra reservada
do nome da variável var) e não na sua invocação. Em C++ passa-se o mesmo utilizando-se na
lista de parâmetros da função o operador & antes do nome de cada variável a
passar por referência.
Pascal C++
PROGRAAM transmiteRef (input, output); #include <iostream.h>
VAR
a, b : real; void troca(double &x, double &y)
{
PROCEDURE troca (var x, y : real); double aux;
VAR aux : real; aux = x;
BEGIN x = y;
Aux := x; y = aux;
x := y }
y := aux
END; main()
{
BEGIN double a, b;
Write(‘Escreva dois reais:’); cout << "Escreva dois reais: ";
Readln(a, b); cin >> a >> b;
Writeln(a, b, ‘-- Após troca: ‘); cout << a << b << " -- Após troca:\n";
Troca(a, b); troca(a, b);
Write(a, b) cout << a << b;
END. }
LISTAGEM 13 Passagem de parâmetros para funções.
Retorno de Valores (funções)
O tipo do valor que é retornado por uma função em C++ aparece como
primeiro elemento antes do nome da função, ao contrário do Pascal em que
este aparece a seguir ao símbolo : após a lista de parâmetros da função.
Pascal C++
function fact (i : integer) : integer; int fact (int i)
begin {
if i<=1 then if (i<=1)
fact:=1 return 1;
else else
fact:=i*fact(i-1) return i*fact(i-1);
end; }
18
Protótipos de Funções
Um protótipo de uma função é uma declaração que, para além do nome da
função, especifica os tipos de dados dos parâmetros e do resultado
devolvido. É terminado pelo ponto-e-vírgula. O compilador de C++ utiliza
o protótipo para verificar a validade sintáctica das invocações da função. Esta
declaração é análoga à declaração forward, do Pascal.
,
O protótipo das função deve aparecer antes da chamada da função.
Normalmente, é boa prática colocar os protótipos das funções num ficheiro
separado com o mesmo nome do ficheiro fonte mas com
a extensão .h, o qual é inserido no início do ficheiro fonte utilizando a
directiva #include.
1
Por exemplo, se se definirem 10 funções, para além da função main, no
ficheiro prog.c, deve construir-se um ficheiro designado prog.h, cujo
conteúdo deverá ser uma lista dos 10 cabeçalhos (headers) das funções
definidas em prog.c, terminados por ponto-e-vírgula (;).
Tipo enumerativo
O tipo enumerativo encontra-se entre os tipos que existem igualmente em
C++, possuindo no entanto uma sintaxe diferente nesta linguagem:
19
Pascal
Pascal C++
C++
Pascal C++
Cadeias de caracteres
Tal como acontece em Pascal as matrizes de caracteres ou cadeias de
caracteres (strings) possuem um tratamento especial. Este tipo de matrizes
unidimensionais serve para guardar um pedaço de texto.
Strings definidas como Em C++ pode-se armazenar numa matriz de caracteres um pedaço de texto
matrizes de caracteres e
terminadas com o caracter
de qualquer dimensão que não exceda o tamanho da matriz. Para que seja
ASCII de valor zero possível determinar o fim do texto por convenção acrescenta-se um caracter
especial - o caracter ’\0’ (com o código ASCII 0), no fim do texto. Todas
as funções que trabalham com cadeias de caracteres em C++ adoptam esta
convenção. Assim sendo, uma matriz de caracteres deverá ter espaço para o
texto incluindo o caracter de terminação.
Outro aspecto importante das cadeias de caracteres em C++ é que sobre elas
não existem operações definidas. Assim todas as operações com cadeias de
caracteres passam pelo uso de funções. Na tabela seguinte fornece-se uma
pequena lista de funções que permitem efectuar as operações existentes em
Pascal sobre cadeias de caracteres do C++.
20
C++
operação função Declaração em :
C++
main()
{
char string[100];
char *string1 = "Inicio do texto";
char string2[20];
cout << "Dimensão da string1: " << strlen(string1); // Obter o numero de caracteres
strcpy( string2, "e fim do texto"); // Copiar para string2 o texto do segundo parâmetro
Registos
Estruturas Os registos são estruturas de dados que permitem agrupar elementos de
equivalentes ao tipo registo
do Pascal
diversos tipos, referenciados através de identificadores. O Equivalente aos
registos em Pascal são as estruturas de C++ cuja sintaxe é a seguinte:
Pascal C++
21
Ficheiros
Ficheiros Os ficheiros permitem armazenar informação sobre a forma de uma
implementados pelos tipos
ifstream e ofstream
sequência de elementos todos do mesmo tipo. Os dados são guardados de
forma permanente, em dispositivos de memória não volátil, como por
exemplo os discos rígidos. Ainda que seja possível manipular ficheiros de
elementos de qualquer tipo, o tipo de ficheiros mais comum é o de caracteres
(texto em formato ASCII). Em C++ não existe o tipo ficheiro, sendo
utilizado um conjunto de tipos especiais definidos pelo utilizador que são
pré-definidos na linguagem: Em particular os tipos ifstream para leitura
de dados e ofstream para escrita de dados.
Pascal C++
Nota:
Definição de tipos Os novos tipos de dados em C++ não possuem uma zona de definição
efectuada em qualquer lugar
do código utilizando a
própria como em Pascal, sendo declarados nos mesmos locais que as
palavra chave typedef variáveis. Normalmente os novos tipos são declarados num ficheiro
separado conjuntamente com a declaração de funções e variáveis externas.
Este ficheiro é depois incluído no programa usando a directiva #include.
Alternativamente os novos tipos são declarados no início do programa.
22
Pascal C++
array[ ] of <tipo> <tipo> [ ]
Record struct
File ofstream ou ifstream
( val1, val2, ...) enum { val1, val2, ...)
p^ *p
TABELA 8 Resumo dos tipos de dados avançados.
Æ
Estruturas de Dados Dinâmicas
Tanto o Pascal como o C++ proporcionam a possibilidade de definir e
utilizar estruturas de dados cuja topologia e número de elementos varia ao
longo da execução do programa. Por esse motivo, estas estruturas de dados
1
são designadas como estruturas de dados dinâmicas.
1214843 3.14159
Dada a variável do tipo pointer, é possível obter o valor por ela indicado
6
de forma indirecta, através do acesso à chamada variável referenciada pelo ponteiro.
A identificação da variável referenciada é obtida, em Pascal, acrescentando
no fim do nome do ponteiro um acento circunflexo (^), enquanto em C++ é
necessário acrescentar um asterisco (*) no início.
É preciso muito cuidado ao trabalhar com este tipo de dados uma vez que
através deles é possível escrever em qualquer sitio da memória incluindo
sobre o próprio programa ou sobre os seus dados.
Listas
Uma lista é uma estrutura de dados dinâmica, semelhante a um vector (array
unidimensional) com a diferença de o número dos seus elementos poder
aumentar ou diminuir durante a execução do programa, consoante as
necessidades.
23
Esta possibilidade oferece duas vantagens importantes:
Pascal C++
new new
dispose delete
nil NULL
TABELA 9 Entidades utilizadas na manipulação de ponteiros.
q 4 1 8 4 7
NULL (C++)
NIL (Pascal)
1
FIGURA2: Estrutura de dados criada pelos programas abaixo descritos
24
Pascal C++
25