52
1 UNIVERSIDADE METODISTA DE PIRACICABA Centro de Ciências Exatas – Departamento de Informática TURBO PASCAL 7.0 PARTE II Março de 1998 Elisabete M. d’Avila Barini Valéria Maria D. Arezzo Zilio

TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

Embed Size (px)

Citation preview

Page 1: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

1

UNIVERSIDADE METODISTA DE PIRACICABACentro de Ciências Exatas – Departamento de Informática

TURBO PASCAL 7.0

PARTE II

Março de 1998Elisabete M. d’Avila Barini

Valéria Maria D. Arezzo Zilio

Page 2: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

2

Sumário

TIPOS ESTRUTURADOS Array UnidimensionalArray Multidimensional

SUBPROGRAMASProcedimentosFunçõesPassagem de Parâmetros por ValorPassagem de Parâmetros por Referência

REGISTROSDeclaração

ARQUIVOSDeclaraçãoAberturaFechamentoLeituraGravaçãoProcedimentos e Funções para manipulação de Arquivos e RegistrosTipo de acesso: Sequencial e Direto

Page 3: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

3

TIPOS ESTRUTURADOS

Os tipos estruturados permitem fazer referência a um conjunto de informações através de um identificador. Temos os tipos estruturados homogêneos e heterogêneos. Os tipos homogêneos são conjunto de informações de um mesmo tipo, tais como: array unidimensional e multidimensional . Os tipos heterogêneos são conjuntos de caracteres não necessariamente de um mesmo tipo, tais como: file e record.

ARRAY

Correspondem a conjuntos de elementos de um mesmo tipo. Para identificar um elemento do conjunto é necessário especificar o nome do array seguido de um ou mais índices que definem sua posição no array. Podem ser dos tipos unidimensional ou multidimensional.

ARRAY UNIDIMENSIONAL

São vetores ou conjuntos de elementos que podem ser identificados pelo seu nome e apenas um índice. Para criar variáveis do tipo array unidimensional basta declarar:

var lista de identificadores: array[1..k] of tipo;onde: lista de identificadores: são os nomes associados às variáveis;

array of: são palavras reservadas com significado predefinidos em Turbo Pascal;1..k: quantidade de elementos do array;tipo: é o tipo dos elementos do array (integer, real, char, string[]).

Ex: Var NOME: array[1..10] of string[25];Neste caso temos que NOME é um vetor que pode conter no máximo 10 nomes de

até 25 caracteres cada um. O índice que varia de 1 a 10 indica a posição do nome no vetor.NOME[1]:=’Patrícia de Queiroz’;NOME[2]:=’Fabrício Silva e Souza’;NOME[3]:=’Clementina da Paixão’; . .NOME[10]:=’Fabiana Barroso’;

Ex: Var A,B: array[1..50] of real;Neste caso temos 2 vetores de no máximo 50 valores reais.

A[1]:=5.7; B[1]:=9.7;A[2]:=3.5; B[2]:=-2.6; . . . .A[50]:=4.5; B[50]:=1.9;

Page 4: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

4

ARRAY MULTIDIMENSIONAL

São as variáveis que utilizam mais que um índice para a definição da posição de seus elementos. Com duas dimensões temos as matrizes ou tabelas. Para criar variáveis do tipo array com duas dimensões basta declarar:

var lista de identificadores: array[1..k1,1..k2] of tipo;onde: lista de identificadores: são os nomes associados às variáveis;

array of: são palavras reservadas com significado predefinidos em Turbo Pascal;1..k1: quantidade de linhas do array;1..k2: quantidade de colunas do array;tipo: é o tipo dos elementos do array.

Ex: Var PRECOS: array[1..30,1..4] of real;

Produto Padaria 1 Padaria 2 Padaria 3 Padaria 4Chocolate 9.45 9.30 10.43 9.50Pó de Café 3.10 2.75 2.80 3.10Leite 0.68 0.86 0.72 0.89 . .Pão francês 0.16 0.18 0.15 0.15

A variável PRECOS poderá conter apenas os preços dos produtos. A referência ao preço do Pó de Café na Padaria 3 é feita através do nome do array e as posições ocupadas no array, ou seja: PRECOS[2,3], que contém o valor 2.80.

Ex1: Sejam dois vetores, cada um contendo 10 valores numéricos reais, armazenar em um terceiro vetor a média aritmética entre os valores dos dois primeiros e calcular a média dos valores do terceiro vetor.

program array01;uses crt;var V1,V2,MedArit: array[1..10] of real; Soma,MedGeral: real; k: byte;begin textbackground(15);

textcolor(5); clrscr; gotoxy(15,2); write('CALCULO DA MEDIA E SITUACAO DA MEDIA'); gotoxy(15,5); write('1º VALOR 2º VALOR MEDIA SITUACAO'); Soma:=0; for k:=1 to 10 do

begin gotoxy(15,k+6); readln(V1[k]); gotoxy(25,k+6); readln(V2[k]); MedArit[k]:=(V1[k]+V2[k])/2;

Page 5: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

5

gotoxy(35,k+6); write(MedArit[k]:4:1); Soma:=Soma+MedArit[k]; end; MedGeral:=Soma/10; for k:=1 to 10 do begin gotoxy(45,k+6); if MedArit[k]>MedGeral then write('Acima da Media') else if MedArit[k]=MedGeral then write('Igual a Media') else write('Abaixo da Media'); end; gotoxy(50,20); write('Tecle algo...'); repeat until keypressed;end.

Ex2: Seja uma matriz quadrada 5x5, calcular a soma dos elementos da diagonal principal.

program array02;uses crt;const n=5;var m: array[1..n,1..n] of real; soma: real; lin, col, i, j: integer;begin clrscr; gotoxy(20,3); write('Soma Diagonal'); soma:=0; lin:=6; for i:=1 to n do begin col:=10; for j:=1 to n do begin gotoxy(col,lin); readln(m[i,j]); if i=j then soma:=soma+m[i,j]; col:=col+10; end; lin:=lin+2; end; lin:=lin+1; gotoxy(20,lin); write('Soma = ',soma:10:2); repeat until readkey=#13;end.

Page 6: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

6

Ex3: Seja uma matriz quadrada 5x5, armazenar em um vetor os elementos da diagonal principal, apresentá-los e calcular a soma destes elementos.

program array03;uses crt;var Mat: array[1..5,1..5] of byte; Diagonal: array[1..5] of byte; Soma,i,j: byte;Begin Clrscr; Gotoxy(30,5); write('Soma Diagonal Principal da Matriz'); Soma:=0; for i:=1 to 5 do for j:=1 to 5 do begin gotoxy(j*5+30,i*2+6); readln(Mat[i,j]); if i=j then Diagonal[i]:=Mat[i,j]; end; gotoxy(10,20); write('Diagonal Principal -->'); for i:=1 to 5 do begin gotoxy(i*5+30,20); write(Diagonal[i]); Soma:=Soma+Diagonal[i]; end; gotoxy(10,22); write('Soma da diagonal principal --> ',soma); repeat until keypressed;end.

Ex4: Dados dois vetores numéricos de 6 posições cada um, efetuar as respectivas operações indicadas por um outro vetor de caracteres de 6 posições contendo as quatro operações aritméticas em qualquer combinação. Fazer um programa para calcular e exibir o vetor resultado.

Program array04;uses crt;const n=6;type vet=array[1..n] of real; car=array[1..n] of char;var num1,num2,res: vet; oper: car; i,c,l: integer;begin clrscr; gotoxy(20,2); write('< < < O P E R A D O R E S > > >'); gotoxy(10,4); write('operador'); gotoxy(70,4); write('resultado'); window(2,6,79,23);

Page 7: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

7

textbackground(6); textcolor(15); clrscr; c:=8;l:=1; for i:=1 to n do

begin {$i-} repeat gotoxy(c,l); clreol; readln(num1[i]); until ioresult=0; repeat gotoxy(c+20,l); clreol; readln(num2[i]); until ioresult=0; {$i+} repeat gotoxy(c+40,l); clreol; readln(oper[i]); until (oper[i] in ['+','-','*','/']); case oper[i] of '+':res[i]:=num1[i]+num2[i]; '-':res[i]:=num1[i]-num2[i]; '*':res[i]:=num1[i]*num2[i]; '/':begin if num2[i]<>0 then res[i]:=num1[i]/num2[i] else res[i]:=num1[i]; end; end; gotoxy(c+60,l); write(res[i]:7:2); l:=l+2; end; window(1,1,80,25); gotoxy(20,25); write('tecle <enter> para terminar ..'); repeat until readkey=chr(13); textbackground(0); textcolor(15); clrscr; end.

Ex5: O programa abaixo lê 80 números quaisquer e classifica em ordem crescente.

Program array05;Uses crt;Const n=80;Var I,j,col,lin :lnteger; Aux :real; Mat :array [1..n] of real;

Page 8: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

8

Begin Clrscr; Gotoxy(10,2);write(‘Digite’,n,’ valores para serem ordenados’); Col:=4; lin:=4; For i:=1 to n do

Begin Gotoxy(col,lin);readln(mat[i]); lin:=lin + 1; if lin=24 then begin

col:=col + 15; lin:=4;

end;end;

for i:=1 to n-1 do for j:= i+1 to n do begin

if mat[i] > mat[j] thenbegin aux:=mat[i]; mat[i]:=mat[j]; mat[j]:=aux;end;

end;clrscr;gotoxy(10,2);write(‘Valores Ordenados’);lin:=4; col:=4;for i:=1 to n do begin

gotoxy(col,lin);write(i:2,’ ‘,mat[i]:10:2);lin:=lin+1;if lin=24 then begin

col:=col+15; lin:=4;

end; end;gotoxy(30,24);write(‘Tecle enter para sair. ‘);repeat until readkey=chr(13);

end.

Ex6: O programa abaixo lê 20 nomes quaisquer até 30 caracteres e faz a classificação em ordem alfabética.

Program array06;Uses crt;Const n=20;

Page 9: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

9

Var chave :boolean; I :lnteger; Aux :string[30]; Mat :array [1..n] of string[30];Begin Clrscr; Gotoxy(10,2);write(‘Digite’,n,’ nomes para serem classificados’); For i:=1 to n do

Begin Gotoxy(10,i+3);readln(mat[i]);end;

chave:=true; while chave do

begin chave:=false; for i:=1 to n-1 do

begin if mat[i] > mat[i+1] then

begin aux:=mat[i]; mat[i]:=mat[i+1]; mat[i+1]:=aux; chave:=true;end;

end;end;clrscr;gotoxy(10,2);write(‘Nomes Classificados’);for i:=1 to n do begin

gotoxy(10,i+3);write(mat[i]); end;gotoxy(30,24);write(‘Tecle enter para sair. ‘);repeat until readkey=chr(13);

end.

EXERCÍCIOS

1) Dados dois vetores: um contendo a quantidade e o outro o preço unitário de 20 produtos elabore um programa que calcule e exiba o faturamento que é igual a quantidade x preço. Calcule e exiba também o faturamento total que é a somatória de todos os faturamentos, a média dos faturamentos e quantas faturamentos foram abaixo da média.

2) Dado um vetor contendo 10 elementos numéricos elabore um programa que verifique se um outro valor dado pertence ou não ao vetor, se pertencer exibir quantas vezes ele aparece no vetor.

Page 10: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

10

3) Dado um vetor contendo letras do alfabeto, elabore um programa para verificar quantas vezes ocorreu a letra ‘A’ ou ‘a’.

OBS: Fazer crítica na entrada do caracter para aceitar somente letras.

4) Dado um vetor A de caracteres contendo 8 elementos desenvolver um programa que crie e exiba um outro vetor B de 8 elementos que deverá conter as letras ‘V’, ‘C’ ou ‘O’ de acordo com o conteúdo existente no vetor A .‘V’ (para vogal), ‘C’ (para consoante) e ‘O’ (para outros caracteres).

5) Sendo um vetor qualquer (o programador vai definir o tamanho) contendo números reais desenvolver um programa que determine qual é o menor valor existente no vetor e subtraia de todos os elementos este valor. Exibir o vetor resultado.

6) Dada uma matriz de ordem 3x5 contendo valores numéricos reais, fazer um programa que calcule e exiba na tela a soma dos números positivos e a soma dos números negativos.

7) Dado um valor numérico VAL e uma matriz A 3x4 elabore um programa que calcule e exiba na tela uma outra matriz B que deverá conter cada elemento da matriz A dividido pelo valor numérico VAL.

8) Escreva um programa que leia duas matrizes reais de dimensão 3X5, calcule e exiba a soma das matrizes.

C(i,j)= A(i,j) + B(i,j)

9) Dadas duas matrizes numéricas A e B de dimensão 4x3, fazer um programa que gere uma matriz booleana C, tal que o elemento C[I,J] seja verdadeiro se os elementos nas posições respectivas das matrizes A e B forem iguais e falso caso contrário. Exibir na tela as matrizes A,B e C.

EXEMPLO:

2 4 6 2 5 8 true false falseA = 1 5 9 B = 1 9 7 C = true false false

3 7 2 3 7 1 true true false4 6 8 4 5 8 true false true

10) Dada uma matriz bidimensional contendo 4 notas de 10 alunos, elaborar um programa que calcule e exiba um outra matriz unidimensional que deverá conter a média aritmética das 4 notas de cada aluno.

SUBPROGRAMAS - PROCEDIMENTOS E FUNÇÕES

Page 11: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

11

Uma das técnicas mais utilizadas e vantajosas no desenvolvimento de programas é a modularização, que consiste em dividir um programa em diversos módulos de certa forma independentes uns dos outros. Sendo assim existe um módulo principal (programa principal) que chama os outros módulos e assim os módulos podem chamar outros módulos ou até a si mesmos. Estes módulos são chamados de subprogramas que se dividem em procedimentos e funções.

PROCEDIMENTO: possui um cabeçalho de identificação com o nome do procedimento, um bloco de declarações locais (são declarações que serão definidas dentro do próprio subprograma e só podem ser utilizadas por ele mesmo) e um bloco de comandos. O procedimento pode ser ativado pelo programa principal, ou por um outro procedimento ou função, ou até por ele mesmo.

Sintaxe: PROCEDURE identificador;declaração dos objetos locais: -constantes

tiposvariáveis

begin

bloco de comandos;

end;

OBS:- Tudo o que for declarado dentro do procedimento só será reconhecido dentro dele mesmo ==> conceito de variáveis locais.

Exemplo1: O exemplo abaixo calcula a soma de dois números utilizando o conceito de procedimentos.

Program ex_procedure;uses crt;var x,y:real; {variáveis globais }

Procedure tela; Begin

Clrscr; Gotoxy(10,8); write(‘Entre com 1º número =’); Gotoxy(10,10);write(‘Entre com 2º número =’); Gotoxy(10,12);write(‘Soma =’); End;

Procedure Início;var som:real; {variáveis locais} Begin Tela;

Page 12: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

12

Gotoxy(50,8);readln(x); Gotoxy(50,10;readln(y); som:=x+y; gotoxy(50,12);write(som:10:2); gotoxy(20,24);write(‘Tecle algo para sair’); Readkey; End;

Begin { programa principal} início;end.

Outra forma de resolver o mesmo exercício:-

Program ex_procedure;uses crt;var x,y:real; {variáveis globais }

Procedure Soma;Var som:real; { variável local}Begin som:=x+y; gotoxy(50,12);write(som:10:2);End;

Procedure tela; Begin

Clrscr; Gotoxy(10,8); write(‘Entre com 1º número =’); Gotoxy(10,10);write(‘Entre com 2º número =’); Gotoxy(10,12);write(‘Soma =’); End;

Procedure Início; Begin Tela; Gotoxy(50,8);readln(x); Gotoxy(50,10;readln(y); Soma; gotoxy(20,24);write(‘Tecle algo para sair’); Readkey; End;

Begin { programa principal} início;end.

Page 13: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

13

O mesmo exercício com estrutura de repetição:-

Program ex_procedure;uses crt;var x,y:real; {variáveis globais } op:char; Procedure Soma;Var som:real; { variável local}Begin som:=x+y; gotoxy(50,12);write(som:10:2);End;

Procedure tela; Begin

Clrscr; Gotoxy(10,8); write(‘Entre com 1º número =’); Gotoxy(10,10);write(‘Entre com 2º número =’); Gotoxy(10,12);write(‘Soma =’); End;

Procedure Início; Begin Tela; Gotoxy(50,8);readln(x); Gotoxy(50,10;readln(y); Soma; gotoxy(20,24);write(‘Tecle algo para sair’); Readkey; End;

Begin { programa principal} repeat início; gotoxy(40,20);write(‘Deseja Continuar S/N ? ‘); repeat

gotoxy(64,20);clreol;readln(op);op:=upcase(op);

until (op=’S’) or (op=’N’);until op=’N’;end.

Page 14: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

14

Exemplo2: O programa abaixo faz a ordenação de dois números diferentes.

Program ordena_num;uses crt;

Procedure tela;Begin Clrscr;

gotoxy(25,3);write( ‘ **** O R D E N A C A O ****’); gotoxy(15,6);write( ‘Entre com o 1º número ........’); gotoxy(15,8);write( ‘Entre com o 2º número ........’); gotoxy(15,12);write(‘Os números ordenados ‘); gotoxy(20,23);write(‘Tecle zero para parar o processo !!’); window(50,6,70,12);end;

Procedure ordena;var aux,a,b:integer; { variáveis locais}begin repeat

gotoxy(1,1);readln(a);gotoxy(1,3);readln(b);if (a<>0) e (b<>0) thenbegin if (a > b) then

beginaux:=a;a:=b;b:=aux;

end; gotoxy(1,7);write(a,’ ‘, b); delay(2000); clrscr;end;

until (a=0) or (b=0);end;

Begin { programa principal} Tela; Ordena;end.

Page 15: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

15

FUNÇÕES: As funções são muito parecidas com os procedimentos . A principal diferença é que a função sempre retorna uma informação para o local onde a função foi chamada.

Sintaxe: FUNCTION identificador:tipo;declaração dos objetos locais: - constantes

tipos variáveis

beginbloco de comandos;

end;

Exemplo:- O exemplo a seguir efetua a soma de dois valores utilizando o conceito de funções.

Program ex_function;uses crt;var x,y:real; {variáveis globais}

Procedure tela;Begin Clrscr; gotoxy(10,8);write(‘Entre com o 1º valor=‘); gotoxy(10,10);write(‘Entre com o 2º valor =‘); gotoxy(10,12);write(‘A soma = ‘);end;

Function soma:real;begin soma:=x+y;end;

Procedure início;Begin Tela; gotoxy(50,8);readln(x); gotoxy(50,10);readln(y); gotoxy(50,12);write(soma:10:2); gotoxy(20,25);write(‘tecle algo para terminar’); readkey;

end;

begin início;end.

Page 16: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

16

O mesmo exemplo utilizando estrutura de repetição:-

Program ex_function;uses crt;var x,y:real; {variáveis globais}

Procedure tela;Begin Clrscr; gotoxy(10,8);write(‘Entre com o 1º valor=‘); gotoxy(10,10);write(‘Entre com o 2º valor =‘); gotoxy(10,12);write(‘A soma = ‘);end;

Function soma:real;begin soma:=x+y;end;

Procedure início; Var op:char;

Begin repeat Tela; gotoxy(50,8);readln(x); gotoxy(50,10);readln(y); gotoxy(50,12);write(soma:10:2); gotoxy(20,25);write(‘Deseja Continuar <S/N> ?’); repeat

gotoxy(45,25);clreol;readln(op);op:=upcase(op);

until (op=’S’) or (op=’N’); until op=’N’;end;

begin início;end.

- SUBPROGRAMAS COM PASSAGEM DE PARÂMETROS OU ARGUMENTOS

Page 17: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

17

Os procedimentos e as funções também podem receber ou retornar valores e ou variáveis quando ativados. Estes valores ou variáveis são chamados de parâmetros ou argumentos.

Sintaxe: Procedure identificador (parm1,...,parmn:tipoparam);declaração dos objetos locais: - constantes

tiposvariáveis

beginbloco de comandos;

end;

Sintaxe: Function identificador (parm1,...,parmn:tipoparam):tipo;declaração dos objetos locais: - constantes

tipos variáveis

beginbloco de comandos;

end;

- PASSAGEM DE PARÂMETROS POR VALOR: No instante da chamada do procedimento ou da função é feita uma cópia dos dados como se fossem variáveis locais. As informações recebidas podem ser utilizadas pelo procedimento mas as alterações não irão modificar a informação original do local da chamada.

Exemplo1:- O programa abaixo calcula a média aritmética de três provas e verifica a situação do aluno.

Program Ex_proc_valor;uses crt;

Procedure media(n1,n2,n3:real); {passagem de parâmetros por valor}var m:real; sit:string[30];begin

m:=(n1+n2+n3)/3;if m >= 5 then sit:=‘apr’

else sit:=‘rep’;gotoxy(10,12);write(‘Media= ‘,m:5:2);gotoxy(10,14);write(‘Situacao do aluno= ‘,sit);gotoxy(20,24);write(‘Tecle algo’);

Page 18: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

18

readkey;end;

Procedure tela;Begin

Clrscr;gotoxy(10,4);write(‘Registro Acadêmico = ‘);gotoxy(10,6);write(‘1ª nota = ‘);gotoxy(10,8);write(‘2ª nota = ‘);gotoxy(10,10);write(‘3ª nota = ‘);

end;

Procedure entrada;var p1,p2,p3:Real; {variáveis locais} ra:string[9];begin repeat

tela;gotoxy(32,4);readln(ra);if ra<> ‘’ then begin gotoxy(32,6);readln(p1); gotoxy(32,8);readln(p2); gotoxy(32,10);readln(p3);

media(p1,p2,p3); end; until ra=’’;end;

Begin entrada;End.

Exemplo2: O programa calcula a potência de um número dado.

Program ex_2;uses crt;

Procedure Tela;begin clrscr; gotoxy(10,6);write(‘Digite o valor de x = ‘); gotoxy(10,8);write(‘X2 = ‘); gotoxy(10,10);write(‘X3 = ‘); gotoxy(10,12);write(‘X4 = ‘);end;

Page 19: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

19

Function potencia (base:real;expoente:integer):real;var k:integer; p:real; { variáveis locais} begin if expoente = 0 then potencia:=1

else if base=0 then potencia:=0else begin p:=base; for k:=1 to expoente-1 do

p:=p*base; potencia:=p; end;

end;

Procedure entrada;var x:real; {variável local}begin gotoxy(32,6);readln(x); gotoxy(15,8); write(potencia(x,2):15:4); gotoxy(15,10);write(potencia(x,3):15:4);

gotoxy(15,12);write(potencia(x,4):15:4); gotoxy(15,20);write(‘Tecle <enter> para terminar >’); repeat until keypressed;end;

Begin {programa principal} tela; entrada;end.

Exemplo3:- Program areas_de_figuras;uses crt;

Procedure tela1;var k:byte;begin clrscr; gotoxy(26,4); write('AREA DE FIGURAS GEOMETRICAS'); window(25,8,55,25); textbackground(15);textcolor(1);clrscr;end;

Procedure tela2;begin clrscr;

Page 20: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

20

gotoxy(8,3); write('1. CIRCUNFERENCIA'); gotoxy(8,5); write('2. TRIANGULO'); gotoxy(8,7); write('3. FIM DE PROGRAMA'); gotoxy(8,13); write('DIGITE SUA OPCAO:');end;

Function entrada(col,lin:byte):real;var valor: real;BEGIN repeat gotoxy(col,Lin); clreol; readln(valor); until valor>0; entrada:=valor;end;

Procedure menu;var opcao:byte; area,a,b:real;begin repeat tela2; repeat gotoxy(25,13); clreol; readkn(opcao); until opcao in [1..3]; if opcao<>3 then begin clrscr; case opcao of 1: begin gotoxy(8,1); write('CIRCUNFERENCIA'); gotoxy(8,4); write('PI: ',PI:5:3); gotoxy(8,6); write('RAIO:'); area:= pi*sqr(entrada(13,6)); end; 2: begin gotoxy(8,1); write('TRIANGULO'); gotoxy(8,4); write('BASE:');b=entrada(13,4); gotoxy(8,6); write('ALTURA:');a:=entrada(15,6); area:= (b*a)/2; end; end; gotoxy(8,12); write('AREA: ',area:5:2); gotoxy(15,17);write('TECLE ALGO !!'); repeat until readkey<>#0; end; until opcao=3;end;

Page 21: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

21

Begin {programa principal} tela1; menu; textbackground(0);textcolor(15);clrscr;End.

- PASSAGEM DE PARÂMETROS POR REFERÊNCIA: É utilizado quando precisamos efetuar modificações nos dados recebidos e enviar os resultados para serem utilizados por outro procedimento ou função. Os procedimentos podem receber e ou retornar quantas informações forem desejadas enquanto que as funções apenas utilizam passagem de parâmetros por valor, pois o nome da função já funciona como se fosse um parâmetro por referência retornando sempre uma única informação.

Exemplo: Programa Ex_proc_referenc;uses crt;type str=string[3]; { para enviar por parâmetro uma informação string[ ]}

Procedure media(n1,n2,n3:real;var m:Real;var sit:str); begin

m:=(n1+n2+n3)/3;if m >= 5 then sit:=‘apr’

else sit:=‘rep’;

end;

Procedure tela;Begin

Clrscr;gotoxy(10,4);write(‘1ª nota = ‘);gotoxy(10,6);write(‘2ª nota = ‘);gotoxy(10,8);write(‘3ª nota = ‘);gotoxy(10,10);write(‘Media = ‘);gotoxy(10,12);write(‘Situaçao do aluno = ‘);repeat until keypressed;

end;

Procedure entrada;var p1,p2,p3,m:Real; sit:str;begin

tela;gotoxy(30,4);readln(p1);gotoxy(30,6);readln(p2);gotoxy(30,8);readln(p3);media(p1,p2,p3,m,sit); {as variáveis m e sit irão retornar }

Page 22: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

22

gotoxy(30,10);write(m:5:2);gotoxy(30,12);write(sit);gotoxy(20,22);write(‘Tecle algo para sair’);repeat until keypressed;

end;

Begin entrada;End.

OBS:- A declaração FORWARD indica ao compilador que determinado procedimento ou função está definido mais a frente, isto é, não está definido na ordem de sua chamada.

-DIRETIVA DE COMPILAÇÃO { $I+} - CHECAGEM DE ENTRADA/SAÍDA

Sintaxe {$I+} ou {$I-}Default {$I+}

Esta diretiva de checagem pode habilitar ou inibir erros de execução de um programa a cada entrada e ou saída, seja qual for o dispositivo utilizado.

Caso a diretiva esteja habilitada {$i+} e houver um erro na rotina de entrada e ou saída, o programa será interrompido com a respectiva mensagem de erro. Ao contrário se estiver inibida {$I-} , o retorno do erro será enviado a uma função chamada IORESULT, e poderá ser tratado logicamente pelo programador.

Exemplo utilizando um trecho de programa: ...... var t:array[1..10] of integer; begin

{$I-} { desativa a diretiva de I/O}repeat

gotoxy(-,-);clreol;readln(t[i]);until ioresult=0;{$I+} {ativa a diretiva novamente}.....

OBS:- Desta forma a entrada de dados será verificada sendo aceito apenas valores inteiros.

-COMO UTILIZAR A IMPRESSORA NO TURBO PASCAL 7.0

Quando utilizamos a impressora não temos um comando específico para posicionar a impressão no local desejado, como é o caso do comando gotoxy(coluna,linha), para posicionamento do cursor na tela. Sendo assim é necessária a distribuição das informações a serem impressas de acordo com o tamanho do formulário de impressão.

Page 23: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

23

A impressão se dá linha por linha sequencialmente sendo assim não é possível retornar para uma linha que já tenha sido impressa. Devemos prepar cada uma das linhas.

Comando utilizados:

uses printer; { seleciona a biblioteca de impressão}

write(LST, ....); {seleciona a saída para impressora e imprime}

write(LST,.....,#10); {imprime e posiciona na próxima linha /impressora matricial}

write(LST,.....,#12);{imprime e posiciona na próxima página /impressora matricial}

No caso de uma impressora jato de tinta usar apenas:

uses printer; { seleciona a biblioteca de impressão}

write(lst,...); { imprime e permanece na linha}

writeln(lst,....); { imprime e posiciona na próxima linha}

Os programas abaixo são exemplos utilizando subprogramas e impressora:

Exemplo 1:- O programa abaixo armazena em dois vetores o nome e as medias de 10 alunos. Em seguida imprime um relatório em ordem alfabética.

Program Ordenacao; uses crt,printer,dos; type str=string[30]; const n=10;

procedure ordena(var nomei,nomej:str;var medi,medj:real); var auxn:string[30]; auxm:real; begin if nomei > nomej then begin auxn:=nomei; nomei:=nomej; nomej:=auxn; auxm:=medi; medi:=medj; medj:=auxm; end; end;

Page 24: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

24

procedure cabecalho; var d,m,a,ds:word; { variaveis para trazer a data do sistema} i:integer; begin gotoxy(20,25);write('AGUARDE A IMPRESSAO '); getdate(a,m,d,ds); writeln(lst,' ':27,'RELACAO DE NOTAS',D,'/',M,'/',A); writeln(lst); writeln(lst,'NOME DOS ALUNOS',' ':40,'MEDIA FINAL'); writeln(lst); for i:=1 to 80 do write(lst,'-'); writeln(lst); end;

procedure Imprime(nome:str;med:real); var espaco:byte; begin espaco:=60-length(nome); {length()- funcao string} writeln(lst,nome,' ':espaco,med:5:2); end;

procedure dados; var nome:array[1..n] of str; med :array[1..n] of real; i,j:byte; begin clrscr; gotoxy(5,2);write('NOME DO ALUNO'); gotoxy(45,2);write('MEDIA FINAL'); for i:=1 to n do begin gotoxy(1,i+4);readln(nome[i]); {$i-} repeat gotoxy(45,i+4);clreol; readln(med[i]); until (ioresult=0) and (med[i]>=0) and (med[i]<=10); {$i+} end; for i:=1 to n-1 do for j:=i+1 to n do ordena(nome[i],nome[j],med[i],med[j]); cabecalho; for i:=1 to n do imprime(nome[i],med[i]);

Page 25: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

25

end;

Begin {programa principal} dados; End.

Exemplo 2:- O programa abaixo gera aleatoriamente 100 combinações de 5 números e em seguida imprime uma relação dos números gerados.

Program Sorteio;Uses Crt, Printer;Type Str80=string[80];

Function gera_numero:integer;Begin gera_numero:=random(100)+1;end;

Function centra(frase:str80):byte;Begin centra:=(80-length(frase)) div 2 +1;End;

Procedure cabecalho;const titulo='RELACAO DE NUMEROS ALEATORIOS';Var i,espcacos:byte; traco:str80;Begin espacos:=centra(titulo); traco:=''; for i:=1 to 80 do traco:=traco + '-'; writeln(lst,traco); writeln(lst,' ':espacos,titulo); writeln(lst,traco); writeln(lst,'NUMERO 1',' ':7,'NUMERO 2',' ':7,'NUMERO 3',' ':7,'NUMERO 4'); writeln(lst,' ':7,'NUMERO 5'); writeln(lst);End;

Procedure impressao;Var i,j,cl:BYTE;Begin cl:=61; for i:=1 to 100 do

Page 26: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

26

begin if cl>60 then begin cabecalho; cl:=6; end; for j:=1 to 5 do write(lst,gera_numero:5,' ':10); writeln(lst); cl:=cl+1; end;End;

Begin randomize; clrscr; gotoxy(20,10);write('AGUARDE IMPRESSAO !!'); impressao;End.

EXERCICIOS

Os exercícios propotos abaixo deverão utilizar o conceito de variáveis locais passadas por parâmetro quando necessário.

1) Desenvolver um programa para resolver equações do 2º grau e exibir as raízes (se o delta for maior que zero) ou a mensagem não existem raízes reais. O programa deverá conter:

a) um procedimento tela;b) um procedimento para entrada de dados, calculo do delta e das raízes e exibir as raízes e ou a mensagem;Repetir o processo enquanto o usuário desejar, sugestão <Deseja continuar <S/N> ? >.

OBS:- As fórmulas a serem utilizadas são: delta= sqr(b)-4*a*c, x1=(-b-sqrt(delta))/(2*a) e x2=(-b+sqrt(delta))/(2*a).

2) Em um determinado concurso foram aplicadas quatro provas, sendo que a cada prova foi atribuído um certo peso, como a seguir:

PROVA PESOmatemática 4português 3contabilidade 2conhecimentos gerais 1

Page 27: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

27

Dados: o nome e as quatro notas das provas de cada candidato fazer um programa utilizando subprogramas para calcular e exibir o total de pontos obtidos pelo candidato e sua classificação de acordo com a tabela abaixo:

TOTAL DE PONTOS SITUAÇÃOacima de 80 bomacima de 50 até 80 regularacima de 30 até 50 fracoaté < = 30 muito fraco

O total de pontos é calculado somando-se todas as notas das provas multiplicadas pelo peso correspondente.Repetir o processo enquanto o nome do funcionário <>’’.

3) Refaça o exercício número 1 utilizando uma função para calcular o delta e uma função para calcular x1 e x2.

4) Desenvolva um programa que contenha uma função sinal que receba um número inteiro ( passagem de parâmetro) e retorne 1, -1 ou 0 caso o número seja, maior, menor ou igual a zero respectivamente.

5) Dadas as seguintes informações: R.A., nota da 1ª prova, nota da 2ª prova e número de faltas. Elabore um programa que contenha:

a) um procedimento para tela;b) um procedimento para entrada de dados chamadas da função e procedimento e apresentação do resultado;c) uma função para calculo da média = ((p1*4) + (p2*6))/10. ( Utilizar passagem de parâmetros).d) um procedimento para cálculo da situação do aluno que estará “Aprovado” se média >=5 e número de faltas<=16, caso contrário aluno “Reprovado”. Utilizar passagem de parâmetros.e) programa principal com repetição do processo.

6) Dados: o modelo do veículo, a marca e o custo de fabricação. Desenvolver um programa que calcule e exiba o preço de venda do veículo, sabendo-se que terá um acréscimo de 30 %. O programa deverá conter os seguintes subprogramas:

a) um procedimento tela; b) uma função ou um procedimento para cálculo do preço de venda.c) um procedimento para entrada de dados. As variáveis deverão ser locais a este procedimento e passadas por parâmetro se necessário. Repetir o processo até que modelo do veículo =‘’.

7) Dados: o número do telefone de uma residência, o número de pulsos registrados para chamadas locais e o valor total de todas as chamadas interurbanas. Fazer um programa que controle a conta telefônica de 20 residências contendo:

Page 28: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

28

a) Um procedimento que prepare a tela;b) Um procedimento para entrada dos dados;c) Uma função para cálculo do valor total da conta telefônica. Sabendo-se que valor total da conta telefônica = número de pulsos locais x 0.127 + valor total de interurbanos;d) Um procedimento que imprima o relatório de acordo com o modelo abaixo:

RELAÇÃO DAS CONTAS TELEFÔNICAS

Número do Telefone Valor Total da Conta

XXXXXXXXXX 999999.99....

REGISTROS

Registros são conjuntos de informações logicamente relacionadas. As informações de um registro são denominadas campos e podem ser de diferentes tipos. Podemos citar como exemplos de registros: informações pessoais sobre um cliente de um banco, dados sobre produtos comercializados em uma loja, informações sobre veículos produzidos em uma montadora, dados sobre inscritos em um concurso, informações sobre motoristas de uma empresa de ônibus e outros.

Para declararmos um registro é necessário definir um tipo de registro e depois a variável de registro, conforme a sintaxe e exemplos a seguir.

TYPE identificador de tipo de registro = RECORD {campos do registro}

END;

VAR identificador de variável de registro: identificador de tipo de registro;

Ex1: Informações pessoais sobre um cliente de um banco: número da conta, tipo da conta, nome do cliente, endereço, telefone, número do RG, número do CPF, empresa em que trabalha, rendimento mensal, qualificação do cliente conforme condições financeiras.

Program ex1;Type dados_do_cliente =RECORD

nconta: string[8];tipo: char;nome: string[30];endereco: record

rua:string[30];cidade:string[15];cep:string[5];

end;fone: string[12];rg: string[10];

Page 29: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

29

cpf: string[12];empresa: string[25];rendmensal: real;qualifica: byte;END;

VAR cliente: dados_do_cliente;.........

Faça um trecho de programa para declarar um registro tendo como base o exemplo 1.a) Dados sobre produtos comercializados em uma loja: código do produto, descrição do produto, tipo do produto, preço do produto;b) Informações sobre veículos produzidos em uma montadora: modelo, potência do motor, ano, cor, número de série, número do chassis.

Para fazermos referência, no programa, a um campo de um registro, é necessário identificar o registro e o campo, com a sintaxe:

identificador de variável de registro.identificador do campo;

Para o exemplo 1 o trecho de entrada das informações pode ser:.........gotoxy(...,...); readln(cliente.nconta);gotoxy(...,...); readln(cliente.tipo);gotoxy(...,...); readln(cliente.nome);gotoxy(...,...); readln(cliente.endereco.rua);gotoxy(...,...); readln(cliente.endereco.cidade);gotoxy(...,...); readln(cliente.endereco.cep);gotoxy(...,...); readln(cliente.fone);gotoxy(...,...); readln(cliente.rg);gotoxy(...,...); readln(cliente.cpf);gotoxy(...,...); readln(cliente.empresa);gotoxy(...,...); readln(cliente.rendmensal);gotoxy(...,...); readln(cliente.qualifica);.........

O trecho de entrada de informações, ou qualquer outro onde seja necessário relacionar as variáveis de campo com o registro, pode ser simplificado com a utilização do comando abaixo que associa o nome do registro aos campos do referido registro:

WITH identificador de variável de registro DO comando;.........with cliente, cliente.endereco dobegin

gotoxy(...,...); readln(nconta);gotoxy(...,...); readln(tipo);gotoxy(...,...); readln(nome);gotoxy(...,...); readln(rua);gotoxy(...,...); readln(cidade);gotoxy(...,...); readln(cep);gotoxy(...,...); readln(fone);

Page 30: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

30

gotoxy(...,...); readln(rg);gotoxy(...,...); readln(cpf);gotoxy(...,...); readln(empresa);gotoxy(...,...); readln(rendmensal);gotoxy(...,...); readln(qualifica);

end; .........

Pode-se declarar e utilizar a estrutura de registros em vetores:lista de identificadores: ARRAY[1..k] of identificador de registro;ou em arquivos.

ARQUIVOS

Um arquivo pode ser descrito como um conjunto de registros e pode ser armazenado (gravado) em disco rígido ou disquete. É possível manipular um arquivo inserindo, alterando, excluindo ou simplesmente consultando seus registros. Os registros são gravados sequencialmente. Para declararmos um arquivo é necessário declarar o registro com seus campos e depois o arquivo.

TYPE identificador de tipo de arquivo = FILE OF identificador de tipo de registro;VAR identificador de variável de arquivo: identificador de tipo de arquivo;Para o exemplo 1 temos:Program ex1;Type dados_do_cliente = RECORD

nconta: string[8];.........qualifica: byte;END;

cadastro_dos_clientes = FILE of dados_do_cliente;VAR cliente: dados_do_cliente; cadastro: cadastro_dos_clientes;.........

{cliente é o nome da variável do registro e cadastro é o nome da variável do arquivo}

PROCEDIMENTOS E FUNÇÕES PARA MANIPULAÇÃO DE ARQUIVOS

ASSIGN(nomedoarquivo, ‘nomeexterno’);Associa o nomedoarquivo declarado no programa ao nomeexterno (arquivo físico) localizado no ambiente do sistema operacional. O nomeexterno do arquivo deve seguir as regras do MSDOS, ou seja até 12 caracteres, sendo 8 para o nome, seguido do ponto e mais 3 para extensão, que é opcional. Este procedimento deve anteceder qualquer outro procedimento de manipulação de arquivo.

RESET(nomedoarquivo);Abre arquivo existente, com registros gravados. Os registros que foram gravados anteriormente serão preservados. Posiciona o ponteiro no 1º registro.

Page 31: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

31

REWRITE(nomedoarquivo);Cria e abre um novo arquivo, caso o arquivo já exista os registros gravados anteriormente serão eliminados. O arquivo será aberto sempre vazio.

CLOSE(nomedoarquivo);Fecha um arquivo aberto, atualizando as informações do arquivo.

ERASE(nomedoarquivo);Elimina o arquivo do diretório.

RENAME(nomedoarquivo,’nomeexterno’);Altera o nome interno do arquivo para outro nome externo.

READ(nomedoarquivo,nomedoregistro);Lê um registro e avança o ponteiro para o próximo registro.

WRITE(nomedoarquivo,nomedoregistro);Grava um registro e avança o ponteiro para o próximo registro.

EOF(nomedoarquivo);Retorna true se o fim do arquivo foi atingido.

FILEPOS(nomedoarquivo);Retorna o número do registro ativo, onde se encontra o ponteiro. Posição física do registro.

SEEK(nomedoarquivo,posição);Posiciona o ponteiro no registro de número posição.

FILESIZE(nomedoarquivo);Retorna o tamanho do arquivo, ou a quantidade de registros gravados.

Exemplo:- O programa abaixo permite a inclusão, alteração, consulta e exclusão de registros em uma arquivo.

program exemplo_registro_arquivo;uses crt, printer;type dados_amigo = RECORD codi : string[4]; nome : string[25]; fone : string[15]; END; cadastro_amigos = FILE OF dados_amigo;var REG: dados_amigo; ARQ: cadastro_amigos;

procedure introducao;

Page 32: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

32

begin textbackground(1); clrscr; gotoxy(30,5); write('REGISTRO E ARQUIVO'); gotoxy(10,8); write('Este programa contem exemplos de procedimentos para manipulacao de'); gotoxy(10,10); write('arquivos. O objetivo e mostrar de maneira simples diferentes modos'); gotoxy(10,12); write('de manipulacao de arquivos, seja na inclusao, consulta, alteracao,'); gotoxy(10,14); write('exclusao ou emissao de relatorios.'); gotoxy(10,16); write('Procure desenvolver o seu programa, com criatividade ...'); gotoxy(50,20); write('Tecle algo.'); readkey;end;

procedure tela_cabecalho;var k: byte;begin window(1,1,80,25); textcolor(12); textbackground(1); clrscr; for k:=1 to 80 do begin gotoxy(k,1); write(chr(223)); gotoxy(k,4); write(chr(223)); end; gotoxy(20,2); write('T E L E F O N E - A M I G O S');end;

procedure tela_num_reg;begin textcolor(10); gotoxy(26,10); write('Nº Registro :');end;

procedure tela_campos;begin textcolor(12); gotoxy(20,12); write('C o d i g o . . . :'); gotoxy(20,14); write('N o m e . . . . . :'); gotoxy(20,16); write('F o n e . . . . . :');end;

Page 33: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

33

procedure tela_campos_numerados;begin textcolor(12); gotoxy(16,12); write(' C o d i g o . . . :'); gotoxy(16,14); write('(1) N o m e . . . . . :'); gotoxy(16,16); write('(2) F o n e . . . . . :'); gotoxy(16,18); write('(0) F i m');end;

procedure abre_janela;begin window(40,10,78,22); textcolor(15);end;

procedure tela_opcao(opcao:byte);begin tela_cabecalho; case opcao of 1: begin tela_campos; gotoxy(56,3); write('INCLUSAO'); abre_janela; end; 2: begin tela_campos; gotoxy(56,3); write('INCLUSAO'); abre_janela; end; 3: begin tela_num_reg; tela_campos; gotoxy(56,3); write('CONSULTA - REGISTRO'); abre_janela; end; 4: begin tela_campos; gotoxy(56,3); write('CONSULTA - CODIGO'); abre_janela; end; 5: begin tela_num_reg; tela_campos_numerados; gotoxy(56,3); write('ALTERACAO'); abre_janela; end; 6: begin tela_num_reg; tela_campos; gotoxy(56,3); write('ALTERACAO'); abre_janela; end; 7: begin tela_campos; gotoxy(56,3); write('EXCLUSAO'); abre_janela; end; 8: begin gotoxy(56,3); write('RELATORIO'); end; 9: begin gotoxy(56,3); write('REORGANIZA'); end; end;end;

procedure abre_arquivo;begin assign(ARQ,'a:AMIGO.DAT'); {$I-} reset(ARQ); {$I+}; if ioresult<>0 then rewrite(ARQ);end;

procedure inclue;begin if filesize(ARQ)>0 then seek(ARQ,filesize(ARQ)); with REG do repeat

Page 34: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

34

gotoxy(1,3); readln(codi); if codi<>'' then begin gotoxy(1,5); readln(nome); gotoxy(1,7); readln(fone); write(ARQ,REG); gotoxy(10,11); write('Tecle <enter>...'); repeat until readkey=#13; clrscr; end; until codi='';end;

procedure consulta_registro;var numreg:integer; op: char;beginrepeat clrscr; repeat gotoxy(1,1); clreol; readln(numreg); if (numreg<0) or (numreg>=filesize(ARQ)) then begin gotoxy(10,11); write('Registro nao existente.'); repeat until readkey<>#0; clrscr; end; until (numreg>=0) and (numreg < filesize(ARQ)); seek(ARQ,numreg); read(ARQ,REG); with REG do begin gotoxy(1,3); write(codi); gotoxy(1,5); write(nome); gotoxy(1,7); write(fone); end; gotoxy(1,9); write('Continua (S/N)?'); repeat gotoxy(17,9); clreol; readln(op); op:=upcase(op); until (op='S') or (op='N');until op='N';end;

procedure consulta_codigo;var codigo_consulta: string[25];beginrepeat

Page 35: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

35

clrscr; gotoxy(1,3); readln(codigo_consulta); with REG do if codigo_consulta<>'' then begin seek(ARQ,0); repeat read(ARQ,REG); if codi = codigo_consulta then begin gotoxy(1,5); write(nome); gotoxy(1,7); write(fone); end; until (eof(ARQ)) or (codi=codigo_consulta); if codi<>codigo_consulta then begin gotoxy(10,9); write('Codigo nao encontrado.'); end; gotoxy(10,11); write('Tecle <enter>...'); repeat until readkey=#13; end;until codigo_consulta='';end;

procedure altera;var numreg:integer; op: char; numcampo:byte;beginrepeat clrscr; repeat gotoxy(1,1); clreol; readln(numreg); until (numreg>=0) and (numreg < filesize(ARQ)); seek(ARQ,numreg); read(ARQ,REG); with REG do begin gotoxy(1,3); write(codi); gotoxy(1,5); write(nome); gotoxy(1,7); write(fone); end; gotoxy(1,11); clreol; write('Nº do campo p/ alterar:'); repeat repeat gotoxy(25,11); clreol; readln(numcampo); until numcampo in [0..2]; if numcampo<>0 then case numcampo of

Page 36: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

36

1: begin gotoxy(1,5); clreol; readln(REG.nome); end; 2: begin gotoxy(1,7); clreol; readln(REG.fone); end; end; until numcampo=0; seek(ARQ,numreg); write(ARQ,REG); gotoxy(1,11); write('Continua alteracao (S/N)?'); repeat gotoxy(27,11); clreol; readln(op); op:=upcase(op); until (op='S') or (op='N');until op='N';end;

procedure exclue;var codi_exclue: string[4]; op: char; arqaux: cadastro_amigos;begin repeat clrscr; gotoxy(1,3); readln(codi_exclue); if codi_exclue<>'' then with REG do begin seek(ARQ,0); repeat read(ARQ,REG); if codi = codi_exclue then begin gotoxy(1,5); write(nome); gotoxy(1,7); write(fone); end; until (eof(ARQ)) or (codi=codi_exclue); if codi<>codi_exclue then begin gotoxy(5,11); write('Codigo nao encontrado.'); delay(1000); end else begin gotoxy(5,11); write('Confirma exclusao (S/N)? '); repeat gotoxy(42,17); clreol; readln(op); op:=upcase(op); until (op='S') or (op='N'); if op='S' then begin REG.codi:='***'; seek(ARQ,filepos(ARQ)-1);

Page 37: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

37

write(ARQ,REG); end; end; end; until codi_exclue=''; gotoxy(1,11); write('Reorganiza arquivo (S/N)? '); repeat gotoxy(42,17); clreol; readln(op); op:=upcase(op); until (op='S') or (op='N'); if op='S' then begin tela_opcao(9); gotoxy(20,15); write('Reorganizando arquivo.'); assign(arqaux,'a:AUXILIAR'); rewrite(arqaux); seek(ARQ,0); repeat read(ARQ,REG); if REG.codi<>'***' then write(arqaux,REG); until eof(ARQ); close(ARQ); close(arqaux); erase(ARQ); rename(arqaux,'a:AMIGO.DAT'); abre_arquivo; end;end;

procedure cabecalho;const tit= 'A G E N D A - A M I G O S';var traco: string[80]; k: byte;begin traco:=''; for k:=1 to 80 do traco:=traco+'-'; writeln(lst,traco,#10); k:= (80 - length(tit)) div 2; writeln(lst,'':k,tit,#10); writeln(lst,traco,#10); writeln(lst,'':4,'Codigo Nome','':36,'Fone',#10);end;

procedure imprime;var lin, espaco: byte;begin gotoxy(20,15); write('Prepare a impressora e tecle enter.'); repeat until readkey=chr(13);

Page 38: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

38

cabecalho; lin:=9; seek(ARQ,0); while not(eof(ARQ)) do with REG do begin read(ARQ,REG); espaco:=40-length(nome); writeln(lst,'':5,codi:4,' ',nome,'':espaco,fone); lin:=lin+2; if lin>=60 then begin writeln(lst,#12); cabecalho; lin:=9; end; end; writeln(lst,#12);end;

procedure inclue_sem_repeticao;var codi_inclue: string[25];beginrepeat clrscr; gotoxy(1,3); readln(codi_inclue); with REG do if codi_inclue<>'' then begin if filesize(ARQ)>0 then begin seek(ARQ,0); repeat read(ARQ,REG); if codi = codi_inclue then begin gotoxy(1,5); write(nome); gotoxy(1,7); write(fone); gotoxy(8,9); write('Codigo cadastrado anteriormente.'); gotoxy(10,11); write('Tecle <enter>...'); repeat until readkey=#13; end; until (eof(ARQ)) or (codi=codi_inclue); end; if codi<>codi_inclue then begin codi:=codi_inclue;

Page 39: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

39

gotoxy(1,5); readln(nome); gotoxy(1,7); readln(fone); write(ARQ,REG); gotoxy(10,11); write('Tecle <enter>...'); repeat until readkey=#13; clrscr; end; end;until codi_inclue='';end;

procedure altera_sem_numerar_campo;var numreg:integer; op: char; campo: string[25];beginrepeat clrscr; repeat gotoxy(1,1); clreol; readln(numreg); until (numreg>=0) and (numreg < filesize(ARQ)); seek(ARQ,numreg); read(ARQ,REG); with REG do begin gotoxy(1,3); write(codi); gotoxy(1,5); write(nome); gotoxy(1,7); write(fone); gotoxy(1,5); readln(campo); if campo<>'' then begin gotoxy(length(campo)+1,5); clreol; nome:=campo; end; gotoxy(1,7); readln(campo); if campo<>'' then begin gotoxy(length(campo)+1,7); clreol; fone:=copy(campo,1,6); end; seek(ARQ,filepos(ARQ)-1); write(ARQ,REG); gotoxy(1,11); write('Continua alteracao (S/N)?'); repeat gotoxy(27,11); clreol; readln(op); op:=upcase(op); until (op='S') or (op='N'); end;until op='N';end;

procedure menu;var opcao: byte;begin

Page 40: TIPOS ESTRUTURADOS - unimep.brvmdzilio/pasc2_97.doc  · Web viewCom duas dimensões temos as matrizes ou tabelas. ... var d,m,a,ds:word; ... EXERCICIOS . Os exercícios

40

repeat tela_cabecalho; gotoxy(30,5); write('1. INCLUIR'); gotoxy(30,7); write('2. INCLUIR SEM REPETICAO'); gotoxy(30,9); write('3. CONSULTAR PELO N§ DO REGISTRO'); gotoxy(30,11); write('4. CONSULTAR PELO CAMPO CODIGO'); gotoxy(30,13); write('5. ALTERAR'); gotoxy(30,15); write('6. ALTERAR SEM NUMERAR CAMPO'); gotoxy(30,17); write('7. EXCLUIR'); gotoxy(30,19); write('8. IMPRIMIR RELATORIO'); gotoxy(30,21); write('9. FIM'); gotoxy(30,23); write('Digite sua opcao:'); repeat gotoxy(48,23); clreol; readln(opcao); until opcao in [0..9]; tela_opcao(opcao); case opcao of 1: INCLUE; 2: INCLUE_SEM_REPETICAO; 3: CONSULTA_REGISTRO; 4: CONSULTA_CODIGO; 5: ALTERA; 6: ALTERA_SEM_NUMERAR_CAMPO; 7: EXCLUE; 8: IMPRIME; end; until opcao=9;end;

begin introducao; abre_arquivo; menu; close(ARQ);end.