














Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Apostilas de Informática sobre a Linguagem Pascal, Introdução à programação, Definição de algoritmo, Algoritmo x programa, Linguagem de programação, A linguagem pascal, Estrutura de um programa pascal, O turbo pascal, Elementos da linguagem pascal.
Tipologia: Notas de estudo
1 / 22
Esta página não é visível na pré-visualização
Não perca as partes importantes!















Os nomes dos campos de um registro são semelhantes aos índices de uma array. Eles permitem acessar individualmente cada informação. Para tal, colocamos o nome da variável do tipo record ao qual o campo pertence, seguida de um ponto e finalmente do nome do campo.
Sintaxe
Exemplo type Reg_Aluno = record Nome : string (40); Matricula : integer ; Notas : array [1..3] of real ; end ;
VAR Aluno1 : Reg_Aluno; Aluno2 : Reg_Aluno; I : integer ; ...
{ Leitura dos campos de Aluno1 } read ( Aluno1.Nome, Aluno1.Matricula ); for I := 1 to 3 do read ( Aluno1.Notas[ I ] );
{ Exibição dos campos de Aluno2 } writeln ( Aluno2.Nome ); writeln ( Aluno2.Matricula ); for I := 1 to 3 do write ( Aluno2.Notas[ I ] ); ...
O comando with é utilizado para simplificar a referência aos campos de uma variável tipo
record , eliminando a necessidade de se colocar seu nome antes dos nomes dos campos.
Sintaxe
with Variável-Registro [,Variável-Registro]... do comando
with Variável-Registro [,Variável-Registro]... do begin comando; comando; ... end;
Exemplo
type Reg_Aluno = record Nome : string (40); Matricula : integer ; Notas : array [1..3] of real ; end ;
VAR Aluno1, Aluno2 : Reg_Aluno; I : integer ; ...
{ Leitura dos campos de Aluno1 } with Aluno1 do begin read ( Nome, Matricula ); for I := 1 to 3 do read ( Notas[ I ] ); end ; ...
Registros Aninhados
Algumas vezes temos necessidade de estruturar um registro de forma hierárquica, onde algum
campo seja também um registro.
type Reg_Data = record Dia : 1..31; Mes : 1..12; Ano : integer ; end ;
Reg_Aluno = record Nome : string (40); Matricula : integer ; Notas : array [1..3] of real ; Data_Nascimento : Reg_Data; end ;
var Aluno1, Aluno2 : Reg_Aluno;
Para referenciar os campos do registro procedemos da mesma forma já descrita:
Aluno1.Nome := ´Josias´; Aluno1.Data_Nascimento.Ano := 1970;
Aluno1.Data_Nascimento := Aluno2.Data_Nascimento;
Arrays de Registros
Muitas vezes encontramos um problema no qual temos que trabalhar com um conjunto de registros
de mesmo tipo. para tais problemas, podemos utilizar uma estrutura de dados que combina arrays e
records.
Por exemplo, suponhamos que temos uma classe com 50 alunos onde cada aluno é representado
pelo registro Reg_Aluno, assim, podemos criar um array de 50 elementos, onde cada elemento é do tipo
Reg_Aluno.
Exemplo
type Reg_Aluno = record Nome : string (40); Matricula : integer ; Notas : array [1..3] of real ; end ;
VetClasse = array [ 1..50 ] of Reg_Aluno;
var Classe : VetClasse; I, J : integer ;
Os registros dos 50 alunos poderiam ser lidos da seguinte forma:
for I := 1 to 50 do begin read ( Classe[ I ].Nome, Classe[ I ].Matricula ); for J := 1 to 3 do read ( Classe[ I ].Notas[ J ] ); end ;
Os registros dos 50 alunos poderiam ser exibidos da seguinte forma:
for I := 1 to 50 do begin with Classe[ I ] do begin write ( Nome, Matricula ); for J := 1 to 3 do read ( Notas[ J ] ); end ; end ;
program Relatorio_de_Vendas; { Programa que lê as vendas e as devoluções de um grupo de vendedores e imprime uma tabela mostrando para cada vendedor os dados lidos, a venda líquida e a comparação de sua venda líquida com a média das vendas. }
const NumVendedores = 20;
type Reg_Vendedor = record Nome : string (30); Vendas, Devolucoes, Liquido, Comparacao : integer ; end ; Var Vendedor : array [ 1..NumVendedores ] of Reg_Vendedor; Media, Soma, I : integer ;
BEGIN { Leitura dos Dados } for I := 1 to NumVendedores do with Vendedores[ I ] do readln ( Nome, Vendas, Devolucoes );
{ Calculo das Vendas Liquidas e da Media das Vendas } Soma := 0; for I := 1 to NumVendedores do with Vendedores[ I ] do begin Liquido := Vendas - Devolucoes; Soma := Soma + Liquido; end;
Media := Soma / NumVendedores; { Comparacao das vendas de cada vendedor com a media } for I := 1 to NumVendedores do
{ Impressão dos Resultados } clsrscr(); writeln (´ ´:25, ´Resumo das Vendas´); writeln; writeln (´ ´:10, ´Nome´, ´ ´:12, ´Vendas´, ´ ´:6, ´Devol´, ´ ´:4, ´Liquido´, ´ ´:5, ´DifMedia´ ); writeln; for I := 1 to NumVendedores do with Vendedores[ I ] do writeln ( Nome, Vendas:11, Devolucoes:11, Liquido:11, comparacao:11 );
END.
ESTRUTURA DE DADOS TIPO CONJUNTO
Um conjunto é uma coleção de objetos correlatos. Cada objeto de um conjunto é denominado membro ou elemento.
Exemplos de Conjuntos
Todos os números inteiros compreendidos entre 0 e 100 As letras do alfabeto As consoantes do alfabeto
Embora na matemática, não exista nenhuma restrição sobre quais objetos podem ser membros de um conjunto, em Pascal somente uma forma restrita de conjuntos pode ser usado. Assim, os conjuntos, em Pascal, só podem conter elementos de mesmo tipo, chamado tipo base , podendo este apenas ser um dos tipos escalares ordenados da linguagem.
A definição de um tipo conjunto é feita da seguinte forma :
[ packed ] set of tipo-base
onde, o tipo-base pode ser um tipo escalar enumerado, o identificador de um tipo escalar ou uma faixa.
Exemplo
type TDiasDaSemana = ( Dom, Seg, Ter, Qua, Qui, Sex, Sab );
TCaracters = set of char; TDiasDoMes = set of 1..31 ; TDiasUteis = set of SEG..SEX;
OBS.: O número máximo de elementos em um conjunto no Pascal é de 256, e, se o tipo-base for inteiro, os valores só podem estar no intervalo de 0 a 255.
Valores do tipo conjunto podem ser calculados através de expressões de conjuntos, as quais consistem de conjuntos, de variáveis do tipo conjunto, de construtores de conjuntos e operadores de conjuntos.
Os operadores envolvidos em uma expressão de conjunto são os seguintes:
Retorna o conjunto complementar do operando.
Exemplo
type TDias = set of ( Dom, Seg, Ter, Qua, Qui, Sex, Sab ); var DiasDeTrabalho, FimDeSemana : TDias; ... DiasDeTrabalho := [ Seg..Sex ]; FimDeSemana := not DiasDeTrabalho; { Dom e Sab }
Retorna o conjunto contendo os elementos comuns aos dois conjuntos.
Exemplo : [ 1, 3 ] * [ 3, 5, 7 ] => [ 3 ]
Retorna o conjunto contendo os elementos do primeiro conjunto quer não estão no segundo.
Exemplo : [ 1, 2, 3, 4 ] - [ 2, 4 ] => [ 1, 3 ]
Retorna o conjunto contendo todos os elementos existente nos dois conjuntos.
Exemplo : [ 1, 3 ] + [ 3, 5, 7 ] => [ 1, 3, 5, 7 ]
Retorna TRUE se os elementos do primeiro conjunto são os mesmos do segundo.
Exemplo : [ 1, 3 ] = [ 3, 1 ] => retorna TRUE
Retorna TRUE se os elementos do primeiro conjunto não são os mesmos do segundo.
Exemplo : [ 1, 3 ] <> [ 3, 1, 2 ] => retorna TRUE
Retorna TRUE se o primeiro conjunto está contido no segundo.
Exemplo : [ 1, 2, 3 ] <= [ 3, 1, 2, 4, 5 ] => retorna TRUE
Retorna TRUE se o primeiro conjunto contém o segundo.
Exemplo : [ 3, 1, 2, 4, 5 ] >= [ 1, 2, 3 ] => retorna TRUE
Retorna TRUE se o primeiro operando é elemento do conjunto.
Exemplo : 3 in [ 1, 2, 3 ] => retorna TRUE
Exemplo 1
Expressões de conjuntos são úteis para tornar mais claros testes complicados. Por exemplo :
if ( Ch = ´A´ ) or ( Ch = ´E´ ) or ( Ch = ´I´ ) or ( Ch = ´O´ ) or ( Ch = ´U´ ) then
pode ser expresso mais facilmente da seguinte maneira :
if Ch in [ ´A´, ´E´, ´I´, ´O´, ´U´ ] then
Outro exemplo seria :
if ( Valor >= 0 ) and ( Valor <= 9 ) then
fica melhor se for expresso como :
if Valor in [ 0..9 ] then
SUBPROGRAMAS
Até agora temos desenvolvido programas que englobam a lógica completa do algoritmo para a solução de um determinado problema. É comum, em programação, decompor a lógica de programas complexos em programas menores e, depois, juntá-los para compor o programa final. Essa técnica de programação é denominada programação modular.
A programação modular consiste num método para facilitar a construção de grandes programas, através de sua divisão em pequenas etapas, que são os módulos ou subprogramas e para possibilitar o reaproveitamento de código, já que podemos utilizar um módulo quantas vezes for necessário, eliminando assim a necessidade de escrever o mesmo código do programa em situações repetitivas. Outra importância da modularização é que ela permite que diferentes programadores trabalhem simultaneamente na solução de um mesmo problema, através da codificação separada dos diferentes módulos.
A modularização, em Pascal, pode ser feita através de procedimentos ( procedures ) e funções ( functions ). Isso é feito associando-se um nome a uma seqüência de comandos através do que chamamos Declaração do Procedimento ou da Função. Pode-se, então, usar o nome do procedimento ou da função dentro do corpo do programa, sempre que desejarmos que o seu bloco de comandos seja executado, isso é o que chamamos de Chamada do Procedimento ou da Função.
Um procedimento é uma estrutura de programa autônoma que está incluída num programa em Pascal. Nele podem ser colocados todos os elementos da linguagem Pascal, como se fosse um programa completo, isso é feito através de sua declaração.
Um procedimento pode ser referido escrevendo simplesmente o seu nome seguido de um lista opcional de parâmetros. Quando um procedimento é referenciado, o controle de execução do programa é automaticamente transferido para o início do procedimento. As instruções de execução dentro do procedimento são então executadas, tendo em conta quaisquer declarações especiais que sejam únicas para o procedimento. Quando todas as instruções de execução tiverem sido executadas, o controle passa automaticamente para a instrução imediatamente a seguir à da chamada do procedimento.
procedure Nome_Do_Procedimento( Lista-parametros ); [ declaração de rótulos ] [ declaração de constantes ] { Declarações Locais } [ declaração de tipos ] [ declaração de variáveis ] [ declaração de subprogramas ]
begin
comando [ ; comando] ... { Corpo do Procedimento }
end;
Os parâmetros são uma forma dos procedimentos trocarem informações com os programas. Para ilustrar melhor o uso de parâmetros, considere um programa para solicitar as notas obtidas por um aluno com o respectivo peso, para depois calcular a média aritmética ponderada. O programa deveria começar por :
writeln( ´Primeira Nota´); writeln( ´Digite a Nota : ´); readln( Nota1 ); writeln( ´Digite o Peso da Nota : ´); readln( Peso1 );
A seguir o programa deverá solicitar a segunda nota como indicado abaixo :
writeln( ´Segunda Nota´); writeln( ´Digite a Nota : ´); readln( Nota2 ); writeln( ´Digite o Peso da Nota : ´); readln( Peso2 );
Note que as quatro últimas linhas dos dois trechos do programa executam a mesma tarefa: eles apresentam uma mensagem, depois lêem um número, a seguir apresentam um segunda mensagem e finalmente lêem um segundo número. Visto que são tarefas repetitivas, faz sentido pensarmos em declararmos essas linhas como um procedimento. Existe, no entanto, um problema : na primeira parte nós usamos as variáveis Nota1 e Peso1 e na segunda parte nós usamos as variáveis Nota2 e Peso2.
O problema é resolvido em Pascal com o uso de variáveis especiais chamadas de parâmetros formais. Esses parâmetros são, na realidade, posições que serão preenchidas com os endereços das variáveis quando o procedimento for chamado pelo programa.
O procedimento LerDadosNota usado no programa a seguir, usa os parâmetros formais Nota e Peso para fazer aquilo que desejamos:
program MediaGlobal; var Nota1, Nota2, Nota3, Peso1, Peso2, Peso3, Media : real;
{ Procedimento para solicitar os dados da Nota do aluno ao usuário } procedure LerDadosNota( var Nota : real; var Peso : real ); begin writeln( ´Digite a Nota : ´); readln( Nota ); writeln( ´Digite o Peso da Nota : ´); readln( Peso ); end;
{ PROGRAMA PRINCIPAL } BEGIN writeln( ´Primeira Nota´); LerDadosNota( Nota1, Peso1 );
writeln( ´Segunda Nota´); LerDadosNota( Nota2, Peso2 );
writeln( ´Terceira Nota´); LerDadosNota( Nota3, Peso3 );
Media := ( ( Nota1 * Peso1 ) + ( Nota2 * Peso2 ) + ( Nota3 * Peso3 ) ) / ( Peso1 + Peso2 + Peso3 );
writeln( ´Media Global = ´, Media:5:2 ); END.
A forma como os parâmetros foram passados vista no item anterior é uma das várias formas de passegem de parâmetros, denominada Passagem por Referência ( ou Passagem por Variável ). Os parâmetros passados dessa forma refletem todas as modificações que neles forem feitas quando for retornado ao programa. Assim, você pode usar esse tipo de parâmetro para fornecer valores aos procedimentos como para retornar valores ao programa. Por consequência, somente variáveis podem ser passadas por esse mecanismo; expressões e constantes não são permitidas.
Para um melhor entendimento, considere o seguinte cabeçalho de um procedimento:
procedure Total( var N : integer; var P, B : real );
Os parâmetros formais N, P e B, por terem sido definidos como parâmetros de referência ( possui a palavra reservada var na frente da lista ), na realidade não são verdadeiramente variáveis e, por isso, não tem nenhuma memória alocada a elas.
Agora considere a seguinte chamada
Definição Declaração Aplicações Funções recursivas
Units Predefinidas Estrutura de uma Unit