Tipos Estruturados
Monografias: Tipos Estruturados. Pesquise 861.000+ trabalhos acadêmicosPor: • 4/6/2013 • 1.712 Palavras (7 Páginas) • 473 Visualizações
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;
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 4
Chocolate 9.45 9.30 10.43 9.50
Pó de Café 3.10 2.75 2.80 3.10
Leite 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;
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.
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);
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;
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] then
begin
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;
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.
...