Soluções da aula prática 10



1.
PROGRAM Orden;

CONST N = 10;

Var ra: array[1..N] of real;
    i: integer;
    changed: boolean;
    temp: real;

begin
   (* pedir 10 numeros: *)
  for i := 1 to N do
    begin
      WriteLn('Numero ',i,':');
      ReadLn(ra[i]);
    end;
  changed := TRUE;
   (* continue ate nao houve mais mudancas: *)
  while changed do
    begin
      changed := FALSE;
      for i := 1 to N-1 do
          (* se ra[i] maior que ra[i+1] troca os dois *)
          (* e asinala que houve mudanca: *)
        if ra[i]>ra[i+1] then
          begin
            temp := ra[i];
            ra[i] := ra[i+1];
            ra[i+1] := temp;
            changed := TRUE;
          end;
    end;
  for i := 1 to N do
    Writeln(i,'  ',ra[i]:0:1);
end.



2.
PROGRAM Recs;

type rec =
  record
    numero: integer;
    div3: boolean;
  end;
Var ra: array[1..100] of rec;
    i: integer;
    totdiv3: integer;

begin
  for i := 1 to 100 do
    ra[i].numero := Random(101)+14;
  for i := 1 to 100 do
    if ((ra[i].numero MOD 3) = 0) then
      ra[i].div3 := TRUE
    else
      ra[i].div3 := FALSE;
  totdiv3 := 0;
  for i := 1 to 100 do
    if (ra[i].div3=TRUE)
      then totdiv3 := totdiv3+1;
  WriteLn(totdiv3);
end.



3.
PROGRAM Recs;

type rec =
  record
    nome: string;
    numero: longint;
  end;
Var ra: array[1..100] of rec;
    s: string;
    i: integer;

PROCEDURE Initialize;
begin
  ra[1].nome := 'Alex';
  ra[1].numero := 289123456;
  ra[2].nome := 'Sandra';
  ra[2].numero := 289234567;
  ra[3].nome := 'Joao';
  ra[3].numero := 289345678;
  ra[4].nome := 'Carla';
  ra[4].numero := 289456789;
  ra[5].nome := 'Hugo';
  ra[5].numero := 289567890;
end;

begin
  Initialize;
  Writeln('Diz um nome:');
  ReadLn(s);
  for i := 1 to 5 do
    if (ra[i].nome = s) then
      WriteLn('O numero do ', s, ' e ', ra[i].numero);
end.


4a.
PROGRAM Recs;

Var w: word;
    i: integer;
    wp: ^word;
    ip: ^integer;

begin
  i := -1;
  w := 1;
  wp := Addr(w);
  ip := Addr(i);
  WriteLn('ip: ', ip^);
  WriteLn('wp: ', wp^);
end.

output:

ip: -1
wp: 1

4b.
PROGRAM Recs;

Var w: word;
    i: integer;
    wp: ^word;
    ip: ^integer;

begin
  i := -1;
  w := 1;
  ip := Addr(w);
  wp := Addr(i);
  WriteLn('ip: ', ip^);
  WriteLn('wp: ', wp^);
end.

output:

ip: 1
wp: 65535

O programa do lado direito mostra que um integer com valor -1 é igual a 1111111111111111 binário, o que é igual a 65535 se for um word.
O conteúdo do um edereço depende do tipo de informação que fica lá.


5.
Veja aula teórica 20.