![]() Ласло Краус |
Програмирање I Допунски други колоквијум 10. 2. 2000 |
---|
Саставити на Pascal-у главни програм који прочита низ тачака, налази пар најближих тачака у низу, испише њихове координате и понавља претходне кораке све док за дужину низа не прочита недозвољену вредност.
Саставити на Pascal-у главни програм који прочита низ бројева и од њих направи листу уз очување редоследа читања, позива горњи потпрограм и исписше садржај добијених листи.
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}.
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}.
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}.
(садржај)
Copyright © 2001, Laslo Kraus
Последња ревизија: 10.12.2001.