Buscar

Programacao de C++ para Pascal

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
 
Algoritmos e Estruturas de Dados II IBm1022 
Departamento de Computação e Matemática 2º Semestre/2012 
Prof. Dr. José Augusto Baranauskas Notas de Aula 
 
De C++ para Pascal 
 
O objetivo desta nota de aula consiste em mostrar como converter/escrever um programa em Pascal, 
conhecendo-se a linguagem C++. A linguagem, que recebeu este nome em homenagem ao matemático 
Blaise Pascal, foi criada em 1970 pelo suíço Niklaus Wirth. Pascal foi criada para ensinar programação 
estruturada. 
 
Na tabela seguinte é fornecida a correspondência entre a sintaxe C++ e Pascal. 
 
 C++ Pascal 
Declaração de 
variáveis 
int i; 
float r; 
char c; 
string s; 
bool b; 
var i : integer; 
 r : real; 
 c : char; 
 s : string; 
 b : boolean; 
Declaração de 
constantes 
const int max = 100, 
 float r = 10.0; 
const max = 100; 
 r = 10.0 
Registros struct cliente 
{ int numero; 
 char nome[30]; 
 float saldo; 
}; 
type cliente = record 
 numero : integer; 
 nome : string[30]; 
 saldo : real; 
 end; 
Atribuição <variável> = <expressão>; <variável> := <expressão>; 
Bloco { 
 <comando1>; 
 <comando2>; 
 ... 
} 
begin 
 <comando1>; 
 <comando2>; 
 ... 
end 
Repetição while(<condição>) 
 <comando>; 
while <condição> do 
 <comando>; 
 
do 
{ <comando1>; 
 <comando2>; 
} while(<condição>); 
repeat 
 <comando1>; 
 <comando2> 
until <condição>; 
 
for(i=1; i<=10; i++) 
 <comando>; 
for i := 1 to 10 do 
 <comando>; 
 
for(i=10; i>=1; i--) 
 <comando>; 
for i := 10 downto 1 do 
 <comando>; 
Seleção if(<condição>) 
 <comando>; 
if <condição) then 
 <comando>; 
 
if(<condição>) 
 <comando1>; 
else 
 <comando2>; 
if <condição) then 
 <comando1> 
else 
 <comando2>; 
 
switch (<variável>) 
{ case <constante1>: 
 <comando1>; 
 break; 
 case <constante2>: 
 <comando2>; 
 <comando3>; 
 break; 
 default: 
 <comando4>; 
} 
 
case <variável> of 
 <constante1>: 
 <comando1>; 
 <constante2>: 
 begin 
 <comando2>; 
 <comando3>; 
 end; 
 else 
 <comando4>; 
end; 
 
 2
 
A seguir é mostrado um exemplo de um programa C++ e seu correspondente em Pascal. 
C++ Pascal 
#include <iostream> 
using namespace std; 
int main() 
{ int i,i2; 
 
 cout << ”Numero? ”; 
 cin >> i; 
 i2 = i*i; 
 cout << ”Quadrado de ” << i 
 << ” = ” << i2 << endl; 
 return 0; 
} 
program teste; 
var i,i2 : integer; 
begin 
 write('Numero? '); 
 readln(i); 
 i2 := sqr(i); 
 writeln('Quadrado de ',i, 
 ' = ',i2); 
end. 
 
A seguir é fornecido outro exemplo. 
C++ Pascal 
#include <iostream> 
using namespace std; 
//------------------------------------ 
int fatorial(int n) 
{ int i,p; 
 
 p = 1; 
 for(i=2; i<=n; i++) 
 p = p * i; 
 return p; 
} 
 
//------------------------------------ 
void divide(int a, int b, int &resto) 
{ 
 resto = a % b; 
} 
 
//------------------------------------ 
int main() 
{ int x,y,r; 
 cout << "Entre dois numeros: "; 
 cin >> x >> y; 
 cout << "Fatorial de " << x << "=" 
 << fatorial(x) << endl; 
 divide(x,y,r); 
 cout << "Resto da divisao de " << x 
 << " por " << y << '=' << r 
 << endl; 
 return 0; 
} 
program teste2; 
 
//------------------------------------ 
function fatorial(n : integer): integer; 
var i,p : integer; 
begin 
 p := 1; 
 for i := 2 to n do 
 p := p * i; 
 fatorial := p; 
end; 
 
//------------------------------------ 
procedure divide(a,b:integer; var resto 
: integer); 
begin 
 resto := a mod b; 
end; 
//------------------------------------ 
var x,y,r : integer; 
begin 
 writeln('Entre dois numeros: '); 
 readln(x,y); 
 writeln('Fatorial de ',x,'=', 
 fatorial(x)); 
 divide(x,y,r); 
 writeln('Resto da divisao de ',x, 
 ' por ',y,'=',r); 
end. 
 
Como diferenças especiais entre Pascal e C++, podemos mencionar que: 
• Pascal não diferencia entre minúsculas e maiúsculas. Assim, por exemplo, X representa o mesmo 
que x; 
• O abrir/fechar chaves em C++, ou seja, {e } tem seus correspondentes em Pascal: begin e end 
• Todo comando em Pascal termina com um ponto-e-vírgula. Entretanto, o ponto-e-vírgula é opcional 
antes de um end 
• No caso do comando if-then-else, nunca utilize ponto-e-vírgula antes do else 
• Os correspondentes de cin e cout são input e output, respectivamente; entretanto, há uma 
diferença que a entrada padrão em Pascal (input) nunca é fechada. Dessa forma, não é possível 
testar por fim-de-arquivo, ou seja, não tem funcionalidade o fragmento de código: 
while not eof(input) do 
 3
... 
• No caso de strings, os comandos read/readln lêem até o final de linha (de forma similar ao 
getline em C++) 
• Em Pascal, parâmetros passados por referência (por variável) devem ser precedidos pela palavra 
reservada var; isso se aplica a todos os tipos de dados, incluindo tanto os tipos primitivos como os 
estruturados; observe que este comportamento é diferente da linguagem C++, pois caso um vetor 
seja passado por valor, uma cópia do vetor será passada e não o vetor original 
• O comando do-while em C++ difere do comando repeat-until em Pascal: enquanto o primeiro 
continua o laço enquanto a condição for verdadeira, o segundo continua enquanto a condição for 
falsa, ou seja, quando a condição se tornar verdadeira o laço termina. 
C++ Pascal 
i = 1; 
do 
{ cout << i << endl; 
 i++; 
}while (i <= 10); 
i := 1; 
repeat 
 writeln(i); 
 i := i + 1; 
until i > 10; 
 
• Comentários (evite a forma // se quiser compatibilidade com Turbo Pascal/Delphi) 
C++ Pascal 
/* comentário 
 em diversas 
 Linhas */ 
(* comentário 
 em diversas 
 Linhas *) 
/* comentário 
 em diversas 
 linhas 
*/ 
{ comentário 
 em diversas 
 linhas 
} 
// comentário até o final de linha // comentário até o final de linha 
 
• Operador de Atribuição 
C++ Pascal 
= := 
 
• Operadores Aritméticos 
 C++ Pascal 
Soma + + 
Subtração - - 
Multiplicação * * 
Divisão (inteira) / (depende dos operandos) div 
Divisão (real) / (depende dos operandos) / 
Resto da divisão inteira % mod 
 
• Operadores Relacionais: 
C++ Pascal 
< < 
> > 
<= <= 
>= >= 
== = 
!= <> 
 
• Operadores Lógicos: 
C++ Pascal 
&& and 
|| or 
! not 
• Ponteiros 
 C++ Pascal 
 4
O que é apontado pelo ponteiro p (*p) p^ 
 
p->nome p^.nome 
 
Tipos 
• primitivos: 
o padrões: Integer, Boolean, Char, Real (tipos escalares) 
o criados pelo programador (a..b) 
• estruturados: criados pelo programador a partir de estruturas padrões: Array, Record, Set, etc. 
 
Type <nome1> = <tipo 1>; 
 <nome2> = <tipo 2>; 
 
Tipos primitivos criados pelo programador (enumera os valores que uma variável pode assumir) 
 
Type cor = (verde, azul, branco); 
 sexo = (fem, masc); 
 dia = (seg, ter, qua, qui, sex, sab, dom); 
 
Funções padrões: 
 succ(qua) = qui pred(ter) = seg 
 ord(fem) = 0 ord('A') = 65 
 ord('0') = 48 
 
Definição interna do Pascal: Type Boolean = (False, True); 
var d: dia; 
begin 
 for d := ter to sab do 
 case d of 
 seg: write('segunda'); 
 ter: write('terça'); 
 ... 
 dom: write('domingo'); 
 end; 
end. 
 
var d: dia; 
begin 
 for d := ter to sab do 
 case ord(d) of 
 0: write('segunda'); 
 1: write('terça'); 
 ... 
 7: write('domingo'); 
 end; 
end. 
Obs: Write(a), Writeln(a), Read(a), Readln(a) => a tem que ser de tipo primitivo e padrão. 
 
 
Tipos Intervalo (Subrange) 
 
Subconjuntos de um tipo escalar (excetoReal) já existente. 
var x : 1..40; 
 y : verde..azul; 
 z: 'A'..'J'; 
 posint: 0..Maxint 
Para verificação dos tipos subrange, colocar a diretiva {$R+} no início do programa. Há vários tipos de 
inteiros e reais; verifique a documentação do seu compilador para tipos adicionais. 
 
Tipos Estruturados 
 
Em Pascal: String, Array, Record, Set e File 
 
• String: cadeia de caracteres 
 type nome = string[15]; 
 linha = string[80]; 
 var n : nome; 
 l : linha; 
 Operações: Delete, Insert, Str, Val, Copy, Concat, Lenght, Pos 
 
• Array: estrutura homogênea (assim como string) 
 5
 type a = array[ T1 ] of T2 
 onde: T1 é o índice do tipo escalar, exceto Real; 
 T2 é o tipo base, podendo ser qualquer tipo de dado 
 Ex.1) type b = array[-1..8] of integer; 
 var b1 : b; 
 
 -1 0 1 2 3 4 5 6 7 8 
b1 
 
 
 Ex.2) var a : array['B'..'Z'] of char; 
 a['X'] := 'A'; 
 
 Ex.3) type dia = (dom,seg,ter,qua,qui,sex,sab); 
 var a : array[seg..sex] of string[10]; 
 a[ter] := 'ABCD'; 
 
• Record: estrutura heterogênea - mistura diferentes tipos de dados numa única estrutura. 
 type nome = record 
 c1 : T1; 
 c2 : T2; 
 ... 
 end; 
 onde c1, c2, ... são nomes de campos e T1, T2, ... são tipos de dados. 
 
 Ex.1) type data = record 
 dia : 1..31; 
 mes : (jan, fev, mar, ..., dez); 
 ano : 1900..2100; 
 end; 
 var p1, p2 : record 
 nome : string[20]; 
 adm, nasc : data; 
 salario : real; 
 depto : (vendas, compras, pessoal); 
 end; 
 
 Para ter acesso aos campos de um registro: 
<nome da variável> . <nome do campo> 
 
 Ex.2) p1.nome := 'Maria'; 
 p1.salario := 800.00; 
 p1.depto := pessoal; 
 p1.nasc.dia := 27; 
 p1.nasc.mes := fev; 
 p1.nasc.ano := 1960; 
 
• Set: conjunto de elementos de um mesmo tipo (escalar exceto Real). Os elementos do conjunto não são 
ordenados e nem aparecem repetidos. O número máximo de elementos em um conjunto é de 256. 
 type T = set of T1; 
 
 Ex.1) type diasdomes = set of 1..31; 
 letras = set of 'A'..'Z'; 
 caracteres = set of char; 
 coresprimarias = set of (vermelho, verde, azul); 
 var d, d1 : diasdomes; 
 l : letras; 
 c, c1 : coresprimarias; 
 d := [20,2,13]; 
 l := ['C', 'D','E']; 
 l := ['C'..'E']; 
 6
 c := [vermelho]; 
 c1 := [ ]; 
 d1 := [1, 5..10, 18..22]; 
 d1 := d1 - d; 
 
 Operadores: 
* intersecção 
<> desigualdade 
+ união 
>= 2o. operando contido no 1o. 
- diferença 
<= 1o operando contido no 2o. 
= igualdade 
in pertinência 
 
 Ex.2) if 3 in d1 then 
 write('3 pertence a d1'); 
 
Entrada e Saída 
• Read(lista-de-variáveis); 
• Readln(lista-de-variáveis); 
• Read(arquivo, lista-de-variáveis); 
• Readln(arquivo, lista-de-variáveis); 
• Write(lista-de-variáveis-contantes-expressões); 
• Writeln(lista-de-variáveis-contantes-expressões); 
• Write(arquivo,lista-de-variáveis-contantes-expressões); 
• Writeln(arquivo,lista-de-variáveis-contantes-expressões); 
 
Formatos: 
Inteiros: Write(I:5); _ _ _ _ _ 
Reais: Write(R:9:4); _ _ _ _ . _ _ _ _ 
 
Arquivos em Pascal 
 
Em Pascal, pode-se trabalhar com dois tipos de arquivos: arquivos texto e arquivos “tipados” (não-texto). Por 
exemplo: 
 var f : file of <tipo>; 
 t : text; 
 
Um arquivo declarado como “file of <tipo>” consiste numa sequência linear de componentes do tipo <tipo>, 
que pode ser qualquer tipo de dado da linguagem Pascal, exceto um arquivo. 
 
O tipo “text” significa um arquivo contendo caracteres organizados em linhas. Geralmente é utilizado para 
entrada e saída de dados de forma simples. 
Ex: type empregado = record 
 nome : string[30]; 
 salario : longint; 
 dep : (vendas, compras, pessoal); 
 end; 
 var entrada : text; 
 emp : file of empregado; 
 
 
Manipulação de arquivos 
Onde estiver escrito: 
 var f, deve-se substituir por uma variável de arquivo qualquer; 
 var f : text, deve-se substituir por uma variável de arquivo text; 
 var f : file, deve-se substituir por uma variável de arquivo não-text; 
 7
 
• Assign(var f; nome : string); 
Atribui um nome externo de arquivo (do sistema operacional) a uma variável do tipo arquivo. 
• Reset(var f ); 
Abre um arquivo existente, posicionando o ponteiro do arquivo no início. 
• Rewrite(var f); 
Cria e abre um novo arquivo. 
• Append(var f : text); 
Abre um arquivo existente, posicionando o ponteiro do arquivo no final, permitindo adicionar linhas. 
• Close(var f); 
Fecha um arquivo. Todo arquivo utilizado por um programa deve ser fechado com esse comando. 
• FileSize(var f : file) : Longint; 
Retorna o tamanho atual de um arquivo. 
• FilePos(var f : file) : Longint; 
Retorna a posição atual do ponteiro do arquivo. 
• Seek(var f : file; n : Longint); 
Move o ponteiro de um arquivo para a nova posição especificada em <n>. O primeiro registro é o de 
número zero. 
• Eof(var f) 
End-of-file (fim-de-arquivo). Retorna TRUE se o ponteiro do arquivo esta no final de arquivo ou 
FALSE, caso contrário. 
 
Operações permitidas conforme o tipo do arquivo 
 
Arquivos text Arquivos não-text 
Assign Assign 
Reset Reset 
Rewrite Rewrite 
Append Close 
Close FileSize 
Eof FilePos 
 Seek 
 Eof

Continue navegando