Visa elektrotehnicka skola, Beograd
Ласло Краус
Програмирање I
Допунски други колоквијум
10. 2. 2000

Задаци: 1 2 3 | Напомене | Решења: 1 2 3

Поставка задатка 1 (50 поена) (решење | садржај)

Саставити на Pascal-у програмски модул који садржи потпрограме за израчунавање растојања између две тачке у простору и налажење пара најближих тачака у низу тачака у простору.

Саставити на Pascal-у главни програм који прочита низ тачака, налази пар најближих тачака у низу, испише њихове координате и понавља претходне кораке све док за дужину низа не прочита недозвољену вредност.

Поставка задатка 2 (50 поена) (решење | садржај)

Саставити на Pascal-у потрограм за формирање нове листе од оних елемената једноструко ланчане листе реалних бројева који садрже бројеве у средњој трећини опсега од најмање до највеће вредности у почетној листи. Користити постојеће елементе из почетне листе.

Саставити на Pascal-у главни програм који прочита низ бројева и од њих направи листу уз очување редоследа читања, позива горњи потпрограм и исписше садржај добијених листи.

Поставка задатка 3 (50 поена) (решење | садржај)

Секвенцијална бинарна датотека о међуградским аутобуским линијама са поласком из неког места за сваки полазак садржи датум поласка (велики децимални цео број по шеми ggggmmdd), време поласка (децимални цео број по шеми hhmm), одредиште (низ од највише 20 знакова), шифру превозника (низ од највише 6 знакова), број места у аутобусу (цео број) и број продатих карата (цео број). Саставити на Pascal-у програм за одређивање укупног броја превезених путника до задатог места по данима у току датог месеца дате године.

Напоменe (садржај)


Решење задатка 1 (поставка | садржај)

unit MTacka;

interface

  const NMax = 100;

  type  Tacka = record X, Y, Z: Real end;
        Niz   = array [1..NMax] of Tacka;

  function D (P, Q: Tacka): Real;
  procedure Najblize (A: Niz; N: Integer; var P, Q: Tacka);

implementation

  function D (P, Q: Tacka): Real;
  begin
    D := Sqrt ((P.X - Q.X)*(P.X - Q.X) +
               (P.Y - Q.Y)*(P.Y - Q.Y) +
               (P.Z - Q.Z)*(P.Z - Q.Z)  )
  end {function D};

  procedure Najblize (A: Niz; N: Integer; var P, Q: Tacka);
    var I, J: Integer; Min: Real;
  begin
    P := A[1]; Q := A[2]; Min := D (P, Q);
    for I := 1 to N-1 do
      for J := I+1 to n do
        if D (A[I], A[J]) < Min then begin
          P := A[I]; Q := A[J]; Min := D (P, Q)
        end
  end {procedure Najblize};

end {unit}.


program Tacke;

  uses MTacka;

  var   A:Niz; P,Q:Tacka; N,I:Integer;

begin {program}
  repeat
    Write ('Duzina niza? '); ReadLn (N);
  if (N > 0) and (N <= NMax) then begin
    for I := 1 to N do begin
      Write('Tacka ',I,'? '); with A[I] do ReadLn (X, Y, Z);
    end {for};
    Najblize (A, N, P, Q);
    Write ('Najblize tacke su ');
    with P do Write   ('(', X:4:2, ',', Y:4:2, ',', Z:4:2, ') i ');
    with Q do WriteLn ('(', X:4:2, ',', Y:4:2, ',', Z:4:2, ')');
  end until (N <= 0) or (N > MaxN);
end {program}.

Решење задатка 2 (поставка | садржај)

program Liste;

  type Pok = ^Elem;
       Elem = record
         Broj: Real; Sled: Pok;
       end {record};

  var  L, S, Novi, Posl: Pok;
       I, N: Integer;

  procedure Srednji (var L, S: Pok);
    var Tek, Preth, Posl: Pok;
        Min, Max, D, G: Real;
  begin
    S := nil;
    if L <> nil then begin
      Min := L^.Broj; Max := Min;
      Tek := L^.Sled;
      while Tek <> nil do begin
        if       Tek^.Broj < Min then Min := Tek^.Broj
        else if  Tek^.Broj > Max then Max := Tek^.Broj;
        Tek := Tek^.Sled;
      end {while};
      D := (2 * Min + Max) / 3;
      G := (Min + 2 * Max) / 3;
      Tek := L; Preth := nil;
      while Tek <> nil do begin
        if (T^.Broj<G)or(T^.Broj>D) then
        begin
          Preth := Tek; Tek := Tek^.Sled
        end else begin
          if S     = nil then S := Tek else Posl ^.Sled := Tek;
          Posl := Tek;
          Tek  := Tek^.Sled;
          if Preth = nil then L := Tek else Preth^.Sled := Tek;
          Posl^.Sled := nil
        end {if}
      end {while}
    end {if}
  end {procedure Srednji};

begin {program}
  Write ('Duzina niza? '); ReadLn (N);
  Write ('Elementi niza? '); L := nil; Posl := nil;
  for I := 1 to N do begin
    New (Novi); Read (Novi^.Broj); Novi^.Sled := nil;
    if L = nil then L := Novi else Posl^.Sled := Novi;
    Posl := Novi;
  end;
  Srednji (L, S);
  Write ('Srednji: '); Posl := S;
  while Posl <> nil do begin
    Write (' ', Posl^.Broj); Posl := Posl^.Sled;
  end; WriteLn;
  Write ('Ostali:'); Posl := L;
  while Posl <> nil do begin
    Write (' ', Posl^.Broj); Posl := Posl^.Sled;
  end; WriteLn;
end {program}.

Решење задатка 3 (поставка | садржај)

program Autobusi;

  type  Zapis = record
          Datum: LongInt;
          Vreme: Integer;
          Odrediste: string[20];
          Prevoznik: string[6];
          Kapacitet, Prodato: Integer;
        end {record};

  var Dat: file of Zapis; Polazak: Zapis;
      Odr: string[20]; Mes, God: Integer;
      Uk : array [1..31] of Integer;
      I  : Integer;

begin {program}
  Write ('Odrediste? ');      ReadLn(Odr);
  Write ('Mesec i godina? '); ReadLn (Mes, God);
  for I := 1 to 31 do Uk[I] := 0;
  Assign(Dat,'Polasci.dat'); Reset(Dat);
  while not Eof (Dat) do begin
    Read (Dat, Polazak);
    with Polazak do
      if (Odrdediste = Odr) and (Datum div 100 = God*100 + Mes)
        then Inc (Uk[Datum mod 100], Prodato)
  end {while}
  Close (Dat);
  for I := 1 to 31
    if Uk[I] <> 0 then WriteLn (I, '. dana: ', Uk[I])
end {program}.
(садржај)
         
Аутор: Ласло Краус
Е-пошта: kraus@etf.rs

Copyright © 2001, Laslo Kraus
Последња ревизија: 10.12.2001.