Tipos Definidos pelo Usuário


Introdução


Tipo Registro

tipo
   <registro> = registro
                  <campo1>: <tipo1>;
                  <campo2>: <tipo2>;
                  ...
                  <campoN>: <tipoN>;
                fim;
type
   <registro> = record
                  <campo1>: <tipo1>;
                  <campo2>: <tipo2>;
                  ...
                  <campoN>: <tipoN>;
                end;
type
   TipoAluno = record
                  Nome: string[30];
                  Matricula: string[8];
                  Media: real;
                  Frequencia: integer;
               end;
var
   Aluno: TipoAluno;
type
   TipoProfessor = record
                      Nome: string[30];
                      Codigo: string[8];
                      Salario: real;
                      Ingresso: string[8];
                   end;
var
   Prof: TipoProfessor;
program RelTurma;

type
  TipoAluno = record
                 Nome: string[30];
                 Matricula: string[8];
                 Media: real;
                 Frequencia: integer;
              end;

var
   Aluno: TipoAluno;
   Aprovados, 
   Reprovados : integer;

begin

   Aprovados := 0;
   Reprovados := 0;

   write('Nome:'); readln(Aluno.Nome);

   while Aluno.Nome <> 'fim' do
     begin
        write('Matricula:'); readln(Aluno.Matricula);
        write('Media:'); readln(Aluno.Media);
        write('Frequencia:'); readln(Aluno.Frequencia);

        if (Aluno.Media >= 7) and (Aluno.Frequencia >= 60) then
           Aprovados := Aprovados + 1
        else
           Reprovados := Reprovados + 1;

        write('Nome:'); readln(Aluno.Nome);
     end;

   writeln('Total de Aprovados:', Aprovados);
   writeln('Total de Reprovados:', Reprovados);
end.

Exercícios

44) Escreva um programa para ler os dados dos professores de um curso, a saber: nome, código, salário e ingresso. Exibir o número de professores com salário acima de R$ 500,00 e com ingresso após 01/01/2000.

45) Ajuste o algoritmo RelTurma de forma que: seja exibido o número de aprovados, reprovados por média, reprovados por falta e o cálculo da média da turma.

46) Escrever um programa para ler os dados dos atletas de um clube (nome, idade, sexo, altura e peso) e determinar o número de atletas (1) do sexo masculino com peso inferior a 80, (2) com mais de 25 anos com altura superior a 1,75 e (3) com altura entre 1,60 e 1,75 ou com peso superior a 55.

47) A firma de entrega de encomendas deseja identificar: (1) o maior nº de entregas efetuadas por um funcionário num dia de trabalho e (2) o menor tempo, em horas gasto por um funcionário para efetuar as entregas num dia de trabalho Para tanto, foi encomendado um algoritmo que lê (diariamente): o código do funcionário, o número de entregas efetuadas por este (funcionário) e o tempo gasto por este (funcionário) para efetuar as entregas.

48) Implementar programa correspondente à questão 45.


Tipo Vetor e Matriz

100 4 20 33 51
'A1' 'A2' 'A3'
'B1' 'B2' 'B3'
'C1' 'C2' 'C3'

Estrutura Tipo Vetor

type
   <ident> = array [1..N] of <Tipo>;
type
   TipoVetor = array [1..10] of integer;
var
   Vetor: TipoVetor;

Estrutura Tipo Matriz

type
   <ident> = array [1..L, 1..C] of <Tipo>;
type
   TipoMatriz = array [1..5, 1..12] of real;
   { Balanço anual de vendas de uma rede de lojas: 5 unidades x 12 meses }
var
   Matriz: TipoMatriz;
program MaiorQueMedia;

type
   TipoVetor = array [1..100] of real;

var
   Vetor: TipoVetor;
   N, I:  integer;
   Soma,
   Media: real;

begin
   Soma := 0;
   write('N:'); readln(N);

   for I := 1 to N do
     begin
        write('Vetor[', I, ']:'); readln(Vetor[I]);
        Soma := Soma + Vetor[I];
     end;

   Media := Soma / N;

   for I := 1 to N do
      if Vetor[I] > Media then
         writeln(Vetor[I]);
end.
program OrdenaPalavras;

type
   TipoVetor = array [1..30] of string[20];

var
   Vetor     : TipoVetor;
   I, N,
   Menor,
   Ordenadas : integer;
   Temp      : string[20];

begin
   write('N:'); readln(N);

   for I := 1 to N do
      readln(Vetor[I]);

   Ordenadas := 0;
   
   repeat
      inc(Ordenadas); { equivale a Ordenadas := Ordenadas + 1; }

      Menor := Ordenadas;          

      for I := Ordenadas + 1 to N do
         if (Vetor[I] < Vetor[Menor]) then
            Menor := I;

      Temp             := Vetor[Ordenadas];
      Vetor[Ordenadas] := Vetor[Menor];
      Vetor[Menor]     := Temp;
   until Ordenadas = N;   

   for I := 1 to N do
      writeln(Vetor[I]);
end.
    Arenoso Cimento Bloco Telha Tijolo ... Vetor Produtos
SE   200 80 250 300 20    
SP   20 150 700 500 5    
RJ   150 70 180 900 500    
...                
Vetor
Lojas
 

Matriz
Estoque

 

E definir:
a) estoque de um dado produto numa dada loja.
b) estoque de um dado produto.
c) estoque de uma dada loja.
d) loja em que um dado produto apresenta menor estoque.
e) produto com menor estoque em uma dada loja.

program RedeLojas;

type
   VetorProdutos = array[1..5] of string[10];
   VetorLojas = array[1..3] of string[2];
   MatrizEstoque = array[1..3, 1..5] of integer;

var
   Produtos: VetorProdutos;
   Lojas:    VetorLojas;
   Estoque:  MatrizEstoque;
   Produto:  string[10];
   Loja:     string[2];
   Quant, P,
   L, I, J:  integer;

begin
   { Leitura dos produtos }
   writeln('Digite os 5 produtos');
   for I := 1 to 5 do
      readln(Produtos[I]);

   { Leitura das lojas }
   writeln('Digite as 3 lojas');
   for I := 1 to 3 do
      readln(Lojas[I]);

   { Leitura do estoque por loja }
   writeln('Digite o estoque dos produtos por loja');
   for I := 1 to 3 do
     for J := 1 to 5 do
        readln(Estoque[I,J]);

   { Item A - estoque de um dado produto numa dada loja }
   write('Digite o produto:'); readln(Produto);
   for I := 1 to 5 do
      if Produtos[I] = Produto then
         P := I;
   write('Digite a loja:'); readln(Loja);
   for J := 1 to 3 do
      if Lojas[J] = Loja then
         L := J;
   writeln('Estoque do produto ', Produto, ' na loja ', Loja, ':', Estoque[L,P]);

   { Item B - estoque de um dado produto }
   write('Digite o produto:'); readln(Produto);
   for I := 1 to 5 do
      if Produtos[I] = Produto then
         P := I;
   Quant := 0;
   for J := 1 to 3 do
      Quant := Quant + Estoque[J,P];
   writeln('Estoque do produto ', Produto, ':', Quant);

   { Item C - estoque de uma dada loja }
   write('Digite a loja:'); readln(Loja);
   for J := 1 to 3 do
      if Lojas[J] = Loja then
         L := J;
   Quant := 0;
   for I :=  1 to 5 do
      Quant := Quant + Estoque[L,I];
   writeln('Estoque da loja ', Loja, ':', Quant);

   { Item D - loja em que um dado produto apresenta menor estoque }
   write('Digite o produto:'); readln(Produto);
   for I := 1 to 5 do
      if Produtos[I] = Produto then
         P := I;
   Quant := Estoque[1,P]; 
   L := 1;
   for J := 2 to 3 do
      if Estoque[J,P] < Quant then
         begin
            Quant := Estoque[J,P];
            L := J;
         end;
   writeln('Loja ', Lojas[L], ' tem o menor estoque (', Quant,
           ') do produto ', Produto);

   { Item E - produto com menor estoque em uma dada loja }
   write('Digite a loja:'); readln(Loja);
   for J := 1 to 3 do
      if Lojas[J] = Loja then
         L := J;
   Quant := Estoque[L,1];
   P := 1;
   for I := 2 to 5 do
      if Estoque[L,I] < Quant then
         begin
            Quant := Estoque[L,I];
            P := I;
         end;
   writeln('O produto ', Produtos[P], ' tem o menor estoque na loja ', Loja);
end.

Exercícios

49) Implementar um programa para ordenar números.

50) Implementar programa para ler nome e média dos alunos de uma turma e escrever a relação de estudantes com média superior ou igual à media da turma.

51) Implementar programa para criar as seguintes estruturas:

    Prova Seminário Exercícios Projeto Vetor Avaliação
Filosofia   10 9 9 8  
Psicologia   8 8 7 9  
Economia   10 10 5 2  
Administração   2 1 10 8  
História   6 6 9 4  
Vetor
Disciplinas
 

Matriz
Notas

 

E determinar:
a) a média em uma dada disciplina
b) a média em uma dada modalidade de avaliação
c) a média do aluno
d) a disciplina em que o aluno obteve maior nota em uma dada modalidade de avaliação