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.
 

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.

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:
 
 
A =   2  4  6 
 1  5  9 
 3   7  2 
 4   6  8 
B =   2  5  8 
 1  9  7 
 3  7  1 
 4  5  8 
C =   true  false false 
 true  false false 
 true  true  false 
 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.



 

Dúvidas, críticas, sugestões??? Clique aqui.