38
Bibliografia Bases de Programação da Plátano Editora, Bases de Programação da Porto Editora, Cardoso, Vasco, Fundamental do Turbo Pascal 6 e 7. Lisboa:FCA,1997 Guerreiro, Pedro,Pascal, Técnicas de Programação- 3ª edição, Europa América Byron S.Gottfried, Programação em Pascal, MC Graw-Hill Internet

Manual PSInf - Modulo 5

Embed Size (px)

Citation preview

Page 1: Manual PSInf - Modulo 5

Bibliografia

• Bases de Programação da Plátano Editora,

• Bases de Programação da Porto Editora,

• Cardoso, Vasco, Fundamental do Turbo Pascal 6 e 7. Lisboa:FCA,1997

• Guerreiro, Pedro,Pascal, Técnicas de Programação- 3ª edição, Europa América

• Byron S.Gottfried, Programação em Pascal, MC Graw-Hill

• Internet

Page 2: Manual PSInf - Modulo 5

Módulo V: Estrutura de Dados Compostas

Módulo VI : Estrutura de Dados Dinâmicas

Módulo VII: Tratamento de Ficheiros

Módulo VIII: Conceitos Avançados de Programação

Módulo IX: Introdução à Programação Orientada a Objectos

Módulo X: Programação Orientada a Objectos

Page 3: Manual PSInf - Modulo 5
Page 4: Manual PSInf - Modulo 5

Dados Estruturados

• ArrayUm array é um tipo estruturado que pode agrupar numa mesma variável um conjunto de valores todos do mesmo tipo.

• Arrays Unidimensionais ou vectores

• Arrays Multidimensionais

• Arrays Unidimensionais – Conjunto de elementos representados por um identificador e um índice; o índice varia entre um limite inferior e um limite superior em correspondência com o número de elementos do conjunto

Page 5: Manual PSInf - Modulo 5

Dados Estruturados

10

12

8

9

15

A1

A3

A4

A2

A5

A5A3A2 A4 A1

10 12 8 15 9

Representação de um array unidimensional, ou vector com 5 elementos

Page 6: Manual PSInf - Modulo 5

• Um array pode ser declarado :

a) Como tipo – TYPE – e, em seguida, serem definidas variáveis com base nesse mesmo tipo;

b) Directamente como uma variável.

Exemplo: a) Como tipo – TYPE

Type <identificador de tipo> = Array [limites] of <tipo de Dados>

Type gastosmes = Array [1..12] of integer;

Com base neste tipo, podemos ter uma ou mais variáveis deste tipo

Exemplo: Var gastossector1, gastos2,g3: gastosmes;

Dados Estruturados

Page 7: Manual PSInf - Modulo 5

b) Declaração de um Array Directamente como uma variável.

Var <identificador > : Array [limites] of <tipo de Dados>

– Var gastosmes : Array [1..12] of integer;

• Var- indica que se pretende definir uma variável;

• Gastosmes – é o identificador ou nome atribuído a essa variável;

• : array – indica que a variável é do tipo array;

• [1..12] – define o número de elementos da variável e ao mesmo tempo o intervalo dos seus índices, neste caso entre 1 e 12;

• Of integer- indica qual o tipo-base dos elementos do array

Dados Estruturados

Page 8: Manual PSInf - Modulo 5

• Depois de declarada ou definida uma variável do tipo array, a designação individual de cada um dos seus elementos, faz-se:

– Escrevendo o identificador da variável, seguido do seu índice entre parêntesis rectos

De um modo geral, cada elemento desta variável de tipo array designa-se por:

gastosmes [i]

Em que [i] representa a posição do elemento no conjunto que compõem o array, ou seja, neste caso, o número do mês que se pretende designar.

Exemplo:

Identificador Gastos do mêsGastosmes[1] Janeiro

Gastosmes[2] Fevereiro

…………..

Gastosmes[12] Dezembro

Dados Estruturados

Page 9: Manual PSInf - Modulo 5

• Nota:

– Não confundir os valores assumidos pelos índices de um array com os valores assumidos pela própria variável:

• Exemplo:

– O mês de Março é representado pelo índice 3 -gastosmes[3];

– O valor assumido pela variável no índice 3, ou seja, os gastos do mês de Março, será aquele que lhe for atribuído, por uma instrução de atribuição ou de input.

Dados Estruturados

Page 10: Manual PSInf - Modulo 5

• Utilização de variáveis do tipo Array com instruções básicas– (leitura, atribuição, escrita)

Exemplos:Read (gastosmes[1]);

Faz a leitura dos gastos do mês índice1, ou seja, Janeiro

gastosmes[4]:=25350; Faz com que o elemento índice 4 do array (mês Abril) seja atribuído com o valor de

25350;

Write(‘Gastos do mês de Dezembro: ‘, gastosmes[12]);

Escreve a mensagem da string indicada seguida do valor dos gastos do mês de Dezembro

Dados Estruturados

Page 11: Manual PSInf - Modulo 5

• Exercício:

– Elabore um programa para calcular o total anual dos gastos de um departamento, sendo dados (introduzidos pelo utilizador) os valores dos respectivos gastos mensais; no mesmo programa pretendemos calcular também a média dos gastos mensais.

– Resolução

Dados Estruturados

Page 12: Manual PSInf - Modulo 5

• program meses;• var m:integer;• totalano, mediames: real;• gastosmes: array [1..12] of real;• begin• totalano:=0;• For m:=1 to 12 do• begin• write('introduza o gastomes[' ,m,’]);• read(gastosmes[m]);• totalano:=totalano+ gastosmes[m];

• end;• mediames:= totalano/12;• writeln('O total dos gastos anuais foi:', totalano:2:2 );• writeln('a media dos gastos do mes e:', mediames:2:2);• readln;• end.

Dados Estruturados

Page 13: Manual PSInf - Modulo 5

• Explicação do Exercício:

– A variável m é utilizada como contador do ciclo For e, dentro desse ciclo, é utilizada também para indicar o número de ordem de cada mês.

– A variável gastosmes é definida como um array de 12 elementos do tipo-base real.

• Esta variável do tipo array vai ser utilizada no ciclo For em duas situações distintas:

– Numa instrução de leitura, para receber a entrada do utilizador em cada iteração do ciclo; é evidente que, de cada vez que o contador do ciclo incrementa uma unidade, o índice do array também é incrementado, passando assim a representar cada um dos 12 meses do ano;

– Numa instrução de atribuição feita com a variável totalano, que efectua o somatório ou o total dos gastos nos 12 meses, mediante a técnica já conhecida: inicializa-se a variável a zero antes de começar o ciclo e dentro do ciclo, essa mesma variável vai acumulando os sucessivos valores introduzidos como gastos de cada mês.

Uma vez calculado o somatório ou total dos gastos nos 12 meses, é só calcular a média: basta dividir o total encontrado pelo numero de valores introduzidos, que neste caso é 12.

Dados Estruturados

Page 14: Manual PSInf - Modulo 5

• Elabore um Algoritmo que permita inserir 15 valores e depois apresente todos os números inseridos superiores a 10. Não necessita utilizar procedimentos.

• Grave o programa com o nome numeros_vector.PAS.

• Resolução

Dados Estruturados

Page 15: Manual PSInf - Modulo 5

• Program numeros_vector;• var i:integer;• inicio:array [1..15] of integer;• begin• for i:=1 to 15 do• Begin• writeln(' digite os numeros');• readln (inicio[i]);• end;• For i:=1 to 15 do• begin• If inicio[i]>10 then• writeln (' inicio [',i,']=',inicio [i]);• end;• readln;• end.

Dados Estruturados

Page 16: Manual PSInf - Modulo 5
Page 17: Manual PSInf - Modulo 5

• Elabore um Algoritmo que permita apresentar a soma de dois vectores, com 5 índices de posição. Apresente o resultado.

• Utilize os seguintes procedimentos:• Inserir;• Calcular.

• Grave o programa com o nome soma_vectores.PAS

• Resolução

Dados Estruturados

Page 18: Manual PSInf - Modulo 5

• Elabore um algoritmo que permita inserir a notas de PsinF de dez alunos, deve ser apresentada a média das notas obtidas e ainda o número de alunos com nota superior à média.

• Este algoritmo deve ser feito com base nos seguintes procedimentos:

• - Procedimento Inserir;• - Procedimento Somatorio;• - Procedimento Verificar_Superior;• - Procedimento Sair.• Grave o programa com o nome notas_alunos_vector_.PAS.

• Resolução

Dados Estruturados

Page 19: Manual PSInf - Modulo 5

• Programa com o nome notas_alunos_vector_.PAS.• Program notas_alunos_vector;• type• notas=array[1..10] of integer;• var• nota:notas;• somanotas, cont, i:integer;• media:real;• op:char;• Procedure Inserir;• begin• for i:=1 to 10 do• begin• write (' Introduza a nota');• read (nota[i]);• end;• end;• Procedure somatorio;• begin• somanotas:=0;• For i:=1 to 10 do• begin• somanotas:=somanotas + nota[i];• media:=somanotas/10;• writeln (' A média das notas, : ', media:8:2);• end;• end;• Procedure verificarsuperior;• begin• cont:=0;• for i:=1 to 10 do• begin• if (nota[i]>media)then• cont:=cont+1;• writeln(' Existem', cont,'alunos com a nota superior a:', media:8:2);• end;• end;• Procedure continuar;• begin• writeln(' Quer continuar?');• read (op);• end;• begin• repeat• inserir;• somatorio;• verificarsuperior;• continuar;• until (op='n')• end.

Page 20: Manual PSInf - Modulo 5

Array ou matriz bidimensional• É possível definir um array de arrays – arrays

multidimensionais

• Podemos imaginar um armário, com x fiadas de gavetas na horizontal e y colunas na vertical. Dentro de cada gaveta estará, por exemplo, uma determinada quantia de documentos, dinheiro ou outra coisa qualquer.

• Se quisermos referir-nos a uma determinada gaveta do armário, podemos fazê-lo indicando o nº da fila e o da coluna em que a gaveta se encontra; por exemplo: a gaveta da fila 3, coluna 2, seria representada por:

– Gaveta[3,2]

– Gaveta[i,j] Coluna

Fila ou linha

Page 21: Manual PSInf - Modulo 5

• Var gaveta: array [1..4] of array [1..3] of integer;

Ou

• Var gaveta: array [1..4,1..3] of integer;

Array ou matriz bidimensional

Page 22: Manual PSInf - Modulo 5

• Para pedir a introdução de todos os valores da variável gaveta, a melhor técnica é a de dois ciclos encaixados

• Exemplo:– For i:=1 to 4 do

• For j:=1 to 3 do– Readln (gaveta [i,j])

Array ou matriz bidimensional

Page 23: Manual PSInf - Modulo 5

• Exercício: – Programa para resolver a seguinte situação:

• Pretende-se registar as notas de um grupo de alunos, num conjunto de disciplinas comuns a todos eles;

• Fazer média por aluno;• Fazer médias por disciplina

• Resolução

Array ou matriz bidimensional

Page 24: Manual PSInf - Modulo 5

• program notas;• const nalunos=3; ndiscip=2;• var i,j: integer;• nota:array[1..nalunos,1..ndiscip] of real;• soma,media:real;• Begin

• for i:=1 to nalunos do• begin• writeln(' introduza o ',i,' aluno');• for j:=1 to ndiscip do• begin• writeln('introduza a nota da ',j,' disciplina');• readln(nota[i,j])• end;• end;

• for i:=1 to nalunos do• begin• Soma:=0;• for j:=1 to ndiscip do• soma:= soma+nota[i,j];• media:= soma/ndiscip;• writeln('media do aluno ',i, ' e: ', media:5:1);• end;• for j:=1 to ndiscip do• begin• Soma:=0;• for i:=1 to nalunos do• soma:= soma+nota[i,j];• media:= soma/nalunos;• writeln('media da disciplina ',j, ' e: ', media:5:1);

• end;• readln;• end.

• Resolução

Page 25: Manual PSInf - Modulo 5

Array ou matriz bidimensional

Page 26: Manual PSInf - Modulo 5

Exemplo de um array ou matriz bidimensional de 4 por 3

A[1,1] A[1,2] A[1,3] A[1,4]

A[2,1] A[2,2] A[2,3] A[2,4]

A[3,1] A[3,2] A[3,3] A[3,4]

150 110 120 160

90 110115200

55 80 125150

Lin

ha

sL

inh

as

Lin

ha

s

Colunas Colunas Colunas Colunas

Page 27: Manual PSInf - Modulo 5

Records ou Registos:

Os Registos são um outro tipo de dados estruturados que permitem agrupar dados de vários tipos diferentes, sob a forma de campos:Exemplo de Informações sobre Pessoas:

Nome; Morada;

Data de Nascimento; Telefone;

Idade; Estado Civil;

Etc;Os registos podem ser utilizados com as entidades mais diversificadas que se possa imaginar: artigos de uma empresa, livros de uma Biblioteca, dados estatísticos sobre países ou regiões geográficas, etc.

…………………

Page 28: Manual PSInf - Modulo 5

Records ou Registos:

• Tal como se passa com outros tipos de dados em Pascal, a definição de um registo pode ser feita directamente como variável, ou como tipo.

• A) definição de um registo directamente como variável:

Var pessoa: Record Nome: string[10]; Idade: integer; Altura, peso: real; End;

• Formato: Var <identificador>: Record <lista de campos> End

Page 29: Manual PSInf - Modulo 5

Records ou Registos

• A) definição de um registo como tipo:

type pessoa =Record Nome: string[10];

Idade: integer;

Altura, peso: real;

End;

Page 30: Manual PSInf - Modulo 5

Records ou Registos:

Formato: Type <identificador> = Record <lista de campos> End

• Um record definido como uma variável funciona apenas para umaÚnica variável;

• Se definirmos um record como tipo, podemos, em seguida, definir Várias variáveis desse mesmo tipo.

Exemplo:

Var p1,p2,aluno,desportista,empregado: pessoa;

Page 31: Manual PSInf - Modulo 5

Records ou Registos:Designação e acesso aos campos de um registo:

Exemplo:

type pessoa =Record Nome: string[10]; Idade: integer; Altura, peso: real; End;Var aluno, p: pessoa;

As variáveis aluno e p são registos que têm os mesmos campos definidos no tipo pessoa

Page 32: Manual PSInf - Modulo 5

Records ou Registos:Suponhamos que queríamos fazer uma atribuição de valores aos campos das variáveis aluno e p.

Há 2 maneiras possíveis de o fazer:

a) Designação conjunta do identificador do record e do campo visado;b) Por intermédio do operador With

a) <Identificador do registo>. <Identificador do campo>

Exemplo: Se quisermos atribuir ao registo aluno o nome de “Isabel Gonçalves”

seria: aluno.nome := ‘Isabel Gonçalves’

Page 33: Manual PSInf - Modulo 5

Records ou Registos:Exemplo1:

Se quisermos fazer a leitura do valor do campo idade do mesmo registo e, em seguida, a escrita desse mesmo dado as instruções poderiam ser:

Write (‘idade do aluno:’, aluno.idade);Read (aluno.idade);

Page 34: Manual PSInf - Modulo 5

B) Por intermédio do operador With

Records ou Registos:

O operador With permite indicar uma vez o identificador do registo e em seguida trabalhar apenas com os identificadores dos campos

Exemplo:With aluno doBegin

Writeln (‘ Introduza os dados relativos ao aluno ’ );Writeln (‘ Nome: ‘); Readln (Nome);Writeln (‘ Idade: ‘); Readln (Idade);Writeln (‘ Altura: ‘); Readln (Altura);Writeln (‘ Peso: ‘); Readln (Peso);

End;

Page 35: Manual PSInf - Modulo 5

Records ou Registos:

Exemplo de um

programa com registos:

Program Registos;

type pessoa = record nome: string[10]; idade: integer; end;Var p,q:pessoa;Begin Writeln('Dados relativos a primeira pessoa'); Writeln('Nome: '); Readln(p.nome); Writeln('Idade: '); Readln(p.idade); Writeln('Dados relativos à segunda pessoa'); Writeln('Nome: '); Readln(q.nome); Writeln('Idade: '); Readln(q.idade); if p.idade >q.idade then Writeln ('O aluno mais velho e ', p.nome) else if q.idade >p.idade then Writeln ('O aluno mais velho e ', q.nome) else Writeln(' Os alunos têm a mesma idade'); Readln;End.

Programa agenda

Page 36: Manual PSInf - Modulo 5

Program arrayofrecords;Type ficha = record sexo:char; idade: integer; end;Var pessoa: ficha; grupo :array [1..6]of ficha; i, masc,femin,idadesmasc,idadesfemin:integer; mediamasc,mediafemin: real;Begin For i:=1 to 6 do {introdução dos dados por elemento} begin Writeln('Sexo - m/f: '); Readln(pessoa.sexo); Writeln('Idade:'); Readln(pessoa.idade); grupo[i]:= pessoa; end; masc:=0;femin:=0; idadesmasc:=0;idadesfemin:=0; For i:=1 to 6 do {soma das idades por sexos} begin pessoa:=grupo [i]; if pessoa.sexo = 'm' then begin masc:=masc+1; idadesmasc:=idadesmasc+pessoa.idade; end; if pessoa.sexo= 'f' then begin femin:= femin+1; idadesfemin:=idadesfemin+pessoa.idade end; end; mediamasc:=(idadesmasc/masc); mediafemin:=(idadesfemin/femin); Writeln(' Media de idades sexo masculino', mediamasc:8:1); Writeln(' Media de idades sexo femenino', mediafemin:8:1); readln end.

Page 37: Manual PSInf - Modulo 5

• Program agenda;• type• palavra = string [10];• tpessoa = record• nome: palavra;• morada: palavra;• telefone: palavra;• end;• Tlista= array [1..10]of Tpessoa;• Var• pessoa:tpessoa;• lista_agenda:tlista;• cont:integer;• Begin• for cont:=1 to 10 do• Begin• Writeln(' Nome ');• readln(pessoa.nome);• Writeln(' Morada ');• readln(pessoa.morada);• Writeln(' Telefone ');• readln(pessoa.telefone);• lista_agenda[cont]:= pessoa;• end;• Writeln('Lista dos nomes');• for cont:=1 to 10 do• begin• pessoa:=lista_agenda[cont];• writeln(pessoa.nome);• end;• end.

Page 38: Manual PSInf - Modulo 5

• Program arrayofrecords;• Type ficha = record• sexo:char;• idade: integer;• end;• Var pessoa: ficha;• grupo :array [1..6]of ficha;• i, masc,femin,idadesmasc,idadesfemin:integer;• mediamasc,mediafemin: real;• Begin• For i:=1 to 6 do {introdução dos dados por elemento}• begin• Writeln('Sexo - m/f: '); Readln(pessoa.sexo);• Writeln('Idade:'); Readln(pessoa.idade);• grupo[i]:= pessoa;• end;• masc:=0;femin:=0;• idadesmasc:=0;idadesfemin:=0;• For i:=1 to 6 do {soma das idades por sexos}• begin• pessoa:=grupo [i];• if pessoa.sexo = 'm' then• begin• masc:=masc+1;• idadesmasc:=idadesmasc+pessoa.idade;• end;• if pessoa.sexo= 'f' then• begin• femin:= femin+1;• idadesfemin:=idadesfemin+pessoa.idade• end;• end;• mediamasc:=idadesmasc/masc;• mediafemin:=idadesfemin/femin;• Writeln(' Media de idades sexo masculino', mediamasc:8:1);• Writeln(' Media de idades sexo femenino', mediafemin:8:1);• readln• end.