![]() Ласло Краус |
Програмирање I Допунски други колоквијум 10. 2. 1999 |
---|
Саставити главни програм на Pascal-у који чита низове комплексних бројева, уреди их по неопадајућем редоследу апсолутних вредности и исписује уређени низ, све док за дужину низа не прочита недозвољену вредност. Комплексни бројеви са једнаким апсолутним вредностима треба да су уређени по неопадајућем редоследу њихових аргумената.
Саставити главни програм на Pascal-у који, коришћењем горњих потпрограма, прочита један низ бројева стављајући их у ред за чекање и после испише тај низ узимајући бројеве из реда.
unit MKompl;
interface
type Kompl = record X, Y: Real end;
procedure Citaj (var Z: Kompl);
function Aps (Z: Kompl): Real;
function Arg (Z: Kompl): Real;
procedure Pisi (Z: Kompl);
implementation
procedure Citaj (var Z: Kompl);
begin
with Z do ReadLn (X, Y);
end {procedure Citaj};
function Aps (Z: Kompl): Real;
begin
with Z do Aps := Sqrt (X*X + Y*Y);
end {function Aps};
function Arg (Z: Kompl): Real;
var A: Real;
begin
with Z do begin
if X <> 0 then begin
A := ArcTan (Y / X);
if X < 0 then
if Y >= 0 then A := A + Pi
else A := A - Pi
end else
if Y > 0 then A := Pi / 2
else if Y < 0 then A := - Pi / 2
else A := 0
end {with};
Arg := A
end {function Arg};
procedure Pisi (Z: Kompl);
begin
with Z do begin
Write (X:4:2);
if Y < 0 then Write ('-')
else Write ('+');
WriteLn (Abs(Y):4:2);
end {with};
end {procedure Pisi};
end {unit}.
program KopleksniBrojevi;
uses MKompl;
const MaxN = 100;
var A: array [1..MaxN] of Kompl;
Z: Kompl;
N, I, J: Integer;
begin {program}
repeat
Write ('Duzina niza? '); ReadLn (N);
if (N > 0) and (N <= MaxN) then begin
for I := 1 to N do begin
Write('A[',I,']? '); Citaj(A[I]);
end {for};
for I := 2 to N do begin
Z := A[I]; J := I - 1;
while (J > 0) and
((Aps(Z) < Aps(A[J]) or
(Aps(Z) = Aps(A[J]) and (Arg(Z) < Arg(A[J]) ) do begin
A[J+1] := A[J]; J := J - 1;
end {while};
A[J+1] := Z;
end {for};
for I := 1 to N do begin
Write('A[', I, ']= '); Pisi(A[I]);
end {for};
end until (N <= 0) or (N > MaxN);
end {program}.
program Redovi;
type Pok = ^Elem;
Elem = record
Broj: Integer;
Sled: Pok;
end {record};
Red = record Prvi, Posl: Pok end;
const L: Red = (Prvi:0; Posl:0);
var B: Real;
N, I: Integer;
procedure Stavi (var R: Red; B: Real);
var Novi: Pok;
begin
New (Novi);
Novi^.Broj := B; Novi^.Sled := nil;
with R do begin
if Prvi = nil then Prvi := Novi
else Posl^.Sled := Novi;
Posl := Novi;
end {with};
end {procedure Stavi};
function Uzmi (var R: Red): Real;
var Stari: Pok;
begin
with R do begin
if Prvi = nil then Halt;
Uzmi := Prvi^.Broj;
Stari := Prvi;
Prvi := Prvi^.Sled;
Dispose (Stari);
if Prvi = nil then Posl := nil;
end {with};
end {function Uzmi};
begin {program}
Write ('Duzina niza? '); ReadLn (N);
Write ('Elementi niza? ');
for I := 1 to N do begin Read (B); Stavi (R, B); end {for};
Write ('Procitano: ');
While (R^.Prvi <> nil) do Write (Uzmi(R), ' ');
WriteLn;
end {program}.
program Knjige;
const Min = 1901; Max = 2000;
type Period = Min .. Max;
Zapis = record
Autor: string[20];
Naslov: string[40];
Strane: 0..1000;
Izdavac: string[30];
Mesto: string[16];
Godina: Period;
Ime: string[32];
end {record};
var Dat: file of Zapis;
Knjiga: Zapis;
Broj: array [Period] of Integer;
I: Period;
begin {program}
Assign(Dat,'Knjige.dat'); Reset(Dat);
for I := Min to Max do Broj[I] := 0;
while not Eof (Dat) do begin
Read (Dat, Knjiga);
Inc (Broj[Knjiga.Godina]);
end {while};
for I := Min to Max do if Broj[I] > 0 then WriteLn (I:4, Broj[I]:4);
end {program}.
(садржај)
Copyright © 1999, Laslo Kraus
Последња ревизија: 6.2.1999.